From 762b96c37a1f876fdfc020cc672b9a4b80cbfdd8 Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期五, 25 十月 2024 16:47:11 +0800
Subject: [PATCH] 新增配方记录功能并优化相关实体和VO

---
 /dev/null  | 12304 -------------------------------------------------------
 .gitignore |   41 
 LICENSE    |  232 
 README.md  |  628 +-
 4 files changed, 595 insertions(+), 12,610 deletions(-)

diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index dccf841..0000000
--- a/.editorconfig
+++ /dev/null
@@ -1,19 +0,0 @@
-root = true
-
-[*]
-charset=utf-8
-end_of_line=lf
-insert_final_newline=true
-indent_style=space
-indent_size=2
-max_line_length = 100
-
-[*.{yml,yaml,json}]
-indent_style = space
-indent_size = 2
-
-[*.md]
-trim_trailing_whitespace = false
-
-[Makefile]
-indent_style = tab
diff --git a/.env b/.env
deleted file mode 100644
index a2cd447..0000000
--- a/.env
+++ /dev/null
@@ -1,22 +0,0 @@
-# port
-VITE_PORT = 3100
-
-#  缃戠珯鏍囬
-VITE_GLOB_APP_TITLE = 鍏版郸鏅鸿兘绉戞妧
-
-# 绠�绉帮紝鐢ㄤ簬閰嶇疆鏂囦欢鍚嶅瓧 涓嶈鍑虹幇绌烘牸銆佹暟瀛楀紑澶寸瓑鐗规畩瀛楃
-VITE_GLOB_APP_SHORT_NAME = JeecgBootAdmin
-
-# 鍗曠偣鐧诲綍鏈嶅姟绔湴鍧�
-VITE_GLOB_APP_CAS_BASE_URL=http://cas.test.com:8443/cas
-
-# 鏄惁寮�鍚崟鐐圭櫥褰�
-VITE_GLOB_APP_OPEN_SSO = false
-
-# 寮�鍚井鍓嶇妯″紡
-VITE_GLOB_APP_OPEN_QIANKUN=true
-
-# 鏂囦欢棰勮鍦板潃
-VITE_GLOB_ONLINE_VIEW_URL=http://fileview.jeecg.com/onlinePreview
-
-
diff --git a/.env.development b/.env.development
deleted file mode 100644
index 8999449..0000000
--- a/.env.development
+++ /dev/null
@@ -1,23 +0,0 @@
-# 鏄惁鎵撳紑mock
-VITE_USE_MOCK = true
-
-# 鍙戝竷璺緞
-VITE_PUBLIC_PATH = /
-
-# 璺ㄥ煙浠g悊锛屾偍鍙互閰嶇疆澶氫釜 ,璇锋敞鎰忥紝娌℃湁鎹㈣绗�
-VITE_PROXY = [["/herb","http://jeecg-boot-gateway:9999"],["/upload","http://localhost:3300/upload"]]
-
-# 鎺у埗鍙颁笉杈撳嚭
-VITE_DROP_CONSOLE = false
-
-#鍚庡彴鎺ュ彛鐖跺湴鍧�(蹇呭~)
-VITE_GLOB_API_URL=/herb
-
-#鍚庡彴鎺ュ彛鍏ㄨ矾寰勫湴鍧�(蹇呭~)
-VITE_GLOB_DOMAIN_URL=http://jeecg-boot-gateway:9999
-
-# 鎺ュ彛鍓嶇紑
-VITE_GLOB_API_URL_PREFIX=
-
-#寰墠绔痲iankun搴旂敤,鍛藉悕蹇呴』浠ITE_APP_SUB_寮�澶�,jeecg-app-1涓哄瓙搴旂敤鐨勯」鐩悕绉�,涔熸槸瀛愬簲鐢ㄧ殑璺敱鐖惰矾寰�
-VITE_APP_SUB_jeecg-app-1 = '//localhost:8092'
diff --git a/.env.production b/.env.production
deleted file mode 100644
index be4611d..0000000
--- a/.env.production
+++ /dev/null
@@ -1,34 +0,0 @@
-# 鏄惁鍚敤mock
-VITE_USE_MOCK = true
-
-# 鍙戝竷璺緞
-VITE_PUBLIC_PATH = /
-
-# 鎺у埗鍙颁笉杈撳嚭
-VITE_DROP_CONSOLE = true
-
-# 鏄惁鍚敤gzip鎴朾rotli鍘嬬缉
-# 閫夐」鍊�: gzip | brotli | none
-# 濡傛灉闇�瑕佸涓彲浠ヤ娇鐢ㄢ��,鈥濆垎闅�
-VITE_BUILD_COMPRESS = 'gzip'
-
-# 浣跨敤鍘嬬缉鏃舵槸鍚﹀垹闄ゅ師濮嬫枃浠讹紝榛樿涓篺alse
-VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
-
-#鍚庡彴鎺ュ彛鐖跺湴鍧�(蹇呭~)
-VITE_GLOB_API_URL=/herb
-
-#鍚庡彴鎺ュ彛鍏ㄨ矾寰勫湴鍧�(蹇呭~)
-VITE_GLOB_DOMAIN_URL=http://jeecg-boot-gateway:9999
-
-# 鎺ュ彛鐖惰矾寰勫墠缂�
-VITE_GLOB_API_URL_PREFIX=
-
-# 鏄惁鍚敤鍥惧儚鍘嬬缉
-VITE_USE_IMAGEMIN= true
-
-# 浣跨敤pwa
-VITE_USE_PWA = false
-
-# 鏄惁鍏煎鏃ф祻瑙堝櫒
-VITE_LEGACY = false
diff --git a/.env.test b/.env.test
deleted file mode 100644
index 4fbb177..0000000
--- a/.env.test
+++ /dev/null
@@ -1,34 +0,0 @@
-# 鏄惁鍚敤mock
-VITE_USE_MOCK = true
-
-# 鍙戝竷璺緞
-VITE_PUBLIC_PATH = /
-
-# 鎺у埗鍙颁笉杈撳嚭
-VITE_DROP_CONSOLE = true
-
-# 鏄惁鍚敤gzip鎴朾rotli鍘嬬缉
-# 閫夐」鍊�: gzip | brotli | none
-# 濡傛灉闇�瑕佸涓彲浠ヤ娇鐢ㄢ��,鈥濆垎闅�
-VITE_BUILD_COMPRESS = 'gzip'
-
-# 浣跨敤鍘嬬缉鏃舵槸鍚﹀垹闄ゅ師濮嬫枃浠讹紝榛樿涓篺alse
-VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
-
-#鍚庡彴鎺ュ彛鐖跺湴鍧�(蹇呭~)
-VITE_GLOB_API_URL=/herb
-
-#鍚庡彴鎺ュ彛鍏ㄨ矾寰勫湴鍧�(蹇呭~)
-VITE_GLOB_DOMAIN_URL=http://localhost:8080/jeecg-boot
-
-# 鎺ュ彛鐖惰矾寰勫墠缂�
-VITE_GLOB_API_URL_PREFIX=
-
-# 鏄惁鍚敤鍥惧儚鍘嬬缉
-VITE_USE_IMAGEMIN= true
-
-# 浣跨敤pwa
-VITE_USE_PWA = false
-
-# 鏄惁鍏煎鏃ф祻瑙堝櫒
-VITE_LEGACY = false
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index 348631b..0000000
--- a/.eslintignore
+++ /dev/null
@@ -1,15 +0,0 @@
-
-*.sh
-node_modules
-*.md
-*.woff
-*.ttf
-.vscode
-.idea
-dist
-/public
-/docs
-.husky
-.local
-/bin
-Dockerfile
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index ca869fe..0000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,78 +0,0 @@
-// @ts-check
-const { defineConfig } = require('eslint-define-config')
-module.exports = defineConfig({
-	root: true,
-	env: {
-		browser: true,
-		node: true,
-		es6: true,
-	},
-	parser: 'vue-eslint-parser',
-	parserOptions: {
-		parser: '@typescript-eslint/parser',
-		ecmaVersion: 2020,
-		sourceType: 'module',
-		jsxPragma: 'React',
-		ecmaFeatures: {
-			jsx: true,
-		},
-	},
-	extends: [
-		'plugin:vue/vue3-recommended',
-		'plugin:@typescript-eslint/recommended',
-		'prettier',
-		'plugin:prettier/recommended',
-		'plugin:jest/recommended',
-	],
-	rules: {
-		'vue/script-setup-uses-vars': 'error',
-		'@typescript-eslint/ban-ts-ignore': 'off',
-		'@typescript-eslint/explicit-function-return-type': 'off',
-		'@typescript-eslint/no-explicit-any': 'off',
-		'@typescript-eslint/no-var-requires': 'off',
-		'@typescript-eslint/no-empty-function': 'off',
-		'vue/custom-event-name-casing': 'off',
-		'no-use-before-define': 'off',
-		'@typescript-eslint/no-use-before-define': 'off',
-		'@typescript-eslint/ban-ts-comment': 'off',
-		'@typescript-eslint/ban-types': 'off',
-		'@typescript-eslint/no-non-null-assertion': 'off',
-		'@typescript-eslint/explicit-module-boundary-types': 'off',
-		'@typescript-eslint/no-unused-vars': [
-			'error',
-			{
-				argsIgnorePattern: '^_',
-				varsIgnorePattern: '^_',
-			},
-		],
-		'no-unused-vars': [
-			'error',
-			{
-				argsIgnorePattern: '^_',
-				varsIgnorePattern: '^_',
-			},
-		],
-		'space-before-function-paren': 'off',
-
-		'vue/attributes-order': 'off',
-		'vue/one-component-per-file': 'off',
-		'vue/html-closing-bracket-newline': 'off',
-		'vue/max-attributes-per-line': 'off',
-		'vue/multiline-html-element-content-newline': 'off',
-		'vue/singleline-html-element-content-newline': 'off',
-		'vue/attribute-hyphenation': 'off',
-		'vue/require-default-prop': 'off',
-		'vue/html-self-closing': [
-			'error',
-			{
-				html: {
-					void: 'always',
-					normal: 'never',
-					component: 'always',
-				},
-				svg: 'always',
-				math: 'always',
-			},
-		],
-	},
-})
diff --git a/.gitignore b/.gitignore
index 08cb379..e79e3bb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,37 +1,14 @@
-node_modules
-.DS_Store
-.github
-dist
-.npmrc
-.cache
+## ide
+**/.idea
+*.iml
+rebel.xml
 
-tests/server/static
-tests/server/static/upload
+## backend
+**/target
+**/logs
 
-.local
-# local env files
-.env.local
-.env.*.local
-.eslintcache
-
-# Log files
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-
-# Editor directories and files
-.idea
-# .vscode
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
-/os_del.cmd
-/.vscode/
-/.history/
-/svn clear.bat
+## front
+**/*.lock
 
 
 /target/
diff --git a/.gitpod.yml b/.gitpod.yml
deleted file mode 100644
index 2191895..0000000
--- a/.gitpod.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-ports:
-  - port: 3344
-    onOpen: open-preview
-tasks:
-  - init: yarn
-    command: yarn dev
diff --git a/.prettierignore b/.prettierignore
deleted file mode 100644
index f7e39e6..0000000
--- a/.prettierignore
+++ /dev/null
@@ -1,9 +0,0 @@
-/dist/*
-.local
-.output.js
-/node_modules/**
-
-**/*.svg
-**/*.sh
-
-/public/*
diff --git a/.stylelintignore b/.stylelintignore
deleted file mode 100644
index 0517076..0000000
--- a/.stylelintignore
+++ /dev/null
@@ -1,3 +0,0 @@
-/dist/*
-/public/*
-public/*
diff --git a/.yarnclean b/.yarnclean
deleted file mode 100644
index 3e556ef..0000000
--- a/.yarnclean
+++ /dev/null
@@ -1,48 +0,0 @@
-# test directories
-__tests__
-test
-tests
-powered-test
-
-# asset directories
-docs
-doc
-website
-images
-assets
-
-# examples
-example
-examples
-
-# code coverage directories
-coverage
-.nyc_output
-
-# build scripts
-Makefile
-Gulpfile.js
-Gruntfile.js
-
-# configs
-appveyor.yml
-circle.yml
-codeship-services.yml
-codeship-steps.yml
-wercker.yml
-.tern-project
-.gitattributes
-.editorconfig
-.*ignore
-.eslintrc
-.jshintrc
-.flowconfig
-.documentup.json
-.yarn-metadata.json
-.travis.yml
-
-# misc
-*.md
-
-!istanbul-reports/lib/html/assets
-!istanbul-api/node_modules/istanbul-reports/lib/html/assets
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index e9b4a79..0000000
--- a/Dockerfile
+++ /dev/null
@@ -1,30 +0,0 @@
-FROM nginx
-MAINTAINER bsw
-VOLUME /tmp
-ENV LANG en_US.UTF-8
-RUN echo "server {  \
-      listen       80; \
-      location   /herb/ { \
-        proxy_pass              http://jeecg-boot-gateway:9999/; \
-        proxy_redirect          off; \
-        proxy_set_header        Host jeecg-boot-gateway; \
-        proxy_set_header        X-Real-IP \$remote_addr; \
-        proxy_set_header        X-Forwarded-For \$proxy_add_x_forwarded_for; \
-      } \
-      #瑙e喅Router(mode: 'history')妯″紡涓嬶紝鍒锋柊璺敱鍦板潃涓嶈兘鎵惧埌椤甸潰鐨勯棶棰� \
-      location / { \
-        root   /var/www/html/; \
-        index  index.html index.htm; \
-        if (!-e \$request_filename) { \
-          rewrite ^(.*)\$ /index.html?s=\$1 last; \
-          break; \
-        } \
-      } \
-      access_log  /var/log/nginx/access.log ; \
-    } " > /etc/nginx/conf.d/default.conf \
-    &&  mkdir  -p  /var/www \
-    &&  mkdir -p /var/www/html
-
-ADD dist/ /var/www/html/
-EXPOSE 80
-EXPOSE 443
diff --git a/LICENSE b/LICENSE
index f66580b..0848ca2 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,36 +1,212 @@
-MIT License
+    Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
 
-Copyright (c) 2020-present, Jeecg
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+   1. Definitions.
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
 
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
 
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
 
-<developers>
-  <developer>
-    <name>鍖椾含鏁叉暡浜戠鎶�鏈夐檺鍏徃</name>
-    <email>jeecgos@163.com</email>
-  </developer>
-</developers>
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
 
-<scm>
-  <connection>http://www.jeecg.com</connection>
-  <developerConnection>https://qiaoqiaoyun.com</developerConnection>
-  <url>http://www.jeecg.com/vip</url>
-</scm>
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright (c) 2019 <a href="http://www.jeecg.com">Jeecg Boot</a> All rights reserved.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+   In any case, you must not make any such use of this software as to develop software which may be considered competitive with this software.
+
+  寮�婧愬崗璁ˉ鍏�
+    JeecgBoot 鏄敱 鍖椾含鍥界偓淇℃伅鎶�鏈湁闄愬叕鍙� 鍙戣鐨勮蒋浠躲�� 鎬婚儴浣嶄簬鍖椾含锛屽湴鍧�锛氫腑鍥铰峰寳浜锋湞闃冲尯绉戣崯鍓嶈1鍙烽櫌濂ユ灄浣虫嘲澶у帵銆傞偖绠憋細jeecgos@163.com
+    鏈蒋浠跺彈閫傜敤鐨勫浗瀹惰蒋浠惰憲浣滄潈娉曪紙鍖呮嫭鍥介檯鏉$害锛夊拰鍙岄噸淇濇姢璁稿彲銆�
+
+   1.鍏佽鍩轰簬鏈钩鍙拌蒋浠跺紑灞曚笟鍔$郴缁熷紑鍙戙��
+   2.涓嶅緱鍩轰簬璇ュ钩鍙拌蒋浠剁殑鍩虹锛屼慨鏀瑰寘瑁呮垚涓�涓笌JeecgBoot骞冲彴杞欢鍔熻兘绫讳技鐨勪骇鍝佽繘琛屽彂甯冦�侀攢鍞紝鎴栦笌JeecgBoot鍙備笌鍚岀被杞欢浜у搧甯傚満鐨勭珵浜夈��
+	 杩濆弽姝ゆ潯娆惧睘浜庝镜鏉冭涓猴紝椤昏禂鍋夸镜鏉冪粡娴庢崯澶憋紝鍚屾椂绔嬪嵆鍋滄钁椾綔鏉冧镜鏉冭涓恒��
+	 瑙i噴鏉冨綊锛歨ttp://www.jeecg.com
diff --git a/README.md b/README.md
index f618863..c72dc7f 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,14 @@
-JEECG BOOT 浣庝唬鐮佸紑鍙戝钩鍙帮紙Vue3鍓嶇锛�
+
+
+![JEECG](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/logov3.png "JeecgBoot浣庝唬鐮佸紑鍙戝钩鍙�")
+
+
+
+JEECG BOOT 浣庝唬鐮佸紑鍙戝钩鍙�
 ===============
-褰撳墠鏈�鏂扮増鏈細 3.5.0锛堝彂甯冩椂闂达細2023-03-08锛�
+
+褰撳墠鏈�鏂扮増鏈細 3.5.0锛堝彂甯冩棩鏈燂細2023-03-08锛� 
+
 
 [![AUR](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE)
 [![](https://img.shields.io/badge/Author-鍖椾含鏁叉暡浜戠鎶�-orange.svg)](http://www.jeecg.com)
@@ -11,201 +19,306 @@
 
 
 
-## 绠�浠�
-JeecgBoot-Vue3閲囩敤 Vue3.0銆乂ite銆� Ant-Design-Vue3銆乀ypeScript 绛夋柊鎶�鏈柟妗堬紝鍖呮嫭浜屾灏佽缁勪欢銆乽tils銆乭ooks銆佸姩鎬佽彍鍗曘�佹潈闄愭牎楠屻�佹寜閽骇鍒潈闄愭帶鍒剁瓑鍔熻兘銆�
-鏄噰鐢╒ben瀹炵幇鐨� JeecgBoot浣庝唬鐮佸钩鍙扮殑鍏ㄦ柊vue3鐗堟湰銆�
- 
-> 寮哄ぇ鐨勪唬鐮佺敓鎴愬櫒璁╁墠鍚庣浠g爜涓�閿敓鎴�! JeecgBoot寮曢浣庝唬鐮佸紑鍙戞ā寮�(OnlineCoding-> 浠g爜鐢熸垚-> 鎵嬪伐MERGE)锛� 甯姪瑙e喅Java椤圭洰70%鐨勯噸澶嶅伐浣滐紝璁╁紑鍙戞洿澶氬叧娉ㄤ笟鍔°�傛棦鑳藉揩閫熸彁楂樻晥鐜囷紝鑺傜渷鎴愭湰锛屽悓鏃跺張涓嶅け鐏垫椿鎬�
+椤圭洰浠嬬粛
+-----------------------------------
 
-## 鎶�鏈敮鎸�
+<h3 align="center">Java Low Code Platform for Enterprise web applications</h3>
 
-鍏抽棴Gitee鐨刬ssue閫氶亾锛屼娇鐢ㄤ腑閬囧埌闂鎴栬�匓UG鍙互鍦� [Github涓婃彁Issues](https://github.com/jeecgboot/jeecgboot-vue3/issues/new)
+JeecgBoot 鏄竴娆惧熀浜庝唬鐮佺敓鎴愬櫒鐨刞浣庝唬鐮佸紑鍙戝钩鍙癭锛佸墠鍚庣鍒嗙鏋舵瀯 SpringBoot2.x锛孲pringCloud锛孉nt Design&Vue锛孧ybatis-plus锛孲hiro锛孞WT锛屾敮鎸佸井鏈嶅姟銆傚己澶х殑浠g爜鐢熸垚鍣ㄨ鍓嶅悗绔唬鐮佷竴閿敓鎴愶紝瀹炵幇浣庝唬鐮佸紑鍙�!  JeecgBoot 寮曢鏂扮殑浣庝唬鐮佸紑鍙戞ā寮�(OnlineCoding-> 浠g爜鐢熸垚鍣�-> 鎵嬪伐MERGE)锛� 甯姪瑙e喅Java椤圭洰70%鐨勯噸澶嶅伐浣滐紝璁╁紑鍙戞洿澶氬叧娉ㄤ笟鍔°�傛棦鑳藉揩閫熸彁楂樻晥鐜囷紝鑺傜渷鐮斿彂鎴愭湰锛屽悓鏃跺張涓嶅け鐏垫椿鎬э紒
 
-瀹樻柟鏀寔锛� http://jeecg.com/doc/help
+JeecgBoot 鎻愪緵浜嗕竴绯诲垪`浣庝唬鐮佹ā鍧梎锛屽疄鐜板湪绾垮紑鍙慲鐪熸鐨勯浂浠g爜`锛歄nline琛ㄥ崟寮�鍙戙�丱nline鎶ヨ〃銆佹姤琛ㄩ厤缃兘鍔涖�佸湪绾垮浘琛ㄨ璁°�佸ぇ灞忚璁°�佺Щ鍔ㄩ厤缃兘鍔涖�佽〃鍗曡璁″櫒銆佸湪绾胯璁℃祦绋嬨�佹祦绋嬭嚜鍔ㄥ寲閰嶇疆銆佹彃浠惰兘鍔涳紙鍙彃鎷旓級绛夌瓑锛�
 
 
-## 婧愮爜涓嬭浇
+`JEECG瀹楁棬鏄�:` 绠�鍗曞姛鑳界敱OnlineCoding閰嶇疆瀹炵幇锛屽仛鍒癭闆朵唬鐮佸紑鍙慲锛涘鏉傚姛鑳界敱浠g爜鐢熸垚鍣ㄧ敓鎴愯繘琛屾墜宸erge 瀹炵幇`浣庝唬鐮佸紑鍙慲锛屾棦淇濊瘉浜哷鏅鸿兘`鍙堝吋椤綻鐏垫椿`锛涘疄鐜颁簡浣庝唬鐮佸紑鍙戠殑鍚屾椂鍙堟敮鎸佺伒娲荤紪鐮侊紝瑙e喅浜嗗綋鍓嶄綆浠g爜浜у搧鏅亶涓嶇伒娲荤殑寮婄锛�
 
-- 鍚庡彴婧愮爜 锛歨ttps://github.com/jeecgboot/jeecg-boot
-- 鍓嶇婧愮爜 锛歨ttps://github.com/jeecgboot/jeecgboot-vue3
+`JEECG涓氬姟娴佺▼:` 閲囩敤宸ヤ綔娴佹潵瀹炵幇銆佹墿灞曞嚭浠诲姟鎺ュ彛锛屼緵寮�鍙戠紪鍐欎笟鍔¢�昏緫锛岃〃鍗曟彁渚涘绉嶈В鍐虫柟妗堬細 琛ㄥ崟璁捐鍣ㄣ�乷nline閰嶇疆琛ㄥ崟銆佺紪鐮佽〃鍗曘�傚悓鏃跺疄鐜颁簡娴佺▼涓庤〃鍗曠殑鍒嗙璁捐锛堟澗鑰﹀悎锛夈�佸苟鏀寔浠诲姟鑺傜偣鐏垫椿閰嶇疆锛屾棦淇濊瘉浜嗗叕鍙告祦绋嬬殑淇濆瘑鎬э紝鍙堝噺灏戜簡寮�鍙戜汉鍛樼殑宸ヤ綔閲忋��
+
+
+婧愮爜涓嬭浇
+-----------------------------------
+
+| 婧愮爜                | 婧愮爜鍦板潃                     | 
+|--------------------|------------------------|
+| 鍚庡彴婧愮爜 JAVA   | https://github.com/jeecgboot/jeecg-boot        |
+| 鍓嶇婧愮爜 `Vue3鐗坄 | https://github.com/jeecgboot/jeecgboot-vue3 |
+| APP閰嶅妗嗘灦 | https://github.com/jeecgboot/jeecg-uniapp |
+
+#####  蹇�熸惌寤哄紑鍙戠幆澧�
+
+- [閫氳繃IDEA鍚姩鍓嶅悗绔」鐩甝(http://doc.jeecg.com/2043874)
+- [Vue3鍓嶇椤圭洰蹇�熷惎鍔╙(http://vue3.jeecg.com/2398848)
+- [鍗曚綋蹇�熷垏鎹负寰湇鍔$増](http://doc.jeecg.com/3043471)
 
 ##### 椤圭洰璇存槑
 
 | 椤圭洰鍚�                | 璇存槑                     | 
 |--------------------|------------------------|
-| `jeecgboot-vue3` | Vue3鐗堝墠绔唬鐮� | 
-| `jeecg-boot`    | SpringBoot鍚庡彴椤圭洰锛堟敮鎸佸井鏈嶅姟锛�        | 
+| `jeecg-boot`    | SpringBoot鍚庡彴婧愮爜锛堟敮鎸佸井鏈嶅姟锛�        |
+| `jeecgboot-vue3` | Vue3+TS 鏂扮増鍓嶇婧愮爜 |
+| `jeecg-uniapp` | APP寮�鍙戞鏋讹紝涓�浠戒唬鐮佸缁堢閫傞厤锛屽悓鏃舵敮鎸丄PP銆佸皬绋嬪簭銆丠5 |
+| `jeecg-boot-starter` | [Stater渚濊禆椤圭洰鍗曠嫭缁存姢锛岀偣鍑讳笅杞絔(https://gitee.com/jeecg/jeecg-boot-starter) |
+| `鏇村寮�婧愭彃浠禶 | [鏇村婧愮爜涓嬭浇](https://github.com/jeecgboot) |
 
 
-## 鎶�鏈枃妗�
-
--   瀹樻柟鏂囨。锛歔http://vue3.jeecg.com](http://vue3.jeecg.com)
--   瀹樻柟缃戠珯锛� [http://www.jeecg.com](http://www.jeecg.com)
--   鍦ㄧ嚎婕旂ず锛歔浣庝唬鐮佹紨绀篯(http://boot3.jeecg.com) | [鏁叉暡浜戦浂浠g爜](https://www.qiaoqiaoyun.com)
--   蹇�熷叆闂細[甯歌闂](http://vue3.jeecg.com/2426559) | [鍏ラ棬瑙嗛](https://www.bilibili.com/video/BV1V34y187Y9 "鍏ラ棬瑙嗛") |  [ 浠g爜鐢熸垚](http://vue3.jeecg.com/2677352)
--   QQ浜ゆ祦缇わ細683903138
-
-## 瀹夎涓庝娇鐢�
 
 
- > 鐜瑕佹眰: 鐗堟湰瑕佹眰Node 14.18+ / 16+ 鐗堟湰浠ヤ笂锛屼笉鍐嶆敮鎸� Node 12 / 13 / 15銆�
- > 寤鸿浣跨敤pnpm锛屽鏋滀娇鐢▂arn,璇风敤Yarn1.x鐗堟湰锛屽惁鍒欎緷璧栧彲鑳藉畨瑁呬笉涓娿��
 
-  
-- Get the project code
+鎶�鏈枃妗�
+-----------------------------------
 
-```bash
-git clone https://github.com/jeecgboot/jeecgboot-vue3.git
+- 椤圭洰瀹樼綉锛�  [http://www.jeecg.com](http://www.jeecg.com)
+
+- 鍦ㄧ嚎婕旂ず 锛�  [Vue3鐗堟湰](http://boot3.jeecg.com)  |  [鏁叉暡浜�(闆朵唬鐮�)](http://app.qiaoqiaoyun.com)
+
+- 寮�鍙戞枃妗o細  [Vue3鏂囨。](http://vue3.jeecg.com) | [涓婚」鐩枃妗(http://doc.jeecg.com) 
+
+- 鏂版墜鎸囧崡锛� [蹇�熷叆闂╙(http://www.jeecg.com/doc/quickstart)  |   [甯歌闂 ](http://www.jeecg.com/doc/qa) |  [瑙嗛鏁欑▼](https://space.bilibili.com/454617261/channel/series)  |  [1鍒嗛挓浣撻獙浣庝唬鐮乚(https://my.oschina.net/jeecg/blog/3083313) 
+
+- QQ浜ゆ祦缇� 锛� 鈶�730954414銆乂UE3缇�683903138銆佲懁860162132(婊�)銆佲懀774126647(婊�)銆佲憿816531124(婊�)銆佲憽769925425(婊�)銆佲憼284271917(婊�)
+> ` 鎻愰啋锛氥�怮Q缇ゆ槸鑷姪鏈嶅姟缇わ紝寤鸿缁欏府鍔╂偍瑙e喅闂鐨勫悓瀛﹀彂閫佹寚瀹氱孩鍖咃紝琛ㄧず鎰熻阿锛併�� `
+
+
+
+
+
+Docker鍚姩椤圭洰
+-----------------------------------
+
+- [Docker鍚姩鍗曚綋鍚庡彴](http://doc.jeecg.com/2043889)
+- [Docker鍚姩Vue3鍓嶇](http://vue3.jeecg.com/3028878)
+- [Docker鍚姩寰湇鍔″悗鍙癩(http://doc.jeecg.com/3043472)
+
+
+************
+
+VUE2鐗堟湰涓撻璇存槑
+-----------------------------------
+#### 椤圭洰浠嬬粛 
+- 椤圭洰鍚嶇О锛歛nt-design-vue-jeecg
+- 璇存槑锛欽eecgBoot鍓嶇鎻愪緵涓ゅ瑙e喅鏂规锛屼竴濂梀UE2鍜屼竴濂梀UE3鐗堟湰锛岀洰鍓峷ue2鐗堟湰鏈�鏂颁唬鐮佸彧鏀寔鍒癹eecgboot 3.4.3鐗堟湰锛屼竴瀹氭敞鎰忋��
+- 鏇村浠嬬粛锛歔Vue2鐗堟紨绀篯(http://boot.jeecg.com) |[寮�鍙戞枃妗(http://doc.jeecg.com) 
+- [蹇�熷惎鍔ㄢ�斺�擵ue2鍓嶇](http://doc.jeecg.com/2678320)
+- [Docker鍚姩鈥斺�擵ue2鍓嶇](http://doc.jeecg.com/3043612)
+
+
+#### Vue2涓嶸ue3鐗堟湰鍖哄埆
+> - VUE3鐗堟湰褰诲簳鎶涘純IE鍏煎锛屼笉鍏煎IE鍜屼綆鐗堟湰娴忚鍣紝鍙�傞厤楂樼増鏈胺姝屽拰Edge
+ 锛堟斂搴溿�佷簨涓氱被鍗曚綅椤圭洰闇�瑕佽皑鎱庨�夋嫨鈥斺�斿浗浜у寲杩佺Щ鏄竴涓极闀跨殑杩囩▼锛屼竾涓�杩囩▼涓姹侷E鍏煎锛岃繖涓笉鍙�嗭級
+> - 鎵�浠ュ鏋滃娴忚鍣ㄦ湁瑕佹眰鐨勯」鐩紝璇烽�夋嫨VUE2鐗堟湰銆�
+> - VUE3鐗堟槸鍏ㄦ柊鐨勬妧鏈爤锛岀揣璺熶富娴侊紙鍓嶇閲嶅啓锛夛紝鍚勪釜鍔熻兘閮藉仛浜嗕紭鍖栵紝鎷ユ湁鏇村ソ鐨勪綋楠屾晥鏋�
+
+
+#### 婧愮爜涓嬭浇
+| 婧愮爜                | 婧愮爜鍦板潃                     | 
+|--------------------|------------------------|
+| 鍚庣婧愮爜 `Vue2鐗坄  |https://gitee.com/jeecg/jeecg-boot/tree/v3.4.3last    |
+| 鍓嶇婧愮爜 `Vue2鐗坄  |https://gitee.com/jeecg/ant-design-vue-jeecg    |
+
+************
+
+
+閫傜敤椤圭洰
+-----------------------------------
+Jeecg-Boot浣庝唬鐮佸紑鍙戝钩鍙帮紝鍙互搴旂敤鍦ㄤ换浣旿2EE椤圭洰鐨勫紑鍙戜腑锛屽挨鍏堕�傚悎SAAS椤圭洰銆佷紒涓氫俊鎭鐞嗙郴缁燂紙MIS锛夈�佸唴閮ㄥ姙鍏郴缁燂紙OA锛夈�佷紒涓氳祫婧愯鍒掔郴缁燂紙ERP锛夈�佸鎴峰叧绯荤鐞嗙郴缁燂紙CRM锛夌瓑锛屽叾鍗婃櫤鑳芥墜宸erge鐨勫紑鍙戞柟寮忥紝鍙互鏄捐憲鎻愰珮寮�鍙戞晥鐜�70%浠ヤ笂锛屾瀬澶ч檷浣庡紑鍙戞垚鏈��
+
+
+鎶�鏈敮鎸�
+-----------------------------------
+
+鍏抽棴gitee鐨刬ssue閫氶亾锛屼娇鐢ㄤ腑閬囧埌闂鎴栬�匓UG鍙互鍦� [Github涓婃彁Issues](https://github.com/jeecgboot/jeecg-boot/issues/new)
+
+瀹樻柟鏀寔锛� [http://jeecg.com/doc/help](http://jeecg.com/doc/help)
+
+
+##### Star璧板娍鍥�
+
+[![Star History Chart](https://api.star-history.com/svg?repos=jeecgboot/jeecg-boot&type=Date)](https://star-history.com/#jeecgboot/jeecg-boot)
+
+
+
+
+鍚庡彴鐩綍缁撴瀯
+-----------------------------------
 ```
-
-- Installation dependencies
-
-```bash
-cd jeecgboot-vue3
-
-pnpm install
-```
-
-- 閰嶇疆鎺ュ彛鍦板潃 `.env.development`
-
-```bash
-VITE_PROXY = [["/jeecgboot","http://localhost:8080/jeecg-boot"],["/upload","http://localhost:3300/upload"]]
-VITE_GLOB_DOMAIN_URL=http://localhost:8080/jeecg-boot
-```
-
-> 璇存槑锛氭妸`http://localhost:8080/jeecg-boot` 鎹㈡垚鑷繁鍦板潃锛屽叾浠栦笉鐢ㄦ敼銆�
-
-
-- run
-
-```bash
-pnpm serve
-```
-
-
-- build
-
-```bash
-pnpm build
-```
-
-
-## Docker闀滃儚鍚姩鍓嶇(鍗曚綋妯″紡)
-
-- host璁剧疆
-
->娉ㄦ剰锛� 闇�瑕佹妸`127.0.0.1`鏇挎崲鎴愮湡瀹濱P 姣斿`192.`寮�澶�,涓嶇劧鍚庣涓嶉�氥��
-
-```bash
-127.0.0.1 jeecg-boot-system
-127.0.0.1 jeecg-boot-gateway
-```
-
-
-- 涓嬭浇椤圭洰
-
-```bash
-git clone https://github.com/jeecgboot/jeecgboot-vue3.git
-
-cd jeecgboot-vue3
-```
-
-- 閰嶇疆鎺ュ彛鍩熷悕 `.env.production`
-
-```bash
-VITE_GLOB_API_URL=/jeecgboot
-VITE_GLOB_DOMAIN_URL=http://jeecg-boot-system:8080/jeecg-boot
-```
-鍚庡彴鍗曚綋鍚姩 [瑙佹鏂囨。](http://doc.jeecg.com/2043889)
-
-- 缂栬瘧椤圭洰
-
-```bash
-pnpm install
-
-pnpm build
-```
-
-- 鍚姩瀹瑰櫒
-```bash
-docker build -t jeecgboot-vue3 .
-docker run --name jeecgboot-vue3-nginx -p 80:80 -d jeecgboot-vue3
-```
-
-- 璁块棶鍓嶅彴
-
-http://localhost
-
-## Docker闀滃儚鍚姩鍓嶇(寰湇鍔℃ā寮�)
-> 杩欓噷鍙啓涓庡崟浣撶殑鍖哄埆姝ラ
-
--  鍖哄埆1. 淇敼鍚庡彴鍩熷悕
-.env.production
-
-```bash
-VITE_GLOB_API_URL=/jeecgboot
-VITE_GLOB_DOMAIN_URL=http://jeecg-boot-gateway:9999
-```
-
-鍚庡彴寰湇鍔″惎鍔� [瑙佹鏂囨。](http://doc.jeecg.com/2656147)
-
-- 鍖哄埆2. 淇敼Dockerfile鏂囦欢
-
-```bash
-- 鎶奰http://jeecg-boot-system:8080/jeecg-boot`鏇挎崲鎴� `http://jeecg-boot-gateway:9999`
-- 鎶奰jeecg-boot-system`鏇挎崲鎴� `jeecg-boot-gateway`
-```
-
--  鍏朵粬涓庡崟浣撴ā寮忎竴鏍�
-
-```bash
-闀滃儚闇�瑕侀噸鐜版瀯寤猴紝鏈�濂芥妸鍗曚綋鐨勯暅鍍忓垹鎺夛紝閲嶆柊鏋勫缓docker闀滃儚銆�
+椤圭洰缁撴瀯
+鈹溾攢jeecg-boot-parent锛堢埗POM锛� 椤圭洰渚濊禆銆乵odules缁勭粐锛�
+鈹�  鈹溾攢jeecg-boot-base-core锛堝叡閫氭ā鍧楋細 宸ュ叿绫汇�乧onfig銆佹潈闄愩�佹煡璇㈣繃婊ゅ櫒銆佹敞瑙g瓑锛�
+鈹�  鈹溾攢jeecg-module-demo    绀轰緥浠g爜
+鈹�  鈹溾攢jeecg-module-system  System绯荤粺绠$悊鐩綍
+鈹�  鈹�  鈹溾攢jeecg-system-biz    System绯荤粺绠$悊鏉冮檺绛夊姛鑳�
+鈹�  鈹�  鈹溾攢jeecg-system-start  System鍗曚綋鍚姩椤圭洰(8080锛�
+鈹�  鈹�  鈹溾攢jeecg-system-api    System绯荤粺绠$悊妯″潡瀵瑰api
+鈹�  鈹�  鈹�  鈹溾攢jeecg-system-cloud-api   System妯″潡瀵瑰鎻愪緵鐨勫井鏈嶅姟鎺ュ彛
+鈹�  鈹�  鈹�  鈹溾攢jeecg-system-local-api   System妯″潡瀵瑰鎻愪緵鐨勫崟浣撴帴鍙�
+鈹�  鈹溾攢jeecg-server-cloud           --寰湇鍔℃ā鍧�
+     鈹溾攢jeecg-cloud-gateway       --寰湇鍔$綉鍏虫ā鍧�(9999)
+     鈹溾攢jeecg-cloud-nacos       --Nacos鏈嶅姟妯″潡(8848)
+     鈹溾攢jeecg-system-cloud-start  --System寰湇鍔″惎鍔ㄩ」鐩�(7001)
+     鈹溾攢jeecg-demo-cloud-start    --Demo寰湇鍔″惎鍔ㄩ」鐩�(7002)
+     鈹溾攢jeecg-visual
+        鈹溾攢jeecg-cloud-monitor       --寰湇鍔$洃鎺фā鍧� (9111)
+        鈹溾攢jeecg-cloud-xxljob        --寰湇鍔xljob瀹氭椂浠诲姟鏈嶅姟绔� (9080)
+        鈹溾攢jeecg-cloud-sentinel     --sentinel鏈嶅姟绔� (9000)
+        鈹溾攢jeecg-cloud-test           -- 寰湇鍔℃祴璇曠ず渚嬶紙鍚勭渚嬪瓙锛�
+           鈹溾攢jeecg-cloud-test-more         -- 寰湇鍔℃祴璇曠ず渚嬶紙feign銆佺啍鏂檷绾с�亁xljob銆佸垎甯冨紡閿侊級
+           鈹溾攢jeecg-cloud-test-rabbitmq     -- 寰湇鍔℃祴璇曠ず渚嬶紙rabbitmq锛�
+           鈹溾攢jeecg-cloud-test-seata          -- 寰湇鍔℃祴璇曠ず渚嬶紙seata鍒嗗竷寮忎簨鍔★級
+           鈹溾攢jeecg-cloud-test-shardingsphere    -- 寰湇鍔℃祴璇曠ず渚嬶紙鍒嗗簱鍒嗚〃锛�
 ```
 
 
 
 
+涓轰粈涔堥�夋嫨JeecgBoot?
+-----------------------------------
+* 1.閲囩敤鏈�鏂颁富娴佸墠鍚庡垎绂绘鏋讹紙Springboot+Mybatis+antd锛夛紝瀹规槗涓婃墜; 浠g爜鐢熸垚鍣ㄤ緷璧栨�т綆,鐏垫椿鐨勬墿灞曡兘鍔涳紝鍙揩閫熷疄鐜颁簩娆″紑鍙�;
+* 2.鏀寔寰湇鍔pringCloud Alibaba(Nacos銆丟ateway銆丼entinel銆丼kywalking)锛屾彁渚涘垏鎹㈡満鍒舵敮鎸佸崟浣撳拰寰湇鍔¤嚜鐢卞垏鎹�
+* 3.寮�鍙戞晥鐜囬珮,閲囩敤浠g爜鐢熸垚鍣紝鍗曡〃銆佹爲鍒楄〃銆佷竴瀵瑰銆佷竴瀵逛竴绛夋暟鎹ā鍨嬶紝澧炲垹鏀规煡鍔熻兘涓�閿敓鎴愶紝鑿滃崟閰嶇疆鐩存帴浣跨敤锛�
+* 4.浠g爜鐢熸垚鍣ㄦ彁渚涘己澶фā鏉挎満鍒讹紝鏀寔鑷畾涔夋ā鏉匡紝鐩墠鎻愪緵鍥涘椋庢牸妯℃澘锛堝崟琛ㄤ袱濂椼�佹爲妯″瀷涓�濂椼�佷竴瀵瑰涓夊锛�
+* 5.浠g爜鐢熸垚鍣ㄩ潪甯告櫤鑳斤紝鍦ㄧ嚎涓氬姟寤烘ā銆佸湪绾块厤缃�佹墍瑙佸嵆鎵�寰楁敮鎸�23绉嶇被鎺т欢锛屼竴閿敓鎴愬墠鍚庣浠g爜锛屽ぇ骞呭害鎻愬崌寮�鍙戞晥鐜囷紝涓嶅啀涓洪噸澶嶅伐浣滃彂鎰併��
+* 6.浣庝唬鐮佽兘鍔涳細Online鍦ㄧ嚎琛ㄥ崟锛堟棤闇�缂栫爜锛岄�氳繃鍦ㄧ嚎閰嶇疆琛ㄥ崟锛屽疄鐜拌〃鍗曠殑澧炲垹鏀规煡锛屾敮鎸佸崟琛ㄣ�佹爲銆佷竴瀵瑰銆佷竴瀵逛竴绛夋ā鍨嬶紝瀹炵幇浜轰汉鐨嗗彲缂栫爜锛�
+* 7.浣庝唬鐮佽兘鍔涳細Online鍦ㄧ嚎鎶ヨ〃锛堟棤闇�缂栫爜锛岄�氳繃鍦ㄧ嚎閰嶇疆鏂瑰紡锛屽疄鐜版暟鎹姤琛紝鍙互蹇�熸娊鍙栨暟鎹紝鍑忚交寮�鍙戝帇鍔涳紝瀹炵幇浜轰汉鐨嗗彲缂栫爜锛�
+* 8.浣庝唬鐮佽兘鍔涳細Online鍦ㄧ嚎鍥捐〃锛堟棤闇�缂栫爜锛岄�氳繃鍦ㄧ嚎閰嶇疆鏂瑰紡锛屽疄鐜版洸绾垮浘锛屾煴鐘跺浘锛屾暟鎹姤琛ㄧ瓑锛屾敮鎸佽嚜瀹氫箟鎺掔増甯冨眬锛屽疄鐜颁汉浜虹殕鍙紪鐮侊級
+* 9.灏佽瀹屽杽鐨勭敤鎴枫�佽鑹层�佽彍鍗曘�佺粍缁囨満鏋勩�佹暟鎹瓧鍏搞�佸湪绾垮畾鏃朵换鍔$瓑鍩虹鍔熻兘锛屾敮鎸佽闂巿鏉冦�佹寜閽潈闄愩�佹暟鎹潈闄愮瓑鍔熻兘
+* 10.甯哥敤鍏遍�氬皝瑁咃紝鍚勭宸ュ叿绫�(瀹氭椂浠诲姟,鐭俊鎺ュ彛,閭欢鍙戦��,Excel瀵煎叆瀵煎嚭绛�),鍩烘湰婊¤冻80%椤圭洰闇�姹�
+* 11.绠�鏄揈xcel瀵煎叆瀵煎嚭锛屾敮鎸佸崟琛ㄥ鍑哄拰涓�瀵瑰琛ㄦā寮忓鍑猴紝鐢熸垚鐨勪唬鐮佽嚜甯﹀鍏ュ鍑哄姛鑳�
+* 12.闆嗘垚绠�鏄撴姤琛ㄥ伐鍏凤紝鍥惧儚鎶ヨ〃鍜屾暟鎹鍑洪潪甯告柟渚匡紝鍙瀬鍏舵柟渚跨殑鐢熸垚鍥惧舰鎶ヨ〃銆乸df銆乪xcel銆亀ord绛夋姤琛紱
+* 13.閲囩敤鍓嶅悗鍒嗙鎶�鏈紝椤甸潰UI椋庢牸绮剧編锛岄拡瀵瑰父鐢ㄧ粍浠跺仛浜嗗皝瑁咃細鏃堕棿銆佽琛ㄦ牸鎺т欢銆佹埅鍙栨樉绀烘帶浠躲�佹姤琛ㄧ粍浠讹紝缂栬緫鍣ㄧ瓑绛�
+* 14.鏌ヨ杩囨护鍣細鏌ヨ鍔熻兘鑷姩鐢熸垚锛屽悗鍙板姩鎬佹嫾SQL杩藉姞鏌ヨ鏉′欢锛涙敮鎸佸绉嶅尮閰嶆柟寮忥紙鍏ㄥ尮閰�/妯$硦鏌ヨ/鍖呭惈鏌ヨ/涓嶅尮閰嶆煡璇級锛�
+* 15.鏁版嵁鏉冮檺锛堢簿缁嗗寲鏁版嵁鏉冮檺鎺у埗锛屾帶鍒跺埌琛岀骇锛屽垪琛ㄧ骇锛岃〃鍗曞瓧娈电骇锛屽疄鐜颁笉鍚屼汉鐪嬩笉鍚屾暟鎹紝涓嶅悓浜哄鍚屼竴涓〉闈㈡搷浣滀笉鍚屽瓧娈�
+* 16.椤甸潰鏍¢獙鑷姩鐢熸垚(蹇呴』杈撳叆銆佹暟瀛楁牎楠屻�侀噾棰濇牎楠屻�佹椂闂寸┖闂寸瓑);
+* 17.鏀寔SAAS鏈嶅姟妯″紡锛屾彁渚汼aaS澶氱鎴锋灦鏋勬柟妗堛��
+* 18.鍒嗗竷寮忔枃浠舵湇鍔★紝闆嗘垚minio銆侀樋閲孫SS绛変紭绉�鐨勭涓夋柟锛屾彁渚涗究鎹风殑鏂囦欢涓婁紶涓庣鐞嗭紝鍚屾椂涔熸敮鎸佹湰鍦板瓨鍌ㄣ��
+* 19.涓绘祦鏁版嵁搴撳吋瀹癸紝涓�濂椾唬鐮佸畬鍏ㄥ吋瀹筂ysql銆丳ostgresql銆丱racle銆丼qlserver銆丮ariaDB銆佽揪姊︾瓑涓绘祦鏁版嵁搴撱��
+* 20.闆嗘垚宸ヤ綔娴乤ctiviti銆乫lowable锛屽苟瀹炵幇浜嗗彧闇�鍦ㄩ〉闈㈤厤缃祦绋嬭浆鍚戯紝鍙瀬澶х殑绠�鍖朾pm宸ヤ綔娴佺殑寮�鍙戯紱鐢╞pm鐨勬祦绋嬭璁″櫒鐢诲嚭浜嗘祦绋嬭蛋鍚戯紝涓�涓伐浣滄祦鍩烘湰灏卞畬鎴愪簡锛屽彧闇�鍐欏緢灏戦噺鐨刯ava浠g爜锛�
+* 21.浣庝唬鐮佽兘鍔涳細鍦ㄧ嚎娴佺▼璁捐锛岄噰鐢ㄥ紑婧怉ctiviti娴佺▼寮曟搸锛屽疄鐜板湪绾跨敾娴佺▼,鑷畾涔夎〃鍗�,琛ㄥ崟鎸傞潬,涓氬姟娴佽浆
+* 22.澶氭暟鎹簮锛氬強鍏剁畝鏄撶殑浣跨敤鏂瑰紡锛屽湪绾块厤缃暟鎹簮閰嶇疆锛屼究鎹风殑浠庡叾浠栨暟鎹姄鍙栨暟鎹紱
+* 23.鎻愪緵鍗曠偣鐧诲綍CAS闆嗘垚鏂规锛岄」鐩腑宸茬粡鎻愪緵瀹屽杽鐨勫鎺ヤ唬鐮�
+* 24.浣庝唬鐮佽兘鍔涳細琛ㄥ崟璁捐鍣紝鏀寔鐢ㄦ埛鑷畾涔夎〃鍗曞竷灞�锛屾敮鎸佸崟琛紝涓�瀵瑰琛ㄥ崟銆佹敮鎸乻elect銆乺adio銆乧heckbox銆乼extarea銆乨ate銆乸opup銆佸垪琛ㄣ�佸畯绛夋帶浠�
+* 25.涓撲笟鎺ュ彛瀵规帴鏈哄埗锛岀粺涓�閲囩敤restful鎺ュ彛鏂瑰紡锛岄泦鎴恠wagger-ui鍦ㄧ嚎鎺ュ彛鏂囨。锛孞wt token瀹夊叏楠岃瘉锛屾柟渚垮鎴风瀵规帴
+* 26.鎺ュ彛瀹夊叏鏈哄埗锛屽彲缁嗗寲鎺у埗鎺ュ彛鎺堟潈锛岄潪甯哥畝渚垮疄鐜颁笉鍚屽鎴风鍙湅鑷繁鏁版嵁绛夋帶鍒�
+* 27.楂樼骇缁勫悎鏌ヨ鍔熻兘锛屽湪绾块厤缃敮鎸佷富瀛愯〃鍏宠仈鏌ヨ锛屽彲淇濆瓨鏌ヨ鍘嗗彶
+* 28.鎻愪緵鍚勭绯荤粺鐩戞帶锛屽疄鏃惰窡韪郴缁熻繍琛屾儏鍐碉紙鐩戞帶 Redis銆乀omcat銆乯vm銆佹湇鍔″櫒淇℃伅銆佽姹傝拷韪�丼QL鐩戞帶锛�
+* 29.娑堟伅涓績锛堟敮鎸佺煭淇°�侀偖浠躲�佸井淇℃帹閫佺瓑绛夛級
+* 30.闆嗘垚Websocket娑堟伅閫氱煡鏈哄埗
+* 31.绉诲姩鑷�傚簲鏁堟灉浼樼锛屾彁渚汚PP鍙戝竷鏂规锛�
+* 32.鏀寔澶氳瑷�锛屾彁渚涘浗闄呭寲鏂规锛�
+* 33.鏁版嵁鍙樻洿璁板綍鏃ュ織锛屽彲璁板綍鏁版嵁姣忔鍙樻洿鍐呭锛岄�氳繃鐗堟湰瀵规瘮鍔熻兘鏌ョ湅鍘嗗彶鍙樺寲
+* 34.骞冲彴UI寮哄ぇ锛屽疄鐜颁簡绉诲姩鑷�傚簲
+* 35.骞冲彴棣栭〉椋庢牸锛屾彁渚涘绉嶇粍鍚堟ā寮忥紝鏀寔鑷畾涔夐鏍�
+* 36.鎻愪緵绠�鍗曟槗鐢ㄧ殑鎵撳嵃鎻掍欢锛屾敮鎸佽胺姝屻�佺伀鐙愩�両E11+ 绛夊悇绉嶆祻瑙堝櫒
+* 37.绀轰緥浠g爜涓板瘜锛屾彁渚涘緢澶氬涔犳渚嬪弬鑰�
+* 38.閲囩敤maven鍒嗘ā鍧楀紑鍙戞柟寮�
+* 39.鏀寔鑿滃崟鍔ㄦ�佽矾鐢�
+* 40.鏉冮檺鎺у埗閲囩敤 RBAC锛圧ole-Based Access Control锛屽熀浜庤鑹茬殑璁块棶鎺у埗锛�
+* 41.鎻愪緵鏂拌缂栬緫琛ㄦ牸JVXETable锛岃交鏉炬弧瓒冲悇绉嶅鏉侲RP甯冨眬锛屾嫢鏈夋洿楂樼殑鎬ц兘銆佹洿鐏垫椿鐨勬墿灞曘�佹洿寮哄ぇ鐨勫姛鑳�
+
+ 
+ 
+ 
+鎶�鏈灦鏋勶細
+-----------------------------------
+#### 寮�鍙戠幆澧�
+
+- 璇█锛欽ava 8+ (灏忎簬17)
+
+- IDE(JAVA)锛� IDEA (蹇呴』瀹夎lombok鎻掍欢 )
+
+- IDE(鍓嶇)锛� Vscode銆乄ebStorm銆両DEA
+
+- 渚濊禆绠$悊锛歁aven
+
+- 缂撳瓨锛歊edis
+
+- 鏁版嵁搴撹剼鏈細MySQL5.7+  &  Oracle 11g & Sqlserver2017锛堝叾浠栨暟鎹簱锛孾闇�瑕佽嚜宸辫浆](https://my.oschina.net/jeecg/blog/4905722)锛�
+
+
+#### 鍚庣
+
+- 鍩虹妗嗘灦锛歋pring Boot 2.6.6
+
+- 寰湇鍔℃鏋讹細 Spring Cloud Alibaba 2021.0.1.0
+
+- 鎸佷箙灞傛鏋讹細MybatisPlus 3.5.1
+
+- 鎶ヨ〃宸ュ叿锛� JimuReport 1.5.2
+
+- 瀹夊叏妗嗘灦锛欰pache Shiro 1.8.0锛孞wt 3.11.0
+
+- 寰湇鍔℃妧鏈爤锛歋pring Cloud Alibaba銆丯acos銆丟ateway銆丼entinel銆丼kywalking
+
+- 鏁版嵁搴撹繛鎺ユ睜锛氶樋閲屽反宸碊ruid 1.1.22
+
+- 鏃ュ織鎵撳嵃锛歭ogback
+
+- 鍏朵粬锛歛utopoi, fastjson锛宲oi锛孲wagger-ui锛宷uartz, lombok锛堢畝鍖栦唬鐮侊級绛夈��
+
+
+#### 鍓嶇
+
+- Vue2鐗堟湰锛歚Vue2.6+@vue/cli+AntDesignVue+Viser-vue+Vuex绛塦  [璇︾粏鏌ョ湅](https://github.com/jeecgboot/ant-design-vue-jeecg)
+- Vue3鐗堟湰锛歚Vue3.0+TypeScript+Vite+AntDesignVue+pinia+echarts绛夋柊鏂规` [璇︾粏鏌ョ湅](https://github.com/jeecgboot/jeecgboot-vue3)
+
+#### 鏀寔搴�
+
+|  鏁版嵁搴�   |  鏀寔   |
+| --- | --- |
+|   MySQL   |  鈭�   |
+|  Oracle11g   |  鈭�   |
+|  Sqlserver2017   |  鈭�   |
+|   PostgreSQL   |  鈭�   |
+|   MariaDB   |  鈭�   |
+|   杈炬ⅵ銆佷汉澶ч噾浠�   |  鈭�   |
 
 
 
-## 鍏ラ棬蹇呭
-
-鏈」鐩渶瑕佷竴瀹氬墠绔熀纭�鐭ヨ瘑锛岃纭繚鎺屾彙 Vue 鐨勫熀纭�鐭ヨ瘑锛屼互渚胯兘澶勭悊涓�浜涘父瑙佺殑闂銆� 寤鸿鍦ㄥ紑鍙戝墠鍏堝涓�涓嬩互涓嬪唴瀹癸紝鎻愬墠浜嗚В鍜屽涔犺繖浜涚煡璇嗭紝浼氬椤圭洰鐞嗚В闈炲父鏈夊府鍔�:
-
-*   [JeecgBoot-Vue3鏂囨。](http://vue3.jeecg.com)
-*   [Vue3 鏂囨。](https://cn.vuejs.org/)
-*   [Vben鏂囨。](https://doc.vvbin.cn)
-*   [Ant-Design-Vue](https://www.antdv.com/docs/vue/introduce-cn/)
-*   [TypeScript](https://www.typescriptlang.org/)
-*   [Vue-router](https://router.vuejs.org/zh)
-*   [Es6](https://es6.ruanyifeng.com/)
-*   [Vitejs](https://cn.vitejs.dev/guide/)
-*   [Pinia(vuex鏇夸唬鏂规)](https://pinia.esm.dev/introduction.html)
-*   [Vue-RFCS](https://github.com/vuejs/rfcs)
-*   [Vue2 杩佺Щ鍒� 3](https://v3.vuejs.org/guide/migration/introduction.html)
-*   [vxetable鏂囨。](https://vxetable.cn)
-*   [~~WindiCss~~](https://windicss.netlify.app/)
+## 寰湇鍔¤В鍐虫柟妗�
 
 
-##   娴忚鍣ㄦ敮鎸�
+1銆佹湇鍔℃敞鍐屽拰鍙戠幇 Nacos 鈭�
 
-**鏈湴寮�鍙�**鎺ㄨ崘浣跨敤`Chrome 鏈�鏂扮増`娴忚鍣紝**涓嶆敮鎸�**`Chrome 90`浠ヤ笅鐗堟湰銆�
+2銆佺粺涓�閰嶇疆涓績 Nacos  鈭�
 
-**鐢熶骇鐜**鏀寔鐜颁唬娴忚鍣紝涓嶆敮鎸� IE銆�
+3銆佽矾鐢辩綉鍏� gateway(涓夌鍔犺浇鏂瑰紡) 鈭�
 
-| [![IE](https://raw.githubusercontent.com/alrra/browser-logos/master/src/archive/internet-explorer_9-11/internet-explorer_9-11_48x48.png)](http://godban.github.io/browsers-support-badges/)IE | [![ Edge](https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png)](http://godban.github.io/browsers-support-badges/)Edge | [![Firefox](https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png)](http://godban.github.io/browsers-support-badges/)Firefox | [![Chrome](https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png)](http://godban.github.io/browsers-support-badges/)Chrome | [![Safari](https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png)](http://godban.github.io/browsers-support-badges/)Safari |
-| --- | --- | --- | --- | --- |
-| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
+4銆佸垎甯冨紡 http feign 鈭�
+
+5銆佺啍鏂檷绾ч檺娴� Sentinel 鈭�
+
+6銆佸垎甯冨紡鏂囦欢 Minio銆侀樋閲孫SS 鈭� 
+
+7銆佺粺涓�鏉冮檺鎺у埗 JWT + Shiro 鈭�
+
+8銆佹湇鍔$洃鎺� SpringBootAdmin鈭�
+
+9銆侀摼璺窡韪� Skywalking   [鍙傝�冩枃妗(http://doc.jeecg.com/2350293)
+
+10銆佹秷鎭腑闂翠欢 RabbitMQ  鈭�
+
+11銆佸垎甯冨紡浠诲姟 xxl-job  鈭� 
+
+12銆佸垎甯冨紡浜嬪姟 Seata
+
+13銆佸垎甯冨紡鏃ュ織 elk + kafka
+
+14銆佹敮鎸� docker-compose銆乲8s銆乯enkins
+
+15銆丆AS 鍗曠偣鐧诲綍   鈭�
+
+16銆佽矾鐢遍檺娴�   鈭�
+
+   
+#### 寰湇鍔℃灦鏋勫浘
+![寰湇鍔℃灦鏋勫浘](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/jeecgboot_springcloud2022.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+### Jeecg Boot 浜у搧鍔熻兘钃濆浘
+![鍔熻兘钃濆浘](https://jeecgos.oss-cn-beijing.aliyuncs.com/upload/test/Jeecg-Boot-lantu202005_1590912449914.jpg "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
 
 
 
-## 鍔熻兘妯″潡
-> vue3鐗堟湰宸茬粡瀹炵幇浜嗙郴缁熺鐞嗐�佺郴缁熺洃鎺с�佹姤琛ㄣ�佸悇绉嶇粍浠躲�佸墠绔潈闄愩�丟UI浠g爜鐢熸垚銆丱nline琛ㄥ崟銆丱nline鎶ヨ〃绛夊钩鍙板姛鑳斤紝瀹屽叏鍙互鐢ㄤ簬鐢熶骇鐜銆�
 
+### 鍔熻兘妯″潡
 ```
-鈹溾攢棣栭〉
-鈹�  鈹溾攢棣栭〉锛堝洓濂楅椤垫弧瓒充笉鍚屽満鏅渶姹傦級
-鈹�  鈹溾攢宸ヤ綔鍙�
 鈹溾攢绯荤粺绠$悊
 鈹�  鈹溾攢鐢ㄦ埛绠$悊
 鈹�  鈹溾攢瑙掕壊绠$悊
@@ -219,29 +332,34 @@
 鈹�  鈹斺攢绯荤粺鍏憡
 鈹�  鈹斺攢鑱屽姟绠$悊
 鈹�  鈹斺攢閫氳褰�
-鈹�  鈹斺攢瀵硅薄瀛樺偍
 鈹�  鈹斺攢澶氱鎴风鐞�
+鈹溾攢娑堟伅涓績
+鈹�  鈹溾攢娑堟伅绠$悊
+鈹�  鈹溾攢妯℃澘绠$悊
+鈹溾攢浠g爜鐢熸垚鍣�(浣庝唬鐮�)
+鈹�  鈹溾攢浠g爜鐢熸垚鍣ㄥ姛鑳斤紙涓�閿敓鎴愬墠鍚庣浠g爜锛岀敓鎴愬悗鏃犻渶淇敼鐩存帴鐢紝缁濆鏄悗绔紑鍙戠闊筹級
+鈹�  鈹溾攢浠g爜鐢熸垚鍣ㄦā鏉匡紙鎻愪緵4濂楁ā鏉匡紝鍒嗗埆鏀寔鍗曡〃鍜屼竴瀵瑰妯″瀷锛屼笉鍚岄鏍奸�夋嫨锛�
+鈹�  鈹溾攢浠g爜鐢熸垚鍣ㄦā鏉匡紙鐢熸垚浠g爜锛岃嚜甯xcel瀵煎叆瀵煎嚭锛�
+鈹�  鈹溾攢鏌ヨ杩囨护鍣紙鏌ヨ閫昏緫鏃犻渶缂栫爜锛岀郴缁熸牴鎹〉闈㈤厤缃嚜鍔ㄧ敓鎴愶級
+鈹�  鈹溾攢楂樼骇鏌ヨ鍣紙寮圭獥鑷姩缁勫悎鏌ヨ鏉′欢锛�
+鈹�  鈹溾攢Excel瀵煎叆瀵煎嚭宸ュ叿闆嗘垚锛堟敮鎸佸崟琛紝涓�瀵瑰 瀵煎叆瀵煎嚭锛�
+鈹�  鈹溾攢骞冲彴绉诲姩鑷�傚簲鏀寔
 鈹溾攢绯荤粺鐩戞帶
-鈹�  鈹溾攢缃戝叧璺敱閰嶇疆锛坓ateway锛�
-鈹�  鈹溾攢瀹氭椂浠诲姟
-鈹�  鈹溾攢鏁版嵁婧愮鐞�
-鈹�  鈹溾攢绯荤粺鏃ュ織
-鈹�  鈹溾攢娑堟伅涓績锛堟敮鎸佺煭淇°�侀偖浠躲�佸井淇℃帹閫佺瓑绛夛級
-鈹�  鈹溾攢鏁版嵁鏃ュ織锛堣褰曟暟鎹揩鐓э紝鍙姣斿揩鐓э紝鏌ョ湅鏁版嵁鍙樻洿鎯呭喌锛�
-鈹�  鈹溾攢绯荤粺閫氱煡
-鈹�  鈹溾攢SQL鐩戞帶
-鈹�  鈹溾攢鎬ц兘鐩戞帶
+鈹�  鈹溾攢Gateway璺敱缃戝叧
+鈹�  鈹溾攢鎬ц兘鎵弿鐩戞帶
 鈹�  鈹�  鈹溾攢鐩戞帶 Redis
 鈹�  鈹�  鈹溾攢Tomcat
 鈹�  鈹�  鈹溾攢jvm
 鈹�  鈹�  鈹溾攢鏈嶅姟鍣ㄤ俊鎭�
 鈹�  鈹�  鈹溾攢璇锋眰杩借釜
 鈹�  鈹�  鈹溾攢纾佺洏鐩戞帶
-鈹溾攢娑堟伅涓績
-鈹�  鈹溾攢鎴戠殑娑堟伅
-鈹�  鈹溾攢娑堟伅绠$悊
-鈹�  鈹溾攢妯℃澘绠$悊
-鈹溾攢绉湪鎶ヨ〃璁捐鍣�
+鈹�  鈹溾攢瀹氭椂浠诲姟
+鈹�  鈹溾攢绯荤粺鏃ュ織
+鈹�  鈹溾攢娑堟伅涓績锛堟敮鎸佺煭淇°�侀偖浠躲�佸井淇℃帹閫佺瓑绛夛級
+鈹�  鈹溾攢鏁版嵁鏃ュ織锛堣褰曟暟鎹揩鐓э紝鍙姣斿揩鐓э紝鏌ョ湅鏁版嵁鍙樻洿鎯呭喌锛�
+鈹�  鈹溾攢绯荤粺閫氱煡
+鈹�  鈹溾攢SQL鐩戞帶
+鈹�  鈹溾攢swagger-ui(鍦ㄧ嚎鎺ュ彛鏂囨。)
 鈹傗攢鎶ヨ〃绀轰緥
 鈹�  鈹溾攢鏇茬嚎鍥�
 鈹�  鈹斺攢楗肩姸鍥�
@@ -256,31 +374,32 @@
 鈹傗攢澶у睆妯℃澘
 鈹�  鈹溾攢浣滄垬鎸囨尌涓績澶у睆
 鈹�  鈹斺攢鐗╂祦鏈嶅姟涓績澶у睆
-鈹溾攢浠g爜鐢熸垚鍣紙GUI锛�
-鈹�  鈹溾攢浠g爜鐢熸垚鍣ㄥ姛鑳斤紙涓�閿敓鎴愬墠鍚庣浠g爜锛岀敓鎴愬悗鏃犻渶淇敼鐩存帴鐢紝缁濆鏄悗绔紑鍙戠闊筹級
-鈹�  鈹溾攢浠g爜鐢熸垚鍣ㄦā鏉匡紙鎻愪緵4濂楁ā鏉匡紝鍒嗗埆鏀寔鍗曡〃鍜屼竴瀵瑰妯″瀷锛屼笉鍚岄鏍奸�夋嫨锛�
-鈹�  鈹溾攢浠g爜鐢熸垚鍣ㄦā鏉匡紙鐢熸垚浠g爜锛岃嚜甯xcel瀵煎叆瀵煎嚭锛�
-鈹�  鈹溾攢鏌ヨ杩囨护鍣紙鏌ヨ閫昏緫鏃犻渶缂栫爜锛岀郴缁熸牴鎹〉闈㈤厤缃嚜鍔ㄧ敓鎴愶級
-鈹�  鈹溾攢楂樼骇鏌ヨ鍣紙寮圭獥鑷姩缁勫悎鏌ヨ鏉′欢锛�
-鈹�  鈹溾攢Excel瀵煎叆瀵煎嚭宸ュ叿闆嗘垚锛堟敮鎸佸崟琛紝涓�瀵瑰 瀵煎叆瀵煎嚭锛�
-鈹�  鈹溾攢骞冲彴绉诲姩鑷�傚簲鏀寔
 鈹傗攢甯哥敤绀轰緥
-鈹�  鈹溾攢鑷畾涔夌粍浠剁ず渚�
-鈹�  鈹溾攢JVxeTable绀轰緥(ERP琛屼笟澶嶆潅鎺掔増鏁堟灉)
+鈹�  鈹溾攢鑷畾涔夌粍浠�
+鈹�  鈹溾攢瀵硅薄瀛樺偍(瀵规帴闃块噷浜�)
+鈹�  鈹溾攢JVXETable绀轰緥锛堝悇绉嶅鏉侲RP甯冨眬绀轰緥锛�
 鈹�  鈹溾攢鍗曡〃妯″瀷渚嬪瓙
 鈹�  鈹斺攢涓�瀵瑰妯″瀷渚嬪瓙
 鈹�  鈹斺攢鎵撳嵃渚嬪瓙
-鈹�  鈹斺攢涓�瀵瑰鍐呭祵绀轰緥
-鈹�  鈹斺攢寮傛鏍慣able
+鈹�  鈹斺攢涓�瀵瑰TAB渚嬪瓙
+鈹�  鈹斺攢鍐呭祵table渚嬪瓙
+鈹�  鈹斺攢甯哥敤閫夋嫨缁勪欢
+鈹�  鈹斺攢寮傛鏍憈able
+鈹�  鈹斺攢鎺ュ彛妯℃嫙娴嬭瘯
+鈹�  鈹斺攢琛ㄦ牸鍚堣绀轰緥
+鈹�  鈹斺攢寮傛鏍戝垪琛ㄧず渚�
+鈹�  鈹斺攢涓�瀵瑰JEditable
+鈹�  鈹斺攢JEditable缁勪欢绀轰緥
 鈹�  鈹斺攢鍥剧墖鎷栨嫿鎺掑簭
 鈹�  鈹斺攢鍥剧墖缈婚〉
 鈹�  鈹斺攢鍥剧墖棰勮
 鈹�  鈹斺攢PDF棰勮
-鈹傗攢灏佽閫氱敤缁勪欢 
-鈹�  鈹溾攢琛岀紪杈戣〃鏍糐VxeTable
+鈹�  鈹斺攢鍒嗗睆鍔熻兘
+鈹傗攢灏佽閫氱敤缁勪欢	
+鈹�  鈹溾攢琛岀紪杈戣〃鏍糐EditableTable
 鈹�  鈹斺攢鐪佺暐鏄剧ず缁勪欢
 鈹�  鈹斺攢鏃堕棿鎺т欢
-鈹�  鈹斺攢楂樼骇鏌ヨ (鏈疄鐜�)
+鈹�  鈹斺攢楂樼骇鏌ヨ
 鈹�  鈹斺攢鐢ㄦ埛閫夋嫨缁勪欢
 鈹�  鈹斺攢鎶ヨ〃缁勪欢灏佽
 鈹�  鈹斺攢瀛楀吀缁勪欢
@@ -291,30 +410,39 @@
 鈹�  鈹斺攢灏佽鏇茬嚎銆佹煴鐘跺浘銆侀ゼ鐘跺浘銆佹姌绾垮浘绛夌瓑鎶ヨ〃鐨勭粍浠讹紙缁忚繃灏佽锛屼娇鐢ㄧ畝鍗曪級
 鈹�  鈹斺攢鍦ㄧ嚎code缂栬緫鍣�
 鈹�  鈹斺攢涓婁紶鏂囦欢缁勪欢
+鈹�  鈹斺攢楠岃瘉鐮佺粍浠�
 鈹�  鈹斺攢鏍戝垪琛ㄧ粍浠�
 鈹�  鈹斺攢琛ㄥ崟绂佺敤缁勪欢
 鈹�  鈹斺攢绛夌瓑
 鈹傗攢鏇村椤甸潰妯℃澘
-鈹�  鈹斺攢Mock绀轰緥锛堝瓙鑿滃崟寰堝锛�
-鈹�  鈹斺攢椤甸潰&瀵艰埅锛堝瓙鑿滃崟寰堝锛�
-鈹�  鈹斺攢缁勪欢&鍔熻兘锛堝瓙鑿滃崟寰堝锛�
+鈹�  鈹溾攢鍚勭楂樼骇琛ㄥ崟
+鈹�  鈹溾攢鍚勭鍒楄〃鏁堟灉
+鈹�  鈹斺攢缁撴灉椤甸潰
+鈹�  鈹斺攢寮傚父椤甸潰
+鈹�  鈹斺攢涓汉椤甸潰
 鈹溾攢楂樼骇鍔熻兘
-鈹�  鈹溾攢鏀寔寰墠绔�
-鈹�  鈹溾攢鎻愪緵CAS鍗曠偣鐧诲綍
-鈹�  鈹溾攢闆嗘垚Websocket娑堟伅閫氱煡鏈哄埗
-鈹�  鈹溾攢鏀寔绗笁鏂圭櫥褰曪紙QQ銆侀拤閽夈�佸井淇$瓑锛�
 鈹�  鈹溾攢绯荤粺缂栫爜瑙勫垯
+鈹�  鈹溾攢鎻愪緵鍗曠偣鐧诲綍CAS闆嗘垚鏂规
+鈹�  鈹溾攢鎻愪緵APP鍙戝竷鏂规
+鈹�  鈹溾攢闆嗘垚Websocket娑堟伅閫氱煡鏈哄埗
 鈹溾攢Online鍦ㄧ嚎寮�鍙�(浣庝唬鐮�)
 鈹�  鈹溾攢Online鍦ㄧ嚎琛ㄥ崟 - 鍔熻兘宸插紑鏀�
 鈹�  鈹溾攢Online浠g爜鐢熸垚鍣� - 鍔熻兘宸插紑鏀�
 鈹�  鈹溾攢Online鍦ㄧ嚎鎶ヨ〃 - 鍔熻兘宸插紑鏀�
-鈹�  鈹溾攢Online鍦ㄧ嚎鍥捐〃(鏆傛湭寮�婧�)
-鈹�  鈹溾攢澶氭暟鎹簮绠$悊
-鈹傗攢娴佺▼妯″潡鍔熻兘 (鏆傛湭寮�婧�)
+鈹�  鈹溾攢Online鍦ㄧ嚎鍥捐〃(鏈紑婧�)
+鈹�  鈹溾攢Online鍥捐〃妯℃澘閰嶇疆(鏈紑婧�)
+鈹�  鈹溾攢Online甯冨眬璁捐(鏈紑婧�)
+鈹�  鈹溾攢澶氭暟鎹簮绠$悊 - 鍔熻兘宸插紑鏀�
+鈹溾攢绉湪鎶ヨ〃璁捐鍣�(浣庝唬鐮�)
+鈹�  鈹溾攢鎵撳嵃璁捐鍣�
+鈹�  鈹溾攢鏁版嵁鎶ヨ〃璁捐
+鈹�  鈹溾攢鍥惧舰鎶ヨ〃璁捐锛堟敮鎸乪chart锛�
+鈹�  鈹溾攢澶у睆璁捐鍣�(鏈紑婧�)
+鈹傗攢娴佺▼妯″潡鍔熻兘 (鏈紑婧�)
 鈹�  鈹溾攢娴佺▼璁捐鍣�
 鈹�  鈹溾攢琛ㄥ崟璁捐鍣�
-鈹�  鈹溾攢澶у睆璁捐鍣�
-鈹�  鈹溾攢闂ㄦ埛璁捐/浠〃鐩樿璁″櫒
+   鈹溾攢澶у睆璁捐鍣�
+   鈹溾攢闂ㄦ埛璁捐/浠〃鐩樿璁″櫒
 鈹�  鈹斺攢鎴戠殑浠诲姟
 鈹�  鈹斺攢鍘嗗彶娴佺▼
 鈹�  鈹斺攢鍘嗗彶娴佺▼
@@ -324,58 +452,66 @@
 鈹�  鈹斺攢鎴戝彂璧风殑娴佺▼
 鈹�  鈹斺攢鎴戠殑鎶勯��
 鈹�  鈹斺攢娴佺▼濮旀淳銆佹妱閫併�佽烦杞�
-鈹�  鈹斺攢OA鍔炲叕缁勪欢
-鈹斺攢鍏朵粬妯″潡 
-   鈹斺攢鏇村鍔熻兘寮�鍙戜腑銆傘�� 
+鈹�  鈹斺攢銆傘�傘��
+鈹傗攢OA鍔炲叕缁勪欢 (鏈紑婧�)
+鈹�  鈹溾攢鏇村鍔熻兘
+鈹�  鈹斺攢銆傘�傘��
+鈹斺攢鍏朵粬妯″潡
+   鈹斺攢鏇村鍔熻兘寮�鍙戜腑銆傘��
    
 ```
 
 
-##   绯荤粺鏁堟灉
-绯荤粺鍚庡彴
-
-![杈撳叆鍥剧墖璇存槑](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/site/vue3_20220310142327.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-![杈撳叆鍥剧墖璇存槑](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/site/vue3_20220310142354.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-![杈撳叆鍥剧墖璇存槑](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/site/vue3_20220310142339.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-![杈撳叆鍥剧墖璇存槑](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/site/vue3_20220310142409.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-![杈撳叆鍥剧墖璇存槑](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/site/vue3_20220310142401.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-![杈撳叆鍥剧墖璇存槑](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/site/vue3_11.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
-
-Online琛ㄥ崟&Online鎶ヨ〃&浠g爜鐢熸垚
-![](https://oscimg.oschina.net/oscnet/up-e8862f2c3c14eace9090c20a8fb928234a4.png)
-![](https://oscimg.oschina.net/oscnet/up-e3b3a736236bc66f255a9a32ab3f9b7196b.png)
-![](https://oscimg.oschina.net/oscnet/up-221b8cbdea3c17d31a1365023a73d3d439f.png)
-![](https://oscimg.oschina.net/oscnet/up-14092f6f213b26ab145cf70b2dc6dec5635.png)
-
-鎶ヨ〃鏁堟灉
-
-![](https://static.oschina.net/uploads/img/201904/14160828_pkFr.png "")
-![](https://static.oschina.net/uploads/img/201904/14160834_Lo23.png "")
-![](https://static.oschina.net/uploads/img/201904/14160842_QK7B.png "")
-![](https://static.oschina.net/uploads/img/201904/14160849_GBm5.png "")
-![](https://static.oschina.net/uploads/img/201904/14160858_6RAM.png "")
-
-鎺ュ彛鏂囨。
-
-![](https://oscimg.oschina.net/oscnet/up-e6ea09dbaa01b8458c2e23614077ba9507f.png)
-
-
-娴佺▼璁捐&琛ㄥ崟璁捐
-
-![](https://oscimg.oschina.net/oscnet/up-fe98e9f766e5abb6759f6f13d5f9186f0cf.png)
-![](https://static.oschina.net/uploads/img/201904/14160917_9Ftz.png "")
-![](https://static.oschina.net/uploads/img/201904/14160633_u59G.png "")
-![](https://static.oschina.net/uploads/img/201907/05165142_yyQ7.png "")
 
 
 
-澶у睆妯℃澘
+绯荤粺鏁堟灉
+----
+##### 澶у睆妯℃澘
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201912/25133248_Ag1C.jpg "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
 
-![](https://static.oschina.net/uploads/img/201912/25133248_Ag1C.jpg "")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201912/25133301_k9Kc.jpg "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
 
-![](https://static.oschina.net/uploads/img/201912/25133301_k9Kc.jpg "")
-
-![](https://oscimg.oschina.net/oscnet/up-649cb79c01eb95d5c2217a5dad28515da82.png)
+##### PC绔�
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14155402_AmlV.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160657_cHwb.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160813_KmXS.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160935_Nibs.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14161004_bxQ4.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
 
 
+##### 鍦ㄧ嚎鎺ュ彛鏂囨。
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201908/27095258_M2Xq.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160957_hN3X.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
 
+
+##### 鎶ヨ〃
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160828_pkFr.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160834_Lo23.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160842_QK7B.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160849_GBm5.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160858_6RAM.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+##### 娴佺▼
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160623_8fwk.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160917_9Ftz.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201904/14160633_u59G.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+![杈撳叆鍥剧墖璇存槑](https://static.oschina.net/uploads/img/201907/05165142_yyQ7.png "鍦ㄨ繖閲岃緭鍏ュ浘鐗囨爣棰�")
+
+
+##### 鎵嬫満绔�
+![](https://oscimg.oschina.net/oscnet/da543c5d0d57baab0cecaa4670c8b68c521.jpg)
+![](https://oscimg.oschina.net/oscnet/fda4bd82cab9d682de1c1fbf2060bf14fa6.jpg)
+
+##### PAD绔�
+![](https://oscimg.oschina.net/oscnet/e90fef970a8c33790ab03ffd6c4c7cec225.jpg)
+![](https://oscimg.oschina.net/oscnet/d78218803a9e856a0aa82b45efc49849a0c.jpg)
+![](https://oscimg.oschina.net/oscnet/0404054d9a12647ef6f82cf9cfb80a5ac02.jpg)
+![](https://oscimg.oschina.net/oscnet/59c23b230f52384e588ee16309b44fa20de.jpg)
+
+
+## 鎹愯禒 
+
+濡傛灉瑙夊緱杩樹笉閿欙紝璇蜂綔鑰呭枬鏉挅鍟″惂 鈽�
+
+![](https://static.oschina.net/uploads/img/201903/08155608_0EFX.png)
diff --git a/build/config/themeConfig.ts b/build/config/themeConfig.ts
deleted file mode 100644
index 8dbe118..0000000
--- a/build/config/themeConfig.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import { generate } from '@ant-design/colors';
-
-export const primaryColor = '#1890FF';
-
-export const darkMode = 'light';
-
-type Fn = (...arg: any) => any;
-
-type GenerateTheme = 'default' | 'dark';
-
-export interface GenerateColorsParams {
-  mixLighten: Fn;
-  mixDarken: Fn;
-  tinycolor: any;
-  color?: string;
-}
-
-export function generateAntColors(color: string, theme: GenerateTheme = 'default') {
-  return generate(color, {
-    theme,
-  });
-}
-
-export function getThemeColors(color?: string) {
-  const tc = color || primaryColor;
-  const lightColors = generateAntColors(tc);
-  const primary = lightColors[5];
-  const modeColors = generateAntColors(primary, 'dark');
-
-  return [...lightColors, ...modeColors];
-}
-
-export function generateColors({
-  color = primaryColor,
-  mixLighten,
-  mixDarken,
-  tinycolor,
-}: GenerateColorsParams) {
-  const arr = new Array(19).fill(0);
-  const lightens = arr.map((_t, i) => {
-    return mixLighten(color, i / 5);
-  });
-
-  const darkens = arr.map((_t, i) => {
-    return mixDarken(color, i / 5);
-  });
-
-  const alphaColors = arr.map((_t, i) => {
-    return tinycolor(color)
-      .setAlpha(i / 20)
-      .toRgbString();
-  });
-
-  const shortAlphaColors = alphaColors.map((item) => item.replace(/\s/g, '').replace(/0\./g, '.'));
-
-  const tinycolorLightens = arr
-    .map((_t, i) => {
-      return tinycolor(color)
-        .lighten(i * 5)
-        .toHexString();
-    })
-    .filter((item) => item !== '#ffffff');
-
-  const tinycolorDarkens = arr
-    .map((_t, i) => {
-      return tinycolor(color)
-        .darken(i * 5)
-        .toHexString();
-    })
-    .filter((item) => item !== '#000000');
-  return [
-    ...lightens,
-    ...darkens,
-    ...alphaColors,
-    ...shortAlphaColors,
-    ...tinycolorDarkens,
-    ...tinycolorLightens,
-  ].filter((item) => !item.includes('-'));
-}
diff --git a/build/constant.ts b/build/constant.ts
deleted file mode 100644
index 2c6119c..0000000
--- a/build/constant.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * The name of the configuration file entered in the production environment
- */
-export const GLOB_CONFIG_FILE_NAME = '_app.config.js';
-
-export const OUTPUT_DIR = 'dist';
diff --git a/build/generate/generateModifyVars.ts b/build/generate/generateModifyVars.ts
deleted file mode 100644
index 44670e2..0000000
--- a/build/generate/generateModifyVars.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { generateAntColors, primaryColor } from '../config/themeConfig';
-import { getThemeVariables } from 'ant-design-vue/dist/theme';
-import { resolve } from 'path';
-
-/**
- * less global variable
- */
-export function generateModifyVars(dark = false) {
-  const palettes = generateAntColors(primaryColor);
-  const primary = palettes[5];
-
-  const primaryColorObj: Record<string, string> = {};
-
-  for (let index = 0; index < 10; index++) {
-    primaryColorObj[`primary-${index + 1}`] = palettes[index];
-  }
-
-  const modifyVars = getThemeVariables({ dark });
-  return {
-    ...modifyVars,
-    // Used for global import to avoid the need to import each style file separately
-    // reference:  Avoid repeated references
-    hack: `${modifyVars.hack} @import (reference) "${resolve('src/design/config.less')}";`,
-    'primary-color': primary,
-    ...primaryColorObj,
-    'info-color': primary,
-    'processing-color': primary,
-    'success-color': '#55D187', //  Success color
-    'error-color': '#ED6F6F', //  False color
-    'warning-color': '#EFBD47', //   Warning color
-    //'border-color-base': '#EEEEEE',
-    'font-size-base': '14px', //  Main font size
-    'border-radius-base': '2px', //  Component/float fillet
-    'link-color': primary, //   Link color
-    'app-content-background': '#fafafa', //   Link color
-  };
-}
diff --git a/build/generate/icon/index.ts b/build/generate/icon/index.ts
deleted file mode 100644
index 1b1bfd7..0000000
--- a/build/generate/icon/index.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import path from 'path';
-import fs from 'fs-extra';
-import inquirer from 'inquirer';
-import colors from 'picocolors';
-import pkg from '../../../package.json';
-
-async function generateIcon() {
-  const dir = path.resolve(process.cwd(), 'node_modules/@iconify/json');
-
-  const raw = await fs.readJSON(path.join(dir, 'collections.json'));
-
-  const collections = Object.entries(raw).map(([id, v]) => ({
-    ...(v as any),
-    id,
-  }));
-
-  const choices = collections.map((item) => ({ key: item.id, value: item.id, name: item.name }));
-
-  inquirer
-    .prompt([
-      {
-        type: 'list',
-        name: 'useType',
-        choices: [
-          { key: 'local', value: 'local', name: 'Local' },
-          { key: 'onLine', value: 'onLine', name: 'OnLine' },
-        ],
-        message: 'How to use icons?',
-      },
-      {
-        type: 'list',
-        name: 'iconSet',
-        choices: choices,
-        message: 'Select the icon set that needs to be generated?',
-      },
-      {
-        type: 'input',
-        name: 'output',
-        message: 'Select the icon set that needs to be generated?',
-        default: 'src/components/Icon/data',
-      },
-    ])
-    .then(async (answers) => {
-      const { iconSet, output, useType } = answers;
-      const outputDir = path.resolve(process.cwd(), output);
-      fs.ensureDir(outputDir);
-      const genCollections = collections.filter((item) => [iconSet].includes(item.id));
-      const prefixSet: string[] = [];
-      for (const info of genCollections) {
-        const data = await fs.readJSON(path.join(dir, 'json', `${info.id}.json`));
-        if (data) {
-          const { prefix } = data;
-          const isLocal = useType === 'local';
-          const icons = Object.keys(data.icons).map((item) => `${isLocal ? prefix + ':' : ''}${item}`);
-
-          await fs.writeFileSync(
-            path.join(output, `icons.data.ts`),
-            `export default ${isLocal ? JSON.stringify(icons) : JSON.stringify({ prefix, icons })}`
-          );
-          prefixSet.push(prefix);
-        }
-      }
-      fs.emptyDir(path.join(process.cwd(), 'node_modules/.vite'));
-      console.log(`鉁� ${colors.cyan(`[${pkg.name}]`)}` + ' - Icon generated successfully:' + `[${prefixSet}]`);
-    });
-}
-
-generateIcon();
diff --git a/build/getConfigFileName.ts b/build/getConfigFileName.ts
deleted file mode 100644
index 46cb902..0000000
--- a/build/getConfigFileName.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Get the configuration file variable name
- * @param env
- */
-export const getConfigFileName = (env: Record<string, any>) => {
-  return `__PRODUCTION__${env.VITE_GLOB_APP_SHORT_NAME || '__APP'}__CONF__`.toUpperCase().replace(/\s/g, '');
-};
diff --git a/build/script/buildConf.ts b/build/script/buildConf.ts
deleted file mode 100644
index 0c8089c..0000000
--- a/build/script/buildConf.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Generate additional configuration files when used for packaging. The file can be configured with some global variables, so that it can be changed directly externally without repackaging
- */
-import { GLOB_CONFIG_FILE_NAME, OUTPUT_DIR } from '../constant';
-import fs, { writeFileSync } from 'fs-extra';
-import colors from 'picocolors';
-
-import { getEnvConfig, getRootPath } from '../utils';
-import { getConfigFileName } from '../getConfigFileName';
-
-import pkg from '../../package.json';
-
-interface CreateConfigParams {
-  configName: string;
-  config: any;
-  configFileName?: string;
-}
-
-function createConfig(params: CreateConfigParams) {
-  const { configName, config, configFileName } = params;
-  try {
-    const windowConf = `window.${configName}`;
-    // Ensure that the variable will not be modified
-    let configStr = `${windowConf}=${JSON.stringify(config)};`;
-    configStr += `
-      Object.freeze(${windowConf});
-      Object.defineProperty(window, "${configName}", {
-        configurable: false,
-        writable: false,
-      });
-    `.replace(/\s/g, '');
-
-    fs.mkdirp(getRootPath(OUTPUT_DIR));
-    writeFileSync(getRootPath(`${OUTPUT_DIR}/${configFileName}`), configStr);
-
-    console.log(colors.cyan(`鉁� [${pkg.name}]`) + ` - configuration file is build successfully:`);
-    console.log(colors.gray(OUTPUT_DIR + '/' + colors.green(configFileName)) + '\n');
-  } catch (error) {
-    console.log(colors.red('configuration file configuration file failed to package:\n' + error));
-  }
-}
-
-export function runBuildConfig() {
-  const config = getEnvConfig();
-  const configFileName = getConfigFileName(config);
-  createConfig({ config, configName: configFileName, configFileName: GLOB_CONFIG_FILE_NAME });
-}
diff --git a/build/script/postBuild.ts b/build/script/postBuild.ts
deleted file mode 100644
index 42635d8..0000000
--- a/build/script/postBuild.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-// #!/usr/bin/env node
-
-import { runBuildConfig } from './buildConf';
-import colors from 'picocolors';
-
-import pkg from '../../package.json';
-
-export const runBuild = async () => {
-  try {
-    const argvList = process.argv.splice(2);
-
-    // Generate configuration file
-    if (!argvList.includes('disabled-config')) {
-      runBuildConfig();
-    }
-
-    console.log(`鉁� ${colors.cyan(`[${pkg.name}]`)}` + ' - build successfully!');
-  } catch (error) {
-    console.log(colors.red('vite build error:\n' + error));
-    process.exit(1);
-  }
-};
-runBuild();
diff --git a/build/utils.ts b/build/utils.ts
deleted file mode 100644
index c201514..0000000
--- a/build/utils.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import fs from 'fs';
-import path from 'path';
-import dotenv from 'dotenv';
-
-export function isDevFn(mode: string): boolean {
-  return mode === 'development';
-}
-
-export function isProdFn(mode: string): boolean {
-  return mode === 'production';
-}
-
-/**
- * Whether to generate package preview
- */
-export function isReportMode(): boolean {
-  return process.env.REPORT === 'true';
-}
-
-// Read all environment variable configuration files to process.env
-export function wrapperEnv(envConf: Recordable): ViteEnv {
-  const ret: any = {};
-
-  for (const envName of Object.keys(envConf)) {
-    let realName = envConf[envName].replace(/\\n/g, '\n');
-    realName = realName === 'true' ? true : realName === 'false' ? false : realName;
-
-    if (envName === 'VITE_PORT') {
-      realName = Number(realName);
-    }
-    if (envName === 'VITE_PROXY' && realName) {
-      try {
-        realName = JSON.parse(realName.replace(/'/g, '"'));
-      } catch (error) {
-        realName = '';
-      }
-    }
-    ret[envName] = realName;
-    if (typeof realName === 'string') {
-      process.env[envName] = realName;
-    } else if (typeof realName === 'object') {
-      process.env[envName] = JSON.stringify(realName);
-    }
-  }
-  return ret;
-}
-
-/**
- * 鑾峰彇褰撳墠鐜涓嬬敓鏁堢殑閰嶇疆鏂囦欢鍚�
- */
-function getConfFiles() {
-  const script = process.env.npm_lifecycle_script;
-  const reg = new RegExp('--mode ([a-z_\\d]+)');
-  const result = reg.exec(script as string) as any;
-  if (result) {
-    const mode = result[1] as string;
-    return ['.env', `.env.${mode}`];
-  }
-  return ['.env', '.env.production'];
-}
-
-/**
- * Get the environment variables starting with the specified prefix
- * @param match prefix
- * @param confFiles ext
- */
-export function getEnvConfig(match = 'VITE_GLOB_', confFiles = getConfFiles()) {
-  let envConfig = {};
-  confFiles.forEach((item) => {
-    try {
-      const env = dotenv.parse(fs.readFileSync(path.resolve(process.cwd(), item)));
-      envConfig = { ...envConfig, ...env };
-    } catch (e) {
-      console.error(`Error in parsing ${item}`, e);
-    }
-  });
-  const reg = new RegExp(`^(${match})`);
-  Object.keys(envConfig).forEach((key) => {
-    if (!reg.test(key)) {
-      Reflect.deleteProperty(envConfig, key);
-    }
-  });
-  return envConfig;
-}
-
-/**
- * Get user root directory
- * @param dir file path
- */
-export function getRootPath(...dir: string[]) {
-  return path.resolve(process.cwd(), ...dir);
-}
diff --git a/build/vite/plugin/compress.ts b/build/vite/plugin/compress.ts
deleted file mode 100644
index 987f127..0000000
--- a/build/vite/plugin/compress.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Used to package and output gzip. Note that this does not work properly in Vite, the specific reason is still being investigated
- * https://github.com/anncwb/vite-plugin-compression
- */
-import type { PluginOption } from 'vite';
-import compressPlugin from 'vite-plugin-compression';
-
-export function configCompressPlugin(compress: 'gzip' | 'brotli' | 'none', deleteOriginFile = false): PluginOption | PluginOption[] {
-  const compressList = compress.split(',');
-
-  const plugins: PluginOption[] = [];
-
-  if (compressList.includes('gzip')) {
-    plugins.push(
-      compressPlugin({
-        ext: '.gz',
-        deleteOriginFile,
-      })
-    );
-  }
-
-  if (compressList.includes('brotli')) {
-    plugins.push(
-      compressPlugin({
-        ext: '.br',
-        algorithm: 'brotliCompress',
-        deleteOriginFile,
-      })
-    );
-  }
-  return plugins;
-}
diff --git a/build/vite/plugin/html.ts b/build/vite/plugin/html.ts
deleted file mode 100644
index 6af034a..0000000
--- a/build/vite/plugin/html.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Plugin to minimize and use ejs template syntax in index.html.
- * https://github.com/anncwb/vite-plugin-html
- */
-import type { PluginOption } from 'vite';
-import { createHtmlPlugin } from 'vite-plugin-html';
-import pkg from '../../../package.json';
-import { GLOB_CONFIG_FILE_NAME } from '../../constant';
-
-export function configHtmlPlugin(env: ViteEnv, isBuild: boolean) {
-  const { VITE_GLOB_APP_TITLE, VITE_PUBLIC_PATH } = env;
-
-  const path = VITE_PUBLIC_PATH.endsWith('/') ? VITE_PUBLIC_PATH : `${VITE_PUBLIC_PATH}/`;
-
-  const getAppConfigSrc = () => {
-    return `${path || '/'}${GLOB_CONFIG_FILE_NAME}?v=${pkg.version}-${new Date().getTime()}`;
-  };
-
-  const htmlPlugin: PluginOption[] = createHtmlPlugin({
-    minify: isBuild,
-    inject: {
-      // Inject data into ejs template
-      data: {
-        title: VITE_GLOB_APP_TITLE,
-      },
-      // Embed the generated app.config.js file
-      tags: isBuild
-        ? [
-            {
-              tag: 'script',
-              attrs: {
-                src: getAppConfigSrc(),
-              },
-            },
-          ]
-        : [],
-    },
-  });
-  return htmlPlugin;
-}
diff --git a/build/vite/plugin/imagemin.ts b/build/vite/plugin/imagemin.ts
deleted file mode 100644
index a023573..0000000
--- a/build/vite/plugin/imagemin.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-// Image resource files used to compress the output of the production environment
-// https://github.com/anncwb/vite-plugin-imagemin
-import viteImagemin from 'vite-plugin-imagemin';
-
-export function configImageminPlugin() {
-  const plugin = viteImagemin({
-    gifsicle: {
-      optimizationLevel: 7,
-      interlaced: false,
-    },
-    optipng: {
-      optimizationLevel: 7,
-    },
-    mozjpeg: {
-      quality: 20,
-    },
-    pngquant: {
-      quality: [0.8, 0.9],
-      speed: 4,
-    },
-    svgo: {
-      plugins: [
-        {
-          name: 'removeViewBox',
-        },
-        {
-          name: 'removeEmptyAttrs',
-          active: false,
-        },
-      ],
-    },
-  });
-  return plugin;
-}
diff --git a/build/vite/plugin/index.ts b/build/vite/plugin/index.ts
deleted file mode 100644
index 661eb4e..0000000
--- a/build/vite/plugin/index.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-import { PluginOption } from 'vite';
-import vue from '@vitejs/plugin-vue';
-import vueJsx from '@vitejs/plugin-vue-jsx';
-import legacy from '@vitejs/plugin-legacy';
-import purgeIcons from 'vite-plugin-purge-icons';
-import windiCSS from 'vite-plugin-windicss';
-import VitePluginCertificate from 'vite-plugin-mkcert';
-import vueSetupExtend from 'vite-plugin-vue-setup-extend';
-import { configHtmlPlugin } from './html';
-import { configPwaConfig } from './pwa';
-import { configMockPlugin } from './mock';
-import { configCompressPlugin } from './compress';
-import { configStyleImportPlugin } from './styleImport';
-import { configVisualizerConfig } from './visualizer';
-import { configThemePlugin } from './theme';
-import { configImageminPlugin } from './imagemin';
-import { configSvgIconsPlugin } from './svgSprite';
-import OptimizationPersist from 'vite-plugin-optimize-persist'
-import PkgConfig from 'vite-plugin-package-config'
-
-export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
-  const { VITE_USE_IMAGEMIN, VITE_USE_MOCK, VITE_LEGACY, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv;
-
-  const vitePlugins: (PluginOption | PluginOption[])[] = [
-    // have to
-    vue(),
-    // have to
-    vueJsx(),
-    // support name
-    vueSetupExtend(),
-    // @ts-ignore
-    VitePluginCertificate({
-      source: 'coding',
-    }),
-  ];
-
-  // vite-plugin-windicss
-  vitePlugins.push(windiCSS());
-
-  // @vitejs/plugin-legacy
-  VITE_LEGACY && isBuild && vitePlugins.push(legacy());
-
-  // vite-plugin-html
-  vitePlugins.push(configHtmlPlugin(viteEnv, isBuild));
-
-  // vite-plugin-svg-icons
-  vitePlugins.push(configSvgIconsPlugin(isBuild));
-
-  // vite-plugin-mock
-  VITE_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild));
-
-  // vite-plugin-purge-icons
-  vitePlugins.push(purgeIcons());
-
-  // vite-plugin-style-import
-  vitePlugins.push(configStyleImportPlugin(isBuild));
-
-  // rollup-plugin-visualizer
-  vitePlugins.push(configVisualizerConfig());
-
-  // vite-plugin-theme
-  vitePlugins.push(configThemePlugin(isBuild));
-
-  // The following plugins only work in the production environment
-  if (isBuild) {
-    // vite-plugin-imagemin
-    VITE_USE_IMAGEMIN && vitePlugins.push(configImageminPlugin());
-
-    // rollup-plugin-gzip
-    vitePlugins.push(configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE));
-
-    // vite-plugin-pwa
-    vitePlugins.push(configPwaConfig(viteEnv));
-  }
-
-  //vite-plugin-theme銆愯В鍐硋ite棣栨鎵撳紑鐣岄潰鍔犺浇鎱㈤棶棰樸��
-  vitePlugins.push(PkgConfig());
-  vitePlugins.push(OptimizationPersist());
-  return vitePlugins;
-}
diff --git a/build/vite/plugin/mock.ts b/build/vite/plugin/mock.ts
deleted file mode 100644
index d241e26..0000000
--- a/build/vite/plugin/mock.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Mock plugin for development and production.
- * https://github.com/anncwb/vite-plugin-mock
- */
-import { viteMockServe } from 'vite-plugin-mock';
-
-export function configMockPlugin(isBuild: boolean) {
-  return viteMockServe({
-    ignore: /^\_/,
-    mockPath: 'mock',
-    localEnabled: !isBuild,
-    prodEnabled: isBuild,
-    injectCode: `
-      import { setupProdMockServer } from '../mock/_createProductionServer';
-
-      setupProdMockServer();
-      `,
-  });
-}
diff --git a/build/vite/plugin/pwa.ts b/build/vite/plugin/pwa.ts
deleted file mode 100644
index 90ef5bc..0000000
--- a/build/vite/plugin/pwa.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Zero-config PWA for Vite
- * https://github.com/antfu/vite-plugin-pwa
- */
-import { VitePWA } from 'vite-plugin-pwa';
-
-export function configPwaConfig(env: ViteEnv) {
-  const { VITE_USE_PWA, VITE_GLOB_APP_TITLE, VITE_GLOB_APP_SHORT_NAME } = env;
-
-  if (VITE_USE_PWA) {
-    // vite-plugin-pwa
-    const pwaPlugin = VitePWA({
-      manifest: {
-        name: VITE_GLOB_APP_TITLE,
-        short_name: VITE_GLOB_APP_SHORT_NAME,
-        icons: [
-          {
-            src: './resource/img/pwa-192x192.png',
-            sizes: '192x192',
-            type: 'image/png',
-          },
-          {
-            src: './resource/img/pwa-512x512.png',
-            sizes: '512x512',
-            type: 'image/png',
-          },
-        ],
-      },
-    });
-    return pwaPlugin;
-  }
-  return [];
-}
diff --git a/build/vite/plugin/styleImport.ts b/build/vite/plugin/styleImport.ts
deleted file mode 100644
index da1499d..0000000
--- a/build/vite/plugin/styleImport.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- *  Introduces component library styles on demand.
- * https://github.com/anncwb/vite-plugin-style-import
- */
-import { createStyleImportPlugin } from 'vite-plugin-style-import';
-
-export function configStyleImportPlugin(_isBuild: boolean) {
-  if (!_isBuild) {
-    return [];
-  }
-  const styleImportPlugin = createStyleImportPlugin({
-    libs: [
-      {
-        libraryName: 'ant-design-vue',
-        esModule: true,
-        resolveStyle: (name) => {
-          // 杩欓噷鏄棤闇�棰濆寮曞叆鏍峰紡鏂囦欢鐨勨�滃瓙缁勪欢鈥濆垪琛�
-          const ignoreList = [
-            'anchor-link',
-            'sub-menu',
-            'menu-item',
-            'menu-divider',
-            'menu-item-group',
-            'breadcrumb-item',
-            'breadcrumb-separator',
-            'form-item',
-            'step',
-            'select-option',
-            'select-opt-group',
-            'card-grid',
-            'card-meta',
-            'collapse-panel',
-            'descriptions-item',
-            'list-item',
-            'list-item-meta',
-            'table-column',
-            'table-column-group',
-            'tab-pane',
-            'tab-content',
-            'timeline-item',
-            'tree-node',
-            'skeleton-input',
-            'skeleton-avatar',
-            'skeleton-title',
-            'skeleton-paragraph',
-            'skeleton-image',
-            'skeleton-button',
-          ];
-          // 杩欓噷鏄渶瑕侀澶栧紩鍏ユ牱寮忕殑瀛愮粍浠跺垪琛�
-          // 鍗曠嫭寮曞叆瀛愮粍浠舵椂闇�寮曞叆缁勪欢鏍峰紡锛屽惁鍒欎細鍦ㄦ墦鍖呭悗瀵艰嚧瀛愮粍浠舵牱寮忎涪澶�
-          const replaceList = {
-            'typography-text': 'typography',
-            'typography-title': 'typography',
-            'typography-paragraph': 'typography',
-            'typography-link': 'typography',
-            'dropdown-button': 'dropdown',
-            'input-password': 'input',
-            'input-search': 'input',
-            'input-group': 'input',
-            'radio-group': 'radio',
-            'checkbox-group': 'checkbox',
-            'layout-sider': 'layout',
-            'layout-content': 'layout',
-            'layout-footer': 'layout',
-            'layout-header': 'layout',
-            'month-picker': 'date-picker',
-            'range-picker': 'date-picker',
-            'image-preview-group': 'image',
-          };
-
-          return ignoreList.includes(name)
-            ? ''
-            : replaceList.hasOwnProperty(name)
-            ? `ant-design-vue/es/${replaceList[name]}/style/index`
-            : `ant-design-vue/es/${name}/style/index`;
-        },
-      },
-    ],
-  });
-  return styleImportPlugin;
-}
diff --git a/build/vite/plugin/svgSprite.ts b/build/vite/plugin/svgSprite.ts
deleted file mode 100644
index 61f637f..0000000
--- a/build/vite/plugin/svgSprite.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- *  Vite Plugin for fast creating SVG sprites.
- * https://github.com/anncwb/vite-plugin-svg-icons
- */
-
-import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
-import path from 'path';
-
-export function configSvgIconsPlugin(isBuild: boolean) {
-  const svgIconsPlugin = createSvgIconsPlugin({
-    iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
-    svgoOptions: isBuild,
-    // default
-    symbolId: 'icon-[dir]-[name]',
-  });
-  return svgIconsPlugin;
-}
diff --git a/build/vite/plugin/theme.ts b/build/vite/plugin/theme.ts
deleted file mode 100644
index f9a10c3..0000000
--- a/build/vite/plugin/theme.ts
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * Vite plugin for website theme color switching
- * https://github.com/anncwb/vite-plugin-theme
- */
-import type { PluginOption } from 'vite';
-import path from 'path';
-import { viteThemePlugin, antdDarkThemePlugin, mixLighten, mixDarken, tinycolor } from '@rys-fe/vite-plugin-theme';
-import { getThemeColors, generateColors } from '../../config/themeConfig';
-import { generateModifyVars } from '../../generate/generateModifyVars';
-
-export function configThemePlugin(isBuild: boolean): PluginOption[] {
-  const colors = generateColors({
-    mixDarken,
-    mixLighten,
-    tinycolor,
-  });
-
-  // update-begin-淇缂栬瘧鍚庝富棰樿壊鍒囨崲涓嶇敓鏁堥粦灞忕殑闂-----------------------
-  // https://github.com/vbenjs/vue-vben-admin/issues/1445
-  // 鎶藉彇鍑簐iteThemePlugin鎻掍欢锛屼笅鏂逛細鏍规嵁涓嶅悓鐜璁剧疆enforce
-  const vite_theme_plugin = viteThemePlugin({
-    resolveSelector: (s) => {
-      s = s.trim();
-      switch (s) {
-        case '.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon':
-          return '.ant-steps-item-icon > .ant-steps-icon';
-        case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)':
-        case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover':
-        case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active':
-          return s;
-        case '.ant-steps-item-icon > .ant-steps-icon':
-          return s;
-        case '.ant-select-item-option-selected:not(.ant-select-item-option-disabled)':
-          return s;
-        default:
-          if (s.indexOf('.ant-btn') >= -1) {
-            // 鎸夐挳琚噸鏂板畾鍒惰繃锛岄渶瑕佽繃婊ゆ帀class闃叉瑕嗙洊
-            return s;
-          }
-      }
-      return s.startsWith('[data-theme') ? s : `[data-theme] ${s}`;
-    },
-    colorVariables: [...getThemeColors(), ...colors],
-  });
-  vite_theme_plugin.forEach(function (item) {
-    //瀵箆ite:theme鎻掍欢鐗规畩閰嶇疆
-    if ('vite:theme' === item.name) {
-      // 鎵撳寘鏃跺幓闄nforce: "post"锛寁ite 2.6.x閫傞厤锛屽惁鍒欑敓鎴恆pp-theme-style涓虹┖锛屽洜涓篴sync transform(code, id) {鐨刢ode娌℃湁姝g‘鑾峰彇
-      if (isBuild) {
-        delete item.enforce;
-      }
-    }
-  });
-  // update-end-淇缂栬瘧鍚庝富棰樿壊鍒囨崲涓嶇敓鏁堥粦灞忕殑闂-----------------------
-
-  const plugin = [
-    vite_theme_plugin,
-    antdDarkThemePlugin({
-      preloadFiles: [
-        path.resolve(process.cwd(), 'node_modules/ant-design-vue/dist/antd.less'),
-        //path.resolve(process.cwd(), 'node_modules/ant-design-vue/dist/antd.dark.less'),
-        path.resolve(process.cwd(), 'src/design/index.less'),
-      ],
-      filter: (id) => (isBuild ? !id.endsWith('antd.less') : true),
-      // extractCss: false,
-      darkModifyVars: {
-        ...generateModifyVars(true),
-        'text-color': '#c9d1d9',
-        'primary-1': 'rgb(255 255 255 / 8%)',
-        'text-color-base': '#c9d1d9',
-        'component-background': '#151515',
-        'heading-color': 'rgb(255 255 255 / 65%)',
-        // black: '#0e1117',
-        // #8b949e
-        'text-color-secondary': '#8b949e',
-        'border-color-base': '#303030',
-        'header-light-bottom-border-color': '#303030',
-        // 'border-color-split': '#30363d',
-        'item-active-bg': '#111b26',
-        'app-content-background': '#1e1e1e',
-        'tree-node-selected-bg': '#11263c',
-
-        'alert-success-border-color': '#274916',
-        'alert-success-bg-color': '#162312',
-        'alert-success-icon-color': '#49aa19',
-        'alert-info-border-color': '#153450',
-        'alert-info-bg-color': '#111b26',
-        'alert-info-icon-color': '#177ddc',
-        'alert-warning-border-color': '#594214',
-        'alert-warning-bg-color': '#2b2111',
-        'alert-warning-icon-color': '#d89614',
-        'alert-error-border-color': '#58181c',
-        'alert-error-bg-color': '#2a1215',
-        'alert-error-icon-color': '#a61d24',
-      },
-    }),
-  ];
-
-  return plugin as unknown as PluginOption[];
-}
diff --git a/build/vite/plugin/visualizer.ts b/build/vite/plugin/visualizer.ts
deleted file mode 100644
index 75d4451..0000000
--- a/build/vite/plugin/visualizer.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Package file volume analysis
- */
-import visualizer from 'rollup-plugin-visualizer';
-import { isReportMode } from '../../utils';
-
-export function configVisualizerConfig() {
-  if (isReportMode()) {
-    return visualizer({
-      filename: './node_modules/.cache/visualizer/stats.html',
-      open: true,
-      gzipSize: true,
-      brotliSize: true,
-    }) as Plugin;
-  }
-  return [];
-}
diff --git a/build/vite/proxy.ts b/build/vite/proxy.ts
deleted file mode 100644
index 8525397..0000000
--- a/build/vite/proxy.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Used to parse the .env.development proxy configuration
- */
-import type { ProxyOptions } from 'vite';
-
-type ProxyItem = [string, string];
-
-type ProxyList = ProxyItem[];
-
-type ProxyTargetList = Record<string, ProxyOptions>;
-
-const httpsRE = /^https:\/\//;
-
-/**
- * Generate proxy
- * @param list
- */
-export function createProxy(list: ProxyList = []) {
-  const ret: ProxyTargetList = {};
-  for (const [prefix, target] of list) {
-    const isHttps = httpsRE.test(target);
-
-    // https://github.com/http-party/node-http-proxy#options
-    ret[prefix] = {
-      target: target,
-      changeOrigin: true,
-      ws: true,
-      rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ''),
-      // https is require secure=false
-      ...(isHttps ? { secure: false } : {}),
-    };
-  }
-  return ret;
-}
diff --git a/commitlint.config.js b/commitlint.config.js
deleted file mode 100644
index 7377435..0000000
--- a/commitlint.config.js
+++ /dev/null
@@ -1,16 +0,0 @@
-module.exports = {
-	ignores: [(commit) => commit.includes('init')],
-	extends: ['@commitlint/config-conventional'],
-	rules: {
-		'body-leading-blank': [2, 'always'],
-		'footer-leading-blank': [1, 'always'],
-		'header-max-length': [2, 'always', 108],
-		'subject-empty': [2, 'never'],
-		'type-empty': [2, 'never'],
-		'type-enum': [
-			2,
-			'always',
-			['feat', 'fix', 'perf', 'style', 'docs', 'test', 'refactor', 'build', 'ci', 'chore', 'revert', 'wip', 'workflow', 'types', 'release'],
-		],
-	},
-}
diff --git a/index.html b/index.html
deleted file mode 100644
index c80afd8..0000000
--- a/index.html
+++ /dev/null
@@ -1,170 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh_CN" id="htmlRoot">
-  <head>
-    <meta charset="UTF-8" />
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
-    <meta name="renderer" content="webkit" />
-    <meta
-      name="viewport"
-      content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"
-    />
-
-    <title><%= title %></title>
-    <link rel="icon" href="/logo.png" />
-    <!-- 鍏ㄥ眬閰嶇疆 -->
-    <script>
-      window._CONFIG = {};
-    </script>
-  </head>
-  <body>
-    <script>
-      (() => {
-        var htmlRoot = document.getElementById('htmlRoot');
-        var theme = window.localStorage.getItem('__APP__DARK__MODE__');
-        if (htmlRoot && theme) {
-          htmlRoot.setAttribute('data-theme', theme);
-          theme = htmlRoot = null;
-        }
-      })();
-    </script>
-    <div id="app">
-      <style>
-        html[data-theme='dark'] .app-loading {
-          background-color: #2c344a;
-        }
-
-        html[data-theme='dark'] .app-loading .app-loading-title {
-          color: rgba(255, 255, 255, 0.85);
-        }
-
-        .app-loading {
-          display: flex;
-          width: 100%;
-          height: 100%;
-          justify-content: center;
-          align-items: center;
-          flex-direction: column;
-          background-color: #f4f7f9;
-        }
-
-        .app-loading .app-loading-wrap {
-          position: absolute;
-          top: 50%;
-          left: 50%;
-          display: flex;
-          -webkit-transform: translate3d(-50%, -50%, 0);
-          transform: translate3d(-50%, -50%, 0);
-          justify-content: center;
-          align-items: center;
-          flex-direction: column;
-        }
-
-        .app-loading .dots {
-          display: flex;
-          padding: 98px;
-          justify-content: center;
-          align-items: center;
-        }
-
-        .app-loading .app-loading-title {
-          display: flex;
-          margin-top: 30px;
-          font-size: 30px;
-          color: rgba(0, 0, 0, 0.85);
-          justify-content: center;
-          align-items: center;
-        }
-
-        .app-loading .app-loading-logo {
-          display: block;
-          width: 90px;
-          margin: 0 auto;
-          margin-bottom: 20px;
-        }
-
-        .dot {
-          position: relative;
-          display: inline-block;
-          width: 48px;
-          height: 48px;
-          margin-top: 30px;
-          font-size: 32px;
-          transform: rotate(45deg);
-          box-sizing: border-box;
-          animation: antRotate 1.2s infinite linear;
-        }
-
-        .dot i {
-          position: absolute;
-          display: block;
-          width: 20px;
-          height: 20px;
-          background-color: #0065cc;
-          border-radius: 100%;
-          opacity: 0.3;
-          transform: scale(0.75);
-          animation: antSpinMove 1s infinite linear alternate;
-          transform-origin: 50% 50%;
-        }
-
-        .dot i:nth-child(1) {
-          top: 0;
-          left: 0;
-        }
-
-        .dot i:nth-child(2) {
-          top: 0;
-          right: 0;
-          -webkit-animation-delay: 0.4s;
-          animation-delay: 0.4s;
-        }
-
-        .dot i:nth-child(3) {
-          right: 0;
-          bottom: 0;
-          -webkit-animation-delay: 0.8s;
-          animation-delay: 0.8s;
-        }
-
-        .dot i:nth-child(4) {
-          bottom: 0;
-          left: 0;
-          -webkit-animation-delay: 1.2s;
-          animation-delay: 1.2s;
-        }
-        @keyframes antRotate {
-          to {
-            -webkit-transform: rotate(405deg);
-            transform: rotate(405deg);
-          }
-        }
-        @-webkit-keyframes antRotate {
-          to {
-            -webkit-transform: rotate(405deg);
-            transform: rotate(405deg);
-          }
-        }
-        @keyframes antSpinMove {
-          to {
-            opacity: 1;
-          }
-        }
-        @-webkit-keyframes antSpinMove {
-          to {
-            opacity: 1;
-          }
-        }
-      </style>
-      <div class="app-loading">
-        <div class="app-loading-wrap">
-          <img src="/resource/img/logo.png" class="app-loading-logo" alt="Logo" />
-          <div class="app-loading-dots">
-            <span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
-          </div>
-          <div class="app-loading-title"><%= title %></div>
-        </div>
-      </div>
-    </div>
-    <script type="module" src="/src/main.ts"></script>
-  </body>
-</html>
diff --git a/jest.config.mjs b/jest.config.mjs
deleted file mode 100644
index 162e72b..0000000
--- a/jest.config.mjs
+++ /dev/null
@@ -1,36 +0,0 @@
-export default {
-  preset: 'ts-jest',
-  roots: ['<rootDir>/tests/'],
-  clearMocks: true,
-  moduleDirectories: ['node_modules', 'src'],
-  moduleFileExtensions: ['js', 'ts', 'vue', 'tsx', 'jsx', 'json', 'node'],
-  modulePaths: ['<rootDir>/src', '<rootDir>/node_modules'],
-  testMatch: [
-    '**/tests/**/*.[jt]s?(x)',
-    '**/?(*.)+(spec|test).[tj]s?(x)',
-    '(/__tests__/.*|(\\.|/)(test|spec))\\.(js|ts)$',
-  ],
-  testPathIgnorePatterns: [
-    '<rootDir>/tests/server/',
-    '<rootDir>/tests/__mocks__/',
-    '/node_modules/',
-  ],
-  transform: {
-    '^.+\\.tsx?$': 'ts-jest',
-  },
-  transformIgnorePatterns: ['<rootDir>/tests/__mocks__/', '/node_modules/'],
-  // A map from regular expressions to module names that allow to stub out resources with a single module
-  moduleNameMapper: {
-    '\\.(vs|fs|vert|frag|glsl|jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
-      '<rootDir>/tests/__mocks__/fileMock.ts',
-    '\\.(sass|s?css|less)$': '<rootDir>/tests/__mocks__/styleMock.ts',
-    '\\?worker$': '<rootDir>/tests/__mocks__/workerMock.ts',
-    '^/@/(.*)$': '<rootDir>/src/$1',
-  },
-  testEnvironment: 'jsdom',
-  verbose: true,
-  collectCoverage: false,
-  coverageDirectory: 'coverage',
-  collectCoverageFrom: ['src/**/*.{js,ts,vue}'],
-  coveragePathIgnorePatterns: ['^.+\\.d\\.ts$'],
-};
diff --git a/mock/_createProductionServer.ts b/mock/_createProductionServer.ts
deleted file mode 100644
index 8f47c23..0000000
--- a/mock/_createProductionServer.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { createProdMockServer } from 'vite-plugin-mock/es/createProdMockServer';
-
-const modules = import.meta.glob('./**/*.ts', { eager: true });
-
-const mockModules: any[] = [];
-Object.keys(modules).forEach((key) => {
-  if (key.includes('/_')) {
-    return;
-  }
-  mockModules.push(...(modules as Recordable)[key].default);
-});
-
-/**
- * Used in a production environment. Need to manually import all modules
- */
-export function setupProdMockServer() {
-  createProdMockServer(mockModules);
-}
diff --git a/mock/_util.ts b/mock/_util.ts
deleted file mode 100644
index 6a171d5..0000000
--- a/mock/_util.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-// Interface data format used to return a unified format
-
-export function resultSuccess<T = Recordable>(result: T, { message = 'ok' } = {}) {
-  return {
-    code: 0,
-    result,
-    message,
-    type: 'success',
-  };
-}
-
-export function resultPageSuccess<T = any>(
-  pageNo: number,
-  pageSize: number,
-  list: T[],
-  { message = 'ok' } = {}
-) {
-  const pageData = pagination(pageNo, pageSize, list);
-
-  return {
-    ...resultSuccess({
-      records: pageData,
-      total: list.length,
-    }),
-    message,
-  };
-}
-
-export function resultError(message = 'Request failed', { code = -1, result = null } = {}) {
-  return {
-    code,
-    result,
-    message,
-    type: 'error',
-  };
-}
-
-export function pagination<T = any>(pageNo: number, pageSize: number, array: T[]): T[] {
-  const offset = (pageNo - 1) * Number(pageSize);
-  const ret =
-    offset + Number(pageSize) >= array.length
-      ? array.slice(offset, array.length)
-      : array.slice(offset, offset + Number(pageSize));
-  return ret;
-}
-
-export interface requestParams {
-  method: string;
-  body: any;
-  headers?: { authorization?: string };
-  query: any;
-}
-
-/**
- * @description 鏈嚱鏁扮敤浜庝粠request鏁版嵁涓幏鍙杢oken锛岃鏍规嵁椤圭洰鐨勫疄闄呮儏鍐典慨鏀�
- *
- */
-export function getRequestToken({ headers }: requestParams): string | undefined {
-  return headers?.authorization;
-}
-
-//TODO 鎺ュ彛鐖惰矾寰勶紙鍐欐涓嶅鐏垫椿锛�
-export const baseUrl = '/jeecgboot/mock';
diff --git a/mock/demo/account.ts b/mock/demo/account.ts
deleted file mode 100644
index a8a31c2..0000000
--- a/mock/demo/account.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-import { MockMethod } from 'vite-plugin-mock';
-import { resultSuccess, resultError, baseUrl } from '../_util';
-import { ResultEnum } from '../../src/enums/httpEnum';
-const userInfo = {
-  name: 'Jeecg',
-  userid: '00000001',
-  email: 'test@gmail.com',
-  signature: '娴风撼鐧惧窛锛屾湁瀹逛箖澶�',
-  introduction: '寰瑧鐫�锛屽姫鍔涚潃锛屾璧忕潃',
-  title: '浜や簰涓撳',
-  group: '鏌愭煇鏌愪簨涓氱兢锛嶆煇鏌愬钩鍙伴儴锛嶆煇鏌愭妧鏈儴锛峌ED',
-  tags: [
-    {
-      key: '0',
-      label: '寰堟湁鎯虫硶鐨�',
-    },
-    {
-      key: '1',
-      label: '涓撴敞璁捐',
-    },
-    {
-      key: '2',
-      label: '杈',
-    },
-    {
-      key: '3',
-      label: '澶ч暱鑵�',
-    },
-    {
-      key: '4',
-      label: '宸濆瀛�',
-    },
-    {
-      key: '5',
-      label: '娴风撼鐧惧窛',
-    },
-  ],
-  notifyCount: 12,
-  unreadCount: 11,
-  country: 'China',
-  address: 'Xiamen City 77',
-  phone: '0592-268888888',
-};
-
-export default [
-  {
-    url: `${baseUrl}/account/getAccountInfo`,
-    timeout: 1000,
-    method: 'get',
-    response: () => {
-      return resultSuccess(userInfo);
-    },
-  },
-  {
-    url: `${baseUrl}/user/sessionTimeout`,
-    method: 'post',
-    statusCode: 401,
-    response: () => {
-      return resultError();
-    },
-  },
-  {
-    url: '/basic-api/user/tokenExpired',
-    method: 'post',
-    statusCode: 200,
-    response: () => {
-      return resultError('Token Expired!', { code: ResultEnum.TIMEOUT as number });
-    },
-  },
-] as MockMethod[];
diff --git a/mock/demo/select-demo.ts b/mock/demo/select-demo.ts
deleted file mode 100644
index ca2d949..0000000
--- a/mock/demo/select-demo.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { MockMethod } from 'vite-plugin-mock';
-import { resultSuccess, baseUrl } from '../_util';
-
-const demoList = (keyword, count = 20) => {
-  const result = {
-    list: [] as any[],
-  };
-  for (let index = 0; index < count; index++) {
-    result.list.push({
-      name: `${keyword ?? ''}閫夐」${index}`,
-      id: `${index}`,
-    });
-  }
-  return result;
-};
-
-export default [
-  {
-    url: `${baseUrl}/select/getDemoOptions`,
-    timeout: 1000,
-    method: 'get',
-    response: ({ query }) => {
-      const { keyword,count} = query;
-      console.log(keyword);
-      return resultSuccess(demoList(keyword,count));
-    },
-  },
-] as MockMethod[];
diff --git a/mock/demo/system.ts b/mock/demo/system.ts
deleted file mode 100644
index 940c04e..0000000
--- a/mock/demo/system.ts
+++ /dev/null
@@ -1,298 +0,0 @@
-import { MockMethod } from 'vite-plugin-mock';
-import { resultError, resultPageSuccess, resultSuccess, baseUrl } from '../_util';
-
-const accountList = (() => {
-    const result: any[] = [];
-    for (let index = 0; index < 20; index++) {
-        result.push({
-            id: `${index}`,
-            account: '@first',
-            email: '@email',
-            nickname: '@cname()',
-            role: '@first',
-            createTime: '@datetime',
-            remark: '@cword(10,20)',
-            'status|1': ['0', '1'],
-        });
-    }
-    return result;
-})();
-
-const userList = (() => {
-    const result: any[] = [];
-    for (let index = 0; index < 20; index++) {
-        result.push({
-            id: `${index}`,
-            username: '@first',
-            email: '@email',
-            realname: '@cname()',
-            createTime: '@datetime',
-            remark: '@cword(10,20)',
-            avatar: 'https://q1.qlogo.cn/g?b=qq&nk=190848757&s=640'
-        });
-    }
-    return result;
-})();
-
-const roleList = (() => {
-    const result: any[] = [];
-    for (let index = 0; index < 4; index++) {
-        result.push({
-            id: index + 1,
-            orderNo: `${index + 1}`,
-            roleName: ['瓒呯骇绠$悊鍛�', '绠$悊鍛�', '鏂囩珷绠$悊鍛�', '鏅�氱敤鎴�'][index],
-            roleValue: '@first',
-            createTime: '@datetime',
-            remark: '@cword(10,20)',
-            menu: [['0', '1', '2'], ['0', '1'], ['0', '2'], ['2']][index],
-            'status|1': ['0', '1'],
-        });
-    }
-    return result;
-})();
-
-const newRoleList = (() => {
-    const result: any[] = [];
-    for (let index = 0; index < 4; index++) {
-        result.push({
-            id: index + 1,
-            orderNo: `${index + 1}`,
-            roleName: ['瓒呯骇绠$悊鍛�', '绠$悊鍛�', '鏂囩珷绠$悊鍛�', '鏅�氱敤鎴�'][index],
-            roleCode: '@first',
-            createTime: '@datetime',
-            remark: '@cword(10,20)'
-        });
-    }
-    return result;
-})();
-
-const testList = (() => {
-    const result: any[] = [];
-    for (let index = 0; index < 4; index++) {
-        result.push({
-            id: index + 1,
-            orderNo: `${index + 1}`,
-            testName: ['鏁版嵁1', '鏁版嵁2', '鏁版嵁3', '鏁版嵁4'][index],
-            testValue: '@first',
-            createTime: '@datetime'
-        });
-    }
-    return result;
-})();
-
-const tableDemoList = (() => {
-    const result: any[] = [];
-    for (let index = 0; index < 4; index++) {
-        result.push({
-            id: index + 1,
-            orderCode: '2008200' + `${index + 1}`,
-            orderMoney: '@natural(1000,3000)',
-            ctype: '@natural(1,2)',
-            content: '@cword(10,20)',
-            orderDate: '@datetime'
-        });
-    }
-    return result;
-})();
-
-const deptList = (() => {
-    const result: any[] = [];
-    for (let index = 0; index < 3; index++) {
-        result.push({
-            id: `${index}`,
-            deptName: ['鍗庝笢鍒嗛儴', '鍗庡崡鍒嗛儴', '瑗垮寳鍒嗛儴'][index],
-            orderNo: index + 1,
-            createTime: '@datetime',
-            remark: '@cword(10,20)',
-            'status|1': ['0', '0', '1'],
-            children: (() => {
-                const children: any[] = [];
-                for (let j = 0; j < 4; j++) {
-                    children.push({
-                        id: `${index}-${j}`,
-                        deptName: ['鐮斿彂閮�', '甯傚満閮�', '鍟嗗姟閮�', '璐㈠姟閮�'][j],
-                        orderNo: j + 1,
-                        createTime: '@datetime',
-                        remark: '@cword(10,20)',
-                        'status|1': ['0', '1'],
-                        parentDept: `${index}`,
-                        children: undefined,
-                    });
-                }
-                return children;
-            })(),
-        });
-    }
-    return result;
-})();
-
-const menuList = (() => {
-    const result: any[] = [];
-    for (let index = 0; index < 3; index++) {
-        result.push({
-            id: `${index}`,
-            icon: ['ion:layers-outline', 'ion:git-compare-outline', 'ion:tv-outline'][index],
-            component: 'LAYOUT',
-            type: '0',
-            menuName: ['Dashboard', '鏉冮檺绠$悊', '鍔熻兘'][index],
-            permission: '',
-            orderNo: index + 1,
-            createTime: '@datetime',
-            'status|1': ['0', '0', '1'],
-            children: (() => {
-                const children: any[] = [];
-                for (let j = 0; j < 4; j++) {
-                    children.push({
-                        id: `${index}-${j}`,
-                        type: '1',
-                        menuName: ['鑿滃崟1', '鑿滃崟2', '鑿滃崟3', '鑿滃崟4'][j],
-                        icon: 'ion:document',
-                        permission: ['menu1:view', 'menu2:add', 'menu3:update', 'menu4:del'][index],
-                        component: [
-                            '/dashboard/welcome/index',
-                            '/dashboard/Analysis/index',
-                            '/dashboard/workbench/index',
-                            '/dashboard/test/index',
-                        ][j],
-                        orderNo: j + 1,
-                        createTime: '@datetime',
-                        'status|1': ['0', '1'],
-                        parentMenu: `${index}`,
-                        children: (() => {
-                            const children: any[] = [];
-                            for (let k = 0; k < 4; k++) {
-                                children.push({
-                                    id: `${index}-${j}-${k}`,
-                                    type: '2',
-                                    menuName: '鎸夐挳' + (j + 1) + '-' + (k + 1),
-                                    icon: '',
-                                    permission:
-                                        ['menu1:view', 'menu2:add', 'menu3:update', 'menu4:del'][index] +
-                                        ':btn' +
-                                        (k + 1),
-                                    component: [
-                                        '/dashboard/welcome/index',
-                                        '/dashboard/Analysis/index',
-                                        '/dashboard/workbench/index',
-                                        '/dashboard/test/index',
-                                    ][j],
-                                    orderNo: j + 1,
-                                    createTime: '@datetime',
-                                    'status|1': ['0', '1'],
-                                    parentMenu: `${index}-${j}`,
-                                    children: undefined,
-                                });
-                            }
-                            return children;
-                        })(),
-                    });
-                }
-                return children;
-            })(),
-        });
-    }
-    return result;
-})();
-
-export default [
-  {
-    url: `${baseUrl}/system/getAccountList`,
-    timeout: 100,
-    method: 'get',
-    response: ({ query }) => {
-      const { page = 1, pageSize = 20 } = query;
-      return resultPageSuccess(page, pageSize, accountList);
-    },
-  },
-  {
-    url: `${baseUrl}/sys/user/list`,
-    timeout: 100,
-    method: 'get',
-    response: ({ query }) => {
-      const { page = 1, pageSize = 20 } = query;
-      return resultPageSuccess(page, pageSize, userList);
-    },
-  },
-  {
-    url: `${baseUrl}/system/getRoleListByPage`,
-    timeout: 100,
-    method: 'get',
-    response: ({ query }) => {
-      const { page = 1, pageSize = 20 } = query;
-      return resultPageSuccess(page, pageSize, roleList);
-    },
-  },
-  {
-    url: `${baseUrl}/sys/role/list`,
-    timeout: 100,
-    method: 'get',
-    response: ({ query }) => {
-      const { page = 1, pageSize = 20 } = query;
-      return resultPageSuccess(page, pageSize, newRoleList);
-    },
-  },
-  {
-    url: `${baseUrl}/system/getTestListByPage`,
-    timeout: 100,
-    method: 'get',
-    response: ({ query }) => {
-      const { page = 1, pageSize = 20 } = query;
-      return resultPageSuccess(page, pageSize, testList);
-    },
-  },
-  {
-    url: `${baseUrl}/system/getDemoTableListByPage`,
-    timeout: 100,
-    method: 'get',
-    response: ({ query }) => {
-      const { page = 1, pageSize = 20 } = query;
-      return resultPageSuccess(page, pageSize, tableDemoList);
-    },
-  },
-  {
-    url: `${baseUrl}/system/setRoleStatus`,
-    timeout: 500,
-    method: 'post',
-    response: ({ query }) => {
-      const { id, status } = query;
-      return resultSuccess({ id, status });
-    },
-  },
-  {
-    url: `${baseUrl}/system/getAllRoleList`,
-    timeout: 100,
-    method: 'get',
-    response: () => {
-      return resultSuccess(roleList);
-    },
-  },
-  {
-    url: `${baseUrl}/system/getDeptList`,
-    timeout: 100,
-    method: 'get',
-    response: () => {
-      return resultSuccess(deptList);
-    },
-  },
-  {
-    url: `${baseUrl}/system/getMenuList`,
-    timeout: 100,
-    method: 'get',
-    response: () => {
-      return resultSuccess(menuList);
-    },
-  },
-  {
-    url: `${baseUrl}/system/accountExist`,
-    timeout: 500,
-    method: 'post',
-    response: ({ body }) => {
-      const { account } = body || {};
-      if (account && account.indexOf('admin') !== -1) {
-        return resultError('璇ュ瓧娈典笉鑳藉寘鍚玜dmin');
-      } else {
-        return resultSuccess(`${account} can use`);
-      }
-    },
-  },
-] as MockMethod[];
diff --git a/mock/demo/table-demo.ts b/mock/demo/table-demo.ts
deleted file mode 100644
index fbb51f6..0000000
--- a/mock/demo/table-demo.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { MockMethod } from 'vite-plugin-mock';
-import { Random } from 'mockjs';
-import { resultPageSuccess, baseUrl } from '../_util';
-
-function getRandomPics(count = 10): string[] {
-  const arr: string[] = [];
-  for (let i = 0; i < count; i++) {
-    arr.push(Random.image('800x600', Random.color(), Random.color(), Random.title()));
-  }
-  return arr;
-}
-
-const demoList = (() => {
-  const result: any[] = [];
-  for (let index = 0; index < 200; index++) {
-    result.push({
-      id: `${index}`,
-      beginTime: '@datetime',
-      endTime: '@datetime',
-      address: '@city()',
-      name: '@cname()',
-      name1: '@cname()',
-      name2: '@cname()',
-      name3: '@cname()',
-      name4: '@cname()',
-      name5: '@cname()',
-      name6: '@cname()',
-      name7: '@cname()',
-      name8: '@cname()',
-      avatar: Random.image('400x400', Random.color(), Random.color(), Random.first()),
-      imgArr: getRandomPics(Math.ceil(Math.random() * 3) + 1),
-      imgs: getRandomPics(Math.ceil(Math.random() * 3) + 1),
-      date: `@date('yyyy-MM-dd')`,
-      time: `@time('HH:mm')`,
-      'no|100000-10000000': 100000,
-      'status|1': ['normal', 'enable', 'disable'],
-    });
-  }
-  return result;
-})();
-
-export default [
-  {
-    url: `${baseUrl}/table/getDemoList`,
-    timeout: 100,
-    method: 'get',
-    response: ({ query }) => {
-      const { page = 1, pageSize = 20 } = query;
-      return resultPageSuccess(page, pageSize, demoList);
-    },
-  },
-] as MockMethod[];
diff --git a/mock/demo/tree-demo.ts b/mock/demo/tree-demo.ts
deleted file mode 100644
index 1f4ec22..0000000
--- a/mock/demo/tree-demo.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { MockMethod } from 'vite-plugin-mock';
-import { resultSuccess, baseUrl } from '../_util';
-
-const demoTreeList = (keyword) => {
-  const result = {
-    list: [] as Recordable[],
-  };
-  for (let index = 0; index < 5; index++) {
-    const children: Recordable[] = [];
-    for (let j = 0; j < 3; j++) {
-      children.push({
-        title: `${keyword ?? ''}閫夐」${index}-${j}`,
-        value: `${index}-${j}`,
-        key: `${index}-${j}`,
-      });
-    }
-    result.list.push({
-      title: `${keyword ?? ''}閫夐」${index}`,
-      value: `${index}`,
-      key: `${index}`,
-      children,
-    });
-  }
-  return result;
-};
-
-export default [
-  {
-    url: `${baseUrl}/tree/getDemoOptions`,
-    timeout: 1000,
-    method: 'get',
-    response: ({ query }) => {
-      const { keyword } = query;
-      console.log(keyword);
-      return resultSuccess(demoTreeList(keyword));
-    },
-  },
-] as MockMethod[];
diff --git a/mock/sys/menu.ts b/mock/sys/menu.ts
deleted file mode 100644
index 73bda64..0000000
--- a/mock/sys/menu.ts
+++ /dev/null
@@ -1,270 +0,0 @@
-import { resultSuccess, resultError, getRequestToken, requestParams,baseUrl} from '../_util';
-import { MockMethod } from 'vite-plugin-mock';
-import { createFakeUserList } from './user';
-
-// single
-const dashboardRoute = {
-  path: '/dashboard',
-  name: 'Dashboard',
-  component: 'LAYOUT',
-  redirect: '/dashboard/analysis',
-  meta: {
-    title: 'routes.dashboard.dashboard',
-    hideChildrenInMenu: true,
-    icon: 'bx:bx-home',
-  },
-  children: [
-    {
-      path: 'analysis',
-      name: 'Analysis',
-      component: '/dashboard/Analysis/index',
-      meta: {
-        hideMenu: true,
-        hideBreadcrumb: true,
-        title: 'routes.dashboard.analysis',
-        currentActiveMenu: '/dashboard',
-        icon: 'bx:bx-home',
-      },
-    },
-    {
-      path: 'workbench',
-      name: 'Workbench',
-      component: '/dashboard/workbench/index',
-      meta: {
-        hideMenu: true,
-        hideBreadcrumb: true,
-        title: 'routes.dashboard.workbench',
-        currentActiveMenu: '/dashboard',
-        icon: 'bx:bx-home',
-      },
-    },
-  ],
-};
-
-const backRoute = {
-  path: 'back',
-  name: 'PermissionBackDemo',
-  meta: {
-    title: 'routes.demo.permission.back',
-  },
-
-  children: [
-    {
-      path: 'page',
-      name: 'BackAuthPage',
-      component: '/demo/permission/back/index',
-      meta: {
-        title: 'routes.demo.permission.backPage',
-      },
-    },
-    {
-      path: 'btn',
-      name: 'BackAuthBtn',
-      component: '/demo/permission/back/Btn',
-      meta: {
-        title: 'routes.demo.permission.backBtn',
-      },
-    },
-  ],
-};
-
-const authRoute = {
-  path: '/permission',
-  name: 'Permission',
-  component: 'LAYOUT',
-  redirect: '/permission/front/page',
-  meta: {
-    icon: 'carbon:user-role',
-    title: 'routes.demo.permission.permission',
-  },
-  children: [backRoute],
-};
-
-const levelRoute = {
-  path: '/level',
-  name: 'Level',
-  component: 'LAYOUT',
-  redirect: '/level/menu1/menu1-1',
-  meta: {
-    icon: 'carbon:user-role',
-    title: 'routes.demo.level.level',
-  },
-
-  children: [
-    {
-      path: 'menu1',
-      name: 'Menu1Demo',
-      meta: {
-        title: 'Menu1',
-      },
-      children: [
-        {
-          path: 'menu1-1',
-          name: 'Menu11Demo',
-          meta: {
-            title: 'Menu1-1',
-          },
-          children: [
-            {
-              path: 'menu1-1-1',
-              name: 'Menu111Demo',
-              component: '/demo/level/Menu111',
-              meta: {
-                title: 'Menu111',
-              },
-            },
-          ],
-        },
-        {
-          path: 'menu1-2',
-          name: 'Menu12Demo',
-          component: '/demo/level/Menu12',
-          meta: {
-            title: 'Menu1-2',
-          },
-        },
-      ],
-    },
-    {
-      path: 'menu2',
-      name: 'Menu2Demo',
-      component: '/demo/level/Menu2',
-      meta: {
-        title: 'Menu2',
-      },
-    },
-  ],
-};
-
-const sysRoute = {
-  path: '/system',
-  name: 'System',
-  component: 'LAYOUT',
-  redirect: '/system/account',
-  meta: {
-    icon: 'ion:settings-outline',
-    title: 'routes.demo.system.moduleName',
-  },
-  children: [
-    {
-      path: 'account',
-      name: 'AccountManagement',
-      meta: {
-        title: 'routes.demo.system.account',
-        ignoreKeepAlive: true,
-      },
-      component: '/demo/system/account/index',
-    },
-    {
-      path: 'account_detail/:id',
-      name: 'AccountDetail',
-      meta: {
-        hideMenu: true,
-        title: 'routes.demo.system.account_detail',
-        ignoreKeepAlive: true,
-        showMenu: false,
-        currentActiveMenu: '/system/account',
-      },
-      component: '/demo/system/account/AccountDetail',
-    },
-    {
-      path: 'role',
-      name: 'RoleManagement',
-      meta: {
-        title: 'routes.demo.system.role',
-        ignoreKeepAlive: true,
-      },
-      component: '/demo/system/role/index',
-    },
-
-    {
-      path: 'menu',
-      name: 'MenuManagement',
-      meta: {
-        title: 'routes.demo.system.menu',
-        ignoreKeepAlive: true,
-      },
-      component: '/demo/system/menu/index',
-    },
-    {
-      path: 'dept',
-      name: 'DeptManagement',
-      meta: {
-        title: 'routes.demo.system.dept',
-        ignoreKeepAlive: true,
-      },
-      component: '/demo/system/dept/index',
-    },
-    {
-      path: 'changePassword',
-      name: 'ChangePassword',
-      meta: {
-        title: 'routes.demo.system.password',
-        ignoreKeepAlive: true,
-      },
-      component: '/demo/system/password/index',
-    },
-  ],
-};
-
-const linkRoute = {
-  path: '/link',
-  name: 'Link',
-  component: 'LAYOUT',
-  meta: {
-    icon: 'ion:tv-outline',
-    title: 'routes.demo.iframe.frame',
-  },
-  children: [
-    {
-      path: 'doc',
-      name: 'Doc',
-      meta: {
-        title: 'routes.demo.iframe.doc',
-        frameSrc: 'https://vvbin.cn/doc-next/',
-      },
-    },
-    {
-      path: 'https://vvbin.cn/doc-next/',
-      name: 'DocExternal',
-      component: 'LAYOUT',
-      meta: {
-        title: 'routes.demo.iframe.docExternal',
-      },
-    },
-  ],
-};
-
-export default [
-  {
-    url: `${baseUrl}/sys/permission/getUserPermissionByToken`,
-    timeout: 1000,
-    method: 'get',
-    response: (request: requestParams) => {
-      const token = getRequestToken(request);
-      if (!token) {
-        return resultError('Invalid token!');
-      }
-      const checkUser = createFakeUserList().find((item) => item.token === token);
-      if (!checkUser) {
-        return resultError('Invalid user token!');
-      }
-      const id = checkUser.userId;
-      let menu: Object[];
-      switch (id) {
-        case '1':
-          dashboardRoute.redirect = dashboardRoute.path + '/' + dashboardRoute.children[0].path;
-          menu = [dashboardRoute, authRoute, levelRoute, sysRoute, linkRoute];
-          break;
-        case '2':
-          dashboardRoute.redirect = dashboardRoute.path + '/' + dashboardRoute.children[1].path;
-          menu = [dashboardRoute, authRoute, levelRoute, linkRoute];
-          break;
-        default:
-          menu = [];
-      }
-
-      return resultSuccess(menu);
-    },
-  },
-] as MockMethod[];
diff --git a/mock/sys/user.ts b/mock/sys/user.ts
deleted file mode 100644
index 34175e7..0000000
--- a/mock/sys/user.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import { MockMethod } from 'vite-plugin-mock';
-import { resultError, resultSuccess, getRequestToken, requestParams, baseUrl } from '../_util';
-export function createFakeUserList() {
-  return [
-    {
-      userId: '1',
-      username: 'admin',
-      realname: '绠$悊鍛�',
-      avatar: 'https://q1.qlogo.cn/g?b=qq&nk=190848757&s=640',
-      desc: 'manager',
-      password: '123456',
-      token: 'fakeToken1',
-      homePath: '/dashboard/analysis',
-      roles: [
-        {
-          roleName: 'Super Admin',
-          value: 'super',
-        },
-      ],
-    },
-    {
-      userId: '2',
-      username: 'jeecg',
-      password: '123456',
-      realname: '娴嬭瘯鐢ㄦ埛',
-      avatar: 'https://q1.qlogo.cn/g?b=qq&nk=339449197&s=640',
-      desc: 'tester',
-      token: 'fakeToken2',
-      homePath: '/dashboard/workbench',
-      roles: [
-        {
-          roleName: 'Tester',
-          value: 'test',
-        },
-      ],
-    },
-  ];
-}
-
-const fakeCodeList: any = {
-  '1': ['1000', '3000', '5000'],
-
-  '2': ['2000', '4000', '6000'],
-};
-
-export default [
-  // mock user login
-  {
-    url: `${baseUrl}/sys/login`,
-    timeout: 200,
-    method: 'post',
-    response: ({ body }) => {
-      const { username, password } = body;
-      const checkUser = createFakeUserList().find(
-        (item) => item.username === username && password === item.password
-      );
-      if (!checkUser) {
-        return resultError('Incorrect account or password锛�');
-      }
-      const { userId, username: _username, token, realname, desc, roles } = checkUser;
-      return resultSuccess({
-        roles,
-        userId,
-        username: _username,
-        token,
-        realname,
-        desc,
-      });
-    },
-  },
-  {
-    url: `${baseUrl}/sys/user/getUserInfo`,
-    method: 'get',
-    response: (request: requestParams) => {
-      const token = getRequestToken(request);
-      if (!token) return resultError('Invalid token');
-      const checkUser = createFakeUserList().find((item) => item.token === token);
-      if (!checkUser) {
-        return resultError('The corresponding user information was not obtained!');
-      }
-      return resultSuccess(checkUser);
-    },
-  },
-  {
-    url: `${baseUrl}/sys/permission/getPermCode`,
-    timeout: 200,
-    method: 'get',
-    response: (request: requestParams) => {
-      const token = getRequestToken(request);
-      if (!token) return resultError('Invalid token');
-      const checkUser = createFakeUserList().find((item) => item.token === token);
-      if (!checkUser) {
-        return resultError('Invalid token!');
-      }
-      const codeList = fakeCodeList[checkUser.userId];
-
-      return resultSuccess(codeList);
-    },
-  },
-  {
-    url: `${baseUrl}/sys/logout`,
-    timeout: 200,
-    method: 'get',
-    response: (request: requestParams) => {
-      const token = getRequestToken(request);
-      if (!token) return resultError('Invalid token');
-      const checkUser = createFakeUserList().find((item) => item.token === token);
-      if (!checkUser) {
-        return resultError('Invalid token!');
-      }
-      return resultSuccess(undefined, { message: 'Token has been destroyed' });
-    },
-  },
-  {
-    url: `${baseUrl}/sys/randomImage/1629428467008`,
-    timeout: 200,
-    method: 'get',
-    response: (request: requestParams) => {
-      const result =
-        'data:image/jpg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAjAGkDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3h/ME5lErCKNSHi8rO44yCp65/P060gmdbbIaKecxl0VDsEmOmMk8cgZ96dcypFGpkEm0uOUzxznJI6DjnPH54ryTWNW1+P436T4ftNev4LTU7Brhw9tbCSHiZxGrNCcKCijkMeuSSOAD1KJ7hrTZNK0d1Iz7egGVPRSV6HGRkE4z1xV5SWQEqVJGSpxke3FeYL4n1PSfi5pXhK7vxrFlf27XVveyQRrcQHa4KFo1CMhMLdFUjfy2F59NjZm3Bl2kMRxnGO3JA7Y/HI7UAVrjfbWt3NJLNKmCwVAoaNcc4PHTk8+n5rKs1tDGtsdw5X94GkOT90ls5xnr14PYDNeUfDzxvq3xCuNZvG8SNp1zBKHtdFgtYpFjhAADuWXfKpJwwRkIwcFd6geg+Dm12Tw9bN4hkX+0Y5bmKcLGVV9s7KjLkA7dijBPLAgnJ5oWgGrb36zBtqyPh9oKwuvG4DncByCeeexPsLHm7jH5amSNxnzFI2gY479/bNVrxYZpRD57Q3JRkikRFLxlgfmUspGQEbrkccg8V5l8PfEOt6h4p8YW+r+JJf7M8OXZhjWWC2jjMQaZSZWWNSMLGDkFQD1BHFAHq7usMcksjnYoLHI+6AOen0pqllZfNkUMWZVUdG5yOvOcD+dcclt4j1/XlvtM8T3dn4cIc7kgt2a4PGwwBoTiLqfMZm34+VQpVz0Ou2t/eWfk2GrXGmTNxHcW9ukxV8EAOrqwKZIJ+6fl+8M0AXjHcb5GWdcN9xWjyF6ehGe/5j05jmdri3cxPJGI3YOAOXABGARnGTjkcjpwenmvwt8Y61czeIdM8b6g0esaW3mTR3SwQJFAB99dijcOpZySoBjI+8TXR+EtK16SNdR1rWL64WUNPaWtxbxQGBXbKCVY0VjKq/f525dgBxuKA6i4ZfsSEyq0R275Wm8v5f7wZe/TjgHNWqiiSWNEV5vNwp3MygFj68cAdeMen4y0wKk6Mtysp3yQsvktEoyPmI+YgnGB9O57dPIfGML3H7SnhaGO+msXfS2C3EIjLqcXPTzFZeenIPXjnFeyiIJIzx4XzH3SZBO75ccc8dF/L3zXHah4D0K58US+ILuLUPtcMeI5l1G5WT5i+VjYSDYCW2hVIHLDaMg0AX9K8FaVZ+IJPEVxPc6rrTAxLf3rqzRJgKURUVUToeQoPzNk8mt0qRJF5uTMVdBNGuAucHoScdByeOPcAxRw3MdzOpuC3nZkQiEBY8EcMf4sggfRT0qYQSJBJGJWlGwKodirZxjlxzzxzjIOfYAA8Tn+HehfErRoPGvhDUP7J1uQCaWK3YmJLpQWZT0aN95X5xxgBgp3ZPb/AAi8U6r4q8BRajriv9qW5khFy6hBcrkEOoCqAAW2cZ5Q85yBdtPAfhSTSv7Og0mWxiWH7PcQ288lq86Y2/vjEy+cCM8sW6t6mukt9PttNsobLTbC0gtY34gjURIgzuJVVGM55xxz3oAnZf8ASI38vcQrLu3fdBwenccfy96+abbwjqHiu8+K1lpt/NFJBqYlW1MwSO5KzzECRmBJwA2ASBuKljxkfSF9ai7jeESzRtJGy5R3UAdCcoVIOGOCCD36qMc9oHgHw/oGrSalpMd1a3DuWnRb6Z1lYr/y2VnYOw3sQT03Z96AMn4W+PP+Et0xrLVZmi8TaerRX9pJH5Rba2BIE9egbGMMSCACtdxOHuYmXy3CCVRjIHmLkbs5HTrx3A9DXJN8LvCraj/adpa3SajtZBqC6rdGaMhdgw3mZOB8uMjgY9q39X0Sx1myuLLUknWwbLSLDdyQrKGUhgxRlOPvZUnac5OT0AseQfEHT7u71CP4keHrbTZJtFSGWQ/Zmk+3gMytMByDGm0BXwrbVdwwVYmPqXhvxDZeKdEj1bRL6AWM42NvT9/DLtVQkmWOXBx16jbjIINGl+GdPs9I/seG6nSAfIY7e/n3qqEBVSQuZI1A25RWABOOhO7P8NeA/DejRveaBpb2IuW2k/bJmDxjIDlJNyk4LYyOjHBGaAOwjeQogYxtIuBNtbhTjPH6cHsalqlbWMFrcSNuVnkkeZAwG5c/eI79wOO2O+SbtABSMiuMMoYZBwRnkHIP50UUALRRRQAUUUUAFFFFACBVUsVUAscsQOpxjn8AKWiigBFVUQIihVUYAAwAKY8EUkqSOgZ0BCk9uQf5qD+FFFAElFFFAH//2Q==';
-      return resultSuccess(result);
-    },
-  },
-] as MockMethod[];
diff --git a/npm b/npm
deleted file mode 100644
index e69de29..0000000
--- a/npm
+++ /dev/null
diff --git a/package.json b/package.json
deleted file mode 100644
index 1634a5e..0000000
--- a/package.json
+++ /dev/null
@@ -1,308 +0,0 @@
-{
-  "name": "jeecgboot-vue3",
-  "version": "3.5.0",
-  "author": {
-    "name": "jeecg",
-    "email": "jeecgos@163.com",
-    "url": "https://github.com/jeecgboot/jeecgboot-vue3"
-  },
-  "scripts": {
-    "bootstrap": "pnpm install",
-    "serve": "npm run dev",
-    "dev": "vite",
-    "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite",
-    "clean:lib": "rimraf node_modules",
-    "build": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=8192 vite build && esno ./build/script/postBuild.ts",
-    "build:test": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode test && esno ./build/script/postBuild.ts",
-    "build:no-cache": "pnpm clean:cache && npm run build",
-    "report": "cross-env REPORT=true npm run build",
-    "type:check": "vue-tsc --noEmit --skipLibCheck",
-    "preview": "npm run build && vite preview",
-    "preview:dist": "vite preview",
-    "log": "conventional-changelog -p angular -i CHANGELOG.md -s",
-    "lint:eslint": "eslint --cache --max-warnings 0  \"{src,mock}/**/*.{vue,ts,tsx}\" --fix",
-    "lint:prettier": "prettier --write  \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"",
-    "lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
-    "lint:lint-staged": "lint-staged -c ./.husky/lintstagedrc.js",
-    "lint:pretty": "pretty-quick --staged",
-    "test:unit": "jest",
-    "test:unit-coverage": "jest --coverage",
-    "test:gzip": "http-server dist --cors --gzip -c-1",
-    "test:br": "http-server dist --cors --brotli -c-1",
-    "reinstall": "rimraf pnpm-lock.yaml && yarn.lock && rimraf package.lock.json && rimraf node_modules && npm run bootstrap",
-    "prepare": "husky install",
-    "gen:icon": "esno ./build/generate/icon/index.ts"
-  },
-  "dependencies": {
-    "@ant-design/colors": "^6.0.0",
-    "@ant-design/icons-vue": "^6.1.0",
-    "@dataview/datav-vue3": "^0.0.0-test.1672506674342",
-    "@iconify/iconify": "^3.1.1",
-    "@jeecg/online": "3.4.4-RC",
-    "@kjgl77/datav-vue3": "^1.5.0",
-    "@logicflow/core": "^1.1.13",
-    "@logicflow/extension": "^1.1.13",
-    "@vue/runtime-core": "^3.2.33",
-    "@vue/shared": "^3.2.33",
-    "@vueuse/core": "^8.3.0",
-    "@vueuse/shared": "^8.3.0",
-    "@zxcvbn-ts/core": "^2.0.1",
-    "animejs": "^3.2.1",
-    "ant-design-vue": "^3.2.12",
-    "axios": "^0.26.1",
-    "china-area-data": "^5.0.1",
-    "clipboard": "^2.0.8",
-    "codemirror": "^5.65.3",
-    "cron-parser": "^3.5.0",
-    "cropperjs": "^1.5.12",
-    "crypto-js": "^4.1.1",
-    "dayjs": "^1.11.1",
-    "dom-align": "^1.12.2",
-    "echarts": "^5.3.2",
-    "echarts-liquidfill": "^3.1.0",
-    "emoji-mart-vue-fast": "^11.1.1",
-    "enquire.js": "^2.1.6",
-    "ezuikit-js": "^0.7.2",
-    "intro.js": "^5.1.0",
-    "lodash-es": "^4.17.21",
-    "lodash.get": "^4.4.2",
-    "md5": "^2.3.0",
-    "mockjs": "^1.1.0",
-    "nprogress": "^0.2.0",
-    "path-to-regexp": "^6.2.0",
-    "pinia": "2.0.12",
-    "pinyin-pro": "^3.11.0",
-    "print-js": "^1.6.0",
-    "qrcode": "^1.5.0",
-    "qrcodejs2": "0.0.2",
-    "qs": "^6.10.3",
-    "resize-observer-polyfill": "^1.5.1",
-    "showdown": "^2.1.0",
-    "sortablejs": "^1.15.0",
-    "tinymce": "^5.10.3",
-    "vditor": "^3.8.13",
-    "vue": "^3.2.33",
-    "vue-cropper": "^0.5.6",
-    "vue-cropperjs": "^5.0.0",
-    "vue-i18n": "^9.1.9",
-    "vue-infinite-scroll": "^2.0.2",
-    "vue-json-pretty": "^2.0.6",
-    "vue-print-nb-jeecg": "^1.0.10",
-    "vue-router": "^4.0.14",
-    "vue-types": "^4.1.1",
-    "vuedraggable": "^4.1.0",
-    "vxe-table": "4.1.0",
-    "vxe-table-plugin-antd": "3.0.5",
-    "xe-utils": "^3.3.1",
-    "xss": "^1.0.13"
-  },
-  "devDependencies": {
-    "@commitlint/cli": "^16.2.3",
-    "@commitlint/config-conventional": "^16.2.1",
-    "@iconify/json": "^2.2.96",
-    "@purge-icons/generated": "^0.8.1",
-    "@rys-fe/vite-plugin-theme": "^0.8.6",
-    "@types/codemirror": "^5.60.5",
-    "@types/crypto-js": "^4.1.1",
-    "@types/fs-extra": "^9.0.13",
-    "@types/inquirer": "^8.2.1",
-    "@types/intro.js": "^3.0.2",
-    "@types/jest": "^27.0.2",
-    "@types/lodash-es": "^4.17.6",
-    "@types/mockjs": "^1.0.6",
-    "@types/node": "^17.0.25",
-    "@types/nprogress": "^0.2.0",
-    "@types/pinyin": "^2.10.0",
-    "@types/qrcode": "^1.4.2",
-    "@types/qs": "^6.9.7",
-    "@types/showdown": "^1.9.4",
-    "@types/sortablejs": "^1.10.7",
-    "@typescript-eslint/eslint-plugin": "^5.20.0",
-    "@typescript-eslint/parser": "^5.20.0",
-    "@vitejs/plugin-legacy": "^2.0.0",
-    "@vitejs/plugin-vue": "^3.0.1",
-    "@vitejs/plugin-vue-jsx": "^1.3.10",
-    "@vue/compiler-sfc": "^3.2.33",
-    "@vue/test-utils": "^2.0.0-rc.21",
-    "autoprefixer": "^10.4.4",
-    "commitizen": "^4.2.4",
-    "conventional-changelog-cli": "^2.2.2",
-    "cross-env": "^7.0.3",
-    "cz-git": "^1.3.9",
-    "czg": "^1.3.9",
-    "dotenv": "^16.0.0",
-    "eslint": "^8.13.0",
-    "eslint-config-prettier": "^8.5.0",
-    "eslint-define-config": "^1.1.1",
-    "eslint-plugin-jest": "^25.2.2",
-    "eslint-plugin-prettier": "^4.0.0",
-    "eslint-plugin-vue": "^8.6.0",
-    "esno": "^0.14.1",
-    "fs-extra": "^10.1.0",
-    "http-server": "^14.0.0",
-    "husky": "^7.0.4",
-    "inquirer": "^8.2.2",
-    "is-ci": "^3.0.0",
-    "jest": "^27.3.1",
-    "less": "^4.1.2",
-    "lint-staged": "12.3.7",
-    "npm-run-all": "^4.1.5",
-    "picocolors": "^1.0.0",
-    "postcss": "^8.4.12",
-    "postcss-html": "^1.4.1",
-    "postcss-less": "^6.0.0",
-    "prettier": "^2.6.2",
-    "pretty-quick": "^3.1.1",
-    "rimraf": "^3.0.2",
-    "rollup": "^2.70.2",
-    "rollup-plugin-visualizer": "^5.6.0",
-    "stylelint": "^14.7.1",
-    "stylelint-config-prettier": "^9.0.3",
-    "stylelint-config-recommended": "^7.0.0",
-    "stylelint-config-recommended-vue": "^1.4.0",
-    "stylelint-config-standard": "^25.0.0",
-    "stylelint-order": "^5.0.0",
-    "ts-jest": "^27.0.7",
-    "ts-node": "^10.7.0",
-    "typescript": "^4.6.3",
-    "vite": "^3.0.2",
-    "vite-plugin-compression": "^0.5.1",
-    "vite-plugin-html": "^3.2.0",
-    "vite-plugin-imagemin": "^0.6.1",
-    "vite-plugin-mkcert": "^1.10.1",
-    "vite-plugin-mock": "^2.9.6",
-    "vite-plugin-optimize-persist": "^0.1.2",
-    "vite-plugin-package-config": "^0.1.1",
-    "vite-plugin-purge-icons": "^0.9.2",
-    "vite-plugin-pwa": "^0.12.3",
-    "vite-plugin-style-import": "^2.0.0",
-    "vite-plugin-svg-icons": "^2.0.1",
-    "vite-plugin-vue-setup-extend": "^0.4.0",
-    "vite-plugin-windicss": "^1.8.7",
-    "vue-eslint-parser": "^8.3.0",
-    "vue-tsc": "^0.33.9"
-  },
-  "resolutions": {
-    "bin-wrapper": "npm:bin-wrapper-china",
-    "rollup": "^2.72.0"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jeecgboot/jeecgboot-vue3.git"
-  },
-  "license": "MIT",
-  "bugs": {
-    "url": "https://github.com/jeecgboot/jeecgboot-vue3/issues"
-  },
-  "homepage": "https://github.com/jeecgboot/jeecgboot-vue3",
-  "engines": {
-    "node": "^12 || >=14"
-  },
-  "vite": {
-    "optimizeDeps": {
-      "include": [
-        "@ant-design/colors",
-        "@ant-design/icons-vue",
-        "@vueuse/core",
-        "@vueuse/shared",
-        "@zxcvbn-ts/core",
-        "ant-design-vue",
-        "axios",
-        "china-area-data",
-        "clipboard",
-        "codemirror",
-        "codemirror/addon/fold/brace-fold.js",
-        "codemirror/addon/fold/comment-fold.js",
-        "codemirror/addon/fold/foldcode.js",
-        "codemirror/addon/fold/foldgutter.js",
-        "codemirror/addon/fold/indent-fold.js",
-        "codemirror/addon/hint/anyword-hint.js",
-        "codemirror/addon/hint/show-hint.js",
-        "codemirror/addon/selection/active-line.js",
-        "codemirror/mode/clike/clike.js",
-        "codemirror/mode/css/css.js",
-        "codemirror/mode/javascript/javascript.js",
-        "codemirror/mode/markdown/markdown.js",
-        "codemirror/mode/python/python.js",
-        "codemirror/mode/r/r.js",
-        "codemirror/mode/shell/shell.js",
-        "codemirror/mode/sql/sql.js",
-        "codemirror/mode/swift/swift.js",
-        "codemirror/mode/vue/vue.js",
-        "codemirror/mode/xml/xml.js",
-        "cron-parser",
-        "cropperjs",
-        "crypto-js/aes",
-        "crypto-js/enc-base64",
-        "crypto-js/enc-utf8",
-        "crypto-js/md5",
-        "crypto-js/mode-ecb",
-        "crypto-js/pad-pkcs7",
-        "dom-align",
-        "echarts",
-        "echarts/charts",
-        "echarts/components",
-        "echarts/core",
-        "echarts/renderers",
-        "emoji-mart-vue-fast/src",
-        "intro.js",
-        "lodash-es",
-        "md5",
-        "nprogress",
-        "path-to-regexp",
-        "pinia",
-        "print-js",
-        "qrcode",
-        "qs",
-        "resize-observer-polyfill",
-        "showdown",
-        "sortablejs",
-        "tinymce/icons/default/icons",
-        "tinymce/plugins/advlist",
-        "tinymce/plugins/anchor",
-        "tinymce/plugins/autolink",
-        "tinymce/plugins/autosave",
-        "tinymce/plugins/code",
-        "tinymce/plugins/codesample",
-        "tinymce/plugins/contextmenu",
-        "tinymce/plugins/directionality",
-        "tinymce/plugins/fullscreen",
-        "tinymce/plugins/hr",
-        "tinymce/plugins/image",
-        "tinymce/plugins/insertdatetime",
-        "tinymce/plugins/link",
-        "tinymce/plugins/lists",
-        "tinymce/plugins/media",
-        "tinymce/plugins/nonbreaking",
-        "tinymce/plugins/noneditable",
-        "tinymce/plugins/pagebreak",
-        "tinymce/plugins/paste",
-        "tinymce/plugins/preview",
-        "tinymce/plugins/print",
-        "tinymce/plugins/save",
-        "tinymce/plugins/searchreplace",
-        "tinymce/plugins/spellchecker",
-        "tinymce/plugins/tabfocus",
-        "tinymce/plugins/table",
-        "tinymce/plugins/template",
-        "tinymce/plugins/textcolor",
-        "tinymce/plugins/textpattern",
-        "tinymce/plugins/visualblocks",
-        "tinymce/plugins/visualchars",
-        "tinymce/plugins/wordcount",
-        "tinymce/themes/silver",
-        "tinymce/tinymce",
-        "vditor",
-        "vue",
-        "vue-i18n",
-        "vue-print-nb-jeecg/src/printarea",
-        "vue-router",
-        "vue-types",
-        "vxe-table",
-        "vxe-table-plugin-antd",
-        "xe-utils",
-        "xss"
-      ]
-    }
-  }
-}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
deleted file mode 100644
index e759fd5..0000000
--- a/pnpm-lock.yaml
+++ /dev/null
@@ -1,16838 +0,0 @@
-lockfileVersion: 5.4
-
-overrides:
-  bin-wrapper: npm:bin-wrapper-china
-  rollup: ^2.72.0
-
-specifiers:
-  '@ant-design/colors': ^6.0.0
-  '@ant-design/icons-vue': ^6.1.0
-  '@commitlint/cli': ^16.2.3
-  '@commitlint/config-conventional': ^16.2.1
-  '@iconify/iconify': ^2.2.1
-  '@iconify/json': ^2.1.30
-  '@jeecg/online': 3.4.4-RC
-  '@logicflow/core': ^1.1.13
-  '@logicflow/extension': ^1.1.13
-  '@purge-icons/generated': ^0.8.1
-  '@rys-fe/vite-plugin-theme': ^0.8.6
-  '@types/codemirror': ^5.60.5
-  '@types/crypto-js': ^4.1.1
-  '@types/fs-extra': ^9.0.13
-  '@types/inquirer': ^8.2.1
-  '@types/intro.js': ^3.0.2
-  '@types/jest': ^27.0.2
-  '@types/lodash-es': ^4.17.6
-  '@types/mockjs': ^1.0.6
-  '@types/node': ^17.0.25
-  '@types/nprogress': ^0.2.0
-  '@types/pinyin': ^2.10.0
-  '@types/qrcode': ^1.4.2
-  '@types/qs': ^6.9.7
-  '@types/showdown': ^1.9.4
-  '@types/sortablejs': ^1.10.7
-  '@typescript-eslint/eslint-plugin': ^5.20.0
-  '@typescript-eslint/parser': ^5.20.0
-  '@vitejs/plugin-legacy': ^2.0.0
-  '@vitejs/plugin-vue': ^3.0.1
-  '@vitejs/plugin-vue-jsx': ^1.3.10
-  '@vue/compiler-sfc': ^3.2.33
-  '@vue/runtime-core': ^3.2.33
-  '@vue/shared': ^3.2.33
-  '@vue/test-utils': ^2.0.0-rc.21
-  '@vueuse/core': ^8.3.0
-  '@vueuse/shared': ^8.3.0
-  '@zxcvbn-ts/core': ^2.0.1
-  ant-design-vue: ^3.2.12
-  autoprefixer: ^10.4.4
-  axios: ^0.26.1
-  china-area-data: ^5.0.1
-  clipboard: ^2.0.8
-  codemirror: ^5.65.3
-  commitizen: ^4.2.4
-  conventional-changelog-cli: ^2.2.2
-  cron-parser: ^3.5.0
-  cropperjs: ^1.5.12
-  cross-env: ^7.0.3
-  crypto-js: ^4.1.1
-  cz-git: ^1.3.9
-  czg: ^1.3.9
-  dayjs: ^1.11.1
-  dom-align: ^1.12.2
-  dotenv: ^16.0.0
-  echarts: ^5.3.2
-  echarts-liquidfill: ^3.1.0
-  emoji-mart-vue-fast: ^11.1.1
-  enquire.js: ^2.1.6
-  eslint: ^8.13.0
-  eslint-config-prettier: ^8.5.0
-  eslint-define-config: ^1.1.1
-  eslint-plugin-jest: ^25.2.2
-  eslint-plugin-prettier: ^4.0.0
-  eslint-plugin-vue: ^8.6.0
-  esno: ^0.14.1
-  fs-extra: ^10.1.0
-  http-server: ^14.0.0
-  husky: ^7.0.4
-  inquirer: ^8.2.2
-  intro.js: ^5.1.0
-  is-ci: ^3.0.0
-  jest: ^27.3.1
-  less: ^4.1.2
-  lint-staged: 12.3.7
-  lodash-es: ^4.17.21
-  lodash.get: ^4.4.2
-  md5: ^2.3.0
-  mockjs: ^1.1.0
-  npm-run-all: ^4.1.5
-  nprogress: ^0.2.0
-  path-to-regexp: ^6.2.0
-  picocolors: ^1.0.0
-  pinia: 2.0.12
-  pinyin-pro: ^3.11.0
-  postcss: ^8.4.12
-  postcss-html: ^1.4.1
-  postcss-less: ^6.0.0
-  prettier: ^2.6.2
-  pretty-quick: ^3.1.1
-  print-js: ^1.6.0
-  qrcode: ^1.5.0
-  qrcodejs2: 0.0.2
-  qs: ^6.10.3
-  resize-observer-polyfill: ^1.5.1
-  rimraf: ^3.0.2
-  rollup: ^2.72.0
-  rollup-plugin-visualizer: ^5.6.0
-  showdown: ^2.1.0
-  sortablejs: ^1.15.0
-  stylelint: ^14.7.1
-  stylelint-config-prettier: ^9.0.3
-  stylelint-config-recommended: ^7.0.0
-  stylelint-config-recommended-vue: ^1.4.0
-  stylelint-config-standard: ^25.0.0
-  stylelint-order: ^5.0.0
-  tinymce: ^5.10.3
-  ts-jest: ^27.0.7
-  ts-node: ^10.7.0
-  typescript: ^4.6.3
-  vditor: ^3.8.13
-  vite: ^3.0.2
-  vite-plugin-compression: ^0.5.1
-  vite-plugin-html: ^3.2.0
-  vite-plugin-imagemin: ^0.6.1
-  vite-plugin-mkcert: ^1.10.1
-  vite-plugin-mock: ^2.9.6
-  vite-plugin-optimize-persist: ^0.1.2
-  vite-plugin-package-config: ^0.1.1
-  vite-plugin-purge-icons: ^0.8.2
-  vite-plugin-pwa: ^0.12.3
-  vite-plugin-style-import: ^2.0.0
-  vite-plugin-svg-icons: ^2.0.1
-  vite-plugin-vue-setup-extend: ^0.4.0
-  vite-plugin-windicss: ^1.8.7
-  vue: ^3.2.33
-  vue-cropper: ^0.5.6
-  vue-cropperjs: ^5.0.0
-  vue-eslint-parser: ^8.3.0
-  vue-i18n: ^9.1.9
-  vue-infinite-scroll: ^2.0.2
-  vue-json-pretty: ^2.0.6
-  vue-print-nb-jeecg: ^1.0.10
-  vue-router: ^4.0.14
-  vue-tsc: ^0.33.9
-  vue-types: ^4.1.1
-  vuedraggable: ^4.1.0
-  vxe-table: 4.1.0
-  vxe-table-plugin-antd: 3.0.5
-  xe-utils: ^3.3.1
-  xss: ^1.0.13
-
-dependencies:
-  '@ant-design/colors': registry.npmmirror.com/@ant-design/colors/6.0.0
-  '@ant-design/icons-vue': registry.npmmirror.com/@ant-design/icons-vue/6.1.0_vue@3.2.47
-  '@iconify/iconify': registry.npmmirror.com/@iconify/iconify/2.2.1
-  '@jeecg/online': registry.npmmirror.com/@jeecg/online/3.4.4-RC
-  '@logicflow/core': registry.npmmirror.com/@logicflow/core/1.1.31
-  '@logicflow/extension': registry.npmmirror.com/@logicflow/extension/1.1.31
-  '@vue/runtime-core': registry.npmmirror.com/@vue/runtime-core/3.2.47
-  '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-  '@vueuse/core': registry.npmmirror.com/@vueuse/core/8.9.4_vue@3.2.47
-  '@vueuse/shared': registry.npmmirror.com/@vueuse/shared/8.9.4_vue@3.2.47
-  '@zxcvbn-ts/core': registry.npmmirror.com/@zxcvbn-ts/core/2.2.1
-  ant-design-vue: registry.npmmirror.com/ant-design-vue/3.2.15_vue@3.2.47
-  axios: registry.npmmirror.com/axios/0.26.1
-  china-area-data: registry.npmmirror.com/china-area-data/5.0.1
-  clipboard: registry.npmmirror.com/clipboard/2.0.11
-  codemirror: registry.npmmirror.com/codemirror/5.65.12
-  cron-parser: registry.npmmirror.com/cron-parser/3.5.0
-  cropperjs: registry.npmmirror.com/cropperjs/1.5.13
-  crypto-js: registry.npmmirror.com/crypto-js/4.1.1
-  dayjs: registry.npmmirror.com/dayjs/1.11.7
-  dom-align: registry.npmmirror.com/dom-align/1.12.4
-  echarts: registry.npmmirror.com/echarts/5.4.1
-  echarts-liquidfill: 3.1.0_echarts@5.4.1
-  emoji-mart-vue-fast: registry.npmmirror.com/emoji-mart-vue-fast/11.2.0_vue@3.2.47
-  enquire.js: registry.npmmirror.com/enquire.js/2.1.6
-  intro.js: registry.npmmirror.com/intro.js/5.1.0
-  lodash-es: registry.npmmirror.com/lodash-es/4.17.21
-  lodash.get: registry.npmmirror.com/lodash.get/4.4.2
-  md5: registry.npmmirror.com/md5/2.3.0
-  mockjs: registry.npmmirror.com/mockjs/1.1.0
-  nprogress: registry.npmmirror.com/nprogress/0.2.0
-  path-to-regexp: registry.npmmirror.com/path-to-regexp/6.2.1
-  pinia: registry.npmmirror.com/pinia/2.0.12_hmuptsblhheur2tugfgucj7gc4
-  pinyin-pro: registry.npmmirror.com/pinyin-pro/3.13.1
-  print-js: registry.npmmirror.com/print-js/1.6.0
-  qrcode: registry.npmmirror.com/qrcode/1.5.1
-  qrcodejs2: registry.npmmirror.com/qrcodejs2/0.0.2
-  qs: registry.npmmirror.com/qs/6.11.0
-  resize-observer-polyfill: registry.npmmirror.com/resize-observer-polyfill/1.5.1
-  showdown: registry.npmmirror.com/showdown/2.1.0
-  sortablejs: registry.npmmirror.com/sortablejs/1.15.0
-  tinymce: registry.npmmirror.com/tinymce/5.10.7
-  vditor: registry.npmmirror.com/vditor/3.9.0
-  vue: registry.npmmirror.com/vue/3.2.47
-  vue-cropper: registry.npmmirror.com/vue-cropper/0.5.8
-  vue-cropperjs: registry.npmmirror.com/vue-cropperjs/5.0.0_vue@3.2.47
-  vue-i18n: registry.npmmirror.com/vue-i18n/9.2.2_vue@3.2.47
-  vue-infinite-scroll: registry.npmmirror.com/vue-infinite-scroll/2.0.2
-  vue-json-pretty: registry.npmmirror.com/vue-json-pretty/2.2.3_vue@3.2.47
-  vue-print-nb-jeecg: registry.npmmirror.com/vue-print-nb-jeecg/1.0.11
-  vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.47
-  vue-types: registry.npmmirror.com/vue-types/4.2.1_vue@3.2.47
-  vuedraggable: registry.npmmirror.com/vuedraggable/4.1.0_vue@3.2.47
-  vxe-table: registry.npmmirror.com/vxe-table/4.1.0_vue@3.2.47+xe-utils@3.5.7
-  vxe-table-plugin-antd: registry.npmmirror.com/vxe-table-plugin-antd/3.0.5_vxe-table@4.1.0
-  xe-utils: registry.npmmirror.com/xe-utils/3.5.7
-  xss: registry.npmmirror.com/xss/1.0.14
-
-devDependencies:
-  '@commitlint/cli': registry.npmmirror.com/@commitlint/cli/16.3.0
-  '@commitlint/config-conventional': registry.npmmirror.com/@commitlint/config-conventional/16.2.4
-  '@iconify/json': registry.npmmirror.com/@iconify/json/2.2.30
-  '@purge-icons/generated': registry.npmmirror.com/@purge-icons/generated/0.8.1
-  '@rys-fe/vite-plugin-theme': registry.npmmirror.com/@rys-fe/vite-plugin-theme/0.8.6_vite@3.2.5
-  '@types/codemirror': registry.npmmirror.com/@types/codemirror/5.60.7
-  '@types/crypto-js': registry.npmmirror.com/@types/crypto-js/4.1.1
-  '@types/fs-extra': registry.npmmirror.com/@types/fs-extra/9.0.13
-  '@types/inquirer': registry.npmmirror.com/@types/inquirer/8.2.6
-  '@types/intro.js': registry.npmmirror.com/@types/intro.js/3.0.2
-  '@types/jest': registry.npmmirror.com/@types/jest/27.5.2
-  '@types/lodash-es': registry.npmmirror.com/@types/lodash-es/4.17.6
-  '@types/mockjs': registry.npmmirror.com/@types/mockjs/1.0.7
-  '@types/node': registry.npmmirror.com/@types/node/17.0.45
-  '@types/nprogress': registry.npmmirror.com/@types/nprogress/0.2.0
-  '@types/pinyin': registry.npmmirror.com/@types/pinyin/2.10.0
-  '@types/qrcode': registry.npmmirror.com/@types/qrcode/1.5.0
-  '@types/qs': registry.npmmirror.com/@types/qs/6.9.7
-  '@types/showdown': registry.npmmirror.com/@types/showdown/1.9.4
-  '@types/sortablejs': registry.npmmirror.com/@types/sortablejs/1.15.0
-  '@typescript-eslint/eslint-plugin': registry.npmmirror.com/@typescript-eslint/eslint-plugin/5.54.0_6mj2wypvdnknez7kws2nfdgupi
-  '@typescript-eslint/parser': registry.npmmirror.com/@typescript-eslint/parser/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu
-  '@vitejs/plugin-legacy': registry.npmmirror.com/@vitejs/plugin-legacy/2.3.1_vite@3.2.5
-  '@vitejs/plugin-vue': registry.npmmirror.com/@vitejs/plugin-vue/3.2.0_vite@3.2.5+vue@3.2.47
-  '@vitejs/plugin-vue-jsx': registry.npmmirror.com/@vitejs/plugin-vue-jsx/1.3.10
-  '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.47
-  '@vue/test-utils': registry.npmmirror.com/@vue/test-utils/2.3.0_vue@3.2.47
-  autoprefixer: registry.npmmirror.com/autoprefixer/10.4.13_postcss@8.4.21
-  commitizen: registry.npmmirror.com/commitizen/4.3.0
-  conventional-changelog-cli: registry.npmmirror.com/conventional-changelog-cli/2.2.2
-  cross-env: registry.npmmirror.com/cross-env/7.0.3
-  cz-git: registry.npmmirror.com/cz-git/1.5.1
-  czg: registry.npmmirror.com/czg/1.5.1
-  dotenv: registry.npmmirror.com/dotenv/16.0.3
-  eslint: registry.npmmirror.com/eslint/8.35.0
-  eslint-config-prettier: registry.npmmirror.com/eslint-config-prettier/8.6.0_eslint@8.35.0
-  eslint-define-config: registry.npmmirror.com/eslint-define-config/1.15.0
-  eslint-plugin-jest: registry.npmmirror.com/eslint-plugin-jest/25.7.0_npuaqhfkjgus3nqfbgjmqmizqa
-  eslint-plugin-prettier: registry.npmmirror.com/eslint-plugin-prettier/4.2.1_u2zha4kiojzs42thzpgwygphmy
-  eslint-plugin-vue: registry.npmmirror.com/eslint-plugin-vue/8.7.1_eslint@8.35.0
-  esno: registry.npmmirror.com/esno/0.14.1
-  fs-extra: registry.npmmirror.com/fs-extra/10.1.0
-  http-server: registry.npmmirror.com/http-server/14.1.1
-  husky: registry.npmmirror.com/husky/7.0.4
-  inquirer: registry.npmmirror.com/inquirer/8.2.5
-  is-ci: registry.npmmirror.com/is-ci/3.0.1
-  jest: registry.npmmirror.com/jest/27.5.1_ts-node@10.9.1
-  less: registry.npmmirror.com/less/4.1.3
-  lint-staged: registry.npmmirror.com/lint-staged/12.3.7
-  npm-run-all: registry.npmmirror.com/npm-run-all/4.1.5
-  picocolors: registry.npmmirror.com/picocolors/1.0.0
-  postcss: registry.npmmirror.com/postcss/8.4.21
-  postcss-html: registry.npmmirror.com/postcss-html/1.5.0
-  postcss-less: registry.npmmirror.com/postcss-less/6.0.0_postcss@8.4.21
-  prettier: registry.npmmirror.com/prettier/2.8.4
-  pretty-quick: registry.npmmirror.com/pretty-quick/3.1.3_prettier@2.8.4
-  rimraf: registry.npmmirror.com/rimraf/3.0.2
-  rollup: registry.npmmirror.com/rollup/2.79.1
-  rollup-plugin-visualizer: registry.npmmirror.com/rollup-plugin-visualizer/5.9.0_rollup@2.79.1
-  stylelint: registry.npmmirror.com/stylelint/14.16.1
-  stylelint-config-prettier: registry.npmmirror.com/stylelint-config-prettier/9.0.5_stylelint@14.16.1
-  stylelint-config-recommended: registry.npmmirror.com/stylelint-config-recommended/7.0.0_stylelint@14.16.1
-  stylelint-config-recommended-vue: registry.npmmirror.com/stylelint-config-recommended-vue/1.4.0_kbto3rg3njmczth2rrsgfnlsqa
-  stylelint-config-standard: registry.npmmirror.com/stylelint-config-standard/25.0.0_stylelint@14.16.1
-  stylelint-order: registry.npmmirror.com/stylelint-order/5.0.0_stylelint@14.16.1
-  ts-jest: registry.npmmirror.com/ts-jest/27.1.5_n4jzo3ixy42kfaqevs43wjx5ui
-  ts-node: registry.npmmirror.com/ts-node/10.9.1_cin3sed6ohfsopbmt6orxeb4o4
-  typescript: registry.npmmirror.com/typescript/4.9.5
-  vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-  vite-plugin-compression: registry.npmmirror.com/vite-plugin-compression/0.5.1_vite@3.2.5
-  vite-plugin-html: registry.npmmirror.com/vite-plugin-html/3.2.0_vite@3.2.5
-  vite-plugin-imagemin: registry.npmmirror.com/vite-plugin-imagemin/0.6.1_vite@3.2.5
-  vite-plugin-mkcert: registry.npmmirror.com/vite-plugin-mkcert/1.13.3_vite@3.2.5
-  vite-plugin-mock: registry.npmmirror.com/vite-plugin-mock/2.9.6_umj7dnwtpamrulvvz5fh6e7doq
-  vite-plugin-optimize-persist: registry.npmmirror.com/vite-plugin-optimize-persist/0.1.2_hixcczfrsvi4wedfdfr7z5co24
-  vite-plugin-package-config: registry.npmmirror.com/vite-plugin-package-config/0.1.1_vite@3.2.5
-  vite-plugin-purge-icons: registry.npmmirror.com/vite-plugin-purge-icons/0.8.2_vite@3.2.5
-  vite-plugin-pwa: registry.npmmirror.com/vite-plugin-pwa/0.12.8_vite@3.2.5
-  vite-plugin-style-import: registry.npmmirror.com/vite-plugin-style-import/2.0.0_vite@3.2.5
-  vite-plugin-svg-icons: registry.npmmirror.com/vite-plugin-svg-icons/2.0.1_vite@3.2.5
-  vite-plugin-vue-setup-extend: registry.npmmirror.com/vite-plugin-vue-setup-extend/0.4.0_vite@3.2.5
-  vite-plugin-windicss: registry.npmmirror.com/vite-plugin-windicss/1.8.10_vite@3.2.5
-  vue-eslint-parser: registry.npmmirror.com/vue-eslint-parser/8.3.0_eslint@8.35.0
-  vue-tsc: registry.npmmirror.com/vue-tsc/0.33.9_typescript@4.9.5
-
-packages:
-
-  /@commitlint/load/17.4.4:
-    resolution: {integrity: sha512-z6uFIQ7wfKX5FGBe1AkOF4l/ShOQsaa1ml/nLMkbW7R/xF8galGS7Zh0yHvzVp/srtfS0brC+0bUfQfmpMPFVQ==}
-    engines: {node: '>=v14'}
-    requiresBuild: true
-    dependencies:
-      '@commitlint/config-validator': registry.npmmirror.com/@commitlint/config-validator/17.4.4
-      '@commitlint/execute-rule': registry.npmmirror.com/@commitlint/execute-rule/17.4.0
-      '@commitlint/resolve-extends': registry.npmmirror.com/@commitlint/resolve-extends/17.4.4
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/17.4.4
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      cosmiconfig: registry.npmmirror.com/cosmiconfig/8.1.0
-      cosmiconfig-typescript-loader: registry.npmmirror.com/cosmiconfig-typescript-loader/4.3.0_ex3rrhbii2ixlrca7p7vytu7ce
-      lodash.isplainobject: registry.npmmirror.com/lodash.isplainobject/4.0.6
-      lodash.merge: registry.npmmirror.com/lodash.merge/4.6.2
-      lodash.uniq: registry.npmmirror.com/lodash.uniq/4.5.0
-      resolve-from: registry.npmmirror.com/resolve-from/5.0.0
-      ts-node: registry.npmmirror.com/ts-node/10.9.1_cin3sed6ohfsopbmt6orxeb4o4
-      typescript: registry.npmmirror.com/typescript/4.9.5
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-    dev: true
-    optional: true
-
-  /@esbuild/android-arm/0.15.18:
-    resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/android-arm/0.17.11:
-    resolution: {integrity: sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/android-arm64/0.17.11:
-    resolution: {integrity: sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/android-x64/0.17.11:
-    resolution: {integrity: sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/darwin-arm64/0.17.11:
-    resolution: {integrity: sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/darwin-x64/0.17.11:
-    resolution: {integrity: sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/freebsd-arm64/0.17.11:
-    resolution: {integrity: sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/freebsd-x64/0.17.11:
-    resolution: {integrity: sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-arm/0.17.11:
-    resolution: {integrity: sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-arm64/0.17.11:
-    resolution: {integrity: sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-ia32/0.17.11:
-    resolution: {integrity: sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA==}
-    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'}
-    cpu: [loong64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-loong64/0.15.18:
-    resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==}
-    engines: {node: '>=12'}
-    cpu: [loong64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-loong64/0.17.11:
-    resolution: {integrity: sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g==}
-    engines: {node: '>=12'}
-    cpu: [loong64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-mips64el/0.17.11:
-    resolution: {integrity: sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw==}
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-ppc64/0.17.11:
-    resolution: {integrity: sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-riscv64/0.17.11:
-    resolution: {integrity: sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA==}
-    engines: {node: '>=12'}
-    cpu: [riscv64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-s390x/0.17.11:
-    resolution: {integrity: sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ==}
-    engines: {node: '>=12'}
-    cpu: [s390x]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-x64/0.17.11:
-    resolution: {integrity: sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/netbsd-x64/0.17.11:
-    resolution: {integrity: sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [netbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/openbsd-x64/0.17.11:
-    resolution: {integrity: sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [openbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/sunos-x64/0.17.11:
-    resolution: {integrity: sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [sunos]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/win32-arm64/0.17.11:
-    resolution: {integrity: sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/win32-ia32/0.17.11:
-    resolution: {integrity: sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/win32-x64/0.17.11:
-    resolution: {integrity: sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@sindresorhus/is/0.7.0:
-    resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /@types/keyv/3.1.4:
-    resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
-    dependencies:
-      '@types/node': 17.0.45
-    dev: true
-
-  /@types/node/17.0.45:
-    resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
-    dev: true
-
-  /@types/responselike/1.0.0:
-    resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
-    dependencies:
-      '@types/node': 17.0.45
-    dev: true
-
-  /@vue/compiler-dom/3.2.47:
-    resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
-    dependencies:
-      '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.47
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-
-  /@vue/server-renderer/3.2.47_vue@3.2.47:
-    resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==}
-    requiresBuild: true
-    peerDependencies:
-      vue: 3.2.47
-    dependencies:
-      '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.2.47
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: true
-    optional: true
-
-  /arch/2.2.0:
-    resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
-    dev: true
-
-  /archive-type/4.0.0:
-    resolution: {integrity: sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==}
-    engines: {node: '>=4'}
-    dependencies:
-      file-type: 4.4.0
-    dev: true
-
-  /base64-js/1.5.1:
-    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
-    dev: true
-
-  /bin-check/4.1.0:
-    resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==}
-    engines: {node: '>=4'}
-    dependencies:
-      execa: 0.7.0
-      executable: 4.1.1
-    dev: true
-
-  /bin-version-check/4.0.0:
-    resolution: {integrity: sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==}
-    engines: {node: '>=6'}
-    dependencies:
-      bin-version: 3.1.0
-      semver: 5.7.1
-      semver-truncate: 1.1.2
-    dev: true
-
-  /bin-version/3.1.0:
-    resolution: {integrity: sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==}
-    engines: {node: '>=6'}
-    dependencies:
-      execa: 1.0.0
-      find-versions: 3.2.0
-    dev: true
-
-  /bin-wrapper-china/0.1.0:
-    resolution: {integrity: sha512-1UCm17WYEbgry50tup+AQN+JGVEVzoW4f8HMl899k1lvuFxWKGZXl/G2fgxQxAckRjnloO3ijLVVEsv8zescUg==}
-    engines: {node: '>=8.3'}
-    hasBin: true
-    dependencies:
-      bin-check: 4.1.0
-      bin-version-check: 4.0.0
-      binary-mirror-config: 1.41.0
-      download: 7.1.0
-      import-lazy: 4.0.0
-      os-filter-obj: 2.0.0
-      pify: 4.0.1
-    dev: true
-
-  /binary-mirror-config/1.41.0:
-    resolution: {integrity: sha512-ZiIhR1s6Sv1Fv6qCQqfPjx0Cj86BgFlhqNxZgHkQOWcxJcMbO3mj1iqsuVjowYqJqeZL8e52+IEv7IRnSX6T6w==}
-    dev: true
-
-  /bl/1.2.3:
-    resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==}
-    dependencies:
-      readable-stream: 2.3.8
-      safe-buffer: 5.2.1
-    dev: true
-
-  /buffer-alloc-unsafe/1.1.0:
-    resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
-    dev: true
-
-  /buffer-alloc/1.2.0:
-    resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}
-    dependencies:
-      buffer-alloc-unsafe: 1.1.0
-      buffer-fill: 1.0.0
-    dev: true
-
-  /buffer-crc32/0.2.13:
-    resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
-    dev: true
-
-  /buffer-fill/1.0.0:
-    resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
-    dev: true
-
-  /buffer/5.7.1:
-    resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
-    dependencies:
-      base64-js: 1.5.1
-      ieee754: 1.2.1
-    dev: true
-
-  /cacheable-request/2.1.4:
-    resolution: {integrity: sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==}
-    dependencies:
-      clone-response: 1.0.2
-      get-stream: 3.0.0
-      http-cache-semantics: 3.8.1
-      keyv: 3.0.0
-      lowercase-keys: 1.0.0
-      normalize-url: 2.0.1
-      responselike: 1.0.2
-    dev: true
-
-  /caw/2.0.1:
-    resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==}
-    engines: {node: '>=4'}
-    dependencies:
-      get-proxy: 2.1.0
-      isurl: 1.0.0
-      tunnel-agent: 0.6.0
-      url-to-options: 1.0.1
-    dev: true
-
-  /clone-response/1.0.2:
-    resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==}
-    dependencies:
-      mimic-response: 1.0.1
-    dev: true
-
-  /commander/2.20.3:
-    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
-    dev: true
-
-  /config-chain/1.1.13:
-    resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
-    dependencies:
-      ini: 1.3.8
-      proto-list: 1.2.4
-    dev: true
-
-  /content-disposition/0.5.4:
-    resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
-    engines: {node: '>= 0.6'}
-    dependencies:
-      safe-buffer: 5.2.1
-    dev: true
-
-  /core-util-is/1.0.3:
-    resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-    dev: true
-
-  /cross-spawn/5.1.0:
-    resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
-    dependencies:
-      lru-cache: 4.1.5
-      shebang-command: 1.2.0
-      which: 1.3.1
-    dev: true
-
-  /cross-spawn/6.0.5:
-    resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
-    engines: {node: '>=4.8'}
-    dependencies:
-      nice-try: 1.0.5
-      path-key: 2.0.1
-      semver: 5.7.1
-      shebang-command: 1.2.0
-      which: 1.3.1
-    dev: true
-
-  /decode-uri-component/0.2.2:
-    resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
-    engines: {node: '>=0.10'}
-    dev: true
-
-  /decompress-response/3.3.0:
-    resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==}
-    engines: {node: '>=4'}
-    dependencies:
-      mimic-response: 1.0.1
-    dev: true
-
-  /decompress-tar/4.1.1:
-    resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==}
-    engines: {node: '>=4'}
-    dependencies:
-      file-type: 5.2.0
-      is-stream: 1.1.0
-      tar-stream: 1.6.2
-    dev: true
-
-  /decompress-tarbz2/4.1.1:
-    resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==}
-    engines: {node: '>=4'}
-    dependencies:
-      decompress-tar: 4.1.1
-      file-type: 6.2.0
-      is-stream: 1.1.0
-      seek-bzip: 1.0.6
-      unbzip2-stream: 1.4.3
-    dev: true
-
-  /decompress-targz/4.1.1:
-    resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==}
-    engines: {node: '>=4'}
-    dependencies:
-      decompress-tar: 4.1.1
-      file-type: 5.2.0
-      is-stream: 1.1.0
-    dev: true
-
-  /decompress-unzip/4.0.1:
-    resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==}
-    engines: {node: '>=4'}
-    dependencies:
-      file-type: 3.9.0
-      get-stream: 2.3.1
-      pify: 2.3.0
-      yauzl: 2.10.0
-    dev: true
-
-  /decompress/4.2.1:
-    resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==}
-    engines: {node: '>=4'}
-    dependencies:
-      decompress-tar: 4.1.1
-      decompress-tarbz2: 4.1.1
-      decompress-targz: 4.1.1
-      decompress-unzip: 4.0.1
-      graceful-fs: 4.2.10
-      make-dir: 1.3.0
-      pify: 2.3.0
-      strip-dirs: 2.1.0
-    dev: true
-
-  /download/7.1.0:
-    resolution: {integrity: sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==}
-    engines: {node: '>=6'}
-    dependencies:
-      archive-type: 4.0.0
-      caw: 2.0.1
-      content-disposition: 0.5.4
-      decompress: 4.2.1
-      ext-name: 5.0.0
-      file-type: 8.1.0
-      filenamify: 2.1.0
-      get-stream: 3.0.0
-      got: 8.3.2
-      make-dir: 1.3.0
-      p-event: 2.3.1
-      pify: 3.0.0
-    dev: true
-
-  /duplexer3/0.1.5:
-    resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==}
-    dev: true
-
-  /echarts-liquidfill/3.1.0_echarts@5.4.1:
-    resolution: {integrity: sha512-5Dlqs/jTsdTUAsd+K5LPLLTgrbbNORUSBQyk8PSy1Mg2zgHDWm83FmvA4s0ooNepCJojFYRITTQ4GU1UUSKYLw==}
-    peerDependencies:
-      echarts: ^5.0.1
-    dependencies:
-      echarts: registry.npmmirror.com/echarts/5.4.1
-    dev: false
-
-  /end-of-stream/1.4.4:
-    resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
-    dependencies:
-      once: 1.4.0
-    dev: true
-
-  /errno/0.1.8:
-    resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      prr: registry.npmmirror.com/prr/1.0.1
-    dev: true
-    optional: true
-
-  /esbuild-android-64/0.14.54:
-    resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-android-64/0.15.18:
-    resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==}
-    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'}
-    cpu: [arm64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-android-arm64/0.15.18:
-    resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==}
-    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'}
-    cpu: [x64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-darwin-64/0.15.18:
-    resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==}
-    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'}
-    cpu: [arm64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-darwin-arm64/0.15.18:
-    resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==}
-    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'}
-    cpu: [x64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-freebsd-64/0.15.18:
-    resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==}
-    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'}
-    cpu: [arm64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-freebsd-arm64/0.15.18:
-    resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==}
-    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'}
-    cpu: [ia32]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-32/0.15.18:
-    resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==}
-    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'}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-64/0.15.18:
-    resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    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'}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-arm/0.15.18:
-    resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    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'}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-arm64/0.15.18:
-    resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-mips64le/0.14.54:
-    resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==}
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-mips64le/0.15.18:
-    resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==}
-    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'}
-    cpu: [ppc64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-ppc64le/0.15.18:
-    resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==}
-    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'}
-    cpu: [riscv64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-riscv64/0.15.18:
-    resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==}
-    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'}
-    cpu: [s390x]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-linux-s390x/0.15.18:
-    resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==}
-    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'}
-    cpu: [x64]
-    os: [netbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-netbsd-64/0.15.18:
-    resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==}
-    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'}
-    cpu: [x64]
-    os: [openbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-openbsd-64/0.15.18:
-    resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==}
-    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'}
-    cpu: [x64]
-    os: [sunos]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-sunos-64/0.15.18:
-    resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==}
-    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'}
-    cpu: [ia32]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-windows-32/0.15.18:
-    resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==}
-    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'}
-    cpu: [x64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-windows-64/0.15.18:
-    resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==}
-    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'}
-    cpu: [arm64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /esbuild-windows-arm64/0.15.18:
-    resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /escape-string-regexp/1.0.5:
-    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
-    engines: {node: '>=0.8.0'}
-    dev: true
-
-  /execa/0.7.0:
-    resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==}
-    engines: {node: '>=4'}
-    dependencies:
-      cross-spawn: 5.1.0
-      get-stream: 3.0.0
-      is-stream: 1.1.0
-      npm-run-path: 2.0.2
-      p-finally: 1.0.0
-      signal-exit: 3.0.7
-      strip-eof: 1.0.0
-    dev: true
-
-  /execa/1.0.0:
-    resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==}
-    engines: {node: '>=6'}
-    dependencies:
-      cross-spawn: 6.0.5
-      get-stream: 4.1.0
-      is-stream: 1.1.0
-      npm-run-path: 2.0.2
-      p-finally: 1.0.0
-      signal-exit: 3.0.7
-      strip-eof: 1.0.0
-    dev: true
-
-  /execa/4.1.0:
-    resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==}
-    engines: {node: '>=10'}
-    dependencies:
-      cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3
-      get-stream: registry.npmmirror.com/get-stream/5.2.0
-      human-signals: registry.npmmirror.com/human-signals/1.1.1
-      is-stream: registry.npmmirror.com/is-stream/2.0.1
-      merge-stream: registry.npmmirror.com/merge-stream/2.0.0
-      npm-run-path: registry.npmmirror.com/npm-run-path/4.0.1
-      onetime: registry.npmmirror.com/onetime/5.1.2
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-      strip-final-newline: registry.npmmirror.com/strip-final-newline/2.0.0
-    dev: true
-
-  /executable/4.1.1:
-    resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
-    engines: {node: '>=4'}
-    dependencies:
-      pify: 2.3.0
-    dev: true
-
-  /ext-list/2.2.2:
-    resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      mime-db: 1.52.0
-    dev: true
-
-  /ext-name/5.0.0:
-    resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==}
-    engines: {node: '>=4'}
-    dependencies:
-      ext-list: 2.2.2
-      sort-keys-length: 1.0.1
-    dev: true
-
-  /fd-slicer/1.1.0:
-    resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
-    dependencies:
-      pend: 1.2.0
-    dev: true
-
-  /file-type/3.9.0:
-    resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /file-type/4.4.0:
-    resolution: {integrity: sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /file-type/5.2.0:
-    resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /file-type/6.2.0:
-    resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /file-type/8.1.0:
-    resolution: {integrity: sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==}
-    engines: {node: '>=6'}
-    dev: true
-
-  /filename-reserved-regex/2.0.0:
-    resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /filenamify/2.1.0:
-    resolution: {integrity: sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==}
-    engines: {node: '>=4'}
-    dependencies:
-      filename-reserved-regex: 2.0.0
-      strip-outer: 1.0.1
-      trim-repeated: 1.0.0
-    dev: true
-
-  /find-versions/3.2.0:
-    resolution: {integrity: sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==}
-    engines: {node: '>=6'}
-    dependencies:
-      semver-regex: 2.0.0
-    dev: true
-
-  /from2/2.3.0:
-    resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
-    dependencies:
-      inherits: 2.0.4
-      readable-stream: 2.3.8
-    dev: true
-
-  /fs-constants/1.0.0:
-    resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
-    dev: true
-
-  /fsevents/2.3.2:
-    resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
-    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /get-proxy/2.1.0:
-    resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==}
-    engines: {node: '>=4'}
-    dependencies:
-      npm-conf: 1.1.3
-    dev: true
-
-  /get-stream/2.3.1:
-    resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      object-assign: 4.1.1
-      pinkie-promise: 2.0.1
-    dev: true
-
-  /get-stream/3.0.0:
-    resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /get-stream/4.1.0:
-    resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==}
-    engines: {node: '>=6'}
-    dependencies:
-      pump: 3.0.0
-    dev: true
-
-  /got/7.1.0:
-    resolution: {integrity: sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==}
-    engines: {node: '>=4'}
-    dependencies:
-      '@types/keyv': 3.1.4
-      '@types/responselike': 1.0.0
-      decompress-response: 3.3.0
-      duplexer3: 0.1.5
-      get-stream: 3.0.0
-      is-plain-obj: 1.1.0
-      is-retry-allowed: 1.2.0
-      is-stream: 1.1.0
-      isurl: 1.0.0
-      lowercase-keys: 1.0.1
-      p-cancelable: 0.3.0
-      p-timeout: 1.2.1
-      safe-buffer: 5.2.1
-      timed-out: 4.0.1
-      url-parse-lax: 1.0.0
-      url-to-options: 1.0.1
-    dev: true
-
-  /got/8.3.2:
-    resolution: {integrity: sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==}
-    engines: {node: '>=4'}
-    dependencies:
-      '@sindresorhus/is': 0.7.0
-      '@types/keyv': 3.1.4
-      '@types/responselike': 1.0.0
-      cacheable-request: 2.1.4
-      decompress-response: 3.3.0
-      duplexer3: 0.1.5
-      get-stream: 3.0.0
-      into-stream: 3.1.0
-      is-retry-allowed: 1.2.0
-      isurl: 1.0.0
-      lowercase-keys: 1.0.1
-      mimic-response: 1.0.1
-      p-cancelable: 0.4.1
-      p-timeout: 2.0.1
-      pify: 3.0.0
-      safe-buffer: 5.2.1
-      timed-out: 4.0.1
-      url-parse-lax: 3.0.0
-      url-to-options: 1.0.1
-    dev: true
-
-  /graceful-fs/4.2.10:
-    resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
-    dev: true
-
-  /has-symbol-support-x/1.4.2:
-    resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==}
-    dev: true
-
-  /has-to-string-tag-x/1.4.1:
-    resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==}
-    dependencies:
-      has-symbol-support-x: 1.4.2
-    dev: true
-
-  /http-cache-semantics/3.8.1:
-    resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==}
-    dev: true
-
-  /ieee754/1.2.1:
-    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
-    dev: true
-
-  /image-size/0.5.5:
-    resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-    dev: true
-
-  /import-lazy/4.0.0:
-    resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /inherits/2.0.4:
-    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-    dev: true
-
-  /ini/1.3.8:
-    resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
-    dev: true
-
-  /into-stream/3.1.0:
-    resolution: {integrity: sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==}
-    engines: {node: '>=4'}
-    dependencies:
-      from2: 2.3.0
-      p-is-promise: 1.1.0
-    dev: true
-
-  /is-natural-number/4.0.1:
-    resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==}
-    dev: true
-
-  /is-object/1.0.2:
-    resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==}
-    dev: true
-
-  /is-plain-obj/1.1.0:
-    resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /is-retry-allowed/1.2.0:
-    resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /is-stream/1.1.0:
-    resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /isarray/1.0.0:
-    resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
-    dev: true
-
-  /isexe/2.0.0:
-    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-    dev: true
-
-  /isurl/1.0.0:
-    resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==}
-    engines: {node: '>= 4'}
-    dependencies:
-      has-to-string-tag-x: 1.4.1
-      is-object: 1.0.2
-    dev: true
-
-  /json-buffer/3.0.0:
-    resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==}
-    dev: true
-
-  /keyv/3.0.0:
-    resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==}
-    dependencies:
-      json-buffer: 3.0.0
-    dev: true
-
-  /lowercase-keys/1.0.0:
-    resolution: {integrity: sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /lowercase-keys/1.0.1:
-    resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /lru-cache/4.1.5:
-    resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
-    dependencies:
-      pseudomap: 1.0.2
-      yallist: 2.1.2
-    dev: true
-
-  /make-dir/1.3.0:
-    resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
-    engines: {node: '>=4'}
-    dependencies:
-      pify: 3.0.0
-    dev: true
-
-  /make-dir/2.1.0:
-    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
-    engines: {node: '>=6'}
-    requiresBuild: true
-    dependencies:
-      pify: registry.npmmirror.com/pify/4.0.1
-      semver: registry.npmmirror.com/semver/5.7.1
-    dev: true
-    optional: true
-
-  /make-dir/3.1.0:
-    resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
-    engines: {node: '>=8'}
-    dependencies:
-      semver: 6.3.0
-    dev: true
-
-  /mime-db/1.52.0:
-    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  /mime/1.6.0:
-    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
-    engines: {node: '>=4'}
-    hasBin: true
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /mimic-response/1.0.1:
-    resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /needle/3.2.0:
-    resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==}
-    engines: {node: '>= 4.4.x'}
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      debug: registry.npmmirror.com/debug/3.2.7
-      iconv-lite: registry.npmmirror.com/iconv-lite/0.6.3
-      sax: registry.npmmirror.com/sax/1.2.4
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-    optional: true
-
-  /nice-try/1.0.5:
-    resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
-    dev: true
-
-  /normalize-url/2.0.1:
-    resolution: {integrity: sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==}
-    engines: {node: '>=4'}
-    dependencies:
-      prepend-http: 2.0.0
-      query-string: 5.1.1
-      sort-keys: 2.0.0
-    dev: true
-
-  /npm-conf/1.1.3:
-    resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==}
-    engines: {node: '>=4'}
-    dependencies:
-      config-chain: 1.1.13
-      pify: 3.0.0
-    dev: true
-
-  /npm-run-path/2.0.2:
-    resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==}
-    engines: {node: '>=4'}
-    dependencies:
-      path-key: 2.0.1
-    dev: true
-
-  /object-assign/4.1.1:
-    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /once/1.4.0:
-    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-    dependencies:
-      wrappy: 1.0.2
-    dev: true
-
-  /os-filter-obj/2.0.0:
-    resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==}
-    engines: {node: '>=4'}
-    dependencies:
-      arch: 2.2.0
-    dev: true
-
-  /p-cancelable/0.3.0:
-    resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /p-cancelable/0.4.1:
-    resolution: {integrity: sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /p-event/1.3.0:
-    resolution: {integrity: sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==}
-    engines: {node: '>=4'}
-    dependencies:
-      p-timeout: 1.2.1
-    dev: true
-
-  /p-event/2.3.1:
-    resolution: {integrity: sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==}
-    engines: {node: '>=6'}
-    dependencies:
-      p-timeout: 2.0.1
-    dev: true
-
-  /p-finally/1.0.0:
-    resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /p-is-promise/1.1.0:
-    resolution: {integrity: sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /p-timeout/1.2.1:
-    resolution: {integrity: sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==}
-    engines: {node: '>=4'}
-    dependencies:
-      p-finally: 1.0.0
-    dev: true
-
-  /p-timeout/2.0.1:
-    resolution: {integrity: sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==}
-    engines: {node: '>=4'}
-    dependencies:
-      p-finally: 1.0.0
-    dev: true
-
-  /path-key/2.0.1:
-    resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /pend/1.2.0:
-    resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
-    dev: true
-
-  /pify/2.3.0:
-    resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /pify/3.0.0:
-    resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /pify/4.0.1:
-    resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
-    engines: {node: '>=6'}
-    dev: true
-
-  /pinkie-promise/2.0.1:
-    resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      pinkie: 2.0.4
-    dev: true
-
-  /pinkie/2.0.4:
-    resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /prepend-http/1.0.4:
-    resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /prepend-http/2.0.0:
-    resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /process-nextick-args/2.0.1:
-    resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
-    dev: true
-
-  /proto-list/1.2.4:
-    resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
-    dev: true
-
-  /pseudomap/1.0.2:
-    resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
-    dev: true
-
-  /pump/3.0.0:
-    resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
-    dependencies:
-      end-of-stream: 1.4.4
-      once: 1.4.0
-    dev: true
-
-  /query-string/5.1.1:
-    resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      decode-uri-component: 0.2.2
-      object-assign: 4.1.1
-      strict-uri-encode: 1.1.0
-    dev: true
-
-  /readable-stream/2.3.8:
-    resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
-    dependencies:
-      core-util-is: 1.0.3
-      inherits: 2.0.4
-      isarray: 1.0.0
-      process-nextick-args: 2.0.1
-      safe-buffer: 5.1.2
-      string_decoder: 1.1.1
-      util-deprecate: 1.0.2
-    dev: true
-
-  /responselike/1.0.2:
-    resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==}
-    dependencies:
-      lowercase-keys: 1.0.1
-    dev: true
-
-  /safe-buffer/5.1.2:
-    resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
-    dev: true
-
-  /safe-buffer/5.2.1:
-    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-    dev: true
-
-  /seek-bzip/1.0.6:
-    resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==}
-    hasBin: true
-    dependencies:
-      commander: 2.20.3
-    dev: true
-
-  /semver-regex/2.0.0:
-    resolution: {integrity: sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==}
-    engines: {node: '>=6'}
-    dev: true
-
-  /semver-truncate/1.1.2:
-    resolution: {integrity: sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      semver: 5.7.1
-    dev: true
-
-  /semver/5.7.1:
-    resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
-    hasBin: true
-    dev: true
-
-  /semver/6.3.0:
-    resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
-    hasBin: true
-    dev: true
-
-  /shebang-command/1.2.0:
-    resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      shebang-regex: 1.0.0
-    dev: true
-
-  /shebang-regex/1.0.0:
-    resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /signal-exit/3.0.7:
-    resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
-    dev: true
-
-  /sort-keys-length/1.0.1:
-    resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      sort-keys: 1.1.2
-    dev: true
-
-  /sort-keys/1.1.2:
-    resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-plain-obj: 1.1.0
-    dev: true
-
-  /sort-keys/2.0.0:
-    resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==}
-    engines: {node: '>=4'}
-    dependencies:
-      is-plain-obj: 1.1.0
-    dev: true
-
-  /source-map/0.5.7:
-    resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /source-map/0.6.1:
-    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
-    engines: {node: '>=0.10.0'}
-
-  /source-map/0.7.4:
-    resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
-    engines: {node: '>= 8'}
-    dev: true
-
-  /source-map/0.8.0-beta.0:
-    resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
-    engines: {node: '>= 8'}
-    dependencies:
-      whatwg-url: registry.npmmirror.com/whatwg-url/7.1.0
-    dev: true
-
-  /strict-uri-encode/1.1.0:
-    resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /string_decoder/1.1.1:
-    resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
-    dependencies:
-      safe-buffer: 5.1.2
-    dev: true
-
-  /strip-dirs/2.1.0:
-    resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==}
-    dependencies:
-      is-natural-number: 4.0.1
-    dev: true
-
-  /strip-eof/1.0.0:
-    resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /strip-outer/1.0.1:
-    resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      escape-string-regexp: 1.0.5
-    dev: true
-
-  /tar-stream/1.6.2:
-    resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==}
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      bl: 1.2.3
-      buffer-alloc: 1.2.0
-      end-of-stream: 1.4.4
-      fs-constants: 1.0.0
-      readable-stream: 2.3.8
-      to-buffer: 1.1.1
-      xtend: 4.0.2
-    dev: true
-
-  /through/2.3.8:
-    resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
-    dev: true
-
-  /timed-out/4.0.1:
-    resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /to-buffer/1.1.1:
-    resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==}
-    dev: true
-
-  /trim-repeated/1.0.0:
-    resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      escape-string-regexp: 1.0.5
-    dev: true
-
-  /tunnel-agent/0.6.0:
-    resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
-    dependencies:
-      safe-buffer: 5.2.1
-    dev: true
-
-  /uglify-js/3.17.4:
-    resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
-    engines: {node: '>=0.8.0'}
-    hasBin: true
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /unbzip2-stream/1.4.3:
-    resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}
-    dependencies:
-      buffer: 5.7.1
-      through: 2.3.8
-    dev: true
-
-  /url-parse-lax/1.0.0:
-    resolution: {integrity: sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      prepend-http: 1.0.4
-    dev: true
-
-  /url-parse-lax/3.0.0:
-    resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==}
-    engines: {node: '>=4'}
-    dependencies:
-      prepend-http: 2.0.0
-    dev: true
-
-  /url-to-options/1.0.1:
-    resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==}
-    engines: {node: '>= 4'}
-    dev: true
-
-  /util-deprecate/1.0.2:
-    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-    dev: true
-
-  /which/1.3.1:
-    resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
-    hasBin: true
-    dependencies:
-      isexe: 2.0.0
-    dev: true
-
-  /wrappy/1.0.2:
-    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-    dev: true
-
-  /xtend/4.0.2:
-    resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
-    engines: {node: '>=0.4'}
-    dev: true
-
-  /yallist/2.1.2:
-    resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
-    dev: true
-
-  /yauzl/2.10.0:
-    resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
-    dependencies:
-      buffer-crc32: 0.2.13
-      fd-slicer: 1.1.0
-    dev: true
-
-  registry.npmmirror.com/@ampproject/remapping/2.2.0:
-    resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz}
-    name: '@ampproject/remapping'
-    version: 2.2.0
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.1.1
-      '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17
-    dev: true
-
-  registry.npmmirror.com/@ant-design/colors/6.0.0:
-    resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz}
-    name: '@ant-design/colors'
-    version: 6.0.0
-    dependencies:
-      '@ctrl/tinycolor': registry.npmmirror.com/@ctrl/tinycolor/3.6.0
-    dev: false
-
-  registry.npmmirror.com/@ant-design/icons-svg/4.2.1:
-    resolution: {integrity: sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz}
-    name: '@ant-design/icons-svg'
-    version: 4.2.1
-    dev: false
-
-  registry.npmmirror.com/@ant-design/icons-vue/6.1.0_vue@3.2.47:
-    resolution: {integrity: sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz}
-    id: registry.npmmirror.com/@ant-design/icons-vue/6.1.0
-    name: '@ant-design/icons-vue'
-    version: 6.1.0
-    peerDependencies:
-      vue: '>=3.0.3'
-    dependencies:
-      '@ant-design/colors': registry.npmmirror.com/@ant-design/colors/6.0.0
-      '@ant-design/icons-svg': registry.npmmirror.com/@ant-design/icons-svg/4.2.1
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: false
-
-  registry.npmmirror.com/@antfu/utils/0.7.2:
-    resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.2.tgz}
-    name: '@antfu/utils'
-    version: 0.7.2
-    dev: true
-
-  registry.npmmirror.com/@apideck/better-ajv-errors/0.3.6_ajv@8.12.0:
-    resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz}
-    id: registry.npmmirror.com/@apideck/better-ajv-errors/0.3.6
-    name: '@apideck/better-ajv-errors'
-    version: 0.3.6
-    engines: {node: '>=10'}
-    peerDependencies:
-      ajv: '>=8'
-    dependencies:
-      ajv: registry.npmmirror.com/ajv/8.12.0
-      json-schema: registry.npmmirror.com/json-schema/0.4.0
-      jsonpointer: registry.npmmirror.com/jsonpointer/5.0.1
-      leven: registry.npmmirror.com/leven/3.1.0
-    dev: true
-
-  registry.npmmirror.com/@babel/code-frame/7.18.6:
-    resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz}
-    name: '@babel/code-frame'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/highlight': registry.npmmirror.com/@babel/highlight/7.18.6
-    dev: true
-
-  registry.npmmirror.com/@babel/compat-data/7.21.0:
-    resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.21.0.tgz}
-    name: '@babel/compat-data'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/@babel/core/7.21.0:
-    resolution: {integrity: sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/core/-/core-7.21.0.tgz}
-    name: '@babel/core'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@ampproject/remapping': registry.npmmirror.com/@ampproject/remapping/2.2.0
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      '@babel/generator': registry.npmmirror.com/@babel/generator/7.21.1
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0
-      '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.21.2
-      '@babel/helpers': registry.npmmirror.com/@babel/helpers/7.21.0
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.21.2
-      '@babel/template': registry.npmmirror.com/@babel/template/7.20.7
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.21.2
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-      convert-source-map: registry.npmmirror.com/convert-source-map/1.9.0
-      debug: registry.npmmirror.com/debug/4.3.4
-      gensync: registry.npmmirror.com/gensync/1.0.0-beta.2
-      json5: registry.npmmirror.com/json5/2.2.3
-      semver: registry.npmmirror.com/semver/6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/generator/7.21.1:
-    resolution: {integrity: sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/generator/-/generator-7.21.1.tgz}
-    name: '@babel/generator'
-    version: 7.21.1
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-      '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.3.2
-      '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17
-      jsesc: registry.npmmirror.com/jsesc/2.5.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6:
-    resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz}
-    name: '@babel/helper-annotate-as-pure'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/7.18.9:
-    resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz}
-    name: '@babel/helper-builder-binary-assignment-operator-visitor'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-explode-assignable-expression': registry.npmmirror.com/@babel/helper-explode-assignable-expression/7.18.6
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0:
-    resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz}
-    id: registry.npmmirror.com/@babel/helper-compilation-targets/7.20.7
-    name: '@babel/helper-compilation-targets'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.21.0
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-validator-option': registry.npmmirror.com/@babel/helper-validator-option/7.21.0
-      browserslist: registry.npmmirror.com/browserslist/4.21.5
-      lru-cache: registry.npmmirror.com/lru-cache/5.1.1
-      semver: registry.npmmirror.com/semver/6.3.0
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz}
-    id: registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.21.0
-    name: '@babel/helper-create-class-features-plugin'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.21.0
-      '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.21.0
-      '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6
-      '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.20.7
-      '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.20.0
-      '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz}
-    id: registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.21.0
-    name: '@babel/helper-create-regexp-features-plugin'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6
-      regexpu-core: registry.npmmirror.com/regexpu-core/5.3.1
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.0:
-    resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz}
-    id: registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.3
-    name: '@babel/helper-define-polyfill-provider'
-    version: 0.3.3
-    peerDependencies:
-      '@babel/core': ^7.4.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      debug: registry.npmmirror.com/debug/4.3.4
-      lodash.debounce: registry.npmmirror.com/lodash.debounce/4.0.8
-      resolve: registry.npmmirror.com/resolve/1.22.1
-      semver: 6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9:
-    resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz}
-    name: '@babel/helper-environment-visitor'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-explode-assignable-expression/7.18.6:
-    resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz}
-    name: '@babel/helper-explode-assignable-expression'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-function-name/7.21.0:
-    resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz}
-    name: '@babel/helper-function-name'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/template': registry.npmmirror.com/@babel/template/7.20.7
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6:
-    resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz}
-    name: '@babel/helper-hoist-variables'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.21.0:
-    resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz}
-    name: '@babel/helper-member-expression-to-functions'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-module-imports/7.18.6:
-    resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz}
-    name: '@babel/helper-module-imports'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-module-transforms/7.21.2:
-    resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz}
-    name: '@babel/helper-module-transforms'
-    version: 7.21.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6
-      '@babel/helper-simple-access': registry.npmmirror.com/@babel/helper-simple-access/7.20.2
-      '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6
-      '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
-      '@babel/template': registry.npmmirror.com/@babel/template/7.20.7
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.21.2
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6:
-    resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz}
-    name: '@babel/helper-optimise-call-expression'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2:
-    resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz}
-    name: '@babel/helper-plugin-utils'
-    version: 7.20.2
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.0:
-    resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.18.9
-    name: '@babel/helper-remap-async-to-generator'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-wrap-function': registry.npmmirror.com/@babel/helper-wrap-function/7.20.5
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-replace-supers/7.20.7:
-    resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz}
-    name: '@babel/helper-replace-supers'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.21.0
-      '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6
-      '@babel/template': registry.npmmirror.com/@babel/template/7.20.7
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.21.2
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-simple-access/7.20.2:
-    resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz}
-    name: '@babel/helper-simple-access'
-    version: 7.20.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.20.0:
-    resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz}
-    name: '@babel/helper-skip-transparent-expression-wrappers'
-    version: 7.20.0
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6:
-    resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz}
-    name: '@babel/helper-split-export-declaration'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-string-parser/7.19.4:
-    resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz}
-    name: '@babel/helper-string-parser'
-    version: 7.19.4
-    engines: {node: '>=6.9.0'}
-
-  registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1:
-    resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz}
-    name: '@babel/helper-validator-identifier'
-    version: 7.19.1
-    engines: {node: '>=6.9.0'}
-
-  registry.npmmirror.com/@babel/helper-validator-option/7.21.0:
-    resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz}
-    name: '@babel/helper-validator-option'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/@babel/helper-wrap-function/7.20.5:
-    resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz}
-    name: '@babel/helper-wrap-function'
-    version: 7.20.5
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.21.0
-      '@babel/template': registry.npmmirror.com/@babel/template/7.20.7
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.21.2
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/helpers/7.21.0:
-    resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helpers/-/helpers-7.21.0.tgz}
-    name: '@babel/helpers'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/template': registry.npmmirror.com/@babel/template/7.20.7
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.21.2
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/highlight/7.18.6:
-    resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz}
-    name: '@babel/highlight'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      js-tokens: registry.npmmirror.com/js-tokens/4.0.0
-    dev: true
-
-  registry.npmmirror.com/@babel/parser/7.21.2:
-    resolution: {integrity: sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.21.2.tgz}
-    name: '@babel/parser'
-    version: 7.21.2
-    engines: {node: '>=6.0.0'}
-    hasBin: true
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-
-  registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6
-    name: '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.0:
-    resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz}
-    id: registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7
-    name: '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.13.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.20.0
-      '@babel/plugin-proposal-optional-chaining': registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.0:
-    resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.20.7
-    name: '@babel/plugin-proposal-async-generator-functions'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/helper-remap-async-to-generator': registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.0
-      '@babel/plugin-syntax-async-generators': registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.18.6
-    name: '@babel/plugin-proposal-class-properties'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.21.0
-    name: '@babel/plugin-proposal-class-static-block'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.12.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-syntax-class-static-block': registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.18.6
-    name: '@babel/plugin-proposal-dynamic-import'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-syntax-dynamic-import': registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.0:
-    resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.18.9
-    name: '@babel/plugin-proposal-export-namespace-from'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-syntax-export-namespace-from': registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.18.6
-    name: '@babel/plugin-proposal-json-strings'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-syntax-json-strings': registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.0:
-    resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.20.7
-    name: '@babel/plugin-proposal-logical-assignment-operators'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-syntax-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.18.6
-    name: '@babel/plugin-proposal-nullish-coalescing-operator'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-syntax-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.18.6
-    name: '@babel/plugin-proposal-numeric-separator'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-syntax-numeric-separator': registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.0:
-    resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.20.7
-    name: '@babel/plugin-proposal-object-rest-spread'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.21.0
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-syntax-object-rest-spread': registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-transform-parameters': registry.npmmirror.com/@babel/plugin-transform-parameters/7.20.7_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.18.6
-    name: '@babel/plugin-proposal-optional-catch-binding'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-syntax-optional-catch-binding': registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.21.0
-    name: '@babel/plugin-proposal-optional-chaining'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.20.0
-      '@babel/plugin-syntax-optional-chaining': registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.18.6
-    name: '@babel/plugin-proposal-private-methods'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.21.0
-    name: '@babel/plugin-proposal-private-property-in-object'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6
-      '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-syntax-private-property-in-object': registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.18.6
-    name: '@babel/plugin-proposal-unicode-property-regex'
-    version: 7.18.6
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.0:
-    resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4
-    name: '@babel/plugin-syntax-async-generators'
-    version: 7.8.4
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.0:
-    resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-bigint/7.8.3
-    name: '@babel/plugin-syntax-bigint'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.0:
-    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13
-    name: '@babel/plugin-syntax-class-properties'
-    version: 7.12.13
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.0:
-    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5
-    name: '@babel/plugin-syntax-class-static-block'
-    version: 7.14.5
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.0:
-    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3
-    name: '@babel/plugin-syntax-dynamic-import'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.0:
-    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3
-    name: '@babel/plugin-syntax-export-namespace-from'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-import-assertions/7.20.0
-    name: '@babel/plugin-syntax-import-assertions'
-    version: 7.20.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.0:
-    resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-import-meta/7.10.4
-    name: '@babel/plugin-syntax-import-meta'
-    version: 7.10.4
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.0:
-    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3
-    name: '@babel/plugin-syntax-json-strings'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6
-    name: '@babel/plugin-syntax-jsx'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.0:
-    resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4
-    name: '@babel/plugin-syntax-logical-assignment-operators'
-    version: 7.10.4
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.0:
-    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3
-    name: '@babel/plugin-syntax-nullish-coalescing-operator'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.0:
-    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4
-    name: '@babel/plugin-syntax-numeric-separator'
-    version: 7.10.4
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.0:
-    resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3
-    name: '@babel/plugin-syntax-object-rest-spread'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.0:
-    resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3
-    name: '@babel/plugin-syntax-optional-catch-binding'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.0:
-    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3
-    name: '@babel/plugin-syntax-optional-chaining'
-    version: 7.8.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.0:
-    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5
-    name: '@babel/plugin-syntax-private-property-in-object'
-    version: 7.14.5
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.0:
-    resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5
-    name: '@babel/plugin-syntax-top-level-await'
-    version: 7.14.5
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-syntax-typescript/7.20.0
-    name: '@babel/plugin-syntax-typescript'
-    version: 7.20.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.0:
-    resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.20.7
-    name: '@babel/plugin-transform-arrow-functions'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.0:
-    resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.20.7
-    name: '@babel/plugin-transform-async-to-generator'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/helper-remap-async-to-generator': registry.npmmirror.com/@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.18.6
-    name: '@babel/plugin-transform-block-scoped-functions'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.21.0
-    name: '@babel/plugin-transform-block-scoping'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-classes/7.21.0
-    name: '@babel/plugin-transform-classes'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.21.0
-      '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.20.7
-      '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6
-      globals: registry.npmmirror.com/globals/11.12.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.0:
-    resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.20.7
-    name: '@babel/plugin-transform-computed-properties'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/template': registry.npmmirror.com/@babel/template/7.20.7
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-destructuring/7.20.7_@babel+core@7.21.0:
-    resolution: {integrity: sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-destructuring/7.20.7
-    name: '@babel/plugin-transform-destructuring'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.18.6
-    name: '@babel/plugin-transform-dotall-regex'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.0:
-    resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.18.9
-    name: '@babel/plugin-transform-duplicate-keys'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.18.6
-    name: '@babel/plugin-transform-exponentiation-operator'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-builder-binary-assignment-operator-visitor': registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/7.18.9
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-for-of/7.21.0
-    name: '@babel/plugin-transform-for-of'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.0:
-    resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-function-name/7.18.9
-    name: '@babel/plugin-transform-function-name'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0
-      '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.0:
-    resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-literals/7.18.9
-    name: '@babel/plugin-transform-literals'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.18.6
-    name: '@babel/plugin-transform-member-expression-literals'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.0:
-    resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.20.11
-    name: '@babel/plugin-transform-modules-amd'
-    version: 7.20.11
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.21.2
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.0:
-    resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.21.2
-    name: '@babel/plugin-transform-modules-commonjs'
-    version: 7.21.2
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.21.2
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/helper-simple-access': registry.npmmirror.com/@babel/helper-simple-access/7.20.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.0:
-    resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.20.11
-    name: '@babel/plugin-transform-modules-systemjs'
-    version: 7.20.11
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6
-      '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.21.2
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.18.6
-    name: '@babel/plugin-transform-modules-umd'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.21.2
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.0:
-    resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.20.5
-    name: '@babel/plugin-transform-named-capturing-groups-regex'
-    version: 7.20.5
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-new-target/7.18.6
-    name: '@babel/plugin-transform-new-target'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-object-super/7.18.6
-    name: '@babel/plugin-transform-object-super'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.20.7
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-parameters/7.20.7_@babel+core@7.21.0:
-    resolution: {integrity: sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-parameters/7.20.7
-    name: '@babel/plugin-transform-parameters'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-property-literals/7.18.6
-    name: '@babel/plugin-transform-property-literals'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.0:
-    resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-regenerator/7.20.5
-    name: '@babel/plugin-transform-regenerator'
-    version: 7.20.5
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      regenerator-transform: registry.npmmirror.com/regenerator-transform/0.15.1
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.18.6
-    name: '@babel/plugin-transform-reserved-words'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.18.6
-    name: '@babel/plugin-transform-shorthand-properties'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.0:
-    resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-spread/7.20.7
-    name: '@babel/plugin-transform-spread'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/helper-skip-transparent-expression-wrappers': registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/7.20.0
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.18.6
-    name: '@babel/plugin-transform-sticky-regex'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.0:
-    resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-template-literals/7.18.9
-    name: '@babel/plugin-transform-template-literals'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.0:
-    resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.18.9
-    name: '@babel/plugin-transform-typeof-symbol'
-    version: 7.18.9
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-typescript/7.21.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-typescript/7.21.0
-    name: '@babel/plugin-transform-typescript'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-syntax-typescript': registry.npmmirror.com/@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.21.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.0:
-    resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.18.10
-    name: '@babel/plugin-transform-unicode-escapes'
-    version: 7.18.10
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.0:
-    resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz}
-    id: registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.18.6
-    name: '@babel/plugin-transform-unicode-regex'
-    version: 7.18.6
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-create-regexp-features-plugin': registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-    dev: true
-
-  registry.npmmirror.com/@babel/preset-env/7.20.2_@babel+core@7.21.0:
-    resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.20.2.tgz}
-    id: registry.npmmirror.com/@babel/preset-env/7.20.2
-    name: '@babel/preset-env'
-    version: 7.20.2
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.21.0
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/helper-validator-option': registry.npmmirror.com/@babel/helper-validator-option/7.21.0
-      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.0
-      '@babel/plugin-proposal-async-generator-functions': registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.0
-      '@babel/plugin-proposal-class-properties': registry.npmmirror.com/@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-proposal-class-static-block': registry.npmmirror.com/@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.0
-      '@babel/plugin-proposal-dynamic-import': registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-proposal-export-namespace-from': registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.0
-      '@babel/plugin-proposal-json-strings': registry.npmmirror.com/@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-proposal-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.0
-      '@babel/plugin-proposal-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-proposal-numeric-separator': registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-proposal-object-rest-spread': registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.0
-      '@babel/plugin-proposal-optional-catch-binding': registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-proposal-optional-chaining': registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.0
-      '@babel/plugin-proposal-private-methods': registry.npmmirror.com/@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-proposal-private-property-in-object': registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.0
-      '@babel/plugin-proposal-unicode-property-regex': registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-syntax-async-generators': registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.0
-      '@babel/plugin-syntax-class-properties': registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.0
-      '@babel/plugin-syntax-class-static-block': registry.npmmirror.com/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.0
-      '@babel/plugin-syntax-dynamic-import': registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-export-namespace-from': registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-import-assertions': registry.npmmirror.com/@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.0
-      '@babel/plugin-syntax-json-strings': registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.0
-      '@babel/plugin-syntax-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-numeric-separator': registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.0
-      '@babel/plugin-syntax-object-rest-spread': registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-optional-catch-binding': registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-optional-chaining': registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-private-property-in-object': registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.0
-      '@babel/plugin-syntax-top-level-await': registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.0
-      '@babel/plugin-transform-arrow-functions': registry.npmmirror.com/@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.0
-      '@babel/plugin-transform-async-to-generator': registry.npmmirror.com/@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.0
-      '@babel/plugin-transform-block-scoped-functions': registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-block-scoping': registry.npmmirror.com/@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.0
-      '@babel/plugin-transform-classes': registry.npmmirror.com/@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.0
-      '@babel/plugin-transform-computed-properties': registry.npmmirror.com/@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.0
-      '@babel/plugin-transform-destructuring': registry.npmmirror.com/@babel/plugin-transform-destructuring/7.20.7_@babel+core@7.21.0
-      '@babel/plugin-transform-dotall-regex': registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-duplicate-keys': registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.0
-      '@babel/plugin-transform-exponentiation-operator': registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-for-of': registry.npmmirror.com/@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.0
-      '@babel/plugin-transform-function-name': registry.npmmirror.com/@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.0
-      '@babel/plugin-transform-literals': registry.npmmirror.com/@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.0
-      '@babel/plugin-transform-member-expression-literals': registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-modules-amd': registry.npmmirror.com/@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.0
-      '@babel/plugin-transform-modules-commonjs': registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.0
-      '@babel/plugin-transform-modules-systemjs': registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.0
-      '@babel/plugin-transform-modules-umd': registry.npmmirror.com/@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-named-capturing-groups-regex': registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.0
-      '@babel/plugin-transform-new-target': registry.npmmirror.com/@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-object-super': registry.npmmirror.com/@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-parameters': registry.npmmirror.com/@babel/plugin-transform-parameters/7.20.7_@babel+core@7.21.0
-      '@babel/plugin-transform-property-literals': registry.npmmirror.com/@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-regenerator': registry.npmmirror.com/@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.0
-      '@babel/plugin-transform-reserved-words': registry.npmmirror.com/@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-shorthand-properties': registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-spread': registry.npmmirror.com/@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.0
-      '@babel/plugin-transform-sticky-regex': registry.npmmirror.com/@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-template-literals': registry.npmmirror.com/@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.0
-      '@babel/plugin-transform-typeof-symbol': registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.0
-      '@babel/plugin-transform-unicode-escapes': registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.0
-      '@babel/plugin-transform-unicode-regex': registry.npmmirror.com/@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.0
-      '@babel/preset-modules': registry.npmmirror.com/@babel/preset-modules/0.1.5_@babel+core@7.21.0
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-      babel-plugin-polyfill-corejs2: registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.0
-      babel-plugin-polyfill-corejs3: registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.0
-      babel-plugin-polyfill-regenerator: registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.0
-      core-js-compat: registry.npmmirror.com/core-js-compat/3.29.0
-      semver: registry.npmmirror.com/semver/6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/preset-modules/0.1.5_@babel+core@7.21.0:
-    resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz}
-    id: registry.npmmirror.com/@babel/preset-modules/0.1.5
-    name: '@babel/preset-modules'
-    version: 0.1.5
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@babel/plugin-proposal-unicode-property-regex': registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.0
-      '@babel/plugin-transform-dotall-regex': registry.npmmirror.com/@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.0
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-      esutils: registry.npmmirror.com/esutils/2.0.3
-    dev: true
-
-  registry.npmmirror.com/@babel/regjsgen/0.8.0:
-    resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz}
-    name: '@babel/regjsgen'
-    version: 0.8.0
-    dev: true
-
-  registry.npmmirror.com/@babel/runtime/7.21.0:
-    resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/runtime/-/runtime-7.21.0.tgz}
-    name: '@babel/runtime'
-    version: 7.21.0
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11
-
-  registry.npmmirror.com/@babel/standalone/7.21.2:
-    resolution: {integrity: sha512-ySP/TJcyqMJVg1M/lmnPVi6L+F+IJpQ4+0lqtf723LERbk1N8/0JgLgm346cRAzfHaoXkLq/M/mJBd2uo25RBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/standalone/-/standalone-7.21.2.tgz}
-    name: '@babel/standalone'
-    version: 7.21.2
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/@babel/template/7.20.7:
-    resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/template/-/template-7.20.7.tgz}
-    name: '@babel/template'
-    version: 7.20.7
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.21.2
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@babel/traverse/7.21.2:
-    resolution: {integrity: sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/traverse/-/traverse-7.21.2.tgz}
-    name: '@babel/traverse'
-    version: 7.21.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      '@babel/generator': registry.npmmirror.com/@babel/generator/7.21.1
-      '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9
-      '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.21.0
-      '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6
-      '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.21.2
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-      debug: registry.npmmirror.com/debug/4.3.4
-      globals: registry.npmmirror.com/globals/11.12.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@babel/types/7.21.2:
-    resolution: {integrity: sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.21.2.tgz}
-    name: '@babel/types'
-    version: 7.21.2
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser/7.19.4
-      '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
-      to-fast-properties: registry.npmmirror.com/to-fast-properties/2.0.0
-
-  registry.npmmirror.com/@bcoe/v8-coverage/0.2.3:
-    resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz}
-    name: '@bcoe/v8-coverage'
-    version: 0.2.3
-    dev: true
-
-  registry.npmmirror.com/@commitlint/cli/16.3.0:
-    resolution: {integrity: sha512-P+kvONlfsuTMnxSwWE1H+ZcPMY3STFaHb2kAacsqoIkNx66O0T7sTpBxpxkMrFPyhkJiLJnJWMhk4bbvYD3BMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/cli/-/cli-16.3.0.tgz}
-    name: '@commitlint/cli'
-    version: 16.3.0
-    engines: {node: '>=v12'}
-    hasBin: true
-    dependencies:
-      '@commitlint/format': registry.npmmirror.com/@commitlint/format/16.2.1
-      '@commitlint/lint': registry.npmmirror.com/@commitlint/lint/16.2.4
-      '@commitlint/load': registry.npmmirror.com/@commitlint/load/16.3.0
-      '@commitlint/read': registry.npmmirror.com/@commitlint/read/16.2.1
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/16.2.1
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      resolve-from: registry.npmmirror.com/resolve-from/5.0.0
-      resolve-global: registry.npmmirror.com/resolve-global/1.0.0
-      yargs: registry.npmmirror.com/yargs/17.7.1
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-    dev: true
-
-  registry.npmmirror.com/@commitlint/config-conventional/16.2.4:
-    resolution: {integrity: sha512-av2UQJa3CuE5P0dzxj/o/B9XVALqYzEViHrMXtDrW9iuflrqCStWBAioijppj9URyz6ONpohJKAtSdgAOE0gkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/config-conventional/-/config-conventional-16.2.4.tgz}
-    name: '@commitlint/config-conventional'
-    version: 16.2.4
-    engines: {node: '>=v12'}
-    dependencies:
-      conventional-changelog-conventionalcommits: registry.npmmirror.com/conventional-changelog-conventionalcommits/4.6.3
-    dev: true
-
-  registry.npmmirror.com/@commitlint/config-validator/16.2.1:
-    resolution: {integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/config-validator/-/config-validator-16.2.1.tgz}
-    name: '@commitlint/config-validator'
-    version: 16.2.1
-    engines: {node: '>=v12'}
-    dependencies:
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/16.2.1
-      ajv: registry.npmmirror.com/ajv/6.12.6
-    dev: true
-
-  registry.npmmirror.com/@commitlint/config-validator/17.4.4:
-    resolution: {integrity: sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/config-validator/-/config-validator-17.4.4.tgz}
-    name: '@commitlint/config-validator'
-    version: 17.4.4
-    engines: {node: '>=v14'}
-    dependencies:
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/17.4.4
-      ajv: registry.npmmirror.com/ajv/8.12.0
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/@commitlint/ensure/16.2.1:
-    resolution: {integrity: sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/ensure/-/ensure-16.2.1.tgz}
-    name: '@commitlint/ensure'
-    version: 16.2.1
-    engines: {node: '>=v12'}
-    dependencies:
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/16.2.1
-      lodash: registry.npmmirror.com/lodash/4.17.21
-    dev: true
-
-  registry.npmmirror.com/@commitlint/execute-rule/16.2.1:
-    resolution: {integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/execute-rule/-/execute-rule-16.2.1.tgz}
-    name: '@commitlint/execute-rule'
-    version: 16.2.1
-    engines: {node: '>=v12'}
-    dev: true
-
-  registry.npmmirror.com/@commitlint/execute-rule/17.4.0:
-    resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz}
-    name: '@commitlint/execute-rule'
-    version: 17.4.0
-    engines: {node: '>=v14'}
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/@commitlint/format/16.2.1:
-    resolution: {integrity: sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/format/-/format-16.2.1.tgz}
-    name: '@commitlint/format'
-    version: 16.2.1
-    engines: {node: '>=v12'}
-    dependencies:
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/16.2.1
-      chalk: registry.npmmirror.com/chalk/4.1.2
-    dev: true
-
-  registry.npmmirror.com/@commitlint/is-ignored/16.2.4:
-    resolution: {integrity: sha512-Lxdq9aOAYCOOOjKi58ulbwK/oBiiKz+7Sq0+/SpFIEFwhHkIVugvDvWjh2VRBXmRC/x5lNcjDcYEwS/uYUvlYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/is-ignored/-/is-ignored-16.2.4.tgz}
-    name: '@commitlint/is-ignored'
-    version: 16.2.4
-    engines: {node: '>=v12'}
-    dependencies:
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/16.2.1
-      semver: registry.npmmirror.com/semver/7.3.7
-    dev: true
-
-  registry.npmmirror.com/@commitlint/lint/16.2.4:
-    resolution: {integrity: sha512-AUDuwOxb2eGqsXbTMON3imUGkc1jRdtXrbbohiLSCSk3jFVXgJLTMaEcr39pR00N8nE9uZ+V2sYaiILByZVmxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/lint/-/lint-16.2.4.tgz}
-    name: '@commitlint/lint'
-    version: 16.2.4
-    engines: {node: '>=v12'}
-    dependencies:
-      '@commitlint/is-ignored': registry.npmmirror.com/@commitlint/is-ignored/16.2.4
-      '@commitlint/parse': registry.npmmirror.com/@commitlint/parse/16.2.1
-      '@commitlint/rules': registry.npmmirror.com/@commitlint/rules/16.2.4
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/16.2.1
-    dev: true
-
-  registry.npmmirror.com/@commitlint/load/16.3.0:
-    resolution: {integrity: sha512-3tykjV/iwbkv2FU9DG+NZ/JqmP0Nm3b7aDwgCNQhhKV5P74JAuByULkafnhn+zsFGypG1qMtI5u+BZoa9APm0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/load/-/load-16.3.0.tgz}
-    name: '@commitlint/load'
-    version: 16.3.0
-    engines: {node: '>=v12'}
-    dependencies:
-      '@commitlint/config-validator': registry.npmmirror.com/@commitlint/config-validator/16.2.1
-      '@commitlint/execute-rule': registry.npmmirror.com/@commitlint/execute-rule/16.2.1
-      '@commitlint/resolve-extends': registry.npmmirror.com/@commitlint/resolve-extends/16.2.1
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/16.2.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      cosmiconfig: registry.npmmirror.com/cosmiconfig/7.1.0
-      cosmiconfig-typescript-loader: registry.npmmirror.com/cosmiconfig-typescript-loader/2.0.2_cin3sed6ohfsopbmt6orxeb4o4
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      resolve-from: registry.npmmirror.com/resolve-from/5.0.0
-      typescript: registry.npmmirror.com/typescript/4.9.5
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-    dev: true
-
-  registry.npmmirror.com/@commitlint/message/16.2.1:
-    resolution: {integrity: sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/message/-/message-16.2.1.tgz}
-    name: '@commitlint/message'
-    version: 16.2.1
-    engines: {node: '>=v12'}
-    dev: true
-
-  registry.npmmirror.com/@commitlint/parse/16.2.1:
-    resolution: {integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/parse/-/parse-16.2.1.tgz}
-    name: '@commitlint/parse'
-    version: 16.2.1
-    engines: {node: '>=v12'}
-    dependencies:
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/16.2.1
-      conventional-changelog-angular: registry.npmmirror.com/conventional-changelog-angular/5.0.13
-      conventional-commits-parser: registry.npmmirror.com/conventional-commits-parser/3.2.4
-    dev: true
-
-  registry.npmmirror.com/@commitlint/read/16.2.1:
-    resolution: {integrity: sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/read/-/read-16.2.1.tgz}
-    name: '@commitlint/read'
-    version: 16.2.1
-    engines: {node: '>=v12'}
-    dependencies:
-      '@commitlint/top-level': registry.npmmirror.com/@commitlint/top-level/16.2.1
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/16.2.1
-      fs-extra: registry.npmmirror.com/fs-extra/10.1.0
-      git-raw-commits: registry.npmmirror.com/git-raw-commits/2.0.11
-    dev: true
-
-  registry.npmmirror.com/@commitlint/resolve-extends/16.2.1:
-    resolution: {integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/resolve-extends/-/resolve-extends-16.2.1.tgz}
-    name: '@commitlint/resolve-extends'
-    version: 16.2.1
-    engines: {node: '>=v12'}
-    dependencies:
-      '@commitlint/config-validator': registry.npmmirror.com/@commitlint/config-validator/16.2.1
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/16.2.1
-      import-fresh: registry.npmmirror.com/import-fresh/3.3.0
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      resolve-from: registry.npmmirror.com/resolve-from/5.0.0
-      resolve-global: registry.npmmirror.com/resolve-global/1.0.0
-    dev: true
-
-  registry.npmmirror.com/@commitlint/resolve-extends/17.4.4:
-    resolution: {integrity: sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz}
-    name: '@commitlint/resolve-extends'
-    version: 17.4.4
-    engines: {node: '>=v14'}
-    dependencies:
-      '@commitlint/config-validator': registry.npmmirror.com/@commitlint/config-validator/17.4.4
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/17.4.4
-      import-fresh: registry.npmmirror.com/import-fresh/3.3.0
-      lodash.mergewith: registry.npmmirror.com/lodash.mergewith/4.6.2
-      resolve-from: registry.npmmirror.com/resolve-from/5.0.0
-      resolve-global: registry.npmmirror.com/resolve-global/1.0.0
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/@commitlint/rules/16.2.4:
-    resolution: {integrity: sha512-rK5rNBIN2ZQNQK+I6trRPK3dWa0MtaTN4xnwOma1qxa4d5wQMQJtScwTZjTJeallFxhOgbNOgr48AMHkdounVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/rules/-/rules-16.2.4.tgz}
-    name: '@commitlint/rules'
-    version: 16.2.4
-    engines: {node: '>=v12'}
-    dependencies:
-      '@commitlint/ensure': registry.npmmirror.com/@commitlint/ensure/16.2.1
-      '@commitlint/message': registry.npmmirror.com/@commitlint/message/16.2.1
-      '@commitlint/to-lines': registry.npmmirror.com/@commitlint/to-lines/16.2.1
-      '@commitlint/types': registry.npmmirror.com/@commitlint/types/16.2.1
-      execa: registry.npmmirror.com/execa/5.1.1
-    dev: true
-
-  registry.npmmirror.com/@commitlint/to-lines/16.2.1:
-    resolution: {integrity: sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/to-lines/-/to-lines-16.2.1.tgz}
-    name: '@commitlint/to-lines'
-    version: 16.2.1
-    engines: {node: '>=v12'}
-    dev: true
-
-  registry.npmmirror.com/@commitlint/top-level/16.2.1:
-    resolution: {integrity: sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/top-level/-/top-level-16.2.1.tgz}
-    name: '@commitlint/top-level'
-    version: 16.2.1
-    engines: {node: '>=v12'}
-    dependencies:
-      find-up: registry.npmmirror.com/find-up/5.0.0
-    dev: true
-
-  registry.npmmirror.com/@commitlint/types/16.2.1:
-    resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/types/-/types-16.2.1.tgz}
-    name: '@commitlint/types'
-    version: 16.2.1
-    engines: {node: '>=v12'}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/4.1.2
-    dev: true
-
-  registry.npmmirror.com/@commitlint/types/17.4.4:
-    resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@commitlint/types/-/types-17.4.4.tgz}
-    name: '@commitlint/types'
-    version: 17.4.4
-    engines: {node: '>=v14'}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/4.1.2
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/@cspotcode/source-map-support/0.8.1:
-    resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz}
-    name: '@cspotcode/source-map-support'
-    version: 0.8.1
-    engines: {node: '>=12'}
-    dependencies:
-      '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.9
-    dev: true
-
-  registry.npmmirror.com/@csstools/selector-specificity/2.1.1_wajs5nedgkikc5pcuwett7legi:
-    resolution: {integrity: sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz}
-    id: registry.npmmirror.com/@csstools/selector-specificity/2.1.1
-    name: '@csstools/selector-specificity'
-    version: 2.1.1
-    engines: {node: ^14 || ^16 || >=18}
-    peerDependencies:
-      postcss: ^8.4
-      postcss-selector-parser: ^6.0.10
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/8.4.21
-      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.11
-    dev: true
-
-  registry.npmmirror.com/@ctrl/tinycolor/3.6.0:
-    resolution: {integrity: sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz}
-    name: '@ctrl/tinycolor'
-    version: 3.6.0
-    engines: {node: '>=10'}
-    dev: false
-
-  registry.npmmirror.com/@eslint/eslintrc/2.0.0:
-    resolution: {integrity: sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.0.0.tgz}
-    name: '@eslint/eslintrc'
-    version: 2.0.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    dependencies:
-      ajv: registry.npmmirror.com/ajv/6.12.6
-      debug: registry.npmmirror.com/debug/4.3.4
-      espree: registry.npmmirror.com/espree/9.4.1
-      globals: registry.npmmirror.com/globals/13.20.0
-      ignore: registry.npmmirror.com/ignore/5.2.4
-      import-fresh: registry.npmmirror.com/import-fresh/3.3.0
-      js-yaml: registry.npmmirror.com/js-yaml/4.1.0
-      minimatch: registry.npmmirror.com/minimatch/3.1.2
-      strip-json-comments: registry.npmmirror.com/strip-json-comments/3.1.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@eslint/js/8.35.0:
-    resolution: {integrity: sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@eslint/js/-/js-8.35.0.tgz}
-    name: '@eslint/js'
-    version: 8.35.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    dev: true
-
-  registry.npmmirror.com/@humanwhocodes/config-array/0.11.8:
-    resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz}
-    name: '@humanwhocodes/config-array'
-    version: 0.11.8
-    engines: {node: '>=10.10.0'}
-    dependencies:
-      '@humanwhocodes/object-schema': registry.npmmirror.com/@humanwhocodes/object-schema/1.2.1
-      debug: registry.npmmirror.com/debug/4.3.4
-      minimatch: registry.npmmirror.com/minimatch/3.1.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@humanwhocodes/module-importer/1.0.1:
-    resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz}
-    name: '@humanwhocodes/module-importer'
-    version: 1.0.1
-    engines: {node: '>=12.22'}
-    dev: true
-
-  registry.npmmirror.com/@humanwhocodes/object-schema/1.2.1:
-    resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz}
-    name: '@humanwhocodes/object-schema'
-    version: 1.2.1
-    dev: true
-
-  registry.npmmirror.com/@hutson/parse-repository-url/3.0.2:
-    resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz}
-    name: '@hutson/parse-repository-url'
-    version: 3.0.2
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/@iconify/iconify/2.1.2:
-    resolution: {integrity: sha512-QcUzFeEWkE/mW+BVtEGmcWATClcCOIJFiYUD/PiCWuTcdEA297o8D4oN6Ra44WrNOHu1wqNW4J0ioaDIiqaFOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@iconify/iconify/-/iconify-2.1.2.tgz}
-    name: '@iconify/iconify'
-    version: 2.1.2
-    dependencies:
-      cross-fetch: registry.npmmirror.com/cross-fetch/3.1.5
-    transitivePeerDependencies:
-      - encoding
-    dev: true
-
-  registry.npmmirror.com/@iconify/iconify/2.2.1:
-    resolution: {integrity: sha512-WJzw+3iicrF/tbjbxxRinSgy5FHdJoz/egTqwi3xCDkNRJPq482RX1iyaWrjNuY2vMNSPkQMuqHvZDXgA+WnwQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@iconify/iconify/-/iconify-2.2.1.tgz}
-    name: '@iconify/iconify'
-    version: 2.2.1
-
-  registry.npmmirror.com/@iconify/json/2.2.30:
-    resolution: {integrity: sha512-F+eeFDEe+5iZ6wn/GrpQhycWN5XeULA17oPZdl8t+BuOwrq0rRWanB0sruGRir+SScsUuKR2TJyWTaQwmqtnvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@iconify/json/-/json-2.2.30.tgz}
-    name: '@iconify/json'
-    version: 2.2.30
-    dependencies:
-      '@iconify/types': registry.npmmirror.com/@iconify/types/2.0.0
-      pathe: registry.npmmirror.com/pathe/1.1.0
-    dev: true
-
-  registry.npmmirror.com/@iconify/types/2.0.0:
-    resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@iconify/types/-/types-2.0.0.tgz}
-    name: '@iconify/types'
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/@intlify/core-base/9.2.2:
-    resolution: {integrity: sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.2.2.tgz}
-    name: '@intlify/core-base'
-    version: 9.2.2
-    engines: {node: '>= 14'}
-    dependencies:
-      '@intlify/devtools-if': registry.npmmirror.com/@intlify/devtools-if/9.2.2
-      '@intlify/message-compiler': registry.npmmirror.com/@intlify/message-compiler/9.2.2
-      '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.2.2
-      '@intlify/vue-devtools': registry.npmmirror.com/@intlify/vue-devtools/9.2.2
-    dev: false
-
-  registry.npmmirror.com/@intlify/devtools-if/9.2.2:
-    resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.2.2.tgz}
-    name: '@intlify/devtools-if'
-    version: 9.2.2
-    engines: {node: '>= 14'}
-    dependencies:
-      '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.2.2
-    dev: false
-
-  registry.npmmirror.com/@intlify/message-compiler/9.2.2:
-    resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.2.2.tgz}
-    name: '@intlify/message-compiler'
-    version: 9.2.2
-    engines: {node: '>= 14'}
-    dependencies:
-      '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.2.2
-      source-map: 0.6.1
-    dev: false
-
-  registry.npmmirror.com/@intlify/shared/9.2.2:
-    resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/shared/-/shared-9.2.2.tgz}
-    name: '@intlify/shared'
-    version: 9.2.2
-    engines: {node: '>= 14'}
-    dev: false
-
-  registry.npmmirror.com/@intlify/vue-devtools/9.2.2:
-    resolution: {integrity: sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz}
-    name: '@intlify/vue-devtools'
-    version: 9.2.2
-    engines: {node: '>= 14'}
-    dependencies:
-      '@intlify/core-base': registry.npmmirror.com/@intlify/core-base/9.2.2
-      '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.2.2
-    dev: false
-
-  registry.npmmirror.com/@istanbuljs/load-nyc-config/1.1.0:
-    resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz}
-    name: '@istanbuljs/load-nyc-config'
-    version: 1.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      camelcase: registry.npmmirror.com/camelcase/5.3.1
-      find-up: registry.npmmirror.com/find-up/4.1.0
-      get-package-type: registry.npmmirror.com/get-package-type/0.1.0
-      js-yaml: registry.npmmirror.com/js-yaml/3.14.1
-      resolve-from: registry.npmmirror.com/resolve-from/5.0.0
-    dev: true
-
-  registry.npmmirror.com/@istanbuljs/schema/0.1.3:
-    resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.3.tgz}
-    name: '@istanbuljs/schema'
-    version: 0.1.3
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/@jeecg/online/3.4.4-RC:
-    resolution: {integrity: sha512-EjibCo++GszsWuLn3+kqaxt12Zim7f0XWSiHzypef4aAqBKYDnG30Z5K3j5W1g4g22fjVUkrb1rQ8rSLTlPdBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jeecg/online/-/online-3.4.4-RC.tgz}
-    name: '@jeecg/online'
-    version: 3.4.4-RC
-    dev: false
-
-  registry.npmmirror.com/@jest/console/27.5.1:
-    resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/console/-/console-27.5.1.tgz}
-    name: '@jest/console'
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      jest-message-util: registry.npmmirror.com/jest-message-util/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      slash: registry.npmmirror.com/slash/3.0.0
-    dev: true
-
-  registry.npmmirror.com/@jest/core/27.5.1_ts-node@10.9.1:
-    resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/core/-/core-27.5.1.tgz}
-    id: registry.npmmirror.com/@jest/core/27.5.1
-    name: '@jest/core'
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    peerDependencies:
-      node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
-    peerDependenciesMeta:
-      node-notifier:
-        optional: true
-    dependencies:
-      '@jest/console': registry.npmmirror.com/@jest/console/27.5.1
-      '@jest/reporters': registry.npmmirror.com/@jest/reporters/27.5.1
-      '@jest/test-result': registry.npmmirror.com/@jest/test-result/27.5.1
-      '@jest/transform': registry.npmmirror.com/@jest/transform/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      ansi-escapes: registry.npmmirror.com/ansi-escapes/4.3.2
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      emittery: registry.npmmirror.com/emittery/0.8.1
-      exit: registry.npmmirror.com/exit/0.1.2
-      graceful-fs: 4.2.10
-      jest-changed-files: registry.npmmirror.com/jest-changed-files/27.5.1
-      jest-config: registry.npmmirror.com/jest-config/27.5.1_ts-node@10.9.1
-      jest-haste-map: registry.npmmirror.com/jest-haste-map/27.5.1
-      jest-message-util: registry.npmmirror.com/jest-message-util/27.5.1
-      jest-regex-util: registry.npmmirror.com/jest-regex-util/27.5.1
-      jest-resolve: registry.npmmirror.com/jest-resolve/27.5.1
-      jest-resolve-dependencies: registry.npmmirror.com/jest-resolve-dependencies/27.5.1
-      jest-runner: registry.npmmirror.com/jest-runner/27.5.1
-      jest-runtime: registry.npmmirror.com/jest-runtime/27.5.1
-      jest-snapshot: registry.npmmirror.com/jest-snapshot/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      jest-validate: registry.npmmirror.com/jest-validate/27.5.1
-      jest-watcher: registry.npmmirror.com/jest-watcher/27.5.1
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-      rimraf: registry.npmmirror.com/rimraf/3.0.2
-      slash: registry.npmmirror.com/slash/3.0.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-    transitivePeerDependencies:
-      - bufferutil
-      - canvas
-      - supports-color
-      - ts-node
-      - utf-8-validate
-    dev: true
-
-  registry.npmmirror.com/@jest/environment/27.5.1:
-    resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/environment/-/environment-27.5.1.tgz}
-    name: '@jest/environment'
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/fake-timers': registry.npmmirror.com/@jest/fake-timers/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      jest-mock: registry.npmmirror.com/jest-mock/27.5.1
-    dev: true
-
-  registry.npmmirror.com/@jest/fake-timers/27.5.1:
-    resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz}
-    name: '@jest/fake-timers'
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@sinonjs/fake-timers': registry.npmmirror.com/@sinonjs/fake-timers/8.1.0
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      jest-message-util: registry.npmmirror.com/jest-message-util/27.5.1
-      jest-mock: registry.npmmirror.com/jest-mock/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-    dev: true
-
-  registry.npmmirror.com/@jest/globals/27.5.1:
-    resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/globals/-/globals-27.5.1.tgz}
-    name: '@jest/globals'
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/environment': registry.npmmirror.com/@jest/environment/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      expect: registry.npmmirror.com/expect/27.5.1
-    dev: true
-
-  registry.npmmirror.com/@jest/reporters/27.5.1:
-    resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/reporters/-/reporters-27.5.1.tgz}
-    name: '@jest/reporters'
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    peerDependencies:
-      node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
-    peerDependenciesMeta:
-      node-notifier:
-        optional: true
-    dependencies:
-      '@bcoe/v8-coverage': registry.npmmirror.com/@bcoe/v8-coverage/0.2.3
-      '@jest/console': registry.npmmirror.com/@jest/console/27.5.1
-      '@jest/test-result': registry.npmmirror.com/@jest/test-result/27.5.1
-      '@jest/transform': registry.npmmirror.com/@jest/transform/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      collect-v8-coverage: registry.npmmirror.com/collect-v8-coverage/1.0.1
-      exit: registry.npmmirror.com/exit/0.1.2
-      glob: registry.npmmirror.com/glob/7.2.3
-      graceful-fs: 4.2.10
-      istanbul-lib-coverage: registry.npmmirror.com/istanbul-lib-coverage/3.2.0
-      istanbul-lib-instrument: registry.npmmirror.com/istanbul-lib-instrument/5.2.1
-      istanbul-lib-report: registry.npmmirror.com/istanbul-lib-report/3.0.0
-      istanbul-lib-source-maps: registry.npmmirror.com/istanbul-lib-source-maps/4.0.1
-      istanbul-reports: registry.npmmirror.com/istanbul-reports/3.1.5
-      jest-haste-map: registry.npmmirror.com/jest-haste-map/27.5.1
-      jest-resolve: registry.npmmirror.com/jest-resolve/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      jest-worker: registry.npmmirror.com/jest-worker/27.5.1
-      slash: registry.npmmirror.com/slash/3.0.0
-      source-map: 0.6.1
-      string-length: registry.npmmirror.com/string-length/4.0.2
-      terminal-link: registry.npmmirror.com/terminal-link/2.1.1
-      v8-to-istanbul: registry.npmmirror.com/v8-to-istanbul/8.1.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@jest/source-map/27.5.1:
-    resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/source-map/-/source-map-27.5.1.tgz}
-    name: '@jest/source-map'
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      callsites: registry.npmmirror.com/callsites/3.1.0
-      graceful-fs: 4.2.10
-      source-map: 0.6.1
-    dev: true
-
-  registry.npmmirror.com/@jest/test-result/27.5.1:
-    resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/test-result/-/test-result-27.5.1.tgz}
-    name: '@jest/test-result'
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/console': registry.npmmirror.com/@jest/console/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/istanbul-lib-coverage': registry.npmmirror.com/@types/istanbul-lib-coverage/2.0.4
-      collect-v8-coverage: registry.npmmirror.com/collect-v8-coverage/1.0.1
-    dev: true
-
-  registry.npmmirror.com/@jest/test-sequencer/27.5.1:
-    resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz}
-    name: '@jest/test-sequencer'
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/test-result': registry.npmmirror.com/@jest/test-result/27.5.1
-      graceful-fs: 4.2.10
-      jest-haste-map: registry.npmmirror.com/jest-haste-map/27.5.1
-      jest-runtime: registry.npmmirror.com/jest-runtime/27.5.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@jest/transform/27.5.1:
-    resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/transform/-/transform-27.5.1.tgz}
-    name: '@jest/transform'
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      babel-plugin-istanbul: registry.npmmirror.com/babel-plugin-istanbul/6.1.1
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      convert-source-map: registry.npmmirror.com/convert-source-map/1.9.0
-      fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0
-      graceful-fs: 4.2.10
-      jest-haste-map: registry.npmmirror.com/jest-haste-map/27.5.1
-      jest-regex-util: registry.npmmirror.com/jest-regex-util/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-      pirates: registry.npmmirror.com/pirates/4.0.5
-      slash: registry.npmmirror.com/slash/3.0.0
-      source-map: 0.6.1
-      write-file-atomic: registry.npmmirror.com/write-file-atomic/3.0.3
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@jest/types/27.5.1:
-    resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jest/types/-/types-27.5.1.tgz}
-    name: '@jest/types'
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@types/istanbul-lib-coverage': registry.npmmirror.com/@types/istanbul-lib-coverage/2.0.4
-      '@types/istanbul-reports': registry.npmmirror.com/@types/istanbul-reports/3.0.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      '@types/yargs': registry.npmmirror.com/@types/yargs/16.0.5
-      chalk: registry.npmmirror.com/chalk/4.1.2
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/gen-mapping/0.1.1:
-    resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz}
-    name: '@jridgewell/gen-mapping'
-    version: 0.1.1
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.2
-      '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/gen-mapping/0.3.2:
-    resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz}
-    name: '@jridgewell/gen-mapping'
-    version: 0.3.2
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.2
-      '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14
-      '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0:
-    resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz}
-    name: '@jridgewell/resolve-uri'
-    version: 3.1.0
-    engines: {node: '>=6.0.0'}
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/set-array/1.1.2:
-    resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz}
-    name: '@jridgewell/set-array'
-    version: 1.1.2
-    engines: {node: '>=6.0.0'}
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/source-map/0.3.2:
-    resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.2.tgz}
-    name: '@jridgewell/source-map'
-    version: 0.3.2
-    dependencies:
-      '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.3.2
-      '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14:
-    resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz}
-    name: '@jridgewell/sourcemap-codec'
-    version: 1.4.14
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17:
-    resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz}
-    name: '@jridgewell/trace-mapping'
-    version: 0.3.17
-    dependencies:
-      '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0
-      '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14
-    dev: true
-
-  registry.npmmirror.com/@jridgewell/trace-mapping/0.3.9:
-    resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz}
-    name: '@jridgewell/trace-mapping'
-    version: 0.3.9
-    dependencies:
-      '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0
-      '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14
-    dev: true
-
-  registry.npmmirror.com/@logicflow/core/1.1.31:
-    resolution: {integrity: sha512-TQYJoxhqSzWBvw/NkI5hNZ8WkfS7JDLrvp56EU/OYo6Nbusj2n8/ya8XaMM50+GXqnp6+38t3RAGCC9Dk9cmhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@logicflow/core/-/core-1.1.31.tgz}
-    name: '@logicflow/core'
-    version: 1.1.31
-    dependencies:
-      '@types/mousetrap': registry.npmmirror.com/@types/mousetrap/1.6.11
-      mousetrap: registry.npmmirror.com/mousetrap/1.6.5
-      preact: registry.npmmirror.com/preact/10.13.0
-    dev: false
-
-  registry.npmmirror.com/@logicflow/extension/1.1.31:
-    resolution: {integrity: sha512-MUDdP7Anf3OmIEVmJTlIH8e5h2yrdqlwWYCDjDoh9R1IOfzR4wCvEiH4HgOkadTsGtfaihFRyFnPIYT1cu7oUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@logicflow/extension/-/extension-1.1.31.tgz}
-    name: '@logicflow/extension'
-    version: 1.1.31
-    dependencies:
-      '@logicflow/core': registry.npmmirror.com/@logicflow/core/1.1.31
-      ids: registry.npmmirror.com/ids/1.0.0
-      preact: registry.npmmirror.com/preact/10.13.0
-    dev: false
-
-  registry.npmmirror.com/@nodelib/fs.scandir/2.1.5:
-    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz}
-    name: '@nodelib/fs.scandir'
-    version: 2.1.5
-    engines: {node: '>= 8'}
-    dependencies:
-      '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5
-      run-parallel: registry.npmmirror.com/run-parallel/1.2.0
-    dev: true
-
-  registry.npmmirror.com/@nodelib/fs.stat/2.0.5:
-    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz}
-    name: '@nodelib/fs.stat'
-    version: 2.0.5
-    engines: {node: '>= 8'}
-    dev: true
-
-  registry.npmmirror.com/@nodelib/fs.walk/1.2.8:
-    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz}
-    name: '@nodelib/fs.walk'
-    version: 1.2.8
-    engines: {node: '>= 8'}
-    dependencies:
-      '@nodelib/fs.scandir': registry.npmmirror.com/@nodelib/fs.scandir/2.1.5
-      fastq: registry.npmmirror.com/fastq/1.15.0
-    dev: true
-
-  registry.npmmirror.com/@octokit/auth-token/3.0.3:
-    resolution: {integrity: sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/auth-token/-/auth-token-3.0.3.tgz}
-    name: '@octokit/auth-token'
-    version: 3.0.3
-    engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/types': registry.npmmirror.com/@octokit/types/9.0.0
-    dev: true
-
-  registry.npmmirror.com/@octokit/core/4.2.0:
-    resolution: {integrity: sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/core/-/core-4.2.0.tgz}
-    name: '@octokit/core'
-    version: 4.2.0
-    engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/auth-token': registry.npmmirror.com/@octokit/auth-token/3.0.3
-      '@octokit/graphql': registry.npmmirror.com/@octokit/graphql/5.0.5
-      '@octokit/request': registry.npmmirror.com/@octokit/request/6.2.3
-      '@octokit/request-error': registry.npmmirror.com/@octokit/request-error/3.0.3
-      '@octokit/types': registry.npmmirror.com/@octokit/types/9.0.0
-      before-after-hook: registry.npmmirror.com/before-after-hook/2.2.3
-      universal-user-agent: registry.npmmirror.com/universal-user-agent/6.0.0
-    transitivePeerDependencies:
-      - encoding
-    dev: true
-
-  registry.npmmirror.com/@octokit/endpoint/7.0.5:
-    resolution: {integrity: sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/endpoint/-/endpoint-7.0.5.tgz}
-    name: '@octokit/endpoint'
-    version: 7.0.5
-    engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/types': registry.npmmirror.com/@octokit/types/9.0.0
-      is-plain-object: registry.npmmirror.com/is-plain-object/5.0.0
-      universal-user-agent: registry.npmmirror.com/universal-user-agent/6.0.0
-    dev: true
-
-  registry.npmmirror.com/@octokit/graphql/5.0.5:
-    resolution: {integrity: sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/graphql/-/graphql-5.0.5.tgz}
-    name: '@octokit/graphql'
-    version: 5.0.5
-    engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/request': registry.npmmirror.com/@octokit/request/6.2.3
-      '@octokit/types': registry.npmmirror.com/@octokit/types/9.0.0
-      universal-user-agent: registry.npmmirror.com/universal-user-agent/6.0.0
-    transitivePeerDependencies:
-      - encoding
-    dev: true
-
-  registry.npmmirror.com/@octokit/openapi-types/16.0.0:
-    resolution: {integrity: sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/openapi-types/-/openapi-types-16.0.0.tgz}
-    name: '@octokit/openapi-types'
-    version: 16.0.0
-    dev: true
-
-  registry.npmmirror.com/@octokit/plugin-paginate-rest/6.0.0_@octokit+core@4.2.0:
-    resolution: {integrity: sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz}
-    id: registry.npmmirror.com/@octokit/plugin-paginate-rest/6.0.0
-    name: '@octokit/plugin-paginate-rest'
-    version: 6.0.0
-    engines: {node: '>= 14'}
-    peerDependencies:
-      '@octokit/core': '>=4'
-    dependencies:
-      '@octokit/core': registry.npmmirror.com/@octokit/core/4.2.0
-      '@octokit/types': registry.npmmirror.com/@octokit/types/9.0.0
-    dev: true
-
-  registry.npmmirror.com/@octokit/plugin-request-log/1.0.4_@octokit+core@4.2.0:
-    resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz}
-    id: registry.npmmirror.com/@octokit/plugin-request-log/1.0.4
-    name: '@octokit/plugin-request-log'
-    version: 1.0.4
-    peerDependencies:
-      '@octokit/core': '>=3'
-    dependencies:
-      '@octokit/core': registry.npmmirror.com/@octokit/core/4.2.0
-    dev: true
-
-  registry.npmmirror.com/@octokit/plugin-rest-endpoint-methods/7.0.1_@octokit+core@4.2.0:
-    resolution: {integrity: sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz}
-    id: registry.npmmirror.com/@octokit/plugin-rest-endpoint-methods/7.0.1
-    name: '@octokit/plugin-rest-endpoint-methods'
-    version: 7.0.1
-    engines: {node: '>= 14'}
-    peerDependencies:
-      '@octokit/core': '>=3'
-    dependencies:
-      '@octokit/core': registry.npmmirror.com/@octokit/core/4.2.0
-      '@octokit/types': registry.npmmirror.com/@octokit/types/9.0.0
-      deprecation: registry.npmmirror.com/deprecation/2.3.1
-    dev: true
-
-  registry.npmmirror.com/@octokit/request-error/3.0.3:
-    resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/request-error/-/request-error-3.0.3.tgz}
-    name: '@octokit/request-error'
-    version: 3.0.3
-    engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/types': registry.npmmirror.com/@octokit/types/9.0.0
-      deprecation: registry.npmmirror.com/deprecation/2.3.1
-      once: registry.npmmirror.com/once/1.4.0
-    dev: true
-
-  registry.npmmirror.com/@octokit/request/6.2.3:
-    resolution: {integrity: sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/request/-/request-6.2.3.tgz}
-    name: '@octokit/request'
-    version: 6.2.3
-    engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/endpoint': registry.npmmirror.com/@octokit/endpoint/7.0.5
-      '@octokit/request-error': registry.npmmirror.com/@octokit/request-error/3.0.3
-      '@octokit/types': registry.npmmirror.com/@octokit/types/9.0.0
-      is-plain-object: registry.npmmirror.com/is-plain-object/5.0.0
-      node-fetch: registry.npmmirror.com/node-fetch/2.6.9
-      universal-user-agent: registry.npmmirror.com/universal-user-agent/6.0.0
-    transitivePeerDependencies:
-      - encoding
-    dev: true
-
-  registry.npmmirror.com/@octokit/rest/19.0.7:
-    resolution: {integrity: sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/rest/-/rest-19.0.7.tgz}
-    name: '@octokit/rest'
-    version: 19.0.7
-    engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/core': registry.npmmirror.com/@octokit/core/4.2.0
-      '@octokit/plugin-paginate-rest': registry.npmmirror.com/@octokit/plugin-paginate-rest/6.0.0_@octokit+core@4.2.0
-      '@octokit/plugin-request-log': registry.npmmirror.com/@octokit/plugin-request-log/1.0.4_@octokit+core@4.2.0
-      '@octokit/plugin-rest-endpoint-methods': registry.npmmirror.com/@octokit/plugin-rest-endpoint-methods/7.0.1_@octokit+core@4.2.0
-    transitivePeerDependencies:
-      - encoding
-    dev: true
-
-  registry.npmmirror.com/@octokit/types/9.0.0:
-    resolution: {integrity: sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@octokit/types/-/types-9.0.0.tgz}
-    name: '@octokit/types'
-    version: 9.0.0
-    dependencies:
-      '@octokit/openapi-types': registry.npmmirror.com/@octokit/openapi-types/16.0.0
-    dev: true
-
-  registry.npmmirror.com/@purge-icons/core/0.8.0:
-    resolution: {integrity: sha512-8L6hP1U9XQO5B7kvquVJ5N7jzFvO0LZLXhBCjUQzzJzi42i6MAUanVKROApqbBuh21o9tmPwvNUg0xPe/uftRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@purge-icons/core/-/core-0.8.0.tgz}
-    name: '@purge-icons/core'
-    version: 0.8.0
-    dependencies:
-      '@iconify/iconify': registry.npmmirror.com/@iconify/iconify/2.1.2
-      axios: registry.npmmirror.com/axios/0.26.1_debug@4.3.4
-      debug: registry.npmmirror.com/debug/4.3.4
-      fast-glob: registry.npmmirror.com/fast-glob/3.2.12
-      fs-extra: registry.npmmirror.com/fs-extra/10.1.0
-    transitivePeerDependencies:
-      - encoding
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@purge-icons/generated/0.8.1:
-    resolution: {integrity: sha512-rIExGA33EGKEToqtc8WfpboaR7or1XRp+KV1Y5v/P0Rq7G5Me95DmP3ow/MpG7ql+XZ9xPzyS2naGRx5358+6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@purge-icons/generated/-/generated-0.8.1.tgz}
-    name: '@purge-icons/generated'
-    version: 0.8.1
-    dependencies:
-      '@iconify/iconify': registry.npmmirror.com/@iconify/iconify/2.2.1
-    dev: true
-
-  registry.npmmirror.com/@rollup/plugin-babel/5.3.1_4tnfxcmsyr7y5qv3uwkivwqysm:
-    resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz}
-    id: registry.npmmirror.com/@rollup/plugin-babel/5.3.1
-    name: '@rollup/plugin-babel'
-    version: 5.3.1
-    engines: {node: '>= 10.0.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-      '@types/babel__core': ^7.1.9
-      rollup: ^1.20.0||^2.0.0
-    peerDependenciesMeta:
-      '@types/babel__core':
-        optional: true
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6
-      '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/3.1.0_rollup@2.79.1
-      rollup: registry.npmmirror.com/rollup/2.79.1
-    dev: true
-
-  registry.npmmirror.com/@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1:
-    resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz}
-    id: registry.npmmirror.com/@rollup/plugin-node-resolve/11.2.1
-    name: '@rollup/plugin-node-resolve'
-    version: 11.2.1
-    engines: {node: '>= 10.0.0'}
-    peerDependencies:
-      rollup: ^1.20.0||^2.0.0
-    dependencies:
-      '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/3.1.0_rollup@2.79.1
-      '@types/resolve': registry.npmmirror.com/@types/resolve/1.17.1
-      builtin-modules: registry.npmmirror.com/builtin-modules/3.3.0
-      deepmerge: registry.npmmirror.com/deepmerge/4.3.0
-      is-module: registry.npmmirror.com/is-module/1.0.0
-      resolve: registry.npmmirror.com/resolve/1.22.1
-      rollup: registry.npmmirror.com/rollup/2.79.1
-    dev: true
-
-  registry.npmmirror.com/@rollup/plugin-node-resolve/13.3.0_rollup@2.79.1:
-    resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz}
-    id: registry.npmmirror.com/@rollup/plugin-node-resolve/13.3.0
-    name: '@rollup/plugin-node-resolve'
-    version: 13.3.0
-    engines: {node: '>= 10.0.0'}
-    peerDependencies:
-      rollup: ^2.42.0
-    dependencies:
-      '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/3.1.0_rollup@2.79.1
-      '@types/resolve': registry.npmmirror.com/@types/resolve/1.17.1
-      deepmerge: registry.npmmirror.com/deepmerge/4.3.0
-      is-builtin-module: registry.npmmirror.com/is-builtin-module/3.2.1
-      is-module: registry.npmmirror.com/is-module/1.0.0
-      resolve: registry.npmmirror.com/resolve/1.22.1
-      rollup: registry.npmmirror.com/rollup/2.79.1
-    dev: true
-
-  registry.npmmirror.com/@rollup/plugin-replace/2.4.2_rollup@2.79.1:
-    resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz}
-    id: registry.npmmirror.com/@rollup/plugin-replace/2.4.2
-    name: '@rollup/plugin-replace'
-    version: 2.4.2
-    peerDependencies:
-      rollup: ^1.20.0 || ^2.0.0
-    dependencies:
-      '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/3.1.0_rollup@2.79.1
-      magic-string: registry.npmmirror.com/magic-string/0.25.9
-      rollup: registry.npmmirror.com/rollup/2.79.1
-    dev: true
-
-  registry.npmmirror.com/@rollup/pluginutils/3.1.0_rollup@2.79.1:
-    resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz}
-    id: registry.npmmirror.com/@rollup/pluginutils/3.1.0
-    name: '@rollup/pluginutils'
-    version: 3.1.0
-    engines: {node: '>= 8.0.0'}
-    peerDependencies:
-      rollup: ^1.20.0||^2.0.0
-    dependencies:
-      '@types/estree': registry.npmmirror.com/@types/estree/0.0.39
-      estree-walker: registry.npmmirror.com/estree-walker/1.0.1
-      picomatch: registry.npmmirror.com/picomatch/2.3.1
-      rollup: registry.npmmirror.com/rollup/2.79.1
-    dev: true
-
-  registry.npmmirror.com/@rollup/pluginutils/4.2.1:
-    resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz}
-    name: '@rollup/pluginutils'
-    version: 4.2.1
-    engines: {node: '>= 8.0.0'}
-    dependencies:
-      estree-walker: registry.npmmirror.com/estree-walker/2.0.2
-      picomatch: registry.npmmirror.com/picomatch/2.3.1
-    dev: true
-
-  registry.npmmirror.com/@rys-fe/vite-plugin-theme/0.8.6_vite@3.2.5:
-    resolution: {integrity: sha512-9j6yMhNRCDxv4Wpimo0EDZf/KU5FgJtjMPVYBaFv4SPClLOEx5kkpcRuDrVBaB4IzM1qizRlxUK4jd9Klxyqig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rys-fe/vite-plugin-theme/-/vite-plugin-theme-0.8.6.tgz}
-    id: registry.npmmirror.com/@rys-fe/vite-plugin-theme/0.8.6
-    name: '@rys-fe/vite-plugin-theme'
-    version: 0.8.6
-    peerDependencies:
-      vite: '>=2.0.0-beta.49'
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/14.18.37
-      '@types/tinycolor2': registry.npmmirror.com/@types/tinycolor2/1.4.3
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      clean-css: registry.npmmirror.com/clean-css/5.3.2
-      debug: registry.npmmirror.com/debug/4.3.4
-      esbuild: registry.npmmirror.com/esbuild/0.11.23
-      esbuild-plugin-alias: registry.npmmirror.com/esbuild-plugin-alias/0.1.2
-      tinycolor2: registry.npmmirror.com/tinycolor2/1.6.0
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@simonwep/pickr/1.8.2:
-    resolution: {integrity: sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz}
-    name: '@simonwep/pickr'
-    version: 1.8.2
-    dependencies:
-      core-js: registry.npmmirror.com/core-js/3.29.0
-      nanopop: registry.npmmirror.com/nanopop/2.2.0
-    dev: false
-
-  registry.npmmirror.com/@sinonjs/commons/1.8.6:
-    resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@sinonjs/commons/-/commons-1.8.6.tgz}
-    name: '@sinonjs/commons'
-    version: 1.8.6
-    dependencies:
-      type-detect: registry.npmmirror.com/type-detect/4.0.8
-    dev: true
-
-  registry.npmmirror.com/@sinonjs/fake-timers/8.1.0:
-    resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz}
-    name: '@sinonjs/fake-timers'
-    version: 8.1.0
-    dependencies:
-      '@sinonjs/commons': registry.npmmirror.com/@sinonjs/commons/1.8.6
-    dev: true
-
-  registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/2.2.3:
-    resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz}
-    name: '@surma/rollup-plugin-off-main-thread'
-    version: 2.2.3
-    dependencies:
-      ejs: registry.npmmirror.com/ejs/3.1.8
-      json5: registry.npmmirror.com/json5/2.2.3
-      magic-string: registry.npmmirror.com/magic-string/0.25.9
-      string.prototype.matchall: registry.npmmirror.com/string.prototype.matchall/4.0.8
-    dev: true
-
-  registry.npmmirror.com/@tootallnate/once/1.1.2:
-    resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz}
-    name: '@tootallnate/once'
-    version: 1.1.2
-    engines: {node: '>= 6'}
-    dev: true
-
-  registry.npmmirror.com/@trysound/sax/0.2.0:
-    resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz}
-    name: '@trysound/sax'
-    version: 0.2.0
-    engines: {node: '>=10.13.0'}
-    dev: true
-
-  registry.npmmirror.com/@tsconfig/node10/1.0.9:
-    resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.9.tgz}
-    name: '@tsconfig/node10'
-    version: 1.0.9
-    dev: true
-
-  registry.npmmirror.com/@tsconfig/node12/1.0.11:
-    resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz}
-    name: '@tsconfig/node12'
-    version: 1.0.11
-    dev: true
-
-  registry.npmmirror.com/@tsconfig/node14/1.0.3:
-    resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz}
-    name: '@tsconfig/node14'
-    version: 1.0.3
-    dev: true
-
-  registry.npmmirror.com/@tsconfig/node16/1.0.3:
-    resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.3.tgz}
-    name: '@tsconfig/node16'
-    version: 1.0.3
-    dev: true
-
-  registry.npmmirror.com/@types/babel__core/7.20.0:
-    resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.0.tgz}
-    name: '@types/babel__core'
-    version: 7.20.0
-    dependencies:
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.21.2
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-      '@types/babel__generator': registry.npmmirror.com/@types/babel__generator/7.6.4
-      '@types/babel__template': registry.npmmirror.com/@types/babel__template/7.4.1
-      '@types/babel__traverse': registry.npmmirror.com/@types/babel__traverse/7.18.3
-    dev: true
-
-  registry.npmmirror.com/@types/babel__generator/7.6.4:
-    resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.4.tgz}
-    name: '@types/babel__generator'
-    version: 7.6.4
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@types/babel__template/7.4.1:
-    resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.1.tgz}
-    name: '@types/babel__template'
-    version: 7.4.1
-    dependencies:
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.21.2
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@types/babel__traverse/7.18.3:
-    resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz}
-    name: '@types/babel__traverse'
-    version: 7.18.3
-    dependencies:
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-    dev: true
-
-  registry.npmmirror.com/@types/codemirror/5.60.7:
-    resolution: {integrity: sha512-QXIC+RPzt/1BGSuD6iFn6UMC9TDp+9hkOANYNPVsjjrDdzKphfRkwQDKGp2YaC54Yhz0g6P5uYTCCibZZEiMAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/codemirror/-/codemirror-5.60.7.tgz}
-    name: '@types/codemirror'
-    version: 5.60.7
-    dependencies:
-      '@types/tern': registry.npmmirror.com/@types/tern/0.23.4
-    dev: true
-
-  registry.npmmirror.com/@types/crypto-js/4.1.1:
-    resolution: {integrity: sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/crypto-js/-/crypto-js-4.1.1.tgz}
-    name: '@types/crypto-js'
-    version: 4.1.1
-    dev: true
-
-  registry.npmmirror.com/@types/estree/0.0.39:
-    resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/estree/-/estree-0.0.39.tgz}
-    name: '@types/estree'
-    version: 0.0.39
-    dev: true
-
-  registry.npmmirror.com/@types/estree/1.0.0:
-    resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/estree/-/estree-1.0.0.tgz}
-    name: '@types/estree'
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/@types/fs-extra/9.0.13:
-    resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-9.0.13.tgz}
-    name: '@types/fs-extra'
-    version: 9.0.13
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-    dev: true
-
-  registry.npmmirror.com/@types/glob/7.2.0:
-    resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz}
-    name: '@types/glob'
-    version: 7.2.0
-    dependencies:
-      '@types/minimatch': registry.npmmirror.com/@types/minimatch/5.1.2
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-    dev: true
-
-  registry.npmmirror.com/@types/graceful-fs/4.1.6:
-    resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz}
-    name: '@types/graceful-fs'
-    version: 4.1.6
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-    dev: true
-
-  registry.npmmirror.com/@types/imagemin-gifsicle/7.0.1:
-    resolution: {integrity: sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz}
-    name: '@types/imagemin-gifsicle'
-    version: 7.0.1
-    dependencies:
-      '@types/imagemin': registry.npmmirror.com/@types/imagemin/7.0.1
-    dev: true
-
-  registry.npmmirror.com/@types/imagemin-jpegtran/5.0.1:
-    resolution: {integrity: sha512-Ps8kbm+DUFte/Eln/tUdEvpMWHKFCsQKlV8n+RN50zqWqL/7QhfLxR0ymitP9wa90P6+rkbJlintBNPkVR+B/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/imagemin-jpegtran/-/imagemin-jpegtran-5.0.1.tgz}
-    name: '@types/imagemin-jpegtran'
-    version: 5.0.1
-    dependencies:
-      '@types/imagemin': registry.npmmirror.com/@types/imagemin/7.0.1
-    dev: true
-
-  registry.npmmirror.com/@types/imagemin-mozjpeg/8.0.1:
-    resolution: {integrity: sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz}
-    name: '@types/imagemin-mozjpeg'
-    version: 8.0.1
-    dependencies:
-      '@types/imagemin': registry.npmmirror.com/@types/imagemin/7.0.1
-    dev: true
-
-  registry.npmmirror.com/@types/imagemin-optipng/5.2.1:
-    resolution: {integrity: sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz}
-    name: '@types/imagemin-optipng'
-    version: 5.2.1
-    dependencies:
-      '@types/imagemin': registry.npmmirror.com/@types/imagemin/7.0.1
-    dev: true
-
-  registry.npmmirror.com/@types/imagemin-svgo/10.0.2:
-    resolution: {integrity: sha512-F4enqbl7eE0JhrwGdJSMKFDn1j1Pk8JsCvnjA5iJKSi+IK3sd4CronabzVmOuEkz663tV7FsRQp1f7SP3zmIaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/imagemin-svgo/-/imagemin-svgo-10.0.2.tgz}
-    name: '@types/imagemin-svgo'
-    version: 10.0.2
-    dependencies:
-      '@types/imagemin': registry.npmmirror.com/@types/imagemin/7.0.1
-      '@types/svgo': registry.npmmirror.com/@types/svgo/2.6.4
-    dev: true
-
-  registry.npmmirror.com/@types/imagemin-webp/7.0.0:
-    resolution: {integrity: sha512-Lb1tjy2vEU7qYwM5iFB9o5k0J3mIpulw6Yftset5LLLugPu7+C16rLYRP1WEwr4QM8AeJZRjC2BGBLd9lGvRhQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/imagemin-webp/-/imagemin-webp-7.0.0.tgz}
-    name: '@types/imagemin-webp'
-    version: 7.0.0
-    dependencies:
-      '@types/imagemin': registry.npmmirror.com/@types/imagemin/7.0.1
-    dev: true
-
-  registry.npmmirror.com/@types/imagemin/7.0.1:
-    resolution: {integrity: sha512-xEn5+M3lDBtI3JxLy6eU3ksoVurygnlG7OYhTqJfGGP4PcvYnfn+IABCmMve7ziM/SneHDm5xgJFKC8hCYPicw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/imagemin/-/imagemin-7.0.1.tgz}
-    name: '@types/imagemin'
-    version: 7.0.1
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-    dev: true
-
-  registry.npmmirror.com/@types/inquirer/8.2.6:
-    resolution: {integrity: sha512-3uT88kxg8lNzY8ay2ZjP44DKcRaTGztqeIvN2zHvhzIBH/uAPaL75aBtdNRKbA7xXoMbBt5kX0M00VKAnfOYlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/inquirer/-/inquirer-8.2.6.tgz}
-    name: '@types/inquirer'
-    version: 8.2.6
-    dependencies:
-      '@types/through': registry.npmmirror.com/@types/through/0.0.30
-      rxjs: registry.npmmirror.com/rxjs/7.8.0
-    dev: true
-
-  registry.npmmirror.com/@types/intro.js/3.0.2:
-    resolution: {integrity: sha512-kow8REgIIG42atN9vAaIdpEqVzj6WzV9m0PII8oce+an4Lc3eyfQF32/FbabbGmfWuF7TceTdd+gh74kOrXkPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/intro.js/-/intro.js-3.0.2.tgz}
-    name: '@types/intro.js'
-    version: 3.0.2
-    dev: true
-
-  registry.npmmirror.com/@types/istanbul-lib-coverage/2.0.4:
-    resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz}
-    name: '@types/istanbul-lib-coverage'
-    version: 2.0.4
-    dev: true
-
-  registry.npmmirror.com/@types/istanbul-lib-report/3.0.0:
-    resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz}
-    name: '@types/istanbul-lib-report'
-    version: 3.0.0
-    dependencies:
-      '@types/istanbul-lib-coverage': registry.npmmirror.com/@types/istanbul-lib-coverage/2.0.4
-    dev: true
-
-  registry.npmmirror.com/@types/istanbul-reports/3.0.1:
-    resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz}
-    name: '@types/istanbul-reports'
-    version: 3.0.1
-    dependencies:
-      '@types/istanbul-lib-report': registry.npmmirror.com/@types/istanbul-lib-report/3.0.0
-    dev: true
-
-  registry.npmmirror.com/@types/jest/27.5.2:
-    resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/jest/-/jest-27.5.2.tgz}
-    name: '@types/jest'
-    version: 27.5.2
-    dependencies:
-      jest-matcher-utils: registry.npmmirror.com/jest-matcher-utils/27.5.1
-      pretty-format: registry.npmmirror.com/pretty-format/27.5.1
-    dev: true
-
-  registry.npmmirror.com/@types/json-schema/7.0.11:
-    resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz}
-    name: '@types/json-schema'
-    version: 7.0.11
-    dev: true
-
-  registry.npmmirror.com/@types/lodash-es/4.17.6:
-    resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz}
-    name: '@types/lodash-es'
-    version: 4.17.6
-    dependencies:
-      '@types/lodash': registry.npmmirror.com/@types/lodash/4.14.191
-    dev: true
-
-  registry.npmmirror.com/@types/lodash/4.14.191:
-    resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.191.tgz}
-    name: '@types/lodash'
-    version: 4.14.191
-    dev: true
-
-  registry.npmmirror.com/@types/minimatch/3.0.5:
-    resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/minimatch/-/minimatch-3.0.5.tgz}
-    name: '@types/minimatch'
-    version: 3.0.5
-    dev: true
-
-  registry.npmmirror.com/@types/minimatch/5.1.2:
-    resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/minimatch/-/minimatch-5.1.2.tgz}
-    name: '@types/minimatch'
-    version: 5.1.2
-    dev: true
-
-  registry.npmmirror.com/@types/minimist/1.2.2:
-    resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz}
-    name: '@types/minimist'
-    version: 1.2.2
-    dev: true
-
-  registry.npmmirror.com/@types/mockjs/1.0.7:
-    resolution: {integrity: sha512-OCxXz6hEaJOVpRwuJMiVY5a6LtJcih+br9gwB/Q8ooOBikvk5FpBQ31OlNimXo3EqKha1Z7PFBni+q9m+8NCWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/mockjs/-/mockjs-1.0.7.tgz}
-    name: '@types/mockjs'
-    version: 1.0.7
-    dev: true
-
-  registry.npmmirror.com/@types/mousetrap/1.6.11:
-    resolution: {integrity: sha512-F0oAily9Q9QQpv9JKxKn0zMKfOo36KHCW7myYsmUyf2t0g+sBTbG3UleTPoguHdE1z3GLFr3p7/wiOio52QFjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/mousetrap/-/mousetrap-1.6.11.tgz}
-    name: '@types/mousetrap'
-    version: 1.6.11
-    dev: false
-
-  registry.npmmirror.com/@types/node/14.18.37:
-    resolution: {integrity: sha512-7GgtHCs/QZrBrDzgIJnQtuSvhFSwhyYSI2uafSwZoNt1iOGhEN5fwNrQMjtONyHm9+/LoA4453jH0CMYcr06Pg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-14.18.37.tgz}
-    name: '@types/node'
-    version: 14.18.37
-    dev: true
-
-  registry.npmmirror.com/@types/node/17.0.45:
-    resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz}
-    name: '@types/node'
-    version: 17.0.45
-    dev: true
-
-  registry.npmmirror.com/@types/normalize-package-data/2.4.1:
-    resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz}
-    name: '@types/normalize-package-data'
-    version: 2.4.1
-    dev: true
-
-  registry.npmmirror.com/@types/nprogress/0.2.0:
-    resolution: {integrity: sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/nprogress/-/nprogress-0.2.0.tgz}
-    name: '@types/nprogress'
-    version: 0.2.0
-    dev: true
-
-  registry.npmmirror.com/@types/parse-json/4.0.0:
-    resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz}
-    name: '@types/parse-json'
-    version: 4.0.0
-    dev: true
-
-  registry.npmmirror.com/@types/pinyin/2.10.0:
-    resolution: {integrity: sha512-YLty6FPYiBgxNbQNaTRJquvflRdG026jjOpjNXR7HdGEJPGtmPBp1x9LkWePCNA/ClaTT0hYem080TbRCMLbew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/pinyin/-/pinyin-2.10.0.tgz}
-    name: '@types/pinyin'
-    version: 2.10.0
-    dev: true
-
-  registry.npmmirror.com/@types/prettier/2.7.2:
-    resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/prettier/-/prettier-2.7.2.tgz}
-    name: '@types/prettier'
-    version: 2.7.2
-    dev: true
-
-  registry.npmmirror.com/@types/qrcode/1.5.0:
-    resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/qrcode/-/qrcode-1.5.0.tgz}
-    name: '@types/qrcode'
-    version: 1.5.0
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-    dev: true
-
-  registry.npmmirror.com/@types/qs/6.9.7:
-    resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz}
-    name: '@types/qs'
-    version: 6.9.7
-    dev: true
-
-  registry.npmmirror.com/@types/resolve/1.17.1:
-    resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/resolve/-/resolve-1.17.1.tgz}
-    name: '@types/resolve'
-    version: 1.17.1
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-    dev: true
-
-  registry.npmmirror.com/@types/semver/7.3.13:
-    resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/semver/-/semver-7.3.13.tgz}
-    name: '@types/semver'
-    version: 7.3.13
-    dev: true
-
-  registry.npmmirror.com/@types/showdown/1.9.4:
-    resolution: {integrity: sha512-50ehC3IAijfkvoNqmQ+VL73S7orOxmAK8ljQAFBv8o7G66lAZyxQj1L3BAv2dD86myLXI+sgKP1kcxAaxW356w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/showdown/-/showdown-1.9.4.tgz}
-    name: '@types/showdown'
-    version: 1.9.4
-    dev: true
-
-  registry.npmmirror.com/@types/sortablejs/1.15.0:
-    resolution: {integrity: sha512-qrhtM7M41EhH4tZQTNw2/RJkxllBx3reiJpTbgWCM2Dx0U1sZ6LwKp9lfNln9uqE26ZMKUaPEYaD4rzvOWYtZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.0.tgz}
-    name: '@types/sortablejs'
-    version: 1.15.0
-    dev: true
-
-  registry.npmmirror.com/@types/stack-utils/2.0.1:
-    resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.1.tgz}
-    name: '@types/stack-utils'
-    version: 2.0.1
-    dev: true
-
-  registry.npmmirror.com/@types/svgo/2.6.4:
-    resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/svgo/-/svgo-2.6.4.tgz}
-    name: '@types/svgo'
-    version: 2.6.4
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-    dev: true
-
-  registry.npmmirror.com/@types/tern/0.23.4:
-    resolution: {integrity: sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/tern/-/tern-0.23.4.tgz}
-    name: '@types/tern'
-    version: 0.23.4
-    dependencies:
-      '@types/estree': registry.npmmirror.com/@types/estree/1.0.0
-    dev: true
-
-  registry.npmmirror.com/@types/through/0.0.30:
-    resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/through/-/through-0.0.30.tgz}
-    name: '@types/through'
-    version: 0.0.30
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-    dev: true
-
-  registry.npmmirror.com/@types/tinycolor2/1.4.3:
-    resolution: {integrity: sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/tinycolor2/-/tinycolor2-1.4.3.tgz}
-    name: '@types/tinycolor2'
-    version: 1.4.3
-    dev: true
-
-  registry.npmmirror.com/@types/trusted-types/2.0.3:
-    resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.3.tgz}
-    name: '@types/trusted-types'
-    version: 2.0.3
-    dev: true
-
-  registry.npmmirror.com/@types/web-bluetooth/0.0.14:
-    resolution: {integrity: sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz}
-    name: '@types/web-bluetooth'
-    version: 0.0.14
-    dev: false
-
-  registry.npmmirror.com/@types/yargs-parser/21.0.0:
-    resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz}
-    name: '@types/yargs-parser'
-    version: 21.0.0
-    dev: true
-
-  registry.npmmirror.com/@types/yargs/16.0.5:
-    resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/yargs/-/yargs-16.0.5.tgz}
-    name: '@types/yargs'
-    version: 16.0.5
-    dependencies:
-      '@types/yargs-parser': registry.npmmirror.com/@types/yargs-parser/21.0.0
-    dev: true
-
-  registry.npmmirror.com/@typescript-eslint/eslint-plugin/5.54.0_6mj2wypvdnknez7kws2nfdgupi:
-    resolution: {integrity: sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz}
-    id: registry.npmmirror.com/@typescript-eslint/eslint-plugin/5.54.0
-    name: '@typescript-eslint/eslint-plugin'
-    version: 5.54.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      '@typescript-eslint/parser': ^5.0.0
-      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-    dependencies:
-      '@typescript-eslint/parser': registry.npmmirror.com/@typescript-eslint/parser/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu
-      '@typescript-eslint/scope-manager': registry.npmmirror.com/@typescript-eslint/scope-manager/5.54.0
-      '@typescript-eslint/type-utils': registry.npmmirror.com/@typescript-eslint/type-utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu
-      '@typescript-eslint/utils': registry.npmmirror.com/@typescript-eslint/utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu
-      debug: registry.npmmirror.com/debug/4.3.4
-      eslint: registry.npmmirror.com/eslint/8.35.0
-      grapheme-splitter: registry.npmmirror.com/grapheme-splitter/1.0.4
-      ignore: registry.npmmirror.com/ignore/5.2.4
-      natural-compare-lite: registry.npmmirror.com/natural-compare-lite/1.4.0
-      regexpp: registry.npmmirror.com/regexpp/3.2.0
-      semver: registry.npmmirror.com/semver/7.3.8
-      tsutils: registry.npmmirror.com/tsutils/3.21.0_typescript@4.9.5
-      typescript: registry.npmmirror.com/typescript/4.9.5
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@typescript-eslint/experimental-utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu:
-    resolution: {integrity: sha512-rRYECOTh5V3iWsrOzXi7h1jp3Bi9OkJHrb3wECi3DVqMGTilo9wAYmCbT+6cGdrzUY3MWcAa2mESM6FMik6tVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.54.0.tgz}
-    id: registry.npmmirror.com/@typescript-eslint/experimental-utils/5.54.0
-    name: '@typescript-eslint/experimental-utils'
-    version: 5.54.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
-    dependencies:
-      '@typescript-eslint/utils': registry.npmmirror.com/@typescript-eslint/utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu
-      eslint: registry.npmmirror.com/eslint/8.35.0
-    transitivePeerDependencies:
-      - supports-color
-      - typescript
-    dev: true
-
-  registry.npmmirror.com/@typescript-eslint/parser/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu:
-    resolution: {integrity: sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.54.0.tgz}
-    id: registry.npmmirror.com/@typescript-eslint/parser/5.54.0
-    name: '@typescript-eslint/parser'
-    version: 5.54.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-    dependencies:
-      '@typescript-eslint/scope-manager': registry.npmmirror.com/@typescript-eslint/scope-manager/5.54.0
-      '@typescript-eslint/types': registry.npmmirror.com/@typescript-eslint/types/5.54.0
-      '@typescript-eslint/typescript-estree': registry.npmmirror.com/@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.5
-      debug: registry.npmmirror.com/debug/4.3.4
-      eslint: registry.npmmirror.com/eslint/8.35.0
-      typescript: registry.npmmirror.com/typescript/4.9.5
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@typescript-eslint/scope-manager/5.54.0:
-    resolution: {integrity: sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz}
-    name: '@typescript-eslint/scope-manager'
-    version: 5.54.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    dependencies:
-      '@typescript-eslint/types': registry.npmmirror.com/@typescript-eslint/types/5.54.0
-      '@typescript-eslint/visitor-keys': registry.npmmirror.com/@typescript-eslint/visitor-keys/5.54.0
-    dev: true
-
-  registry.npmmirror.com/@typescript-eslint/type-utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu:
-    resolution: {integrity: sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz}
-    id: registry.npmmirror.com/@typescript-eslint/type-utils/5.54.0
-    name: '@typescript-eslint/type-utils'
-    version: 5.54.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: '*'
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-    dependencies:
-      '@typescript-eslint/typescript-estree': registry.npmmirror.com/@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.5
-      '@typescript-eslint/utils': registry.npmmirror.com/@typescript-eslint/utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu
-      debug: registry.npmmirror.com/debug/4.3.4
-      eslint: registry.npmmirror.com/eslint/8.35.0
-      tsutils: registry.npmmirror.com/tsutils/3.21.0_typescript@4.9.5
-      typescript: registry.npmmirror.com/typescript/4.9.5
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@typescript-eslint/types/5.54.0:
-    resolution: {integrity: sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.54.0.tgz}
-    name: '@typescript-eslint/types'
-    version: 5.54.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    dev: true
-
-  registry.npmmirror.com/@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.5:
-    resolution: {integrity: sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz}
-    id: registry.npmmirror.com/@typescript-eslint/typescript-estree/5.54.0
-    name: '@typescript-eslint/typescript-estree'
-    version: 5.54.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-    dependencies:
-      '@typescript-eslint/types': registry.npmmirror.com/@typescript-eslint/types/5.54.0
-      '@typescript-eslint/visitor-keys': registry.npmmirror.com/@typescript-eslint/visitor-keys/5.54.0
-      debug: registry.npmmirror.com/debug/4.3.4
-      globby: registry.npmmirror.com/globby/11.1.0
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      semver: registry.npmmirror.com/semver/7.3.8
-      tsutils: registry.npmmirror.com/tsutils/3.21.0_typescript@4.9.5
-      typescript: registry.npmmirror.com/typescript/4.9.5
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@typescript-eslint/utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu:
-    resolution: {integrity: sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.54.0.tgz}
-    id: registry.npmmirror.com/@typescript-eslint/utils/5.54.0
-    name: '@typescript-eslint/utils'
-    version: 5.54.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
-    dependencies:
-      '@types/json-schema': registry.npmmirror.com/@types/json-schema/7.0.11
-      '@types/semver': registry.npmmirror.com/@types/semver/7.3.13
-      '@typescript-eslint/scope-manager': registry.npmmirror.com/@typescript-eslint/scope-manager/5.54.0
-      '@typescript-eslint/types': registry.npmmirror.com/@typescript-eslint/types/5.54.0
-      '@typescript-eslint/typescript-estree': registry.npmmirror.com/@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.5
-      eslint: registry.npmmirror.com/eslint/8.35.0
-      eslint-scope: registry.npmmirror.com/eslint-scope/5.1.1
-      eslint-utils: registry.npmmirror.com/eslint-utils/3.0.0_eslint@8.35.0
-      semver: registry.npmmirror.com/semver/7.3.8
-    transitivePeerDependencies:
-      - supports-color
-      - typescript
-    dev: true
-
-  registry.npmmirror.com/@typescript-eslint/visitor-keys/5.54.0:
-    resolution: {integrity: sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz}
-    name: '@typescript-eslint/visitor-keys'
-    version: 5.54.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    dependencies:
-      '@typescript-eslint/types': registry.npmmirror.com/@typescript-eslint/types/5.54.0
-      eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/3.3.0
-    dev: true
-
-  registry.npmmirror.com/@vitejs/plugin-legacy/2.3.1_vite@3.2.5:
-    resolution: {integrity: sha512-J5KaGBlSt2tEYPVjM/C8dA6DkRzkFkbPe+Xb4IX5G+XOV5OGbVAfkMjKywdrkO3gGynO8S98i71Lmsff4cWkCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-2.3.1.tgz}
-    id: registry.npmmirror.com/@vitejs/plugin-legacy/2.3.1
-    name: '@vitejs/plugin-legacy'
-    version: 2.3.1
-    engines: {node: ^14.18.0 || >=16.0.0}
-    peerDependencies:
-      terser: ^5.4.0
-      vite: ^3.0.0
-    dependencies:
-      '@babel/standalone': registry.npmmirror.com/@babel/standalone/7.21.2
-      core-js: registry.npmmirror.com/core-js/3.29.0
-      magic-string: registry.npmmirror.com/magic-string/0.26.7
-      regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11
-      systemjs: registry.npmmirror.com/systemjs/6.14.0
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    dev: true
-
-  registry.npmmirror.com/@vitejs/plugin-vue-jsx/1.3.10:
-    resolution: {integrity: sha512-Cf5zznh4yNMiEMBfTOztaDVDmK1XXfgxClzOSUVUc8WAmHzogrCUeM8B05ABzuGtg0D1amfng+mUmSIOFGP3Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.3.10.tgz}
-    name: '@vitejs/plugin-vue-jsx'
-    version: 1.3.10
-    engines: {node: '>=12.0.0'}
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/plugin-syntax-import-meta': registry.npmmirror.com/@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.0
-      '@babel/plugin-transform-typescript': registry.npmmirror.com/@babel/plugin-transform-typescript/7.21.0_@babel+core@7.21.0
-      '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/4.2.1
-      '@vue/babel-plugin-jsx': registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.21.0
-      hash-sum: registry.npmmirror.com/hash-sum/2.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@vitejs/plugin-vue/3.2.0_vite@3.2.5+vue@3.2.47:
-    resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz}
-    id: registry.npmmirror.com/@vitejs/plugin-vue/3.2.0
-    name: '@vitejs/plugin-vue'
-    version: 3.2.0
-    engines: {node: ^14.18.0 || >=16.0.0}
-    peerDependencies:
-      vite: ^3.0.0
-      vue: ^3.2.25
-    dependencies:
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: true
-
-  registry.npmmirror.com/@volar/code-gen/0.33.9:
-    resolution: {integrity: sha512-HI+XemEjvOv9uSjqaNXIL1brSTaBy9vRTcXqz9787nL5VKktI8aU1Zk4w9yJR88eTqw7mlPIdMaib7Ps/QPq8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/code-gen/-/code-gen-0.33.9.tgz}
-    name: '@volar/code-gen'
-    version: 0.33.9
-    dependencies:
-      '@volar/source-map': registry.npmmirror.com/@volar/source-map/0.33.9
-    dev: true
-
-  registry.npmmirror.com/@volar/pug-language-service/0.33.9:
-    resolution: {integrity: sha512-3oOV0HmoqkCyPAiHXSMoDzbLrSEQQv3d1dY/Lfo4H8hGoS8kUYJ958328TuLFc90yzsSmYnuvIux5AUok138pg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/pug-language-service/-/pug-language-service-0.33.9.tgz}
-    name: '@volar/pug-language-service'
-    version: 0.33.9
-    dependencies:
-      '@volar/code-gen': registry.npmmirror.com/@volar/code-gen/0.33.9
-      '@volar/shared': registry.npmmirror.com/@volar/shared/0.33.9
-      '@volar/source-map': registry.npmmirror.com/@volar/source-map/0.33.9
-      '@volar/transforms': registry.npmmirror.com/@volar/transforms/0.33.9
-      pug-lexer: registry.npmmirror.com/pug-lexer/5.0.1
-      pug-parser: registry.npmmirror.com/pug-parser/6.0.0
-      vscode-languageserver-textdocument: registry.npmmirror.com/vscode-languageserver-textdocument/1.0.8
-      vscode-languageserver-types: registry.npmmirror.com/vscode-languageserver-types/3.17.3
-    dev: true
-
-  registry.npmmirror.com/@volar/shared/0.33.9:
-    resolution: {integrity: sha512-YqEBYT1SjyO+/W73lyKZlftumimsrYGvd98pHrIyvgc6HNhFnCcthRbyHskstjU6P8Bgj90mRl+7Sb29J+Z5ng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/shared/-/shared-0.33.9.tgz}
-    name: '@volar/shared'
-    version: 0.33.9
-    dependencies:
-      upath: registry.npmmirror.com/upath/2.0.1
-      vscode-jsonrpc: registry.npmmirror.com/vscode-jsonrpc/8.1.0
-      vscode-uri: registry.npmmirror.com/vscode-uri/3.0.7
-    dev: true
-
-  registry.npmmirror.com/@volar/source-map/0.33.9:
-    resolution: {integrity: sha512-SE7dfumZ8pLsbj4DtiSDTg2/d/JT45nF51rUnuz1UNSBPEeXBexlzvz5EQ2AyrX0FjAAd2ijrRtirTk1a0SFhQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/source-map/-/source-map-0.33.9.tgz}
-    name: '@volar/source-map'
-    version: 0.33.9
-    dev: true
-
-  registry.npmmirror.com/@volar/transforms/0.33.9:
-    resolution: {integrity: sha512-qdc2d0ZW/G6jCx1pBmoMjMJTY245pZJjpPL/OCT3zgbDLGvLvqhowXxQYQd2YiNXqxJvbadEKviH5LiZL3sU9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/transforms/-/transforms-0.33.9.tgz}
-    name: '@volar/transforms'
-    version: 0.33.9
-    dependencies:
-      '@volar/shared': registry.npmmirror.com/@volar/shared/0.33.9
-      vscode-languageserver-types: registry.npmmirror.com/vscode-languageserver-types/3.17.3
-    dev: true
-
-  registry.npmmirror.com/@volar/vue-code-gen/0.33.9:
-    resolution: {integrity: sha512-qRCXcBhm1kUlI06sW5zolavn8gqZdSC2eIWw7jgbW68K/cGlTyXHGGZgJPM9P22cF9pcrjV1ByehO18ke2u+aA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/vue-code-gen/-/vue-code-gen-0.33.9.tgz}
-    name: '@volar/vue-code-gen'
-    version: 0.33.9
-    dependencies:
-      '@volar/code-gen': registry.npmmirror.com/@volar/code-gen/0.33.9
-      '@volar/source-map': registry.npmmirror.com/@volar/source-map/0.33.9
-      '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.47
-      '@vue/compiler-dom': 3.2.47
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-    dev: true
-
-  registry.npmmirror.com/@volar/vue-typescript/0.33.9:
-    resolution: {integrity: sha512-UUViaQfzAV7z49TB+IsGCT6ls7zdEUib2N0L4k8U9nZbd2BQA4kcR9nyS/8oDOU5fK3ErP+pPlC+XzGGamKhcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-0.33.9.tgz}
-    name: '@volar/vue-typescript'
-    version: 0.33.9
-    dependencies:
-      '@volar/code-gen': registry.npmmirror.com/@volar/code-gen/0.33.9
-      '@volar/pug-language-service': registry.npmmirror.com/@volar/pug-language-service/0.33.9
-      '@volar/source-map': registry.npmmirror.com/@volar/source-map/0.33.9
-      '@volar/vue-code-gen': registry.npmmirror.com/@volar/vue-code-gen/0.33.9
-      '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.47
-      '@vue/reactivity': registry.npmmirror.com/@vue/reactivity/3.2.47
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2:
-    resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz}
-    name: '@vue/babel-helper-vue-transform-on'
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.21.0:
-    resolution: {integrity: sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz}
-    id: registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1
-    name: '@vue/babel-plugin-jsx'
-    version: 1.1.1
-    dependencies:
-      '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6
-      '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.21.0
-      '@babel/template': registry.npmmirror.com/@babel/template/7.20.7
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.21.2
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-      '@vue/babel-helper-vue-transform-on': registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2
-      camelcase: registry.npmmirror.com/camelcase/6.3.0
-      html-tags: registry.npmmirror.com/html-tags/3.2.0
-      svg-tags: registry.npmmirror.com/svg-tags/1.0.0
-    transitivePeerDependencies:
-      - '@babel/core'
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@vue/compiler-core/3.2.47:
-    resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz}
-    name: '@vue/compiler-core'
-    version: 3.2.47
-    dependencies:
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.21.2
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-      estree-walker: registry.npmmirror.com/estree-walker/2.0.2
-      source-map: 0.6.1
-
-  registry.npmmirror.com/@vue/compiler-dom/3.2.47:
-    resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz}
-    name: '@vue/compiler-dom'
-    version: 3.2.47
-    dependencies:
-      '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.47
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-
-  registry.npmmirror.com/@vue/compiler-sfc/3.2.47:
-    resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz}
-    name: '@vue/compiler-sfc'
-    version: 3.2.47
-    dependencies:
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.21.2
-      '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.47
-      '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.47
-      '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.2.47
-      '@vue/reactivity-transform': registry.npmmirror.com/@vue/reactivity-transform/3.2.47
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-      estree-walker: registry.npmmirror.com/estree-walker/2.0.2
-      magic-string: registry.npmmirror.com/magic-string/0.25.9
-      postcss: registry.npmmirror.com/postcss/8.4.21
-      source-map: registry.npmmirror.com/source-map/0.6.1
-
-  registry.npmmirror.com/@vue/compiler-ssr/3.2.47:
-    resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz}
-    name: '@vue/compiler-ssr'
-    version: 3.2.47
-    dependencies:
-      '@vue/compiler-dom': 3.2.47
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-
-  registry.npmmirror.com/@vue/devtools-api/6.5.0:
-    resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz}
-    name: '@vue/devtools-api'
-    version: 6.5.0
-    dev: false
-
-  registry.npmmirror.com/@vue/reactivity-transform/3.2.47:
-    resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz}
-    name: '@vue/reactivity-transform'
-    version: 3.2.47
-    dependencies:
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.21.2
-      '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.47
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-      estree-walker: registry.npmmirror.com/estree-walker/2.0.2
-      magic-string: registry.npmmirror.com/magic-string/0.25.9
-
-  registry.npmmirror.com/@vue/reactivity/3.2.47:
-    resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz}
-    name: '@vue/reactivity'
-    version: 3.2.47
-    dependencies:
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-
-  registry.npmmirror.com/@vue/runtime-core/3.2.47:
-    resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz}
-    name: '@vue/runtime-core'
-    version: 3.2.47
-    dependencies:
-      '@vue/reactivity': registry.npmmirror.com/@vue/reactivity/3.2.47
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-
-  registry.npmmirror.com/@vue/runtime-dom/3.2.47:
-    resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz}
-    name: '@vue/runtime-dom'
-    version: 3.2.47
-    dependencies:
-      '@vue/runtime-core': registry.npmmirror.com/@vue/runtime-core/3.2.47
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-      csstype: registry.npmmirror.com/csstype/2.6.21
-
-  registry.npmmirror.com/@vue/server-renderer/3.2.47_vue@3.2.47:
-    resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz}
-    id: registry.npmmirror.com/@vue/server-renderer/3.2.47
-    name: '@vue/server-renderer'
-    version: 3.2.47
-    peerDependencies:
-      vue: 3.2.47
-    dependencies:
-      '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.2.47
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-      vue: registry.npmmirror.com/vue/3.2.47
-
-  registry.npmmirror.com/@vue/shared/3.2.47:
-    resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz}
-    name: '@vue/shared'
-    version: 3.2.47
-
-  registry.npmmirror.com/@vue/test-utils/2.3.0_vue@3.2.47:
-    resolution: {integrity: sha512-S8/9Z+B4VSsTUNtZtzS7J1TfxJbf10n+gcH9X8cASbG0Tp7qD6vqs/sUNlmpzk6i7+pP00ptauJp9rygyW89Ww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/test-utils/-/test-utils-2.3.0.tgz}
-    id: registry.npmmirror.com/@vue/test-utils/2.3.0
-    name: '@vue/test-utils'
-    version: 2.3.0
-    peerDependencies:
-      vue: ^3.0.1
-    dependencies:
-      js-beautify: registry.npmmirror.com/js-beautify/1.14.6
-      vue: registry.npmmirror.com/vue/3.2.47
-    optionalDependencies:
-      '@vue/compiler-dom': 3.2.47
-      '@vue/server-renderer': 3.2.47_vue@3.2.47
-    dev: true
-
-  registry.npmmirror.com/@vueuse/core/8.9.4_vue@3.2.47:
-    resolution: {integrity: sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vueuse/core/-/core-8.9.4.tgz}
-    id: registry.npmmirror.com/@vueuse/core/8.9.4
-    name: '@vueuse/core'
-    version: 8.9.4
-    peerDependencies:
-      '@vue/composition-api': ^1.1.0
-      vue: ^2.6.0 || ^3.2.0
-    peerDependenciesMeta:
-      '@vue/composition-api':
-        optional: true
-      vue:
-        optional: true
-    dependencies:
-      '@types/web-bluetooth': registry.npmmirror.com/@types/web-bluetooth/0.0.14
-      '@vueuse/metadata': registry.npmmirror.com/@vueuse/metadata/8.9.4
-      '@vueuse/shared': registry.npmmirror.com/@vueuse/shared/8.9.4_vue@3.2.47
-      vue: registry.npmmirror.com/vue/3.2.47
-      vue-demi: registry.npmmirror.com/vue-demi/0.13.11_vue@3.2.47
-    dev: false
-
-  registry.npmmirror.com/@vueuse/metadata/8.9.4:
-    resolution: {integrity: sha512-IwSfzH80bnJMzqhaapqJl9JRIiyQU0zsRGEgnxN6jhq7992cPUJIRfV+JHRIZXjYqbwt07E1gTEp0R0zPJ1aqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vueuse/metadata/-/metadata-8.9.4.tgz}
-    name: '@vueuse/metadata'
-    version: 8.9.4
-    dev: false
-
-  registry.npmmirror.com/@vueuse/shared/8.9.4_vue@3.2.47:
-    resolution: {integrity: sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vueuse/shared/-/shared-8.9.4.tgz}
-    id: registry.npmmirror.com/@vueuse/shared/8.9.4
-    name: '@vueuse/shared'
-    version: 8.9.4
-    peerDependencies:
-      '@vue/composition-api': ^1.1.0
-      vue: ^2.6.0 || ^3.2.0
-    peerDependenciesMeta:
-      '@vue/composition-api':
-        optional: true
-      vue:
-        optional: true
-    dependencies:
-      vue: registry.npmmirror.com/vue/3.2.47
-      vue-demi: registry.npmmirror.com/vue-demi/0.13.11_vue@3.2.47
-    dev: false
-
-  registry.npmmirror.com/@windicss/config/1.8.10:
-    resolution: {integrity: sha512-O9SsC110b1Ik3YYa4Ck/0TWuCo7YFfA9KDrwD5sAeqscT5COIGK1HszdCT3oh0MJFej2wNrvpfyW9h6yQaW6PA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@windicss/config/-/config-1.8.10.tgz}
-    name: '@windicss/config'
-    version: 1.8.10
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4
-      jiti: registry.npmmirror.com/jiti/1.17.1
-      windicss: registry.npmmirror.com/windicss/3.5.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@windicss/plugin-utils/1.8.10:
-    resolution: {integrity: sha512-Phqk5OW1w+Mv+ry6t7BzAeDq3aMhbI94gR49j9vQCufFfDGCHndhhjtMK0sBv+NPJUsIAIh6qayb1iwBCXUGrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@windicss/plugin-utils/-/plugin-utils-1.8.10.tgz}
-    name: '@windicss/plugin-utils'
-    version: 1.8.10
-    dependencies:
-      '@antfu/utils': registry.npmmirror.com/@antfu/utils/0.7.2
-      '@windicss/config': registry.npmmirror.com/@windicss/config/1.8.10
-      debug: registry.npmmirror.com/debug/4.3.4
-      fast-glob: registry.npmmirror.com/fast-glob/3.2.12
-      magic-string: registry.npmmirror.com/magic-string/0.27.0
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-      windicss: registry.npmmirror.com/windicss/3.5.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/@zxcvbn-ts/core/2.2.1:
-    resolution: {integrity: sha512-Cg1JyRpCDIF+Dh3nauqygmmCYxogNVZDxSn+9PgkPD1HZ2QiJe4elruVJrGmYRS7muGmZ1hNJq8ySQdPv6GHaw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@zxcvbn-ts/core/-/core-2.2.1.tgz}
-    name: '@zxcvbn-ts/core'
-    version: 2.2.1
-    dependencies:
-      fastest-levenshtein: registry.npmmirror.com/fastest-levenshtein/1.0.16
-    dev: false
-
-  registry.npmmirror.com/JSONStream/1.3.5:
-    resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/JSONStream/-/JSONStream-1.3.5.tgz}
-    name: JSONStream
-    version: 1.3.5
-    hasBin: true
-    dependencies:
-      jsonparse: registry.npmmirror.com/jsonparse/1.3.1
-      through: registry.npmmirror.com/through/2.3.8
-    dev: true
-
-  registry.npmmirror.com/abab/2.0.6:
-    resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz}
-    name: abab
-    version: 2.0.6
-    dev: true
-
-  registry.npmmirror.com/abbrev/1.1.1:
-    resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz}
-    name: abbrev
-    version: 1.1.1
-    dev: true
-
-  registry.npmmirror.com/acorn-globals/6.0.0:
-    resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-globals/-/acorn-globals-6.0.0.tgz}
-    name: acorn-globals
-    version: 6.0.0
-    dependencies:
-      acorn: registry.npmmirror.com/acorn/7.4.1
-      acorn-walk: registry.npmmirror.com/acorn-walk/7.2.0
-    dev: true
-
-  registry.npmmirror.com/acorn-jsx/5.3.2_acorn@8.8.2:
-    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz}
-    id: registry.npmmirror.com/acorn-jsx/5.3.2
-    name: acorn-jsx
-    version: 5.3.2
-    peerDependencies:
-      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-    dependencies:
-      acorn: registry.npmmirror.com/acorn/8.8.2
-    dev: true
-
-  registry.npmmirror.com/acorn-walk/7.2.0:
-    resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz}
-    name: acorn-walk
-    version: 7.2.0
-    engines: {node: '>=0.4.0'}
-    dev: true
-
-  registry.npmmirror.com/acorn-walk/8.2.0:
-    resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz}
-    name: acorn-walk
-    version: 8.2.0
-    engines: {node: '>=0.4.0'}
-    dev: true
-
-  registry.npmmirror.com/acorn/7.4.1:
-    resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz}
-    name: acorn
-    version: 7.4.1
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/acorn/8.8.2:
-    resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz}
-    name: acorn
-    version: 8.8.2
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/add-stream/1.0.0:
-    resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/add-stream/-/add-stream-1.0.0.tgz}
-    name: add-stream
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/agent-base/6.0.2:
-    resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz}
-    name: agent-base
-    version: 6.0.2
-    engines: {node: '>= 6.0.0'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/aggregate-error/3.1.0:
-    resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz}
-    name: aggregate-error
-    version: 3.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      clean-stack: registry.npmmirror.com/clean-stack/2.2.0
-      indent-string: registry.npmmirror.com/indent-string/4.0.0
-    dev: true
-
-  registry.npmmirror.com/ajv/6.12.6:
-    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz}
-    name: ajv
-    version: 6.12.6
-    dependencies:
-      fast-deep-equal: registry.npmmirror.com/fast-deep-equal/3.1.3
-      fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0
-      json-schema-traverse: registry.npmmirror.com/json-schema-traverse/0.4.1
-      uri-js: registry.npmmirror.com/uri-js/4.4.1
-    dev: true
-
-  registry.npmmirror.com/ajv/8.12.0:
-    resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz}
-    name: ajv
-    version: 8.12.0
-    dependencies:
-      fast-deep-equal: registry.npmmirror.com/fast-deep-equal/3.1.3
-      json-schema-traverse: registry.npmmirror.com/json-schema-traverse/1.0.0
-      require-from-string: registry.npmmirror.com/require-from-string/2.0.2
-      uri-js: registry.npmmirror.com/uri-js/4.4.1
-    dev: true
-
-  registry.npmmirror.com/ansi-escapes/4.3.2:
-    resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz}
-    name: ansi-escapes
-    version: 4.3.2
-    engines: {node: '>=8'}
-    dependencies:
-      type-fest: registry.npmmirror.com/type-fest/0.21.3
-    dev: true
-
-  registry.npmmirror.com/ansi-regex/2.1.1:
-    resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz}
-    name: ansi-regex
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/ansi-regex/5.0.1:
-    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz}
-    name: ansi-regex
-    version: 5.0.1
-    engines: {node: '>=8'}
-
-  registry.npmmirror.com/ansi-regex/6.0.1:
-    resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz}
-    name: ansi-regex
-    version: 6.0.1
-    engines: {node: '>=12'}
-    dev: true
-
-  registry.npmmirror.com/ansi-styles/2.2.1:
-    resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz}
-    name: ansi-styles
-    version: 2.2.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/ansi-styles/3.2.1:
-    resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz}
-    name: ansi-styles
-    version: 3.2.1
-    engines: {node: '>=4'}
-    dependencies:
-      color-convert: registry.npmmirror.com/color-convert/1.9.3
-    dev: true
-
-  registry.npmmirror.com/ansi-styles/4.3.0:
-    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz}
-    name: ansi-styles
-    version: 4.3.0
-    engines: {node: '>=8'}
-    dependencies:
-      color-convert: registry.npmmirror.com/color-convert/2.0.1
-
-  registry.npmmirror.com/ansi-styles/5.2.0:
-    resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz}
-    name: ansi-styles
-    version: 5.2.0
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/ansi-styles/6.2.1:
-    resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz}
-    name: ansi-styles
-    version: 6.2.1
-    engines: {node: '>=12'}
-    dev: true
-
-  registry.npmmirror.com/ant-design-vue/3.2.15_vue@3.2.47:
-    resolution: {integrity: sha512-sJfE7LWimSdAPe4dzNyQBrmVMnOTNQTkG9oOyr+7W8qIYrX8sYWyC68Nn1uum4KBJUSZUa/BU6dohvTG0urBhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-3.2.15.tgz}
-    id: registry.npmmirror.com/ant-design-vue/3.2.15
-    name: ant-design-vue
-    version: 3.2.15
-    engines: {node: '>=12.22.0'}
-    peerDependencies:
-      vue: '>=3.2.0'
-    dependencies:
-      '@ant-design/colors': registry.npmmirror.com/@ant-design/colors/6.0.0
-      '@ant-design/icons-vue': registry.npmmirror.com/@ant-design/icons-vue/6.1.0_vue@3.2.47
-      '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.21.0
-      '@ctrl/tinycolor': registry.npmmirror.com/@ctrl/tinycolor/3.6.0
-      '@simonwep/pickr': registry.npmmirror.com/@simonwep/pickr/1.8.2
-      array-tree-filter: registry.npmmirror.com/array-tree-filter/2.1.0
-      async-validator: registry.npmmirror.com/async-validator/4.2.5
-      dayjs: registry.npmmirror.com/dayjs/1.11.7
-      dom-align: registry.npmmirror.com/dom-align/1.12.4
-      dom-scroll-into-view: registry.npmmirror.com/dom-scroll-into-view/2.0.1
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      lodash-es: registry.npmmirror.com/lodash-es/4.17.21
-      resize-observer-polyfill: registry.npmmirror.com/resize-observer-polyfill/1.5.1
-      scroll-into-view-if-needed: registry.npmmirror.com/scroll-into-view-if-needed/2.2.31
-      shallow-equal: registry.npmmirror.com/shallow-equal/1.2.1
-      vue: registry.npmmirror.com/vue/3.2.47
-      vue-types: registry.npmmirror.com/vue-types/3.0.2_vue@3.2.47
-      warning: registry.npmmirror.com/warning/4.0.3
-    dev: false
-
-  registry.npmmirror.com/anymatch/3.1.3:
-    resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz}
-    name: anymatch
-    version: 3.1.3
-    engines: {node: '>= 8'}
-    dependencies:
-      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
-      picomatch: registry.npmmirror.com/picomatch/2.3.1
-    dev: true
-
-  registry.npmmirror.com/arg/4.1.3:
-    resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz}
-    name: arg
-    version: 4.1.3
-    dev: true
-
-  registry.npmmirror.com/argparse/1.0.10:
-    resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz}
-    name: argparse
-    version: 1.0.10
-    dependencies:
-      sprintf-js: registry.npmmirror.com/sprintf-js/1.0.3
-    dev: true
-
-  registry.npmmirror.com/argparse/2.0.1:
-    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz}
-    name: argparse
-    version: 2.0.1
-    dev: true
-
-  registry.npmmirror.com/arr-diff/4.0.0:
-    resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz}
-    name: arr-diff
-    version: 4.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/arr-flatten/1.1.0:
-    resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz}
-    name: arr-flatten
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/arr-union/3.1.0:
-    resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz}
-    name: arr-union
-    version: 3.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/array-differ/3.0.0:
-    resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-differ/-/array-differ-3.0.0.tgz}
-    name: array-differ
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/array-find-index/1.0.2:
-    resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-find-index/-/array-find-index-1.0.2.tgz}
-    name: array-find-index
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/array-ify/1.0.0:
-    resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-ify/-/array-ify-1.0.0.tgz}
-    name: array-ify
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/array-tree-filter/2.1.0:
-    resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz}
-    name: array-tree-filter
-    version: 2.1.0
-    dev: false
-
-  registry.npmmirror.com/array-union/2.1.0:
-    resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz}
-    name: array-union
-    version: 2.1.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/array-unique/0.3.2:
-    resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz}
-    name: array-unique
-    version: 0.3.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/arrify/1.0.1:
-    resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arrify/-/arrify-1.0.1.tgz}
-    name: arrify
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/arrify/2.0.1:
-    resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arrify/-/arrify-2.0.1.tgz}
-    name: arrify
-    version: 2.0.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/assign-symbols/1.0.0:
-    resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz}
-    name: assign-symbols
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/astral-regex/2.0.0:
-    resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz}
-    name: astral-regex
-    version: 2.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/async-validator/4.2.5:
-    resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz}
-    name: async-validator
-    version: 4.2.5
-    dev: false
-
-  registry.npmmirror.com/async/2.6.4:
-    resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async/-/async-2.6.4.tgz}
-    name: async
-    version: 2.6.4
-    dependencies:
-      lodash: registry.npmmirror.com/lodash/4.17.21
-    dev: true
-
-  registry.npmmirror.com/async/3.2.4:
-    resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async/-/async-3.2.4.tgz}
-    name: async
-    version: 3.2.4
-    dev: true
-
-  registry.npmmirror.com/asynckit/0.4.0:
-    resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz}
-    name: asynckit
-    version: 0.4.0
-    dev: true
-
-  registry.npmmirror.com/at-least-node/1.0.0:
-    resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz}
-    name: at-least-node
-    version: 1.0.0
-    engines: {node: '>= 4.0.0'}
-    dev: true
-
-  registry.npmmirror.com/atob/2.1.2:
-    resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz}
-    name: atob
-    version: 2.1.2
-    engines: {node: '>= 4.5.0'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/autoprefixer/10.4.13_postcss@8.4.21:
-    resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.13.tgz}
-    id: registry.npmmirror.com/autoprefixer/10.4.13
-    name: autoprefixer
-    version: 10.4.13
-    engines: {node: ^10 || ^12 || >=14}
-    hasBin: true
-    peerDependencies:
-      postcss: ^8.1.0
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.5
-      caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001460
-      fraction.js: registry.npmmirror.com/fraction.js/4.2.0
-      normalize-range: registry.npmmirror.com/normalize-range/0.1.2
-      picocolors: registry.npmmirror.com/picocolors/1.0.0
-      postcss: registry.npmmirror.com/postcss/8.4.21
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0
-    dev: true
-
-  registry.npmmirror.com/available-typed-arrays/1.0.5:
-    resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz}
-    name: available-typed-arrays
-    version: 1.0.5
-    engines: {node: '>= 0.4'}
-    dev: true
-
-  registry.npmmirror.com/axios/0.26.1:
-    resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz}
-    name: axios
-    version: 0.26.1
-    dependencies:
-      follow-redirects: registry.npmmirror.com/follow-redirects/1.15.2
-    transitivePeerDependencies:
-      - debug
-    dev: false
-
-  registry.npmmirror.com/axios/0.26.1_debug@4.3.4:
-    resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz}
-    id: registry.npmmirror.com/axios/0.26.1
-    name: axios
-    version: 0.26.1
-    dependencies:
-      follow-redirects: registry.npmmirror.com/follow-redirects/1.15.2_debug@4.3.4
-    transitivePeerDependencies:
-      - debug
-    dev: true
-
-  registry.npmmirror.com/axios/1.3.4_debug@4.3.4:
-    resolution: {integrity: sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-1.3.4.tgz}
-    id: registry.npmmirror.com/axios/1.3.4
-    name: axios
-    version: 1.3.4
-    dependencies:
-      follow-redirects: registry.npmmirror.com/follow-redirects/1.15.2
-      form-data: registry.npmmirror.com/form-data/4.0.0
-      proxy-from-env: registry.npmmirror.com/proxy-from-env/1.1.0
-    transitivePeerDependencies:
-      - debug
-    dev: true
-
-  registry.npmmirror.com/babel-jest/27.5.1_@babel+core@7.21.0:
-    resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-jest/-/babel-jest-27.5.1.tgz}
-    id: registry.npmmirror.com/babel-jest/27.5.1
-    name: babel-jest
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    peerDependencies:
-      '@babel/core': ^7.8.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@jest/transform': registry.npmmirror.com/@jest/transform/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/babel__core': registry.npmmirror.com/@types/babel__core/7.20.0
-      babel-plugin-istanbul: registry.npmmirror.com/babel-plugin-istanbul/6.1.1
-      babel-preset-jest: registry.npmmirror.com/babel-preset-jest/27.5.1_@babel+core@7.21.0
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      graceful-fs: 4.2.10
-      slash: registry.npmmirror.com/slash/3.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/babel-plugin-istanbul/6.1.1:
-    resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz}
-    name: babel-plugin-istanbul
-    version: 6.1.1
-    engines: {node: '>=8'}
-    dependencies:
-      '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2
-      '@istanbuljs/load-nyc-config': registry.npmmirror.com/@istanbuljs/load-nyc-config/1.1.0
-      '@istanbuljs/schema': registry.npmmirror.com/@istanbuljs/schema/0.1.3
-      istanbul-lib-instrument: registry.npmmirror.com/istanbul-lib-instrument/5.2.1
-      test-exclude: registry.npmmirror.com/test-exclude/6.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/babel-plugin-jest-hoist/27.5.1:
-    resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz}
-    name: babel-plugin-jest-hoist
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@babel/template': registry.npmmirror.com/@babel/template/7.20.7
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-      '@types/babel__core': registry.npmmirror.com/@types/babel__core/7.20.0
-      '@types/babel__traverse': registry.npmmirror.com/@types/babel__traverse/7.18.3
-    dev: true
-
-  registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.0:
-    resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz}
-    id: registry.npmmirror.com/babel-plugin-polyfill-corejs2/0.3.3
-    name: babel-plugin-polyfill-corejs2
-    version: 0.3.3
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.21.0
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.0
-      semver: 6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.0:
-    resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz}
-    id: registry.npmmirror.com/babel-plugin-polyfill-corejs3/0.6.0
-    name: babel-plugin-polyfill-corejs3
-    version: 0.6.0
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.0
-      core-js-compat: registry.npmmirror.com/core-js-compat/3.29.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.0:
-    resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz}
-    id: registry.npmmirror.com/babel-plugin-polyfill-regenerator/0.4.1
-    name: babel-plugin-polyfill-regenerator
-    version: 0.4.1
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/helper-define-polyfill-provider': registry.npmmirror.com/@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/babel-plugin-transform-runtime/6.23.0:
-    resolution: {integrity: sha512-cpGMVC1vt/772y3jx1gwSaTitQVZuFDlllgreMsZ+rTYC6jlYXRyf5FQOgSnckOiA5QmzbXTyBY2A5AmZXF1fA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz}
-    name: babel-plugin-transform-runtime
-    version: 6.23.0
-    dependencies:
-      babel-runtime: registry.npmmirror.com/babel-runtime/6.26.0
-    dev: false
-
-  registry.npmmirror.com/babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.0:
-    resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz}
-    id: registry.npmmirror.com/babel-preset-current-node-syntax/1.0.1
-    name: babel-preset-current-node-syntax
-    version: 1.0.1
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/plugin-syntax-async-generators': registry.npmmirror.com/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.0
-      '@babel/plugin-syntax-bigint': registry.npmmirror.com/@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-class-properties': registry.npmmirror.com/@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.0
-      '@babel/plugin-syntax-import-meta': registry.npmmirror.com/@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.0
-      '@babel/plugin-syntax-json-strings': registry.npmmirror.com/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-logical-assignment-operators': registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.0
-      '@babel/plugin-syntax-nullish-coalescing-operator': registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-numeric-separator': registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.0
-      '@babel/plugin-syntax-object-rest-spread': registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-optional-catch-binding': registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-optional-chaining': registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.0
-      '@babel/plugin-syntax-top-level-await': registry.npmmirror.com/@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/babel-preset-jest/27.5.1_@babel+core@7.21.0:
-    resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz}
-    id: registry.npmmirror.com/babel-preset-jest/27.5.1
-    name: babel-preset-jest
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      babel-plugin-jest-hoist: registry.npmmirror.com/babel-plugin-jest-hoist/27.5.1
-      babel-preset-current-node-syntax: registry.npmmirror.com/babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.0
-    dev: true
-
-  registry.npmmirror.com/babel-runtime/6.26.0:
-    resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz}
-    name: babel-runtime
-    version: 6.26.0
-    dependencies:
-      core-js: registry.npmmirror.com/core-js/2.6.12
-      regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.11.1
-    dev: false
-
-  registry.npmmirror.com/balanced-match/1.0.2:
-    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz}
-    name: balanced-match
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/balanced-match/2.0.0:
-    resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-2.0.0.tgz}
-    name: balanced-match
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/base/0.11.2:
-    resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/base/-/base-0.11.2.tgz}
-    name: base
-    version: 0.11.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      cache-base: registry.npmmirror.com/cache-base/1.0.1
-      class-utils: registry.npmmirror.com/class-utils/0.3.6
-      component-emitter: registry.npmmirror.com/component-emitter/1.3.0
-      define-property: registry.npmmirror.com/define-property/1.0.0
-      isobject: registry.npmmirror.com/isobject/3.0.1
-      mixin-deep: registry.npmmirror.com/mixin-deep/1.3.2
-      pascalcase: registry.npmmirror.com/pascalcase/0.1.1
-    dev: true
-
-  registry.npmmirror.com/base64-js/1.5.1:
-    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz}
-    name: base64-js
-    version: 1.5.1
-    dev: true
-
-  registry.npmmirror.com/basic-auth/2.0.1:
-    resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/basic-auth/-/basic-auth-2.0.1.tgz}
-    name: basic-auth
-    version: 2.0.1
-    engines: {node: '>= 0.8'}
-    dependencies:
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.1.2
-    dev: true
-
-  registry.npmmirror.com/before-after-hook/2.2.3:
-    resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/before-after-hook/-/before-after-hook-2.2.3.tgz}
-    name: before-after-hook
-    version: 2.2.3
-    dev: true
-
-  registry.npmmirror.com/big.js/5.2.2:
-    resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz}
-    name: big.js
-    version: 5.2.2
-    dev: true
-
-  registry.npmmirror.com/bin-build/3.0.0:
-    resolution: {integrity: sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bin-build/-/bin-build-3.0.0.tgz}
-    name: bin-build
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      decompress: registry.npmmirror.com/decompress/4.2.1
-      download: registry.npmmirror.com/download/6.2.5
-      execa: registry.npmmirror.com/execa/0.7.0
-      p-map-series: registry.npmmirror.com/p-map-series/1.0.0
-      tempfile: registry.npmmirror.com/tempfile/2.0.0
-    dev: true
-
-  registry.npmmirror.com/binary-extensions/2.2.0:
-    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz}
-    name: binary-extensions
-    version: 2.2.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/bl/4.1.0:
-    resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz}
-    name: bl
-    version: 4.1.0
-    dependencies:
-      buffer: registry.npmmirror.com/buffer/5.7.1
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      readable-stream: registry.npmmirror.com/readable-stream/3.6.1
-    dev: true
-
-  registry.npmmirror.com/bluebird/3.7.2:
-    resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz}
-    name: bluebird
-    version: 3.7.2
-    dev: true
-
-  registry.npmmirror.com/boolbase/1.0.0:
-    resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz}
-    name: boolbase
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/brace-expansion/1.1.11:
-    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz}
-    name: brace-expansion
-    version: 1.1.11
-    dependencies:
-      balanced-match: registry.npmmirror.com/balanced-match/1.0.2
-      concat-map: registry.npmmirror.com/concat-map/0.0.1
-    dev: true
-
-  registry.npmmirror.com/brace-expansion/2.0.1:
-    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz}
-    name: brace-expansion
-    version: 2.0.1
-    dependencies:
-      balanced-match: registry.npmmirror.com/balanced-match/1.0.2
-    dev: true
-
-  registry.npmmirror.com/braces/2.3.2:
-    resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz}
-    name: braces
-    version: 2.3.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-flatten: registry.npmmirror.com/arr-flatten/1.1.0
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      fill-range: registry.npmmirror.com/fill-range/4.0.0
-      isobject: registry.npmmirror.com/isobject/3.0.1
-      repeat-element: registry.npmmirror.com/repeat-element/1.1.4
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2
-      snapdragon-node: registry.npmmirror.com/snapdragon-node/2.1.1
-      split-string: registry.npmmirror.com/split-string/3.1.0
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/braces/3.0.2:
-    resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz}
-    name: braces
-    version: 3.0.2
-    engines: {node: '>=8'}
-    dependencies:
-      fill-range: registry.npmmirror.com/fill-range/7.0.1
-    dev: true
-
-  registry.npmmirror.com/browser-process-hrtime/1.0.0:
-    resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz}
-    name: browser-process-hrtime
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/browserslist/4.21.5:
-    resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserslist/-/browserslist-4.21.5.tgz}
-    name: browserslist
-    version: 4.21.5
-    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
-    hasBin: true
-    dependencies:
-      caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001460
-      electron-to-chromium: registry.npmmirror.com/electron-to-chromium/1.4.320
-      node-releases: registry.npmmirror.com/node-releases/2.0.10
-      update-browserslist-db: registry.npmmirror.com/update-browserslist-db/1.0.10_browserslist@4.21.5
-    dev: true
-
-  registry.npmmirror.com/bs-logger/0.2.6:
-    resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bs-logger/-/bs-logger-0.2.6.tgz}
-    name: bs-logger
-    version: 0.2.6
-    engines: {node: '>= 6'}
-    dependencies:
-      fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0
-    dev: true
-
-  registry.npmmirror.com/bser/2.1.1:
-    resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bser/-/bser-2.1.1.tgz}
-    name: bser
-    version: 2.1.1
-    dependencies:
-      node-int64: registry.npmmirror.com/node-int64/0.4.0
-    dev: true
-
-  registry.npmmirror.com/buffer-from/1.1.2:
-    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz}
-    name: buffer-from
-    version: 1.1.2
-    dev: true
-
-  registry.npmmirror.com/buffer/5.7.1:
-    resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz}
-    name: buffer
-    version: 5.7.1
-    dependencies:
-      base64-js: registry.npmmirror.com/base64-js/1.5.1
-      ieee754: registry.npmmirror.com/ieee754/1.2.1
-    dev: true
-
-  registry.npmmirror.com/builtin-modules/3.3.0:
-    resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz}
-    name: builtin-modules
-    version: 3.3.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/builtins/4.1.0:
-    resolution: {integrity: sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/builtins/-/builtins-4.1.0.tgz}
-    name: builtins
-    version: 4.1.0
-    dependencies:
-      semver: registry.npmmirror.com/semver/7.3.8
-    dev: true
-
-  registry.npmmirror.com/cache-base/1.0.1:
-    resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz}
-    name: cache-base
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      collection-visit: registry.npmmirror.com/collection-visit/1.0.0
-      component-emitter: registry.npmmirror.com/component-emitter/1.3.0
-      get-value: registry.npmmirror.com/get-value/2.0.6
-      has-value: registry.npmmirror.com/has-value/1.0.0
-      isobject: registry.npmmirror.com/isobject/3.0.1
-      set-value: registry.npmmirror.com/set-value/2.0.1
-      to-object-path: registry.npmmirror.com/to-object-path/0.3.0
-      union-value: registry.npmmirror.com/union-value/1.0.1
-      unset-value: registry.npmmirror.com/unset-value/1.0.0
-    dev: true
-
-  registry.npmmirror.com/cachedir/2.3.0:
-    resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cachedir/-/cachedir-2.3.0.tgz}
-    name: cachedir
-    version: 2.3.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/call-bind/1.0.2:
-    resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz}
-    name: call-bind
-    version: 1.0.2
-    dependencies:
-      function-bind: registry.npmmirror.com/function-bind/1.1.1
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.2.0
-
-  registry.npmmirror.com/callsites/3.1.0:
-    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz}
-    name: callsites
-    version: 3.1.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/camel-case/4.1.2:
-    resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz}
-    name: camel-case
-    version: 4.1.2
-    dependencies:
-      pascal-case: registry.npmmirror.com/pascal-case/3.1.2
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/camelcase-keys/2.1.0:
-    resolution: {integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz}
-    name: camelcase-keys
-    version: 2.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      camelcase: registry.npmmirror.com/camelcase/2.1.1
-      map-obj: registry.npmmirror.com/map-obj/1.0.1
-    dev: true
-
-  registry.npmmirror.com/camelcase-keys/6.2.2:
-    resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz}
-    name: camelcase-keys
-    version: 6.2.2
-    engines: {node: '>=8'}
-    dependencies:
-      camelcase: registry.npmmirror.com/camelcase/5.3.1
-      map-obj: registry.npmmirror.com/map-obj/4.3.0
-      quick-lru: registry.npmmirror.com/quick-lru/4.0.1
-    dev: true
-
-  registry.npmmirror.com/camelcase/2.1.1:
-    resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-2.1.1.tgz}
-    name: camelcase
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/camelcase/5.3.1:
-    resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz}
-    name: camelcase
-    version: 5.3.1
-    engines: {node: '>=6'}
-
-  registry.npmmirror.com/camelcase/6.3.0:
-    resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz}
-    name: camelcase
-    version: 6.3.0
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/caniuse-lite/1.0.30001460:
-    resolution: {integrity: sha512-Bud7abqjvEjipUkpLs4D7gR0l8hBYBHoa+tGtKJHvT2AYzLp1z7EmVkUT4ERpVUfca8S2HGIVs883D8pUH1ZzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001460.tgz}
-    name: caniuse-lite
-    version: 1.0.30001460
-    dev: true
-
-  registry.npmmirror.com/capital-case/1.0.4:
-    resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/capital-case/-/capital-case-1.0.4.tgz}
-    name: capital-case
-    version: 1.0.4
-    dependencies:
-      no-case: registry.npmmirror.com/no-case/3.0.4
-      tslib: registry.npmmirror.com/tslib/2.5.0
-      upper-case-first: registry.npmmirror.com/upper-case-first/2.0.2
-    dev: true
-
-  registry.npmmirror.com/chalk/1.1.3:
-    resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz}
-    name: chalk
-    version: 1.1.3
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/2.2.1
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
-      has-ansi: registry.npmmirror.com/has-ansi/2.0.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/3.0.1
-      supports-color: registry.npmmirror.com/supports-color/2.0.0
-    dev: true
-
-  registry.npmmirror.com/chalk/2.4.2:
-    resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz}
-    name: chalk
-    version: 2.4.2
-    engines: {node: '>=4'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
-      supports-color: registry.npmmirror.com/supports-color/5.5.0
-    dev: true
-
-  registry.npmmirror.com/chalk/3.0.0:
-    resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz}
-    name: chalk
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0
-      supports-color: registry.npmmirror.com/supports-color/7.2.0
-    dev: true
-
-  registry.npmmirror.com/chalk/4.1.2:
-    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz}
-    name: chalk
-    version: 4.1.2
-    engines: {node: '>=10'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0
-      supports-color: registry.npmmirror.com/supports-color/7.2.0
-    dev: true
-
-  registry.npmmirror.com/change-case/4.1.2:
-    resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/change-case/-/change-case-4.1.2.tgz}
-    name: change-case
-    version: 4.1.2
-    dependencies:
-      camel-case: registry.npmmirror.com/camel-case/4.1.2
-      capital-case: registry.npmmirror.com/capital-case/1.0.4
-      constant-case: registry.npmmirror.com/constant-case/3.0.4
-      dot-case: registry.npmmirror.com/dot-case/3.0.4
-      header-case: registry.npmmirror.com/header-case/2.0.4
-      no-case: registry.npmmirror.com/no-case/3.0.4
-      param-case: registry.npmmirror.com/param-case/3.0.4
-      pascal-case: registry.npmmirror.com/pascal-case/3.1.2
-      path-case: registry.npmmirror.com/path-case/3.0.4
-      sentence-case: registry.npmmirror.com/sentence-case/3.0.4
-      snake-case: registry.npmmirror.com/snake-case/3.0.4
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/char-regex/1.0.2:
-    resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/char-regex/-/char-regex-1.0.2.tgz}
-    name: char-regex
-    version: 1.0.2
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/character-parser/2.2.0:
-    resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/character-parser/-/character-parser-2.2.0.tgz}
-    name: character-parser
-    version: 2.2.0
-    dependencies:
-      is-regex: registry.npmmirror.com/is-regex/1.1.4
-    dev: true
-
-  registry.npmmirror.com/chardet/0.7.0:
-    resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz}
-    name: chardet
-    version: 0.7.0
-    dev: true
-
-  registry.npmmirror.com/charenc/0.0.2:
-    resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/charenc/-/charenc-0.0.2.tgz}
-    name: charenc
-    version: 0.0.2
-    dev: false
-
-  registry.npmmirror.com/china-area-data/5.0.1:
-    resolution: {integrity: sha512-BQDPpiv5Nn+018ekcJK2oSD9PAD+E1bvXB0wgabc//dFVS/KvRqCgg0QOEUt3vBkx9XzB5a9BmkJCEZDBxVjVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/china-area-data/-/china-area-data-5.0.1.tgz}
-    name: china-area-data
-    version: 5.0.1
-    dev: false
-
-  registry.npmmirror.com/chokidar/3.5.3:
-    resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz}
-    name: chokidar
-    version: 3.5.3
-    engines: {node: '>= 8.10.0'}
-    dependencies:
-      anymatch: registry.npmmirror.com/anymatch/3.1.3
-      braces: registry.npmmirror.com/braces/3.0.2
-      glob-parent: registry.npmmirror.com/glob-parent/5.1.2
-      is-binary-path: registry.npmmirror.com/is-binary-path/2.1.0
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
-      readdirp: registry.npmmirror.com/readdirp/3.6.0
-    optionalDependencies:
-      fsevents: 2.3.2
-    dev: true
-
-  registry.npmmirror.com/ci-info/3.8.0:
-    resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ci-info/-/ci-info-3.8.0.tgz}
-    name: ci-info
-    version: 3.8.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/cjs-module-lexer/1.2.2:
-    resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz}
-    name: cjs-module-lexer
-    version: 1.2.2
-    dev: true
-
-  registry.npmmirror.com/class-utils/0.3.6:
-    resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz}
-    name: class-utils
-    version: 0.3.6
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-union: registry.npmmirror.com/arr-union/3.1.0
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      isobject: registry.npmmirror.com/isobject/3.0.1
-      static-extend: registry.npmmirror.com/static-extend/0.1.2
-    dev: true
-
-  registry.npmmirror.com/clean-css/5.3.2:
-    resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clean-css/-/clean-css-5.3.2.tgz}
-    name: clean-css
-    version: 5.3.2
-    engines: {node: '>= 10.0'}
-    dependencies:
-      source-map: 0.6.1
-    dev: true
-
-  registry.npmmirror.com/clean-stack/2.2.0:
-    resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz}
-    name: clean-stack
-    version: 2.2.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/cli-cursor/3.1.0:
-    resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz}
-    name: cli-cursor
-    version: 3.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      restore-cursor: registry.npmmirror.com/restore-cursor/3.1.0
-    dev: true
-
-  registry.npmmirror.com/cli-spinners/2.7.0:
-    resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.7.0.tgz}
-    name: cli-spinners
-    version: 2.7.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/cli-truncate/2.1.0:
-    resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz}
-    name: cli-truncate
-    version: 2.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      slice-ansi: registry.npmmirror.com/slice-ansi/3.0.0
-      string-width: registry.npmmirror.com/string-width/4.2.3
-    dev: true
-
-  registry.npmmirror.com/cli-truncate/3.1.0:
-    resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-truncate/-/cli-truncate-3.1.0.tgz}
-    name: cli-truncate
-    version: 3.1.0
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    dependencies:
-      slice-ansi: registry.npmmirror.com/slice-ansi/5.0.0
-      string-width: registry.npmmirror.com/string-width/5.1.2
-    dev: true
-
-  registry.npmmirror.com/cli-width/3.0.0:
-    resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz}
-    name: cli-width
-    version: 3.0.0
-    engines: {node: '>= 10'}
-    dev: true
-
-  registry.npmmirror.com/clipboard/2.0.11:
-    resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz}
-    name: clipboard
-    version: 2.0.11
-    dependencies:
-      good-listener: registry.npmmirror.com/good-listener/1.2.2
-      select: registry.npmmirror.com/select/1.1.2
-      tiny-emitter: registry.npmmirror.com/tiny-emitter/2.1.0
-    dev: false
-
-  registry.npmmirror.com/cliui/6.0.0:
-    resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz}
-    name: cliui
-    version: 6.0.0
-    dependencies:
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-      wrap-ansi: registry.npmmirror.com/wrap-ansi/6.2.0
-    dev: false
-
-  registry.npmmirror.com/cliui/7.0.4:
-    resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz}
-    name: cliui
-    version: 7.0.4
-    dependencies:
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-      wrap-ansi: registry.npmmirror.com/wrap-ansi/7.0.0
-    dev: true
-
-  registry.npmmirror.com/cliui/8.0.1:
-    resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz}
-    name: cliui
-    version: 8.0.1
-    engines: {node: '>=12'}
-    dependencies:
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-      wrap-ansi: registry.npmmirror.com/wrap-ansi/7.0.0
-    dev: true
-
-  registry.npmmirror.com/clone/1.0.4:
-    resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz}
-    name: clone
-    version: 1.0.4
-    engines: {node: '>=0.8'}
-    dev: true
-
-  registry.npmmirror.com/clone/2.1.2:
-    resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz}
-    name: clone
-    version: 2.1.2
-    engines: {node: '>=0.8'}
-    dev: true
-
-  registry.npmmirror.com/co/4.6.0:
-    resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/co/-/co-4.6.0.tgz}
-    name: co
-    version: 4.6.0
-    engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
-    dev: true
-
-  registry.npmmirror.com/codemirror/5.65.12:
-    resolution: {integrity: sha512-z2jlHBocElRnPYysN2HAuhXbO3DNB0bcSKmNz3hcWR2Js2Dkhc1bEOxG93Z3DeUrnm+qx56XOY5wQmbP5KY0sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/codemirror/-/codemirror-5.65.12.tgz}
-    name: codemirror
-    version: 5.65.12
-    dev: false
-
-  registry.npmmirror.com/collect-v8-coverage/1.0.1:
-    resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz}
-    name: collect-v8-coverage
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/collection-visit/1.0.0:
-    resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz}
-    name: collection-visit
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      map-visit: registry.npmmirror.com/map-visit/1.0.0
-      object-visit: registry.npmmirror.com/object-visit/1.0.1
-    dev: true
-
-  registry.npmmirror.com/color-convert/1.9.3:
-    resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz}
-    name: color-convert
-    version: 1.9.3
-    dependencies:
-      color-name: registry.npmmirror.com/color-name/1.1.3
-    dev: true
-
-  registry.npmmirror.com/color-convert/2.0.1:
-    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz}
-    name: color-convert
-    version: 2.0.1
-    engines: {node: '>=7.0.0'}
-    dependencies:
-      color-name: registry.npmmirror.com/color-name/1.1.4
-
-  registry.npmmirror.com/color-name/1.1.3:
-    resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz}
-    name: color-name
-    version: 1.1.3
-    dev: true
-
-  registry.npmmirror.com/color-name/1.1.4:
-    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz}
-    name: color-name
-    version: 1.1.4
-
-  registry.npmmirror.com/colord/2.9.3:
-    resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz}
-    name: colord
-    version: 2.9.3
-    dev: true
-
-  registry.npmmirror.com/colorette/2.0.19:
-    resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/colorette/-/colorette-2.0.19.tgz}
-    name: colorette
-    version: 2.0.19
-    dev: true
-
-  registry.npmmirror.com/combined-stream/1.0.8:
-    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz}
-    name: combined-stream
-    version: 1.0.8
-    engines: {node: '>= 0.8'}
-    dependencies:
-      delayed-stream: registry.npmmirror.com/delayed-stream/1.0.0
-    dev: true
-
-  registry.npmmirror.com/commander/10.0.0:
-    resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-10.0.0.tgz}
-    name: commander
-    version: 10.0.0
-    engines: {node: '>=14'}
-
-  registry.npmmirror.com/commander/2.20.3:
-    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz}
-    name: commander
-    version: 2.20.3
-
-  registry.npmmirror.com/commander/7.2.0:
-    resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz}
-    name: commander
-    version: 7.2.0
-    engines: {node: '>= 10'}
-    dev: true
-
-  registry.npmmirror.com/commander/8.3.0:
-    resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz}
-    name: commander
-    version: 8.3.0
-    engines: {node: '>= 12'}
-    dev: true
-
-  registry.npmmirror.com/commander/9.5.0:
-    resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-9.5.0.tgz}
-    name: commander
-    version: 9.5.0
-    engines: {node: ^12.20.0 || >=14}
-    dev: false
-
-  registry.npmmirror.com/commitizen/4.3.0:
-    resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commitizen/-/commitizen-4.3.0.tgz}
-    name: commitizen
-    version: 4.3.0
-    engines: {node: '>= 12'}
-    hasBin: true
-    dependencies:
-      cachedir: registry.npmmirror.com/cachedir/2.3.0
-      cz-conventional-changelog: registry.npmmirror.com/cz-conventional-changelog/3.3.0
-      dedent: registry.npmmirror.com/dedent/0.7.0
-      detect-indent: registry.npmmirror.com/detect-indent/6.1.0
-      find-node-modules: registry.npmmirror.com/find-node-modules/2.1.3
-      find-root: registry.npmmirror.com/find-root/1.1.0
-      fs-extra: registry.npmmirror.com/fs-extra/9.1.0
-      glob: registry.npmmirror.com/glob/7.2.3
-      inquirer: registry.npmmirror.com/inquirer/8.2.5
-      is-utf8: registry.npmmirror.com/is-utf8/0.2.1
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      minimist: registry.npmmirror.com/minimist/1.2.7
-      strip-bom: registry.npmmirror.com/strip-bom/4.0.0
-      strip-json-comments: registry.npmmirror.com/strip-json-comments/3.1.1
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-    dev: true
-
-  registry.npmmirror.com/common-tags/1.8.2:
-    resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/common-tags/-/common-tags-1.8.2.tgz}
-    name: common-tags
-    version: 1.8.2
-    engines: {node: '>=4.0.0'}
-    dev: true
-
-  registry.npmmirror.com/compare-func/2.0.0:
-    resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/compare-func/-/compare-func-2.0.0.tgz}
-    name: compare-func
-    version: 2.0.0
-    dependencies:
-      array-ify: registry.npmmirror.com/array-ify/1.0.0
-      dot-prop: registry.npmmirror.com/dot-prop/5.3.0
-    dev: true
-
-  registry.npmmirror.com/component-emitter/1.3.0:
-    resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz}
-    name: component-emitter
-    version: 1.3.0
-    dev: true
-
-  registry.npmmirror.com/compute-scroll-into-view/1.0.20:
-    resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz}
-    name: compute-scroll-into-view
-    version: 1.0.20
-    dev: false
-
-  registry.npmmirror.com/concat-map/0.0.1:
-    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz}
-    name: concat-map
-    version: 0.0.1
-    dev: true
-
-  registry.npmmirror.com/config-chain/1.1.13:
-    resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz}
-    name: config-chain
-    version: 1.1.13
-    dependencies:
-      ini: registry.npmmirror.com/ini/1.3.8
-      proto-list: registry.npmmirror.com/proto-list/1.2.4
-    dev: true
-
-  registry.npmmirror.com/connect-history-api-fallback/1.6.0:
-    resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz}
-    name: connect-history-api-fallback
-    version: 1.6.0
-    engines: {node: '>=0.8'}
-    dev: true
-
-  registry.npmmirror.com/connect/3.7.0:
-    resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/connect/-/connect-3.7.0.tgz}
-    name: connect
-    version: 3.7.0
-    engines: {node: '>= 0.10.0'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/2.6.9
-      finalhandler: registry.npmmirror.com/finalhandler/1.1.2
-      parseurl: registry.npmmirror.com/parseurl/1.3.3
-      utils-merge: registry.npmmirror.com/utils-merge/1.0.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/consola/2.15.3:
-    resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz}
-    name: consola
-    version: 2.15.3
-    dev: true
-
-  registry.npmmirror.com/console-stream/0.1.1:
-    resolution: {integrity: sha512-QC/8l9e6ofi6nqZ5PawlDgzmMw3OxIXtvolBzap/F4UDBJlDaZRSNbL/lb41C29FcbSJncBFlJFj2WJoNyZRfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/console-stream/-/console-stream-0.1.1.tgz}
-    name: console-stream
-    version: 0.1.1
-    dev: true
-
-  registry.npmmirror.com/console/0.7.2:
-    resolution: {integrity: sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/console/-/console-0.7.2.tgz}
-    name: console
-    version: 0.7.2
-    dev: true
-
-  registry.npmmirror.com/constant-case/3.0.4:
-    resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/constant-case/-/constant-case-3.0.4.tgz}
-    name: constant-case
-    version: 3.0.4
-    dependencies:
-      no-case: registry.npmmirror.com/no-case/3.0.4
-      tslib: registry.npmmirror.com/tslib/2.5.0
-      upper-case: registry.npmmirror.com/upper-case/2.0.2
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-angular/5.0.13:
-    resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz}
-    name: conventional-changelog-angular
-    version: 5.0.13
-    engines: {node: '>=10'}
-    dependencies:
-      compare-func: registry.npmmirror.com/compare-func/2.0.0
-      q: registry.npmmirror.com/q/1.5.1
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-atom/2.0.8:
-    resolution: {integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz}
-    name: conventional-changelog-atom
-    version: 2.0.8
-    engines: {node: '>=10'}
-    dependencies:
-      q: registry.npmmirror.com/q/1.5.1
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-cli/2.2.2:
-    resolution: {integrity: sha512-8grMV5Jo8S0kP3yoMeJxV2P5R6VJOqK72IiSV9t/4H5r/HiRqEBQ83bYGuz4Yzfdj4bjaAEhZN/FFbsFXr5bOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-cli/-/conventional-changelog-cli-2.2.2.tgz}
-    name: conventional-changelog-cli
-    version: 2.2.2
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      add-stream: registry.npmmirror.com/add-stream/1.0.0
-      conventional-changelog: registry.npmmirror.com/conventional-changelog/3.1.25
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      meow: registry.npmmirror.com/meow/8.1.2
-      tempfile: registry.npmmirror.com/tempfile/3.0.0
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-codemirror/2.0.8:
-    resolution: {integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz}
-    name: conventional-changelog-codemirror
-    version: 2.0.8
-    engines: {node: '>=10'}
-    dependencies:
-      q: registry.npmmirror.com/q/1.5.1
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-conventionalcommits/4.6.3:
-    resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz}
-    name: conventional-changelog-conventionalcommits
-    version: 4.6.3
-    engines: {node: '>=10'}
-    dependencies:
-      compare-func: registry.npmmirror.com/compare-func/2.0.0
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      q: registry.npmmirror.com/q/1.5.1
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-core/4.2.4:
-    resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz}
-    name: conventional-changelog-core
-    version: 4.2.4
-    engines: {node: '>=10'}
-    dependencies:
-      add-stream: registry.npmmirror.com/add-stream/1.0.0
-      conventional-changelog-writer: registry.npmmirror.com/conventional-changelog-writer/5.0.1
-      conventional-commits-parser: registry.npmmirror.com/conventional-commits-parser/3.2.4
-      dateformat: registry.npmmirror.com/dateformat/3.0.3
-      get-pkg-repo: registry.npmmirror.com/get-pkg-repo/4.2.1
-      git-raw-commits: registry.npmmirror.com/git-raw-commits/2.0.11
-      git-remote-origin-url: registry.npmmirror.com/git-remote-origin-url/2.0.0
-      git-semver-tags: registry.npmmirror.com/git-semver-tags/4.1.1
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      normalize-package-data: registry.npmmirror.com/normalize-package-data/3.0.3
-      q: registry.npmmirror.com/q/1.5.1
-      read-pkg: registry.npmmirror.com/read-pkg/3.0.0
-      read-pkg-up: registry.npmmirror.com/read-pkg-up/3.0.0
-      through2: registry.npmmirror.com/through2/4.0.2
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-ember/2.0.9:
-    resolution: {integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz}
-    name: conventional-changelog-ember
-    version: 2.0.9
-    engines: {node: '>=10'}
-    dependencies:
-      q: registry.npmmirror.com/q/1.5.1
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-eslint/3.0.9:
-    resolution: {integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz}
-    name: conventional-changelog-eslint
-    version: 3.0.9
-    engines: {node: '>=10'}
-    dependencies:
-      q: registry.npmmirror.com/q/1.5.1
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-express/2.0.6:
-    resolution: {integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz}
-    name: conventional-changelog-express
-    version: 2.0.6
-    engines: {node: '>=10'}
-    dependencies:
-      q: registry.npmmirror.com/q/1.5.1
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-jquery/3.0.11:
-    resolution: {integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz}
-    name: conventional-changelog-jquery
-    version: 3.0.11
-    engines: {node: '>=10'}
-    dependencies:
-      q: registry.npmmirror.com/q/1.5.1
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-jshint/2.0.9:
-    resolution: {integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz}
-    name: conventional-changelog-jshint
-    version: 2.0.9
-    engines: {node: '>=10'}
-    dependencies:
-      compare-func: registry.npmmirror.com/compare-func/2.0.0
-      q: registry.npmmirror.com/q/1.5.1
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-preset-loader/2.3.4:
-    resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz}
-    name: conventional-changelog-preset-loader
-    version: 2.3.4
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog-writer/5.0.1:
-    resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz}
-    name: conventional-changelog-writer
-    version: 5.0.1
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      conventional-commits-filter: registry.npmmirror.com/conventional-commits-filter/2.0.7
-      dateformat: registry.npmmirror.com/dateformat/3.0.3
-      handlebars: registry.npmmirror.com/handlebars/4.7.7
-      json-stringify-safe: registry.npmmirror.com/json-stringify-safe/5.0.1
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      meow: registry.npmmirror.com/meow/8.1.2
-      semver: registry.npmmirror.com/semver/6.3.0
-      split: registry.npmmirror.com/split/1.0.1
-      through2: registry.npmmirror.com/through2/4.0.2
-    dev: true
-
-  registry.npmmirror.com/conventional-changelog/3.1.25:
-    resolution: {integrity: sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-changelog/-/conventional-changelog-3.1.25.tgz}
-    name: conventional-changelog
-    version: 3.1.25
-    engines: {node: '>=10'}
-    dependencies:
-      conventional-changelog-angular: registry.npmmirror.com/conventional-changelog-angular/5.0.13
-      conventional-changelog-atom: registry.npmmirror.com/conventional-changelog-atom/2.0.8
-      conventional-changelog-codemirror: registry.npmmirror.com/conventional-changelog-codemirror/2.0.8
-      conventional-changelog-conventionalcommits: registry.npmmirror.com/conventional-changelog-conventionalcommits/4.6.3
-      conventional-changelog-core: registry.npmmirror.com/conventional-changelog-core/4.2.4
-      conventional-changelog-ember: registry.npmmirror.com/conventional-changelog-ember/2.0.9
-      conventional-changelog-eslint: registry.npmmirror.com/conventional-changelog-eslint/3.0.9
-      conventional-changelog-express: registry.npmmirror.com/conventional-changelog-express/2.0.6
-      conventional-changelog-jquery: registry.npmmirror.com/conventional-changelog-jquery/3.0.11
-      conventional-changelog-jshint: registry.npmmirror.com/conventional-changelog-jshint/2.0.9
-      conventional-changelog-preset-loader: registry.npmmirror.com/conventional-changelog-preset-loader/2.3.4
-    dev: true
-
-  registry.npmmirror.com/conventional-commit-types/3.0.0:
-    resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz}
-    name: conventional-commit-types
-    version: 3.0.0
-    dev: true
-
-  registry.npmmirror.com/conventional-commits-filter/2.0.7:
-    resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz}
-    name: conventional-commits-filter
-    version: 2.0.7
-    engines: {node: '>=10'}
-    dependencies:
-      lodash.ismatch: registry.npmmirror.com/lodash.ismatch/4.4.0
-      modify-values: registry.npmmirror.com/modify-values/1.0.1
-    dev: true
-
-  registry.npmmirror.com/conventional-commits-parser/3.2.4:
-    resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz}
-    name: conventional-commits-parser
-    version: 3.2.4
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      JSONStream: registry.npmmirror.com/JSONStream/1.3.5
-      is-text-path: registry.npmmirror.com/is-text-path/1.0.1
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      meow: registry.npmmirror.com/meow/8.1.2
-      split2: registry.npmmirror.com/split2/3.2.2
-      through2: registry.npmmirror.com/through2/4.0.2
-    dev: true
-
-  registry.npmmirror.com/convert-source-map/1.9.0:
-    resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz}
-    name: convert-source-map
-    version: 1.9.0
-    dev: true
-
-  registry.npmmirror.com/copy-anything/2.0.6:
-    resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz}
-    name: copy-anything
-    version: 2.0.6
-    dependencies:
-      is-what: registry.npmmirror.com/is-what/3.14.1
-    dev: true
-
-  registry.npmmirror.com/copy-descriptor/0.1.1:
-    resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz}
-    name: copy-descriptor
-    version: 0.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/core-js-compat/3.29.0:
-    resolution: {integrity: sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.29.0.tgz}
-    name: core-js-compat
-    version: 3.29.0
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.5
-    dev: true
-
-  registry.npmmirror.com/core-js/2.6.12:
-    resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz}
-    name: core-js
-    version: 2.6.12
-    deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
-    requiresBuild: true
-    dev: false
-
-  registry.npmmirror.com/core-js/3.29.0:
-    resolution: {integrity: sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js/-/core-js-3.29.0.tgz}
-    name: core-js
-    version: 3.29.0
-    requiresBuild: true
-
-  registry.npmmirror.com/core-util-is/1.0.3:
-    resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz}
-    name: core-util-is
-    version: 1.0.3
-    dev: true
-
-  registry.npmmirror.com/cors/2.8.5:
-    resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz}
-    name: cors
-    version: 2.8.5
-    engines: {node: '>= 0.10'}
-    dependencies:
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-      vary: registry.npmmirror.com/vary/1.1.2
-    dev: true
-
-  registry.npmmirror.com/corser/2.0.1:
-    resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/corser/-/corser-2.0.1.tgz}
-    name: corser
-    version: 2.0.1
-    engines: {node: '>= 0.4.0'}
-    dev: true
-
-  registry.npmmirror.com/cosmiconfig-typescript-loader/2.0.2_cin3sed6ohfsopbmt6orxeb4o4:
-    resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz}
-    id: registry.npmmirror.com/cosmiconfig-typescript-loader/2.0.2
-    name: cosmiconfig-typescript-loader
-    version: 2.0.2
-    engines: {node: '>=12', npm: '>=6'}
-    peerDependencies:
-      '@types/node': '*'
-      typescript: '>=3'
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      cosmiconfig: registry.npmmirror.com/cosmiconfig/7.1.0
-      ts-node: registry.npmmirror.com/ts-node/10.9.1_cin3sed6ohfsopbmt6orxeb4o4
-      typescript: registry.npmmirror.com/typescript/4.9.5
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-    dev: true
-
-  registry.npmmirror.com/cosmiconfig-typescript-loader/4.3.0_ex3rrhbii2ixlrca7p7vytu7ce:
-    resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz}
-    id: registry.npmmirror.com/cosmiconfig-typescript-loader/4.3.0
-    name: cosmiconfig-typescript-loader
-    version: 4.3.0
-    engines: {node: '>=12', npm: '>=6'}
-    peerDependencies:
-      '@types/node': '*'
-      cosmiconfig: '>=7'
-      ts-node: '>=10'
-      typescript: '>=3'
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      cosmiconfig: registry.npmmirror.com/cosmiconfig/8.1.0
-      ts-node: registry.npmmirror.com/ts-node/10.9.1_cin3sed6ohfsopbmt6orxeb4o4
-      typescript: registry.npmmirror.com/typescript/4.9.5
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/cosmiconfig/7.1.0:
-    resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz}
-    name: cosmiconfig
-    version: 7.1.0
-    engines: {node: '>=10'}
-    dependencies:
-      '@types/parse-json': registry.npmmirror.com/@types/parse-json/4.0.0
-      import-fresh: registry.npmmirror.com/import-fresh/3.3.0
-      parse-json: registry.npmmirror.com/parse-json/5.2.0
-      path-type: registry.npmmirror.com/path-type/4.0.0
-      yaml: registry.npmmirror.com/yaml/1.10.2
-    dev: true
-
-  registry.npmmirror.com/cosmiconfig/8.1.0:
-    resolution: {integrity: sha512-0tLZ9URlPGU7JsKq0DQOQ3FoRsYX8xDZ7xMiATQfaiGMz7EHowNkbU9u1coAOmnh9p/1ySpm0RB3JNWRXM5GCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-8.1.0.tgz}
-    name: cosmiconfig
-    version: 8.1.0
-    engines: {node: '>=14'}
-    dependencies:
-      import-fresh: registry.npmmirror.com/import-fresh/3.3.0
-      js-yaml: registry.npmmirror.com/js-yaml/4.1.0
-      parse-json: registry.npmmirror.com/parse-json/5.2.0
-      path-type: registry.npmmirror.com/path-type/4.0.0
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/create-require/1.1.1:
-    resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz}
-    name: create-require
-    version: 1.1.1
-    dev: true
-
-  registry.npmmirror.com/cron-parser/3.5.0:
-    resolution: {integrity: sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cron-parser/-/cron-parser-3.5.0.tgz}
-    name: cron-parser
-    version: 3.5.0
-    engines: {node: '>=0.8'}
-    dependencies:
-      is-nan: registry.npmmirror.com/is-nan/1.3.2
-      luxon: registry.npmmirror.com/luxon/1.28.1
-    dev: false
-
-  registry.npmmirror.com/cropperjs/1.5.13:
-    resolution: {integrity: sha512-by7jKAo73y5/Do0K6sxdTKHgndY0NMjG2bEdgeJxycbcmHuCiMXqw8sxy5C5Y5WTOTcDGmbT7Sr5CgKOXR06OA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cropperjs/-/cropperjs-1.5.13.tgz}
-    name: cropperjs
-    version: 1.5.13
-    dev: false
-
-  registry.npmmirror.com/cross-env/7.0.3:
-    resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz}
-    name: cross-env
-    version: 7.0.3
-    engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
-    hasBin: true
-    dependencies:
-      cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3
-    dev: true
-
-  registry.npmmirror.com/cross-fetch/3.1.5:
-    resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz}
-    name: cross-fetch
-    version: 3.1.5
-    dependencies:
-      node-fetch: registry.npmmirror.com/node-fetch/2.6.7
-    transitivePeerDependencies:
-      - encoding
-    dev: true
-
-  registry.npmmirror.com/cross-spawn/6.0.5:
-    resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz}
-    name: cross-spawn
-    version: 6.0.5
-    engines: {node: '>=4.8'}
-    dependencies:
-      nice-try: registry.npmmirror.com/nice-try/1.0.5
-      path-key: registry.npmmirror.com/path-key/2.0.1
-      semver: registry.npmmirror.com/semver/5.7.1
-      shebang-command: registry.npmmirror.com/shebang-command/1.2.0
-      which: registry.npmmirror.com/which/1.3.1
-    dev: true
-
-  registry.npmmirror.com/cross-spawn/7.0.3:
-    resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz}
-    name: cross-spawn
-    version: 7.0.3
-    engines: {node: '>= 8'}
-    dependencies:
-      path-key: registry.npmmirror.com/path-key/3.1.1
-      shebang-command: registry.npmmirror.com/shebang-command/2.0.0
-      which: registry.npmmirror.com/which/2.0.2
-    dev: true
-
-  registry.npmmirror.com/crypt/0.0.2:
-    resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/crypt/-/crypt-0.0.2.tgz}
-    name: crypt
-    version: 0.0.2
-    dev: false
-
-  registry.npmmirror.com/crypto-js/4.1.1:
-    resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz}
-    name: crypto-js
-    version: 4.1.1
-    dev: false
-
-  registry.npmmirror.com/crypto-random-string/2.0.0:
-    resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz}
-    name: crypto-random-string
-    version: 2.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/css-functions-list/3.1.0:
-    resolution: {integrity: sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-functions-list/-/css-functions-list-3.1.0.tgz}
-    name: css-functions-list
-    version: 3.1.0
-    engines: {node: '>=12.22'}
-    dev: true
-
-  registry.npmmirror.com/css-select/4.3.0:
-    resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz}
-    name: css-select
-    version: 4.3.0
-    dependencies:
-      boolbase: registry.npmmirror.com/boolbase/1.0.0
-      css-what: registry.npmmirror.com/css-what/6.1.0
-      domhandler: registry.npmmirror.com/domhandler/4.3.1
-      domutils: registry.npmmirror.com/domutils/2.8.0
-      nth-check: registry.npmmirror.com/nth-check/2.1.1
-    dev: true
-
-  registry.npmmirror.com/css-tree/1.1.3:
-    resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz}
-    name: css-tree
-    version: 1.1.3
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      mdn-data: registry.npmmirror.com/mdn-data/2.0.14
-      source-map: 0.6.1
-    dev: true
-
-  registry.npmmirror.com/css-what/6.1.0:
-    resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz}
-    name: css-what
-    version: 6.1.0
-    engines: {node: '>= 6'}
-    dev: true
-
-  registry.npmmirror.com/cssesc/3.0.0:
-    resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz}
-    name: cssesc
-    version: 3.0.0
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/cssfilter/0.0.10:
-    resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssfilter/-/cssfilter-0.0.10.tgz}
-    name: cssfilter
-    version: 0.0.10
-    dev: false
-
-  registry.npmmirror.com/csso/4.2.0:
-    resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz}
-    name: csso
-    version: 4.2.0
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      css-tree: registry.npmmirror.com/css-tree/1.1.3
-    dev: true
-
-  registry.npmmirror.com/cssom/0.3.8:
-    resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssom/-/cssom-0.3.8.tgz}
-    name: cssom
-    version: 0.3.8
-    dev: true
-
-  registry.npmmirror.com/cssom/0.4.4:
-    resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssom/-/cssom-0.4.4.tgz}
-    name: cssom
-    version: 0.4.4
-    dev: true
-
-  registry.npmmirror.com/cssstyle/2.3.0:
-    resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssstyle/-/cssstyle-2.3.0.tgz}
-    name: cssstyle
-    version: 2.3.0
-    engines: {node: '>=8'}
-    dependencies:
-      cssom: registry.npmmirror.com/cssom/0.3.8
-    dev: true
-
-  registry.npmmirror.com/csstype/2.6.21:
-    resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz}
-    name: csstype
-    version: 2.6.21
-
-  registry.npmmirror.com/currently-unhandled/0.4.1:
-    resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz}
-    name: currently-unhandled
-    version: 0.4.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      array-find-index: registry.npmmirror.com/array-find-index/1.0.2
-    dev: true
-
-  registry.npmmirror.com/cwebp-bin/6.1.2:
-    resolution: {integrity: sha512-NLEZ/BVAl9g426hwUX/qrQ7b/EfQH7BS1tr+CzPo2EgDQbcdzmUVE+fIfsi64lsL638lWgzTEViMAL4pxV1GOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cwebp-bin/-/cwebp-bin-6.1.2.tgz}
-    name: cwebp-bin
-    version: 6.1.2
-    engines: {node: '>=10'}
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      bin-build: registry.npmmirror.com/bin-build/3.0.0
-      bin-wrapper: /bin-wrapper-china/0.1.0
-    dev: true
-
-  registry.npmmirror.com/cz-conventional-changelog/3.3.0:
-    resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz}
-    name: cz-conventional-changelog
-    version: 3.3.0
-    engines: {node: '>= 10'}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      commitizen: registry.npmmirror.com/commitizen/4.3.0
-      conventional-commit-types: registry.npmmirror.com/conventional-commit-types/3.0.0
-      lodash.map: registry.npmmirror.com/lodash.map/4.6.0
-      longest: registry.npmmirror.com/longest/2.0.1
-      word-wrap: registry.npmmirror.com/word-wrap/1.2.3
-    optionalDependencies:
-      '@commitlint/load': 17.4.4
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-    dev: true
-
-  registry.npmmirror.com/cz-git/1.5.1:
-    resolution: {integrity: sha512-6L92sB4TGu7qt4jmkQ2AB3VeihAJWLJKv+zvgp/BBE6jMI6rzZZi6H/VI4/i42+oq7oRPyOIF0ku+kShGrfzTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cz-git/-/cz-git-1.5.1.tgz}
-    name: cz-git
-    version: 1.5.1
-    dev: true
-
-  registry.npmmirror.com/czg/1.5.1:
-    resolution: {integrity: sha512-iMxOMtHY2ONml97ag7fLZH3gSaifbKxXf1ijSUN9StahwdcgTbwSz0q7QE1903xMGF+HACdHkxf2+32XpSEG4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/czg/-/czg-1.5.1.tgz}
-    name: czg
-    version: 1.5.1
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/dargs/7.0.0:
-    resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dargs/-/dargs-7.0.0.tgz}
-    name: dargs
-    version: 7.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/data-urls/2.0.0:
-    resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/data-urls/-/data-urls-2.0.0.tgz}
-    name: data-urls
-    version: 2.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      abab: registry.npmmirror.com/abab/2.0.6
-      whatwg-mimetype: registry.npmmirror.com/whatwg-mimetype/2.3.0
-      whatwg-url: registry.npmmirror.com/whatwg-url/8.7.0
-    dev: true
-
-  registry.npmmirror.com/dateformat/3.0.3:
-    resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dateformat/-/dateformat-3.0.3.tgz}
-    name: dateformat
-    version: 3.0.3
-    dev: true
-
-  registry.npmmirror.com/dayjs/1.11.7:
-    resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.11.7.tgz}
-    name: dayjs
-    version: 1.11.7
-    dev: false
-
-  registry.npmmirror.com/debug/2.6.9:
-    resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz}
-    name: debug
-    version: 2.6.9
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.0.0
-    dev: true
-
-  registry.npmmirror.com/debug/3.2.7:
-    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz}
-    name: debug
-    version: 3.2.7
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.1.3
-    dev: true
-
-  registry.npmmirror.com/debug/4.3.4:
-    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz}
-    name: debug
-    version: 4.3.4
-    engines: {node: '>=6.0'}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.1.2
-    dev: true
-
-  registry.npmmirror.com/debug/4.3.4_supports-color@9.3.1:
-    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz}
-    id: registry.npmmirror.com/debug/4.3.4
-    name: debug
-    version: 4.3.4
-    engines: {node: '>=6.0'}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.1.2
-      supports-color: registry.npmmirror.com/supports-color/9.3.1
-    dev: true
-
-  registry.npmmirror.com/decamelize-keys/1.1.1:
-    resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz}
-    name: decamelize-keys
-    version: 1.1.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      decamelize: registry.npmmirror.com/decamelize/1.2.0
-      map-obj: registry.npmmirror.com/map-obj/1.0.1
-    dev: true
-
-  registry.npmmirror.com/decamelize/1.2.0:
-    resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz}
-    name: decamelize
-    version: 1.2.0
-    engines: {node: '>=0.10.0'}
-
-  registry.npmmirror.com/decimal.js/10.4.3:
-    resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz}
-    name: decimal.js
-    version: 10.4.3
-    dev: true
-
-  registry.npmmirror.com/decode-uri-component/0.2.2:
-    resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz}
-    name: decode-uri-component
-    version: 0.2.2
-    engines: {node: '>=0.10'}
-    dev: true
-
-  registry.npmmirror.com/decompress/4.2.1:
-    resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/decompress/-/decompress-4.2.1.tgz}
-    name: decompress
-    version: 4.2.1
-    engines: {node: '>=4'}
-    dependencies:
-      decompress-tar: 4.1.1
-      decompress-tarbz2: 4.1.1
-      decompress-targz: 4.1.1
-      decompress-unzip: 4.0.1
-      graceful-fs: 4.2.10
-      make-dir: 1.3.0
-      pify: 2.3.0
-      strip-dirs: 2.1.0
-    dev: true
-
-  registry.npmmirror.com/dedent/0.7.0:
-    resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz}
-    name: dedent
-    version: 0.7.0
-    dev: true
-
-  registry.npmmirror.com/deep-is/0.1.4:
-    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz}
-    name: deep-is
-    version: 0.1.4
-    dev: true
-
-  registry.npmmirror.com/deepmerge/4.3.0:
-    resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.0.tgz}
-    name: deepmerge
-    version: 4.3.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/defaults/1.0.4:
-    resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz}
-    name: defaults
-    version: 1.0.4
-    dependencies:
-      clone: registry.npmmirror.com/clone/1.0.4
-    dev: true
-
-  registry.npmmirror.com/define-lazy-prop/2.0.0:
-    resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz}
-    name: define-lazy-prop
-    version: 2.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/define-properties/1.2.0:
-    resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz}
-    name: define-properties
-    version: 1.2.0
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-property-descriptors: registry.npmmirror.com/has-property-descriptors/1.0.0
-      object-keys: registry.npmmirror.com/object-keys/1.1.1
-
-  registry.npmmirror.com/define-property/0.2.5:
-    resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz}
-    name: define-property
-    version: 0.2.5
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-descriptor: registry.npmmirror.com/is-descriptor/0.1.6
-    dev: true
-
-  registry.npmmirror.com/define-property/1.0.0:
-    resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz}
-    name: define-property
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-descriptor: registry.npmmirror.com/is-descriptor/1.0.2
-    dev: true
-
-  registry.npmmirror.com/define-property/2.0.2:
-    resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz}
-    name: define-property
-    version: 2.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-descriptor: registry.npmmirror.com/is-descriptor/1.0.2
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/delayed-stream/1.0.0:
-    resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz}
-    name: delayed-stream
-    version: 1.0.0
-    engines: {node: '>=0.4.0'}
-    dev: true
-
-  registry.npmmirror.com/delegate/3.2.0:
-    resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz}
-    name: delegate
-    version: 3.2.0
-    dev: false
-
-  registry.npmmirror.com/deprecation/2.3.1:
-    resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deprecation/-/deprecation-2.3.1.tgz}
-    name: deprecation
-    version: 2.3.1
-    dev: true
-
-  registry.npmmirror.com/detect-file/1.0.0:
-    resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/detect-file/-/detect-file-1.0.0.tgz}
-    name: detect-file
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/detect-indent/6.1.0:
-    resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/detect-indent/-/detect-indent-6.1.0.tgz}
-    name: detect-indent
-    version: 6.1.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/detect-newline/3.1.0:
-    resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz}
-    name: detect-newline
-    version: 3.1.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/diff-match-patch/1.0.5:
-    resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz}
-    name: diff-match-patch
-    version: 1.0.5
-    dev: false
-
-  registry.npmmirror.com/diff-sequences/27.5.1:
-    resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/diff-sequences/-/diff-sequences-27.5.1.tgz}
-    name: diff-sequences
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dev: true
-
-  registry.npmmirror.com/diff/4.0.2:
-    resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz}
-    name: diff
-    version: 4.0.2
-    engines: {node: '>=0.3.1'}
-    dev: true
-
-  registry.npmmirror.com/dijkstrajs/1.0.2:
-    resolution: {integrity: sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz}
-    name: dijkstrajs
-    version: 1.0.2
-    dev: false
-
-  registry.npmmirror.com/dir-glob/3.0.1:
-    resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz}
-    name: dir-glob
-    version: 3.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      path-type: registry.npmmirror.com/path-type/4.0.0
-    dev: true
-
-  registry.npmmirror.com/doctrine/3.0.0:
-    resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz}
-    name: doctrine
-    version: 3.0.0
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      esutils: registry.npmmirror.com/esutils/2.0.3
-    dev: true
-
-  registry.npmmirror.com/dom-align/1.12.4:
-    resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz}
-    name: dom-align
-    version: 1.12.4
-    dev: false
-
-  registry.npmmirror.com/dom-scroll-into-view/2.0.1:
-    resolution: {integrity: sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz}
-    name: dom-scroll-into-view
-    version: 2.0.1
-    dev: false
-
-  registry.npmmirror.com/dom-serializer/0.2.2:
-    resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz}
-    name: dom-serializer
-    version: 0.2.2
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-      entities: registry.npmmirror.com/entities/2.2.0
-    dev: true
-
-  registry.npmmirror.com/dom-serializer/1.4.1:
-    resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz}
-    name: dom-serializer
-    version: 1.4.1
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-      domhandler: registry.npmmirror.com/domhandler/4.3.1
-      entities: registry.npmmirror.com/entities/2.2.0
-    dev: true
-
-  registry.npmmirror.com/dom-serializer/2.0.0:
-    resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz}
-    name: dom-serializer
-    version: 2.0.0
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-      domhandler: registry.npmmirror.com/domhandler/5.0.3
-      entities: registry.npmmirror.com/entities/4.4.0
-    dev: true
-
-  registry.npmmirror.com/domelementtype/1.3.1:
-    resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz}
-    name: domelementtype
-    version: 1.3.1
-    dev: true
-
-  registry.npmmirror.com/domelementtype/2.3.0:
-    resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz}
-    name: domelementtype
-    version: 2.3.0
-    dev: true
-
-  registry.npmmirror.com/domexception/2.0.1:
-    resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domexception/-/domexception-2.0.1.tgz}
-    name: domexception
-    version: 2.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      webidl-conversions: registry.npmmirror.com/webidl-conversions/5.0.0
-    dev: true
-
-  registry.npmmirror.com/domhandler/2.4.2:
-    resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz}
-    name: domhandler
-    version: 2.4.2
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/1.3.1
-    dev: true
-
-  registry.npmmirror.com/domhandler/4.3.1:
-    resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz}
-    name: domhandler
-    version: 4.3.1
-    engines: {node: '>= 4'}
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-    dev: true
-
-  registry.npmmirror.com/domhandler/5.0.3:
-    resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz}
-    name: domhandler
-    version: 5.0.3
-    engines: {node: '>= 4'}
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-    dev: true
-
-  registry.npmmirror.com/domutils/1.7.0:
-    resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz}
-    name: domutils
-    version: 1.7.0
-    dependencies:
-      dom-serializer: registry.npmmirror.com/dom-serializer/0.2.2
-      domelementtype: registry.npmmirror.com/domelementtype/1.3.1
-    dev: true
-
-  registry.npmmirror.com/domutils/2.8.0:
-    resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz}
-    name: domutils
-    version: 2.8.0
-    dependencies:
-      dom-serializer: registry.npmmirror.com/dom-serializer/1.4.1
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-      domhandler: registry.npmmirror.com/domhandler/4.3.1
-    dev: true
-
-  registry.npmmirror.com/domutils/3.0.1:
-    resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domutils/-/domutils-3.0.1.tgz}
-    name: domutils
-    version: 3.0.1
-    dependencies:
-      dom-serializer: registry.npmmirror.com/dom-serializer/2.0.0
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-      domhandler: registry.npmmirror.com/domhandler/5.0.3
-    dev: true
-
-  registry.npmmirror.com/dot-case/3.0.4:
-    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz}
-    name: dot-case
-    version: 3.0.4
-    dependencies:
-      no-case: registry.npmmirror.com/no-case/3.0.4
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/dot-prop/5.3.0:
-    resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz}
-    name: dot-prop
-    version: 5.3.0
-    engines: {node: '>=8'}
-    dependencies:
-      is-obj: registry.npmmirror.com/is-obj/2.0.0
-    dev: true
-
-  registry.npmmirror.com/dotenv-expand/8.0.3:
-    resolution: {integrity: sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-8.0.3.tgz}
-    name: dotenv-expand
-    version: 8.0.3
-    engines: {node: '>=12'}
-    dev: true
-
-  registry.npmmirror.com/dotenv/16.0.3:
-    resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dotenv/-/dotenv-16.0.3.tgz}
-    name: dotenv
-    version: 16.0.3
-    engines: {node: '>=12'}
-    dev: true
-
-  registry.npmmirror.com/download/6.2.5:
-    resolution: {integrity: sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/download/-/download-6.2.5.tgz}
-    name: download
-    version: 6.2.5
-    engines: {node: '>=4'}
-    dependencies:
-      caw: 2.0.1
-      content-disposition: 0.5.4
-      decompress: 4.2.1
-      ext-name: 5.0.0
-      file-type: 5.2.0
-      filenamify: 2.1.0
-      get-stream: 3.0.0
-      got: 7.1.0
-      make-dir: 1.3.0
-      p-event: 1.3.0
-      pify: 3.0.0
-    dev: true
-
-  registry.npmmirror.com/eastasianwidth/0.2.0:
-    resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz}
-    name: eastasianwidth
-    version: 0.2.0
-    dev: true
-
-  registry.npmmirror.com/echarts/5.4.1:
-    resolution: {integrity: sha512-9ltS3M2JB0w2EhcYjCdmtrJ+6haZcW6acBolMGIuf01Hql1yrIV01L1aRj7jsaaIULJslEP9Z3vKlEmnJaWJVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/echarts/-/echarts-5.4.1.tgz}
-    name: echarts
-    version: 5.4.1
-    dependencies:
-      tslib: registry.npmmirror.com/tslib/2.3.0
-      zrender: registry.npmmirror.com/zrender/5.4.1
-    dev: false
-
-  registry.npmmirror.com/editorconfig/0.15.3:
-    resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/editorconfig/-/editorconfig-0.15.3.tgz}
-    name: editorconfig
-    version: 0.15.3
-    hasBin: true
-    dependencies:
-      commander: registry.npmmirror.com/commander/2.20.3
-      lru-cache: registry.npmmirror.com/lru-cache/4.1.5
-      semver: registry.npmmirror.com/semver/5.7.1
-      sigmund: registry.npmmirror.com/sigmund/1.0.1
-    dev: true
-
-  registry.npmmirror.com/ee-first/1.1.1:
-    resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz}
-    name: ee-first
-    version: 1.1.1
-    dev: true
-
-  registry.npmmirror.com/ejs/3.1.8:
-    resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ejs/-/ejs-3.1.8.tgz}
-    name: ejs
-    version: 3.1.8
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-    dependencies:
-      jake: registry.npmmirror.com/jake/10.8.5
-    dev: true
-
-  registry.npmmirror.com/electron-to-chromium/1.4.320:
-    resolution: {integrity: sha512-h70iRscrNluMZPVICXYl5SSB+rBKo22XfuIS1ER0OQxQZpKTnFpuS6coj7wY9M/3trv7OR88rRMOlKmRvDty7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.320.tgz}
-    name: electron-to-chromium
-    version: 1.4.320
-    dev: true
-
-  registry.npmmirror.com/emittery/0.8.1:
-    resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emittery/-/emittery-0.8.1.tgz}
-    name: emittery
-    version: 0.8.1
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/emoji-mart-vue-fast/11.2.0_vue@3.2.47:
-    resolution: {integrity: sha512-dEVAJAbQop+efR8Zn4bvPQtSREwsVZccQxEBHdi1GNPO0JC9H6l0FswuCli/TrZXAQr1KS7dGEUhS9A1gURFRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emoji-mart-vue-fast/-/emoji-mart-vue-fast-11.2.0.tgz}
-    id: registry.npmmirror.com/emoji-mart-vue-fast/11.2.0
-    name: emoji-mart-vue-fast
-    version: 11.2.0
-    peerDependencies:
-      vue: '>2.0.0'
-    dependencies:
-      '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.21.0
-      core-js: registry.npmmirror.com/core-js/3.29.0
-      vue: registry.npmmirror.com/vue/3.2.47
-      vue-virtual-scroller: registry.npmmirror.com/vue-virtual-scroller/1.1.2_vue@3.2.47
-    dev: false
-
-  registry.npmmirror.com/emoji-regex/8.0.0:
-    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz}
-    name: emoji-regex
-    version: 8.0.0
-
-  registry.npmmirror.com/emoji-regex/9.2.2:
-    resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz}
-    name: emoji-regex
-    version: 9.2.2
-    dev: true
-
-  registry.npmmirror.com/emojis-list/3.0.0:
-    resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz}
-    name: emojis-list
-    version: 3.0.0
-    engines: {node: '>= 4'}
-    dev: true
-
-  registry.npmmirror.com/encode-utf8/1.0.3:
-    resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/encode-utf8/-/encode-utf8-1.0.3.tgz}
-    name: encode-utf8
-    version: 1.0.3
-    dev: false
-
-  registry.npmmirror.com/encodeurl/1.0.2:
-    resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz}
-    name: encodeurl
-    version: 1.0.2
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/end-of-stream/1.4.4:
-    resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz}
-    name: end-of-stream
-    version: 1.4.4
-    dependencies:
-      once: registry.npmmirror.com/once/1.4.0
-    dev: true
-
-  registry.npmmirror.com/enquire.js/2.1.6:
-    resolution: {integrity: sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/enquire.js/-/enquire.js-2.1.6.tgz}
-    name: enquire.js
-    version: 2.1.6
-    dev: false
-
-  registry.npmmirror.com/entities/1.1.2:
-    resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz}
-    name: entities
-    version: 1.1.2
-    dev: true
-
-  registry.npmmirror.com/entities/2.2.0:
-    resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz}
-    name: entities
-    version: 2.2.0
-    dev: true
-
-  registry.npmmirror.com/entities/4.4.0:
-    resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/entities/-/entities-4.4.0.tgz}
-    name: entities
-    version: 4.4.0
-    engines: {node: '>=0.12'}
-    dev: true
-
-  registry.npmmirror.com/error-ex/1.3.2:
-    resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz}
-    name: error-ex
-    version: 1.3.2
-    dependencies:
-      is-arrayish: registry.npmmirror.com/is-arrayish/0.2.1
-    dev: true
-
-  registry.npmmirror.com/es-abstract/1.21.1:
-    resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-abstract/-/es-abstract-1.21.1.tgz}
-    name: es-abstract
-    version: 1.21.1
-    engines: {node: '>= 0.4'}
-    dependencies:
-      available-typed-arrays: registry.npmmirror.com/available-typed-arrays/1.0.5
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      es-set-tostringtag: registry.npmmirror.com/es-set-tostringtag/2.0.1
-      es-to-primitive: registry.npmmirror.com/es-to-primitive/1.2.1
-      function-bind: registry.npmmirror.com/function-bind/1.1.1
-      function.prototype.name: registry.npmmirror.com/function.prototype.name/1.1.5
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.2.0
-      get-symbol-description: registry.npmmirror.com/get-symbol-description/1.0.0
-      globalthis: registry.npmmirror.com/globalthis/1.0.3
-      gopd: registry.npmmirror.com/gopd/1.0.1
-      has: registry.npmmirror.com/has/1.0.3
-      has-property-descriptors: registry.npmmirror.com/has-property-descriptors/1.0.0
-      has-proto: registry.npmmirror.com/has-proto/1.0.1
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-      internal-slot: registry.npmmirror.com/internal-slot/1.0.5
-      is-array-buffer: registry.npmmirror.com/is-array-buffer/3.0.2
-      is-callable: registry.npmmirror.com/is-callable/1.2.7
-      is-negative-zero: registry.npmmirror.com/is-negative-zero/2.0.2
-      is-regex: registry.npmmirror.com/is-regex/1.1.4
-      is-shared-array-buffer: registry.npmmirror.com/is-shared-array-buffer/1.0.2
-      is-string: registry.npmmirror.com/is-string/1.0.7
-      is-typed-array: registry.npmmirror.com/is-typed-array/1.1.10
-      is-weakref: registry.npmmirror.com/is-weakref/1.0.2
-      object-inspect: registry.npmmirror.com/object-inspect/1.12.3
-      object-keys: registry.npmmirror.com/object-keys/1.1.1
-      object.assign: registry.npmmirror.com/object.assign/4.1.4
-      regexp.prototype.flags: registry.npmmirror.com/regexp.prototype.flags/1.4.3
-      safe-regex-test: registry.npmmirror.com/safe-regex-test/1.0.0
-      string.prototype.trimend: registry.npmmirror.com/string.prototype.trimend/1.0.6
-      string.prototype.trimstart: registry.npmmirror.com/string.prototype.trimstart/1.0.6
-      typed-array-length: registry.npmmirror.com/typed-array-length/1.0.4
-      unbox-primitive: registry.npmmirror.com/unbox-primitive/1.0.2
-      which-typed-array: registry.npmmirror.com/which-typed-array/1.1.9
-    dev: true
-
-  registry.npmmirror.com/es-module-lexer/0.9.3:
-    resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz}
-    name: es-module-lexer
-    version: 0.9.3
-    dev: true
-
-  registry.npmmirror.com/es-set-tostringtag/2.0.1:
-    resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz}
-    name: es-set-tostringtag
-    version: 2.0.1
-    engines: {node: '>= 0.4'}
-    dependencies:
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.2.0
-      has: registry.npmmirror.com/has/1.0.3
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/es-to-primitive/1.2.1:
-    resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz}
-    name: es-to-primitive
-    version: 1.2.1
-    engines: {node: '>= 0.4'}
-    dependencies:
-      is-callable: registry.npmmirror.com/is-callable/1.2.7
-      is-date-object: registry.npmmirror.com/is-date-object/1.0.5
-      is-symbol: registry.npmmirror.com/is-symbol/1.0.4
-    dev: true
-
-  registry.npmmirror.com/esbuild-node-loader/0.6.5:
-    resolution: {integrity: sha512-uPP+dllWm38cFvDysdocutN3lfe5pTIbddAHp1ENyLzpHYqE2r+3Wo+pfg9X3p8DFWwzIisft5YkeBIthIcixw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-node-loader/-/esbuild-node-loader-0.6.5.tgz}
-    name: esbuild-node-loader
-    version: 0.6.5
-    dependencies:
-      esbuild: registry.npmmirror.com/esbuild/0.17.11
-    dev: true
-
-  registry.npmmirror.com/esbuild-plugin-alias/0.1.2:
-    resolution: {integrity: sha512-WsX0OJy8IGOsGZV+4oHEU5B6XQUpxOsZN1iSoYf9COTDbY7WXcOwd1oCLYNWUIWCExyGXSghIGq2k7sXBldxwQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-plugin-alias/-/esbuild-plugin-alias-0.1.2.tgz}
-    name: esbuild-plugin-alias
-    version: 0.1.2
-    dev: true
-
-  registry.npmmirror.com/esbuild-register/3.4.2_esbuild@0.17.11:
-    resolution: {integrity: sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-register/-/esbuild-register-3.4.2.tgz}
-    id: registry.npmmirror.com/esbuild-register/3.4.2
-    name: esbuild-register
-    version: 3.4.2
-    peerDependencies:
-      esbuild: '>=0.12 <1'
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4
-      esbuild: registry.npmmirror.com/esbuild/0.17.11
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/esbuild/0.11.23:
-    resolution: {integrity: sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.11.23.tgz}
-    name: esbuild
-    version: 0.11.23
-    hasBin: true
-    requiresBuild: true
-    dev: true
-
-  registry.npmmirror.com/esbuild/0.11.3:
-    resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.11.3.tgz}
-    name: esbuild
-    version: 0.11.3
-    hasBin: true
-    requiresBuild: true
-    dev: true
-
-  registry.npmmirror.com/esbuild/0.14.54:
-    resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.14.54.tgz}
-    name: esbuild
-    version: 0.14.54
-    engines: {node: '>=12'}
-    hasBin: true
-    requiresBuild: true
-    optionalDependencies:
-      '@esbuild/linux-loong64': 0.14.54
-      esbuild-android-64: 0.14.54
-      esbuild-android-arm64: 0.14.54
-      esbuild-darwin-64: 0.14.54
-      esbuild-darwin-arm64: 0.14.54
-      esbuild-freebsd-64: 0.14.54
-      esbuild-freebsd-arm64: 0.14.54
-      esbuild-linux-32: 0.14.54
-      esbuild-linux-64: 0.14.54
-      esbuild-linux-arm: 0.14.54
-      esbuild-linux-arm64: 0.14.54
-      esbuild-linux-mips64le: 0.14.54
-      esbuild-linux-ppc64le: 0.14.54
-      esbuild-linux-riscv64: 0.14.54
-      esbuild-linux-s390x: 0.14.54
-      esbuild-netbsd-64: 0.14.54
-      esbuild-openbsd-64: 0.14.54
-      esbuild-sunos-64: 0.14.54
-      esbuild-windows-32: 0.14.54
-      esbuild-windows-64: 0.14.54
-      esbuild-windows-arm64: 0.14.54
-    dev: true
-
-  registry.npmmirror.com/esbuild/0.15.18:
-    resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.15.18.tgz}
-    name: esbuild
-    version: 0.15.18
-    engines: {node: '>=12'}
-    hasBin: true
-    requiresBuild: true
-    optionalDependencies:
-      '@esbuild/android-arm': 0.15.18
-      '@esbuild/linux-loong64': 0.15.18
-      esbuild-android-64: 0.15.18
-      esbuild-android-arm64: 0.15.18
-      esbuild-darwin-64: 0.15.18
-      esbuild-darwin-arm64: 0.15.18
-      esbuild-freebsd-64: 0.15.18
-      esbuild-freebsd-arm64: 0.15.18
-      esbuild-linux-32: 0.15.18
-      esbuild-linux-64: 0.15.18
-      esbuild-linux-arm: 0.15.18
-      esbuild-linux-arm64: 0.15.18
-      esbuild-linux-mips64le: 0.15.18
-      esbuild-linux-ppc64le: 0.15.18
-      esbuild-linux-riscv64: 0.15.18
-      esbuild-linux-s390x: 0.15.18
-      esbuild-netbsd-64: 0.15.18
-      esbuild-openbsd-64: 0.15.18
-      esbuild-sunos-64: 0.15.18
-      esbuild-windows-32: 0.15.18
-      esbuild-windows-64: 0.15.18
-      esbuild-windows-arm64: 0.15.18
-    dev: true
-
-  registry.npmmirror.com/esbuild/0.17.11:
-    resolution: {integrity: sha512-pAMImyokbWDtnA/ufPxjQg0fYo2DDuzAlqwnDvbXqHLphe+m80eF++perYKVm8LeTuj2zUuFXC+xgSVxyoHUdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.17.11.tgz}
-    name: esbuild
-    version: 0.17.11
-    engines: {node: '>=12'}
-    hasBin: true
-    requiresBuild: true
-    optionalDependencies:
-      '@esbuild/android-arm': 0.17.11
-      '@esbuild/android-arm64': 0.17.11
-      '@esbuild/android-x64': 0.17.11
-      '@esbuild/darwin-arm64': 0.17.11
-      '@esbuild/darwin-x64': 0.17.11
-      '@esbuild/freebsd-arm64': 0.17.11
-      '@esbuild/freebsd-x64': 0.17.11
-      '@esbuild/linux-arm': 0.17.11
-      '@esbuild/linux-arm64': 0.17.11
-      '@esbuild/linux-ia32': 0.17.11
-      '@esbuild/linux-loong64': 0.17.11
-      '@esbuild/linux-mips64el': 0.17.11
-      '@esbuild/linux-ppc64': 0.17.11
-      '@esbuild/linux-riscv64': 0.17.11
-      '@esbuild/linux-s390x': 0.17.11
-      '@esbuild/linux-x64': 0.17.11
-      '@esbuild/netbsd-x64': 0.17.11
-      '@esbuild/openbsd-x64': 0.17.11
-      '@esbuild/sunos-x64': 0.17.11
-      '@esbuild/win32-arm64': 0.17.11
-      '@esbuild/win32-ia32': 0.17.11
-      '@esbuild/win32-x64': 0.17.11
-    dev: true
-
-  registry.npmmirror.com/escalade/3.1.1:
-    resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz}
-    name: escalade
-    version: 3.1.1
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/escape-html/1.0.3:
-    resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz}
-    name: escape-html
-    version: 1.0.3
-    dev: true
-
-  registry.npmmirror.com/escape-string-regexp/1.0.5:
-    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz}
-    name: escape-string-regexp
-    version: 1.0.5
-    engines: {node: '>=0.8.0'}
-    dev: true
-
-  registry.npmmirror.com/escape-string-regexp/2.0.0:
-    resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz}
-    name: escape-string-regexp
-    version: 2.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/escape-string-regexp/4.0.0:
-    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz}
-    name: escape-string-regexp
-    version: 4.0.0
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/escodegen/2.0.0:
-    resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escodegen/-/escodegen-2.0.0.tgz}
-    name: escodegen
-    version: 2.0.0
-    engines: {node: '>=6.0'}
-    hasBin: true
-    dependencies:
-      esprima: registry.npmmirror.com/esprima/4.0.1
-      estraverse: registry.npmmirror.com/estraverse/5.3.0
-      esutils: registry.npmmirror.com/esutils/2.0.3
-      optionator: registry.npmmirror.com/optionator/0.8.3
-    optionalDependencies:
-      source-map: 0.6.1
-    dev: true
-
-  registry.npmmirror.com/eslint-config-prettier/8.6.0_eslint@8.35.0:
-    resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz}
-    id: registry.npmmirror.com/eslint-config-prettier/8.6.0
-    name: eslint-config-prettier
-    version: 8.6.0
-    hasBin: true
-    peerDependencies:
-      eslint: '>=7.0.0'
-    dependencies:
-      eslint: registry.npmmirror.com/eslint/8.35.0
-    dev: true
-
-  registry.npmmirror.com/eslint-define-config/1.15.0:
-    resolution: {integrity: sha512-p6K61L6HrnDNRF2HzUsTdGaGPohO0TmSX/oQ0ttBhfApWHMyDcX+FCqSziCDywSf0U0bxe4e2HOfYho1nGHTLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-define-config/-/eslint-define-config-1.15.0.tgz}
-    name: eslint-define-config
-    version: 1.15.0
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'}
-    dev: true
-
-  registry.npmmirror.com/eslint-plugin-jest/25.7.0_npuaqhfkjgus3nqfbgjmqmizqa:
-    resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz}
-    id: registry.npmmirror.com/eslint-plugin-jest/25.7.0
-    name: eslint-plugin-jest
-    version: 25.7.0
-    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
-    peerDependencies:
-      '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0
-      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
-      jest: '*'
-    peerDependenciesMeta:
-      '@typescript-eslint/eslint-plugin':
-        optional: true
-      jest:
-        optional: true
-    dependencies:
-      '@typescript-eslint/eslint-plugin': registry.npmmirror.com/@typescript-eslint/eslint-plugin/5.54.0_6mj2wypvdnknez7kws2nfdgupi
-      '@typescript-eslint/experimental-utils': registry.npmmirror.com/@typescript-eslint/experimental-utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu
-      eslint: registry.npmmirror.com/eslint/8.35.0
-      jest: registry.npmmirror.com/jest/27.5.1_ts-node@10.9.1
-    transitivePeerDependencies:
-      - supports-color
-      - typescript
-    dev: true
-
-  registry.npmmirror.com/eslint-plugin-prettier/4.2.1_u2zha4kiojzs42thzpgwygphmy:
-    resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz}
-    id: registry.npmmirror.com/eslint-plugin-prettier/4.2.1
-    name: eslint-plugin-prettier
-    version: 4.2.1
-    engines: {node: '>=12.0.0'}
-    peerDependencies:
-      eslint: '>=7.28.0'
-      eslint-config-prettier: '*'
-      prettier: '>=2.0.0'
-    peerDependenciesMeta:
-      eslint-config-prettier:
-        optional: true
-    dependencies:
-      eslint: registry.npmmirror.com/eslint/8.35.0
-      eslint-config-prettier: registry.npmmirror.com/eslint-config-prettier/8.6.0_eslint@8.35.0
-      prettier: registry.npmmirror.com/prettier/2.8.4
-      prettier-linter-helpers: registry.npmmirror.com/prettier-linter-helpers/1.0.0
-    dev: true
-
-  registry.npmmirror.com/eslint-plugin-vue/8.7.1_eslint@8.35.0:
-    resolution: {integrity: sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz}
-    id: registry.npmmirror.com/eslint-plugin-vue/8.7.1
-    name: eslint-plugin-vue
-    version: 8.7.1
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
-    dependencies:
-      eslint: registry.npmmirror.com/eslint/8.35.0
-      eslint-utils: registry.npmmirror.com/eslint-utils/3.0.0_eslint@8.35.0
-      natural-compare: registry.npmmirror.com/natural-compare/1.4.0
-      nth-check: registry.npmmirror.com/nth-check/2.1.1
-      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.11
-      semver: registry.npmmirror.com/semver/7.3.8
-      vue-eslint-parser: registry.npmmirror.com/vue-eslint-parser/8.3.0_eslint@8.35.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/eslint-scope/5.1.1:
-    resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz}
-    name: eslint-scope
-    version: 5.1.1
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      esrecurse: registry.npmmirror.com/esrecurse/4.3.0
-      estraverse: registry.npmmirror.com/estraverse/4.3.0
-    dev: true
-
-  registry.npmmirror.com/eslint-scope/7.1.1:
-    resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.1.1.tgz}
-    name: eslint-scope
-    version: 7.1.1
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    dependencies:
-      esrecurse: registry.npmmirror.com/esrecurse/4.3.0
-      estraverse: registry.npmmirror.com/estraverse/5.3.0
-    dev: true
-
-  registry.npmmirror.com/eslint-utils/3.0.0_eslint@8.35.0:
-    resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz}
-    id: registry.npmmirror.com/eslint-utils/3.0.0
-    name: eslint-utils
-    version: 3.0.0
-    engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
-    peerDependencies:
-      eslint: '>=5'
-    dependencies:
-      eslint: registry.npmmirror.com/eslint/8.35.0
-      eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/2.1.0
-    dev: true
-
-  registry.npmmirror.com/eslint-visitor-keys/2.1.0:
-    resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz}
-    name: eslint-visitor-keys
-    version: 2.1.0
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/eslint-visitor-keys/3.3.0:
-    resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz}
-    name: eslint-visitor-keys
-    version: 3.3.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    dev: true
-
-  registry.npmmirror.com/eslint/8.35.0:
-    resolution: {integrity: sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint/-/eslint-8.35.0.tgz}
-    name: eslint
-    version: 8.35.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    hasBin: true
-    dependencies:
-      '@eslint/eslintrc': registry.npmmirror.com/@eslint/eslintrc/2.0.0
-      '@eslint/js': registry.npmmirror.com/@eslint/js/8.35.0
-      '@humanwhocodes/config-array': registry.npmmirror.com/@humanwhocodes/config-array/0.11.8
-      '@humanwhocodes/module-importer': registry.npmmirror.com/@humanwhocodes/module-importer/1.0.1
-      '@nodelib/fs.walk': registry.npmmirror.com/@nodelib/fs.walk/1.2.8
-      ajv: registry.npmmirror.com/ajv/6.12.6
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3
-      debug: registry.npmmirror.com/debug/4.3.4
-      doctrine: registry.npmmirror.com/doctrine/3.0.0
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/4.0.0
-      eslint-scope: registry.npmmirror.com/eslint-scope/7.1.1
-      eslint-utils: registry.npmmirror.com/eslint-utils/3.0.0_eslint@8.35.0
-      eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/3.3.0
-      espree: registry.npmmirror.com/espree/9.4.1
-      esquery: registry.npmmirror.com/esquery/1.5.0
-      esutils: registry.npmmirror.com/esutils/2.0.3
-      fast-deep-equal: registry.npmmirror.com/fast-deep-equal/3.1.3
-      file-entry-cache: registry.npmmirror.com/file-entry-cache/6.0.1
-      find-up: registry.npmmirror.com/find-up/5.0.0
-      glob-parent: registry.npmmirror.com/glob-parent/6.0.2
-      globals: registry.npmmirror.com/globals/13.20.0
-      grapheme-splitter: registry.npmmirror.com/grapheme-splitter/1.0.4
-      ignore: registry.npmmirror.com/ignore/5.2.4
-      import-fresh: registry.npmmirror.com/import-fresh/3.3.0
-      imurmurhash: registry.npmmirror.com/imurmurhash/0.1.4
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      is-path-inside: registry.npmmirror.com/is-path-inside/3.0.3
-      js-sdsl: registry.npmmirror.com/js-sdsl/4.3.0
-      js-yaml: registry.npmmirror.com/js-yaml/4.1.0
-      json-stable-stringify-without-jsonify: registry.npmmirror.com/json-stable-stringify-without-jsonify/1.0.1
-      levn: registry.npmmirror.com/levn/0.4.1
-      lodash.merge: registry.npmmirror.com/lodash.merge/4.6.2
-      minimatch: registry.npmmirror.com/minimatch/3.1.2
-      natural-compare: registry.npmmirror.com/natural-compare/1.4.0
-      optionator: registry.npmmirror.com/optionator/0.9.1
-      regexpp: registry.npmmirror.com/regexpp/3.2.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-      strip-json-comments: registry.npmmirror.com/strip-json-comments/3.1.1
-      text-table: registry.npmmirror.com/text-table/0.2.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/esno/0.14.1:
-    resolution: {integrity: sha512-yDFYw6dGUjCT1qKsdG7WOc/RzIh/qwxUEVZ+ohCltaxBxEFMNqeqbQL9xjRl6Yvdwrfc5OCjUA9JbFmuu/8BKg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esno/-/esno-0.14.1.tgz}
-    name: esno
-    version: 0.14.1
-    hasBin: true
-    dependencies:
-      cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3
-      esbuild: registry.npmmirror.com/esbuild/0.17.11
-      esbuild-node-loader: registry.npmmirror.com/esbuild-node-loader/0.6.5
-      esbuild-register: registry.npmmirror.com/esbuild-register/3.4.2_esbuild@0.17.11
-      import-meta-resolve: registry.npmmirror.com/import-meta-resolve/1.1.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/espree/9.4.1:
-    resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/espree/-/espree-9.4.1.tgz}
-    name: espree
-    version: 9.4.1
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    dependencies:
-      acorn: registry.npmmirror.com/acorn/8.8.2
-      acorn-jsx: registry.npmmirror.com/acorn-jsx/5.3.2_acorn@8.8.2
-      eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/3.3.0
-    dev: true
-
-  registry.npmmirror.com/esprima/4.0.1:
-    resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz}
-    name: esprima
-    version: 4.0.1
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/esquery/1.5.0:
-    resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esquery/-/esquery-1.5.0.tgz}
-    name: esquery
-    version: 1.5.0
-    engines: {node: '>=0.10'}
-    dependencies:
-      estraverse: registry.npmmirror.com/estraverse/5.3.0
-    dev: true
-
-  registry.npmmirror.com/esrecurse/4.3.0:
-    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz}
-    name: esrecurse
-    version: 4.3.0
-    engines: {node: '>=4.0'}
-    dependencies:
-      estraverse: registry.npmmirror.com/estraverse/5.3.0
-    dev: true
-
-  registry.npmmirror.com/estraverse/4.3.0:
-    resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz}
-    name: estraverse
-    version: 4.3.0
-    engines: {node: '>=4.0'}
-    dev: true
-
-  registry.npmmirror.com/estraverse/5.3.0:
-    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz}
-    name: estraverse
-    version: 5.3.0
-    engines: {node: '>=4.0'}
-    dev: true
-
-  registry.npmmirror.com/estree-walker/1.0.1:
-    resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-1.0.1.tgz}
-    name: estree-walker
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/estree-walker/2.0.2:
-    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz}
-    name: estree-walker
-    version: 2.0.2
-
-  registry.npmmirror.com/esutils/2.0.3:
-    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz}
-    name: esutils
-    version: 2.0.3
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/etag/1.8.1:
-    resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz}
-    name: etag
-    version: 1.8.1
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/eventemitter3/4.0.7:
-    resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz}
-    name: eventemitter3
-    version: 4.0.7
-    dev: true
-
-  registry.npmmirror.com/exec-buffer/3.2.0:
-    resolution: {integrity: sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/exec-buffer/-/exec-buffer-3.2.0.tgz}
-    name: exec-buffer
-    version: 3.2.0
-    engines: {node: '>=4'}
-    dependencies:
-      execa: registry.npmmirror.com/execa/0.7.0
-      p-finally: registry.npmmirror.com/p-finally/1.0.0
-      pify: 3.0.0
-      rimraf: registry.npmmirror.com/rimraf/2.7.1
-      tempfile: registry.npmmirror.com/tempfile/2.0.0
-    dev: true
-
-  registry.npmmirror.com/execa/0.7.0:
-    resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-0.7.0.tgz}
-    name: execa
-    version: 0.7.0
-    engines: {node: '>=4'}
-    dependencies:
-      cross-spawn: 5.1.0
-      get-stream: 3.0.0
-      is-stream: 1.1.0
-      npm-run-path: 2.0.2
-      p-finally: 1.0.0
-      signal-exit: 3.0.7
-      strip-eof: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/execa/1.0.0:
-    resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz}
-    name: execa
-    version: 1.0.0
-    engines: {node: '>=6'}
-    dependencies:
-      cross-spawn: registry.npmmirror.com/cross-spawn/6.0.5
-      get-stream: registry.npmmirror.com/get-stream/4.1.0
-      is-stream: registry.npmmirror.com/is-stream/1.1.0
-      npm-run-path: registry.npmmirror.com/npm-run-path/2.0.2
-      p-finally: registry.npmmirror.com/p-finally/1.0.0
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-      strip-eof: registry.npmmirror.com/strip-eof/1.0.0
-    dev: true
-
-  registry.npmmirror.com/execa/4.1.0:
-    resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-4.1.0.tgz}
-    name: execa
-    version: 4.1.0
-    engines: {node: '>=10'}
-    dependencies:
-      cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3
-      get-stream: registry.npmmirror.com/get-stream/5.2.0
-      human-signals: registry.npmmirror.com/human-signals/1.1.1
-      is-stream: registry.npmmirror.com/is-stream/2.0.1
-      merge-stream: registry.npmmirror.com/merge-stream/2.0.0
-      npm-run-path: registry.npmmirror.com/npm-run-path/4.0.1
-      onetime: registry.npmmirror.com/onetime/5.1.2
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-      strip-final-newline: registry.npmmirror.com/strip-final-newline/2.0.0
-    dev: true
-
-  registry.npmmirror.com/execa/5.1.1:
-    resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz}
-    name: execa
-    version: 5.1.1
-    engines: {node: '>=10'}
-    dependencies:
-      cross-spawn: registry.npmmirror.com/cross-spawn/7.0.3
-      get-stream: registry.npmmirror.com/get-stream/6.0.1
-      human-signals: registry.npmmirror.com/human-signals/2.1.0
-      is-stream: registry.npmmirror.com/is-stream/2.0.1
-      merge-stream: registry.npmmirror.com/merge-stream/2.0.0
-      npm-run-path: registry.npmmirror.com/npm-run-path/4.0.1
-      onetime: registry.npmmirror.com/onetime/5.1.2
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-      strip-final-newline: registry.npmmirror.com/strip-final-newline/2.0.0
-    dev: true
-
-  registry.npmmirror.com/exit/0.1.2:
-    resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz}
-    name: exit
-    version: 0.1.2
-    engines: {node: '>= 0.8.0'}
-    dev: true
-
-  registry.npmmirror.com/expand-brackets/2.1.4:
-    resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz}
-    name: expand-brackets
-    version: 2.1.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/2.6.9
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      posix-character-classes: registry.npmmirror.com/posix-character-classes/0.1.1
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/expand-tilde/2.0.2:
-    resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/expand-tilde/-/expand-tilde-2.0.2.tgz}
-    name: expand-tilde
-    version: 2.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      homedir-polyfill: registry.npmmirror.com/homedir-polyfill/1.0.3
-    dev: true
-
-  registry.npmmirror.com/expect/27.5.1:
-    resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/expect/-/expect-27.5.1.tgz}
-    name: expect
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      jest-get-type: registry.npmmirror.com/jest-get-type/27.5.1
-      jest-matcher-utils: registry.npmmirror.com/jest-matcher-utils/27.5.1
-      jest-message-util: registry.npmmirror.com/jest-message-util/27.5.1
-    dev: true
-
-  registry.npmmirror.com/extend-shallow/2.0.1:
-    resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz}
-    name: extend-shallow
-    version: 2.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-extendable: registry.npmmirror.com/is-extendable/0.1.1
-    dev: true
-
-  registry.npmmirror.com/extend-shallow/3.0.2:
-    resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz}
-    name: extend-shallow
-    version: 3.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      assign-symbols: registry.npmmirror.com/assign-symbols/1.0.0
-      is-extendable: registry.npmmirror.com/is-extendable/1.0.1
-    dev: true
-
-  registry.npmmirror.com/external-editor/3.1.0:
-    resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz}
-    name: external-editor
-    version: 3.1.0
-    engines: {node: '>=4'}
-    dependencies:
-      chardet: registry.npmmirror.com/chardet/0.7.0
-      iconv-lite: registry.npmmirror.com/iconv-lite/0.4.24
-      tmp: registry.npmmirror.com/tmp/0.0.33
-    dev: true
-
-  registry.npmmirror.com/extglob/2.0.4:
-    resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz}
-    name: extglob
-    version: 2.0.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      define-property: registry.npmmirror.com/define-property/1.0.0
-      expand-brackets: registry.npmmirror.com/expand-brackets/2.1.4
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/fast-deep-equal/3.1.3:
-    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz}
-    name: fast-deep-equal
-    version: 3.1.3
-    dev: true
-
-  registry.npmmirror.com/fast-diff/1.2.0:
-    resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-diff/-/fast-diff-1.2.0.tgz}
-    name: fast-diff
-    version: 1.2.0
-    dev: true
-
-  registry.npmmirror.com/fast-glob/3.2.12:
-    resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz}
-    name: fast-glob
-    version: 3.2.12
-    engines: {node: '>=8.6.0'}
-    dependencies:
-      '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5
-      '@nodelib/fs.walk': registry.npmmirror.com/@nodelib/fs.walk/1.2.8
-      glob-parent: registry.npmmirror.com/glob-parent/5.1.2
-      merge2: registry.npmmirror.com/merge2/1.4.1
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-    dev: true
-
-  registry.npmmirror.com/fast-json-stable-stringify/2.1.0:
-    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz}
-    name: fast-json-stable-stringify
-    version: 2.1.0
-    dev: true
-
-  registry.npmmirror.com/fast-levenshtein/2.0.6:
-    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz}
-    name: fast-levenshtein
-    version: 2.0.6
-    dev: true
-
-  registry.npmmirror.com/fast-xml-parser/4.1.3:
-    resolution: {integrity: sha512-LsNDahCiCcJPe8NO7HijcnukHB24tKbfDDA5IILx9dmW3Frb52lhbeX6MPNUSvyGNfav2VTYpJ/OqkRoVLrh2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.1.3.tgz}
-    name: fast-xml-parser
-    version: 4.1.3
-    hasBin: true
-    dependencies:
-      strnum: registry.npmmirror.com/strnum/1.0.5
-    dev: true
-
-  registry.npmmirror.com/fastest-levenshtein/1.0.16:
-    resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz}
-    name: fastest-levenshtein
-    version: 1.0.16
-    engines: {node: '>= 4.9.1'}
-
-  registry.npmmirror.com/fastq/1.15.0:
-    resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz}
-    name: fastq
-    version: 1.15.0
-    dependencies:
-      reusify: registry.npmmirror.com/reusify/1.0.4
-    dev: true
-
-  registry.npmmirror.com/fb-watchman/2.0.2:
-    resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.2.tgz}
-    name: fb-watchman
-    version: 2.0.2
-    dependencies:
-      bser: registry.npmmirror.com/bser/2.1.1
-    dev: true
-
-  registry.npmmirror.com/figures/1.7.0:
-    resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/figures/-/figures-1.7.0.tgz}
-    name: figures
-    version: 1.7.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-    dev: true
-
-  registry.npmmirror.com/figures/3.2.0:
-    resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz}
-    name: figures
-    version: 3.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
-    dev: true
-
-  registry.npmmirror.com/file-entry-cache/6.0.1:
-    resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz}
-    name: file-entry-cache
-    version: 6.0.1
-    engines: {node: ^10.12.0 || >=12.0.0}
-    dependencies:
-      flat-cache: registry.npmmirror.com/flat-cache/3.0.4
-    dev: true
-
-  registry.npmmirror.com/file-type/10.11.0:
-    resolution: {integrity: sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-type/-/file-type-10.11.0.tgz}
-    name: file-type
-    version: 10.11.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/file-type/12.4.2:
-    resolution: {integrity: sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-type/-/file-type-12.4.2.tgz}
-    name: file-type
-    version: 12.4.2
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/filelist/1.0.4:
-    resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/filelist/-/filelist-1.0.4.tgz}
-    name: filelist
-    version: 1.0.4
-    dependencies:
-      minimatch: registry.npmmirror.com/minimatch/5.1.6
-    dev: true
-
-  registry.npmmirror.com/fill-range/4.0.0:
-    resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz}
-    name: fill-range
-    version: 4.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      is-number: registry.npmmirror.com/is-number/3.0.0
-      repeat-string: registry.npmmirror.com/repeat-string/1.6.1
-      to-regex-range: registry.npmmirror.com/to-regex-range/2.1.1
-    dev: true
-
-  registry.npmmirror.com/fill-range/7.0.1:
-    resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz}
-    name: fill-range
-    version: 7.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      to-regex-range: registry.npmmirror.com/to-regex-range/5.0.1
-    dev: true
-
-  registry.npmmirror.com/finalhandler/1.1.2:
-    resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.2.tgz}
-    name: finalhandler
-    version: 1.1.2
-    engines: {node: '>= 0.8'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/2.6.9
-      encodeurl: registry.npmmirror.com/encodeurl/1.0.2
-      escape-html: registry.npmmirror.com/escape-html/1.0.3
-      on-finished: registry.npmmirror.com/on-finished/2.3.0
-      parseurl: registry.npmmirror.com/parseurl/1.3.3
-      statuses: registry.npmmirror.com/statuses/1.5.0
-      unpipe: registry.npmmirror.com/unpipe/1.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/find-node-modules/2.1.3:
-    resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-node-modules/-/find-node-modules-2.1.3.tgz}
-    name: find-node-modules
-    version: 2.1.3
-    dependencies:
-      findup-sync: registry.npmmirror.com/findup-sync/4.0.0
-      merge: registry.npmmirror.com/merge/2.1.1
-    dev: true
-
-  registry.npmmirror.com/find-root/1.1.0:
-    resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-root/-/find-root-1.1.0.tgz}
-    name: find-root
-    version: 1.1.0
-    dev: true
-
-  registry.npmmirror.com/find-up/1.1.2:
-    resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz}
-    name: find-up
-    version: 1.1.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      path-exists: registry.npmmirror.com/path-exists/2.1.0
-      pinkie-promise: registry.npmmirror.com/pinkie-promise/2.0.1
-    dev: true
-
-  registry.npmmirror.com/find-up/2.1.0:
-    resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-up/-/find-up-2.1.0.tgz}
-    name: find-up
-    version: 2.1.0
-    engines: {node: '>=4'}
-    dependencies:
-      locate-path: registry.npmmirror.com/locate-path/2.0.0
-    dev: true
-
-  registry.npmmirror.com/find-up/4.1.0:
-    resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz}
-    name: find-up
-    version: 4.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      locate-path: registry.npmmirror.com/locate-path/5.0.0
-      path-exists: registry.npmmirror.com/path-exists/4.0.0
-
-  registry.npmmirror.com/find-up/5.0.0:
-    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz}
-    name: find-up
-    version: 5.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      locate-path: registry.npmmirror.com/locate-path/6.0.0
-      path-exists: registry.npmmirror.com/path-exists/4.0.0
-    dev: true
-
-  registry.npmmirror.com/findup-sync/4.0.0:
-    resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/findup-sync/-/findup-sync-4.0.0.tgz}
-    name: findup-sync
-    version: 4.0.0
-    engines: {node: '>= 8'}
-    dependencies:
-      detect-file: registry.npmmirror.com/detect-file/1.0.0
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-      resolve-dir: registry.npmmirror.com/resolve-dir/1.0.1
-    dev: true
-
-  registry.npmmirror.com/flat-cache/3.0.4:
-    resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz}
-    name: flat-cache
-    version: 3.0.4
-    engines: {node: ^10.12.0 || >=12.0.0}
-    dependencies:
-      flatted: registry.npmmirror.com/flatted/3.2.7
-      rimraf: registry.npmmirror.com/rimraf/3.0.2
-    dev: true
-
-  registry.npmmirror.com/flatted/3.2.7:
-    resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz}
-    name: flatted
-    version: 3.2.7
-    dev: true
-
-  registry.npmmirror.com/follow-redirects/1.15.2:
-    resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz}
-    name: follow-redirects
-    version: 1.15.2
-    engines: {node: '>=4.0'}
-    peerDependencies:
-      debug: '*'
-    peerDependenciesMeta:
-      debug:
-        optional: true
-
-  registry.npmmirror.com/follow-redirects/1.15.2_debug@4.3.4:
-    resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz}
-    id: registry.npmmirror.com/follow-redirects/1.15.2
-    name: follow-redirects
-    version: 1.15.2
-    engines: {node: '>=4.0'}
-    peerDependencies:
-      debug: '*'
-    peerDependenciesMeta:
-      debug:
-        optional: true
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4
-    dev: true
-
-  registry.npmmirror.com/for-each/0.3.3:
-    resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz}
-    name: for-each
-    version: 0.3.3
-    dependencies:
-      is-callable: registry.npmmirror.com/is-callable/1.2.7
-    dev: true
-
-  registry.npmmirror.com/for-in/1.0.2:
-    resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz}
-    name: for-in
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/form-data/3.0.1:
-    resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/form-data/-/form-data-3.0.1.tgz}
-    name: form-data
-    version: 3.0.1
-    engines: {node: '>= 6'}
-    dependencies:
-      asynckit: registry.npmmirror.com/asynckit/0.4.0
-      combined-stream: registry.npmmirror.com/combined-stream/1.0.8
-      mime-types: registry.npmmirror.com/mime-types/2.1.35
-    dev: true
-
-  registry.npmmirror.com/form-data/4.0.0:
-    resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz}
-    name: form-data
-    version: 4.0.0
-    engines: {node: '>= 6'}
-    dependencies:
-      asynckit: registry.npmmirror.com/asynckit/0.4.0
-      combined-stream: registry.npmmirror.com/combined-stream/1.0.8
-      mime-types: registry.npmmirror.com/mime-types/2.1.35
-    dev: true
-
-  registry.npmmirror.com/fraction.js/4.2.0:
-    resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz}
-    name: fraction.js
-    version: 4.2.0
-    dev: true
-
-  registry.npmmirror.com/fragment-cache/0.2.1:
-    resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz}
-    name: fragment-cache
-    version: 0.2.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      map-cache: registry.npmmirror.com/map-cache/0.2.2
-    dev: true
-
-  registry.npmmirror.com/fs-extra/10.1.0:
-    resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz}
-    name: fs-extra
-    version: 10.1.0
-    engines: {node: '>=12'}
-    dependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-      jsonfile: registry.npmmirror.com/jsonfile/6.1.0
-      universalify: registry.npmmirror.com/universalify/2.0.0
-    dev: true
-
-  registry.npmmirror.com/fs-extra/9.1.0:
-    resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz}
-    name: fs-extra
-    version: 9.1.0
-    engines: {node: '>=10'}
-    dependencies:
-      at-least-node: registry.npmmirror.com/at-least-node/1.0.0
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-      jsonfile: registry.npmmirror.com/jsonfile/6.1.0
-      universalify: registry.npmmirror.com/universalify/2.0.0
-    dev: true
-
-  registry.npmmirror.com/fs.realpath/1.0.0:
-    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz}
-    name: fs.realpath
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/function-bind/1.1.1:
-    resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz}
-    name: function-bind
-    version: 1.1.1
-
-  registry.npmmirror.com/function.prototype.name/1.1.5:
-    resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz}
-    name: function.prototype.name
-    version: 1.1.5
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.2.0
-      es-abstract: registry.npmmirror.com/es-abstract/1.21.1
-      functions-have-names: registry.npmmirror.com/functions-have-names/1.2.3
-    dev: true
-
-  registry.npmmirror.com/functions-have-names/1.2.3:
-    resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz}
-    name: functions-have-names
-    version: 1.2.3
-    dev: true
-
-  registry.npmmirror.com/gensync/1.0.0-beta.2:
-    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz}
-    name: gensync
-    version: 1.0.0-beta.2
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  registry.npmmirror.com/get-caller-file/2.0.5:
-    resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz}
-    name: get-caller-file
-    version: 2.0.5
-    engines: {node: 6.* || 8.* || >= 10.*}
-
-  registry.npmmirror.com/get-intrinsic/1.2.0:
-    resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz}
-    name: get-intrinsic
-    version: 1.2.0
-    dependencies:
-      function-bind: registry.npmmirror.com/function-bind/1.1.1
-      has: registry.npmmirror.com/has/1.0.3
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-
-  registry.npmmirror.com/get-own-enumerable-property-symbols/3.0.2:
-    resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz}
-    name: get-own-enumerable-property-symbols
-    version: 3.0.2
-    dev: true
-
-  registry.npmmirror.com/get-package-type/0.1.0:
-    resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz}
-    name: get-package-type
-    version: 0.1.0
-    engines: {node: '>=8.0.0'}
-    dev: true
-
-  registry.npmmirror.com/get-pkg-repo/4.2.1:
-    resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz}
-    name: get-pkg-repo
-    version: 4.2.1
-    engines: {node: '>=6.9.0'}
-    hasBin: true
-    dependencies:
-      '@hutson/parse-repository-url': registry.npmmirror.com/@hutson/parse-repository-url/3.0.2
-      hosted-git-info: registry.npmmirror.com/hosted-git-info/4.1.0
-      through2: registry.npmmirror.com/through2/2.0.5
-      yargs: registry.npmmirror.com/yargs/16.2.0
-    dev: true
-
-  registry.npmmirror.com/get-stdin/4.0.1:
-    resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stdin/-/get-stdin-4.0.1.tgz}
-    name: get-stdin
-    version: 4.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/get-stream/4.1.0:
-    resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz}
-    name: get-stream
-    version: 4.1.0
-    engines: {node: '>=6'}
-    dependencies:
-      pump: 3.0.0
-    dev: true
-
-  registry.npmmirror.com/get-stream/5.2.0:
-    resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz}
-    name: get-stream
-    version: 5.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      pump: registry.npmmirror.com/pump/3.0.0
-    dev: true
-
-  registry.npmmirror.com/get-stream/6.0.1:
-    resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz}
-    name: get-stream
-    version: 6.0.1
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/get-symbol-description/1.0.0:
-    resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz}
-    name: get-symbol-description
-    version: 1.0.0
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.2.0
-    dev: true
-
-  registry.npmmirror.com/get-value/2.0.6:
-    resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz}
-    name: get-value
-    version: 2.0.6
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/gifsicle/5.2.0:
-    resolution: {integrity: sha512-vOIS3j0XoTCxq9pkGj43gEix82RkI5FveNgaFZutjbaui/HH+4fR8Y56dwXDuxYo8hR4xOo6/j2h1WHoQW6XLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gifsicle/-/gifsicle-5.2.0.tgz}
-    name: gifsicle
-    version: 5.2.0
-    engines: {node: '>=10'}
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      bin-build: registry.npmmirror.com/bin-build/3.0.0
-      bin-wrapper: /bin-wrapper-china/0.1.0
-      execa: registry.npmmirror.com/execa/5.1.1
-      logalot: registry.npmmirror.com/logalot/2.1.0
-    dev: true
-
-  registry.npmmirror.com/git-raw-commits/2.0.11:
-    resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz}
-    name: git-raw-commits
-    version: 2.0.11
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      dargs: registry.npmmirror.com/dargs/7.0.0
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      meow: registry.npmmirror.com/meow/8.1.2
-      split2: registry.npmmirror.com/split2/3.2.2
-      through2: registry.npmmirror.com/through2/4.0.2
-    dev: true
-
-  registry.npmmirror.com/git-remote-origin-url/2.0.0:
-    resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz}
-    name: git-remote-origin-url
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      gitconfiglocal: registry.npmmirror.com/gitconfiglocal/1.0.0
-      pify: 2.3.0
-    dev: true
-
-  registry.npmmirror.com/git-semver-tags/4.1.1:
-    resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz}
-    name: git-semver-tags
-    version: 4.1.1
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      meow: registry.npmmirror.com/meow/8.1.2
-      semver: registry.npmmirror.com/semver/6.3.0
-    dev: true
-
-  registry.npmmirror.com/gitconfiglocal/1.0.0:
-    resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz}
-    name: gitconfiglocal
-    version: 1.0.0
-    dependencies:
-      ini: registry.npmmirror.com/ini/1.3.8
-    dev: true
-
-  registry.npmmirror.com/glob-parent/5.1.2:
-    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz}
-    name: glob-parent
-    version: 5.1.2
-    engines: {node: '>= 6'}
-    dependencies:
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-    dev: true
-
-  registry.npmmirror.com/glob-parent/6.0.2:
-    resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz}
-    name: glob-parent
-    version: 6.0.2
-    engines: {node: '>=10.13.0'}
-    dependencies:
-      is-glob: registry.npmmirror.com/is-glob/4.0.3
-    dev: true
-
-  registry.npmmirror.com/glob/7.2.3:
-    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz}
-    name: glob
-    version: 7.2.3
-    dependencies:
-      fs.realpath: registry.npmmirror.com/fs.realpath/1.0.0
-      inflight: registry.npmmirror.com/inflight/1.0.6
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      minimatch: registry.npmmirror.com/minimatch/3.1.2
-      once: registry.npmmirror.com/once/1.4.0
-      path-is-absolute: registry.npmmirror.com/path-is-absolute/1.0.1
-    dev: true
-
-  registry.npmmirror.com/glob/8.1.0:
-    resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz}
-    name: glob
-    version: 8.1.0
-    engines: {node: '>=12'}
-    dependencies:
-      fs.realpath: registry.npmmirror.com/fs.realpath/1.0.0
-      inflight: registry.npmmirror.com/inflight/1.0.6
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      minimatch: registry.npmmirror.com/minimatch/5.1.6
-      once: registry.npmmirror.com/once/1.4.0
-    dev: true
-
-  registry.npmmirror.com/global-dirs/0.1.1:
-    resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/global-dirs/-/global-dirs-0.1.1.tgz}
-    name: global-dirs
-    version: 0.1.1
-    engines: {node: '>=4'}
-    dependencies:
-      ini: registry.npmmirror.com/ini/1.3.8
-    dev: true
-
-  registry.npmmirror.com/global-modules/1.0.0:
-    resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/global-modules/-/global-modules-1.0.0.tgz}
-    name: global-modules
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      global-prefix: registry.npmmirror.com/global-prefix/1.0.2
-      is-windows: registry.npmmirror.com/is-windows/1.0.2
-      resolve-dir: registry.npmmirror.com/resolve-dir/1.0.1
-    dev: true
-
-  registry.npmmirror.com/global-modules/2.0.0:
-    resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/global-modules/-/global-modules-2.0.0.tgz}
-    name: global-modules
-    version: 2.0.0
-    engines: {node: '>=6'}
-    dependencies:
-      global-prefix: registry.npmmirror.com/global-prefix/3.0.0
-    dev: true
-
-  registry.npmmirror.com/global-prefix/1.0.2:
-    resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/global-prefix/-/global-prefix-1.0.2.tgz}
-    name: global-prefix
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      expand-tilde: registry.npmmirror.com/expand-tilde/2.0.2
-      homedir-polyfill: registry.npmmirror.com/homedir-polyfill/1.0.3
-      ini: registry.npmmirror.com/ini/1.3.8
-      is-windows: registry.npmmirror.com/is-windows/1.0.2
-      which: registry.npmmirror.com/which/1.3.1
-    dev: true
-
-  registry.npmmirror.com/global-prefix/3.0.0:
-    resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/global-prefix/-/global-prefix-3.0.0.tgz}
-    name: global-prefix
-    version: 3.0.0
-    engines: {node: '>=6'}
-    dependencies:
-      ini: registry.npmmirror.com/ini/1.3.8
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-      which: registry.npmmirror.com/which/1.3.1
-    dev: true
-
-  registry.npmmirror.com/globals/11.12.0:
-    resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz}
-    name: globals
-    version: 11.12.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/globals/13.20.0:
-    resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globals/-/globals-13.20.0.tgz}
-    name: globals
-    version: 13.20.0
-    engines: {node: '>=8'}
-    dependencies:
-      type-fest: registry.npmmirror.com/type-fest/0.20.2
-    dev: true
-
-  registry.npmmirror.com/globalthis/1.0.3:
-    resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz}
-    name: globalthis
-    version: 1.0.3
-    engines: {node: '>= 0.4'}
-    dependencies:
-      define-properties: registry.npmmirror.com/define-properties/1.2.0
-    dev: true
-
-  registry.npmmirror.com/globby/10.0.2:
-    resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/-/globby-10.0.2.tgz}
-    name: globby
-    version: 10.0.2
-    engines: {node: '>=8'}
-    dependencies:
-      '@types/glob': registry.npmmirror.com/@types/glob/7.2.0
-      array-union: registry.npmmirror.com/array-union/2.1.0
-      dir-glob: registry.npmmirror.com/dir-glob/3.0.1
-      fast-glob: registry.npmmirror.com/fast-glob/3.2.12
-      glob: registry.npmmirror.com/glob/7.2.3
-      ignore: registry.npmmirror.com/ignore/5.2.4
-      merge2: registry.npmmirror.com/merge2/1.4.1
-      slash: registry.npmmirror.com/slash/3.0.0
-    dev: true
-
-  registry.npmmirror.com/globby/11.1.0:
-    resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz}
-    name: globby
-    version: 11.1.0
-    engines: {node: '>=10'}
-    dependencies:
-      array-union: registry.npmmirror.com/array-union/2.1.0
-      dir-glob: registry.npmmirror.com/dir-glob/3.0.1
-      fast-glob: registry.npmmirror.com/fast-glob/3.2.12
-      ignore: registry.npmmirror.com/ignore/5.2.4
-      merge2: registry.npmmirror.com/merge2/1.4.1
-      slash: registry.npmmirror.com/slash/3.0.0
-    dev: true
-
-  registry.npmmirror.com/globjoin/0.1.4:
-    resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globjoin/-/globjoin-0.1.4.tgz}
-    name: globjoin
-    version: 0.1.4
-    dev: true
-
-  registry.npmmirror.com/good-listener/1.2.2:
-    resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz}
-    name: good-listener
-    version: 1.2.2
-    dependencies:
-      delegate: registry.npmmirror.com/delegate/3.2.0
-    dev: false
-
-  registry.npmmirror.com/gopd/1.0.1:
-    resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz}
-    name: gopd
-    version: 1.0.1
-    dependencies:
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.2.0
-    dev: true
-
-  registry.npmmirror.com/graceful-fs/4.2.10:
-    resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz}
-    name: graceful-fs
-    version: 4.2.10
-    dev: true
-
-  registry.npmmirror.com/grapheme-splitter/1.0.4:
-    resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz}
-    name: grapheme-splitter
-    version: 1.0.4
-    dev: true
-
-  registry.npmmirror.com/handlebars/4.7.7:
-    resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/handlebars/-/handlebars-4.7.7.tgz}
-    name: handlebars
-    version: 4.7.7
-    engines: {node: '>=0.4.7'}
-    hasBin: true
-    dependencies:
-      minimist: registry.npmmirror.com/minimist/1.2.8
-      neo-async: registry.npmmirror.com/neo-async/2.6.2
-      source-map: 0.6.1
-      wordwrap: registry.npmmirror.com/wordwrap/1.0.0
-    optionalDependencies:
-      uglify-js: 3.17.4
-    dev: true
-
-  registry.npmmirror.com/hard-rejection/2.1.0:
-    resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hard-rejection/-/hard-rejection-2.1.0.tgz}
-    name: hard-rejection
-    version: 2.1.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/has-ansi/2.0.0:
-    resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz}
-    name: has-ansi
-    version: 2.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      ansi-regex: registry.npmmirror.com/ansi-regex/2.1.1
-    dev: true
-
-  registry.npmmirror.com/has-bigints/1.0.2:
-    resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz}
-    name: has-bigints
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/has-flag/1.0.0:
-    resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-1.0.0.tgz}
-    name: has-flag
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/has-flag/3.0.0:
-    resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz}
-    name: has-flag
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/has-flag/4.0.0:
-    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz}
-    name: has-flag
-    version: 4.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/has-property-descriptors/1.0.0:
-    resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz}
-    name: has-property-descriptors
-    version: 1.0.0
-    dependencies:
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.2.0
-
-  registry.npmmirror.com/has-proto/1.0.1:
-    resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz}
-    name: has-proto
-    version: 1.0.1
-    engines: {node: '>= 0.4'}
-    dev: true
-
-  registry.npmmirror.com/has-symbols/1.0.3:
-    resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz}
-    name: has-symbols
-    version: 1.0.3
-    engines: {node: '>= 0.4'}
-
-  registry.npmmirror.com/has-tostringtag/1.0.0:
-    resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz}
-    name: has-tostringtag
-    version: 1.0.0
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-    dev: true
-
-  registry.npmmirror.com/has-value/0.3.1:
-    resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz}
-    name: has-value
-    version: 0.3.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      get-value: registry.npmmirror.com/get-value/2.0.6
-      has-values: registry.npmmirror.com/has-values/0.1.4
-      isobject: registry.npmmirror.com/isobject/2.1.0
-    dev: true
-
-  registry.npmmirror.com/has-value/1.0.0:
-    resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz}
-    name: has-value
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      get-value: registry.npmmirror.com/get-value/2.0.6
-      has-values: registry.npmmirror.com/has-values/1.0.0
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/has-values/0.1.4:
-    resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz}
-    name: has-values
-    version: 0.1.4
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/has-values/1.0.0:
-    resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz}
-    name: has-values
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-number: registry.npmmirror.com/is-number/3.0.0
-      kind-of: registry.npmmirror.com/kind-of/4.0.0
-    dev: true
-
-  registry.npmmirror.com/has/1.0.3:
-    resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz}
-    name: has
-    version: 1.0.3
-    engines: {node: '>= 0.4.0'}
-    dependencies:
-      function-bind: registry.npmmirror.com/function-bind/1.1.1
-
-  registry.npmmirror.com/hash-sum/2.0.0:
-    resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz}
-    name: hash-sum
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/he/1.2.0:
-    resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/he/-/he-1.2.0.tgz}
-    name: he
-    version: 1.2.0
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/header-case/2.0.4:
-    resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/header-case/-/header-case-2.0.4.tgz}
-    name: header-case
-    version: 2.0.4
-    dependencies:
-      capital-case: registry.npmmirror.com/capital-case/1.0.4
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/homedir-polyfill/1.0.3:
-    resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz}
-    name: homedir-polyfill
-    version: 1.0.3
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      parse-passwd: registry.npmmirror.com/parse-passwd/1.0.0
-    dev: true
-
-  registry.npmmirror.com/hosted-git-info/2.8.9:
-    resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz}
-    name: hosted-git-info
-    version: 2.8.9
-    dev: true
-
-  registry.npmmirror.com/hosted-git-info/4.1.0:
-    resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz}
-    name: hosted-git-info
-    version: 4.1.0
-    engines: {node: '>=10'}
-    dependencies:
-      lru-cache: registry.npmmirror.com/lru-cache/6.0.0
-    dev: true
-
-  registry.npmmirror.com/html-encoding-sniffer/2.0.1:
-    resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz}
-    name: html-encoding-sniffer
-    version: 2.0.1
-    engines: {node: '>=10'}
-    dependencies:
-      whatwg-encoding: registry.npmmirror.com/whatwg-encoding/1.0.5
-    dev: true
-
-  registry.npmmirror.com/html-encoding-sniffer/3.0.0:
-    resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz}
-    name: html-encoding-sniffer
-    version: 3.0.0
-    engines: {node: '>=12'}
-    dependencies:
-      whatwg-encoding: registry.npmmirror.com/whatwg-encoding/2.0.0
-    dev: true
-
-  registry.npmmirror.com/html-escaper/2.0.2:
-    resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz}
-    name: html-escaper
-    version: 2.0.2
-    dev: true
-
-  registry.npmmirror.com/html-minifier-terser/6.1.0:
-    resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz}
-    name: html-minifier-terser
-    version: 6.1.0
-    engines: {node: '>=12'}
-    hasBin: true
-    dependencies:
-      camel-case: registry.npmmirror.com/camel-case/4.1.2
-      clean-css: registry.npmmirror.com/clean-css/5.3.2
-      commander: registry.npmmirror.com/commander/8.3.0
-      he: registry.npmmirror.com/he/1.2.0
-      param-case: registry.npmmirror.com/param-case/3.0.4
-      relateurl: registry.npmmirror.com/relateurl/0.2.7
-      terser: registry.npmmirror.com/terser/5.16.5
-    dev: true
-
-  registry.npmmirror.com/html-tags/3.2.0:
-    resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-tags/-/html-tags-3.2.0.tgz}
-    name: html-tags
-    version: 3.2.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/htmlparser2/3.10.1:
-    resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-3.10.1.tgz}
-    name: htmlparser2
-    version: 3.10.1
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/1.3.1
-      domhandler: registry.npmmirror.com/domhandler/2.4.2
-      domutils: registry.npmmirror.com/domutils/1.7.0
-      entities: registry.npmmirror.com/entities/1.1.2
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      readable-stream: registry.npmmirror.com/readable-stream/3.6.1
-    dev: true
-
-  registry.npmmirror.com/htmlparser2/8.0.1:
-    resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.1.tgz}
-    name: htmlparser2
-    version: 8.0.1
-    dependencies:
-      domelementtype: registry.npmmirror.com/domelementtype/2.3.0
-      domhandler: registry.npmmirror.com/domhandler/5.0.3
-      domutils: registry.npmmirror.com/domutils/3.0.1
-      entities: registry.npmmirror.com/entities/4.4.0
-    dev: true
-
-  registry.npmmirror.com/http-proxy-agent/4.0.1:
-    resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz}
-    name: http-proxy-agent
-    version: 4.0.1
-    engines: {node: '>= 6'}
-    dependencies:
-      '@tootallnate/once': registry.npmmirror.com/@tootallnate/once/1.1.2
-      agent-base: registry.npmmirror.com/agent-base/6.0.2
-      debug: registry.npmmirror.com/debug/4.3.4
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/http-proxy/1.18.1:
-    resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz}
-    name: http-proxy
-    version: 1.18.1
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      eventemitter3: registry.npmmirror.com/eventemitter3/4.0.7
-      follow-redirects: registry.npmmirror.com/follow-redirects/1.15.2
-      requires-port: registry.npmmirror.com/requires-port/1.0.0
-    transitivePeerDependencies:
-      - debug
-    dev: true
-
-  registry.npmmirror.com/http-server/14.1.1:
-    resolution: {integrity: sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/http-server/-/http-server-14.1.1.tgz}
-    name: http-server
-    version: 14.1.1
-    engines: {node: '>=12'}
-    hasBin: true
-    dependencies:
-      basic-auth: registry.npmmirror.com/basic-auth/2.0.1
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      corser: registry.npmmirror.com/corser/2.0.1
-      he: registry.npmmirror.com/he/1.2.0
-      html-encoding-sniffer: registry.npmmirror.com/html-encoding-sniffer/3.0.0
-      http-proxy: registry.npmmirror.com/http-proxy/1.18.1
-      mime: registry.npmmirror.com/mime/1.6.0
-      minimist: registry.npmmirror.com/minimist/1.2.8
-      opener: registry.npmmirror.com/opener/1.5.2
-      portfinder: registry.npmmirror.com/portfinder/1.0.32
-      secure-compare: registry.npmmirror.com/secure-compare/3.0.1
-      union: registry.npmmirror.com/union/0.5.0
-      url-join: registry.npmmirror.com/url-join/4.0.1
-    transitivePeerDependencies:
-      - debug
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/https-proxy-agent/5.0.1:
-    resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz}
-    name: https-proxy-agent
-    version: 5.0.1
-    engines: {node: '>= 6'}
-    dependencies:
-      agent-base: registry.npmmirror.com/agent-base/6.0.2
-      debug: registry.npmmirror.com/debug/4.3.4
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/human-signals/1.1.1:
-    resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz}
-    name: human-signals
-    version: 1.1.1
-    engines: {node: '>=8.12.0'}
-    dev: true
-
-  registry.npmmirror.com/human-signals/2.1.0:
-    resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz}
-    name: human-signals
-    version: 2.1.0
-    engines: {node: '>=10.17.0'}
-    dev: true
-
-  registry.npmmirror.com/husky/7.0.4:
-    resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/husky/-/husky-7.0.4.tgz}
-    name: husky
-    version: 7.0.4
-    engines: {node: '>=12'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/iconv-lite/0.4.24:
-    resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz}
-    name: iconv-lite
-    version: 0.4.24
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2
-    dev: true
-
-  registry.npmmirror.com/iconv-lite/0.6.3:
-    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz}
-    name: iconv-lite
-    version: 0.6.3
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2
-    dev: true
-
-  registry.npmmirror.com/idb/7.1.1:
-    resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/idb/-/idb-7.1.1.tgz}
-    name: idb
-    version: 7.1.1
-    dev: true
-
-  registry.npmmirror.com/ids/1.0.0:
-    resolution: {integrity: sha512-Zvtq1xUto4LttpstyOlFum8lKx+i1OmRfg+6A9drFS9iSZsDPMHG4Sof/qwNR4kCU7jBeWFPrY2ocHxiz7cCRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ids/-/ids-1.0.0.tgz}
-    name: ids
-    version: 1.0.0
-    dev: false
-
-  registry.npmmirror.com/ieee754/1.2.1:
-    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz}
-    name: ieee754
-    version: 1.2.1
-    dev: true
-
-  registry.npmmirror.com/ignore/5.2.4:
-    resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz}
-    name: ignore
-    version: 5.2.4
-    engines: {node: '>= 4'}
-    dev: true
-
-  registry.npmmirror.com/imagemin-gifsicle/7.0.0:
-    resolution: {integrity: sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz}
-    name: imagemin-gifsicle
-    version: 7.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      execa: registry.npmmirror.com/execa/1.0.0
-      gifsicle: registry.npmmirror.com/gifsicle/5.2.0
-      is-gif: registry.npmmirror.com/is-gif/3.0.0
-    dev: true
-
-  registry.npmmirror.com/imagemin-jpegtran/7.0.0:
-    resolution: {integrity: sha512-MJoyTCW8YjMJf56NorFE41SR/WkaGA3IYk4JgvMlRwguJEEd3PnP9UxA8Y2UWjquz8d+On3Ds/03ZfiiLS8xTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imagemin-jpegtran/-/imagemin-jpegtran-7.0.0.tgz}
-    name: imagemin-jpegtran
-    version: 7.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      exec-buffer: registry.npmmirror.com/exec-buffer/3.2.0
-      is-jpg: registry.npmmirror.com/is-jpg/2.0.0
-      jpegtran-bin: registry.npmmirror.com/jpegtran-bin/5.0.2
-    dev: true
-
-  registry.npmmirror.com/imagemin-mozjpeg/9.0.0:
-    resolution: {integrity: sha512-TwOjTzYqCFRgROTWpVSt5UTT0JeCuzF1jswPLKALDd89+PmrJ2PdMMYeDLYZ1fs9cTovI9GJd68mRSnuVt691w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imagemin-mozjpeg/-/imagemin-mozjpeg-9.0.0.tgz}
-    name: imagemin-mozjpeg
-    version: 9.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      execa: registry.npmmirror.com/execa/4.1.0
-      is-jpg: registry.npmmirror.com/is-jpg/2.0.0
-      mozjpeg: registry.npmmirror.com/mozjpeg/7.1.1
-    dev: true
-
-  registry.npmmirror.com/imagemin-optipng/8.0.0:
-    resolution: {integrity: sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imagemin-optipng/-/imagemin-optipng-8.0.0.tgz}
-    name: imagemin-optipng
-    version: 8.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      exec-buffer: registry.npmmirror.com/exec-buffer/3.2.0
-      is-png: registry.npmmirror.com/is-png/2.0.0
-      optipng-bin: registry.npmmirror.com/optipng-bin/7.0.1
-    dev: true
-
-  registry.npmmirror.com/imagemin-pngquant/9.0.2:
-    resolution: {integrity: sha512-cj//bKo8+Frd/DM8l6Pg9pws1pnDUjgb7ae++sUX1kUVdv2nrngPykhiUOgFeE0LGY/LmUbCf4egCHC4YUcZSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imagemin-pngquant/-/imagemin-pngquant-9.0.2.tgz}
-    name: imagemin-pngquant
-    version: 9.0.2
-    engines: {node: '>=10'}
-    dependencies:
-      execa: registry.npmmirror.com/execa/4.1.0
-      is-png: registry.npmmirror.com/is-png/2.0.0
-      is-stream: registry.npmmirror.com/is-stream/2.0.1
-      ow: registry.npmmirror.com/ow/0.17.0
-      pngquant-bin: registry.npmmirror.com/pngquant-bin/6.0.1
-    dev: true
-
-  registry.npmmirror.com/imagemin-svgo/9.0.0:
-    resolution: {integrity: sha512-uNgXpKHd99C0WODkrJ8OO/3zW3qjgS4pW7hcuII0RcHN3tnKxDjJWcitdVC/TZyfIqSricU8WfrHn26bdSW62g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imagemin-svgo/-/imagemin-svgo-9.0.0.tgz}
-    name: imagemin-svgo
-    version: 9.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      is-svg: registry.npmmirror.com/is-svg/4.4.0
-      svgo: registry.npmmirror.com/svgo/2.8.0
-    dev: true
-
-  registry.npmmirror.com/imagemin-webp/6.1.0:
-    resolution: {integrity: sha512-i8ZluZV1pfQX9aVzmZ/VZh9KBSdPwUlp5VruAa9c30GZnX/nMl5n7h+oUMnI7Mg7+SUpu9mYBsw2nsYGUEllWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imagemin-webp/-/imagemin-webp-6.1.0.tgz}
-    name: imagemin-webp
-    version: 6.1.0
-    engines: {node: '>=10'}
-    dependencies:
-      cwebp-bin: registry.npmmirror.com/cwebp-bin/6.1.2
-      exec-buffer: registry.npmmirror.com/exec-buffer/3.2.0
-      is-cwebp-readable: registry.npmmirror.com/is-cwebp-readable/3.0.0
-    dev: true
-
-  registry.npmmirror.com/imagemin/7.0.1:
-    resolution: {integrity: sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imagemin/-/imagemin-7.0.1.tgz}
-    name: imagemin
-    version: 7.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      file-type: registry.npmmirror.com/file-type/12.4.2
-      globby: registry.npmmirror.com/globby/10.0.2
-      graceful-fs: 4.2.10
-      junk: registry.npmmirror.com/junk/3.1.0
-      make-dir: 3.1.0
-      p-pipe: registry.npmmirror.com/p-pipe/3.1.0
-      replace-ext: registry.npmmirror.com/replace-ext/1.0.1
-    dev: true
-
-  registry.npmmirror.com/import-fresh/3.3.0:
-    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz}
-    name: import-fresh
-    version: 3.3.0
-    engines: {node: '>=6'}
-    dependencies:
-      parent-module: registry.npmmirror.com/parent-module/1.0.1
-      resolve-from: registry.npmmirror.com/resolve-from/4.0.0
-    dev: true
-
-  registry.npmmirror.com/import-lazy/4.0.0:
-    resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-lazy/-/import-lazy-4.0.0.tgz}
-    name: import-lazy
-    version: 4.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/import-local/3.1.0:
-    resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz}
-    name: import-local
-    version: 3.1.0
-    engines: {node: '>=8'}
-    hasBin: true
-    dependencies:
-      pkg-dir: registry.npmmirror.com/pkg-dir/4.2.0
-      resolve-cwd: registry.npmmirror.com/resolve-cwd/3.0.0
-    dev: true
-
-  registry.npmmirror.com/import-meta-resolve/1.1.1:
-    resolution: {integrity: sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz}
-    name: import-meta-resolve
-    version: 1.1.1
-    dependencies:
-      builtins: registry.npmmirror.com/builtins/4.1.0
-    dev: true
-
-  registry.npmmirror.com/imurmurhash/0.1.4:
-    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz}
-    name: imurmurhash
-    version: 0.1.4
-    engines: {node: '>=0.8.19'}
-    dev: true
-
-  registry.npmmirror.com/indent-string/2.1.0:
-    resolution: {integrity: sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-2.1.0.tgz}
-    name: indent-string
-    version: 2.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      repeating: registry.npmmirror.com/repeating/2.0.1
-    dev: true
-
-  registry.npmmirror.com/indent-string/4.0.0:
-    resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz}
-    name: indent-string
-    version: 4.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/inflight/1.0.6:
-    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz}
-    name: inflight
-    version: 1.0.6
-    dependencies:
-      once: registry.npmmirror.com/once/1.4.0
-      wrappy: registry.npmmirror.com/wrappy/1.0.2
-    dev: true
-
-  registry.npmmirror.com/inherits/2.0.4:
-    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz}
-    name: inherits
-    version: 2.0.4
-    dev: true
-
-  registry.npmmirror.com/ini/1.3.8:
-    resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz}
-    name: ini
-    version: 1.3.8
-    dev: true
-
-  registry.npmmirror.com/inquirer/8.2.5:
-    resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inquirer/-/inquirer-8.2.5.tgz}
-    name: inquirer
-    version: 8.2.5
-    engines: {node: '>=12.0.0'}
-    dependencies:
-      ansi-escapes: registry.npmmirror.com/ansi-escapes/4.3.2
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      cli-cursor: registry.npmmirror.com/cli-cursor/3.1.0
-      cli-width: registry.npmmirror.com/cli-width/3.0.0
-      external-editor: registry.npmmirror.com/external-editor/3.1.0
-      figures: registry.npmmirror.com/figures/3.2.0
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      mute-stream: registry.npmmirror.com/mute-stream/0.0.8
-      ora: registry.npmmirror.com/ora/5.4.1
-      run-async: registry.npmmirror.com/run-async/2.4.1
-      rxjs: registry.npmmirror.com/rxjs/7.8.0
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-      through: registry.npmmirror.com/through/2.3.8
-      wrap-ansi: registry.npmmirror.com/wrap-ansi/7.0.0
-    dev: true
-
-  registry.npmmirror.com/internal-slot/1.0.5:
-    resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.5.tgz}
-    name: internal-slot
-    version: 1.0.5
-    engines: {node: '>= 0.4'}
-    dependencies:
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.2.0
-      has: registry.npmmirror.com/has/1.0.3
-      side-channel: registry.npmmirror.com/side-channel/1.0.4
-    dev: true
-
-  registry.npmmirror.com/intro.js/5.1.0:
-    resolution: {integrity: sha512-zwWl/duTh00eeNcZRU4o4/xxloNYPFKs4n4lMRDNx59jZr+qRI0jSOnzqYMOuVftD4beGrmxBHz4k8qp9/dCMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/intro.js/-/intro.js-5.1.0.tgz}
-    name: intro.js
-    version: 5.1.0
-    dev: false
-
-  registry.npmmirror.com/is-accessor-descriptor/0.1.6:
-    resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz}
-    name: is-accessor-descriptor
-    version: 0.1.6
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/is-accessor-descriptor/1.0.0:
-    resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz}
-    name: is-accessor-descriptor
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-    dev: true
-
-  registry.npmmirror.com/is-array-buffer/3.0.2:
-    resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz}
-    name: is-array-buffer
-    version: 3.0.2
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.2.0
-      is-typed-array: registry.npmmirror.com/is-typed-array/1.1.10
-    dev: true
-
-  registry.npmmirror.com/is-arrayish/0.2.1:
-    resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz}
-    name: is-arrayish
-    version: 0.2.1
-    dev: true
-
-  registry.npmmirror.com/is-bigint/1.0.4:
-    resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz}
-    name: is-bigint
-    version: 1.0.4
-    dependencies:
-      has-bigints: registry.npmmirror.com/has-bigints/1.0.2
-    dev: true
-
-  registry.npmmirror.com/is-binary-path/2.1.0:
-    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz}
-    name: is-binary-path
-    version: 2.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      binary-extensions: registry.npmmirror.com/binary-extensions/2.2.0
-    dev: true
-
-  registry.npmmirror.com/is-boolean-object/1.1.2:
-    resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz}
-    name: is-boolean-object
-    version: 1.1.2
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-buffer/1.1.6:
-    resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz}
-    name: is-buffer
-    version: 1.1.6
-
-  registry.npmmirror.com/is-builtin-module/3.2.1:
-    resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz}
-    name: is-builtin-module
-    version: 3.2.1
-    engines: {node: '>=6'}
-    dependencies:
-      builtin-modules: registry.npmmirror.com/builtin-modules/3.3.0
-    dev: true
-
-  registry.npmmirror.com/is-callable/1.2.7:
-    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz}
-    name: is-callable
-    version: 1.2.7
-    engines: {node: '>= 0.4'}
-    dev: true
-
-  registry.npmmirror.com/is-ci/3.0.1:
-    resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-ci/-/is-ci-3.0.1.tgz}
-    name: is-ci
-    version: 3.0.1
-    hasBin: true
-    dependencies:
-      ci-info: registry.npmmirror.com/ci-info/3.8.0
-    dev: true
-
-  registry.npmmirror.com/is-core-module/2.11.0:
-    resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz}
-    name: is-core-module
-    version: 2.11.0
-    dependencies:
-      has: registry.npmmirror.com/has/1.0.3
-    dev: true
-
-  registry.npmmirror.com/is-cwebp-readable/3.0.0:
-    resolution: {integrity: sha512-bpELc7/Q1/U5MWHn4NdHI44R3jxk0h9ew9ljzabiRl70/UIjL/ZAqRMb52F5+eke/VC8yTiv4Ewryo1fPWidvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-cwebp-readable/-/is-cwebp-readable-3.0.0.tgz}
-    name: is-cwebp-readable
-    version: 3.0.0
-    dependencies:
-      file-type: registry.npmmirror.com/file-type/10.11.0
-    dev: true
-
-  registry.npmmirror.com/is-data-descriptor/0.1.4:
-    resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz}
-    name: is-data-descriptor
-    version: 0.1.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/is-data-descriptor/1.0.0:
-    resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz}
-    name: is-data-descriptor
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-    dev: true
-
-  registry.npmmirror.com/is-date-object/1.0.5:
-    resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz}
-    name: is-date-object
-    version: 1.0.5
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-descriptor/0.1.6:
-    resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz}
-    name: is-descriptor
-    version: 0.1.6
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-accessor-descriptor: registry.npmmirror.com/is-accessor-descriptor/0.1.6
-      is-data-descriptor: registry.npmmirror.com/is-data-descriptor/0.1.4
-      kind-of: registry.npmmirror.com/kind-of/5.1.0
-    dev: true
-
-  registry.npmmirror.com/is-descriptor/1.0.2:
-    resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz}
-    name: is-descriptor
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-accessor-descriptor: registry.npmmirror.com/is-accessor-descriptor/1.0.0
-      is-data-descriptor: registry.npmmirror.com/is-data-descriptor/1.0.0
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-    dev: true
-
-  registry.npmmirror.com/is-docker/2.2.1:
-    resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz}
-    name: is-docker
-    version: 2.2.1
-    engines: {node: '>=8'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/is-expression/4.0.0:
-    resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-expression/-/is-expression-4.0.0.tgz}
-    name: is-expression
-    version: 4.0.0
-    dependencies:
-      acorn: registry.npmmirror.com/acorn/7.4.1
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-    dev: true
-
-  registry.npmmirror.com/is-extendable/0.1.1:
-    resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz}
-    name: is-extendable
-    version: 0.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-extendable/1.0.1:
-    resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz}
-    name: is-extendable
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-plain-object: registry.npmmirror.com/is-plain-object/2.0.4
-    dev: true
-
-  registry.npmmirror.com/is-extglob/2.1.1:
-    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz}
-    name: is-extglob
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-finite/1.1.0:
-    resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-finite/-/is-finite-1.1.0.tgz}
-    name: is-finite
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-fullwidth-code-point/3.0.0:
-    resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz}
-    name: is-fullwidth-code-point
-    version: 3.0.0
-    engines: {node: '>=8'}
-
-  registry.npmmirror.com/is-fullwidth-code-point/4.0.0:
-    resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz}
-    name: is-fullwidth-code-point
-    version: 4.0.0
-    engines: {node: '>=12'}
-    dev: true
-
-  registry.npmmirror.com/is-generator-fn/2.1.0:
-    resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz}
-    name: is-generator-fn
-    version: 2.1.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/is-gif/3.0.0:
-    resolution: {integrity: sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-gif/-/is-gif-3.0.0.tgz}
-    name: is-gif
-    version: 3.0.0
-    engines: {node: '>=6'}
-    dependencies:
-      file-type: registry.npmmirror.com/file-type/10.11.0
-    dev: true
-
-  registry.npmmirror.com/is-glob/4.0.3:
-    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz}
-    name: is-glob
-    version: 4.0.3
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-extglob: registry.npmmirror.com/is-extglob/2.1.1
-    dev: true
-
-  registry.npmmirror.com/is-interactive/1.0.0:
-    resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz}
-    name: is-interactive
-    version: 1.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/is-jpg/2.0.0:
-    resolution: {integrity: sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-jpg/-/is-jpg-2.0.0.tgz}
-    name: is-jpg
-    version: 2.0.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/is-module/1.0.0:
-    resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-module/-/is-module-1.0.0.tgz}
-    name: is-module
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-nan/1.3.2:
-    resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-nan/-/is-nan-1.3.2.tgz}
-    name: is-nan
-    version: 1.3.2
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.2.0
-    dev: false
-
-  registry.npmmirror.com/is-negative-zero/2.0.2:
-    resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz}
-    name: is-negative-zero
-    version: 2.0.2
-    engines: {node: '>= 0.4'}
-    dev: true
-
-  registry.npmmirror.com/is-number-object/1.0.7:
-    resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz}
-    name: is-number-object
-    version: 1.0.7
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-number/3.0.0:
-    resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz}
-    name: is-number
-    version: 3.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/is-number/7.0.0:
-    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz}
-    name: is-number
-    version: 7.0.0
-    engines: {node: '>=0.12.0'}
-    dev: true
-
-  registry.npmmirror.com/is-obj/1.0.1:
-    resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz}
-    name: is-obj
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-obj/2.0.0:
-    resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz}
-    name: is-obj
-    version: 2.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/is-path-inside/3.0.3:
-    resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz}
-    name: is-path-inside
-    version: 3.0.3
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/is-plain-obj/1.1.0:
-    resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz}
-    name: is-plain-obj
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-plain-object/2.0.4:
-    resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz}
-    name: is-plain-object
-    version: 2.0.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/is-plain-object/3.0.1:
-    resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz}
-    name: is-plain-object
-    version: 3.0.1
-    engines: {node: '>=0.10.0'}
-    dev: false
-
-  registry.npmmirror.com/is-plain-object/5.0.0:
-    resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz}
-    name: is-plain-object
-    version: 5.0.0
-    engines: {node: '>=0.10.0'}
-
-  registry.npmmirror.com/is-png/2.0.0:
-    resolution: {integrity: sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-png/-/is-png-2.0.0.tgz}
-    name: is-png
-    version: 2.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/is-potential-custom-element-name/1.0.1:
-    resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz}
-    name: is-potential-custom-element-name
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/is-regex/1.1.4:
-    resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz}
-    name: is-regex
-    version: 1.1.4
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-regexp/1.0.0:
-    resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz}
-    name: is-regexp
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-shared-array-buffer/1.0.2:
-    resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz}
-    name: is-shared-array-buffer
-    version: 1.0.2
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-    dev: true
-
-  registry.npmmirror.com/is-stream/1.1.0:
-    resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz}
-    name: is-stream
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-stream/2.0.1:
-    resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz}
-    name: is-stream
-    version: 2.0.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/is-string/1.0.7:
-    resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz}
-    name: is-string
-    version: 1.0.7
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-svg/4.4.0:
-    resolution: {integrity: sha512-v+AgVwiK5DsGtT9ng+m4mClp6zDAmwrW8nZi6Gg15qzvBnRWWdfWA1TGaXyCDnWq5g5asofIgMVl3PjKxvk1ug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-svg/-/is-svg-4.4.0.tgz}
-    name: is-svg
-    version: 4.4.0
-    engines: {node: '>=6'}
-    dependencies:
-      fast-xml-parser: registry.npmmirror.com/fast-xml-parser/4.1.3
-    dev: true
-
-  registry.npmmirror.com/is-symbol/1.0.4:
-    resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz}
-    name: is-symbol
-    version: 1.0.4
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-    dev: true
-
-  registry.npmmirror.com/is-text-path/1.0.1:
-    resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-text-path/-/is-text-path-1.0.1.tgz}
-    name: is-text-path
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      text-extensions: registry.npmmirror.com/text-extensions/1.9.0
-    dev: true
-
-  registry.npmmirror.com/is-typed-array/1.1.10:
-    resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.10.tgz}
-    name: is-typed-array
-    version: 1.1.10
-    engines: {node: '>= 0.4'}
-    dependencies:
-      available-typed-arrays: registry.npmmirror.com/available-typed-arrays/1.0.5
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      for-each: registry.npmmirror.com/for-each/0.3.3
-      gopd: registry.npmmirror.com/gopd/1.0.1
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-typedarray/1.0.0:
-    resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz}
-    name: is-typedarray
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/is-unicode-supported/0.1.0:
-    resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz}
-    name: is-unicode-supported
-    version: 0.1.0
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/is-utf8/0.2.1:
-    resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-utf8/-/is-utf8-0.2.1.tgz}
-    name: is-utf8
-    version: 0.2.1
-    dev: true
-
-  registry.npmmirror.com/is-weakref/1.0.2:
-    resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz}
-    name: is-weakref
-    version: 1.0.2
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-    dev: true
-
-  registry.npmmirror.com/is-what/3.14.1:
-    resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz}
-    name: is-what
-    version: 3.14.1
-    dev: true
-
-  registry.npmmirror.com/is-windows/1.0.2:
-    resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz}
-    name: is-windows
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/is-wsl/2.2.0:
-    resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz}
-    name: is-wsl
-    version: 2.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      is-docker: registry.npmmirror.com/is-docker/2.2.1
-    dev: true
-
-  registry.npmmirror.com/isarray/1.0.0:
-    resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz}
-    name: isarray
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/isexe/2.0.0:
-    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz}
-    name: isexe
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/isobject/2.1.0:
-    resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz}
-    name: isobject
-    version: 2.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      isarray: registry.npmmirror.com/isarray/1.0.0
-    dev: true
-
-  registry.npmmirror.com/isobject/3.0.1:
-    resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz}
-    name: isobject
-    version: 3.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/istanbul-lib-coverage/3.2.0:
-    resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz}
-    name: istanbul-lib-coverage
-    version: 3.2.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/istanbul-lib-instrument/5.2.1:
-    resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz}
-    name: istanbul-lib-instrument
-    version: 5.2.1
-    engines: {node: '>=8'}
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/parser': registry.npmmirror.com/@babel/parser/7.21.2
-      '@istanbuljs/schema': registry.npmmirror.com/@istanbuljs/schema/0.1.3
-      istanbul-lib-coverage: registry.npmmirror.com/istanbul-lib-coverage/3.2.0
-      semver: registry.npmmirror.com/semver/6.3.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/istanbul-lib-report/3.0.0:
-    resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz}
-    name: istanbul-lib-report
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      istanbul-lib-coverage: registry.npmmirror.com/istanbul-lib-coverage/3.2.0
-      make-dir: 3.1.0
-      supports-color: registry.npmmirror.com/supports-color/7.2.0
-    dev: true
-
-  registry.npmmirror.com/istanbul-lib-source-maps/4.0.1:
-    resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz}
-    name: istanbul-lib-source-maps
-    version: 4.0.1
-    engines: {node: '>=10'}
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4
-      istanbul-lib-coverage: registry.npmmirror.com/istanbul-lib-coverage/3.2.0
-      source-map: 0.6.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/istanbul-reports/3.1.5:
-    resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz}
-    name: istanbul-reports
-    version: 3.1.5
-    engines: {node: '>=8'}
-    dependencies:
-      html-escaper: registry.npmmirror.com/html-escaper/2.0.2
-      istanbul-lib-report: registry.npmmirror.com/istanbul-lib-report/3.0.0
-    dev: true
-
-  registry.npmmirror.com/jake/10.8.5:
-    resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jake/-/jake-10.8.5.tgz}
-    name: jake
-    version: 10.8.5
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      async: registry.npmmirror.com/async/3.2.4
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      filelist: registry.npmmirror.com/filelist/1.0.4
-      minimatch: registry.npmmirror.com/minimatch/3.1.2
-    dev: true
-
-  registry.npmmirror.com/jest-changed-files/27.5.1:
-    resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz}
-    name: jest-changed-files
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      execa: registry.npmmirror.com/execa/5.1.1
-      throat: registry.npmmirror.com/throat/6.0.2
-    dev: true
-
-  registry.npmmirror.com/jest-circus/27.5.1:
-    resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-circus/-/jest-circus-27.5.1.tgz}
-    name: jest-circus
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/environment': registry.npmmirror.com/@jest/environment/27.5.1
-      '@jest/test-result': registry.npmmirror.com/@jest/test-result/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      co: registry.npmmirror.com/co/4.6.0
-      dedent: registry.npmmirror.com/dedent/0.7.0
-      expect: registry.npmmirror.com/expect/27.5.1
-      is-generator-fn: registry.npmmirror.com/is-generator-fn/2.1.0
-      jest-each: registry.npmmirror.com/jest-each/27.5.1
-      jest-matcher-utils: registry.npmmirror.com/jest-matcher-utils/27.5.1
-      jest-message-util: registry.npmmirror.com/jest-message-util/27.5.1
-      jest-runtime: registry.npmmirror.com/jest-runtime/27.5.1
-      jest-snapshot: registry.npmmirror.com/jest-snapshot/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      pretty-format: registry.npmmirror.com/pretty-format/27.5.1
-      slash: registry.npmmirror.com/slash/3.0.0
-      stack-utils: registry.npmmirror.com/stack-utils/2.0.6
-      throat: registry.npmmirror.com/throat/6.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/jest-cli/27.5.1_ts-node@10.9.1:
-    resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-cli/-/jest-cli-27.5.1.tgz}
-    id: registry.npmmirror.com/jest-cli/27.5.1
-    name: jest-cli
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    hasBin: true
-    peerDependencies:
-      node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
-    peerDependenciesMeta:
-      node-notifier:
-        optional: true
-    dependencies:
-      '@jest/core': registry.npmmirror.com/@jest/core/27.5.1_ts-node@10.9.1
-      '@jest/test-result': registry.npmmirror.com/@jest/test-result/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      exit: registry.npmmirror.com/exit/0.1.2
-      graceful-fs: 4.2.10
-      import-local: registry.npmmirror.com/import-local/3.1.0
-      jest-config: registry.npmmirror.com/jest-config/27.5.1_ts-node@10.9.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      jest-validate: registry.npmmirror.com/jest-validate/27.5.1
-      prompts: registry.npmmirror.com/prompts/2.4.2
-      yargs: registry.npmmirror.com/yargs/16.2.0
-    transitivePeerDependencies:
-      - bufferutil
-      - canvas
-      - supports-color
-      - ts-node
-      - utf-8-validate
-    dev: true
-
-  registry.npmmirror.com/jest-config/27.5.1_ts-node@10.9.1:
-    resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-config/-/jest-config-27.5.1.tgz}
-    id: registry.npmmirror.com/jest-config/27.5.1
-    name: jest-config
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    peerDependencies:
-      ts-node: '>=9.0.0'
-    peerDependenciesMeta:
-      ts-node:
-        optional: true
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@jest/test-sequencer': registry.npmmirror.com/@jest/test-sequencer/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      babel-jest: registry.npmmirror.com/babel-jest/27.5.1_@babel+core@7.21.0
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      ci-info: registry.npmmirror.com/ci-info/3.8.0
-      deepmerge: registry.npmmirror.com/deepmerge/4.3.0
-      glob: registry.npmmirror.com/glob/7.2.3
-      graceful-fs: 4.2.10
-      jest-circus: registry.npmmirror.com/jest-circus/27.5.1
-      jest-environment-jsdom: registry.npmmirror.com/jest-environment-jsdom/27.5.1
-      jest-environment-node: registry.npmmirror.com/jest-environment-node/27.5.1
-      jest-get-type: registry.npmmirror.com/jest-get-type/27.5.1
-      jest-jasmine2: registry.npmmirror.com/jest-jasmine2/27.5.1
-      jest-regex-util: registry.npmmirror.com/jest-regex-util/27.5.1
-      jest-resolve: registry.npmmirror.com/jest-resolve/27.5.1
-      jest-runner: registry.npmmirror.com/jest-runner/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      jest-validate: registry.npmmirror.com/jest-validate/27.5.1
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-      parse-json: registry.npmmirror.com/parse-json/5.2.0
-      pretty-format: registry.npmmirror.com/pretty-format/27.5.1
-      slash: registry.npmmirror.com/slash/3.0.0
-      strip-json-comments: registry.npmmirror.com/strip-json-comments/3.1.1
-      ts-node: registry.npmmirror.com/ts-node/10.9.1_cin3sed6ohfsopbmt6orxeb4o4
-    transitivePeerDependencies:
-      - bufferutil
-      - canvas
-      - supports-color
-      - utf-8-validate
-    dev: true
-
-  registry.npmmirror.com/jest-diff/27.5.1:
-    resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-diff/-/jest-diff-27.5.1.tgz}
-    name: jest-diff
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      diff-sequences: registry.npmmirror.com/diff-sequences/27.5.1
-      jest-get-type: registry.npmmirror.com/jest-get-type/27.5.1
-      pretty-format: registry.npmmirror.com/pretty-format/27.5.1
-    dev: true
-
-  registry.npmmirror.com/jest-docblock/27.5.1:
-    resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-docblock/-/jest-docblock-27.5.1.tgz}
-    name: jest-docblock
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      detect-newline: registry.npmmirror.com/detect-newline/3.1.0
-    dev: true
-
-  registry.npmmirror.com/jest-each/27.5.1:
-    resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-each/-/jest-each-27.5.1.tgz}
-    name: jest-each
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      jest-get-type: registry.npmmirror.com/jest-get-type/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      pretty-format: registry.npmmirror.com/pretty-format/27.5.1
-    dev: true
-
-  registry.npmmirror.com/jest-environment-jsdom/27.5.1:
-    resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz}
-    name: jest-environment-jsdom
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/environment': registry.npmmirror.com/@jest/environment/27.5.1
-      '@jest/fake-timers': registry.npmmirror.com/@jest/fake-timers/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      jest-mock: registry.npmmirror.com/jest-mock/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      jsdom: registry.npmmirror.com/jsdom/16.7.0
-    transitivePeerDependencies:
-      - bufferutil
-      - canvas
-      - supports-color
-      - utf-8-validate
-    dev: true
-
-  registry.npmmirror.com/jest-environment-node/27.5.1:
-    resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz}
-    name: jest-environment-node
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/environment': registry.npmmirror.com/@jest/environment/27.5.1
-      '@jest/fake-timers': registry.npmmirror.com/@jest/fake-timers/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      jest-mock: registry.npmmirror.com/jest-mock/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-    dev: true
-
-  registry.npmmirror.com/jest-get-type/27.5.1:
-    resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-get-type/-/jest-get-type-27.5.1.tgz}
-    name: jest-get-type
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dev: true
-
-  registry.npmmirror.com/jest-haste-map/27.5.1:
-    resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz}
-    name: jest-haste-map
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/graceful-fs': registry.npmmirror.com/@types/graceful-fs/4.1.6
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      anymatch: registry.npmmirror.com/anymatch/3.1.3
-      fb-watchman: registry.npmmirror.com/fb-watchman/2.0.2
-      graceful-fs: 4.2.10
-      jest-regex-util: registry.npmmirror.com/jest-regex-util/27.5.1
-      jest-serializer: registry.npmmirror.com/jest-serializer/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      jest-worker: registry.npmmirror.com/jest-worker/27.5.1
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-      walker: registry.npmmirror.com/walker/1.0.8
-    optionalDependencies:
-      fsevents: 2.3.2
-    dev: true
-
-  registry.npmmirror.com/jest-jasmine2/27.5.1:
-    resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz}
-    name: jest-jasmine2
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/environment': registry.npmmirror.com/@jest/environment/27.5.1
-      '@jest/source-map': registry.npmmirror.com/@jest/source-map/27.5.1
-      '@jest/test-result': registry.npmmirror.com/@jest/test-result/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      co: registry.npmmirror.com/co/4.6.0
-      expect: registry.npmmirror.com/expect/27.5.1
-      is-generator-fn: registry.npmmirror.com/is-generator-fn/2.1.0
-      jest-each: registry.npmmirror.com/jest-each/27.5.1
-      jest-matcher-utils: registry.npmmirror.com/jest-matcher-utils/27.5.1
-      jest-message-util: registry.npmmirror.com/jest-message-util/27.5.1
-      jest-runtime: registry.npmmirror.com/jest-runtime/27.5.1
-      jest-snapshot: registry.npmmirror.com/jest-snapshot/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      pretty-format: registry.npmmirror.com/pretty-format/27.5.1
-      throat: registry.npmmirror.com/throat/6.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/jest-leak-detector/27.5.1:
-    resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz}
-    name: jest-leak-detector
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      jest-get-type: registry.npmmirror.com/jest-get-type/27.5.1
-      pretty-format: registry.npmmirror.com/pretty-format/27.5.1
-    dev: true
-
-  registry.npmmirror.com/jest-matcher-utils/27.5.1:
-    resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz}
-    name: jest-matcher-utils
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      jest-diff: registry.npmmirror.com/jest-diff/27.5.1
-      jest-get-type: registry.npmmirror.com/jest-get-type/27.5.1
-      pretty-format: registry.npmmirror.com/pretty-format/27.5.1
-    dev: true
-
-  registry.npmmirror.com/jest-message-util/27.5.1:
-    resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-message-util/-/jest-message-util-27.5.1.tgz}
-    name: jest-message-util
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/stack-utils': registry.npmmirror.com/@types/stack-utils/2.0.1
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      graceful-fs: 4.2.10
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-      pretty-format: registry.npmmirror.com/pretty-format/27.5.1
-      slash: registry.npmmirror.com/slash/3.0.0
-      stack-utils: registry.npmmirror.com/stack-utils/2.0.6
-    dev: true
-
-  registry.npmmirror.com/jest-mock/27.5.1:
-    resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-mock/-/jest-mock-27.5.1.tgz}
-    name: jest-mock
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-    dev: true
-
-  registry.npmmirror.com/jest-pnp-resolver/1.2.3_jest-resolve@27.5.1:
-    resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz}
-    id: registry.npmmirror.com/jest-pnp-resolver/1.2.3
-    name: jest-pnp-resolver
-    version: 1.2.3
-    engines: {node: '>=6'}
-    peerDependencies:
-      jest-resolve: '*'
-    peerDependenciesMeta:
-      jest-resolve:
-        optional: true
-    dependencies:
-      jest-resolve: registry.npmmirror.com/jest-resolve/27.5.1
-    dev: true
-
-  registry.npmmirror.com/jest-regex-util/27.5.1:
-    resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz}
-    name: jest-regex-util
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dev: true
-
-  registry.npmmirror.com/jest-resolve-dependencies/27.5.1:
-    resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz}
-    name: jest-resolve-dependencies
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      jest-regex-util: registry.npmmirror.com/jest-regex-util/27.5.1
-      jest-snapshot: registry.npmmirror.com/jest-snapshot/27.5.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/jest-resolve/27.5.1:
-    resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-resolve/-/jest-resolve-27.5.1.tgz}
-    name: jest-resolve
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      graceful-fs: 4.2.10
-      jest-haste-map: registry.npmmirror.com/jest-haste-map/27.5.1
-      jest-pnp-resolver: registry.npmmirror.com/jest-pnp-resolver/1.2.3_jest-resolve@27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      jest-validate: registry.npmmirror.com/jest-validate/27.5.1
-      resolve: registry.npmmirror.com/resolve/1.22.1
-      resolve.exports: registry.npmmirror.com/resolve.exports/1.1.1
-      slash: registry.npmmirror.com/slash/3.0.0
-    dev: true
-
-  registry.npmmirror.com/jest-runner/27.5.1:
-    resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-runner/-/jest-runner-27.5.1.tgz}
-    name: jest-runner
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/console': registry.npmmirror.com/@jest/console/27.5.1
-      '@jest/environment': registry.npmmirror.com/@jest/environment/27.5.1
-      '@jest/test-result': registry.npmmirror.com/@jest/test-result/27.5.1
-      '@jest/transform': registry.npmmirror.com/@jest/transform/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      emittery: registry.npmmirror.com/emittery/0.8.1
-      graceful-fs: 4.2.10
-      jest-docblock: registry.npmmirror.com/jest-docblock/27.5.1
-      jest-environment-jsdom: registry.npmmirror.com/jest-environment-jsdom/27.5.1
-      jest-environment-node: registry.npmmirror.com/jest-environment-node/27.5.1
-      jest-haste-map: registry.npmmirror.com/jest-haste-map/27.5.1
-      jest-leak-detector: registry.npmmirror.com/jest-leak-detector/27.5.1
-      jest-message-util: registry.npmmirror.com/jest-message-util/27.5.1
-      jest-resolve: registry.npmmirror.com/jest-resolve/27.5.1
-      jest-runtime: registry.npmmirror.com/jest-runtime/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      jest-worker: registry.npmmirror.com/jest-worker/27.5.1
-      source-map-support: registry.npmmirror.com/source-map-support/0.5.21
-      throat: registry.npmmirror.com/throat/6.0.2
-    transitivePeerDependencies:
-      - bufferutil
-      - canvas
-      - supports-color
-      - utf-8-validate
-    dev: true
-
-  registry.npmmirror.com/jest-runtime/27.5.1:
-    resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-runtime/-/jest-runtime-27.5.1.tgz}
-    name: jest-runtime
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/environment': registry.npmmirror.com/@jest/environment/27.5.1
-      '@jest/fake-timers': registry.npmmirror.com/@jest/fake-timers/27.5.1
-      '@jest/globals': registry.npmmirror.com/@jest/globals/27.5.1
-      '@jest/source-map': registry.npmmirror.com/@jest/source-map/27.5.1
-      '@jest/test-result': registry.npmmirror.com/@jest/test-result/27.5.1
-      '@jest/transform': registry.npmmirror.com/@jest/transform/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      cjs-module-lexer: registry.npmmirror.com/cjs-module-lexer/1.2.2
-      collect-v8-coverage: registry.npmmirror.com/collect-v8-coverage/1.0.1
-      execa: registry.npmmirror.com/execa/5.1.1
-      glob: registry.npmmirror.com/glob/7.2.3
-      graceful-fs: 4.2.10
-      jest-haste-map: registry.npmmirror.com/jest-haste-map/27.5.1
-      jest-message-util: registry.npmmirror.com/jest-message-util/27.5.1
-      jest-mock: registry.npmmirror.com/jest-mock/27.5.1
-      jest-regex-util: registry.npmmirror.com/jest-regex-util/27.5.1
-      jest-resolve: registry.npmmirror.com/jest-resolve/27.5.1
-      jest-snapshot: registry.npmmirror.com/jest-snapshot/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      slash: registry.npmmirror.com/slash/3.0.0
-      strip-bom: registry.npmmirror.com/strip-bom/4.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/jest-serializer/27.5.1:
-    resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-serializer/-/jest-serializer-27.5.1.tgz}
-    name: jest-serializer
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      graceful-fs: 4.2.10
-    dev: true
-
-  registry.npmmirror.com/jest-snapshot/27.5.1:
-    resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz}
-    name: jest-snapshot
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/generator': registry.npmmirror.com/@babel/generator/7.21.1
-      '@babel/plugin-syntax-typescript': registry.npmmirror.com/@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.21.0
-      '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.21.2
-      '@babel/types': registry.npmmirror.com/@babel/types/7.21.2
-      '@jest/transform': registry.npmmirror.com/@jest/transform/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/babel__traverse': registry.npmmirror.com/@types/babel__traverse/7.18.3
-      '@types/prettier': registry.npmmirror.com/@types/prettier/2.7.2
-      babel-preset-current-node-syntax: registry.npmmirror.com/babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.0
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      expect: registry.npmmirror.com/expect/27.5.1
-      graceful-fs: 4.2.10
-      jest-diff: registry.npmmirror.com/jest-diff/27.5.1
-      jest-get-type: registry.npmmirror.com/jest-get-type/27.5.1
-      jest-haste-map: registry.npmmirror.com/jest-haste-map/27.5.1
-      jest-matcher-utils: registry.npmmirror.com/jest-matcher-utils/27.5.1
-      jest-message-util: registry.npmmirror.com/jest-message-util/27.5.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      natural-compare: registry.npmmirror.com/natural-compare/1.4.0
-      pretty-format: registry.npmmirror.com/pretty-format/27.5.1
-      semver: registry.npmmirror.com/semver/7.3.8
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/jest-util/27.5.1:
-    resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-util/-/jest-util-27.5.1.tgz}
-    name: jest-util
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      ci-info: registry.npmmirror.com/ci-info/3.8.0
-      graceful-fs: 4.2.10
-      picomatch: registry.npmmirror.com/picomatch/2.3.1
-    dev: true
-
-  registry.npmmirror.com/jest-validate/27.5.1:
-    resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-validate/-/jest-validate-27.5.1.tgz}
-    name: jest-validate
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      camelcase: registry.npmmirror.com/camelcase/6.3.0
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      jest-get-type: registry.npmmirror.com/jest-get-type/27.5.1
-      leven: registry.npmmirror.com/leven/3.1.0
-      pretty-format: registry.npmmirror.com/pretty-format/27.5.1
-    dev: true
-
-  registry.npmmirror.com/jest-watcher/27.5.1:
-    resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-watcher/-/jest-watcher-27.5.1.tgz}
-    name: jest-watcher
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      '@jest/test-result': registry.npmmirror.com/@jest/test-result/27.5.1
-      '@jest/types': registry.npmmirror.com/@jest/types/27.5.1
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      ansi-escapes: registry.npmmirror.com/ansi-escapes/4.3.2
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      string-length: registry.npmmirror.com/string-length/4.0.2
-    dev: true
-
-  registry.npmmirror.com/jest-worker/26.6.2:
-    resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-worker/-/jest-worker-26.6.2.tgz}
-    name: jest-worker
-    version: 26.6.2
-    engines: {node: '>= 10.13.0'}
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      merge-stream: registry.npmmirror.com/merge-stream/2.0.0
-      supports-color: registry.npmmirror.com/supports-color/7.2.0
-    dev: true
-
-  registry.npmmirror.com/jest-worker/27.5.1:
-    resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz}
-    name: jest-worker
-    version: 27.5.1
-    engines: {node: '>= 10.13.0'}
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      merge-stream: registry.npmmirror.com/merge-stream/2.0.0
-      supports-color: registry.npmmirror.com/supports-color/8.1.1
-    dev: true
-
-  registry.npmmirror.com/jest/27.5.1_ts-node@10.9.1:
-    resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jest/-/jest-27.5.1.tgz}
-    id: registry.npmmirror.com/jest/27.5.1
-    name: jest
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    hasBin: true
-    peerDependencies:
-      node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
-    peerDependenciesMeta:
-      node-notifier:
-        optional: true
-    dependencies:
-      '@jest/core': registry.npmmirror.com/@jest/core/27.5.1_ts-node@10.9.1
-      import-local: registry.npmmirror.com/import-local/3.1.0
-      jest-cli: registry.npmmirror.com/jest-cli/27.5.1_ts-node@10.9.1
-    transitivePeerDependencies:
-      - bufferutil
-      - canvas
-      - supports-color
-      - ts-node
-      - utf-8-validate
-    dev: true
-
-  registry.npmmirror.com/jiti/1.17.1:
-    resolution: {integrity: sha512-NZIITw8uZQFuzQimqjUxIrIcEdxYDFIe/0xYfIlVXTkiBjjyBEvgasj5bb0/cHtPRD/NziPbT312sFrkI5ALpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jiti/-/jiti-1.17.1.tgz}
-    name: jiti
-    version: 1.17.1
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/jpegtran-bin/5.0.2:
-    resolution: {integrity: sha512-4FSmgIcr8d5+V6T1+dHbPZjaFH0ogVyP4UVsE+zri7S9YLO4qAT2our4IN3sW3STVgNTbqPermdIgt2XuAJ4EA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jpegtran-bin/-/jpegtran-bin-5.0.2.tgz}
-    name: jpegtran-bin
-    version: 5.0.2
-    engines: {node: '>=10'}
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      bin-build: registry.npmmirror.com/bin-build/3.0.0
-      bin-wrapper: /bin-wrapper-china/0.1.0
-      logalot: registry.npmmirror.com/logalot/2.1.0
-    dev: true
-
-  registry.npmmirror.com/jpegtran-bin/6.0.1:
-    resolution: {integrity: sha512-WohhhHhqe22de7PU8hXs6Sr5d4BAvkrfA93NR5tGlHyPnFLgvEW/bH+q7fv65JgoiQDsd7SBwwQ/OGRBivU3Mw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jpegtran-bin/-/jpegtran-bin-6.0.1.tgz}
-    name: jpegtran-bin
-    version: 6.0.1
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      bin-build: registry.npmmirror.com/bin-build/3.0.0
-      bin-wrapper: /bin-wrapper-china/0.1.0
-    dev: true
-
-  registry.npmmirror.com/js-base64/2.6.4:
-    resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz}
-    name: js-base64
-    version: 2.6.4
-    dev: true
-
-  registry.npmmirror.com/js-beautify/1.14.6:
-    resolution: {integrity: sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-beautify/-/js-beautify-1.14.6.tgz}
-    name: js-beautify
-    version: 1.14.6
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      config-chain: registry.npmmirror.com/config-chain/1.1.13
-      editorconfig: registry.npmmirror.com/editorconfig/0.15.3
-      glob: registry.npmmirror.com/glob/8.1.0
-      nopt: registry.npmmirror.com/nopt/6.0.0
-    dev: true
-
-  registry.npmmirror.com/js-sdsl/4.3.0:
-    resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.3.0.tgz}
-    name: js-sdsl
-    version: 4.3.0
-    dev: true
-
-  registry.npmmirror.com/js-tokens/4.0.0:
-    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz}
-    name: js-tokens
-    version: 4.0.0
-
-  registry.npmmirror.com/js-tokens/8.0.1:
-    resolution: {integrity: sha512-3AGrZT6tuMm1ZWWn9mLXh7XMfi2YtiLNPALCVxBCiUVq0LD1OQMxV/AdS/s7rLJU5o9i/jBZw/N4vXXL5dm29A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-8.0.1.tgz}
-    name: js-tokens
-    version: 8.0.1
-    dev: true
-
-  registry.npmmirror.com/js-yaml/3.14.1:
-    resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz}
-    name: js-yaml
-    version: 3.14.1
-    hasBin: true
-    dependencies:
-      argparse: registry.npmmirror.com/argparse/1.0.10
-      esprima: registry.npmmirror.com/esprima/4.0.1
-    dev: true
-
-  registry.npmmirror.com/js-yaml/4.1.0:
-    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz}
-    name: js-yaml
-    version: 4.1.0
-    hasBin: true
-    dependencies:
-      argparse: registry.npmmirror.com/argparse/2.0.1
-    dev: true
-
-  registry.npmmirror.com/jsdom/16.7.0:
-    resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsdom/-/jsdom-16.7.0.tgz}
-    name: jsdom
-    version: 16.7.0
-    engines: {node: '>=10'}
-    peerDependencies:
-      canvas: ^2.5.0
-    peerDependenciesMeta:
-      canvas:
-        optional: true
-    dependencies:
-      abab: registry.npmmirror.com/abab/2.0.6
-      acorn: registry.npmmirror.com/acorn/8.8.2
-      acorn-globals: registry.npmmirror.com/acorn-globals/6.0.0
-      cssom: registry.npmmirror.com/cssom/0.4.4
-      cssstyle: registry.npmmirror.com/cssstyle/2.3.0
-      data-urls: registry.npmmirror.com/data-urls/2.0.0
-      decimal.js: registry.npmmirror.com/decimal.js/10.4.3
-      domexception: registry.npmmirror.com/domexception/2.0.1
-      escodegen: registry.npmmirror.com/escodegen/2.0.0
-      form-data: registry.npmmirror.com/form-data/3.0.1
-      html-encoding-sniffer: registry.npmmirror.com/html-encoding-sniffer/2.0.1
-      http-proxy-agent: registry.npmmirror.com/http-proxy-agent/4.0.1
-      https-proxy-agent: registry.npmmirror.com/https-proxy-agent/5.0.1
-      is-potential-custom-element-name: registry.npmmirror.com/is-potential-custom-element-name/1.0.1
-      nwsapi: registry.npmmirror.com/nwsapi/2.2.2
-      parse5: registry.npmmirror.com/parse5/6.0.1
-      saxes: registry.npmmirror.com/saxes/5.0.1
-      symbol-tree: registry.npmmirror.com/symbol-tree/3.2.4
-      tough-cookie: registry.npmmirror.com/tough-cookie/4.1.2
-      w3c-hr-time: registry.npmmirror.com/w3c-hr-time/1.0.2
-      w3c-xmlserializer: registry.npmmirror.com/w3c-xmlserializer/2.0.0
-      webidl-conversions: registry.npmmirror.com/webidl-conversions/6.1.0
-      whatwg-encoding: registry.npmmirror.com/whatwg-encoding/1.0.5
-      whatwg-mimetype: registry.npmmirror.com/whatwg-mimetype/2.3.0
-      whatwg-url: registry.npmmirror.com/whatwg-url/8.7.0
-      ws: registry.npmmirror.com/ws/7.5.9
-      xml-name-validator: registry.npmmirror.com/xml-name-validator/3.0.0
-    transitivePeerDependencies:
-      - bufferutil
-      - supports-color
-      - utf-8-validate
-    dev: true
-
-  registry.npmmirror.com/jsesc/0.5.0:
-    resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz}
-    name: jsesc
-    version: 0.5.0
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/jsesc/2.5.2:
-    resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz}
-    name: jsesc
-    version: 2.5.2
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/json-parse-better-errors/1.0.2:
-    resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz}
-    name: json-parse-better-errors
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/json-parse-even-better-errors/2.3.1:
-    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz}
-    name: json-parse-even-better-errors
-    version: 2.3.1
-    dev: true
-
-  registry.npmmirror.com/json-schema-traverse/0.4.1:
-    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz}
-    name: json-schema-traverse
-    version: 0.4.1
-    dev: true
-
-  registry.npmmirror.com/json-schema-traverse/1.0.0:
-    resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz}
-    name: json-schema-traverse
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/json-schema/0.4.0:
-    resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz}
-    name: json-schema
-    version: 0.4.0
-    dev: true
-
-  registry.npmmirror.com/json-stable-stringify-without-jsonify/1.0.1:
-    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz}
-    name: json-stable-stringify-without-jsonify
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/json-stringify-safe/5.0.1:
-    resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz}
-    name: json-stringify-safe
-    version: 5.0.1
-    dev: true
-
-  registry.npmmirror.com/json5/1.0.2:
-    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz}
-    name: json5
-    version: 1.0.2
-    hasBin: true
-    dependencies:
-      minimist: registry.npmmirror.com/minimist/1.2.8
-    dev: true
-
-  registry.npmmirror.com/json5/2.2.3:
-    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz}
-    name: json5
-    version: 2.2.3
-    engines: {node: '>=6'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/jsonfile/6.1.0:
-    resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz}
-    name: jsonfile
-    version: 6.1.0
-    dependencies:
-      universalify: registry.npmmirror.com/universalify/2.0.0
-    optionalDependencies:
-      graceful-fs: 4.2.10
-    dev: true
-
-  registry.npmmirror.com/jsonparse/1.3.1:
-    resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonparse/-/jsonparse-1.3.1.tgz}
-    name: jsonparse
-    version: 1.3.1
-    engines: {'0': node >= 0.2.0}
-    dev: true
-
-  registry.npmmirror.com/jsonpointer/5.0.1:
-    resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.1.tgz}
-    name: jsonpointer
-    version: 5.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/junk/3.1.0:
-    resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/junk/-/junk-3.1.0.tgz}
-    name: junk
-    version: 3.1.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/kind-of/3.2.2:
-    resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz}
-    name: kind-of
-    version: 3.2.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-buffer: registry.npmmirror.com/is-buffer/1.1.6
-    dev: true
-
-  registry.npmmirror.com/kind-of/4.0.0:
-    resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz}
-    name: kind-of
-    version: 4.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-buffer: registry.npmmirror.com/is-buffer/1.1.6
-    dev: true
-
-  registry.npmmirror.com/kind-of/5.1.0:
-    resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz}
-    name: kind-of
-    version: 5.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/kind-of/6.0.3:
-    resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz}
-    name: kind-of
-    version: 6.0.3
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/kleur/3.0.3:
-    resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz}
-    name: kleur
-    version: 3.0.3
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/known-css-properties/0.26.0:
-    resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/known-css-properties/-/known-css-properties-0.26.0.tgz}
-    name: known-css-properties
-    version: 0.26.0
-    dev: true
-
-  registry.npmmirror.com/kolorist/1.7.0:
-    resolution: {integrity: sha512-ymToLHqL02udwVdbkowNpzjFd6UzozMtshPQKVi5k1EjKRqKqBrOnE9QbLEb0/pV76SAiIT13hdL8R6suc+f3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kolorist/-/kolorist-1.7.0.tgz}
-    name: kolorist
-    version: 1.7.0
-    dev: true
-
-  registry.npmmirror.com/less/4.1.3:
-    resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/less/-/less-4.1.3.tgz}
-    name: less
-    version: 4.1.3
-    engines: {node: '>=6'}
-    hasBin: true
-    dependencies:
-      copy-anything: registry.npmmirror.com/copy-anything/2.0.6
-      parse-node-version: registry.npmmirror.com/parse-node-version/1.0.1
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    optionalDependencies:
-      errno: 0.1.8
-      graceful-fs: 4.2.10
-      image-size: 0.5.5
-      make-dir: 2.1.0
-      mime: 1.6.0
-      needle: 3.2.0
-      source-map: 0.6.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/leven/3.1.0:
-    resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz}
-    name: leven
-    version: 3.1.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/levn/0.3.0:
-    resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz}
-    name: levn
-    version: 0.3.0
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      prelude-ls: registry.npmmirror.com/prelude-ls/1.1.2
-      type-check: registry.npmmirror.com/type-check/0.3.2
-    dev: true
-
-  registry.npmmirror.com/levn/0.4.1:
-    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz}
-    name: levn
-    version: 0.4.1
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      prelude-ls: registry.npmmirror.com/prelude-ls/1.2.1
-      type-check: registry.npmmirror.com/type-check/0.4.0
-    dev: true
-
-  registry.npmmirror.com/lilconfig/2.0.4:
-    resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lilconfig/-/lilconfig-2.0.4.tgz}
-    name: lilconfig
-    version: 2.0.4
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/lines-and-columns/1.2.4:
-    resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz}
-    name: lines-and-columns
-    version: 1.2.4
-    dev: true
-
-  registry.npmmirror.com/lint-staged/12.3.7:
-    resolution: {integrity: sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lint-staged/-/lint-staged-12.3.7.tgz}
-    name: lint-staged
-    version: 12.3.7
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    hasBin: true
-    dependencies:
-      cli-truncate: registry.npmmirror.com/cli-truncate/3.1.0
-      colorette: registry.npmmirror.com/colorette/2.0.19
-      commander: registry.npmmirror.com/commander/8.3.0
-      debug: registry.npmmirror.com/debug/4.3.4_supports-color@9.3.1
-      execa: registry.npmmirror.com/execa/5.1.1
-      lilconfig: registry.npmmirror.com/lilconfig/2.0.4
-      listr2: registry.npmmirror.com/listr2/4.0.5
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
-      object-inspect: registry.npmmirror.com/object-inspect/1.12.3
-      pidtree: registry.npmmirror.com/pidtree/0.5.0
-      string-argv: registry.npmmirror.com/string-argv/0.3.1
-      supports-color: registry.npmmirror.com/supports-color/9.3.1
-      yaml: registry.npmmirror.com/yaml/1.10.2
-    transitivePeerDependencies:
-      - enquirer
-    dev: true
-
-  registry.npmmirror.com/listr2/4.0.5:
-    resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/listr2/-/listr2-4.0.5.tgz}
-    name: listr2
-    version: 4.0.5
-    engines: {node: '>=12'}
-    peerDependencies:
-      enquirer: '>= 2.3.0 < 3'
-    peerDependenciesMeta:
-      enquirer:
-        optional: true
-    dependencies:
-      cli-truncate: registry.npmmirror.com/cli-truncate/2.1.0
-      colorette: registry.npmmirror.com/colorette/2.0.19
-      log-update: registry.npmmirror.com/log-update/4.0.0
-      p-map: registry.npmmirror.com/p-map/4.0.0
-      rfdc: registry.npmmirror.com/rfdc/1.3.0
-      rxjs: registry.npmmirror.com/rxjs/7.8.0
-      through: registry.npmmirror.com/through/2.3.8
-      wrap-ansi: registry.npmmirror.com/wrap-ansi/7.0.0
-    dev: true
-
-  registry.npmmirror.com/load-json-file/1.1.0:
-    resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/load-json-file/-/load-json-file-1.1.0.tgz}
-    name: load-json-file
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      graceful-fs: 4.2.10
-      parse-json: registry.npmmirror.com/parse-json/2.2.0
-      pify: 2.3.0
-      pinkie-promise: registry.npmmirror.com/pinkie-promise/2.0.1
-      strip-bom: registry.npmmirror.com/strip-bom/2.0.0
-    dev: true
-
-  registry.npmmirror.com/load-json-file/4.0.0:
-    resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/load-json-file/-/load-json-file-4.0.0.tgz}
-    name: load-json-file
-    version: 4.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      graceful-fs: 4.2.10
-      parse-json: registry.npmmirror.com/parse-json/4.0.0
-      pify: registry.npmmirror.com/pify/3.0.0
-      strip-bom: registry.npmmirror.com/strip-bom/3.0.0
-    dev: true
-
-  registry.npmmirror.com/loader-utils/1.4.2:
-    resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz}
-    name: loader-utils
-    version: 1.4.2
-    engines: {node: '>=4.0.0'}
-    dependencies:
-      big.js: registry.npmmirror.com/big.js/5.2.2
-      emojis-list: registry.npmmirror.com/emojis-list/3.0.0
-      json5: registry.npmmirror.com/json5/1.0.2
-    dev: true
-
-  registry.npmmirror.com/locate-path/2.0.0:
-    resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-2.0.0.tgz}
-    name: locate-path
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      p-locate: registry.npmmirror.com/p-locate/2.0.0
-      path-exists: registry.npmmirror.com/path-exists/3.0.0
-    dev: true
-
-  registry.npmmirror.com/locate-path/5.0.0:
-    resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz}
-    name: locate-path
-    version: 5.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      p-locate: registry.npmmirror.com/p-locate/4.1.0
-
-  registry.npmmirror.com/locate-path/6.0.0:
-    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz}
-    name: locate-path
-    version: 6.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      p-locate: registry.npmmirror.com/p-locate/5.0.0
-    dev: true
-
-  registry.npmmirror.com/lodash-es/4.17.21:
-    resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz}
-    name: lodash-es
-    version: 4.17.21
-    dev: false
-
-  registry.npmmirror.com/lodash.debounce/4.0.8:
-    resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz}
-    name: lodash.debounce
-    version: 4.0.8
-    dev: true
-
-  registry.npmmirror.com/lodash.get/4.4.2:
-    resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.get/-/lodash.get-4.4.2.tgz}
-    name: lodash.get
-    version: 4.4.2
-    dev: false
-
-  registry.npmmirror.com/lodash.ismatch/4.4.0:
-    resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz}
-    name: lodash.ismatch
-    version: 4.4.0
-    dev: true
-
-  registry.npmmirror.com/lodash.isplainobject/4.0.6:
-    resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz}
-    name: lodash.isplainobject
-    version: 4.0.6
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/lodash.map/4.6.0:
-    resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.map/-/lodash.map-4.6.0.tgz}
-    name: lodash.map
-    version: 4.6.0
-    dev: true
-
-  registry.npmmirror.com/lodash.memoize/4.1.2:
-    resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz}
-    name: lodash.memoize
-    version: 4.1.2
-    dev: true
-
-  registry.npmmirror.com/lodash.merge/4.6.2:
-    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz}
-    name: lodash.merge
-    version: 4.6.2
-    dev: true
-
-  registry.npmmirror.com/lodash.mergewith/4.6.2:
-    resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz}
-    name: lodash.mergewith
-    version: 4.6.2
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/lodash.sortby/4.7.0:
-    resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz}
-    name: lodash.sortby
-    version: 4.7.0
-    dev: true
-
-  registry.npmmirror.com/lodash.truncate/4.4.2:
-    resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz}
-    name: lodash.truncate
-    version: 4.4.2
-    dev: true
-
-  registry.npmmirror.com/lodash.uniq/4.5.0:
-    resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz}
-    name: lodash.uniq
-    version: 4.5.0
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/lodash/4.17.21:
-    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz}
-    name: lodash
-    version: 4.17.21
-
-  registry.npmmirror.com/log-symbols/4.1.0:
-    resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz}
-    name: log-symbols
-    version: 4.1.0
-    engines: {node: '>=10'}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      is-unicode-supported: registry.npmmirror.com/is-unicode-supported/0.1.0
-    dev: true
-
-  registry.npmmirror.com/log-update/4.0.0:
-    resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-update/-/log-update-4.0.0.tgz}
-    name: log-update
-    version: 4.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      ansi-escapes: registry.npmmirror.com/ansi-escapes/4.3.2
-      cli-cursor: registry.npmmirror.com/cli-cursor/3.1.0
-      slice-ansi: registry.npmmirror.com/slice-ansi/4.0.0
-      wrap-ansi: registry.npmmirror.com/wrap-ansi/6.2.0
-    dev: true
-
-  registry.npmmirror.com/logalot/2.1.0:
-    resolution: {integrity: sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/logalot/-/logalot-2.1.0.tgz}
-    name: logalot
-    version: 2.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      figures: registry.npmmirror.com/figures/1.7.0
-      squeak: registry.npmmirror.com/squeak/1.3.0
-    dev: true
-
-  registry.npmmirror.com/longest/1.0.1:
-    resolution: {integrity: sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/longest/-/longest-1.0.1.tgz}
-    name: longest
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/longest/2.0.1:
-    resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/longest/-/longest-2.0.1.tgz}
-    name: longest
-    version: 2.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/loose-envify/1.4.0:
-    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz}
-    name: loose-envify
-    version: 1.4.0
-    hasBin: true
-    dependencies:
-      js-tokens: registry.npmmirror.com/js-tokens/4.0.0
-    dev: false
-
-  registry.npmmirror.com/loud-rejection/1.6.0:
-    resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loud-rejection/-/loud-rejection-1.6.0.tgz}
-    name: loud-rejection
-    version: 1.6.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      currently-unhandled: registry.npmmirror.com/currently-unhandled/0.4.1
-      signal-exit: 3.0.7
-    dev: true
-
-  registry.npmmirror.com/lower-case/2.0.2:
-    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz}
-    name: lower-case
-    version: 2.0.2
-    dependencies:
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/lpad-align/1.1.2:
-    resolution: {integrity: sha512-MMIcFmmR9zlGZtBcFOows6c2COMekHCIFJz3ew/rRpKZ1wR4mXDPzvcVqLarux8M33X4TPSq2Jdw8WJj0q0KbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lpad-align/-/lpad-align-1.1.2.tgz}
-    name: lpad-align
-    version: 1.1.2
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-    dependencies:
-      get-stdin: registry.npmmirror.com/get-stdin/4.0.1
-      indent-string: registry.npmmirror.com/indent-string/2.1.0
-      longest: registry.npmmirror.com/longest/1.0.1
-      meow: registry.npmmirror.com/meow/3.7.0
-    dev: true
-
-  registry.npmmirror.com/lru-cache/4.1.5:
-    resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz}
-    name: lru-cache
-    version: 4.1.5
-    dependencies:
-      pseudomap: registry.npmmirror.com/pseudomap/1.0.2
-      yallist: registry.npmmirror.com/yallist/2.1.2
-    dev: true
-
-  registry.npmmirror.com/lru-cache/5.1.1:
-    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz}
-    name: lru-cache
-    version: 5.1.1
-    dependencies:
-      yallist: registry.npmmirror.com/yallist/3.1.1
-    dev: true
-
-  registry.npmmirror.com/lru-cache/6.0.0:
-    resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz}
-    name: lru-cache
-    version: 6.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      yallist: registry.npmmirror.com/yallist/4.0.0
-    dev: true
-
-  registry.npmmirror.com/luxon/1.28.1:
-    resolution: {integrity: sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/luxon/-/luxon-1.28.1.tgz}
-    name: luxon
-    version: 1.28.1
-    dev: false
-
-  registry.npmmirror.com/magic-string/0.25.9:
-    resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz}
-    name: magic-string
-    version: 0.25.9
-    dependencies:
-      sourcemap-codec: registry.npmmirror.com/sourcemap-codec/1.4.8
-
-  registry.npmmirror.com/magic-string/0.26.7:
-    resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz}
-    name: magic-string
-    version: 0.26.7
-    engines: {node: '>=12'}
-    dependencies:
-      sourcemap-codec: registry.npmmirror.com/sourcemap-codec/1.4.8
-    dev: true
-
-  registry.npmmirror.com/magic-string/0.27.0:
-    resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.27.0.tgz}
-    name: magic-string
-    version: 0.27.0
-    engines: {node: '>=12'}
-    dependencies:
-      '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14
-    dev: true
-
-  registry.npmmirror.com/make-error/1.3.6:
-    resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz}
-    name: make-error
-    version: 1.3.6
-    dev: true
-
-  registry.npmmirror.com/makeerror/1.0.12:
-    resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz}
-    name: makeerror
-    version: 1.0.12
-    dependencies:
-      tmpl: registry.npmmirror.com/tmpl/1.0.5
-    dev: true
-
-  registry.npmmirror.com/map-cache/0.2.2:
-    resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz}
-    name: map-cache
-    version: 0.2.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/map-obj/1.0.1:
-    resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/map-obj/-/map-obj-1.0.1.tgz}
-    name: map-obj
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/map-obj/4.3.0:
-    resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/map-obj/-/map-obj-4.3.0.tgz}
-    name: map-obj
-    version: 4.3.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/map-visit/1.0.0:
-    resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz}
-    name: map-visit
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      object-visit: registry.npmmirror.com/object-visit/1.0.1
-    dev: true
-
-  registry.npmmirror.com/mathml-tag-names/2.1.3:
-    resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz}
-    name: mathml-tag-names
-    version: 2.1.3
-    dev: true
-
-  registry.npmmirror.com/md5/2.3.0:
-    resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/md5/-/md5-2.3.0.tgz}
-    name: md5
-    version: 2.3.0
-    dependencies:
-      charenc: registry.npmmirror.com/charenc/0.0.2
-      crypt: registry.npmmirror.com/crypt/0.0.2
-      is-buffer: registry.npmmirror.com/is-buffer/1.1.6
-    dev: false
-
-  registry.npmmirror.com/mdn-data/2.0.14:
-    resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz}
-    name: mdn-data
-    version: 2.0.14
-    dev: true
-
-  registry.npmmirror.com/memorystream/0.3.1:
-    resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/memorystream/-/memorystream-0.3.1.tgz}
-    name: memorystream
-    version: 0.3.1
-    engines: {node: '>= 0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/meow/3.7.0:
-    resolution: {integrity: sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/meow/-/meow-3.7.0.tgz}
-    name: meow
-    version: 3.7.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      camelcase-keys: registry.npmmirror.com/camelcase-keys/2.1.0
-      decamelize: registry.npmmirror.com/decamelize/1.2.0
-      loud-rejection: registry.npmmirror.com/loud-rejection/1.6.0
-      map-obj: registry.npmmirror.com/map-obj/1.0.1
-      minimist: registry.npmmirror.com/minimist/1.2.8
-      normalize-package-data: registry.npmmirror.com/normalize-package-data/2.5.0
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-      read-pkg-up: registry.npmmirror.com/read-pkg-up/1.0.1
-      redent: registry.npmmirror.com/redent/1.0.0
-      trim-newlines: registry.npmmirror.com/trim-newlines/1.0.0
-    dev: true
-
-  registry.npmmirror.com/meow/8.1.2:
-    resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/meow/-/meow-8.1.2.tgz}
-    name: meow
-    version: 8.1.2
-    engines: {node: '>=10'}
-    dependencies:
-      '@types/minimist': registry.npmmirror.com/@types/minimist/1.2.2
-      camelcase-keys: registry.npmmirror.com/camelcase-keys/6.2.2
-      decamelize-keys: registry.npmmirror.com/decamelize-keys/1.1.1
-      hard-rejection: registry.npmmirror.com/hard-rejection/2.1.0
-      minimist-options: registry.npmmirror.com/minimist-options/4.1.0
-      normalize-package-data: registry.npmmirror.com/normalize-package-data/3.0.3
-      read-pkg-up: registry.npmmirror.com/read-pkg-up/7.0.1
-      redent: registry.npmmirror.com/redent/3.0.0
-      trim-newlines: registry.npmmirror.com/trim-newlines/3.0.1
-      type-fest: registry.npmmirror.com/type-fest/0.18.1
-      yargs-parser: registry.npmmirror.com/yargs-parser/20.2.9
-    dev: true
-
-  registry.npmmirror.com/meow/9.0.0:
-    resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/meow/-/meow-9.0.0.tgz}
-    name: meow
-    version: 9.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      '@types/minimist': registry.npmmirror.com/@types/minimist/1.2.2
-      camelcase-keys: registry.npmmirror.com/camelcase-keys/6.2.2
-      decamelize: registry.npmmirror.com/decamelize/1.2.0
-      decamelize-keys: registry.npmmirror.com/decamelize-keys/1.1.1
-      hard-rejection: registry.npmmirror.com/hard-rejection/2.1.0
-      minimist-options: registry.npmmirror.com/minimist-options/4.1.0
-      normalize-package-data: registry.npmmirror.com/normalize-package-data/3.0.3
-      read-pkg-up: registry.npmmirror.com/read-pkg-up/7.0.1
-      redent: registry.npmmirror.com/redent/3.0.0
-      trim-newlines: registry.npmmirror.com/trim-newlines/3.0.1
-      type-fest: registry.npmmirror.com/type-fest/0.18.1
-      yargs-parser: registry.npmmirror.com/yargs-parser/20.2.9
-    dev: true
-
-  registry.npmmirror.com/merge-options/1.0.1:
-    resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge-options/-/merge-options-1.0.1.tgz}
-    name: merge-options
-    version: 1.0.1
-    engines: {node: '>=4'}
-    dependencies:
-      is-plain-obj: registry.npmmirror.com/is-plain-obj/1.1.0
-    dev: true
-
-  registry.npmmirror.com/merge-stream/2.0.0:
-    resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz}
-    name: merge-stream
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/merge/2.1.1:
-    resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge/-/merge-2.1.1.tgz}
-    name: merge
-    version: 2.1.1
-    dev: true
-
-  registry.npmmirror.com/merge2/1.4.1:
-    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz}
-    name: merge2
-    version: 1.4.1
-    engines: {node: '>= 8'}
-    dev: true
-
-  registry.npmmirror.com/micromatch/3.1.0:
-    resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-3.1.0.tgz}
-    name: micromatch
-    version: 3.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-diff: registry.npmmirror.com/arr-diff/4.0.0
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      braces: registry.npmmirror.com/braces/2.3.2
-      define-property: registry.npmmirror.com/define-property/1.0.0
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      extglob: registry.npmmirror.com/extglob/2.0.4
-      fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1
-      kind-of: registry.npmmirror.com/kind-of/5.1.0
-      nanomatch: registry.npmmirror.com/nanomatch/1.2.13
-      object.pick: registry.npmmirror.com/object.pick/1.3.0
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/micromatch/4.0.5:
-    resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz}
-    name: micromatch
-    version: 4.0.5
-    engines: {node: '>=8.6'}
-    dependencies:
-      braces: registry.npmmirror.com/braces/3.0.2
-      picomatch: registry.npmmirror.com/picomatch/2.3.1
-    dev: true
-
-  registry.npmmirror.com/mime-db/1.52.0:
-    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz}
-    name: mime-db
-    version: 1.52.0
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/mime-types/2.1.35:
-    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz}
-    name: mime-types
-    version: 2.1.35
-    engines: {node: '>= 0.6'}
-    dependencies:
-      mime-db: registry.npmmirror.com/mime-db/1.52.0
-    dev: true
-
-  registry.npmmirror.com/mime/1.6.0:
-    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz}
-    name: mime
-    version: 1.6.0
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/mimic-fn/2.1.0:
-    resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz}
-    name: mimic-fn
-    version: 2.1.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/min-indent/1.0.1:
-    resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz}
-    name: min-indent
-    version: 1.0.1
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/minimatch/3.1.2:
-    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz}
-    name: minimatch
-    version: 3.1.2
-    dependencies:
-      brace-expansion: registry.npmmirror.com/brace-expansion/1.1.11
-    dev: true
-
-  registry.npmmirror.com/minimatch/5.1.6:
-    resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz}
-    name: minimatch
-    version: 5.1.6
-    engines: {node: '>=10'}
-    dependencies:
-      brace-expansion: registry.npmmirror.com/brace-expansion/2.0.1
-    dev: true
-
-  registry.npmmirror.com/minimist-options/4.1.0:
-    resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimist-options/-/minimist-options-4.1.0.tgz}
-    name: minimist-options
-    version: 4.1.0
-    engines: {node: '>= 6'}
-    dependencies:
-      arrify: registry.npmmirror.com/arrify/1.0.1
-      is-plain-obj: registry.npmmirror.com/is-plain-obj/1.1.0
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-    dev: true
-
-  registry.npmmirror.com/minimist/1.2.7:
-    resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimist/-/minimist-1.2.7.tgz}
-    name: minimist
-    version: 1.2.7
-    dev: true
-
-  registry.npmmirror.com/minimist/1.2.8:
-    resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz}
-    name: minimist
-    version: 1.2.8
-    dev: true
-
-  registry.npmmirror.com/mixin-deep/1.3.2:
-    resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz}
-    name: mixin-deep
-    version: 1.3.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      for-in: registry.npmmirror.com/for-in/1.0.2
-      is-extendable: registry.npmmirror.com/is-extendable/1.0.1
-    dev: true
-
-  registry.npmmirror.com/mkdirp/0.5.6:
-    resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz}
-    name: mkdirp
-    version: 0.5.6
-    hasBin: true
-    dependencies:
-      minimist: registry.npmmirror.com/minimist/1.2.8
-    dev: true
-
-  registry.npmmirror.com/mockjs/1.1.0:
-    resolution: {integrity: sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz}
-    name: mockjs
-    version: 1.1.0
-    hasBin: true
-    dependencies:
-      commander: registry.npmmirror.com/commander/10.0.0
-
-  registry.npmmirror.com/modify-values/1.0.1:
-    resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/modify-values/-/modify-values-1.0.1.tgz}
-    name: modify-values
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/mousetrap/1.6.5:
-    resolution: {integrity: sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mousetrap/-/mousetrap-1.6.5.tgz}
-    name: mousetrap
-    version: 1.6.5
-    dev: false
-
-  registry.npmmirror.com/mozjpeg/7.1.1:
-    resolution: {integrity: sha512-iIDxWvzhWvLC9mcRJ1uSkiKaj4drF58oCqK2bITm5c2Jt6cJ8qQjSSru2PCaysG+hLIinryj8mgz5ZJzOYTv1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mozjpeg/-/mozjpeg-7.1.1.tgz}
-    name: mozjpeg
-    version: 7.1.1
-    engines: {node: '>=10'}
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      bin-build: registry.npmmirror.com/bin-build/3.0.0
-      bin-wrapper: /bin-wrapper-china/0.1.0
-    dev: true
-
-  registry.npmmirror.com/mri/1.2.0:
-    resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mri/-/mri-1.2.0.tgz}
-    name: mri
-    version: 1.2.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/ms/2.0.0:
-    resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz}
-    name: ms
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/ms/2.1.2:
-    resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz}
-    name: ms
-    version: 2.1.2
-    dev: true
-
-  registry.npmmirror.com/ms/2.1.3:
-    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz}
-    name: ms
-    version: 2.1.3
-    dev: true
-
-  registry.npmmirror.com/multimatch/4.0.0:
-    resolution: {integrity: sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/multimatch/-/multimatch-4.0.0.tgz}
-    name: multimatch
-    version: 4.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      '@types/minimatch': registry.npmmirror.com/@types/minimatch/3.0.5
-      array-differ: registry.npmmirror.com/array-differ/3.0.0
-      array-union: registry.npmmirror.com/array-union/2.1.0
-      arrify: registry.npmmirror.com/arrify/2.0.1
-      minimatch: registry.npmmirror.com/minimatch/3.1.2
-    dev: true
-
-  registry.npmmirror.com/mute-stream/0.0.8:
-    resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz}
-    name: mute-stream
-    version: 0.0.8
-    dev: true
-
-  registry.npmmirror.com/nanoid/3.3.4:
-    resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz}
-    name: nanoid
-    version: 3.3.4
-    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-    hasBin: true
-
-  registry.npmmirror.com/nanomatch/1.2.13:
-    resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz}
-    name: nanomatch
-    version: 1.2.13
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-diff: registry.npmmirror.com/arr-diff/4.0.0
-      array-unique: registry.npmmirror.com/array-unique/0.3.2
-      define-property: registry.npmmirror.com/define-property/2.0.2
-      extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2
-      fragment-cache: registry.npmmirror.com/fragment-cache/0.2.1
-      is-windows: registry.npmmirror.com/is-windows/1.0.2
-      kind-of: registry.npmmirror.com/kind-of/6.0.3
-      object.pick: registry.npmmirror.com/object.pick/1.3.0
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      snapdragon: registry.npmmirror.com/snapdragon/0.8.2
-      to-regex: registry.npmmirror.com/to-regex/3.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/nanopop/2.2.0:
-    resolution: {integrity: sha512-E9JaHcxh3ere8/BEZHAcnuD10RluTSPyTToBvoFWS9/7DcCx6gyKjbn7M7Bx7E1veCxCuY1iO6h4+gdAf1j73Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanopop/-/nanopop-2.2.0.tgz}
-    name: nanopop
-    version: 2.2.0
-    dev: false
-
-  registry.npmmirror.com/natural-compare-lite/1.4.0:
-    resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz}
-    name: natural-compare-lite
-    version: 1.4.0
-    dev: true
-
-  registry.npmmirror.com/natural-compare/1.4.0:
-    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz}
-    name: natural-compare
-    version: 1.4.0
-    dev: true
-
-  registry.npmmirror.com/neo-async/2.6.2:
-    resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz}
-    name: neo-async
-    version: 2.6.2
-    dev: true
-
-  registry.npmmirror.com/nice-try/1.0.5:
-    resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz}
-    name: nice-try
-    version: 1.0.5
-    dev: true
-
-  registry.npmmirror.com/no-case/3.0.4:
-    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz}
-    name: no-case
-    version: 3.0.4
-    dependencies:
-      lower-case: registry.npmmirror.com/lower-case/2.0.2
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/node-fetch/2.6.7:
-    resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz}
-    name: node-fetch
-    version: 2.6.7
-    engines: {node: 4.x || >=6.0.0}
-    peerDependencies:
-      encoding: ^0.1.0
-    peerDependenciesMeta:
-      encoding:
-        optional: true
-    dependencies:
-      whatwg-url: registry.npmmirror.com/whatwg-url/5.0.0
-    dev: true
-
-  registry.npmmirror.com/node-fetch/2.6.9:
-    resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.9.tgz}
-    name: node-fetch
-    version: 2.6.9
-    engines: {node: 4.x || >=6.0.0}
-    peerDependencies:
-      encoding: ^0.1.0
-    peerDependenciesMeta:
-      encoding:
-        optional: true
-    dependencies:
-      whatwg-url: registry.npmmirror.com/whatwg-url/5.0.0
-    dev: true
-
-  registry.npmmirror.com/node-html-parser/5.4.2:
-    resolution: {integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-html-parser/-/node-html-parser-5.4.2.tgz}
-    name: node-html-parser
-    version: 5.4.2
-    dependencies:
-      css-select: registry.npmmirror.com/css-select/4.3.0
-      he: registry.npmmirror.com/he/1.2.0
-    dev: true
-
-  registry.npmmirror.com/node-int64/0.4.0:
-    resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz}
-    name: node-int64
-    version: 0.4.0
-    dev: true
-
-  registry.npmmirror.com/node-releases/2.0.10:
-    resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.10.tgz}
-    name: node-releases
-    version: 2.0.10
-    dev: true
-
-  registry.npmmirror.com/nopt/6.0.0:
-    resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nopt/-/nopt-6.0.0.tgz}
-    name: nopt
-    version: 6.0.0
-    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
-    hasBin: true
-    dependencies:
-      abbrev: registry.npmmirror.com/abbrev/1.1.1
-    dev: true
-
-  registry.npmmirror.com/normalize-package-data/2.5.0:
-    resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz}
-    name: normalize-package-data
-    version: 2.5.0
-    dependencies:
-      hosted-git-info: registry.npmmirror.com/hosted-git-info/2.8.9
-      resolve: registry.npmmirror.com/resolve/1.22.1
-      semver: registry.npmmirror.com/semver/5.7.1
-      validate-npm-package-license: registry.npmmirror.com/validate-npm-package-license/3.0.4
-    dev: true
-
-  registry.npmmirror.com/normalize-package-data/3.0.3:
-    resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz}
-    name: normalize-package-data
-    version: 3.0.3
-    engines: {node: '>=10'}
-    dependencies:
-      hosted-git-info: registry.npmmirror.com/hosted-git-info/4.1.0
-      is-core-module: registry.npmmirror.com/is-core-module/2.11.0
-      semver: registry.npmmirror.com/semver/7.3.8
-      validate-npm-package-license: registry.npmmirror.com/validate-npm-package-license/3.0.4
-    dev: true
-
-  registry.npmmirror.com/normalize-path/3.0.0:
-    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz}
-    name: normalize-path
-    version: 3.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/normalize-range/0.1.2:
-    resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz}
-    name: normalize-range
-    version: 0.1.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/npm-run-all/4.1.5:
-    resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-all/-/npm-run-all-4.1.5.tgz}
-    name: npm-run-all
-    version: 4.1.5
-    engines: {node: '>= 4'}
-    hasBin: true
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1
-      chalk: registry.npmmirror.com/chalk/2.4.2
-      cross-spawn: registry.npmmirror.com/cross-spawn/6.0.5
-      memorystream: registry.npmmirror.com/memorystream/0.3.1
-      minimatch: registry.npmmirror.com/minimatch/3.1.2
-      pidtree: registry.npmmirror.com/pidtree/0.3.1
-      read-pkg: registry.npmmirror.com/read-pkg/3.0.0
-      shell-quote: registry.npmmirror.com/shell-quote/1.8.0
-      string.prototype.padend: registry.npmmirror.com/string.prototype.padend/3.1.4
-    dev: true
-
-  registry.npmmirror.com/npm-run-path/2.0.2:
-    resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz}
-    name: npm-run-path
-    version: 2.0.2
-    engines: {node: '>=4'}
-    dependencies:
-      path-key: 2.0.1
-    dev: true
-
-  registry.npmmirror.com/npm-run-path/4.0.1:
-    resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz}
-    name: npm-run-path
-    version: 4.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      path-key: registry.npmmirror.com/path-key/3.1.1
-    dev: true
-
-  registry.npmmirror.com/nprogress/0.2.0:
-    resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz}
-    name: nprogress
-    version: 0.2.0
-    dev: false
-
-  registry.npmmirror.com/nth-check/2.1.1:
-    resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz}
-    name: nth-check
-    version: 2.1.1
-    dependencies:
-      boolbase: registry.npmmirror.com/boolbase/1.0.0
-    dev: true
-
-  registry.npmmirror.com/nwsapi/2.2.2:
-    resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.2.tgz}
-    name: nwsapi
-    version: 2.2.2
-    dev: true
-
-  registry.npmmirror.com/object-assign/4.1.1:
-    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz}
-    name: object-assign
-    version: 4.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/object-copy/0.1.0:
-    resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz}
-    name: object-copy
-    version: 0.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      copy-descriptor: registry.npmmirror.com/copy-descriptor/0.1.1
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/object-inspect/1.12.3:
-    resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz}
-    name: object-inspect
-    version: 1.12.3
-
-  registry.npmmirror.com/object-keys/1.1.1:
-    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz}
-    name: object-keys
-    version: 1.1.1
-    engines: {node: '>= 0.4'}
-
-  registry.npmmirror.com/object-visit/1.0.1:
-    resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz}
-    name: object-visit
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/object.assign/4.1.4:
-    resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz}
-    name: object.assign
-    version: 4.1.4
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.2.0
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-      object-keys: registry.npmmirror.com/object-keys/1.1.1
-    dev: true
-
-  registry.npmmirror.com/object.pick/1.3.0:
-    resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz}
-    name: object.pick
-    version: 1.3.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/on-finished/2.3.0:
-    resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz}
-    name: on-finished
-    version: 2.3.0
-    engines: {node: '>= 0.8'}
-    dependencies:
-      ee-first: registry.npmmirror.com/ee-first/1.1.1
-    dev: true
-
-  registry.npmmirror.com/once/1.4.0:
-    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz}
-    name: once
-    version: 1.4.0
-    dependencies:
-      wrappy: registry.npmmirror.com/wrappy/1.0.2
-    dev: true
-
-  registry.npmmirror.com/onetime/5.1.2:
-    resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz}
-    name: onetime
-    version: 5.1.2
-    engines: {node: '>=6'}
-    dependencies:
-      mimic-fn: registry.npmmirror.com/mimic-fn/2.1.0
-    dev: true
-
-  registry.npmmirror.com/open/8.4.2:
-    resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/open/-/open-8.4.2.tgz}
-    name: open
-    version: 8.4.2
-    engines: {node: '>=12'}
-    dependencies:
-      define-lazy-prop: registry.npmmirror.com/define-lazy-prop/2.0.0
-      is-docker: registry.npmmirror.com/is-docker/2.2.1
-      is-wsl: registry.npmmirror.com/is-wsl/2.2.0
-    dev: true
-
-  registry.npmmirror.com/opener/1.5.2:
-    resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz}
-    name: opener
-    version: 1.5.2
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/optionator/0.8.3:
-    resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz}
-    name: optionator
-    version: 0.8.3
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      deep-is: registry.npmmirror.com/deep-is/0.1.4
-      fast-levenshtein: registry.npmmirror.com/fast-levenshtein/2.0.6
-      levn: registry.npmmirror.com/levn/0.3.0
-      prelude-ls: registry.npmmirror.com/prelude-ls/1.1.2
-      type-check: registry.npmmirror.com/type-check/0.3.2
-      word-wrap: registry.npmmirror.com/word-wrap/1.2.3
-    dev: true
-
-  registry.npmmirror.com/optionator/0.9.1:
-    resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz}
-    name: optionator
-    version: 0.9.1
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      deep-is: registry.npmmirror.com/deep-is/0.1.4
-      fast-levenshtein: registry.npmmirror.com/fast-levenshtein/2.0.6
-      levn: registry.npmmirror.com/levn/0.4.1
-      prelude-ls: registry.npmmirror.com/prelude-ls/1.2.1
-      type-check: registry.npmmirror.com/type-check/0.4.0
-      word-wrap: registry.npmmirror.com/word-wrap/1.2.3
-    dev: true
-
-  registry.npmmirror.com/optipng-bin/7.0.1:
-    resolution: {integrity: sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/optipng-bin/-/optipng-bin-7.0.1.tgz}
-    name: optipng-bin
-    version: 7.0.1
-    engines: {node: '>=10'}
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      bin-build: registry.npmmirror.com/bin-build/3.0.0
-      bin-wrapper: /bin-wrapper-china/0.1.0
-    dev: true
-
-  registry.npmmirror.com/ora/5.4.1:
-    resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz}
-    name: ora
-    version: 5.4.1
-    engines: {node: '>=10'}
-    dependencies:
-      bl: registry.npmmirror.com/bl/4.1.0
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      cli-cursor: registry.npmmirror.com/cli-cursor/3.1.0
-      cli-spinners: registry.npmmirror.com/cli-spinners/2.7.0
-      is-interactive: registry.npmmirror.com/is-interactive/1.0.0
-      is-unicode-supported: registry.npmmirror.com/is-unicode-supported/0.1.0
-      log-symbols: registry.npmmirror.com/log-symbols/4.1.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-      wcwidth: registry.npmmirror.com/wcwidth/1.0.1
-    dev: true
-
-  registry.npmmirror.com/os-tmpdir/1.0.2:
-    resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz}
-    name: os-tmpdir
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/ow/0.17.0:
-    resolution: {integrity: sha512-i3keDzDQP5lWIe4oODyDFey1qVrq2hXKTuTH2VpqwpYtzPiKZt2ziRI4NBQmgW40AnV5Euz17OyWweCb+bNEQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ow/-/ow-0.17.0.tgz}
-    name: ow
-    version: 0.17.0
-    engines: {node: '>=10'}
-    dependencies:
-      type-fest: registry.npmmirror.com/type-fest/0.11.0
-    dev: true
-
-  registry.npmmirror.com/p-finally/1.0.0:
-    resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz}
-    name: p-finally
-    version: 1.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/p-limit/1.3.0:
-    resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-1.3.0.tgz}
-    name: p-limit
-    version: 1.3.0
-    engines: {node: '>=4'}
-    dependencies:
-      p-try: registry.npmmirror.com/p-try/1.0.0
-    dev: true
-
-  registry.npmmirror.com/p-limit/2.3.0:
-    resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz}
-    name: p-limit
-    version: 2.3.0
-    engines: {node: '>=6'}
-    dependencies:
-      p-try: registry.npmmirror.com/p-try/2.2.0
-
-  registry.npmmirror.com/p-limit/3.1.0:
-    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz}
-    name: p-limit
-    version: 3.1.0
-    engines: {node: '>=10'}
-    dependencies:
-      yocto-queue: registry.npmmirror.com/yocto-queue/0.1.0
-    dev: true
-
-  registry.npmmirror.com/p-locate/2.0.0:
-    resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-2.0.0.tgz}
-    name: p-locate
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      p-limit: registry.npmmirror.com/p-limit/1.3.0
-    dev: true
-
-  registry.npmmirror.com/p-locate/4.1.0:
-    resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz}
-    name: p-locate
-    version: 4.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      p-limit: registry.npmmirror.com/p-limit/2.3.0
-
-  registry.npmmirror.com/p-locate/5.0.0:
-    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz}
-    name: p-locate
-    version: 5.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      p-limit: registry.npmmirror.com/p-limit/3.1.0
-    dev: true
-
-  registry.npmmirror.com/p-map-series/1.0.0:
-    resolution: {integrity: sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-map-series/-/p-map-series-1.0.0.tgz}
-    name: p-map-series
-    version: 1.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      p-reduce: registry.npmmirror.com/p-reduce/1.0.0
-    dev: true
-
-  registry.npmmirror.com/p-map/4.0.0:
-    resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz}
-    name: p-map
-    version: 4.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      aggregate-error: registry.npmmirror.com/aggregate-error/3.1.0
-    dev: true
-
-  registry.npmmirror.com/p-pipe/3.1.0:
-    resolution: {integrity: sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-pipe/-/p-pipe-3.1.0.tgz}
-    name: p-pipe
-    version: 3.1.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/p-reduce/1.0.0:
-    resolution: {integrity: sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-reduce/-/p-reduce-1.0.0.tgz}
-    name: p-reduce
-    version: 1.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/p-try/1.0.0:
-    resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-try/-/p-try-1.0.0.tgz}
-    name: p-try
-    version: 1.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/p-try/2.2.0:
-    resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz}
-    name: p-try
-    version: 2.2.0
-    engines: {node: '>=6'}
-
-  registry.npmmirror.com/param-case/3.0.4:
-    resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz}
-    name: param-case
-    version: 3.0.4
-    dependencies:
-      dot-case: registry.npmmirror.com/dot-case/3.0.4
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/parent-module/1.0.1:
-    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz}
-    name: parent-module
-    version: 1.0.1
-    engines: {node: '>=6'}
-    dependencies:
-      callsites: registry.npmmirror.com/callsites/3.1.0
-    dev: true
-
-  registry.npmmirror.com/parse-json/2.2.0:
-    resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-2.2.0.tgz}
-    name: parse-json
-    version: 2.2.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      error-ex: registry.npmmirror.com/error-ex/1.3.2
-    dev: true
-
-  registry.npmmirror.com/parse-json/4.0.0:
-    resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz}
-    name: parse-json
-    version: 4.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      error-ex: registry.npmmirror.com/error-ex/1.3.2
-      json-parse-better-errors: registry.npmmirror.com/json-parse-better-errors/1.0.2
-    dev: true
-
-  registry.npmmirror.com/parse-json/5.2.0:
-    resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz}
-    name: parse-json
-    version: 5.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      error-ex: registry.npmmirror.com/error-ex/1.3.2
-      json-parse-even-better-errors: registry.npmmirror.com/json-parse-even-better-errors/2.3.1
-      lines-and-columns: registry.npmmirror.com/lines-and-columns/1.2.4
-    dev: true
-
-  registry.npmmirror.com/parse-node-version/1.0.1:
-    resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz}
-    name: parse-node-version
-    version: 1.0.1
-    engines: {node: '>= 0.10'}
-    dev: true
-
-  registry.npmmirror.com/parse-passwd/1.0.0:
-    resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz}
-    name: parse-passwd
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/parse5/6.0.1:
-    resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz}
-    name: parse5
-    version: 6.0.1
-    dev: true
-
-  registry.npmmirror.com/parseurl/1.3.3:
-    resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz}
-    name: parseurl
-    version: 1.3.3
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/pascal-case/3.1.2:
-    resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz}
-    name: pascal-case
-    version: 3.1.2
-    dependencies:
-      no-case: registry.npmmirror.com/no-case/3.0.4
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/pascalcase/0.1.1:
-    resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz}
-    name: pascalcase
-    version: 0.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/path-case/3.0.4:
-    resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-case/-/path-case-3.0.4.tgz}
-    name: path-case
-    version: 3.0.4
-    dependencies:
-      dot-case: registry.npmmirror.com/dot-case/3.0.4
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/path-exists/2.1.0:
-    resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz}
-    name: path-exists
-    version: 2.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      pinkie-promise: 2.0.1
-    dev: true
-
-  registry.npmmirror.com/path-exists/3.0.0:
-    resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz}
-    name: path-exists
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/path-exists/4.0.0:
-    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz}
-    name: path-exists
-    version: 4.0.0
-    engines: {node: '>=8'}
-
-  registry.npmmirror.com/path-is-absolute/1.0.1:
-    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz}
-    name: path-is-absolute
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/path-key/2.0.1:
-    resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz}
-    name: path-key
-    version: 2.0.1
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/path-key/3.1.1:
-    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz}
-    name: path-key
-    version: 3.1.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/path-parse/1.0.7:
-    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz}
-    name: path-parse
-    version: 1.0.7
-    dev: true
-
-  registry.npmmirror.com/path-to-regexp/6.2.1:
-    resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz}
-    name: path-to-regexp
-    version: 6.2.1
-
-  registry.npmmirror.com/path-type/1.1.0:
-    resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-type/-/path-type-1.1.0.tgz}
-    name: path-type
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      graceful-fs: 4.2.10
-      pify: 2.3.0
-      pinkie-promise: registry.npmmirror.com/pinkie-promise/2.0.1
-    dev: true
-
-  registry.npmmirror.com/path-type/3.0.0:
-    resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz}
-    name: path-type
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      pify: registry.npmmirror.com/pify/3.0.0
-    dev: true
-
-  registry.npmmirror.com/path-type/4.0.0:
-    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz}
-    name: path-type
-    version: 4.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/pathe/0.2.0:
-    resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pathe/-/pathe-0.2.0.tgz}
-    name: pathe
-    version: 0.2.0
-    dev: true
-
-  registry.npmmirror.com/pathe/1.1.0:
-    resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pathe/-/pathe-1.1.0.tgz}
-    name: pathe
-    version: 1.1.0
-    dev: true
-
-  registry.npmmirror.com/picocolors/1.0.0:
-    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz}
-    name: picocolors
-    version: 1.0.0
-
-  registry.npmmirror.com/picomatch/2.3.1:
-    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz}
-    name: picomatch
-    version: 2.3.1
-    engines: {node: '>=8.6'}
-    dev: true
-
-  registry.npmmirror.com/pidtree/0.3.1:
-    resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pidtree/-/pidtree-0.3.1.tgz}
-    name: pidtree
-    version: 0.3.1
-    engines: {node: '>=0.10'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/pidtree/0.5.0:
-    resolution: {integrity: sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pidtree/-/pidtree-0.5.0.tgz}
-    name: pidtree
-    version: 0.5.0
-    engines: {node: '>=0.10'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/pify/3.0.0:
-    resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz}
-    name: pify
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/pify/4.0.1:
-    resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz}
-    name: pify
-    version: 4.0.1
-    engines: {node: '>=6'}
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/pinia/2.0.12_hmuptsblhheur2tugfgucj7gc4:
-    resolution: {integrity: sha512-tUeuYGFrLU5irmGyRAIxp35q1OTcZ8sKpGT4XkPeVcG35W4R6cfXDbCGexzmVqH5lTQJJTXXbNGutIu9yS5yew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinia/-/pinia-2.0.12.tgz}
-    id: registry.npmmirror.com/pinia/2.0.12
-    name: pinia
-    version: 2.0.12
-    peerDependencies:
-      '@vue/composition-api': ^1.4.0
-      typescript: '>=4.4.4'
-      vue: ^2.6.14 || ^3.2.0
-    peerDependenciesMeta:
-      '@vue/composition-api':
-        optional: true
-      typescript:
-        optional: true
-    dependencies:
-      '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.5.0
-      typescript: registry.npmmirror.com/typescript/4.9.5
-      vue: registry.npmmirror.com/vue/3.2.47
-      vue-demi: registry.npmmirror.com/vue-demi/0.13.11_vue@3.2.47
-    dev: false
-
-  registry.npmmirror.com/pinkie-promise/2.0.1:
-    resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz}
-    name: pinkie-promise
-    version: 2.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      pinkie: 2.0.4
-    dev: true
-
-  registry.npmmirror.com/pinyin-pro/3.13.1:
-    resolution: {integrity: sha512-40mx64fuNWApC8FbW9xOu2hMDNBAPsYVYI29lx3vjMB94H8klF71r+zveC5x5bRy2nct7w4ZvD0DlglrmZX0vw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinyin-pro/-/pinyin-pro-3.13.1.tgz}
-    name: pinyin-pro
-    version: 3.13.1
-    dev: false
-
-  registry.npmmirror.com/pirates/4.0.5:
-    resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pirates/-/pirates-4.0.5.tgz}
-    name: pirates
-    version: 4.0.5
-    engines: {node: '>= 6'}
-    dev: true
-
-  registry.npmmirror.com/pkg-dir/4.2.0:
-    resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz}
-    name: pkg-dir
-    version: 4.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      find-up: registry.npmmirror.com/find-up/4.1.0
-    dev: true
-
-  registry.npmmirror.com/pngjs/5.0.0:
-    resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz}
-    name: pngjs
-    version: 5.0.0
-    engines: {node: '>=10.13.0'}
-    dev: false
-
-  registry.npmmirror.com/pngquant-bin/6.0.1:
-    resolution: {integrity: sha512-Q3PUyolfktf+hYio6wsg3SanQzEU/v8aICg/WpzxXcuCMRb7H2Q81okfpcEztbMvw25ILjd3a87doj2N9kvbpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pngquant-bin/-/pngquant-bin-6.0.1.tgz}
-    name: pngquant-bin
-    version: 6.0.1
-    engines: {node: '>=10'}
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      bin-build: registry.npmmirror.com/bin-build/3.0.0
-      bin-wrapper: /bin-wrapper-china/0.1.0
-      execa: 4.1.0
-    dev: true
-
-  registry.npmmirror.com/portfinder/1.0.32:
-    resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz}
-    name: portfinder
-    version: 1.0.32
-    engines: {node: '>= 0.12.0'}
-    dependencies:
-      async: registry.npmmirror.com/async/2.6.4
-      debug: registry.npmmirror.com/debug/3.2.7
-      mkdirp: registry.npmmirror.com/mkdirp/0.5.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/posix-character-classes/0.1.1:
-    resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz}
-    name: posix-character-classes
-    version: 0.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/postcss-html/1.5.0:
-    resolution: {integrity: sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-html/-/postcss-html-1.5.0.tgz}
-    name: postcss-html
-    version: 1.5.0
-    engines: {node: ^12 || >=14}
-    dependencies:
-      htmlparser2: registry.npmmirror.com/htmlparser2/8.0.1
-      js-tokens: registry.npmmirror.com/js-tokens/8.0.1
-      postcss: registry.npmmirror.com/postcss/8.4.21
-      postcss-safe-parser: registry.npmmirror.com/postcss-safe-parser/6.0.0_postcss@8.4.21
-    dev: true
-
-  registry.npmmirror.com/postcss-less/6.0.0_postcss@8.4.21:
-    resolution: {integrity: sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-less/-/postcss-less-6.0.0.tgz}
-    id: registry.npmmirror.com/postcss-less/6.0.0
-    name: postcss-less
-    version: 6.0.0
-    engines: {node: '>=12'}
-    peerDependencies:
-      postcss: ^8.3.5
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/8.4.21
-    dev: true
-
-  registry.npmmirror.com/postcss-media-query-parser/0.2.3:
-    resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz}
-    name: postcss-media-query-parser
-    version: 0.2.3
-    dev: true
-
-  registry.npmmirror.com/postcss-prefix-selector/1.16.0_postcss@5.2.18:
-    resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-prefix-selector/-/postcss-prefix-selector-1.16.0.tgz}
-    id: registry.npmmirror.com/postcss-prefix-selector/1.16.0
-    name: postcss-prefix-selector
-    version: 1.16.0
-    peerDependencies:
-      postcss: '>4 <9'
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/5.2.18
-    dev: true
-
-  registry.npmmirror.com/postcss-resolve-nested-selector/0.1.1:
-    resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz}
-    name: postcss-resolve-nested-selector
-    version: 0.1.1
-    dev: true
-
-  registry.npmmirror.com/postcss-safe-parser/6.0.0_postcss@8.4.21:
-    resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz}
-    id: registry.npmmirror.com/postcss-safe-parser/6.0.0
-    name: postcss-safe-parser
-    version: 6.0.0
-    engines: {node: '>=12.0'}
-    peerDependencies:
-      postcss: ^8.3.3
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/8.4.21
-    dev: true
-
-  registry.npmmirror.com/postcss-selector-parser/6.0.11:
-    resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz}
-    name: postcss-selector-parser
-    version: 6.0.11
-    engines: {node: '>=4'}
-    dependencies:
-      cssesc: registry.npmmirror.com/cssesc/3.0.0
-      util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2
-    dev: true
-
-  registry.npmmirror.com/postcss-sorting/7.0.1_postcss@8.4.21:
-    resolution: {integrity: sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-sorting/-/postcss-sorting-7.0.1.tgz}
-    id: registry.npmmirror.com/postcss-sorting/7.0.1
-    name: postcss-sorting
-    version: 7.0.1
-    peerDependencies:
-      postcss: ^8.3.9
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/8.4.21
-    dev: true
-
-  registry.npmmirror.com/postcss-value-parser/4.2.0:
-    resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz}
-    name: postcss-value-parser
-    version: 4.2.0
-    dev: true
-
-  registry.npmmirror.com/postcss/5.2.18:
-    resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-5.2.18.tgz}
-    name: postcss
-    version: 5.2.18
-    engines: {node: '>=0.12'}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/1.1.3
-      js-base64: registry.npmmirror.com/js-base64/2.6.4
-      source-map: 0.5.7
-      supports-color: registry.npmmirror.com/supports-color/3.2.3
-    dev: true
-
-  registry.npmmirror.com/postcss/8.4.21:
-    resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz}
-    name: postcss
-    version: 8.4.21
-    engines: {node: ^10 || ^12 || >=14}
-    dependencies:
-      nanoid: registry.npmmirror.com/nanoid/3.3.4
-      picocolors: registry.npmmirror.com/picocolors/1.0.0
-      source-map-js: registry.npmmirror.com/source-map-js/1.0.2
-
-  registry.npmmirror.com/posthtml-parser/0.2.1:
-    resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posthtml-parser/-/posthtml-parser-0.2.1.tgz}
-    name: posthtml-parser
-    version: 0.2.1
-    dependencies:
-      htmlparser2: registry.npmmirror.com/htmlparser2/3.10.1
-      isobject: registry.npmmirror.com/isobject/2.1.0
-    dev: true
-
-  registry.npmmirror.com/posthtml-rename-id/1.0.12:
-    resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz}
-    name: posthtml-rename-id
-    version: 1.0.12
-    dependencies:
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
-    dev: true
-
-  registry.npmmirror.com/posthtml-render/1.4.0:
-    resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posthtml-render/-/posthtml-render-1.4.0.tgz}
-    name: posthtml-render
-    version: 1.4.0
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/posthtml-svg-mode/1.0.3:
-    resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz}
-    name: posthtml-svg-mode
-    version: 1.0.3
-    dependencies:
-      merge-options: registry.npmmirror.com/merge-options/1.0.1
-      posthtml: registry.npmmirror.com/posthtml/0.9.2
-      posthtml-parser: registry.npmmirror.com/posthtml-parser/0.2.1
-      posthtml-render: registry.npmmirror.com/posthtml-render/1.4.0
-    dev: true
-
-  registry.npmmirror.com/posthtml/0.9.2:
-    resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/posthtml/-/posthtml-0.9.2.tgz}
-    name: posthtml
-    version: 0.9.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      posthtml-parser: registry.npmmirror.com/posthtml-parser/0.2.1
-      posthtml-render: registry.npmmirror.com/posthtml-render/1.4.0
-    dev: true
-
-  registry.npmmirror.com/preact/10.13.0:
-    resolution: {integrity: sha512-ERdIdUpR6doqdaSIh80hvzebHB7O6JxycOhyzAeLEchqOq/4yueslQbfnPwXaNhAYacFTyCclhwkEbOumT0tHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/preact/-/preact-10.13.0.tgz}
-    name: preact
-    version: 10.13.0
-    dev: false
-
-  registry.npmmirror.com/prelude-ls/1.1.2:
-    resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz}
-    name: prelude-ls
-    version: 1.1.2
-    engines: {node: '>= 0.8.0'}
-    dev: true
-
-  registry.npmmirror.com/prelude-ls/1.2.1:
-    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz}
-    name: prelude-ls
-    version: 1.2.1
-    engines: {node: '>= 0.8.0'}
-    dev: true
-
-  registry.npmmirror.com/prettier-linter-helpers/1.0.0:
-    resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz}
-    name: prettier-linter-helpers
-    version: 1.0.0
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      fast-diff: registry.npmmirror.com/fast-diff/1.2.0
-    dev: true
-
-  registry.npmmirror.com/prettier/2.8.4:
-    resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prettier/-/prettier-2.8.4.tgz}
-    name: prettier
-    version: 2.8.4
-    engines: {node: '>=10.13.0'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/pretty-bytes/5.6.0:
-    resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz}
-    name: pretty-bytes
-    version: 5.6.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/pretty-bytes/6.1.0:
-    resolution: {integrity: sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-6.1.0.tgz}
-    name: pretty-bytes
-    version: 6.1.0
-    engines: {node: ^14.13.1 || >=16.0.0}
-    dev: true
-
-  registry.npmmirror.com/pretty-format/27.5.1:
-    resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty-format/-/pretty-format-27.5.1.tgz}
-    name: pretty-format
-    version: 27.5.1
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    dependencies:
-      ansi-regex: registry.npmmirror.com/ansi-regex/5.0.1
-      ansi-styles: registry.npmmirror.com/ansi-styles/5.2.0
-      react-is: registry.npmmirror.com/react-is/17.0.2
-    dev: true
-
-  registry.npmmirror.com/pretty-quick/3.1.3_prettier@2.8.4:
-    resolution: {integrity: sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty-quick/-/pretty-quick-3.1.3.tgz}
-    id: registry.npmmirror.com/pretty-quick/3.1.3
-    name: pretty-quick
-    version: 3.1.3
-    engines: {node: '>=10.13'}
-    hasBin: true
-    peerDependencies:
-      prettier: '>=2.0.0'
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/3.0.0
-      execa: registry.npmmirror.com/execa/4.1.0
-      find-up: registry.npmmirror.com/find-up/4.1.0
-      ignore: registry.npmmirror.com/ignore/5.2.4
-      mri: registry.npmmirror.com/mri/1.2.0
-      multimatch: registry.npmmirror.com/multimatch/4.0.0
-      prettier: registry.npmmirror.com/prettier/2.8.4
-    dev: true
-
-  registry.npmmirror.com/print-js/1.6.0:
-    resolution: {integrity: sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/print-js/-/print-js-1.6.0.tgz}
-    name: print-js
-    version: 1.6.0
-    dev: false
-
-  registry.npmmirror.com/process-nextick-args/2.0.1:
-    resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz}
-    name: process-nextick-args
-    version: 2.0.1
-    dev: true
-
-  registry.npmmirror.com/prompts/2.4.2:
-    resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz}
-    name: prompts
-    version: 2.4.2
-    engines: {node: '>= 6'}
-    dependencies:
-      kleur: registry.npmmirror.com/kleur/3.0.3
-      sisteransi: registry.npmmirror.com/sisteransi/1.0.5
-    dev: true
-
-  registry.npmmirror.com/proto-list/1.2.4:
-    resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz}
-    name: proto-list
-    version: 1.2.4
-    dev: true
-
-  registry.npmmirror.com/proxy-from-env/1.1.0:
-    resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz}
-    name: proxy-from-env
-    version: 1.1.0
-    dev: true
-
-  registry.npmmirror.com/prr/1.0.1:
-    resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz}
-    name: prr
-    version: 1.0.1
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/pseudomap/1.0.2:
-    resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz}
-    name: pseudomap
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/psl/1.9.0:
-    resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz}
-    name: psl
-    version: 1.9.0
-    dev: true
-
-  registry.npmmirror.com/pug-error/2.0.0:
-    resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pug-error/-/pug-error-2.0.0.tgz}
-    name: pug-error
-    version: 2.0.0
-    dev: true
-
-  registry.npmmirror.com/pug-lexer/5.0.1:
-    resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pug-lexer/-/pug-lexer-5.0.1.tgz}
-    name: pug-lexer
-    version: 5.0.1
-    dependencies:
-      character-parser: registry.npmmirror.com/character-parser/2.2.0
-      is-expression: registry.npmmirror.com/is-expression/4.0.0
-      pug-error: registry.npmmirror.com/pug-error/2.0.0
-    dev: true
-
-  registry.npmmirror.com/pug-parser/6.0.0:
-    resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pug-parser/-/pug-parser-6.0.0.tgz}
-    name: pug-parser
-    version: 6.0.0
-    dependencies:
-      pug-error: registry.npmmirror.com/pug-error/2.0.0
-      token-stream: registry.npmmirror.com/token-stream/1.0.0
-    dev: true
-
-  registry.npmmirror.com/pump/3.0.0:
-    resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz}
-    name: pump
-    version: 3.0.0
-    dependencies:
-      end-of-stream: registry.npmmirror.com/end-of-stream/1.4.4
-      once: registry.npmmirror.com/once/1.4.0
-    dev: true
-
-  registry.npmmirror.com/punycode/2.3.0:
-    resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz}
-    name: punycode
-    version: 2.3.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/q/1.5.1:
-    resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/q/-/q-1.5.1.tgz}
-    name: q
-    version: 1.5.1
-    engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
-    dev: true
-
-  registry.npmmirror.com/qrcode/1.5.1:
-    resolution: {integrity: sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/qrcode/-/qrcode-1.5.1.tgz}
-    name: qrcode
-    version: 1.5.1
-    engines: {node: '>=10.13.0'}
-    hasBin: true
-    dependencies:
-      dijkstrajs: registry.npmmirror.com/dijkstrajs/1.0.2
-      encode-utf8: registry.npmmirror.com/encode-utf8/1.0.3
-      pngjs: registry.npmmirror.com/pngjs/5.0.0
-      yargs: registry.npmmirror.com/yargs/15.4.1
-    dev: false
-
-  registry.npmmirror.com/qrcodejs2/0.0.2:
-    resolution: {integrity: sha512-+Y4HA+cb6qUzdgvI3KML8GYpMFwB24dFwzMkS/yXq6hwtUGNUnZQdUnksrV1XGMc2mid5ROw5SAuY9XhI3ValA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/qrcodejs2/-/qrcodejs2-0.0.2.tgz}
-    name: qrcodejs2
-    version: 0.0.2
-    dev: false
-
-  registry.npmmirror.com/qs/6.11.0:
-    resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz}
-    name: qs
-    version: 6.11.0
-    engines: {node: '>=0.6'}
-    dependencies:
-      side-channel: registry.npmmirror.com/side-channel/1.0.4
-
-  registry.npmmirror.com/query-string/4.3.4:
-    resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz}
-    name: query-string
-    version: 4.3.4
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      object-assign: registry.npmmirror.com/object-assign/4.1.1
-      strict-uri-encode: registry.npmmirror.com/strict-uri-encode/1.1.0
-    dev: true
-
-  registry.npmmirror.com/querystringify/2.2.0:
-    resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz}
-    name: querystringify
-    version: 2.2.0
-    dev: true
-
-  registry.npmmirror.com/queue-microtask/1.2.3:
-    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz}
-    name: queue-microtask
-    version: 1.2.3
-    dev: true
-
-  registry.npmmirror.com/quick-lru/4.0.1:
-    resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/quick-lru/-/quick-lru-4.0.1.tgz}
-    name: quick-lru
-    version: 4.0.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/randombytes/2.1.0:
-    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz}
-    name: randombytes
-    version: 2.1.0
-    dependencies:
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/react-is/17.0.2:
-    resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz}
-    name: react-is
-    version: 17.0.2
-    dev: true
-
-  registry.npmmirror.com/read-pkg-up/1.0.1:
-    resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz}
-    name: read-pkg-up
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      find-up: registry.npmmirror.com/find-up/1.1.2
-      read-pkg: registry.npmmirror.com/read-pkg/1.1.0
-    dev: true
-
-  registry.npmmirror.com/read-pkg-up/3.0.0:
-    resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz}
-    name: read-pkg-up
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      find-up: registry.npmmirror.com/find-up/2.1.0
-      read-pkg: registry.npmmirror.com/read-pkg/3.0.0
-    dev: true
-
-  registry.npmmirror.com/read-pkg-up/7.0.1:
-    resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz}
-    name: read-pkg-up
-    version: 7.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      find-up: registry.npmmirror.com/find-up/4.1.0
-      read-pkg: registry.npmmirror.com/read-pkg/5.2.0
-      type-fest: registry.npmmirror.com/type-fest/0.8.1
-    dev: true
-
-  registry.npmmirror.com/read-pkg/1.1.0:
-    resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg/-/read-pkg-1.1.0.tgz}
-    name: read-pkg
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      load-json-file: registry.npmmirror.com/load-json-file/1.1.0
-      normalize-package-data: registry.npmmirror.com/normalize-package-data/2.5.0
-      path-type: registry.npmmirror.com/path-type/1.1.0
-    dev: true
-
-  registry.npmmirror.com/read-pkg/3.0.0:
-    resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg/-/read-pkg-3.0.0.tgz}
-    name: read-pkg
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      load-json-file: registry.npmmirror.com/load-json-file/4.0.0
-      normalize-package-data: registry.npmmirror.com/normalize-package-data/2.5.0
-      path-type: registry.npmmirror.com/path-type/3.0.0
-    dev: true
-
-  registry.npmmirror.com/read-pkg/5.2.0:
-    resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz}
-    name: read-pkg
-    version: 5.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      '@types/normalize-package-data': registry.npmmirror.com/@types/normalize-package-data/2.4.1
-      normalize-package-data: registry.npmmirror.com/normalize-package-data/2.5.0
-      parse-json: registry.npmmirror.com/parse-json/5.2.0
-      type-fest: registry.npmmirror.com/type-fest/0.6.0
-    dev: true
-
-  registry.npmmirror.com/readable-stream/2.3.8:
-    resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz}
-    name: readable-stream
-    version: 2.3.8
-    dependencies:
-      core-util-is: registry.npmmirror.com/core-util-is/1.0.3
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      isarray: registry.npmmirror.com/isarray/1.0.0
-      process-nextick-args: registry.npmmirror.com/process-nextick-args/2.0.1
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.1.2
-      string_decoder: registry.npmmirror.com/string_decoder/1.1.1
-      util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2
-    dev: true
-
-  registry.npmmirror.com/readable-stream/3.6.1:
-    resolution: {integrity: sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.1.tgz}
-    name: readable-stream
-    version: 3.6.1
-    engines: {node: '>= 6'}
-    dependencies:
-      inherits: registry.npmmirror.com/inherits/2.0.4
-      string_decoder: registry.npmmirror.com/string_decoder/1.3.0
-      util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2
-    dev: true
-
-  registry.npmmirror.com/readdirp/3.6.0:
-    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz}
-    name: readdirp
-    version: 3.6.0
-    engines: {node: '>=8.10.0'}
-    dependencies:
-      picomatch: registry.npmmirror.com/picomatch/2.3.1
-    dev: true
-
-  registry.npmmirror.com/redent/1.0.0:
-    resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/redent/-/redent-1.0.0.tgz}
-    name: redent
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      indent-string: registry.npmmirror.com/indent-string/2.1.0
-      strip-indent: registry.npmmirror.com/strip-indent/1.0.1
-    dev: true
-
-  registry.npmmirror.com/redent/3.0.0:
-    resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/redent/-/redent-3.0.0.tgz}
-    name: redent
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      indent-string: registry.npmmirror.com/indent-string/4.0.0
-      strip-indent: registry.npmmirror.com/strip-indent/3.0.0
-    dev: true
-
-  registry.npmmirror.com/regenerate-unicode-properties/10.1.0:
-    resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz}
-    name: regenerate-unicode-properties
-    version: 10.1.0
-    engines: {node: '>=4'}
-    dependencies:
-      regenerate: registry.npmmirror.com/regenerate/1.4.2
-    dev: true
-
-  registry.npmmirror.com/regenerate/1.4.2:
-    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz}
-    name: regenerate
-    version: 1.4.2
-    dev: true
-
-  registry.npmmirror.com/regenerator-runtime/0.11.1:
-    resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz}
-    name: regenerator-runtime
-    version: 0.11.1
-    dev: false
-
-  registry.npmmirror.com/regenerator-runtime/0.13.11:
-    resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz}
-    name: regenerator-runtime
-    version: 0.13.11
-
-  registry.npmmirror.com/regenerator-transform/0.15.1:
-    resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz}
-    name: regenerator-transform
-    version: 0.15.1
-    dependencies:
-      '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.21.0
-    dev: true
-
-  registry.npmmirror.com/regex-not/1.0.2:
-    resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz}
-    name: regex-not
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2
-      safe-regex: registry.npmmirror.com/safe-regex/1.1.0
-    dev: true
-
-  registry.npmmirror.com/regexp.prototype.flags/1.4.3:
-    resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz}
-    name: regexp.prototype.flags
-    version: 1.4.3
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.2.0
-      functions-have-names: registry.npmmirror.com/functions-have-names/1.2.3
-    dev: true
-
-  registry.npmmirror.com/regexpp/3.2.0:
-    resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz}
-    name: regexpp
-    version: 3.2.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/regexpu-core/5.3.1:
-    resolution: {integrity: sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.1.tgz}
-    name: regexpu-core
-    version: 5.3.1
-    engines: {node: '>=4'}
-    dependencies:
-      '@babel/regjsgen': registry.npmmirror.com/@babel/regjsgen/0.8.0
-      regenerate: registry.npmmirror.com/regenerate/1.4.2
-      regenerate-unicode-properties: registry.npmmirror.com/regenerate-unicode-properties/10.1.0
-      regjsparser: registry.npmmirror.com/regjsparser/0.9.1
-      unicode-match-property-ecmascript: registry.npmmirror.com/unicode-match-property-ecmascript/2.0.0
-      unicode-match-property-value-ecmascript: registry.npmmirror.com/unicode-match-property-value-ecmascript/2.1.0
-    dev: true
-
-  registry.npmmirror.com/regjsparser/0.9.1:
-    resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz}
-    name: regjsparser
-    version: 0.9.1
-    hasBin: true
-    dependencies:
-      jsesc: registry.npmmirror.com/jsesc/0.5.0
-    dev: true
-
-  registry.npmmirror.com/relateurl/0.2.7:
-    resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz}
-    name: relateurl
-    version: 0.2.7
-    engines: {node: '>= 0.10'}
-    dev: true
-
-  registry.npmmirror.com/repeat-element/1.1.4:
-    resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz}
-    name: repeat-element
-    version: 1.1.4
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/repeat-string/1.6.1:
-    resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz}
-    name: repeat-string
-    version: 1.6.1
-    engines: {node: '>=0.10'}
-    dev: true
-
-  registry.npmmirror.com/repeating/2.0.1:
-    resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/repeating/-/repeating-2.0.1.tgz}
-    name: repeating
-    version: 2.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-finite: registry.npmmirror.com/is-finite/1.1.0
-    dev: true
-
-  registry.npmmirror.com/replace-ext/1.0.1:
-    resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/replace-ext/-/replace-ext-1.0.1.tgz}
-    name: replace-ext
-    version: 1.0.1
-    engines: {node: '>= 0.10'}
-    dev: true
-
-  registry.npmmirror.com/require-directory/2.1.1:
-    resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz}
-    name: require-directory
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-
-  registry.npmmirror.com/require-from-string/2.0.2:
-    resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz}
-    name: require-from-string
-    version: 2.0.2
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/require-main-filename/2.0.0:
-    resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz}
-    name: require-main-filename
-    version: 2.0.0
-    dev: false
-
-  registry.npmmirror.com/requires-port/1.0.0:
-    resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz}
-    name: requires-port
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/resize-observer-polyfill/1.5.1:
-    resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz}
-    name: resize-observer-polyfill
-    version: 1.5.1
-    dev: false
-
-  registry.npmmirror.com/resolve-cwd/3.0.0:
-    resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz}
-    name: resolve-cwd
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      resolve-from: registry.npmmirror.com/resolve-from/5.0.0
-    dev: true
-
-  registry.npmmirror.com/resolve-dir/1.0.1:
-    resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-dir/-/resolve-dir-1.0.1.tgz}
-    name: resolve-dir
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      expand-tilde: registry.npmmirror.com/expand-tilde/2.0.2
-      global-modules: registry.npmmirror.com/global-modules/1.0.0
-    dev: true
-
-  registry.npmmirror.com/resolve-from/4.0.0:
-    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz}
-    name: resolve-from
-    version: 4.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/resolve-from/5.0.0:
-    resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz}
-    name: resolve-from
-    version: 5.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/resolve-global/1.0.0:
-    resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-global/-/resolve-global-1.0.0.tgz}
-    name: resolve-global
-    version: 1.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      global-dirs: registry.npmmirror.com/global-dirs/0.1.1
-    dev: true
-
-  registry.npmmirror.com/resolve-url/0.2.1:
-    resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz}
-    name: resolve-url
-    version: 0.2.1
-    deprecated: https://github.com/lydell/resolve-url#deprecated
-    dev: true
-
-  registry.npmmirror.com/resolve.exports/1.1.1:
-    resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve.exports/-/resolve.exports-1.1.1.tgz}
-    name: resolve.exports
-    version: 1.1.1
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/resolve/1.22.1:
-    resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz}
-    name: resolve
-    version: 1.22.1
-    hasBin: true
-    dependencies:
-      is-core-module: registry.npmmirror.com/is-core-module/2.11.0
-      path-parse: registry.npmmirror.com/path-parse/1.0.7
-      supports-preserve-symlinks-flag: registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/restore-cursor/3.1.0:
-    resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz}
-    name: restore-cursor
-    version: 3.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      onetime: registry.npmmirror.com/onetime/5.1.2
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-    dev: true
-
-  registry.npmmirror.com/ret/0.1.15:
-    resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz}
-    name: ret
-    version: 0.1.15
-    engines: {node: '>=0.12'}
-    dev: true
-
-  registry.npmmirror.com/reusify/1.0.4:
-    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz}
-    name: reusify
-    version: 1.0.4
-    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/rfdc/1.3.0:
-    resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz}
-    name: rfdc
-    version: 1.3.0
-    dev: true
-
-  registry.npmmirror.com/rimraf/2.7.1:
-    resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz}
-    name: rimraf
-    version: 2.7.1
-    hasBin: true
-    dependencies:
-      glob: registry.npmmirror.com/glob/7.2.3
-    dev: true
-
-  registry.npmmirror.com/rimraf/3.0.2:
-    resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz}
-    name: rimraf
-    version: 3.0.2
-    hasBin: true
-    dependencies:
-      glob: registry.npmmirror.com/glob/7.2.3
-    dev: true
-
-  registry.npmmirror.com/rollup-plugin-purge-icons/0.8.1:
-    resolution: {integrity: sha512-7ktMV+gWtXAdOIShE8EtTcnpGhozi5H2hKk1MQVGt+7FmlLkjR+XKu1Nyzjocwd6xJvKube2Lh+SfcJ8FYYySw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup-plugin-purge-icons/-/rollup-plugin-purge-icons-0.8.1.tgz}
-    name: rollup-plugin-purge-icons
-    version: 0.8.1
-    engines: {node: '>= 12'}
-    dependencies:
-      '@purge-icons/core': registry.npmmirror.com/@purge-icons/core/0.8.0
-      '@purge-icons/generated': registry.npmmirror.com/@purge-icons/generated/0.8.1
-    transitivePeerDependencies:
-      - encoding
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/rollup-plugin-terser/7.0.2_rollup@2.79.1:
-    resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz}
-    id: registry.npmmirror.com/rollup-plugin-terser/7.0.2
-    name: rollup-plugin-terser
-    version: 7.0.2
-    deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser
-    peerDependencies:
-      rollup: ^2.0.0
-    dependencies:
-      '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
-      jest-worker: registry.npmmirror.com/jest-worker/26.6.2
-      rollup: registry.npmmirror.com/rollup/2.79.1
-      serialize-javascript: registry.npmmirror.com/serialize-javascript/4.0.0
-      terser: registry.npmmirror.com/terser/5.16.5
-    dev: true
-
-  registry.npmmirror.com/rollup-plugin-visualizer/5.9.0_rollup@2.79.1:
-    resolution: {integrity: sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz}
-    id: registry.npmmirror.com/rollup-plugin-visualizer/5.9.0
-    name: rollup-plugin-visualizer
-    version: 5.9.0
-    engines: {node: '>=14'}
-    hasBin: true
-    peerDependencies:
-      rollup: 2.x || 3.x
-    peerDependenciesMeta:
-      rollup:
-        optional: true
-    dependencies:
-      open: registry.npmmirror.com/open/8.4.2
-      picomatch: registry.npmmirror.com/picomatch/2.3.1
-      rollup: registry.npmmirror.com/rollup/2.79.1
-      source-map: registry.npmmirror.com/source-map/0.7.4
-      yargs: registry.npmmirror.com/yargs/17.7.1
-    dev: true
-
-  registry.npmmirror.com/rollup/2.79.1:
-    resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz}
-    name: rollup
-    version: 2.79.1
-    engines: {node: '>=10.0.0'}
-    hasBin: true
-    optionalDependencies:
-      fsevents: 2.3.2
-    dev: true
-
-  registry.npmmirror.com/run-async/2.4.1:
-    resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz}
-    name: run-async
-    version: 2.4.1
-    engines: {node: '>=0.12.0'}
-    dev: true
-
-  registry.npmmirror.com/run-parallel/1.2.0:
-    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz}
-    name: run-parallel
-    version: 1.2.0
-    dependencies:
-      queue-microtask: registry.npmmirror.com/queue-microtask/1.2.3
-    dev: true
-
-  registry.npmmirror.com/rxjs/7.8.0:
-    resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rxjs/-/rxjs-7.8.0.tgz}
-    name: rxjs
-    version: 7.8.0
-    dependencies:
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/safe-buffer/5.1.2:
-    resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz}
-    name: safe-buffer
-    version: 5.1.2
-    dev: true
-
-  registry.npmmirror.com/safe-buffer/5.2.1:
-    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz}
-    name: safe-buffer
-    version: 5.2.1
-    dev: true
-
-  registry.npmmirror.com/safe-regex-test/1.0.0:
-    resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz}
-    name: safe-regex-test
-    version: 1.0.0
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.2.0
-      is-regex: registry.npmmirror.com/is-regex/1.1.4
-    dev: true
-
-  registry.npmmirror.com/safe-regex/1.1.0:
-    resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz}
-    name: safe-regex
-    version: 1.1.0
-    dependencies:
-      ret: registry.npmmirror.com/ret/0.1.15
-    dev: true
-
-  registry.npmmirror.com/safer-buffer/2.1.2:
-    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz}
-    name: safer-buffer
-    version: 2.1.2
-    dev: true
-
-  registry.npmmirror.com/sax/1.2.4:
-    resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz}
-    name: sax
-    version: 1.2.4
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/saxes/5.0.1:
-    resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz}
-    name: saxes
-    version: 5.0.1
-    engines: {node: '>=10'}
-    dependencies:
-      xmlchars: registry.npmmirror.com/xmlchars/2.2.0
-    dev: true
-
-  registry.npmmirror.com/scroll-into-view-if-needed/2.2.31:
-    resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz}
-    name: scroll-into-view-if-needed
-    version: 2.2.31
-    dependencies:
-      compute-scroll-into-view: registry.npmmirror.com/compute-scroll-into-view/1.0.20
-    dev: false
-
-  registry.npmmirror.com/scrollparent/2.0.1:
-    resolution: {integrity: sha512-HSdN78VMvFCSGCkh0oYX/tY4R3P1DW61f8+TeZZ4j2VLgfwvw0bpRSOv4PCVKisktIwbzHCfZsx+rLbbDBqIBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/scrollparent/-/scrollparent-2.0.1.tgz}
-    name: scrollparent
-    version: 2.0.1
-    dev: false
-
-  registry.npmmirror.com/secure-compare/3.0.1:
-    resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/secure-compare/-/secure-compare-3.0.1.tgz}
-    name: secure-compare
-    version: 3.0.1
-    dev: true
-
-  registry.npmmirror.com/select/1.1.2:
-    resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/select/-/select-1.1.2.tgz}
-    name: select
-    version: 1.1.2
-    dev: false
-
-  registry.npmmirror.com/semver/5.7.1:
-    resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz}
-    name: semver
-    version: 5.7.1
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/semver/6.3.0:
-    resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz}
-    name: semver
-    version: 6.3.0
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/semver/7.3.7:
-    resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz}
-    name: semver
-    version: 7.3.7
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      lru-cache: registry.npmmirror.com/lru-cache/6.0.0
-    dev: true
-
-  registry.npmmirror.com/semver/7.3.8:
-    resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz}
-    name: semver
-    version: 7.3.8
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      lru-cache: registry.npmmirror.com/lru-cache/6.0.0
-    dev: true
-
-  registry.npmmirror.com/sentence-case/3.0.4:
-    resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sentence-case/-/sentence-case-3.0.4.tgz}
-    name: sentence-case
-    version: 3.0.4
-    dependencies:
-      no-case: registry.npmmirror.com/no-case/3.0.4
-      tslib: registry.npmmirror.com/tslib/2.5.0
-      upper-case-first: registry.npmmirror.com/upper-case-first/2.0.2
-    dev: true
-
-  registry.npmmirror.com/serialize-javascript/4.0.0:
-    resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz}
-    name: serialize-javascript
-    version: 4.0.0
-    dependencies:
-      randombytes: registry.npmmirror.com/randombytes/2.1.0
-    dev: true
-
-  registry.npmmirror.com/set-blocking/2.0.0:
-    resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz}
-    name: set-blocking
-    version: 2.0.0
-    dev: false
-
-  registry.npmmirror.com/set-value/2.0.1:
-    resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz}
-    name: set-value
-    version: 2.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      is-extendable: registry.npmmirror.com/is-extendable/0.1.1
-      is-plain-object: registry.npmmirror.com/is-plain-object/2.0.4
-      split-string: registry.npmmirror.com/split-string/3.1.0
-    dev: true
-
-  registry.npmmirror.com/shallow-equal/1.2.1:
-    resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz}
-    name: shallow-equal
-    version: 1.2.1
-    dev: false
-
-  registry.npmmirror.com/shebang-command/1.2.0:
-    resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz}
-    name: shebang-command
-    version: 1.2.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      shebang-regex: registry.npmmirror.com/shebang-regex/1.0.0
-    dev: true
-
-  registry.npmmirror.com/shebang-command/2.0.0:
-    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz}
-    name: shebang-command
-    version: 2.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      shebang-regex: registry.npmmirror.com/shebang-regex/3.0.0
-    dev: true
-
-  registry.npmmirror.com/shebang-regex/1.0.0:
-    resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz}
-    name: shebang-regex
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/shebang-regex/3.0.0:
-    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz}
-    name: shebang-regex
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/shell-quote/1.8.0:
-    resolution: {integrity: sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.0.tgz}
-    name: shell-quote
-    version: 1.8.0
-    dev: true
-
-  registry.npmmirror.com/showdown/2.1.0:
-    resolution: {integrity: sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/showdown/-/showdown-2.1.0.tgz}
-    name: showdown
-    version: 2.1.0
-    hasBin: true
-    dependencies:
-      commander: registry.npmmirror.com/commander/9.5.0
-    dev: false
-
-  registry.npmmirror.com/side-channel/1.0.4:
-    resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz}
-    name: side-channel
-    version: 1.0.4
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.2.0
-      object-inspect: registry.npmmirror.com/object-inspect/1.12.3
-
-  registry.npmmirror.com/sigmund/1.0.1:
-    resolution: {integrity: sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sigmund/-/sigmund-1.0.1.tgz}
-    name: sigmund
-    version: 1.0.1
-    dev: true
-
-  registry.npmmirror.com/signal-exit/3.0.7:
-    resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz}
-    name: signal-exit
-    version: 3.0.7
-    dev: true
-
-  registry.npmmirror.com/sisteransi/1.0.5:
-    resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz}
-    name: sisteransi
-    version: 1.0.5
-    dev: true
-
-  registry.npmmirror.com/slash/3.0.0:
-    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz}
-    name: slash
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/slice-ansi/3.0.0:
-    resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz}
-    name: slice-ansi
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0
-      astral-regex: registry.npmmirror.com/astral-regex/2.0.0
-      is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/3.0.0
-    dev: true
-
-  registry.npmmirror.com/slice-ansi/4.0.0:
-    resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz}
-    name: slice-ansi
-    version: 4.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0
-      astral-regex: registry.npmmirror.com/astral-regex/2.0.0
-      is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/3.0.0
-    dev: true
-
-  registry.npmmirror.com/slice-ansi/5.0.0:
-    resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz}
-    name: slice-ansi
-    version: 5.0.0
-    engines: {node: '>=12'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/6.2.1
-      is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/4.0.0
-    dev: true
-
-  registry.npmmirror.com/snake-case/3.0.4:
-    resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snake-case/-/snake-case-3.0.4.tgz}
-    name: snake-case
-    version: 3.0.4
-    dependencies:
-      dot-case: registry.npmmirror.com/dot-case/3.0.4
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/snapdragon-node/2.1.1:
-    resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz}
-    name: snapdragon-node
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      define-property: registry.npmmirror.com/define-property/1.0.0
-      isobject: registry.npmmirror.com/isobject/3.0.1
-      snapdragon-util: registry.npmmirror.com/snapdragon-util/3.0.1
-    dev: true
-
-  registry.npmmirror.com/snapdragon-util/3.0.1:
-    resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz}
-    name: snapdragon-util
-    version: 3.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/snapdragon/0.8.2:
-    resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz}
-    name: snapdragon
-    version: 0.8.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      base: registry.npmmirror.com/base/0.11.2
-      debug: registry.npmmirror.com/debug/2.6.9
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      extend-shallow: registry.npmmirror.com/extend-shallow/2.0.1
-      map-cache: registry.npmmirror.com/map-cache/0.2.2
-      source-map: 0.5.7
-      source-map-resolve: registry.npmmirror.com/source-map-resolve/0.5.3
-      use: registry.npmmirror.com/use/3.1.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/sortablejs/1.14.0:
-    resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz}
-    name: sortablejs
-    version: 1.14.0
-    dev: false
-
-  registry.npmmirror.com/sortablejs/1.15.0:
-    resolution: {integrity: sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.0.tgz}
-    name: sortablejs
-    version: 1.15.0
-    dev: false
-
-  registry.npmmirror.com/source-map-js/1.0.2:
-    resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz}
-    name: source-map-js
-    version: 1.0.2
-    engines: {node: '>=0.10.0'}
-
-  registry.npmmirror.com/source-map-resolve/0.5.3:
-    resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz}
-    name: source-map-resolve
-    version: 0.5.3
-    deprecated: See https://github.com/lydell/source-map-resolve#deprecated
-    dependencies:
-      atob: registry.npmmirror.com/atob/2.1.2
-      decode-uri-component: registry.npmmirror.com/decode-uri-component/0.2.2
-      resolve-url: registry.npmmirror.com/resolve-url/0.2.1
-      source-map-url: registry.npmmirror.com/source-map-url/0.4.1
-      urix: registry.npmmirror.com/urix/0.1.0
-    dev: true
-
-  registry.npmmirror.com/source-map-support/0.5.21:
-    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz}
-    name: source-map-support
-    version: 0.5.21
-    dependencies:
-      buffer-from: registry.npmmirror.com/buffer-from/1.1.2
-      source-map: 0.6.1
-    dev: true
-
-  registry.npmmirror.com/source-map-url/0.4.1:
-    resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz}
-    name: source-map-url
-    version: 0.4.1
-    deprecated: See https://github.com/lydell/source-map-url#deprecated
-    dev: true
-
-  registry.npmmirror.com/source-map/0.6.1:
-    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz}
-    name: source-map
-    version: 0.6.1
-    engines: {node: '>=0.10.0'}
-
-  registry.npmmirror.com/source-map/0.7.4:
-    resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz}
-    name: source-map
-    version: 0.7.4
-    engines: {node: '>= 8'}
-    dev: true
-
-  registry.npmmirror.com/sourcemap-codec/1.4.8:
-    resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz}
-    name: sourcemap-codec
-    version: 1.4.8
-    deprecated: Please use @jridgewell/sourcemap-codec instead
-
-  registry.npmmirror.com/spdx-correct/3.1.1:
-    resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz}
-    name: spdx-correct
-    version: 3.1.1
-    dependencies:
-      spdx-expression-parse: registry.npmmirror.com/spdx-expression-parse/3.0.1
-      spdx-license-ids: registry.npmmirror.com/spdx-license-ids/3.0.12
-    dev: true
-
-  registry.npmmirror.com/spdx-exceptions/2.3.0:
-    resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz}
-    name: spdx-exceptions
-    version: 2.3.0
-    dev: true
-
-  registry.npmmirror.com/spdx-expression-parse/3.0.1:
-    resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz}
-    name: spdx-expression-parse
-    version: 3.0.1
-    dependencies:
-      spdx-exceptions: registry.npmmirror.com/spdx-exceptions/2.3.0
-      spdx-license-ids: registry.npmmirror.com/spdx-license-ids/3.0.12
-    dev: true
-
-  registry.npmmirror.com/spdx-license-ids/3.0.12:
-    resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz}
-    name: spdx-license-ids
-    version: 3.0.12
-    dev: true
-
-  registry.npmmirror.com/split-string/3.1.0:
-    resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz}
-    name: split-string
-    version: 3.1.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2
-    dev: true
-
-  registry.npmmirror.com/split/1.0.1:
-    resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/split/-/split-1.0.1.tgz}
-    name: split
-    version: 1.0.1
-    dependencies:
-      through: registry.npmmirror.com/through/2.3.8
-    dev: true
-
-  registry.npmmirror.com/split2/3.2.2:
-    resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/split2/-/split2-3.2.2.tgz}
-    name: split2
-    version: 3.2.2
-    dependencies:
-      readable-stream: registry.npmmirror.com/readable-stream/3.6.1
-    dev: true
-
-  registry.npmmirror.com/sprintf-js/1.0.3:
-    resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz}
-    name: sprintf-js
-    version: 1.0.3
-    dev: true
-
-  registry.npmmirror.com/squeak/1.3.0:
-    resolution: {integrity: sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/squeak/-/squeak-1.3.0.tgz}
-    name: squeak
-    version: 1.3.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/1.1.3
-      console-stream: registry.npmmirror.com/console-stream/0.1.1
-      lpad-align: registry.npmmirror.com/lpad-align/1.1.2
-    dev: true
-
-  registry.npmmirror.com/stable/0.1.8:
-    resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz}
-    name: stable
-    version: 0.1.8
-    deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
-    dev: true
-
-  registry.npmmirror.com/stack-utils/2.0.6:
-    resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stack-utils/-/stack-utils-2.0.6.tgz}
-    name: stack-utils
-    version: 2.0.6
-    engines: {node: '>=10'}
-    dependencies:
-      escape-string-regexp: registry.npmmirror.com/escape-string-regexp/2.0.0
-    dev: true
-
-  registry.npmmirror.com/static-extend/0.1.2:
-    resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz}
-    name: static-extend
-    version: 0.1.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      define-property: registry.npmmirror.com/define-property/0.2.5
-      object-copy: registry.npmmirror.com/object-copy/0.1.0
-    dev: true
-
-  registry.npmmirror.com/statuses/1.5.0:
-    resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz}
-    name: statuses
-    version: 1.5.0
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  registry.npmmirror.com/strict-uri-encode/1.1.0:
-    resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz}
-    name: strict-uri-encode
-    version: 1.1.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/string-argv/0.3.1:
-    resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-argv/-/string-argv-0.3.1.tgz}
-    name: string-argv
-    version: 0.3.1
-    engines: {node: '>=0.6.19'}
-    dev: true
-
-  registry.npmmirror.com/string-length/4.0.2:
-    resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz}
-    name: string-length
-    version: 4.0.2
-    engines: {node: '>=10'}
-    dependencies:
-      char-regex: registry.npmmirror.com/char-regex/1.0.2
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-    dev: true
-
-  registry.npmmirror.com/string-width/4.2.3:
-    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz}
-    name: string-width
-    version: 4.2.3
-    engines: {node: '>=8'}
-    dependencies:
-      emoji-regex: registry.npmmirror.com/emoji-regex/8.0.0
-      is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point/3.0.0
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-
-  registry.npmmirror.com/string-width/5.1.2:
-    resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz}
-    name: string-width
-    version: 5.1.2
-    engines: {node: '>=12'}
-    dependencies:
-      eastasianwidth: registry.npmmirror.com/eastasianwidth/0.2.0
-      emoji-regex: registry.npmmirror.com/emoji-regex/9.2.2
-      strip-ansi: registry.npmmirror.com/strip-ansi/7.0.1
-    dev: true
-
-  registry.npmmirror.com/string.prototype.matchall/4.0.8:
-    resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz}
-    name: string.prototype.matchall
-    version: 4.0.8
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.2.0
-      es-abstract: registry.npmmirror.com/es-abstract/1.21.1
-      get-intrinsic: registry.npmmirror.com/get-intrinsic/1.2.0
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-      internal-slot: registry.npmmirror.com/internal-slot/1.0.5
-      regexp.prototype.flags: registry.npmmirror.com/regexp.prototype.flags/1.4.3
-      side-channel: registry.npmmirror.com/side-channel/1.0.4
-    dev: true
-
-  registry.npmmirror.com/string.prototype.padend/3.1.4:
-    resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz}
-    name: string.prototype.padend
-    version: 3.1.4
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.2.0
-      es-abstract: registry.npmmirror.com/es-abstract/1.21.1
-    dev: true
-
-  registry.npmmirror.com/string.prototype.trimend/1.0.6:
-    resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz}
-    name: string.prototype.trimend
-    version: 1.0.6
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.2.0
-      es-abstract: registry.npmmirror.com/es-abstract/1.21.1
-    dev: true
-
-  registry.npmmirror.com/string.prototype.trimstart/1.0.6:
-    resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz}
-    name: string.prototype.trimstart
-    version: 1.0.6
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      define-properties: registry.npmmirror.com/define-properties/1.2.0
-      es-abstract: registry.npmmirror.com/es-abstract/1.21.1
-    dev: true
-
-  registry.npmmirror.com/string_decoder/1.1.1:
-    resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz}
-    name: string_decoder
-    version: 1.1.1
-    dependencies:
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.1.2
-    dev: true
-
-  registry.npmmirror.com/string_decoder/1.3.0:
-    resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz}
-    name: string_decoder
-    version: 1.3.0
-    dependencies:
-      safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
-    dev: true
-
-  registry.npmmirror.com/stringify-object/3.3.0:
-    resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz}
-    name: stringify-object
-    version: 3.3.0
-    engines: {node: '>=4'}
-    dependencies:
-      get-own-enumerable-property-symbols: registry.npmmirror.com/get-own-enumerable-property-symbols/3.0.2
-      is-obj: registry.npmmirror.com/is-obj/1.0.1
-      is-regexp: registry.npmmirror.com/is-regexp/1.0.0
-    dev: true
-
-  registry.npmmirror.com/strip-ansi/3.0.1:
-    resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz}
-    name: strip-ansi
-    version: 3.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      ansi-regex: registry.npmmirror.com/ansi-regex/2.1.1
-    dev: true
-
-  registry.npmmirror.com/strip-ansi/6.0.1:
-    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz}
-    name: strip-ansi
-    version: 6.0.1
-    engines: {node: '>=8'}
-    dependencies:
-      ansi-regex: registry.npmmirror.com/ansi-regex/5.0.1
-
-  registry.npmmirror.com/strip-ansi/7.0.1:
-    resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.0.1.tgz}
-    name: strip-ansi
-    version: 7.0.1
-    engines: {node: '>=12'}
-    dependencies:
-      ansi-regex: registry.npmmirror.com/ansi-regex/6.0.1
-    dev: true
-
-  registry.npmmirror.com/strip-bom/2.0.0:
-    resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-bom/-/strip-bom-2.0.0.tgz}
-    name: strip-bom
-    version: 2.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-utf8: registry.npmmirror.com/is-utf8/0.2.1
-    dev: true
-
-  registry.npmmirror.com/strip-bom/3.0.0:
-    resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz}
-    name: strip-bom
-    version: 3.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/strip-bom/4.0.0:
-    resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz}
-    name: strip-bom
-    version: 4.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/strip-comments/2.0.1:
-    resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-comments/-/strip-comments-2.0.1.tgz}
-    name: strip-comments
-    version: 2.0.1
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/strip-eof/1.0.0:
-    resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz}
-    name: strip-eof
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/strip-final-newline/2.0.0:
-    resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz}
-    name: strip-final-newline
-    version: 2.0.0
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/strip-indent/1.0.1:
-    resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-indent/-/strip-indent-1.0.1.tgz}
-    name: strip-indent
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-    dependencies:
-      get-stdin: registry.npmmirror.com/get-stdin/4.0.1
-    dev: true
-
-  registry.npmmirror.com/strip-indent/3.0.0:
-    resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-indent/-/strip-indent-3.0.0.tgz}
-    name: strip-indent
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      min-indent: registry.npmmirror.com/min-indent/1.0.1
-    dev: true
-
-  registry.npmmirror.com/strip-json-comments/3.1.1:
-    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz}
-    name: strip-json-comments
-    version: 3.1.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/strnum/1.0.5:
-    resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz}
-    name: strnum
-    version: 1.0.5
-    dev: true
-
-  registry.npmmirror.com/style-search/0.1.0:
-    resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/style-search/-/style-search-0.1.0.tgz}
-    name: style-search
-    version: 0.1.0
-    dev: true
-
-  registry.npmmirror.com/stylelint-config-html/1.1.0_kbto3rg3njmczth2rrsgfnlsqa:
-    resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz}
-    id: registry.npmmirror.com/stylelint-config-html/1.1.0
-    name: stylelint-config-html
-    version: 1.1.0
-    engines: {node: ^12 || >=14}
-    peerDependencies:
-      postcss-html: ^1.0.0
-      stylelint: '>=14.0.0'
-    dependencies:
-      postcss-html: registry.npmmirror.com/postcss-html/1.5.0
-      stylelint: registry.npmmirror.com/stylelint/14.16.1
-    dev: true
-
-  registry.npmmirror.com/stylelint-config-prettier/9.0.5_stylelint@14.16.1:
-    resolution: {integrity: sha512-U44lELgLZhbAD/xy/vncZ2Pq8sh2TnpiPvo38Ifg9+zeioR+LAkHu0i6YORIOxFafZoVg0xqQwex6e6F25S5XA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylelint-config-prettier/-/stylelint-config-prettier-9.0.5.tgz}
-    id: registry.npmmirror.com/stylelint-config-prettier/9.0.5
-    name: stylelint-config-prettier
-    version: 9.0.5
-    engines: {node: '>= 12'}
-    hasBin: true
-    peerDependencies:
-      stylelint: '>= 11.x < 15'
-    dependencies:
-      stylelint: registry.npmmirror.com/stylelint/14.16.1
-    dev: true
-
-  registry.npmmirror.com/stylelint-config-recommended-vue/1.4.0_kbto3rg3njmczth2rrsgfnlsqa:
-    resolution: {integrity: sha512-DVJqyX2KvMCn9U0+keL12r7xlsH26K4Vg8NrIZuq5MoF7g82DpMp326Om4E0Q+Il1o+bTHuUyejf2XAI0iD04Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.4.0.tgz}
-    id: registry.npmmirror.com/stylelint-config-recommended-vue/1.4.0
-    name: stylelint-config-recommended-vue
-    version: 1.4.0
-    engines: {node: ^12 || >=14}
-    peerDependencies:
-      postcss-html: ^1.0.0
-      stylelint: '>=14.0.0'
-    dependencies:
-      postcss-html: registry.npmmirror.com/postcss-html/1.5.0
-      semver: registry.npmmirror.com/semver/7.3.8
-      stylelint: registry.npmmirror.com/stylelint/14.16.1
-      stylelint-config-html: registry.npmmirror.com/stylelint-config-html/1.1.0_kbto3rg3njmczth2rrsgfnlsqa
-      stylelint-config-recommended: registry.npmmirror.com/stylelint-config-recommended/7.0.0_stylelint@14.16.1
-    dev: true
-
-  registry.npmmirror.com/stylelint-config-recommended/7.0.0_stylelint@14.16.1:
-    resolution: {integrity: sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz}
-    id: registry.npmmirror.com/stylelint-config-recommended/7.0.0
-    name: stylelint-config-recommended
-    version: 7.0.0
-    peerDependencies:
-      stylelint: ^14.4.0
-    dependencies:
-      stylelint: registry.npmmirror.com/stylelint/14.16.1
-    dev: true
-
-  registry.npmmirror.com/stylelint-config-standard/25.0.0_stylelint@14.16.1:
-    resolution: {integrity: sha512-21HnP3VSpaT1wFjFvv9VjvOGDtAviv47uTp3uFmzcN+3Lt+RYRv6oAplLaV51Kf792JSxJ6svCJh/G18E9VnCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylelint-config-standard/-/stylelint-config-standard-25.0.0.tgz}
-    id: registry.npmmirror.com/stylelint-config-standard/25.0.0
-    name: stylelint-config-standard
-    version: 25.0.0
-    peerDependencies:
-      stylelint: ^14.4.0
-    dependencies:
-      stylelint: registry.npmmirror.com/stylelint/14.16.1
-      stylelint-config-recommended: registry.npmmirror.com/stylelint-config-recommended/7.0.0_stylelint@14.16.1
-    dev: true
-
-  registry.npmmirror.com/stylelint-order/5.0.0_stylelint@14.16.1:
-    resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylelint-order/-/stylelint-order-5.0.0.tgz}
-    id: registry.npmmirror.com/stylelint-order/5.0.0
-    name: stylelint-order
-    version: 5.0.0
-    peerDependencies:
-      stylelint: ^14.0.0
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/8.4.21
-      postcss-sorting: registry.npmmirror.com/postcss-sorting/7.0.1_postcss@8.4.21
-      stylelint: registry.npmmirror.com/stylelint/14.16.1
-    dev: true
-
-  registry.npmmirror.com/stylelint/14.16.1:
-    resolution: {integrity: sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylelint/-/stylelint-14.16.1.tgz}
-    name: stylelint
-    version: 14.16.1
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    hasBin: true
-    dependencies:
-      '@csstools/selector-specificity': registry.npmmirror.com/@csstools/selector-specificity/2.1.1_wajs5nedgkikc5pcuwett7legi
-      balanced-match: registry.npmmirror.com/balanced-match/2.0.0
-      colord: registry.npmmirror.com/colord/2.9.3
-      cosmiconfig: registry.npmmirror.com/cosmiconfig/7.1.0
-      css-functions-list: registry.npmmirror.com/css-functions-list/3.1.0
-      debug: registry.npmmirror.com/debug/4.3.4
-      fast-glob: registry.npmmirror.com/fast-glob/3.2.12
-      fastest-levenshtein: registry.npmmirror.com/fastest-levenshtein/1.0.16
-      file-entry-cache: registry.npmmirror.com/file-entry-cache/6.0.1
-      global-modules: registry.npmmirror.com/global-modules/2.0.0
-      globby: registry.npmmirror.com/globby/11.1.0
-      globjoin: registry.npmmirror.com/globjoin/0.1.4
-      html-tags: registry.npmmirror.com/html-tags/3.2.0
-      ignore: registry.npmmirror.com/ignore/5.2.4
-      import-lazy: registry.npmmirror.com/import-lazy/4.0.0
-      imurmurhash: registry.npmmirror.com/imurmurhash/0.1.4
-      is-plain-object: registry.npmmirror.com/is-plain-object/5.0.0
-      known-css-properties: registry.npmmirror.com/known-css-properties/0.26.0
-      mathml-tag-names: registry.npmmirror.com/mathml-tag-names/2.1.3
-      meow: registry.npmmirror.com/meow/9.0.0
-      micromatch: registry.npmmirror.com/micromatch/4.0.5
-      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
-      picocolors: registry.npmmirror.com/picocolors/1.0.0
-      postcss: registry.npmmirror.com/postcss/8.4.21
-      postcss-media-query-parser: registry.npmmirror.com/postcss-media-query-parser/0.2.3
-      postcss-resolve-nested-selector: registry.npmmirror.com/postcss-resolve-nested-selector/0.1.1
-      postcss-safe-parser: registry.npmmirror.com/postcss-safe-parser/6.0.0_postcss@8.4.21
-      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser/6.0.11
-      postcss-value-parser: registry.npmmirror.com/postcss-value-parser/4.2.0
-      resolve-from: registry.npmmirror.com/resolve-from/5.0.0
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-      style-search: registry.npmmirror.com/style-search/0.1.0
-      supports-hyperlinks: registry.npmmirror.com/supports-hyperlinks/2.3.0
-      svg-tags: registry.npmmirror.com/svg-tags/1.0.0
-      table: registry.npmmirror.com/table/6.8.1
-      v8-compile-cache: registry.npmmirror.com/v8-compile-cache/2.3.0
-      write-file-atomic: registry.npmmirror.com/write-file-atomic/4.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/supports-color/2.0.0:
-    resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz}
-    name: supports-color
-    version: 2.0.0
-    engines: {node: '>=0.8.0'}
-    dev: true
-
-  registry.npmmirror.com/supports-color/3.2.3:
-    resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-3.2.3.tgz}
-    name: supports-color
-    version: 3.2.3
-    engines: {node: '>=0.8.0'}
-    dependencies:
-      has-flag: registry.npmmirror.com/has-flag/1.0.0
-    dev: true
-
-  registry.npmmirror.com/supports-color/5.5.0:
-    resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz}
-    name: supports-color
-    version: 5.5.0
-    engines: {node: '>=4'}
-    dependencies:
-      has-flag: registry.npmmirror.com/has-flag/3.0.0
-    dev: true
-
-  registry.npmmirror.com/supports-color/7.2.0:
-    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz}
-    name: supports-color
-    version: 7.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      has-flag: registry.npmmirror.com/has-flag/4.0.0
-    dev: true
-
-  registry.npmmirror.com/supports-color/8.1.1:
-    resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz}
-    name: supports-color
-    version: 8.1.1
-    engines: {node: '>=10'}
-    dependencies:
-      has-flag: registry.npmmirror.com/has-flag/4.0.0
-    dev: true
-
-  registry.npmmirror.com/supports-color/9.3.1:
-    resolution: {integrity: sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-9.3.1.tgz}
-    name: supports-color
-    version: 9.3.1
-    engines: {node: '>=12'}
-    dev: true
-
-  registry.npmmirror.com/supports-hyperlinks/2.3.0:
-    resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz}
-    name: supports-hyperlinks
-    version: 2.3.0
-    engines: {node: '>=8'}
-    dependencies:
-      has-flag: registry.npmmirror.com/has-flag/4.0.0
-      supports-color: registry.npmmirror.com/supports-color/7.2.0
-    dev: true
-
-  registry.npmmirror.com/supports-preserve-symlinks-flag/1.0.0:
-    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz}
-    name: supports-preserve-symlinks-flag
-    version: 1.0.0
-    engines: {node: '>= 0.4'}
-    dev: true
-
-  registry.npmmirror.com/svg-baker/1.7.0:
-    resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svg-baker/-/svg-baker-1.7.0.tgz}
-    name: svg-baker
-    version: 1.7.0
-    dependencies:
-      bluebird: registry.npmmirror.com/bluebird/3.7.2
-      clone: registry.npmmirror.com/clone/2.1.2
-      he: registry.npmmirror.com/he/1.2.0
-      image-size: 0.5.5
-      loader-utils: registry.npmmirror.com/loader-utils/1.4.2
-      merge-options: registry.npmmirror.com/merge-options/1.0.1
-      micromatch: registry.npmmirror.com/micromatch/3.1.0
-      postcss: registry.npmmirror.com/postcss/5.2.18
-      postcss-prefix-selector: registry.npmmirror.com/postcss-prefix-selector/1.16.0_postcss@5.2.18
-      posthtml-rename-id: registry.npmmirror.com/posthtml-rename-id/1.0.12
-      posthtml-svg-mode: registry.npmmirror.com/posthtml-svg-mode/1.0.3
-      query-string: registry.npmmirror.com/query-string/4.3.4
-      traverse: registry.npmmirror.com/traverse/0.6.7
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/svg-tags/1.0.0:
-    resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz}
-    name: svg-tags
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/svgo/2.8.0:
-    resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz}
-    name: svgo
-    version: 2.8.0
-    engines: {node: '>=10.13.0'}
-    hasBin: true
-    dependencies:
-      '@trysound/sax': registry.npmmirror.com/@trysound/sax/0.2.0
-      commander: registry.npmmirror.com/commander/7.2.0
-      css-select: registry.npmmirror.com/css-select/4.3.0
-      css-tree: registry.npmmirror.com/css-tree/1.1.3
-      csso: registry.npmmirror.com/csso/4.2.0
-      picocolors: registry.npmmirror.com/picocolors/1.0.0
-      stable: registry.npmmirror.com/stable/0.1.8
-    dev: true
-
-  registry.npmmirror.com/symbol-tree/3.2.4:
-    resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz}
-    name: symbol-tree
-    version: 3.2.4
-    dev: true
-
-  registry.npmmirror.com/systemjs/6.14.0:
-    resolution: {integrity: sha512-OMf+kFCYG9fLQerUyw/QVIPfZ+lo579R+usrDzSrZAkvMl6B0tHtc4rUP7DFaPCr7Sy6p5DYD4V9OCF1Sp6+vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/systemjs/-/systemjs-6.14.0.tgz}
-    name: systemjs
-    version: 6.14.0
-    dev: true
-
-  registry.npmmirror.com/table/6.8.1:
-    resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/table/-/table-6.8.1.tgz}
-    name: table
-    version: 6.8.1
-    engines: {node: '>=10.0.0'}
-    dependencies:
-      ajv: registry.npmmirror.com/ajv/8.12.0
-      lodash.truncate: registry.npmmirror.com/lodash.truncate/4.4.2
-      slice-ansi: registry.npmmirror.com/slice-ansi/4.0.0
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-    dev: true
-
-  registry.npmmirror.com/temp-dir/1.0.0:
-    resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/temp-dir/-/temp-dir-1.0.0.tgz}
-    name: temp-dir
-    version: 1.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/temp-dir/2.0.0:
-    resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/temp-dir/-/temp-dir-2.0.0.tgz}
-    name: temp-dir
-    version: 2.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/tempfile/2.0.0:
-    resolution: {integrity: sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tempfile/-/tempfile-2.0.0.tgz}
-    name: tempfile
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      temp-dir: registry.npmmirror.com/temp-dir/1.0.0
-      uuid: registry.npmmirror.com/uuid/3.4.0
-    dev: true
-
-  registry.npmmirror.com/tempfile/3.0.0:
-    resolution: {integrity: sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tempfile/-/tempfile-3.0.0.tgz}
-    name: tempfile
-    version: 3.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      temp-dir: registry.npmmirror.com/temp-dir/2.0.0
-      uuid: registry.npmmirror.com/uuid/3.4.0
-    dev: true
-
-  registry.npmmirror.com/tempy/0.6.0:
-    resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tempy/-/tempy-0.6.0.tgz}
-    name: tempy
-    version: 0.6.0
-    engines: {node: '>=10'}
-    dependencies:
-      is-stream: registry.npmmirror.com/is-stream/2.0.1
-      temp-dir: registry.npmmirror.com/temp-dir/2.0.0
-      type-fest: registry.npmmirror.com/type-fest/0.16.0
-      unique-string: registry.npmmirror.com/unique-string/2.0.0
-    dev: true
-
-  registry.npmmirror.com/terminal-link/2.1.1:
-    resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/terminal-link/-/terminal-link-2.1.1.tgz}
-    name: terminal-link
-    version: 2.1.1
-    engines: {node: '>=8'}
-    dependencies:
-      ansi-escapes: registry.npmmirror.com/ansi-escapes/4.3.2
-      supports-hyperlinks: registry.npmmirror.com/supports-hyperlinks/2.3.0
-    dev: true
-
-  registry.npmmirror.com/terser/5.16.5:
-    resolution: {integrity: sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/terser/-/terser-5.16.5.tgz}
-    name: terser
-    version: 5.16.5
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      '@jridgewell/source-map': registry.npmmirror.com/@jridgewell/source-map/0.3.2
-      acorn: registry.npmmirror.com/acorn/8.8.2
-      commander: registry.npmmirror.com/commander/2.20.3
-      source-map-support: registry.npmmirror.com/source-map-support/0.5.21
-    dev: true
-
-  registry.npmmirror.com/test-exclude/6.0.0:
-    resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz}
-    name: test-exclude
-    version: 6.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      '@istanbuljs/schema': registry.npmmirror.com/@istanbuljs/schema/0.1.3
-      glob: registry.npmmirror.com/glob/7.2.3
-      minimatch: registry.npmmirror.com/minimatch/3.1.2
-    dev: true
-
-  registry.npmmirror.com/text-extensions/1.9.0:
-    resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/text-extensions/-/text-extensions-1.9.0.tgz}
-    name: text-extensions
-    version: 1.9.0
-    engines: {node: '>=0.10'}
-    dev: true
-
-  registry.npmmirror.com/text-table/0.2.0:
-    resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz}
-    name: text-table
-    version: 0.2.0
-    dev: true
-
-  registry.npmmirror.com/throat/6.0.2:
-    resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/throat/-/throat-6.0.2.tgz}
-    name: throat
-    version: 6.0.2
-    dev: true
-
-  registry.npmmirror.com/through/2.3.8:
-    resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/through/-/through-2.3.8.tgz}
-    name: through
-    version: 2.3.8
-    dev: true
-
-  registry.npmmirror.com/through2/2.0.5:
-    resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz}
-    name: through2
-    version: 2.0.5
-    dependencies:
-      readable-stream: registry.npmmirror.com/readable-stream/2.3.8
-      xtend: registry.npmmirror.com/xtend/4.0.2
-    dev: true
-
-  registry.npmmirror.com/through2/4.0.2:
-    resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/through2/-/through2-4.0.2.tgz}
-    name: through2
-    version: 4.0.2
-    dependencies:
-      readable-stream: registry.npmmirror.com/readable-stream/3.6.1
-    dev: true
-
-  registry.npmmirror.com/tiny-emitter/2.1.0:
-    resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz}
-    name: tiny-emitter
-    version: 2.1.0
-    dev: false
-
-  registry.npmmirror.com/tinycolor2/1.6.0:
-    resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz}
-    name: tinycolor2
-    version: 1.6.0
-    dev: true
-
-  registry.npmmirror.com/tinymce/5.10.7:
-    resolution: {integrity: sha512-9UUjaO0R7FxcFo0oxnd1lMs7H+D0Eh+dDVo5hKbVe1a+VB0nit97vOqlinj+YwgoBDt6/DSCUoWqAYlLI8BLYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tinymce/-/tinymce-5.10.7.tgz}
-    name: tinymce
-    version: 5.10.7
-    dev: false
-
-  registry.npmmirror.com/tmp/0.0.33:
-    resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz}
-    name: tmp
-    version: 0.0.33
-    engines: {node: '>=0.6.0'}
-    dependencies:
-      os-tmpdir: registry.npmmirror.com/os-tmpdir/1.0.2
-    dev: true
-
-  registry.npmmirror.com/tmpl/1.0.5:
-    resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz}
-    name: tmpl
-    version: 1.0.5
-    dev: true
-
-  registry.npmmirror.com/to-fast-properties/2.0.0:
-    resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz}
-    name: to-fast-properties
-    version: 2.0.0
-    engines: {node: '>=4'}
-
-  registry.npmmirror.com/to-object-path/0.3.0:
-    resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz}
-    name: to-object-path
-    version: 0.3.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      kind-of: registry.npmmirror.com/kind-of/3.2.2
-    dev: true
-
-  registry.npmmirror.com/to-regex-range/2.1.1:
-    resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz}
-    name: to-regex-range
-    version: 2.1.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-number: registry.npmmirror.com/is-number/3.0.0
-      repeat-string: registry.npmmirror.com/repeat-string/1.6.1
-    dev: true
-
-  registry.npmmirror.com/to-regex-range/5.0.1:
-    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz}
-    name: to-regex-range
-    version: 5.0.1
-    engines: {node: '>=8.0'}
-    dependencies:
-      is-number: registry.npmmirror.com/is-number/7.0.0
-    dev: true
-
-  registry.npmmirror.com/to-regex/3.0.2:
-    resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz}
-    name: to-regex
-    version: 3.0.2
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      define-property: registry.npmmirror.com/define-property/2.0.2
-      extend-shallow: registry.npmmirror.com/extend-shallow/3.0.2
-      regex-not: registry.npmmirror.com/regex-not/1.0.2
-      safe-regex: registry.npmmirror.com/safe-regex/1.1.0
-    dev: true
-
-  registry.npmmirror.com/token-stream/1.0.0:
-    resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/token-stream/-/token-stream-1.0.0.tgz}
-    name: token-stream
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/tough-cookie/4.1.2:
-    resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.1.2.tgz}
-    name: tough-cookie
-    version: 4.1.2
-    engines: {node: '>=6'}
-    dependencies:
-      psl: registry.npmmirror.com/psl/1.9.0
-      punycode: registry.npmmirror.com/punycode/2.3.0
-      universalify: registry.npmmirror.com/universalify/0.2.0
-      url-parse: registry.npmmirror.com/url-parse/1.5.10
-    dev: true
-
-  registry.npmmirror.com/tr46/0.0.3:
-    resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz}
-    name: tr46
-    version: 0.0.3
-    dev: true
-
-  registry.npmmirror.com/tr46/1.0.1:
-    resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tr46/-/tr46-1.0.1.tgz}
-    name: tr46
-    version: 1.0.1
-    dependencies:
-      punycode: registry.npmmirror.com/punycode/2.3.0
-    dev: true
-
-  registry.npmmirror.com/tr46/2.1.0:
-    resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tr46/-/tr46-2.1.0.tgz}
-    name: tr46
-    version: 2.1.0
-    engines: {node: '>=8'}
-    dependencies:
-      punycode: registry.npmmirror.com/punycode/2.3.0
-    dev: true
-
-  registry.npmmirror.com/traverse/0.6.7:
-    resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/traverse/-/traverse-0.6.7.tgz}
-    name: traverse
-    version: 0.6.7
-    dev: true
-
-  registry.npmmirror.com/trim-newlines/1.0.0:
-    resolution: {integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/trim-newlines/-/trim-newlines-1.0.0.tgz}
-    name: trim-newlines
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/trim-newlines/3.0.1:
-    resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/trim-newlines/-/trim-newlines-3.0.1.tgz}
-    name: trim-newlines
-    version: 3.0.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/ts-jest/27.1.5_n4jzo3ixy42kfaqevs43wjx5ui:
-    resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ts-jest/-/ts-jest-27.1.5.tgz}
-    id: registry.npmmirror.com/ts-jest/27.1.5
-    name: ts-jest
-    version: 27.1.5
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-    hasBin: true
-    peerDependencies:
-      '@babel/core': '>=7.0.0-beta.0 <8'
-      '@types/jest': ^27.0.0
-      babel-jest: '>=27.0.0 <28'
-      esbuild: '*'
-      jest: ^27.0.0
-      typescript: '>=3.8 <5.0'
-    peerDependenciesMeta:
-      '@babel/core':
-        optional: true
-      '@types/jest':
-        optional: true
-      babel-jest:
-        optional: true
-      esbuild:
-        optional: true
-    dependencies:
-      '@types/jest': registry.npmmirror.com/@types/jest/27.5.2
-      bs-logger: registry.npmmirror.com/bs-logger/0.2.6
-      fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0
-      jest: registry.npmmirror.com/jest/27.5.1_ts-node@10.9.1
-      jest-util: registry.npmmirror.com/jest-util/27.5.1
-      json5: registry.npmmirror.com/json5/2.2.3
-      lodash.memoize: registry.npmmirror.com/lodash.memoize/4.1.2
-      make-error: registry.npmmirror.com/make-error/1.3.6
-      semver: registry.npmmirror.com/semver/7.3.8
-      typescript: registry.npmmirror.com/typescript/4.9.5
-      yargs-parser: registry.npmmirror.com/yargs-parser/20.2.9
-    dev: true
-
-  registry.npmmirror.com/ts-node/10.9.1_cin3sed6ohfsopbmt6orxeb4o4:
-    resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ts-node/-/ts-node-10.9.1.tgz}
-    id: registry.npmmirror.com/ts-node/10.9.1
-    name: ts-node
-    version: 10.9.1
-    hasBin: true
-    peerDependencies:
-      '@swc/core': '>=1.2.50'
-      '@swc/wasm': '>=1.2.50'
-      '@types/node': '*'
-      typescript: '>=2.7'
-    peerDependenciesMeta:
-      '@swc/core':
-        optional: true
-      '@swc/wasm':
-        optional: true
-    dependencies:
-      '@cspotcode/source-map-support': registry.npmmirror.com/@cspotcode/source-map-support/0.8.1
-      '@tsconfig/node10': registry.npmmirror.com/@tsconfig/node10/1.0.9
-      '@tsconfig/node12': registry.npmmirror.com/@tsconfig/node12/1.0.11
-      '@tsconfig/node14': registry.npmmirror.com/@tsconfig/node14/1.0.3
-      '@tsconfig/node16': registry.npmmirror.com/@tsconfig/node16/1.0.3
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      acorn: registry.npmmirror.com/acorn/8.8.2
-      acorn-walk: registry.npmmirror.com/acorn-walk/8.2.0
-      arg: registry.npmmirror.com/arg/4.1.3
-      create-require: registry.npmmirror.com/create-require/1.1.1
-      diff: registry.npmmirror.com/diff/4.0.2
-      make-error: registry.npmmirror.com/make-error/1.3.6
-      typescript: registry.npmmirror.com/typescript/4.9.5
-      v8-compile-cache-lib: registry.npmmirror.com/v8-compile-cache-lib/3.0.1
-      yn: registry.npmmirror.com/yn/3.1.1
-    dev: true
-
-  registry.npmmirror.com/tslib/1.14.1:
-    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz}
-    name: tslib
-    version: 1.14.1
-    dev: true
-
-  registry.npmmirror.com/tslib/2.3.0:
-    resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz}
-    name: tslib
-    version: 2.3.0
-    dev: false
-
-  registry.npmmirror.com/tslib/2.5.0:
-    resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz}
-    name: tslib
-    version: 2.5.0
-    dev: true
-
-  registry.npmmirror.com/tsutils/3.21.0_typescript@4.9.5:
-    resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz}
-    id: registry.npmmirror.com/tsutils/3.21.0
-    name: tsutils
-    version: 3.21.0
-    engines: {node: '>= 6'}
-    peerDependencies:
-      typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
-    dependencies:
-      tslib: registry.npmmirror.com/tslib/1.14.1
-      typescript: registry.npmmirror.com/typescript/4.9.5
-    dev: true
-
-  registry.npmmirror.com/type-check/0.3.2:
-    resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz}
-    name: type-check
-    version: 0.3.2
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      prelude-ls: registry.npmmirror.com/prelude-ls/1.1.2
-    dev: true
-
-  registry.npmmirror.com/type-check/0.4.0:
-    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz}
-    name: type-check
-    version: 0.4.0
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      prelude-ls: registry.npmmirror.com/prelude-ls/1.2.1
-    dev: true
-
-  registry.npmmirror.com/type-detect/4.0.8:
-    resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz}
-    name: type-detect
-    version: 4.0.8
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/type-fest/0.11.0:
-    resolution: {integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.11.0.tgz}
-    name: type-fest
-    version: 0.11.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/type-fest/0.16.0:
-    resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.16.0.tgz}
-    name: type-fest
-    version: 0.16.0
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/type-fest/0.18.1:
-    resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.18.1.tgz}
-    name: type-fest
-    version: 0.18.1
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/type-fest/0.20.2:
-    resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz}
-    name: type-fest
-    version: 0.20.2
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/type-fest/0.21.3:
-    resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz}
-    name: type-fest
-    version: 0.21.3
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/type-fest/0.6.0:
-    resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz}
-    name: type-fest
-    version: 0.6.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/type-fest/0.8.1:
-    resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz}
-    name: type-fest
-    version: 0.8.1
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/typed-array-length/1.0.4:
-    resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz}
-    name: typed-array-length
-    version: 1.0.4
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      for-each: registry.npmmirror.com/for-each/0.3.3
-      is-typed-array: registry.npmmirror.com/is-typed-array/1.1.10
-    dev: true
-
-  registry.npmmirror.com/typedarray-to-buffer/3.1.5:
-    resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz}
-    name: typedarray-to-buffer
-    version: 3.1.5
-    dependencies:
-      is-typedarray: registry.npmmirror.com/is-typedarray/1.0.0
-    dev: true
-
-  registry.npmmirror.com/typescript/4.9.5:
-    resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz}
-    name: typescript
-    version: 4.9.5
-    engines: {node: '>=4.2.0'}
-    hasBin: true
-
-  registry.npmmirror.com/unbox-primitive/1.0.2:
-    resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz}
-    name: unbox-primitive
-    version: 1.0.2
-    dependencies:
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      has-bigints: registry.npmmirror.com/has-bigints/1.0.2
-      has-symbols: registry.npmmirror.com/has-symbols/1.0.3
-      which-boxed-primitive: registry.npmmirror.com/which-boxed-primitive/1.0.2
-    dev: true
-
-  registry.npmmirror.com/unicode-canonical-property-names-ecmascript/2.0.0:
-    resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz}
-    name: unicode-canonical-property-names-ecmascript
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/unicode-match-property-ecmascript/2.0.0:
-    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz}
-    name: unicode-match-property-ecmascript
-    version: 2.0.0
-    engines: {node: '>=4'}
-    dependencies:
-      unicode-canonical-property-names-ecmascript: registry.npmmirror.com/unicode-canonical-property-names-ecmascript/2.0.0
-      unicode-property-aliases-ecmascript: registry.npmmirror.com/unicode-property-aliases-ecmascript/2.1.0
-    dev: true
-
-  registry.npmmirror.com/unicode-match-property-value-ecmascript/2.1.0:
-    resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz}
-    name: unicode-match-property-value-ecmascript
-    version: 2.1.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/unicode-property-aliases-ecmascript/2.1.0:
-    resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz}
-    name: unicode-property-aliases-ecmascript
-    version: 2.1.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/union-value/1.0.1:
-    resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz}
-    name: union-value
-    version: 1.0.1
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      arr-union: registry.npmmirror.com/arr-union/3.1.0
-      get-value: registry.npmmirror.com/get-value/2.0.6
-      is-extendable: registry.npmmirror.com/is-extendable/0.1.1
-      set-value: registry.npmmirror.com/set-value/2.0.1
-    dev: true
-
-  registry.npmmirror.com/union/0.5.0:
-    resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/union/-/union-0.5.0.tgz}
-    name: union
-    version: 0.5.0
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      qs: registry.npmmirror.com/qs/6.11.0
-    dev: true
-
-  registry.npmmirror.com/unique-string/2.0.0:
-    resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unique-string/-/unique-string-2.0.0.tgz}
-    name: unique-string
-    version: 2.0.0
-    engines: {node: '>=8'}
-    dependencies:
-      crypto-random-string: registry.npmmirror.com/crypto-random-string/2.0.0
-    dev: true
-
-  registry.npmmirror.com/universal-user-agent/6.0.0:
-    resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz}
-    name: universal-user-agent
-    version: 6.0.0
-    dev: true
-
-  registry.npmmirror.com/universalify/0.2.0:
-    resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/universalify/-/universalify-0.2.0.tgz}
-    name: universalify
-    version: 0.2.0
-    engines: {node: '>= 4.0.0'}
-    dev: true
-
-  registry.npmmirror.com/universalify/2.0.0:
-    resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz}
-    name: universalify
-    version: 2.0.0
-    engines: {node: '>= 10.0.0'}
-    dev: true
-
-  registry.npmmirror.com/unpipe/1.0.0:
-    resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz}
-    name: unpipe
-    version: 1.0.0
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/unset-value/1.0.0:
-    resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz}
-    name: unset-value
-    version: 1.0.0
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      has-value: registry.npmmirror.com/has-value/0.3.1
-      isobject: registry.npmmirror.com/isobject/3.0.1
-    dev: true
-
-  registry.npmmirror.com/upath/1.2.0:
-    resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz}
-    name: upath
-    version: 1.2.0
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/upath/2.0.1:
-    resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upath/-/upath-2.0.1.tgz}
-    name: upath
-    version: 2.0.1
-    engines: {node: '>=4'}
-    dev: true
-
-  registry.npmmirror.com/update-browserslist-db/1.0.10_browserslist@4.21.5:
-    resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz}
-    id: registry.npmmirror.com/update-browserslist-db/1.0.10
-    name: update-browserslist-db
-    version: 1.0.10
-    hasBin: true
-    peerDependencies:
-      browserslist: '>= 4.21.0'
-    dependencies:
-      browserslist: registry.npmmirror.com/browserslist/4.21.5
-      escalade: registry.npmmirror.com/escalade/3.1.1
-      picocolors: registry.npmmirror.com/picocolors/1.0.0
-    dev: true
-
-  registry.npmmirror.com/upper-case-first/2.0.2:
-    resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upper-case-first/-/upper-case-first-2.0.2.tgz}
-    name: upper-case-first
-    version: 2.0.2
-    dependencies:
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/upper-case/2.0.2:
-    resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upper-case/-/upper-case-2.0.2.tgz}
-    name: upper-case
-    version: 2.0.2
-    dependencies:
-      tslib: registry.npmmirror.com/tslib/2.5.0
-    dev: true
-
-  registry.npmmirror.com/uri-js/4.4.1:
-    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz}
-    name: uri-js
-    version: 4.4.1
-    dependencies:
-      punycode: registry.npmmirror.com/punycode/2.3.0
-    dev: true
-
-  registry.npmmirror.com/urix/0.1.0:
-    resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz}
-    name: urix
-    version: 0.1.0
-    deprecated: Please see https://github.com/lydell/urix#deprecated
-    dev: true
-
-  registry.npmmirror.com/url-join/4.0.1:
-    resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/url-join/-/url-join-4.0.1.tgz}
-    name: url-join
-    version: 4.0.1
-    dev: true
-
-  registry.npmmirror.com/url-parse/1.5.10:
-    resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz}
-    name: url-parse
-    version: 1.5.10
-    dependencies:
-      querystringify: registry.npmmirror.com/querystringify/2.2.0
-      requires-port: registry.npmmirror.com/requires-port/1.0.0
-    dev: true
-
-  registry.npmmirror.com/use/3.1.1:
-    resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/use/-/use-3.1.1.tgz}
-    name: use
-    version: 3.1.1
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/util-deprecate/1.0.2:
-    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz}
-    name: util-deprecate
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/utils-merge/1.0.1:
-    resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz}
-    name: utils-merge
-    version: 1.0.1
-    engines: {node: '>= 0.4.0'}
-    dev: true
-
-  registry.npmmirror.com/uuid/3.4.0:
-    resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz}
-    name: uuid
-    version: 3.4.0
-    deprecated: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/v8-compile-cache-lib/3.0.1:
-    resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz}
-    name: v8-compile-cache-lib
-    version: 3.0.1
-    dev: true
-
-  registry.npmmirror.com/v8-compile-cache/2.3.0:
-    resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz}
-    name: v8-compile-cache
-    version: 2.3.0
-    dev: true
-
-  registry.npmmirror.com/v8-to-istanbul/8.1.1:
-    resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz}
-    name: v8-to-istanbul
-    version: 8.1.1
-    engines: {node: '>=10.12.0'}
-    dependencies:
-      '@types/istanbul-lib-coverage': registry.npmmirror.com/@types/istanbul-lib-coverage/2.0.4
-      convert-source-map: registry.npmmirror.com/convert-source-map/1.9.0
-      source-map: 0.7.4
-    dev: true
-
-  registry.npmmirror.com/validate-npm-package-license/3.0.4:
-    resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz}
-    name: validate-npm-package-license
-    version: 3.0.4
-    dependencies:
-      spdx-correct: registry.npmmirror.com/spdx-correct/3.1.1
-      spdx-expression-parse: registry.npmmirror.com/spdx-expression-parse/3.0.1
-    dev: true
-
-  registry.npmmirror.com/vary/1.1.2:
-    resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz}
-    name: vary
-    version: 1.1.2
-    engines: {node: '>= 0.8'}
-    dev: true
-
-  registry.npmmirror.com/vditor/3.9.0:
-    resolution: {integrity: sha512-CLLtrexUY/LGN1Lp1iu242Uq9GuNP98UTXFRY9hjTNFkpVH9L4M3jrQ9yIZ711zYwsl78GxKeskuU7WieA96ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vditor/-/vditor-3.9.0.tgz}
-    name: vditor
-    version: 3.9.0
-    dependencies:
-      diff-match-patch: registry.npmmirror.com/diff-match-patch/1.0.5
-    dev: false
-
-  registry.npmmirror.com/vite-plugin-compression/0.5.1_vite@3.2.5:
-    resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz}
-    id: registry.npmmirror.com/vite-plugin-compression/0.5.1
-    name: vite-plugin-compression
-    version: 0.5.1
-    peerDependencies:
-      vite: '>=2.0.0'
-    dependencies:
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      debug: registry.npmmirror.com/debug/4.3.4
-      fs-extra: registry.npmmirror.com/fs-extra/10.1.0
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-html/3.2.0_vite@3.2.5:
-    resolution: {integrity: sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-html/-/vite-plugin-html-3.2.0.tgz}
-    id: registry.npmmirror.com/vite-plugin-html/3.2.0
-    name: vite-plugin-html
-    version: 3.2.0
-    peerDependencies:
-      vite: '>=2.0.0'
-    dependencies:
-      '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/4.2.1
-      colorette: registry.npmmirror.com/colorette/2.0.19
-      connect-history-api-fallback: registry.npmmirror.com/connect-history-api-fallback/1.6.0
-      consola: registry.npmmirror.com/consola/2.15.3
-      dotenv: registry.npmmirror.com/dotenv/16.0.3
-      dotenv-expand: registry.npmmirror.com/dotenv-expand/8.0.3
-      ejs: registry.npmmirror.com/ejs/3.1.8
-      fast-glob: registry.npmmirror.com/fast-glob/3.2.12
-      fs-extra: registry.npmmirror.com/fs-extra/10.1.0
-      html-minifier-terser: registry.npmmirror.com/html-minifier-terser/6.1.0
-      node-html-parser: registry.npmmirror.com/node-html-parser/5.4.2
-      pathe: registry.npmmirror.com/pathe/0.2.0
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-imagemin/0.6.1_vite@3.2.5:
-    resolution: {integrity: sha512-cP7LDn8euPrji7WYtDoNQpJEB9nkMxJHm/A+QZnvMrrCSuyo/clpMy/T1v7suDXPBavsDiDdFdVQB5p7VGD2cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-imagemin/-/vite-plugin-imagemin-0.6.1.tgz}
-    id: registry.npmmirror.com/vite-plugin-imagemin/0.6.1
-    name: vite-plugin-imagemin
-    version: 0.6.1
-    peerDependencies:
-      vite: '>=2.0.0'
-    dependencies:
-      '@types/imagemin': registry.npmmirror.com/@types/imagemin/7.0.1
-      '@types/imagemin-gifsicle': registry.npmmirror.com/@types/imagemin-gifsicle/7.0.1
-      '@types/imagemin-jpegtran': registry.npmmirror.com/@types/imagemin-jpegtran/5.0.1
-      '@types/imagemin-mozjpeg': registry.npmmirror.com/@types/imagemin-mozjpeg/8.0.1
-      '@types/imagemin-optipng': registry.npmmirror.com/@types/imagemin-optipng/5.2.1
-      '@types/imagemin-svgo': registry.npmmirror.com/@types/imagemin-svgo/10.0.2
-      '@types/imagemin-webp': registry.npmmirror.com/@types/imagemin-webp/7.0.0
-      '@types/svgo': registry.npmmirror.com/@types/svgo/2.6.4
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      debug: registry.npmmirror.com/debug/4.3.4
-      esbuild: registry.npmmirror.com/esbuild/0.14.54
-      fs-extra: registry.npmmirror.com/fs-extra/10.1.0
-      gifsicle: registry.npmmirror.com/gifsicle/5.2.0
-      imagemin: registry.npmmirror.com/imagemin/7.0.1
-      imagemin-gifsicle: registry.npmmirror.com/imagemin-gifsicle/7.0.0
-      imagemin-jpegtran: registry.npmmirror.com/imagemin-jpegtran/7.0.0
-      imagemin-mozjpeg: registry.npmmirror.com/imagemin-mozjpeg/9.0.0
-      imagemin-optipng: registry.npmmirror.com/imagemin-optipng/8.0.0
-      imagemin-pngquant: registry.npmmirror.com/imagemin-pngquant/9.0.2
-      imagemin-svgo: registry.npmmirror.com/imagemin-svgo/9.0.0
-      imagemin-webp: registry.npmmirror.com/imagemin-webp/6.1.0
-      jpegtran-bin: registry.npmmirror.com/jpegtran-bin/6.0.1
-      pathe: registry.npmmirror.com/pathe/0.2.0
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-mkcert/1.13.3_vite@3.2.5:
-    resolution: {integrity: sha512-cuAbOb6bHyTMhha9YimL6ZB/WoCcFy8d3uaf5n5Ovgybix1yvEu3pxARy2HjC5LJIS1qq6fFXG0+oj6/XMUapA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-mkcert/-/vite-plugin-mkcert-1.13.3.tgz}
-    id: registry.npmmirror.com/vite-plugin-mkcert/1.13.3
-    name: vite-plugin-mkcert
-    version: 1.13.3
-    engines: {node: '>=v16.7.0'}
-    peerDependencies:
-      vite: '>=3'
-    dependencies:
-      '@octokit/rest': registry.npmmirror.com/@octokit/rest/19.0.7
-      axios: registry.npmmirror.com/axios/1.3.4_debug@4.3.4
-      debug: registry.npmmirror.com/debug/4.3.4
-      picocolors: registry.npmmirror.com/picocolors/1.0.0
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    transitivePeerDependencies:
-      - encoding
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-mock/2.9.6_umj7dnwtpamrulvvz5fh6e7doq:
-    resolution: {integrity: sha512-/Rm59oPppe/ncbkSrUuAxIQihlI2YcBmnbR4ST1RA2VzM1C0tEQc1KlbQvnUGhXECAGTaQN2JyasiwXP6EtKgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-mock/-/vite-plugin-mock-2.9.6.tgz}
-    id: registry.npmmirror.com/vite-plugin-mock/2.9.6
-    name: vite-plugin-mock
-    version: 2.9.6
-    engines: {node: '>=12.0.0'}
-    peerDependencies:
-      mockjs: '>=1.1.0'
-      vite: '>=2.0.0'
-    dependencies:
-      '@rollup/plugin-node-resolve': registry.npmmirror.com/@rollup/plugin-node-resolve/13.3.0_rollup@2.79.1
-      '@types/mockjs': registry.npmmirror.com/@types/mockjs/1.0.7
-      chalk: registry.npmmirror.com/chalk/4.1.2
-      chokidar: registry.npmmirror.com/chokidar/3.5.3
-      connect: registry.npmmirror.com/connect/3.7.0
-      debug: registry.npmmirror.com/debug/4.3.4
-      esbuild: registry.npmmirror.com/esbuild/0.11.3
-      fast-glob: registry.npmmirror.com/fast-glob/3.2.12
-      mockjs: registry.npmmirror.com/mockjs/1.1.0
-      path-to-regexp: registry.npmmirror.com/path-to-regexp/6.2.1
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    transitivePeerDependencies:
-      - rollup
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-optimize-persist/0.1.2_hixcczfrsvi4wedfdfr7z5co24:
-    resolution: {integrity: sha512-H/Ebn2kZO8PvwUF08SsT5K5xMJNCWKoGX71+e9/ER3yNj7GHiFjNQlvGg5ih/zEx09MZ9m7WCxOwmEKbeIVzww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-optimize-persist/-/vite-plugin-optimize-persist-0.1.2.tgz}
-    id: registry.npmmirror.com/vite-plugin-optimize-persist/0.1.2
-    name: vite-plugin-optimize-persist
-    version: 0.1.2
-    peerDependencies:
-      vite: ^2.0.0
-      vite-plugin-package-config: ^0.1.0
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4
-      fs-extra: registry.npmmirror.com/fs-extra/10.1.0
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-      vite-plugin-package-config: registry.npmmirror.com/vite-plugin-package-config/0.1.1_vite@3.2.5
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-package-config/0.1.1_vite@3.2.5:
-    resolution: {integrity: sha512-w9B3I8ZnqoyhlbzimXjXNk85imrMZgvI9m8f6j3zonK5IVA5KXzpT+PZOHlDz8lqh1vqvoEI1uhy+ZDoLAiA/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-package-config/-/vite-plugin-package-config-0.1.1.tgz}
-    id: registry.npmmirror.com/vite-plugin-package-config/0.1.1
-    name: vite-plugin-package-config
-    version: 0.1.1
-    peerDependencies:
-      vite: ^2.0.0
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-purge-icons/0.8.2_vite@3.2.5:
-    resolution: {integrity: sha512-rW3RcNKj7QY3M7wcnwYVc3Ig+WwSQQ/Z67v+xdtk/8MA+ON05A3zc3qGaPdi6+8BUKYDpqvviKYiuLgRjleUOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-purge-icons/-/vite-plugin-purge-icons-0.8.2.tgz}
-    id: registry.npmmirror.com/vite-plugin-purge-icons/0.8.2
-    name: vite-plugin-purge-icons
-    version: 0.8.2
-    engines: {node: '>= 12'}
-    peerDependencies:
-      vite: ^2.0.0-beta.3 || ^3.0.0
-    dependencies:
-      '@purge-icons/core': registry.npmmirror.com/@purge-icons/core/0.8.0
-      '@purge-icons/generated': registry.npmmirror.com/@purge-icons/generated/0.8.1
-      rollup-plugin-purge-icons: registry.npmmirror.com/rollup-plugin-purge-icons/0.8.1
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    transitivePeerDependencies:
-      - encoding
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-pwa/0.12.8_vite@3.2.5:
-    resolution: {integrity: sha512-pSiFHmnJGMQJJL8aJzQ8SaraZBSBPMGvGUkCNzheIq9UQCEk/eP3UmANNmS9eupuhIpTK8AdxTOHcaMcAqAbCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-pwa/-/vite-plugin-pwa-0.12.8.tgz}
-    id: registry.npmmirror.com/vite-plugin-pwa/0.12.8
-    name: vite-plugin-pwa
-    version: 0.12.8
-    peerDependencies:
-      vite: ^2.0.0 || ^3.0.0-0
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4
-      fast-glob: registry.npmmirror.com/fast-glob/3.2.12
-      pretty-bytes: registry.npmmirror.com/pretty-bytes/6.1.0
-      rollup: registry.npmmirror.com/rollup/2.79.1
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-      workbox-build: registry.npmmirror.com/workbox-build/6.5.4
-      workbox-window: registry.npmmirror.com/workbox-window/6.5.4
-    transitivePeerDependencies:
-      - '@types/babel__core'
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-style-import/2.0.0_vite@3.2.5:
-    resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-style-import/-/vite-plugin-style-import-2.0.0.tgz}
-    id: registry.npmmirror.com/vite-plugin-style-import/2.0.0
-    name: vite-plugin-style-import
-    version: 2.0.0
-    peerDependencies:
-      vite: '>=2.0.0'
-    dependencies:
-      '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/4.2.1
-      change-case: registry.npmmirror.com/change-case/4.1.2
-      console: registry.npmmirror.com/console/0.7.2
-      es-module-lexer: registry.npmmirror.com/es-module-lexer/0.9.3
-      fs-extra: registry.npmmirror.com/fs-extra/10.1.0
-      magic-string: registry.npmmirror.com/magic-string/0.25.9
-      pathe: registry.npmmirror.com/pathe/0.2.0
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-svg-icons/2.0.1_vite@3.2.5:
-    resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-svg-icons/-/vite-plugin-svg-icons-2.0.1.tgz}
-    id: registry.npmmirror.com/vite-plugin-svg-icons/2.0.1
-    name: vite-plugin-svg-icons
-    version: 2.0.1
-    peerDependencies:
-      vite: '>=2.0.0'
-    dependencies:
-      '@types/svgo': registry.npmmirror.com/@types/svgo/2.6.4
-      cors: registry.npmmirror.com/cors/2.8.5
-      debug: registry.npmmirror.com/debug/4.3.4
-      etag: registry.npmmirror.com/etag/1.8.1
-      fs-extra: registry.npmmirror.com/fs-extra/10.1.0
-      pathe: registry.npmmirror.com/pathe/0.2.0
-      svg-baker: registry.npmmirror.com/svg-baker/1.7.0
-      svgo: registry.npmmirror.com/svgo/2.8.0
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-vue-setup-extend/0.4.0_vite@3.2.5:
-    resolution: {integrity: sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz}
-    id: registry.npmmirror.com/vite-plugin-vue-setup-extend/0.4.0
-    name: vite-plugin-vue-setup-extend
-    version: 0.4.0
-    peerDependencies:
-      vite: '>=2.0.0'
-    dependencies:
-      '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.47
-      magic-string: registry.npmmirror.com/magic-string/0.25.9
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-    dev: true
-
-  registry.npmmirror.com/vite-plugin-windicss/1.8.10_vite@3.2.5:
-    resolution: {integrity: sha512-scywsuzo46lcTBohspmF0WiwhWEte6p+OUVrX4yr7VMRvLHMHVfLtJReyD5pppjijG7YOwVsZn7XBWWZtF658Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-windicss/-/vite-plugin-windicss-1.8.10.tgz}
-    id: registry.npmmirror.com/vite-plugin-windicss/1.8.10
-    name: vite-plugin-windicss
-    version: 1.8.10
-    peerDependencies:
-      vite: ^2.0.1 || ^3.0.0 || ^4.0.0
-    dependencies:
-      '@windicss/plugin-utils': registry.npmmirror.com/@windicss/plugin-utils/1.8.10
-      debug: registry.npmmirror.com/debug/4.3.4
-      kolorist: registry.npmmirror.com/kolorist/1.7.0
-      vite: registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m
-      windicss: registry.npmmirror.com/windicss/3.5.6
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vite/3.2.5_uakuilq6iygkg5ll5cv37w4i7m:
-    resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/-/vite-3.2.5.tgz}
-    id: registry.npmmirror.com/vite/3.2.5
-    name: vite
-    version: 3.2.5
-    engines: {node: ^14.18.0 || >=16.0.0}
-    hasBin: true
-    peerDependencies:
-      '@types/node': '>= 14'
-      less: '*'
-      sass: '*'
-      stylus: '*'
-      sugarss: '*'
-      terser: ^5.4.0
-    peerDependenciesMeta:
-      '@types/node':
-        optional: true
-      less:
-        optional: true
-      sass:
-        optional: true
-      stylus:
-        optional: true
-      sugarss:
-        optional: true
-      terser:
-        optional: true
-    dependencies:
-      '@types/node': registry.npmmirror.com/@types/node/17.0.45
-      esbuild: registry.npmmirror.com/esbuild/0.15.18
-      less: registry.npmmirror.com/less/4.1.3
-      postcss: registry.npmmirror.com/postcss/8.4.21
-      resolve: registry.npmmirror.com/resolve/1.22.1
-      rollup: registry.npmmirror.com/rollup/2.79.1
-    optionalDependencies:
-      fsevents: 2.3.2
-    dev: true
-
-  registry.npmmirror.com/vscode-jsonrpc/8.1.0:
-    resolution: {integrity: sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz}
-    name: vscode-jsonrpc
-    version: 8.1.0
-    engines: {node: '>=14.0.0'}
-    dev: true
-
-  registry.npmmirror.com/vscode-languageserver-textdocument/1.0.8:
-    resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz}
-    name: vscode-languageserver-textdocument
-    version: 1.0.8
-    dev: true
-
-  registry.npmmirror.com/vscode-languageserver-types/3.17.3:
-    resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz}
-    name: vscode-languageserver-types
-    version: 3.17.3
-    dev: true
-
-  registry.npmmirror.com/vscode-uri/3.0.7:
-    resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.0.7.tgz}
-    name: vscode-uri
-    version: 3.0.7
-    dev: true
-
-  registry.npmmirror.com/vue-cropper/0.5.8:
-    resolution: {integrity: sha512-Xgi/aLQCcNCiBTUdovy/i4LWx0G7fQnAENBpDWA3J4i87Zlk9DJRksXrClsQ6nnaFRfQVkMimij5GEvAMaXdYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-cropper/-/vue-cropper-0.5.8.tgz}
-    name: vue-cropper
-    version: 0.5.8
-    dev: false
-
-  registry.npmmirror.com/vue-cropperjs/5.0.0_vue@3.2.47:
-    resolution: {integrity: sha512-RhnC8O33uRZNkn74aiHZwNHnBJOXWlS4P6gsRI0lw4cZlWjKSCywZI9oSI9POlIPI6OYv30jvnHMXGch85tw7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-cropperjs/-/vue-cropperjs-5.0.0.tgz}
-    id: registry.npmmirror.com/vue-cropperjs/5.0.0
-    name: vue-cropperjs
-    version: 5.0.0
-    peerDependencies:
-      vue: '>=3.0.0'
-    dependencies:
-      cropperjs: registry.npmmirror.com/cropperjs/1.5.13
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: false
-
-  registry.npmmirror.com/vue-demi/0.13.11_vue@3.2.47:
-    resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz}
-    id: registry.npmmirror.com/vue-demi/0.13.11
-    name: vue-demi
-    version: 0.13.11
-    engines: {node: '>=12'}
-    hasBin: true
-    requiresBuild: true
-    peerDependencies:
-      '@vue/composition-api': ^1.0.0-rc.1
-      vue: ^3.0.0-0 || ^2.6.0
-    peerDependenciesMeta:
-      '@vue/composition-api':
-        optional: true
-    dependencies:
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: false
-
-  registry.npmmirror.com/vue-eslint-parser/8.3.0_eslint@8.35.0:
-    resolution: {integrity: sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz}
-    id: registry.npmmirror.com/vue-eslint-parser/8.3.0
-    name: vue-eslint-parser
-    version: 8.3.0
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: '>=6.0.0'
-    dependencies:
-      debug: registry.npmmirror.com/debug/4.3.4
-      eslint: registry.npmmirror.com/eslint/8.35.0
-      eslint-scope: registry.npmmirror.com/eslint-scope/7.1.1
-      eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys/3.3.0
-      espree: registry.npmmirror.com/espree/9.4.1
-      esquery: registry.npmmirror.com/esquery/1.5.0
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      semver: registry.npmmirror.com/semver/7.3.8
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/vue-i18n/9.2.2_vue@3.2.47:
-    resolution: {integrity: sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.2.2.tgz}
-    id: registry.npmmirror.com/vue-i18n/9.2.2
-    name: vue-i18n
-    version: 9.2.2
-    engines: {node: '>= 14'}
-    peerDependencies:
-      vue: ^3.0.0
-    dependencies:
-      '@intlify/core-base': registry.npmmirror.com/@intlify/core-base/9.2.2
-      '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.2.2
-      '@intlify/vue-devtools': registry.npmmirror.com/@intlify/vue-devtools/9.2.2
-      '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.5.0
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: false
-
-  registry.npmmirror.com/vue-infinite-scroll/2.0.2:
-    resolution: {integrity: sha512-n+YghR059YmciANGJh9SsNWRi1YZEBVlODtmnb/12zI+4R72QZSWd+EuZ5mW6auEo/yaJXgxzwsuhvALVnm73A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-infinite-scroll/-/vue-infinite-scroll-2.0.2.tgz}
-    name: vue-infinite-scroll
-    version: 2.0.2
-    dev: false
-
-  registry.npmmirror.com/vue-json-pretty/2.2.3_vue@3.2.47:
-    resolution: {integrity: sha512-tJo+4eFclQBt3gJ6EELXNdvo50wDKTZYthwmLpy9YS7UDldeJln5ff+IpdmUglfk+FqLVOX/re0+Ni/EOUPZgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-json-pretty/-/vue-json-pretty-2.2.3.tgz}
-    id: registry.npmmirror.com/vue-json-pretty/2.2.3
-    name: vue-json-pretty
-    version: 2.2.3
-    engines: {node: '>= 10.0.0', npm: '>= 5.0.0'}
-    peerDependencies:
-      vue: '>=3.0.0'
-    dependencies:
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: false
-
-  registry.npmmirror.com/vue-observe-visibility/0.4.6:
-    resolution: {integrity: sha512-xo0CEVdkjSjhJoDdLSvoZoQrw/H2BlzB5jrCBKGZNXN2zdZgMuZ9BKrxXDjNP2AxlcCoKc8OahI3F3r3JGLv2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-observe-visibility/-/vue-observe-visibility-0.4.6.tgz}
-    name: vue-observe-visibility
-    version: 0.4.6
-    dev: false
-
-  registry.npmmirror.com/vue-print-nb-jeecg/1.0.11:
-    resolution: {integrity: sha512-oKmXayXokyvm75p5RM+hJes/6NXsBJyeIx9sFjSKgnRxfyscFraFfAj9byb/sy4/P4Pn9FtawqWc5rkgiKHWVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-print-nb-jeecg/-/vue-print-nb-jeecg-1.0.11.tgz}
-    name: vue-print-nb-jeecg
-    version: 1.0.11
-    dependencies:
-      babel-plugin-transform-runtime: registry.npmmirror.com/babel-plugin-transform-runtime/6.23.0
-    dev: false
-
-  registry.npmmirror.com/vue-resize/0.4.5_vue@3.2.47:
-    resolution: {integrity: sha512-bhP7MlgJQ8TIkZJXAfDf78uJO+mEI3CaLABLjv0WNzr4CcGRGPIAItyWYnP6LsPA4Oq0WE+suidNs6dgpO4RHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-resize/-/vue-resize-0.4.5.tgz}
-    id: registry.npmmirror.com/vue-resize/0.4.5
-    name: vue-resize
-    version: 0.4.5
-    peerDependencies:
-      vue: ^2.3.0
-    dependencies:
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: false
-
-  registry.npmmirror.com/vue-router/4.1.6_vue@3.2.47:
-    resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-router/-/vue-router-4.1.6.tgz}
-    id: registry.npmmirror.com/vue-router/4.1.6
-    name: vue-router
-    version: 4.1.6
-    peerDependencies:
-      vue: ^3.2.0
-    dependencies:
-      '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.5.0
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: false
-
-  registry.npmmirror.com/vue-tsc/0.33.9_typescript@4.9.5:
-    resolution: {integrity: sha512-s/+r4JNsCh4e3MUdsYrjEA8IgPPDzHL5kEah/OznxIHd1XMlYiIkXGdiyU6JE5J+lzXNOKdOlNliqwwpeETQWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-tsc/-/vue-tsc-0.33.9.tgz}
-    id: registry.npmmirror.com/vue-tsc/0.33.9
-    name: vue-tsc
-    version: 0.33.9
-    hasBin: true
-    peerDependencies:
-      typescript: '*'
-    dependencies:
-      '@volar/vue-typescript': registry.npmmirror.com/@volar/vue-typescript/0.33.9
-      typescript: registry.npmmirror.com/typescript/4.9.5
-    dev: true
-
-  registry.npmmirror.com/vue-types/3.0.2_vue@3.2.47:
-    resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz}
-    id: registry.npmmirror.com/vue-types/3.0.2
-    name: vue-types
-    version: 3.0.2
-    engines: {node: '>=10.15.0'}
-    peerDependencies:
-      vue: ^3.0.0
-    dependencies:
-      is-plain-object: registry.npmmirror.com/is-plain-object/3.0.1
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: false
-
-  registry.npmmirror.com/vue-types/4.2.1_vue@3.2.47:
-    resolution: {integrity: sha512-DNQZmJuOvovLUIp0BENRkdnZHbI0V4e2mNvjAZOAXKD56YGvRchtUYOXA/XqTxdv7Ng5SJLZqRKRpAhm5NLaPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-types/-/vue-types-4.2.1.tgz}
-    id: registry.npmmirror.com/vue-types/4.2.1
-    name: vue-types
-    version: 4.2.1
-    engines: {node: '>=12.16.0'}
-    peerDependencies:
-      vue: ^2.0.0 || ^3.0.0
-    dependencies:
-      is-plain-object: registry.npmmirror.com/is-plain-object/5.0.0
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: false
-
-  registry.npmmirror.com/vue-virtual-scroller/1.1.2_vue@3.2.47:
-    resolution: {integrity: sha512-SkUyc7QHCJFB5h1Fya7LxVizlVzOZZuFVipBGHYoTK8dwLs08bIz/tclvRApYhksaJIm/nn51inzO2UjpGJPMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-virtual-scroller/-/vue-virtual-scroller-1.1.2.tgz}
-    id: registry.npmmirror.com/vue-virtual-scroller/1.1.2
-    name: vue-virtual-scroller
-    version: 1.1.2
-    peerDependencies:
-      vue: ^2.6.11
-    dependencies:
-      scrollparent: registry.npmmirror.com/scrollparent/2.0.1
-      vue: registry.npmmirror.com/vue/3.2.47
-      vue-observe-visibility: registry.npmmirror.com/vue-observe-visibility/0.4.6
-      vue-resize: registry.npmmirror.com/vue-resize/0.4.5_vue@3.2.47
-    dev: false
-
-  registry.npmmirror.com/vue/3.2.47:
-    resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz}
-    name: vue
-    version: 3.2.47
-    dependencies:
-      '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.47
-      '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.47
-      '@vue/runtime-dom': registry.npmmirror.com/@vue/runtime-dom/3.2.47
-      '@vue/server-renderer': registry.npmmirror.com/@vue/server-renderer/3.2.47_vue@3.2.47
-      '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.47
-
-  registry.npmmirror.com/vuedraggable/4.1.0_vue@3.2.47:
-    resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vuedraggable/-/vuedraggable-4.1.0.tgz}
-    id: registry.npmmirror.com/vuedraggable/4.1.0
-    name: vuedraggable
-    version: 4.1.0
-    peerDependencies:
-      vue: ^3.0.1
-    dependencies:
-      sortablejs: registry.npmmirror.com/sortablejs/1.14.0
-      vue: registry.npmmirror.com/vue/3.2.47
-    dev: false
-
-  registry.npmmirror.com/vxe-table-plugin-antd/3.0.5_vxe-table@4.1.0:
-    resolution: {integrity: sha512-qZXIxNKSqdvfVncvVopId7byy9FYUW+ygX4vwUhPceHwsUq0eyX5SVX/LLafqfsnkq4l8+EZ4zQ5/xQ6AfZ31Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vxe-table-plugin-antd/-/vxe-table-plugin-antd-3.0.5.tgz}
-    id: registry.npmmirror.com/vxe-table-plugin-antd/3.0.5
-    name: vxe-table-plugin-antd
-    version: 3.0.5
-    peerDependencies:
-      vxe-table: ^4.0.30
-    dependencies:
-      vxe-table: registry.npmmirror.com/vxe-table/4.1.0_vue@3.2.47+xe-utils@3.5.7
-    dev: false
-
-  registry.npmmirror.com/vxe-table/4.1.0_vue@3.2.47+xe-utils@3.5.7:
-    resolution: {integrity: sha512-FX4nc4ckkQGWG/W94z97KBIGrfZsbcni3pm+4uMzNQUcEgxgchnY78/4PrRC4ZRsHJIMv4mtNrzdfJDCTfA65g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vxe-table/-/vxe-table-4.1.0.tgz}
-    id: registry.npmmirror.com/vxe-table/4.1.0
-    name: vxe-table
-    version: 4.1.0
-    peerDependencies:
-      vue: ^3.2.2
-      xe-utils: ^3.2.0
-    dependencies:
-      vue: registry.npmmirror.com/vue/3.2.47
-      xe-utils: registry.npmmirror.com/xe-utils/3.5.7
-    dev: false
-
-  registry.npmmirror.com/w3c-hr-time/1.0.2:
-    resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz}
-    name: w3c-hr-time
-    version: 1.0.2
-    dependencies:
-      browser-process-hrtime: registry.npmmirror.com/browser-process-hrtime/1.0.0
-    dev: true
-
-  registry.npmmirror.com/w3c-xmlserializer/2.0.0:
-    resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz}
-    name: w3c-xmlserializer
-    version: 2.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      xml-name-validator: registry.npmmirror.com/xml-name-validator/3.0.0
-    dev: true
-
-  registry.npmmirror.com/walker/1.0.8:
-    resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz}
-    name: walker
-    version: 1.0.8
-    dependencies:
-      makeerror: registry.npmmirror.com/makeerror/1.0.12
-    dev: true
-
-  registry.npmmirror.com/warning/4.0.3:
-    resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz}
-    name: warning
-    version: 4.0.3
-    dependencies:
-      loose-envify: registry.npmmirror.com/loose-envify/1.4.0
-    dev: false
-
-  registry.npmmirror.com/wcwidth/1.0.1:
-    resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz}
-    name: wcwidth
-    version: 1.0.1
-    dependencies:
-      defaults: registry.npmmirror.com/defaults/1.0.4
-    dev: true
-
-  registry.npmmirror.com/webidl-conversions/3.0.1:
-    resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz}
-    name: webidl-conversions
-    version: 3.0.1
-    dev: true
-
-  registry.npmmirror.com/webidl-conversions/4.0.2:
-    resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz}
-    name: webidl-conversions
-    version: 4.0.2
-    dev: true
-
-  registry.npmmirror.com/webidl-conversions/5.0.0:
-    resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz}
-    name: webidl-conversions
-    version: 5.0.0
-    engines: {node: '>=8'}
-    dev: true
-
-  registry.npmmirror.com/webidl-conversions/6.1.0:
-    resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz}
-    name: webidl-conversions
-    version: 6.1.0
-    engines: {node: '>=10.4'}
-    dev: true
-
-  registry.npmmirror.com/whatwg-encoding/1.0.5:
-    resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz}
-    name: whatwg-encoding
-    version: 1.0.5
-    dependencies:
-      iconv-lite: registry.npmmirror.com/iconv-lite/0.4.24
-    dev: true
-
-  registry.npmmirror.com/whatwg-encoding/2.0.0:
-    resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz}
-    name: whatwg-encoding
-    version: 2.0.0
-    engines: {node: '>=12'}
-    dependencies:
-      iconv-lite: registry.npmmirror.com/iconv-lite/0.6.3
-    dev: true
-
-  registry.npmmirror.com/whatwg-mimetype/2.3.0:
-    resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz}
-    name: whatwg-mimetype
-    version: 2.3.0
-    dev: true
-
-  registry.npmmirror.com/whatwg-url/5.0.0:
-    resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz}
-    name: whatwg-url
-    version: 5.0.0
-    dependencies:
-      tr46: registry.npmmirror.com/tr46/0.0.3
-      webidl-conversions: registry.npmmirror.com/webidl-conversions/3.0.1
-    dev: true
-
-  registry.npmmirror.com/whatwg-url/7.1.0:
-    resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-7.1.0.tgz}
-    name: whatwg-url
-    version: 7.1.0
-    dependencies:
-      lodash.sortby: registry.npmmirror.com/lodash.sortby/4.7.0
-      tr46: registry.npmmirror.com/tr46/1.0.1
-      webidl-conversions: registry.npmmirror.com/webidl-conversions/4.0.2
-    dev: true
-
-  registry.npmmirror.com/whatwg-url/8.7.0:
-    resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-8.7.0.tgz}
-    name: whatwg-url
-    version: 8.7.0
-    engines: {node: '>=10'}
-    dependencies:
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      tr46: registry.npmmirror.com/tr46/2.1.0
-      webidl-conversions: registry.npmmirror.com/webidl-conversions/6.1.0
-    dev: true
-
-  registry.npmmirror.com/which-boxed-primitive/1.0.2:
-    resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz}
-    name: which-boxed-primitive
-    version: 1.0.2
-    dependencies:
-      is-bigint: registry.npmmirror.com/is-bigint/1.0.4
-      is-boolean-object: registry.npmmirror.com/is-boolean-object/1.1.2
-      is-number-object: registry.npmmirror.com/is-number-object/1.0.7
-      is-string: registry.npmmirror.com/is-string/1.0.7
-      is-symbol: registry.npmmirror.com/is-symbol/1.0.4
-    dev: true
-
-  registry.npmmirror.com/which-module/2.0.0:
-    resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz}
-    name: which-module
-    version: 2.0.0
-    dev: false
-
-  registry.npmmirror.com/which-typed-array/1.1.9:
-    resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.9.tgz}
-    name: which-typed-array
-    version: 1.1.9
-    engines: {node: '>= 0.4'}
-    dependencies:
-      available-typed-arrays: registry.npmmirror.com/available-typed-arrays/1.0.5
-      call-bind: registry.npmmirror.com/call-bind/1.0.2
-      for-each: registry.npmmirror.com/for-each/0.3.3
-      gopd: registry.npmmirror.com/gopd/1.0.1
-      has-tostringtag: registry.npmmirror.com/has-tostringtag/1.0.0
-      is-typed-array: registry.npmmirror.com/is-typed-array/1.1.10
-    dev: true
-
-  registry.npmmirror.com/which/1.3.1:
-    resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which/-/which-1.3.1.tgz}
-    name: which
-    version: 1.3.1
-    hasBin: true
-    dependencies:
-      isexe: registry.npmmirror.com/isexe/2.0.0
-    dev: true
-
-  registry.npmmirror.com/which/2.0.2:
-    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which/-/which-2.0.2.tgz}
-    name: which
-    version: 2.0.2
-    engines: {node: '>= 8'}
-    hasBin: true
-    dependencies:
-      isexe: registry.npmmirror.com/isexe/2.0.0
-    dev: true
-
-  registry.npmmirror.com/windicss/3.5.6:
-    resolution: {integrity: sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/windicss/-/windicss-3.5.6.tgz}
-    name: windicss
-    version: 3.5.6
-    engines: {node: '>= 12'}
-    hasBin: true
-    dev: true
-
-  registry.npmmirror.com/word-wrap/1.2.3:
-    resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz}
-    name: word-wrap
-    version: 1.2.3
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  registry.npmmirror.com/wordwrap/1.0.0:
-    resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz}
-    name: wordwrap
-    version: 1.0.0
-    dev: true
-
-  registry.npmmirror.com/workbox-background-sync/6.5.4:
-    resolution: {integrity: sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz}
-    name: workbox-background-sync
-    version: 6.5.4
-    dependencies:
-      idb: registry.npmmirror.com/idb/7.1.1
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-broadcast-update/6.5.4:
-    resolution: {integrity: sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz}
-    name: workbox-broadcast-update
-    version: 6.5.4
-    dependencies:
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-build/6.5.4:
-    resolution: {integrity: sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-build/-/workbox-build-6.5.4.tgz}
-    name: workbox-build
-    version: 6.5.4
-    engines: {node: '>=10.0.0'}
-    dependencies:
-      '@apideck/better-ajv-errors': registry.npmmirror.com/@apideck/better-ajv-errors/0.3.6_ajv@8.12.0
-      '@babel/core': registry.npmmirror.com/@babel/core/7.21.0
-      '@babel/preset-env': registry.npmmirror.com/@babel/preset-env/7.20.2_@babel+core@7.21.0
-      '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.21.0
-      '@rollup/plugin-babel': registry.npmmirror.com/@rollup/plugin-babel/5.3.1_4tnfxcmsyr7y5qv3uwkivwqysm
-      '@rollup/plugin-node-resolve': registry.npmmirror.com/@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1
-      '@rollup/plugin-replace': registry.npmmirror.com/@rollup/plugin-replace/2.4.2_rollup@2.79.1
-      '@surma/rollup-plugin-off-main-thread': registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/2.2.3
-      ajv: registry.npmmirror.com/ajv/8.12.0
-      common-tags: registry.npmmirror.com/common-tags/1.8.2
-      fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0
-      fs-extra: registry.npmmirror.com/fs-extra/9.1.0
-      glob: registry.npmmirror.com/glob/7.2.3
-      lodash: registry.npmmirror.com/lodash/4.17.21
-      pretty-bytes: registry.npmmirror.com/pretty-bytes/5.6.0
-      rollup: registry.npmmirror.com/rollup/2.79.1
-      rollup-plugin-terser: registry.npmmirror.com/rollup-plugin-terser/7.0.2_rollup@2.79.1
-      source-map: 0.8.0-beta.0
-      stringify-object: registry.npmmirror.com/stringify-object/3.3.0
-      strip-comments: registry.npmmirror.com/strip-comments/2.0.1
-      tempy: registry.npmmirror.com/tempy/0.6.0
-      upath: registry.npmmirror.com/upath/1.2.0
-      workbox-background-sync: registry.npmmirror.com/workbox-background-sync/6.5.4
-      workbox-broadcast-update: registry.npmmirror.com/workbox-broadcast-update/6.5.4
-      workbox-cacheable-response: registry.npmmirror.com/workbox-cacheable-response/6.5.4
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-      workbox-expiration: registry.npmmirror.com/workbox-expiration/6.5.4
-      workbox-google-analytics: registry.npmmirror.com/workbox-google-analytics/6.5.4
-      workbox-navigation-preload: registry.npmmirror.com/workbox-navigation-preload/6.5.4
-      workbox-precaching: registry.npmmirror.com/workbox-precaching/6.5.4
-      workbox-range-requests: registry.npmmirror.com/workbox-range-requests/6.5.4
-      workbox-recipes: registry.npmmirror.com/workbox-recipes/6.5.4
-      workbox-routing: registry.npmmirror.com/workbox-routing/6.5.4
-      workbox-strategies: registry.npmmirror.com/workbox-strategies/6.5.4
-      workbox-streams: registry.npmmirror.com/workbox-streams/6.5.4
-      workbox-sw: registry.npmmirror.com/workbox-sw/6.5.4
-      workbox-window: registry.npmmirror.com/workbox-window/6.5.4
-    transitivePeerDependencies:
-      - '@types/babel__core'
-      - supports-color
-    dev: true
-
-  registry.npmmirror.com/workbox-cacheable-response/6.5.4:
-    resolution: {integrity: sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz}
-    name: workbox-cacheable-response
-    version: 6.5.4
-    dependencies:
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-core/6.5.4:
-    resolution: {integrity: sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-core/-/workbox-core-6.5.4.tgz}
-    name: workbox-core
-    version: 6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-expiration/6.5.4:
-    resolution: {integrity: sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz}
-    name: workbox-expiration
-    version: 6.5.4
-    dependencies:
-      idb: registry.npmmirror.com/idb/7.1.1
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-google-analytics/6.5.4:
-    resolution: {integrity: sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz}
-    name: workbox-google-analytics
-    version: 6.5.4
-    dependencies:
-      workbox-background-sync: registry.npmmirror.com/workbox-background-sync/6.5.4
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-      workbox-routing: registry.npmmirror.com/workbox-routing/6.5.4
-      workbox-strategies: registry.npmmirror.com/workbox-strategies/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-navigation-preload/6.5.4:
-    resolution: {integrity: sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz}
-    name: workbox-navigation-preload
-    version: 6.5.4
-    dependencies:
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-precaching/6.5.4:
-    resolution: {integrity: sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz}
-    name: workbox-precaching
-    version: 6.5.4
-    dependencies:
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-      workbox-routing: registry.npmmirror.com/workbox-routing/6.5.4
-      workbox-strategies: registry.npmmirror.com/workbox-strategies/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-range-requests/6.5.4:
-    resolution: {integrity: sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz}
-    name: workbox-range-requests
-    version: 6.5.4
-    dependencies:
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-recipes/6.5.4:
-    resolution: {integrity: sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz}
-    name: workbox-recipes
-    version: 6.5.4
-    dependencies:
-      workbox-cacheable-response: registry.npmmirror.com/workbox-cacheable-response/6.5.4
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-      workbox-expiration: registry.npmmirror.com/workbox-expiration/6.5.4
-      workbox-precaching: registry.npmmirror.com/workbox-precaching/6.5.4
-      workbox-routing: registry.npmmirror.com/workbox-routing/6.5.4
-      workbox-strategies: registry.npmmirror.com/workbox-strategies/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-routing/6.5.4:
-    resolution: {integrity: sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-routing/-/workbox-routing-6.5.4.tgz}
-    name: workbox-routing
-    version: 6.5.4
-    dependencies:
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-strategies/6.5.4:
-    resolution: {integrity: sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz}
-    name: workbox-strategies
-    version: 6.5.4
-    dependencies:
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-streams/6.5.4:
-    resolution: {integrity: sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-streams/-/workbox-streams-6.5.4.tgz}
-    name: workbox-streams
-    version: 6.5.4
-    dependencies:
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-      workbox-routing: registry.npmmirror.com/workbox-routing/6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-sw/6.5.4:
-    resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-sw/-/workbox-sw-6.5.4.tgz}
-    name: workbox-sw
-    version: 6.5.4
-    dev: true
-
-  registry.npmmirror.com/workbox-window/6.5.4:
-    resolution: {integrity: sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/workbox-window/-/workbox-window-6.5.4.tgz}
-    name: workbox-window
-    version: 6.5.4
-    dependencies:
-      '@types/trusted-types': registry.npmmirror.com/@types/trusted-types/2.0.3
-      workbox-core: registry.npmmirror.com/workbox-core/6.5.4
-    dev: true
-
-  registry.npmmirror.com/wrap-ansi/6.2.0:
-    resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz}
-    name: wrap-ansi
-    version: 6.2.0
-    engines: {node: '>=8'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-
-  registry.npmmirror.com/wrap-ansi/7.0.0:
-    resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz}
-    name: wrap-ansi
-    version: 7.0.0
-    engines: {node: '>=10'}
-    dependencies:
-      ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1
-    dev: true
-
-  registry.npmmirror.com/wrappy/1.0.2:
-    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz}
-    name: wrappy
-    version: 1.0.2
-    dev: true
-
-  registry.npmmirror.com/write-file-atomic/3.0.3:
-    resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz}
-    name: write-file-atomic
-    version: 3.0.3
-    dependencies:
-      imurmurhash: registry.npmmirror.com/imurmurhash/0.1.4
-      is-typedarray: registry.npmmirror.com/is-typedarray/1.0.0
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-      typedarray-to-buffer: registry.npmmirror.com/typedarray-to-buffer/3.1.5
-    dev: true
-
-  registry.npmmirror.com/write-file-atomic/4.0.2:
-    resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz}
-    name: write-file-atomic
-    version: 4.0.2
-    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
-    dependencies:
-      imurmurhash: registry.npmmirror.com/imurmurhash/0.1.4
-      signal-exit: registry.npmmirror.com/signal-exit/3.0.7
-    dev: true
-
-  registry.npmmirror.com/ws/7.5.9:
-    resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz}
-    name: ws
-    version: 7.5.9
-    engines: {node: '>=8.3.0'}
-    peerDependencies:
-      bufferutil: ^4.0.1
-      utf-8-validate: ^5.0.2
-    peerDependenciesMeta:
-      bufferutil:
-        optional: true
-      utf-8-validate:
-        optional: true
-    dev: true
-
-  registry.npmmirror.com/xe-utils/3.5.7:
-    resolution: {integrity: sha512-3H+fDBKBR2wLJgyA7k9C/w1Xljx6Maml5ukV0WDY06HjYyGs2FEz6XhcwRCLIDXX4pBP3Gu0nX9DbCeuuRA2Ew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xe-utils/-/xe-utils-3.5.7.tgz}
-    name: xe-utils
-    version: 3.5.7
-    dev: false
-
-  registry.npmmirror.com/xml-name-validator/3.0.0:
-    resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz}
-    name: xml-name-validator
-    version: 3.0.0
-    dev: true
-
-  registry.npmmirror.com/xmlchars/2.2.0:
-    resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz}
-    name: xmlchars
-    version: 2.2.0
-    dev: true
-
-  registry.npmmirror.com/xss/1.0.14:
-    resolution: {integrity: sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xss/-/xss-1.0.14.tgz}
-    name: xss
-    version: 1.0.14
-    engines: {node: '>= 0.10.0'}
-    hasBin: true
-    dependencies:
-      commander: registry.npmmirror.com/commander/2.20.3
-      cssfilter: registry.npmmirror.com/cssfilter/0.0.10
-    dev: false
-
-  registry.npmmirror.com/xtend/4.0.2:
-    resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz}
-    name: xtend
-    version: 4.0.2
-    engines: {node: '>=0.4'}
-    dev: true
-
-  registry.npmmirror.com/y18n/4.0.3:
-    resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz}
-    name: y18n
-    version: 4.0.3
-    dev: false
-
-  registry.npmmirror.com/y18n/5.0.8:
-    resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz}
-    name: y18n
-    version: 5.0.8
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/yallist/2.1.2:
-    resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz}
-    name: yallist
-    version: 2.1.2
-    dev: true
-
-  registry.npmmirror.com/yallist/3.1.1:
-    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz}
-    name: yallist
-    version: 3.1.1
-    dev: true
-
-  registry.npmmirror.com/yallist/4.0.0:
-    resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz}
-    name: yallist
-    version: 4.0.0
-    dev: true
-
-  registry.npmmirror.com/yaml/1.10.2:
-    resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz}
-    name: yaml
-    version: 1.10.2
-    engines: {node: '>= 6'}
-    dev: true
-
-  registry.npmmirror.com/yargs-parser/18.1.3:
-    resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz}
-    name: yargs-parser
-    version: 18.1.3
-    engines: {node: '>=6'}
-    dependencies:
-      camelcase: registry.npmmirror.com/camelcase/5.3.1
-      decamelize: registry.npmmirror.com/decamelize/1.2.0
-    dev: false
-
-  registry.npmmirror.com/yargs-parser/20.2.9:
-    resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz}
-    name: yargs-parser
-    version: 20.2.9
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/yargs-parser/21.1.1:
-    resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz}
-    name: yargs-parser
-    version: 21.1.1
-    engines: {node: '>=12'}
-    dev: true
-
-  registry.npmmirror.com/yargs/15.4.1:
-    resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz}
-    name: yargs
-    version: 15.4.1
-    engines: {node: '>=8'}
-    dependencies:
-      cliui: registry.npmmirror.com/cliui/6.0.0
-      decamelize: registry.npmmirror.com/decamelize/1.2.0
-      find-up: registry.npmmirror.com/find-up/4.1.0
-      get-caller-file: registry.npmmirror.com/get-caller-file/2.0.5
-      require-directory: registry.npmmirror.com/require-directory/2.1.1
-      require-main-filename: registry.npmmirror.com/require-main-filename/2.0.0
-      set-blocking: registry.npmmirror.com/set-blocking/2.0.0
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      which-module: registry.npmmirror.com/which-module/2.0.0
-      y18n: registry.npmmirror.com/y18n/4.0.3
-      yargs-parser: registry.npmmirror.com/yargs-parser/18.1.3
-    dev: false
-
-  registry.npmmirror.com/yargs/16.2.0:
-    resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz}
-    name: yargs
-    version: 16.2.0
-    engines: {node: '>=10'}
-    dependencies:
-      cliui: registry.npmmirror.com/cliui/7.0.4
-      escalade: registry.npmmirror.com/escalade/3.1.1
-      get-caller-file: registry.npmmirror.com/get-caller-file/2.0.5
-      require-directory: registry.npmmirror.com/require-directory/2.1.1
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      y18n: registry.npmmirror.com/y18n/5.0.8
-      yargs-parser: registry.npmmirror.com/yargs-parser/20.2.9
-    dev: true
-
-  registry.npmmirror.com/yargs/17.7.1:
-    resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yargs/-/yargs-17.7.1.tgz}
-    name: yargs
-    version: 17.7.1
-    engines: {node: '>=12'}
-    dependencies:
-      cliui: registry.npmmirror.com/cliui/8.0.1
-      escalade: registry.npmmirror.com/escalade/3.1.1
-      get-caller-file: registry.npmmirror.com/get-caller-file/2.0.5
-      require-directory: registry.npmmirror.com/require-directory/2.1.1
-      string-width: registry.npmmirror.com/string-width/4.2.3
-      y18n: registry.npmmirror.com/y18n/5.0.8
-      yargs-parser: registry.npmmirror.com/yargs-parser/21.1.1
-    dev: true
-
-  registry.npmmirror.com/yn/3.1.1:
-    resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz}
-    name: yn
-    version: 3.1.1
-    engines: {node: '>=6'}
-    dev: true
-
-  registry.npmmirror.com/yocto-queue/0.1.0:
-    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz}
-    name: yocto-queue
-    version: 0.1.0
-    engines: {node: '>=10'}
-    dev: true
-
-  registry.npmmirror.com/zrender/5.4.1:
-    resolution: {integrity: sha512-M4Z05BHWtajY2241EmMPHglDQAJ1UyHQcYsxDNzD9XLSkPDqMq4bB28v9Pb4mvHnVQ0GxyTklZ/69xCFP6RXBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/zrender/-/zrender-5.4.1.tgz}
-    name: zrender
-    version: 5.4.1
-    dependencies:
-      tslib: registry.npmmirror.com/tslib/2.3.0
-    dev: false
diff --git a/postcss.config.js b/postcss.config.js
deleted file mode 100644
index 90d9fff..0000000
--- a/postcss.config.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  plugins: {
-    autoprefixer: {},
-  },
-}
diff --git a/prettier.config.js b/prettier.config.js
deleted file mode 100644
index 5a049c1..0000000
--- a/prettier.config.js
+++ /dev/null
@@ -1,20 +0,0 @@
-module.exports = {
-	printWidth: 150,
-	tabWidth: 2,
-	useTabs: true,
-	semi: false, //璇彞鏈熬浣跨敤鍒嗗彿
-	vueIndentScriptAndStyle: true,
-	singleQuote: true, // 浣跨敤鍗曞紩鍙�
-	quoteProps: 'as-needed',
-	bracketSpacing: true,
-	trailingComma: 'es5',
-	jsxBracketSameLine: false,
-	jsxSingleQuote: false,
-	arrowParens: 'always',
-	insertPragma: false,
-	requirePragma: false,
-	proseWrap: 'never',
-	htmlWhitespaceSensitivity: 'strict',
-	endOfLine: 'auto',
-	rangeStart: 0,
-}
diff --git a/public/favicon.ico b/public/favicon.ico
deleted file mode 100644
index ddd5fb3..0000000
--- a/public/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/public/lanpu.png b/public/lanpu.png
deleted file mode 100644
index 81a1e13..0000000
--- a/public/lanpu.png
+++ /dev/null
Binary files differ
diff --git a/public/logo.png b/public/logo.png
deleted file mode 100644
index 81a1e13..0000000
--- a/public/logo.png
+++ /dev/null
Binary files differ
diff --git a/public/resource/img/lanpu.png b/public/resource/img/lanpu.png
deleted file mode 100644
index 81a1e13..0000000
--- a/public/resource/img/lanpu.png
+++ /dev/null
Binary files differ
diff --git a/public/resource/img/logo.png b/public/resource/img/logo.png
deleted file mode 100644
index 81a1e13..0000000
--- a/public/resource/img/logo.png
+++ /dev/null
Binary files differ
diff --git a/public/resource/img/logo_.png b/public/resource/img/logo_.png
deleted file mode 100644
index 8072ced..0000000
--- a/public/resource/img/logo_.png
+++ /dev/null
Binary files differ
diff --git a/public/resource/img/pwa-192x192.png b/public/resource/img/pwa-192x192.png
deleted file mode 100644
index 00fb815..0000000
--- a/public/resource/img/pwa-192x192.png
+++ /dev/null
Binary files differ
diff --git a/public/resource/img/pwa-512x512.png b/public/resource/img/pwa-512x512.png
deleted file mode 100644
index a417073..0000000
--- a/public/resource/img/pwa-512x512.png
+++ /dev/null
Binary files differ
diff --git a/public/resource/js/iconfont.js b/public/resource/js/iconfont.js
deleted file mode 100644
index dead26b..0000000
--- a/public/resource/js/iconfont.js
+++ /dev/null
@@ -1 +0,0 @@
-window._iconfont_svg_string_3814468='<svg><symbol id="icon-time1" viewBox="0 0 1024 1024"><path d="M512 64C264.96 64 64 264.96 64 512s200.96 448 448 448 448-200.96 448-448S759.04 64 512 64zM512 895.712c-211.584 0-383.712-172.16-383.712-383.712C128.288 300.416 300.416 128.288 512 128.288c211.552 0 383.712 172.128 383.712 383.712C895.712 723.552 723.552 895.712 512 895.712z"  ></path><path d="M671.968 512 512 512 512 288.064c0-17.76-14.24-32.128-32-32.128s-32 14.4-32 32.128L448 544c0 17.76 14.272 32 32 32l191.968 0c17.76 0 32.128-14.24 32.128-32S689.728 512 671.968 512z"  ></path></symbol><symbol id="icon-select2" viewBox="0 0 1024 1024"><path d="M768 160 256 160C204.8 160 160 204.8 160 256l0 512c0 51.2 44.8 96 96 96l512 0c51.2 0 96-44.8 96-96L864 256C864 204.8 819.2 160 768 160zM800 768c0 19.2-12.8 32-32 32L256 800c-19.2 0-32-12.8-32-32L224 256c0-19.2 12.8-32 32-32l512 0c19.2 0 32 12.8 32 32L800 768z"  ></path><path d="M448 672c-6.4 0-19.2 0-25.6-6.4l-128-128c-12.8-12.8-12.8-32 0-44.8s32-12.8 44.8 0L448 595.2l230.4-230.4c12.8-12.8 32-12.8 44.8 0s12.8 32 0 44.8l-256 256C467.2 672 454.4 672 448 672z"  ></path></symbol><symbol id="icon-department" viewBox="0 0 1024 1024"><path d="M926.592 922.688l-157.312 0c-18.432 0-33.344-21.056-33.344-46.976L735.936 745.6c0-25.984 14.912-46.976 33.344-46.976l157.312 0c18.432 0 33.408 20.992 33.408 46.976l0 130.048C960 901.632 945.088 922.688 926.592 922.688zM773.312 513.152l-224 0L549.312 624 512 624 512 513.152 249.472 513.152C171.008 513.216 174.848 566.976 174.848 624L138.688 624 138.688 569.28c0-49.472 39.552-94.144 88.448-94.208L512 474.688 512 400l37.312 0 0 74.688 260.16 0c48.896 0.064 74.624 25.152 74.688 74.688L884.16 624 848 624C847.936 550.272 835.712 513.216 773.312 513.152zM653.504 325.312 406.528 325.312c-24.256 0-43.84-21.824-43.84-48.768L362.688 150.08c0-26.944 19.648-48.768 43.84-48.768l246.976 0c24.256 0 43.968 21.824 43.968 48.768l0 126.464C697.472 303.488 677.824 325.312 653.504 325.312zM288 745.6l0 130.048c0 25.92-14.976 46.976-33.344 46.976L97.344 922.624C78.912 922.688 64 901.632 64 875.712L64 745.6c0-25.984 14.912-46.976 33.344-46.976l157.312 0C273.024 698.688 288 719.68 288 745.6zM433.344 698.688l157.312 0c18.432 0 33.344 20.992 33.344 46.976l0 130.048c0 25.92-14.912 46.976-33.344 46.976L433.344 922.688c-18.432 0-33.344-21.056-33.344-46.976L400 745.6C400 719.68 414.912 698.688 433.344 698.688z"  ></path></symbol><symbol id="icon-tipsdepartmentdown" viewBox="0 0 1025 1024"><path d="M211.451008 532.32448 509.990336 532.32448 509.990336 658.368 552.443008 658.368 552.443008 532.31936 807.169408 532.31936C878.11072 532.31936 892.079872 574.52288 892.079872 658.368L933.177408 658.368 933.177408 573.45792C938.679552 532.06464 909.579584 494.04416 868.18656 488.54208 861.563648 487.6608 854.849088 487.66592 848.226176 488.5472L552.40224 488.5472 552.40224 403.64224 509.949568 403.64224 509.949568 488.55232 185.978368 489.06176C129.103104 491.91488 84.673728 539.23776 85.40224 596.17408L85.40224 658.368 126.540544 658.368C126.540544 593.49952 122.296768 532.36544 211.451008 532.32448L211.451008 532.32448ZM390.014208 318.73152 670.890816 318.73152C699.960192 317.13152 722.284352 292.36224 720.85792 263.28256L720.85792 119.44896C722.279296 90.36928 699.955072 65.6 670.890816 64L390.014208 64C360.970304 65.61984 338.681728 90.38976 340.128576 119.44896L340.128576 263.28768C338.681728 292.34176 360.965248 317.11168 390.014208 318.73152L390.014208 318.73152ZM217.263872 723.2 38.405248 723.2C13.605056 728.1312-3.033664 751.56608 0.491712 776.60608L0.491712 924.5152C-3.013312 949.55008 13.615232 972.9696 38.405248 977.92128L217.263872 977.92128C242.058944 972.9696 258.697664 949.5552 255.218112 924.5152L255.218112 776.60608C258.723136 751.56096 242.06912 728.1312 217.263872 723.2L217.263872 723.2ZM601.314624 723.2 422.410112 723.2C397.594688 728.11136 380.950848 751.56096 384.49664 776.60608L384.49664 924.5152C380.991616 949.55008 397.62016 972.9696 422.410112 977.92128L601.314624 977.92128C626.104576 972.9696 642.728064 949.55008 639.228096 924.5152L639.228096 776.60608C642.748416 751.56608 626.114816 728.1312 601.314624 723.2L601.314624 723.2ZM1023.218112 776.60608C1026.743552 751.55584 1010.084416 728.11136 985.263872 723.2L806.405248 723.2C781.605056 728.1312 764.966336 751.56608 768.491712 776.60608L768.491712 924.5152C764.986688 949.55008 781.615232 972.9696 806.405248 977.92128L985.263872 977.92128C1010.06912 972.99008 1026.71808 949.56032 1023.218112 924.5152L1023.218112 776.60608 1023.218112 776.60608ZM959.785728 813.93792C961.55072 801.39648 953.210368 789.65888 940.783936 787.2L851.238144 787.2C838.821952 789.66912 830.491712 801.4016 832.256768 813.93792L832.256768 887.98848C830.501952 900.52224 838.827008 912.24704 851.238144 914.7264L940.783936 914.7264C953.202688 912.25728 961.537984 900.52736 959.785728 887.98848L959.785728 813.93792 959.785728 813.93792ZM575.785728 813.93792C577.55072 801.39648 569.210368 789.65888 556.783936 787.2L467.238144 787.2C454.821952 789.66912 446.491712 801.4016 448.256768 813.93792L448.256768 887.98848C446.501952 900.52224 454.827008 912.24704 467.238144 914.7264L556.783936 914.7264C569.202688 912.25728 577.537984 900.52736 575.785728 887.98848L575.785728 813.93792 575.785728 813.93792ZM191.785728 813.93792C193.55072 801.39648 185.210368 789.65888 172.783936 787.2L83.238144 787.2C70.821952 789.66912 62.491712 801.4016 64.256768 813.93792L64.256768 887.98848C62.501952 900.52224 70.827008 912.24704 83.238144 914.7264L172.783936 914.7264C185.202688 912.25728 193.537984 900.52736 191.785728 887.98848L191.785728 813.93792 191.785728 813.93792Z" fill="#333" ></path></symbol><symbol id="icon-input1" viewBox="0 0 1024 1024"><path d="M118.784 727.04h778.24V296.96h-778.24v430.08zM77.824 256h860.16v512H77.824V256zM194.56 409.6v204.8c0 12.288 8.192 20.48 20.48 20.48s20.48-8.192 20.48-20.48V409.6c0-12.288-8.192-20.48-20.48-20.48s-20.48 8.192-20.48 20.48z"  ></path></symbol><symbol id="icon-calendar" viewBox="0 0 1024 1024"><path d="M853.333333 149.333333h-138.666666V106.666667c0-17.066667-14.933333-32-32-32s-32 14.933333-32 32v42.666666h-277.333334V106.666667c0-17.066667-14.933333-32-32-32s-32 14.933333-32 32v42.666666H170.666667c-40.533333 0-74.666667 34.133333-74.666667 74.666667v618.666667C96 883.2 130.133333 917.333333 170.666667 917.333333h682.666666c40.533333 0 74.666667-34.133333 74.666667-74.666666v-618.666667C928 183.466667 893.866667 149.333333 853.333333 149.333333zM170.666667 213.333333h138.666666v64c0 17.066667 14.933333 32 32 32s32-14.933333 32-32v-64h277.333334v64c0 17.066667 14.933333 32 32 32s32-14.933333 32-32v-64H853.333333c6.4 0 10.666667 4.266667 10.666667 10.666667v194.133333c-4.266667-2.133333-6.4-2.133333-10.666667-2.133333H170.666667c-4.266667 0-6.4 0-10.666667 2.133333v-194.133333c0-6.4 4.266667-10.666667 10.666667-10.666667z m682.666666 640H170.666667c-6.4 0-10.666667-4.266667-10.666667-10.666666V477.866667c4.266667 2.133333 6.4 2.133333 10.666667 2.133333h682.666666c4.266667 0 6.4 0 10.666667-2.133333v364.8c0 6.4-4.266667 10.666667-10.666667 10.666666z"  ></path><path d="M384 608h-85.333333c-17.066667 0-32 14.933333-32 32s14.933333 32 32 32h85.333333c17.066667 0 32-14.933333 32-32s-14.933333-32-32-32zM725.333333 608h-192c-17.066667 0-32 14.933333-32 32s14.933333 32 32 32h192c17.066667 0 32-14.933333 32-32s-14.933333-32-32-32z"  ></path></symbol><symbol id="icon-email1" viewBox="0 0 1024 1024"><path d="M874.666667 181.333333H149.333333c-40.533333 0-74.666667 34.133333-74.666666 74.666667v512c0 40.533333 34.133333 74.666667 74.666666 74.666667h725.333334c40.533333 0 74.666667-34.133333 74.666666-74.666667V256c0-40.533333-34.133333-74.666667-74.666666-74.666667z m-725.333334 64h725.333334c6.4 0 10.666667 4.266667 10.666666 10.666667v25.6L512 516.266667l-373.333333-234.666667V256c0-6.4 4.266667-10.666667 10.666666-10.666667z m725.333334 533.333334H149.333333c-6.4 0-10.666667-4.266667-10.666666-10.666667V356.266667l356.266666 224c4.266667 4.266667 10.666667 4.266667 17.066667 4.266666s12.8-2.133333 17.066667-4.266666l356.266666-224V768c0 6.4-4.266667 10.666667-10.666666 10.666667z"  ></path></symbol><symbol id="icon-user1" viewBox="0 0 1024 1024"><path d="M512 74.666667C270.933333 74.666667 74.666667 270.933333 74.666667 512S270.933333 949.333333 512 949.333333 949.333333 753.066667 949.333333 512 753.066667 74.666667 512 74.666667zM288 810.666667c0-123.733333 100.266667-224 224-224S736 686.933333 736 810.666667c-61.866667 46.933333-140.8 74.666667-224 74.666666s-162.133333-27.733333-224-74.666666z m128-384c0-53.333333 42.666667-96 96-96s96 42.666667 96 96-42.666667 96-96 96-96-42.666667-96-96z m377.6 328.533333c-19.2-96-85.333333-174.933333-174.933333-211.2 32-29.866667 51.2-70.4 51.2-117.333333 0-87.466667-72.533333-160-160-160s-160 72.533333-160 160c0 46.933333 19.2 87.466667 51.2 117.333333-89.6 36.266667-155.733333 115.2-174.933334 211.2-55.466667-66.133333-91.733333-149.333333-91.733333-243.2 0-204.8 168.533333-373.333333 373.333333-373.333333S885.333333 307.2 885.333333 512c0 93.866667-34.133333 177.066667-91.733333 243.2z"  ></path></symbol><symbol id="icon-number1" viewBox="0 0 1024 1024"><path d="M279.273 791.273h512a46.545 46.545 0 0 1 0 93.09h-512a46.545 46.545 0 0 1 0-93.09z m33.838-617.984v478.347H193.722V395.171c0-37.004-0.884-59.299-2.653-66.746a24.948 24.948 0 0 0-14.615-16.99c-8.006-3.863-25.786-5.771-53.341-5.771H111.29v-55.855c57.717-12.38 101.562-37.888 131.491-76.52h70.284z m303.71 396.8v81.547H354.163v-68.235c77.778-127.256 124.044-206.01 138.706-236.218 14.662-30.255 22.016-53.854 22.016-70.75 0-13.032-2.234-22.714-6.656-29.137-4.422-6.377-11.171-9.588-20.247-9.588a22.249 22.249 0 0 0-20.201 10.612c-4.469 7.121-6.656 21.178-6.656 42.263v45.522H354.164V318.65c0-26.763 1.397-47.942 4.143-63.348 2.746-15.5 9.542-30.72 20.387-45.661 10.798-14.988 24.902-26.298 42.217-33.978 17.361-7.68 38.167-11.544 62.37-11.544 47.477 0 83.317 11.776 107.707 35.328 24.296 23.552 36.445 53.341 36.445 89.368 0 27.368-6.842 56.32-20.48 86.853-13.731 30.534-54.04 95.325-121.018 194.42H616.82z m270.615-189.394c18.152 6.098 31.65 16.105 40.494 29.976 8.844 13.917 13.312 46.452 13.312 97.652 0 38.028-4.329 67.49-13.033 88.53-8.657 20.945-23.598 36.91-44.87 47.848-21.27 10.938-48.593 16.384-81.873 16.384-37.795 0-67.49-6.33-89.088-19.084-21.55-12.66-35.747-28.253-42.542-46.638-6.796-18.432-10.194-50.362-10.194-95.884v-37.841h119.39v77.73c0 20.667 1.21 33.84 3.723 39.425 2.42 5.585 7.913 8.424 16.337 8.424 9.31 0 15.36-3.537 18.34-10.612 2.932-7.121 4.421-25.6 4.421-55.575v-33.047c0-18.34-2.048-31.744-6.19-40.216a30.72 30.72 0 0 0-18.34-16.71c-8.052-2.653-23.738-4.189-46.964-4.561V357.05c28.393 0 45.894-1.07 52.597-3.258a22.947 22.947 0 0 0 14.475-14.15c2.933-7.307 4.422-18.711 4.422-34.257V278.76c0-16.757-1.722-27.741-5.12-33.048-3.49-5.352-8.844-8.005-16.151-8.005-8.285 0-13.964 2.792-16.99 8.378-3.025 5.632-4.56 17.64-4.56 35.933v39.284h-119.39V280.53c0-45.66 10.473-76.567 31.325-92.625 20.9-16.058 54.086-24.064 99.608-24.064 56.878 0 95.51 11.17 115.805 33.373 20.293 22.249 30.394 53.202 30.394 92.765 0 26.81-3.63 46.173-10.892 58.089-7.307 11.916-20.107 22.807-38.446 32.628z"  ></path></symbol><symbol id="icon-190tree" viewBox="0 0 1024 1024"><path d="M800 832c-41.6 0-76.8 25.6-89.6 64H288c-19.2 0-32-12.8-32-32V537.6c0 3.2 22.4 6.4 32 6.4h422.4c12.8 38.4 48 64 89.6 64 54.4 0 96-41.6 96-96s-41.6-96-96-96c-41.6 0-76.8 25.6-89.6 64H288c-19.2 0-32-12.8-32-32V185.6c32-12.8 64-48 64-89.6 0-54.4-41.6-96-96-96-51.2 0-96 41.6-96 96 0 41.6 32 76.8 64 89.6V864c0 54.4 44.8 96 96 96h422.4c12.8 38.4 48 64 89.6 64 54.4 0 96-41.6 96-96s-41.6-96-96-96z m0-384c35.2 0 64 28.8 64 64s-28.8 64-64 64-64-28.8-64-64 28.8-64 64-64zM160 96c0-35.2 28.8-64 64-64s64 28.8 64 64-28.8 64-64 64-64-28.8-64-64z m640 896c-35.2 0-64-28.8-64-64s28.8-64 64-64 64 28.8 64 64-28.8 64-64 64z"  ></path></symbol><symbol id="icon-dict-fill" viewBox="0 0 1024 1024"><path d="M764 888H200V324a4 4 0 0 0-4-4h-64a4 4 0 0 0-4 4v596a40 40 0 0 0 40 40h596a4 4 0 0 0 4-4v-64a4 4 0 0 0-4-4zM551.9 311.8h-57.5v327.1h56.8c83 0 120.4-60.6 120.4-172.6 0-99.9-40.2-154.5-119.7-154.5zM856 128H312a40 40 0 0 0-40 40v608a40 40 0 0 0 40 40h544a40 40 0 0 0 40-40V168a40 40 0 0 0-40-40zM552.8 694H430.2a4 4 0 0 1-4-4V260a4 4 0 0 1 4-4h128.5c116 0 183.1 74.2 183.1 208.9 0 144.8-63.5 229.1-189 229.1z"  ></path></symbol><symbol id="icon-user" viewBox="0 0 1024 1024"><path d="M648.6 538.9c63.2-46.6 104.2-121.6 104.2-206C752.8 191.8 638 77 496.9 77S241 191.8 241 332.9c0 84.4 41.1 159.4 104.2 206C200.4 598.7 98.3 741.4 98.3 907.5c0 22.1 17.9 40 40 40s40-17.9 40-40c0-175.8 143-318.7 318.7-318.7s318.7 143 318.7 318.7c0 22.1 17.9 40 40 40s40-17.9 40-40c-0.1-166.1-102.3-308.8-247.1-368.6z m-327.7-206c0-97.1 79-176 176-176s176 79 176 176-79 176-176 176-176-79-176-176z"  ></path></symbol><symbol id="icon-user-circle" viewBox="0 0 1024 1024"><path d="M509.44 1018.368c-141.312 0-277.504-59.904-372.736-164.352l-19.968-21.504 19.968-21.504c95.744-104.448 231.424-164.352 372.736-164.352 141.312 0 277.504 59.904 372.736 164.352l19.968 21.504-19.968 21.504c-95.232 104.448-231.424 164.352-372.736 164.352zM204.8 832.512c81.92 77.824 190.976 121.856 304.64 121.856 113.664 0 222.72-44.032 304.64-121.856-81.92-77.824-190.976-121.856-304.64-121.856-113.664 0-222.72 44.032-304.64 121.856zM509.952 600.576c-89.088 0-161.792-72.704-161.792-161.792 0-89.088 72.704-161.792 161.792-161.792s161.792 72.704 161.792 161.792c0 89.088-72.192 161.792-161.792 161.792z m0-259.584c-53.76 0-97.792 44.032-97.792 97.792s44.032 97.792 97.792 97.792 97.792-44.032 97.792-97.792-43.52-97.792-97.792-97.792z"  ></path><path d="M119.296 719.36c-33.792-63.488-51.2-134.144-51.2-206.848 0-243.712 198.144-441.344 441.344-441.344s441.344 198.144 441.344 441.344c0 72.192-17.92 143.36-51.2 206.336 16.384 15.36 31.744 31.744 46.08 49.152 45.568-77.312 69.12-165.376 69.12-255.488 0-279.04-226.816-505.856-505.856-505.856C230.4 7.168 4.096 233.984 4.096 512.512c0 90.112 24.064 178.688 69.632 255.488 13.824-16.896 29.184-33.28 45.568-48.64z"  ></path></symbol><symbol id="icon-dict" viewBox="0 0 1024 1024"><path d="M487.204 238.103h-81.567v340.516h81.567c59.425 0 102.943-13.871 130.303-41.101 26.721-27.868 40.083-70.88 40.083-129.158 0-59.678-13.362-103.329-40.083-129.923-27.359-27.104-70.877-40.336-130.303-40.336z"  ></path><path d="M778.859 61.224H245.306c-59.678 0-108.414 48.738-108.414 108.414v689.437c0 59.677 48.737 108.414 108.414 108.414h533.553c42.628 0 79.657-24.941 97.346-60.826H252.559c-22.269 0-40.591-18.197-40.591-40.59v-51.282c0-22.269 18.197-40.59 40.591-40.59h487.874c80.801 0 146.845-66.042 146.845-146.845V169.641c0-59.678-48.862-108.418-108.418-108.418zM677.696 581.291c-40.083 42.374-98.235 63.626-175.73 63.626H327.507v-473.11h174.458c77.494 0 135.647 21.25 175.73 63.625 38.048 39.703 57.518 97.346 57.518 172.931 0 74.95-19.468 132.59-57.516 172.93z"  ></path></symbol><symbol id="icon-btn" viewBox="0 0 1828 1024"><path d="M1322.88370217 78.26335901C1554.20991077 78.26335901 1745.77692672 273.44484711 1745.77692672 512s-191.56701595 433.73664099-426.50769668 433.73664099H509.62750045C274.68682069 945.73664099 83.11980375 750.55515289 83.11980375 512S274.68682069 78.26335901 509.62750045 78.26335901h813.25620172m0-72.28944H509.62750045C234.92762806 5.97391901 10.83036375 233.68565546 10.83036375 512s224.0972643 506.02608099 498.7971367 506.02608099h813.25620172C1593.96910242 1018.02608099 1818.0663677 790.31434454 1818.0663677 512S1593.96910242 5.97391901 1322.88370217 5.97391901z"  ></path><path d="M715.65240499 501.15658355c28.91577619-14.4578876 39.75919165-36.1447205 39.75919265-65.0604957-3.61447214-46.98813595-28.91577619-75.90391215-83.13285646-75.90391215H589.14588474c-21.68683191 0-32.53024835 10.84341645-32.53024835 32.53024835v249.39856834c0 21.68683191 10.84341645 32.53024835 32.53024835 32.53024836h90.36180075c65.0604957-3.61447214 97.59074405-36.1447205 101.20521619-97.59074505-3.61447214-43.3736638-25.30130405-68.67496785-65.06049669-75.90391215z m-93.9762719-86.7473276h32.53024835c21.68683191 0 36.1447205 10.84341645 36.1447195 32.53024835 0 21.68683191-14.4578876 32.53024835-36.1447195 36.14471951h-32.53024835v-68.67496786z m50.60260809 198.79596024h-50.60260809v-72.28944h46.98813595c28.91577619 0 43.3736638 10.84341645 46.98813595 36.14471951-3.61447214 21.68683191-18.07235974 32.53024835-43.37366381 36.14472049zM968.66544549 356.57770356H806.01420573c-14.4578876 0-25.30130405 10.84341645-25.30130405 28.91577619 0 21.68683191 10.84341645 32.53024835 25.30130405 32.53024835h46.98813596v224.09726429c0 21.68683191 10.84341645 32.53024835 32.53024735 32.53024836 21.68683191 0 32.53024835-10.84341645 32.53024835-32.53024836v-224.09726431h46.98813596c18.07235974 0 28.91577619-10.84341645 28.91577619-32.53024833 3.61447214-18.07235974-7.22894431-28.91577619-25.30130405-28.91577619zM1239.75084573 352.9632314c-21.68683191 0-32.53024835 14.4578876-32.53024733 36.1447205v166.2657119L1066.25618955 367.42112001c-7.22894431-10.84341645-14.4578876-14.4578876-28.91577622-14.45788861-21.68683191 0-32.53024835 14.4578876-32.53024734 36.1447205v253.01304049c0 21.68683191 10.84341645 32.53024835 32.53024734 32.53024836s32.53024835-10.84341645 32.53024835-32.53024836V475.8552795l137.34993672 184.33807265c7.22894431 7.22894431 14.4578876 10.84341645 28.91577617 10.84341643 21.68683191 0 32.53024835-10.84341645 32.53024736-32.53024833v-253.0130405c0-18.07235974-10.84341645-32.53024835-28.9157762-32.53024835z"  ></path></symbol><symbol id="icon-btn2" viewBox="0 0 1024 1024"><path d="M839.68 220.72888889h-72.81777778a36.40888889 36.40888889 0 0 0-36.22684444-36.40888889H111.32017778C91.47733333 184.32 75.09333333 200.74040889 75.09333333 220.98375111v472.80583111A36.40888889 36.40888889 0 0 0 111.32017778 730.45333333H111.50222222v72.81777778H75.09333333c-40.19541333 0-72.81777778-32.40391111-72.81777778-72.70855111V184.21077333C2.27555555 144.05176889 35.11637333 111.50222222 75.09333333 111.50222222h691.76888889c40.19541333 0 72.81777778 32.40391111 72.81777778 72.70855111V220.72888889zM147.91111111 329.77351111A72.81777778 72.81777778 0 0 1 220.91093333 257.13777778h727.81368889A72.81777778 72.81777778 0 0 1 1021.72444445 329.77351111v510.08853334A72.81777778 72.81777778 0 0 1 948.72462222 912.49777778H220.91093333A72.81777778 72.81777778 0 0 1 147.91111111 839.86204445v-510.08853334z m72.81777778 36.84579556v436.39694222A36.37248 36.37248 0 0 0 256.84650667 839.68h655.94254222c19.55157333 0 36.11761778-16.384 36.11761778-36.66375111V366.61930667A36.37248 36.37248 0 0 0 912.78904889 329.95555555H256.84650667C237.29493333 329.95555555 220.72888889 346.33955555 220.72888889 366.61930667z m249.43729778 271.24622222c0 13.83537778-2.18453333 26.36003555-6.5536 37.50115556-4.33265778 11.14112-10.37653333 20.53461333-18.05880889 28.21688888-7.68227555 7.64586667-16.60245333 13.54410667-26.76053333 17.62190222a86.54392889 86.54392889 0 0 1-32.51313778 6.08028445H293.54666667V439.18222222h82.35690666c9.75758222 0 18.93262222 1.82044445 27.52512 5.42492445 8.59249778 3.64088889 16.20195555 8.66531555 22.90119112 15.10968888 6.66282667 6.48078222 11.90570667 14.45432889 15.76504888 23.9570489a83.99530667 83.99530667 0 0 1 4.40547556 45.36547555c-0.87381333 4.84238222-2.18453333 9.42990222-3.82293334 13.79896889-1.67480889 4.36906667-3.78652445 8.33763555-6.37155555 11.94211556a31.60291555 31.60291555 0 0 1-8.84736 8.59249777c5.13365333 1.82044445 10.26730667 5.09724445 15.40096 9.93962667 5.09724445 4.80597333 9.75758222 10.55857778 13.83537778 17.14858666a91.85962667 91.85962667 0 0 1 13.47128889 47.40437334z m-57.70808889 0c0-12.63388445-3.71370667-22.02737778-11.17752889-28.21688889a38.19292445 38.19292445 0 0 0-25.01290667-9.24785778h-28.47175111v74.49258667h28.47175111c4.62392889 0 9.10222222-0.72817778 13.47128889-2.25735111a33.20490667 33.20490667 0 0 0 11.54161778-6.77205333 33.31413333 33.31413333 0 0 0 8.08277333-11.5052089c2.07530667-4.66033778 3.09475555-10.15808 3.09475556-16.49322666z m-18.85980445-117.85557334c0-10.55857778-2.76707555-18.05880889-8.26481778-22.5735111a28.69020445 28.69020445 0 0 0-18.67776-6.77205334h-18.85980444v58.25422222h18.85980444c6.91768889 0 13.14360889-2.18453333 18.67776-6.5536 5.49774222-4.36906667 8.26481778-11.79648 8.26481778-22.35505778z m189.47185778-24.83086222v232.10666667h-59.23726222v-232.54357333h-74.27413334V439.18222222h207.42144v55.99687111h-73.91004444zM830.75982222 730.45333333l-89.12896-163.18464v160.01706667H682.02951111V439.18222222h48.09614222l86.36188445 145.63555556v-145.63555556H876.08888889v291.27111111h-45.32906667z"  ></path></symbol><symbol id="icon-btn3" viewBox="0 0 1536 1024"><path d="M452.488242 541.251023h-100.802821v113.623092h99.272956c22.504318 0 40.41904-3.564586 53.224012-10.709057 16.369558-9.179191 24.569636-23.559925 24.569635-43.998924 0-20.989751-6.119461-35.814145-17.914722-45.054532q-18.419577-13.829982-58.34906-13.860579zM497.527475 479.367974c10.2195-8.735531 15.880001-22.550214 15.880001-41.489945 0-17.379269-5.660501-30.184241-15.880001-37.818269-11.24451-8.184779-28.654376-12.315415-53.224012-12.315415h-92.618042v104.367407h91.593032c25.594645 0 43.494069-4.589596 54.249022-12.743778z"  ></path><path d="M1407.980877 0H128.003825A128.003825 128.003825 0 0 0 0 128.003825v767.99235a128.003825 128.003825 0 0 0 128.003825 128.003825h1279.977052a128.003825 128.003825 0 0 0 128.003824-128.003825v-767.99235A128.003825 128.003825 0 0 0 1407.980877 0zM550.751487 682.503481c-21.509905 14.30424-52.199002 21.418113-91.103476 21.418113H291.806496V338.620372h167.351959c36.334299 0 64.958078 8.689635 85.458272 26.130099 18.909134 16.369558 28.623779 38.36902 28.623779 65.998386 0 20.439-5.094451 37.879463-14.809096 52.183703-9.745242 13.325126-23.559925 22.947979-41.964203 30.19954 24.034183 4.589596 41.964204 14.30424 54.249021 29.17453 11.749365 14.319539 17.899423 34.253683 17.899423 58.823319 0 36.869752-12.804972 63.994263-37.864164 81.373532zM916.297487 389.809663h-119.742552v314.188425h-59.878926V389.809663h-119.711955v-51.189291h299.333433z m346.59097 314.188425h-58.333761L1021.949981 436.868318h-2.05002v267.12977h-59.94012V338.620372h59.878926L1200.485254 602.262049h1.988825V338.620372h60.368482z"  ></path></symbol><symbol id="icon-popup2" viewBox="0 0 1024 1024"><path d="M989 614.5c-19.3 0-35 15.7-35 35v232.9c0 39.5-32.1 71.6-71.6 71.6H141.6c-6.7 0-13.2-1-19.4-2.7L486 587.5V773c0 19.3 15.7 35 35 35s35-15.7 35-35V501.3c0-0.3 0-0.5-0.1-0.8 0-0.3 0-0.6-0.1-0.9 0-0.3-0.1-0.7-0.1-1 0-0.2-0.1-0.4-0.1-0.7-0.1-0.4-0.1-0.7-0.2-1.1 0-0.2-0.1-0.4-0.1-0.6-0.1-0.4-0.2-0.7-0.2-1.1 0-0.2-0.1-0.4-0.1-0.6-0.1-0.4-0.2-0.7-0.3-1.1-0.1-0.2-0.1-0.4-0.2-0.6-0.1-0.3-0.2-0.6-0.3-1-0.1-0.2-0.1-0.4-0.2-0.7l-0.3-0.9c-0.1-0.3-0.2-0.5-0.3-0.8-0.1-0.3-0.2-0.5-0.3-0.7-0.1-0.3-0.3-0.6-0.4-0.8l-0.3-0.6c-0.2-0.3-0.3-0.6-0.5-0.9-0.1-0.2-0.2-0.4-0.3-0.5-0.2-0.3-0.4-0.6-0.6-1-0.1-0.2-0.2-0.3-0.3-0.5-0.2-0.3-0.4-0.6-0.6-1-0.1-0.2-0.2-0.3-0.3-0.5l-0.6-0.9c-0.1-0.2-0.3-0.3-0.4-0.5-0.2-0.3-0.4-0.5-0.6-0.8-0.2-0.2-0.4-0.4-0.6-0.7-0.2-0.2-0.4-0.4-0.5-0.6-0.4-0.4-0.8-0.8-1.2-1.3-0.4-0.4-0.8-0.8-1.3-1.2-0.2-0.2-0.4-0.4-0.6-0.5-0.2-0.2-0.5-0.4-0.7-0.6-0.3-0.2-0.5-0.4-0.8-0.6-0.2-0.1-0.4-0.3-0.5-0.4l-0.9-0.6c-0.2-0.1-0.3-0.2-0.5-0.3l-0.9-0.6c-0.2-0.1-0.3-0.2-0.5-0.3-0.3-0.2-0.6-0.4-1-0.5-0.2-0.1-0.4-0.2-0.5-0.3-0.3-0.2-0.6-0.3-0.9-0.5l-0.6-0.3c-0.3-0.1-0.6-0.3-0.8-0.4-0.2-0.1-0.5-0.2-0.7-0.3-0.3-0.1-0.5-0.2-0.8-0.3l-0.9-0.3c-0.2-0.1-0.5-0.2-0.7-0.2-0.3-0.1-0.6-0.2-1-0.3-0.2-0.1-0.4-0.1-0.6-0.2-0.3-0.1-0.7-0.2-1.1-0.3-0.2 0-0.4-0.1-0.6-0.1-0.4-0.1-0.7-0.2-1.1-0.2-0.2 0-0.4-0.1-0.6-0.1-0.4-0.1-0.7-0.1-1.1-0.2-0.2 0-0.5-0.1-0.7-0.1-0.3 0-0.7-0.1-1-0.1-0.3 0-0.6 0-0.9-0.1-0.3 0-0.5 0-0.8-0.1H251c-19.3 0-35 15.7-35 35s15.7 35 35 35h185.5L72.7 901.8c-1.7-6.2-2.7-12.7-2.7-19.4V141.6c0-39.5 32.1-71.6 71.6-71.6h232.9c19.3 0 35-15.7 35-35s-15.7-35-35-35H141.6C63.5 0 0 63.5 0 141.6v740.8C0 960.5 63.5 1024 141.6 1024h740.8c78.1 0 141.6-63.5 141.6-141.6V649.5c0-19.3-15.7-35-35-35z"  ></path><path d="M899.7 0H748.3C679.7 0 624 55.7 624 124.3v151.4c0 68.7 55.7 124.3 124.3 124.3h151.4c68.7 0 124.3-55.7 124.3-124.3V124.3C1024 55.7 968.3 0 899.7 0zM954 275.7c0 30-24.4 54.3-54.3 54.3H748.3c-30 0-54.3-24.4-54.3-54.3V124.3c0-30 24.4-54.3 54.3-54.3h151.4c30 0 54.3 24.4 54.3 54.3v151.4z"  ></path></symbol><symbol id="icon-popup" viewBox="0 0 1024 1024"><path d="M819.2 102.4 408.5248 102.4C352.256 102.4 307.2 147.456 307.2 203.776L307.2 614.4c0 56.32 46.08 102.4 102.4 102.4l409.6 0c56.32 0 102.4-46.08 102.4-102.4L921.6 204.8C921.6 148.48 875.52 102.4 819.2 102.4zM819.2 614.4 409.6 614.4 409.6 204.8l409.6 0L819.2 614.4zM204.8 512 102.4 512l0 307.2c0 56.32 46.08 102.4 102.4 102.4l307.2 0 0-102.4L204.8 819.2 204.8 512z"  ></path></symbol><symbol id="icon-depart2" viewBox="0 0 1024 1024"><path d="M411.20278261 292.83431884H612.91594203c12.10991304-1.42469565 21.37043478-11.63501449 21.37043478-24.10110145V73.90608696c0-13.41588406-10.92266666-24.33855073-24.33855072-24.33855073h-195.89565218c-13.41588406 0-24.33855073 10.92266666-24.33855072 24.33855073v194.70840579c0 12.46608696 9.37924638 22.67640579 21.48915942 24.21982609zM438.39072464 98.24463769h147.21855072v146.03130434H438.39072464v-146.03130434zM171.26028986 536.33855073h316.40115941V681.77623188h48.67710146V536.33855073H852.73971014V681.77623188h48.67710145V513.89959421c0-14.4844058-11.75373913-26.23814493-26.23814493-26.23814494H536.33855073V342.10504348h-48.67710146v145.67513043H150.83965217c-15.55292754 0-28.25646377 12.70353623-28.25646376 28.25646378V681.77623188h48.67710145V536.33855073zM609.3542029 731.04695652H414.6457971c-13.41588406 0-24.33855073 10.92266666-24.33855072 24.33855073v194.70840579c0 13.41588406 10.92266666 24.33855073 24.33855072 24.33855073h194.7084058c13.41588406 0 24.33855073-10.92266666 24.33855072-24.33855073V755.38550725c0-13.41588406-10.92266666-24.33855073-24.33855072-24.33855073z m-24.33855073 194.70840579h-146.03130434v-146.03130434h146.03130434v146.03130434zM244.27594203 731.04695652h-194.7084058c-13.41588406 0-24.33855073 10.92266666-24.33855072 24.33855073v194.70840579c0 13.41588406 10.92266666 24.33855073 24.33855072 24.33855073h194.7084058c13.41588406 0 24.33855073-10.92266666 24.33855072-24.33855073V755.38550725c0-13.41588406-10.92266666-24.33855073-24.33855072-24.33855073z m-24.33855072 194.70840579H73.90608696v-146.03130434h146.03130435v146.03130434zM974.43246377 731.04695652h-194.7084058c-13.41588406 0-24.33855073 10.92266666-24.33855072 24.33855073v194.70840579c0 13.41588406 10.92266666 24.33855073 24.33855072 24.33855073h194.7084058c13.41588406 0 24.33855073-10.92266666 24.33855072-24.33855073V755.38550725c0-14.60313044-9.73542029-24.33855073-24.33855072-24.33855073z m-24.33855073 194.70840579H804.06260869v-146.03130434h146.03130435v146.03130434z"  ></path></symbol><symbol id="icon-card" viewBox="0 0 1024 1024"><path d="M96.8 466.9h414.8V98.2H96.8v368.7z m46.1-322.6h322.6v276.5H142.9V144.3z m0 0M557.7 927.8h368.7V651.3H557.7v276.5z m46.1-230.5h276.5v184.3H603.8V697.3z m0 0M557.7 98.2v506.9h368.7V98.2H557.7z m322.6 460.9H603.8V144.3h276.5v414.8z m0 0M96.8 927.8h414.8V513H96.8v414.8z m46.1-368.7h322.6v322.6H142.9V559.1z m0 0"  ></path></symbol><symbol id="icon-tab" viewBox="0 0 1024 1024"><path d="M960 960H64V64h480v224h416v672zM128 896h768V352H480V128H128v768z"  ></path><path d="M608 128h288v96h-288z"  ></path></symbol><symbol id="icon-tab1" viewBox="0 0 1024 1024"><path d="M343.25 315.125V118.25H62v787.5h900V315.125H343.25z m562.5 534.375H118.25V174.5h168.75v196.875h618.75v478.125z"  ></path><path d="M652.625 118.25h-253.125v140.625h253.125V118.25z m-56.25 84.375h-140.625V174.5h140.625v28.125zM708.875 118.25v140.625h253.125V118.25h-253.125z m196.875 84.375h-140.625V174.5h140.625v28.125z"  ></path></symbol><symbol id="icon-tab2" viewBox="0 0 1024 1024"><path d="M615.3846875 68.9234375H408.6153125c-12.9234375 0-22.153125 11.0765625-22.153125 24v46.153125c0 12.9234375 11.0765625 24 22.153125 24h206.769375c12.9234375 0 22.153125-11.0765625 22.153125-24v-46.153125c1.846875-12.9234375-9.2296875-24-22.153125-24z m315.691875 0H724.308125c-12.9234375 0-24 11.0765625-24 24v46.153125c0 12.9234375 11.0765625 24 24 24h206.7684375c12.9234375-1.8459375 24-11.0765625 24-24v-46.153125c0-12.9234375-11.0765625-24-24-24z m0 155.0765625H345.846875c-12.9225 0-24-11.0765625-24-24V92.9234375c0-12.9234375-11.0765625-24-24-24H92.9234375c-12.9234375 0-24 11.0765625-24 24v840c0 11.0765625 11.0765625 22.153125 24 22.153125h838.153125c12.9234375 0 24-11.0765625 24-24V248c0-12.9234375-11.0765625-24-24-24z"  ></path></symbol><symbol id="icon-text" viewBox="0 0 1024 1024"><path d="M962.9656745 932.80074644c-4.52473921-61.83810252-6.03298562-125.18445145-6.03298561-187.02255398 0-31.67317446 0-61.83810252 1.50824638-93.51127698 0-28.65668166 3.01649281-57.31336332-7.54123201-84.46179856-24.13194244-61.83810252-105.57724821-73.90407375-164.39885791-73.90407375-30.16492806 0-60.32985613 4.52473921-90.49478419 12.06597121-21.11544964 6.03298562-42.2308993 13.57421762-60.3298561 22.62369605l19.60720322 48.26388489c4.52473921 9.04947843 6.03298562 19.60720323 7.54123203 28.65668166 39.21440646-18.09895683 78.42881296-28.65668166 117.64321942-28.65668166 61.83810252 0 92.00303057 24.13194244 92.00303057 72.39582735v22.62369604c-9.04947843 0-24.13194244-1.50824641-43.73914568-1.50824639-78.42881296 0-137.25042267 12.06597121-179.48132195 34.68966726-40.72265287 24.13194244-61.83810252 64.85459532-61.83810253 123.67620504 0 43.73914569 13.57421762 78.42881296 40.72265288 102.5607554 27.14843525 24.13194244 61.83810252 36.19791367 102.56075542 36.19791368 36.19791367 0 66.36284173-4.52473921 88.98653777-15.08246403s42.2308993-25.64018885 57.3133633-46.75563849h3.01649283c1.50824641 10.55772482 3.01649281 27.14843525 7.54123202 51.28037771 0 1.50824641 67.87108813 0 75.41232014 0 1.50824641-10.55772482 0-16.59071043 0-24.13194245zM873.97913671 780.46785973c0 10.55772482-1.50824641 21.11544964-6.03298561 31.67317447-3.01649281 7.54123201-6.03298562 15.08246403-12.06597122 22.62369604-18.09895683 25.64018885-49.77213131 39.21440646-79.93705936 45.2473921-19.60720323 3.01649281-37.70616007 1.50824641-57.3133633-1.50824641-15.08246403-3.01649281-30.16492806-10.55772482-37.70616008-24.13194245-13.57421762-21.11544964-10.55772482-54.29687052 4.5247392-73.90407375 9.04947843-12.06597121 22.62369604-19.60720323 36.19791368-24.13194245 37.70616007-12.06597121 81.44530576-12.06597121 119.15146583-12.06597121l33.18142086 1.50824639v34.68966727zM585.90407375 607.01952339L371.73308452 76.11678954c-3.01649281-10.55772482-12.06597121-16.59071043-22.62369604-16.59071043h-67.87108814c-10.55772482 0-21.11544964 7.54123201-24.13194244 16.59071043l-196.0720324 530.90273385c-4.52473921 10.55772482 3.01649281 22.62369604 13.57421763 22.62369604h75.41232016c10.55772482 0 21.11544964-9.04947843 24.13194245-19.60720324l49.77213129-138.75866906h193.05553958l55.80511693 138.75866906c3.01649281 10.55772482 13.57421762 19.60720323 24.13194243 19.60720324h73.90407375c12.06597121 0 21.11544964-12.06597121 15.08246403-22.62369604zM263.13934351 367.20834531l55.80511691-144.79165468 61.83810251 144.79165468h-117.64321942z"  ></path></symbol><symbol id="icon-divider" viewBox="0 0 1024 1024"><path d="M129.70666667 129.70666667h764.58666666a54.61333333 54.61333333 0 0 1 0 109.22666666H129.70666667a54.61333333 54.61333333 0 1 1 0-109.22666666z m0 655.36h764.58666666a54.61333333 54.61333333 0 0 1 0 109.22666666H129.70666667a54.61333333 54.61333333 0 0 1 0-109.22666666z m0-327.68h140.41088a54.61333333 54.61333333 0 1 1 0 109.22666666H129.70666667a54.61333333 54.61333333 0 0 1 0-109.22666666z m312.06058666 0h140.46549334a54.61333333 54.61333333 0 0 1 0 109.22666666H441.76725333a54.61333333 54.61333333 0 0 1 0-109.22666666z m312.1152 0H894.29333333a54.61333333 54.61333333 0 0 1 0 109.22666666h-140.41088a54.61333333 54.61333333 0 0 1 0-109.22666666z"  ></path></symbol><symbol id="icon-markdown" viewBox="0 0 1024 1024"><path d="M92 192C42.24 192 0 232.128 0 282.016v459.968C0 791.904 42.24 832 92 832h840C981.76 832 1024 791.872 1024 741.984V282.016C1024 232.16 981.76 192 932 192z m0 64h840c16.512 0 28 12.256 28 26.016v459.968c0 13.76-11.52 26.016-28 26.016H92C75.488 768 64 755.744 64 741.984V282.016c0-13.76 11.52-25.984 28-25.984zM160 352v320h96v-212.992l96 127.008 96-127.04V672h96V352h-96l-96 128-96-128z m544 0v160h-96l144 160 144-160h-96v-160z"  ></path></symbol><symbol id="icon-tree" viewBox="0 0 1024 1024"><path d="M251.255027 267.144745a89.048248 89.048248 0 1 0 0-178.096497 89.048248 89.048248 0 0 0 0 178.096497z m0 89.048248A178.096497 178.096497 0 1 1 251.255027 0.03657a178.096497 178.096497 0 0 1 0 356.192993z"  ></path><path d="M206.712617 267.144745h89.048249v44.542409a89.048248 89.048248 0 0 0 89.048248 89.048248h267.108175v89.011678h-267.108175a177.255384 177.255384 0 0 1-89.084818-23.807149l0.03657 246.409485a89.048248 89.048248 0 0 0 89.048248 89.048248h267.108175v89.048249h-267.108175a178.096497 178.096497 0 0 1-178.096497-178.096497V267.144745z"  ></path><path d="M785.471376 934.951752a89.048248 89.048248 0 1 0 0-178.096497 89.048248 89.048248 0 0 0 0 178.096497z m0 89.048248a178.096497 178.096497 0 1 1 0-356.192993 178.096497 178.096497 0 0 1 0 356.192993zM785.471376 534.28949a89.048248 89.048248 0 1 0 0-178.096497 89.048248 89.048248 0 0 0 0 178.096497z m0 89.011678a178.096497 178.096497 0 1 1 0-356.156423 178.096497 178.096497 0 0 1 0 356.192993z"  ></path></symbol><symbol id="icon-map" viewBox="0 0 1024 1024"><path d="M649.6 960c-12.8 0-25.6-9.6-28.8-22.4-6.4-16 3.2-35.2 19.2-41.6l256-86.4V428.8l-115.2 38.4c-16 6.4-35.2-3.2-41.6-19.2-6.4-16 3.2-35.2 19.2-41.6l160-51.2c9.6-6.4 19.2-3.2 28.8 3.2 6.4 6.4 12.8 16 12.8 25.6v448c0 12.8-9.6 25.6-22.4 28.8l-278.4 96c-3.2 3.2-6.4 3.2-9.6 3.2z"  ></path><path d="M649.6 960c-3.2 0-6.4 0-9.6-3.2l-278.4-96c-16-6.4-25.6-22.4-19.2-41.6 6.4-16 22.4-25.6 41.6-19.2l278.4 96c16 6.4 25.6 22.4 19.2 41.6-6.4 12.8-19.2 22.4-32 22.4z"  ></path><path d="M96 960c-6.4 0-12.8-3.2-19.2-6.4-9.6-6.4-12.8-16-12.8-25.6V480c0-12.8 9.6-25.6 22.4-28.8l73.6-28.8c16-6.4 35.2 3.2 41.6 19.2s-3.2 35.2-19.2 41.6l-54.4 19.2v380.8l233.6-80c16-6.4 35.2 3.2 41.6 19.2 6.4 16-3.2 35.2-19.2 41.6l-278.4 96H96z"  ></path><path d="M480 416c-54.4 0-96-41.6-96-96s41.6-96 96-96 96 41.6 96 96-41.6 96-96 96z m0-128c-19.2 0-32 12.8-32 32s12.8 32 32 32 32-12.8 32-32-12.8-32-32-32z"  ></path><path d="M480 688l-22.4-25.6C435.2 640 256 435.2 256 320c0-124.8 99.2-224 224-224s224 99.2 224 224c0 115.2-179.2 320-201.6 342.4l-22.4 25.6zM480 160c-89.6 0-160 70.4-160 160 0 60.8 89.6 188.8 160 272 70.4-83.2 160-211.2 160-272 0-89.6-70.4-160-160-160z"  ></path></symbol><symbol id="icon-jm-print" viewBox="0 0 1024 1024"><path d="M362.666667 853.333333l298.666667 0c12.8 0 21.333333-8.533333 21.333333-21.333333 0-12.8-8.533333-21.333333-21.333333-21.333333L362.666667 810.666667c-12.8 0-21.333333 8.533333-21.333333 21.333333C341.333333 844.8 349.866667 853.333333 362.666667 853.333333zM362.666667 768l213.333333 0c12.8 0 21.333333-8.533333 21.333333-21.333333 0-12.8-8.533333-21.333333-21.333333-21.333333L362.666667 725.333333c-12.8 0-21.333333 8.533333-21.333333 21.333333C341.333333 759.466667 349.866667 768 362.666667 768zM853.333333 298.666667l-42.666667 0L810.666667 85.333333c0-23.466667-19.2-42.666667-42.666667-42.666667L256 42.666667c-23.466667 0-42.666667 19.2-42.666667 42.666667l0 213.333333L170.666667 298.666667c-70.4 0-128 57.6-128 128l0 341.333333c0 70.4 57.6 128 128 128l42.666667 0 0 42.666667c0 23.466667 19.2 42.666667 42.666667 42.666667l512 0c23.466667 0 42.666667-19.2 42.666667-42.666667l0-42.666667 42.666667 0c70.4 0 128-57.6 128-128L981.333333 426.666667C981.333333 356.266667 923.733333 298.666667 853.333333 298.666667zM256 85.333333l512 0 0 213.333333L256 298.666667 256 85.333333zM768 896l0 42.666667L256 938.666667l0-42.666667L256 682.666667l512 0L768 896zM938.666667 768c0 46.933333-38.4 85.333333-85.333333 85.333333l-42.666667 0 0-170.666667c0-23.466667-19.2-42.666667-42.666667-42.666667L256 640c-23.466667 0-42.666667 19.2-42.666667 42.666667l0 170.666667L170.666667 853.333333c-46.933333 0-85.333333-38.4-85.333333-85.333333L85.333333 426.666667c0-46.933333 38.4-85.333333 85.333333-85.333333l682.666667 0c46.933333 0 85.333333 38.4 85.333333 85.333333L938.666667 768zM810.666667 426.666667c-23.466667 0-42.666667 19.2-42.666667 42.666667s19.2 42.666667 42.666667 42.666667 42.666667-19.2 42.666667-42.666667S834.133333 426.666667 810.666667 426.666667zM682.666667 426.666667c-23.466667 0-42.666667 19.2-42.666667 42.666667s19.2 42.666667 42.666667 42.666667 42.666667-19.2 42.666667-42.666667S706.133333 426.666667 682.666667 426.666667z"  ></path></symbol><symbol id="icon-phone" viewBox="0 0 1024 1024"><path d="M402.176 208.981333c-28.245333-40.256-50.901333-53.653333-81.258667-47.957333-13.098667 2.453333-21.184 6.869333-36.053333 19.712l-11.328 9.941333-22.037333 18.282667-5.76 5.034667c-3.242667 2.986667-5.589333 5.44-8.597334 8.853333-56 63.402667-71.509333 162.56-38.912 255.786667 23.445333 66.986667 65.28 133.546667 124.928 200.064 63.253333 70.549333 116.416 114.944 177.557334 147.328 48 25.386667 84.757333 36.522667 127.466666 37.824 51.626667 1.6 97.088-10.069333 134.442667-34.261334a141.866667 141.866667 0 0 0 17.109333-13.290666l7.253334-6.613334 14.293333-13.312 4.842667-4.309333 9.557333-8.256c19.285333-17.194667 25.536-27.946667 26.816-44.949333 1.92-25.941333-9.813333-46.144-43.52-74.986667l-22.805333-19.093333-10.602667-9.258667-10.026667-8.597333c-32.576-26.901333-56.704-35.605333-87.68-30.933334-21.248 3.178667-33.493333 10.624-55.189333 33.344l-9.578667 10.197334c-15.786667 16.64-24.789333 22.976-38.101333 25.642666-19.477333 3.904-38.826667-6.165333-70.229333-31.68-40.469333-32.853333-74.048-70.592-102.912-115.456-20.010667-31.296-27.904-55.04-21.824-76.650666 2.474667-8.746667 8.448-14.912 21.056-24.661334l13.12-9.898666 2.112-1.642667 19.904-16.234667c17.6-14.72 24.746667-24.746667 28.501333-40.106666 7.786667-31.594667 0.426667-57.813333-28.373333-102.933334l-13.674667-21.205333-4.864-7.466667-5.632-8.256z"  ></path></symbol><symbol id="icon-mobile-phone" viewBox="0 0 1024 1024"><path d="M746.666667 949.333333H277.333333c-40.533333 0-74.666667-34.133333-74.666666-74.666666V149.333333c0-40.533333 34.133333-74.666667 74.666666-74.666666h469.333334c40.533333 0 74.666667 34.133333 74.666666 74.666666v725.333334c0 40.533333-34.133333 74.666667-74.666666 74.666666z m-469.333334-810.666666c-6.4 0-10.666667 4.266667-10.666666 10.666666v725.333334c0 6.4 4.266667 10.666667 10.666666 10.666666h469.333334c6.4 0 10.666667-4.266667 10.666666-10.666666V149.333333c0-6.4-4.266667-10.666667-10.666666-10.666666H277.333333z"  ></path><path d="M512 768m-42.666667 0a42.666667 42.666667 0 1 0 85.333334 0 42.666667 42.666667 0 1 0-85.333334 0Z"  ></path><path d="M597.333333 245.333333h-170.666666c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h170.666666c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z"  ></path></symbol><symbol id="icon-email-filled" viewBox="0 0 1024 1024"><path d="M512.01284373 570.17116374l443.25167787-369.30789546c-2.401856-0.4367008-4.55967361-1.43854507-7.05143893-1.43854507L75.81260588 199.42472214c-2.44038933 0-4.61105067 0.98899947-7.01290669 1.43854507L512.01284373 570.17116374zM987.87582293 239.08746348c0-4.16150507-1.1431296-8.01475093-2.401856-11.803776L671.2674816 489.17594241l314.6817184 314.7459392c0.80918187-3.1725056 1.92662293-6.22941333 1.92662293-9.65880213L987.87582293 239.08746348zM38.56456533 227.24515521c-1.22019413 3.81471361-2.44038933 7.61658239-2.44038933 11.84230827l0 555.16277226c0 3.46792107 1.1945056 6.51198508 1.97799893 9.68449067l314.78447147-314.77162773L38.56456533 227.24515521zM640.62133548 514.65873921l-115.94415787 96.5751776c-3.63489492 3.09544107-8.13034773 4.58536213-12.66433388 4.58536213-4.4954528 0-9.01659413-1.48992214-12.6900224-4.58536213l-115.8414048-96.52380053L66.21802454 831.96066454c3.12112852 0.8220256 6.21656959 1.9651552 9.59458134 1.9651552l872.41332051 0c3.44223253 0 6.5376736-1.13028587 9.72302294-1.9651552L640.62133548 514.65873921z"  ></path></symbol><symbol id="icon-email" viewBox="0 0 1024 1024"><path d="M981.48588027 334.89335562V815.7849815a82.85044939 82.85044939 0 0 1-82.85044939 82.85044938H125.36456912a82.85044939 82.85044939 0 0 1-82.85044939-82.85044938V334.89335562l82.85044939 70.22956468V815.7849815h773.27086176V405.1229203l82.85044939-70.22956468zM898.63543088 125.36456912a83.87227117 83.87227117 0 0 1 29.54999276 5.41289689 82.35334669 82.35334669 0 0 1 34.68672191 25.13130254 83.26470163 83.26470163 0 0 1 12.0961656 20.02219237c3.59018571 8.5059799 5.79953147 17.72999617 6.35186822 27.42349875L981.48588027 208.2150185v27.61681732L565.76994165 590.43175918a82.85044939 82.85044939 0 0 1-103.42497721 3.2864003l-4.11490609-3.31401798L42.51411973 235.83183582v-27.61681732a82.57428165 82.57428165 0 0 1 45.48489672-73.95783361A82.68474848 82.68474848 0 0 1 125.36456912 125.36456912h773.27086176z m-12.4275674 82.85044938h-748.41572696L512 527.3825672 886.20786348 208.2150185z"  ></path></symbol><symbol id="icon-qrcode" viewBox="0 0 1024 1024"><path d="M423.836543 114.819049l0-0.274246L204.08256 114.544803c-45.911656 0-83.09451 36.932144-83.356476 82.59309l-0.023536 0 0 207.579709c0 2.468215 0.500397 4.782933 1.239224 7.000438 6.678096 39.245839 40.831964 69.164243 82.140789 69.164243L423.836543 480.882282l0-0.237407c38.877449-2.432399 70.477144-31.363312 76.798107-68.926836 0.763386-2.217505 1.289366-4.532223 1.289366-7.000438L501.924016 197.137893l-0.025583 0C501.683539 153.253406 467.244168 117.538997 423.836543 114.819049zM458.038506 393.46021c0 24.14798-19.654642 43.705408-43.88551 43.705408L208.445938 437.165618c-24.230867 0-43.858904-19.557428-43.858904-43.705408L164.587034 201.980177c0-24.149003 19.628036-43.717687 43.858904-43.717687l205.708082 0c24.230867 0 43.88551 19.569708 43.88551 43.717687L458.039529 393.46021zM902.246517 195.111746c-0.215918-42.799782-33.818223-77.644381-76.153424-80.304977l0-0.261966L634.384863 114.544803c-44.790112 0-81.040734 36.037774-81.304747 80.56592l-0.023536 0 0 202.511273c0 2.407839 0.476861 4.673439 1.240247 6.831592 6.487761 38.292118 39.830147 67.472717 80.08906 67.472717l191.70823 0 0-0.226151c37.921681-2.385327 68.734454-30.613228 74.961272-67.246567 0.738827-2.158153 1.216711-4.423753 1.216711-6.831592L902.2721 195.111746 902.246517 195.111746zM859.461061 386.638851c0 23.551392-19.152199 42.643216-42.813085 42.643216L638.678656 429.282067c-23.658839 0-42.834574-19.091824-42.834574-42.643216L595.844082 199.832258c0-23.552415 19.175735-42.643216 42.834574-42.643216l177.969321 0c23.660886 0 42.813085 19.091824 42.813085 42.643216L859.461061 386.638851zM415.680792 539.887141l0-0.260943L201.839473 539.626197c-44.670385 0-80.874959 35.94363-81.114412 80.375585l-0.023536 0 0 201.974038c0 2.420119 0.477884 4.687766 1.215688 6.821359 6.464225 38.181601 39.73498 67.316152 79.922261 67.316152L415.680792 896.113331l0-0.236384c37.824467-2.350534 68.567655-30.529317 74.744331-67.079768 0.762363-2.133593 1.24127-4.40124 1.24127-6.821359L491.666394 620.001783l-0.049119 0C491.402381 577.308425 457.919802 542.53648 415.680792 539.887141zM448.975083 811.04077c0 23.493064-19.127639 42.524512-42.691311 42.524512L212.953601 853.565283c0 0-0.022513 0-0.047072 0l-6.822382 0c-23.563672 0-42.690288-19.031449-42.690288-42.524512L163.393859 624.687502c0-23.469528 19.126616-42.525536 42.690288-42.525536l200.200648 0c23.563672 0 42.691311 19.056008 42.691311 42.525536L448.976106 811.04077zM721.154066 753.120616c-14.741749 0-26.66736 11.508102-26.66736 25.699312l0 51.395554c0 14.228049 11.924587 25.721825 26.66736 25.721825 14.736633 0 26.663266-11.492752 26.663266-25.721825l0-51.395554C747.817332 764.628718 735.891721 753.120616 721.154066 753.120616zM834.775846 727.398792c-14.739702 0-26.665313 11.494799-26.665313 25.697265l0 77.118402c0 14.214746 11.924587 25.701358 26.665313 25.701358 14.763239 0 26.688849-11.487635 26.688849-25.701358l0-77.118402C861.464695 738.894613 849.538061 727.398792 834.775846 727.398792zM834.775846 573.172221c-14.739702 0-26.665313 11.506055-26.665313 25.722848l0 51.395554c0 14.189164 11.924587 25.697265 26.665313 25.697265 14.763239 0 26.688849-11.508102 26.688849-25.697265l0-51.395554C861.464695 584.679299 849.538061 573.172221 834.775846 573.172221zM721.154066 573.195757c-14.741749 0-26.66736 11.507078-26.66736 25.709545L694.486706 701.735295c0 14.192234 11.924587 25.686009 26.66736 25.686009 14.736633 0 26.663266-11.492752 26.663266-25.686009L747.817332 598.905302C747.817332 584.702835 735.891721 573.195757 721.154066 573.195757zM606.050538 701.735295c-14.68956 0-26.640754 11.435447-26.640754 25.663496l0 102.81669c0 14.214746 11.951193 25.701358 26.640754 25.701358 14.787798 0 26.712385-11.487635 26.712385-25.701358L632.762923 727.398792C632.763946 713.170742 620.838336 701.735295 606.050538 701.735295zM606.050538 573.172221c-14.68956 0-26.640754 11.506055-26.640754 25.722848l0 25.709545c0 14.201443 11.951193 25.686009 26.640754 25.686009 14.787798 0 26.712385-11.484565 26.712385-25.686009l0-25.709545C632.763946 584.679299 620.838336 573.172221 606.050538 573.172221z"  ></path></symbol><symbol id="icon-save" viewBox="0 0 1024 1024"><path d="M753.38336182 141.58221435H164.75650023v740.8355713h694.48699952v-634.97543336L753.38336182 141.58221435z m-125.18749238 45.60699463v185.39428711H395.75778198v-185.39428711h232.43808747zM349.40921021 836.81079102V579.90065766l21.13494872-21.1812973h282.91168214l21.13494872 21.18129729v256.91013337H349.40921021z m463.48571777 0h-91.95556641V564.97641755L668.0092926 512H355.9907074L303.06063843 564.97641755v271.83437347H211.10507203V187.18920898h138.30413818v232.0672989h325.18157958V187.18920898h57.70397188l80.60016631 81.34174348v568.27983856z m-278.09143066-602.53143311h47.7853775v92.69714355H534.80349732v-92.69714355z"  ></path></symbol><symbol id="icon-link" viewBox="0 0 1024 1024"><path d="M928 896 416 896C380.656 896 352 867.344 352 832L352 448C352 412.656 380.656 384 416 384L512 384C529.68 384 544 398.336 544 416 544 433.68 529.68 448 512 448L416 448 416 832 928 832 928 448 768 448C750.32 448 736 433.68 736 416 736 398.336 750.32 384 768 384L928 384C963.344 384 992 412.656 992 448L992 832C992 867.344 963.344 896 928 896ZM608 640 512 640C494.336 640 480 625.68 480 608 480 590.32 494.336 576 512 576L608 576 608 192 96 192 96 576 256 576C273.68 576 288 590.32 288 608 288 625.68 273.68 640 256 640L96 640C60.656 640 32 611.344 32 576L32 192C32 156.656 60.656 128 96 128L608 128C643.344 128 672 156.656 672 192L672 576C672 611.344 643.344 640 608 640Z"  ></path></symbol><symbol id="icon-field" viewBox="0 0 1024 1024"><path d="M905.53963457 264.16739029H724.64948675c-27.47873238 0-49.71026963-22.23153725-49.71026963-49.71026963s22.23153725-49.71026963 49.71026963-49.71026963h180.89014782c27.47873238 0 49.71026963 22.23153725 49.71026962 49.71026963s-22.23153725 49.71026963-49.71026962 49.71026963zM905.53963457 474.0551954H724.64948675c-27.47873238 0-49.71026963-22.23153725-49.71026963-49.71026963s22.23153725-49.71026963 49.71026963-49.71026962h180.89014782c27.47873238 0 49.71026963 22.23153725 49.71026962 49.71026962s-22.23153725 49.71026963-49.71026962 49.71026963zM905.53963457 682.56215968H724.64948675c-27.47873238 0-49.71026963-22.23153725-49.71026963-49.71026963s22.23153725-49.71026963 49.71026963-49.71026963h180.89014782c27.47873238 0 49.71026963 22.23153725 49.71026962 49.71026963s-22.23153725 49.71026963-49.71026962 49.71026963zM905.53963457 892.44996478H121.22204708c-27.47873238 0-49.71026963-22.23153725-49.71026963-49.71026963s22.23153725-49.71026963 49.71026963-49.71026964h784.31758749c27.47873238 0 49.71026963 22.23153725 49.71026962 49.71026964s-22.23153725 49.71026963-49.71026962 49.71026963zM432.04931635 210.45268228v388.29243944c-4.41869063 46.39625165 19.88410785 67.52311625 73.04647953 63.10442561h19.88410785v33.14017975H219.67599776v-33.14017975H249.64024362c44.18690634 2.20934532 66.41844358-18.7794352 66.41844358-63.10442561V210.45268228h-102.8726413c-55.371717-11.04672658-85.19787878 22.09345317-89.61656943 99.55862334h-36.45419772l16.57008988-159.34903097h26.5121438c4.41869063 6.62803595 9.94205392 11.04672658 16.57008988 13.25607188 4.41869063 4.41869063 12.15139925 5.5233633 23.19812583 3.31401798h404.86252931c15.46541722 2.20934532 28.72148912-3.31401797 39.7682157-16.57008986h29.82616178l13.2560719 159.34903097h-33.14017975c-6.62803595-77.46517017-37.69695447-110.60534992-92.93058738-99.55862334h-99.55862335z"  ></path></symbol><symbol id="icon-field-1" viewBox="0 0 1024 1024"><path d="M373.64622187 123.6385184H87.22962987a24.27259307 24.27259307 0 0 0-24.27259307 24.27259307v285.20296213a24.27259307 24.27259307 0 0 0 24.27259307 24.27259307h285.2029632a24.27259307 24.27259307 0 0 0 24.272592-24.27259307V147.91111147a24.27259307 24.27259307 0 0 0-23.0589632-24.27259307z m-24.272592 285.2029632h-236.65777814V172.7905184h236.65777814zM859.70488853 185.53362987H468.91614827a24.27259307 24.27259307 0 1 0 0 48.54518506h390.78874026a24.27259307 24.27259307 0 0 0 0-48.54518506zM468.91614827 365.75762987h245.76a24.27259307 24.27259307 0 1 0 0-48.54518507H468.91614827a24.27259307 24.27259307 0 0 0 0 48.54518507zM373.64622187 566.61333333H87.22962987a24.27259307 24.27259307 0 0 0-24.27259307 24.27259307V876.08888853a24.27259307 24.27259307 0 0 0 24.27259307 24.27259307h285.2029632a24.27259307 24.27259307 0 0 0 24.272592-24.27259307v-285.20296213a24.27259307 24.27259307 0 0 0-23.0589632-24.27259307z m-24.272592 284.59614827h-236.65777814V615.1585184h236.65777814zM859.70488853 628.5084448H468.91614827a24.27259307 24.27259307 0 0 0 0 48.54518507h390.78874026a24.27259307 24.27259307 0 0 0 0-48.54518507zM714.67614827 760.18725973H468.91614827a24.27259307 24.27259307 0 0 0 0 48.54518507h245.76a24.27259307 24.27259307 0 0 0 0-48.54518507z"  ></path></symbol><symbol id="icon-fullscreen" viewBox="0 0 1024 1024"><path d="M290 236.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L169 160c-5.1-0.6-9.5 3.7-8.9 8.9L179 329.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zM642.7 423.7c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7L863.9 169c0.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.4zM845 694.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L734 787.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L855 864c5.1 0.6 9.5-3.7 8.9-8.9L845 694.9zM381.3 600.3c-3.1-3.1-8.2-3.1-11.3 0L236.3 733.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L160.1 855c-0.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-0.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z"  ></path></symbol><symbol id="icon-fullscreen-exit" viewBox="0 0 1024 1024"><path d="M391 240.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L280 333.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L401 410c5.1 0.6 9.5-3.7 8.9-8.9L391 240.9zM401.1 614.1L240.8 633c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7l18.9-160.1c0.6-5.1-3.7-9.4-8.8-8.8zM622.9 409.9L783.2 391c6.6-0.8 9.4-8.9 4.7-13.6L744 333.6 877.7 200c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.3c-3.1-3.1-8.2-3.1-11.3 0L690.3 279.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L614.1 401c-0.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L623 614c-5.1-0.6-9.5 3.7-8.9 8.9L633 783.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z"  ></path></symbol><symbol id="icon-money" viewBox="0 0 1048 1024"><path d="M524.2752 0C241.516134 0 12.288102 229.228032 12.288102 511.976038c0 117.534003 39.610982 225.814016 106.203955 312.231014l38.47895-40.06103C100.53417 708.109005 67.143168 613.944013 67.143168 511.976038c0-252.460954 204.668006-457.120973 457.132032-457.120973 252.45399 0 457.120973 204.660019 457.120973 457.120973 0 252.468019-204.668006 457.12896-457.120973 457.12896-91.12105 0-176.011981-26.66496-247.303987-72.611021l-34.630042 42.907955c80.855962 53.441024 177.760973 84.558029 281.934029 84.558029 282.755994 0 511.984026-229.224038 511.984026-511.984026C1036.258202 229.228032 807.03017 0 524.2752 0zM304.851149 566.841958 304.851149 621.697024 505.983181 621.697024 505.983181 767.966003 505.983181 767.97399 505.983181 767.97399 505.983181 804.54697 560.838144 804.54697 560.838144 767.97399 560.83712 767.97399 560.838144 767.966003 560.838144 621.697024 761.973146 621.697024 761.973146 566.841958 560.838144 566.841958 560.838144 457.136026 761.973146 457.136026 761.973146 402.270003 600.358195 402.270003 718.125158 284.499968 678.615142 244.985958 533.40713 390.177997 388.213146 244.985958 348.695142 284.499968 466.462106 402.270003 304.851149 402.270003 304.851149 457.136026 505.983181 457.136026 505.983181 566.841958Z"  ></path></symbol><symbol id="icon-integer" viewBox="0 0 1024 1024"><path d="M514.077312 702.673667c40.199561 0 70.936609-16.709567 92.211145-50.126654 1.876744-2.951215 3.570315-6.145977 5.279237-9.317203 19.652596 39.590694 52.199872 59.443857 97.718579 59.443857 40.196491 0 70.932516-16.709567 92.207052-50.126654 21.272489-33.419134 31.909757-80.859609 31.909757-142.327566 0-124.82596-39.174208-187.237405-117.515461-187.237405-41.081651 0-72.479755 16.748453-94.189196 50.242288-2.00568 3.100618-3.826142 6.459109-5.646604 9.812483-19.24225-40.009226-51.016931-60.055794-95.372138-60.055794-41.080627 0-72.475662 16.748453-94.186126 50.242288-21.714558 33.503045-32.573883 82.008782-32.573883 145.528468C393.919674 641.367393 433.973926 702.673667 514.077312 702.673667zM712.807469 381.76075c32.127721 0 48.196699 43.767829 48.196699 131.304512 0 87.220481-16.506952 130.828674-49.517787 130.828674-33.600259 0-50.39783-42.343387-50.39783-127.037325C661.089573 426.790316 678.329213 381.76075 712.807469 381.76075zM517.598508 381.76075c32.131815 0 48.196699 43.767829 48.196699 131.304512 0 87.220481-16.504906 130.828674-49.51574 130.828674-33.600259 0-50.395784-42.343387-50.395784-127.037325C465.884706 426.790316 483.124346 381.76075 517.598508 381.76075z"  ></path><path d="M285.863656 416.20933l0 285.908682 64.385403 0 0-381.212258-56.681954 0.181125c-29.344329 24.019043-64.11525 42.345434-104.314811 54.984289l0 65.651232c12.763698-1.575892 26.77583-5.64558 42.035372-12.20395C246.544139 422.962128 277.05913 424.424432 285.863656 416.20933z"  ></path><path d="M897.529587 66.766636 124.898615 66.766636c-35.558867 0-64.385403 28.827559-64.385403 64.385403l0 760.717641c0 35.558867 28.827559 64.387449 64.385403 64.387449l772.630972 0c35.558867 0 64.385403-28.828582 64.385403-64.387449L961.91499 131.153062C961.916013 95.594195 933.088454 66.766636 897.529587 66.766636zM897.529587 892.719025 124.898615 892.719025 124.898615 130.299625l772.630972 0L897.529587 892.719025z"  ></path></symbol><symbol id="icon-tiaoma" viewBox="0 0 1024 1024"><path d="M392.687614 869.933065l29.827329 0L422.514943 154.067958 392.687614 154.067958 392.687614 869.933065zM452.342272 869.933065l29.830399 0L482.172671 154.067958l-29.830399 0L452.342272 869.933065zM243.547899 869.933065l89.485057 0L333.032956 154.067958l-89.485057 0L243.547899 869.933065zM64.583924 869.933065l119.309316 0L183.89324 154.067958l-119.309316-0.002047L64.583924 869.933065zM512 869.933065l89.481987 0L601.481987 154.067958l-89.481987 0L512 869.933065zM840.102666 154.067958l0 715.865107L959.415053 869.933065 959.415053 154.067958 840.102666 154.067958zM750.621702 869.933065l59.654658 0L810.276361 154.067958l-59.654658 0L750.621702 869.933065zM631.309316 869.933065l59.654658 0L690.963974 154.067958l-59.654658 0L631.309316 869.933065z"  ></path></symbol><symbol id="icon-zuhe" viewBox="0 0 1042 1024"><path d="M1036.74608 135.558l-5.363-2.926a35.596 35.596 0 0 0-7.315-7.314L814.39208 4.876a36.084 36.084 0 0 0-34.133 0L570.58308 125.318l-5.852 5.852-8.29 4.876a10.728 10.728 0 0 0-5.363 9.264v20.48l-10.24-5.851a36.084 36.084 0 0 0-36.084 0l-10.24 5.851v-19.504a10.728 10.728 0 0 0-6.827-10.728l-8.29-4.876s-3.413-4.389-5.85-5.852L263.87008 4.876a36.084 36.084 0 0 0-36.084 0L18.11008 125.318a35.109 35.109 0 0 0-7.802 7.802l-5.364 2.926a10.728 10.728 0 0 0-4.876 10.24v263.802a10.728 10.728 0 0 0 5.364 9.264l5.364 2.926a34.621 34.621 0 0 0 7.802 7.802l209.676 120.442a36.084 36.084 0 0 0 36.084 0l11.703-6.827v10.24a36.571 36.571 0 0 0 16.579 31.208l5.364 2.926-19.018 10.727a10.728 10.728 0 0 0-5.363 9.265v265.265a10.24 10.24 0 0 0 4.876 8.777 35.596 35.596 0 0 0 14.14 16.579l209.677 120.442a36.084 36.084 0 0 0 36.084 0l209.676-120.442a35.596 35.596 0 0 0 14.14-16.58 10.24 10.24 0 0 0 4.877-8.776V608.06a10.728 10.728 0 0 0-5.364-9.265L743.20008 588.07l5.365-2.926a36.571 36.571 0 0 0 18.041-31.208v-10.24l11.703 6.827a36.084 36.084 0 0 0 36.084 0l209.676-120.442a36.084 36.084 0 0 0 7.315-7.314l5.363-2.926a10.728 10.728 0 0 0 5.364-9.265v-264.29a10.728 10.728 0 0 0-5.364-10.727zM526.21008 466.164a10.728 10.728 0 0 0-10.24 0l-163.84 92.16-23.893-14.141v-31.208l146.286-83.383 5.851-5.851 7.314-4.389a10.728 10.728 0 0 0 5.364-9.264V226.743l28.282-16.092 28.282 16.092v183.345a10.728 10.728 0 0 0 5.364 9.264l8.29 4.389a35.109 35.109 0 0 0 5.85 5.851l146.286 83.383v30.72l-23.893 14.141z"  ></path></symbol><symbol id="icon-col-2" viewBox="0 0 1024 1024"><path d="M921.6 0H102.4C45.8 0 0 45.8 0 102.4v819.3C0 978.2 45.8 1024 102.4 1024h819.3c56.5 0 102.4-45.8 102.4-102.4V102.4C1024 45.8 978.2 0 921.6 0zM435.2 819.2h-256c-14.1 0-25.6-11.5-25.6-25.6 0-14.1 11.5-25.6 25.6-25.6h256c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5H190.1c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h234.2c20.1 0 36.5 16.4 36.5 36.5v387.8z m384 190.1h-256c-14.1 0-25.6-11.5-25.6-25.6 0-14.1 11.5-25.6 25.6-25.6h256c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5H599.7c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h234.2c20.1 0 36.5 16.4 36.5 36.5v387.8z"  ></path></symbol><symbol id="icon-col-3" viewBox="0 0 1024 1024"><path d="M921.6 0H102.4C45.8 0 0 45.8 0 102.4v819.3C0 978.2 45.8 1024 102.4 1024h819.3c56.5 0 102.4-45.8 102.4-102.4V102.4C1024 45.8 978.2 0 921.6 0zM307.2 819.2H204.8c-14.1 0-25.6-11.5-25.6-25.6 0-14.1 11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8z m230.4 190.1H460.8c-14.1 0-25.6-11.5-25.6-25.6 0-14.1 11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8z m230.4 190.1H716.8c-14.1 0-25.6-11.5-25.6-25.6 0-14.1 11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8z"  ></path></symbol><symbol id="icon-col-4" viewBox="0 0 1024 1024"><path d="M921.6 0H102.4C45.8 0 0 45.8 0 102.4v819.3C0 978.2 45.8 1024 102.4 1024h819.3c56.5 0 102.4-45.8 102.4-102.4V102.4C1024 45.8 978.2 0 921.6 0zM113.3 241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3z m128 577.9H138.9c-14.1 0-25.6-11.5-25.6-25.6s11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m214.6 0H353.5c-14.1 0-25.6-11.5-25.6-25.6s11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6s-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5H445c20.1 0 36.5 16.4 36.5 36.5v387.8z m189.1 190.1H568.2c-14.1 0-25.6-11.5-25.6-25.6s11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6s-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8z m189 190.1H782.8c-14.1 0-25.6-11.5-25.6-25.6s11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6s-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8z"  ></path></symbol><symbol id="icon-col-1" viewBox="0 0 1024 1024"><path d="M921.6 0H102.4C45.8 0 0 45.8 0 102.4v819.3C0 978.2 45.8 1024 102.4 1024h819.3c56.5 0 102.4-45.8 102.4-102.4V102.4C1024 45.8 978.2 0 921.6 0z m-76.8 819.2H179.2c-14.1 0-25.6-11.5-25.6-25.6s11.5-25.6 25.6-25.6h665.6c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5H190.1c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h643.8c20.1 0 36.5 16.4 36.5 36.5v387.8z"  ></path></symbol><symbol id="icon-zuzhijuese" viewBox="0 0 1024 1024"><path d="M853.333333 256h-341.333333l-85.333333-85.333333H170.666667a85.333333 85.333333 0 0 0-85.333334 85.333333v512a85.333333 85.333333 0 0 0 85.333334 85.333333h682.666666a85.333333 85.333333 0 0 0 85.333334-85.333333V341.333333a85.333333 85.333333 0 0 0-85.333334-85.333333z m-341.333333 85.333333a106.666667 106.666667 0 1 1-106.666667 106.666667A106.24 106.24 0 0 1 512 341.333333z m192 426.666667h-384v-42.666667a128 128 0 0 1 128-128h128a128 128 0 0 1 128 128v42.666667z"  ></path></symbol><symbol id="icon-hashtag" viewBox="0 0 1024 1024"><path d="M870.4 448a64 64 0 0 0 0-128h-114.56l26.88-148.48a64 64 0 0 0-126.08-23.04l-32 171.52h-156.8l26.88-148.48a64 64 0 0 0-126.08-23.04l-32 171.52H198.4a64 64 0 1 0 0 128h116.16l-23.36 128H153.6a64 64 0 0 0 0 128h114.56l-26.88 148.48a64 64 0 1 0 126.08 23.04l32-171.52h157.76l-26.88 148.48a64 64 0 1 0 126.08 23.04l32-171.52h137.28a64 64 0 1 0 0-128h-116.16l23.36-128z m-291.2 128h-157.76l23.36-128h157.76z"  ></path></symbol><symbol id="icon-formula" viewBox="0 0 1024 1024"><path d="M471.2 358.3h-130l19-90.4a133.5 133.5 0 0 1 130.3-106.2h52.7a32.9 32.9 0 1 0 0-65.7h-52.7c-93.8 0-175.6 66.7-194.6 158.6l-21.8 103.7H128.8a32.9 32.9 0 0 0 0 65.7h131.6l-97.3 464.5a32.7 32.7 0 0 0 25.5 38.8 30.5 30.5 0 0 0 6.7 0.7 32.9 32.9 0 0 0 32.1-26.2L327.5 424h143.7a32.9 32.9 0 1 0 0-65.7zM758.4 712l160-160a32.8 32.8 0 1 0-46.5-46.4L712 665.5 552 505.6a32.8 32.8 0 1 0-46.4 46.4l160 160-160 159.9a32.8 32.8 0 1 0 46.4 46.5l160-160 159.9 160a32.9 32.9 0 0 0 46.5-46.5z"  ></path></symbol><symbol id="icon-t" viewBox="0 0 1024 1024"><path d="M851.968 167.936l0 109.568-281.6 0 0 587.776-116.736 0 0-587.776-281.6 0 0-109.568 679.936 0z"  ></path></symbol><symbol id="icon-t-filled" viewBox="0 0 1024 1024"><path d="M832 64 192 64C121.344 64 64 121.344 64 192l0 640c0 70.656 57.344 128 128 128l640 0c70.656 0 128-57.344 128-128L960 192C960 121.344 902.656 64 832 64zM768 320 576 320l0 448c0 35.392-28.608 64-64 64s-64-28.608-64-64L448 320 256 320C220.608 320 192 291.392 192 256s28.608-64 64-64l512 0c35.392 0 64 28.608 64 64S803.392 320 768 320z"  ></path></symbol><symbol id="icon-select" viewBox="0 0 1024 1024"><path d="M912.14545437 992L111.85454563 992A79.85454563 79.85454563 0 0 1 32 912.14545437L32 111.85454563A79.85454563 79.85454563 0 0 1 111.85454563 32l800.29090875 0A79.85454563 79.85454563 0 0 1 992 111.85454563l0 800.29090875A79.85454563 79.85454563 0 0 1 912.14545437 992zM111.85454563 111.85454563l-1e-8 800.29090875 800.29090875 0L912.14545437 111.85454563z"  ></path><path d="M224 520.72727281l205.52727281 205.52727282 370.47272719-370.47272719-58.03636406-58.03636406-312.43636313 311.99999999-147.49090875-147.49090874L224 520.72727281z"  ></path></symbol><symbol id="icon-number" viewBox="0 0 1224 1024"><path d="M0 901.567122h1224.462246v122.432878H0zM122.165946 745.589771h145.12211V10.310343h-101.137624a113.030935 113.030935 0 0 1-5.279325 23.490029C142.393471 95.076129 101.063477 124.690768 14.859223 124.690768h-13.198312v109.279055h120.490205zM400.991403 563.808979a402.222256 402.222256 0 0 0-35.175725 181.780792h397.550943v-130.722604H538.194526c7.044043-27.568159 17.587863-45.971647 49.248981-82.719307 7.044043-8.17109 14.073256-16.31252 21.117299-23.490028 139.842786-146.041543 161.835029-194.030012 156.555704-303.309067C757.197523 54.205852 682.441692-17.272645 517.967001 6.217384a147.450352 147.450352 0 0 0-62.447293 22.466789c-61.572349 39.832208-85.31448 88.843916-87.983801 188.928641 0 10.217569 0 20.420309 0.874944 30.637879h137.203124c-0.874944-9.194329-0.874944-17.365419-0.874945-25.536509 2.639662-78.596688 24.631905-108.255815 58.932687-110.287465 33.425837-1.02324 56.352342 26.544919 57.167968 92.922046 0.874944 71.478497-19.278433 116.426905-118.740317 218.54328-55.373591 57.197627-80.005496 91.943295-101.107965 139.916934zM819.644816 529.078141a246.452519 246.452519 0 0 0 0.874944 43.910338c13.198312 127.652884 69.491336 181.780792 197.900528 181.780792 120.490205 0 179.437721-53.104668 198.716153-171.563223 21.117299-130.722604-20.227525-209.348951-80.910099-228.760849a39.209366 39.209366 0 0 0-14.9482-3.06972c30.786174-8.17109 55.41808-31.661119 73.005942-75.630775 8.793931-21.443549 13.198312-49.026538 13.198311-87.820676-1.764718-136.847214-84.439536-212.418671-242.759958-180.757552-72.116168 14.295699-124.894586 75.630775-136.328179 162.368893-2.639662 16.31252-2.639662 32.62504-1.749888 49.026537h134.563461a150.490413 150.490413 0 0 1-0.889774-19.411899c2.639662-55.151147 16.712918-78.596688 42.219768-85.789026 38.705161-10.20274 60.682575 14.295699 63.322237 84.765787 3.514607 76.594697-25.50685 110.287465-87.954142 109.264225-5.279325-1.02324-11.433594-1.02324-16.712919-2.04648v106.209335h13.198312c84.439536 0 101.152454 17.365419 101.152454 115.403665 0 83.742546-12.323367 110.287465-43.094712 117.435315-43.094712 11.240809-66.851673-15.318939-73.005942-91.943295a104.933993 104.933993 0 0 1 0-23.490029z"  ></path></symbol><symbol id="icon-shangchuan" viewBox="0 0 1024 1024"><path d="M646.791 799v-31.447c0-8.837 7.164-16 16-16H735c88.127 0 159.569-71.46 159.569-159.61 0-88.15-71.442-159.61-159.569-159.61-11.454 0-26.738 2.548-45.854 7.645a7.931 7.931 0 0 1-9.616-10.01c7.907-25.529 11.861-45.89 11.861-61.083 0-99.1-80.316-179.438-179.391-179.438-99.075 0-179.391 80.337-179.391 179.438 0 15.193 3.954 35.554 11.861 61.083a7.929 7.929 0 0 1-9.616 10.01c-19.116-5.097-34.4-7.646-45.854-7.646-88.127 0-159.569 71.46-159.569 159.61 0 88.15 71.442 159.61 159.569 159.61h73.2c8.837 0 16 7.164 16 16V799c0 8.837-7.163 16-16 16H289c-123.16 0-223-99.866-223-223.058 0-116.51 89.304-212.156 203.18-222.188-0.002-0.29-0.002-0.58-0.002-0.87C269.178 234.745 377.893 126 512 126s242.822 108.743 242.822 242.885l-0.001 0.869C868.696 379.786 958 475.432 958 591.942 958 715.134 858.16 815 735 815h-72.209c-8.836 0-16-7.163-16-16z m-168.66-301.848l-79.364 69.93c-13.636 11.031-33.643 8.931-44.685-4.691-11.043-13.622-8.94-33.607 4.696-44.638l126.696-108.219c11-11.252 28.92-12.857 41.826-3.141L664.347 516.97c14.014 10.55 16.814 30.449 6.253 44.447-10.56 14-30.48 16.796-44.494 6.247l-84.431-70.973v286.57c0 17.529-14.225 31.738-31.772 31.738-17.547 0-31.772-14.21-31.772-31.738v-286.11z"  ></path></symbol><symbol id="icon-drag" viewBox="0 0 1024 1024"><path d="M909.3 506.3L781.7 405.6c-4.7-3.7-11.7-0.4-11.7 5.7V476H548V254h64.8c6 0 9.4-7 5.7-11.7L517.7 114.7c-2.9-3.7-8.5-3.7-11.3 0L405.6 242.3c-3.7 4.7-0.4 11.7 5.7 11.7H476v222H254v-64.8c0-6-7-9.4-11.7-5.7L114.7 506.3c-3.7 2.9-3.7 8.5 0 11.3l127.5 100.8c4.7 3.7 11.7 0.4 11.7-5.7V548h222v222h-64.8c-6 0-9.4 7-5.7 11.7l100.8 127.5c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7 0.4-11.7-5.7-11.7H548V548h222v64.8c0 6 7 9.4 11.7 5.7l127.5-100.8c3.7-2.9 3.7-8.5 0.1-11.4z"  ></path></symbol><symbol id="icon-grid" viewBox="0 0 1024 1024"><path d="M128 469.333333 469.333333 469.333333 469.333333 128 128 128M128 896 469.333333 896 469.333333 554.666667 128 554.666667M554.666667 896 896 896 896 554.666667 554.666667 554.666667M554.666667 128 554.666667 469.333333 896 469.333333 896 128"  ></path></symbol><symbol id="icon-trash" viewBox="0 0 1024 1024"><path d="M394.95161173 414.51738453l0 351.0632448q0 8.5327872-5.4853632 14.0181504t-14.0181504 5.4853632l-39.0070272 0q-8.5327872 0-14.0181504-5.4853632t-5.4853632-14.0181504l0-351.0632448q0-8.5327872 5.4853632-14.0181504t14.0181504-5.4853632l39.0070272 0q8.5327872 0 14.0181504 5.4853632t5.4853632 14.0181504z m156.0281088 0l0 351.0632448q0 8.5327872-5.4853632 14.0181504t-14.0181504 5.4853632l-39.0070272 0q-8.5327872 0-14.0181504-5.4853632t-5.4853632-14.0181504l0-351.0632448q0-8.5327872 5.4853632-14.0181504t14.0181504-5.4853632l39.0070272 0q8.5327872 0 14.0181504 5.4853632t5.4853632 14.0181504z m156.0281088 0l0 351.0632448q0 8.5327872-5.4853632 14.0181504t-14.0181504 5.4853632l-39.0070272 0q-8.5327872 0-14.0181504-5.4853632t-5.4853632-14.0181504l0-351.0632448q0-8.5327872 5.4853632-14.0181504t14.0181504-5.4853632l39.0070272 0q8.5327872 0 14.0181504 5.4853632t5.4853632 14.0181504z m78.0140544 441.2669952l0-577.7915904-546.0983808 0 0 577.7915904q0 13.4086656 4.2663936 24.6841344t8.8375296 16.4560896 6.3995904 5.1806208l507.0913536 0q1.8284544 0 6.3995904-5.1806208t8.8375296-16.4560896 4.2663936-24.6841344z m-409.5737856-655.8056448l273.0491904 0-29.2552704-71.3097216q-4.2663936-5.4853632-10.3612416-6.7043328l-193.2066816 0q-6.094848 1.2189696-10.3612416 6.7043328z m565.6018944 19.5035136l0 39.0070272q0 8.5327872-5.4853632 14.0181504t-14.0181504 5.4853632l-58.5105408 0 0 577.7915904q0 50.5872384-28.6457856 87.4610688t-68.8717824 36.8738304l-507.0913536 0q-40.2259968 0-68.8717824-35.6548608t-28.6457856-86.2420992l0-580.2295296-58.5105408 0q-8.5327872 0-14.0181504-5.4853632t-5.4853632-14.0181504l0-39.0070272q0-8.5327872 5.4853632-14.0181504t14.0181504-5.4853632l188.3308032 0 42.663936-101.7839616q9.142272-22.5509376 32.9121792-38.3975424t48.1492992-15.8466048l195.035136 0q24.379392 0 48.1492992 15.8466048t32.9121792 38.3975424l42.663936 101.7839616 188.3308032 0q8.5327872 0 14.0181504 5.4853632t5.4853632 14.0181504z"  ></path></symbol><symbol id="icon-ic" viewBox="0 0 1536 1024"><path d="M1187.84 460.8h-327.68c-22.528 0-40.96-18.432-40.96-40.96V92.16c0-22.528 18.432-40.96 40.96-40.96h327.68c22.528 0 40.96 18.432 40.96 40.96v327.68c0 22.528-18.432 40.96-40.96 40.96z"  ></path><path d="M1126.4 512v358.4c0 28.16-23.04 51.2-51.2 51.2H409.6c-28.16 0-51.2-23.04-51.2-51.2V307.2c0-28.16 23.04-51.2 51.2-51.2h358.4V153.6H389.12c-45.056 0-81.92 36.864-81.92 81.92v655.36c0 45.056 36.864 81.92 81.92 81.92h706.56c45.056 0 81.92-36.864 81.92-81.92v-378.88h-51.2z"  ></path></symbol><symbol id="icon-date" viewBox="0 0 1024 1024"><path d="M205 552h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H205c-13.3 0-24 10.7-24 24s10.7 24 24 24zM453 552h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H453c-13.3 0-24 10.7-24 24s10.7 24 24 24zM701 552h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H701c-13.3 0-24 10.7-24 24s10.7 24 24 24zM205 687h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H205c-13.3 0-24 10.7-24 24s10.7 24 24 24zM453 687h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H453c-13.3 0-24 10.7-24 24s10.7 24 24 24zM701 687h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H701c-13.3 0-24 10.7-24 24s10.7 24 24 24zM205 823h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H205c-13.3 0-24 10.7-24 24s10.7 24 24 24zM453 823h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H453c-13.3 0-24 10.7-24 24s10.7 24 24 24zM701 823h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H701c-13.3 0-24 10.7-24 24s10.7 24 24 24z"  ></path><path d="M870 116H745V64c0-13.3-10.7-24-24-24s-24 10.7-24 24v52H327V64c0-13.3-10.7-24-24-24s-24 10.7-24 24v52H154c-51.9 0-94 42.1-94 94v692c0 51.9 42.1 94 94 94h716c51.9 0 94-42.1 94-94V210c0-51.9-42.1-94-94-94z m46 786c0 25.4-20.6 46-46 46H154c-25.4 0-46-20.6-46-46V387h808v515z m0-563H108V210c0-25.4 20.6-46 46-46h125v68c0 13.3 10.7 24 24 24s24-10.7 24-24v-68h370v68c0 13.3 10.7 24 24 24s24-10.7 24-24v-68h125c25.4 0 46 20.6 46 46v129z"  ></path></symbol><symbol id="icon-fuwenbenkuang" viewBox="0 0 1024 1024"><path d="M218.316 307.727h87.886v205.06h-29.297v29.295h117.179v-29.294H364.79V307.727h87.882v29.293h29.294v-87.882H189.022v87.882h29.294v-29.293z m322.242 58.59h292.945v58.588H540.558v-58.588z m0 117.177h292.945v58.588H540.558v-58.588z m-351.536 117.18h644.481v58.588h-644.48v-58.587z m0 117.176h644.481v58.588h-644.48V717.85z m351.536-468.713h292.945v58.589H540.558v-58.589z m420.923 713.13H61.045V63.309h900.436v898.958z m-864.62-35.816h828.804V99.125H96.861V926.45z"  ></path></symbol><symbol id="icon-bars" viewBox="0 0 1024 1024"><path d="M170.666667 490.666667l682.666666 0 0 42.666666-682.666666 0 0-42.666666Z"  ></path><path d="M170.666667 704l682.666666 0 0 42.666667-682.666666 0 0-42.666667Z"  ></path><path d="M170.666667 277.333333l682.666666 0 0 42.666667-682.666666 0 0-42.666667Z"  ></path></symbol><symbol id="icon-slider" viewBox="0 0 1024 1024"><path d="M901.12 122.88h-757.76c-20.48 0-34.133333 13.653333-34.133333 34.133333v6.826667c0 20.48 13.653333 34.133333 34.133333 34.133333h757.76c6.826667 0 13.653333 0 20.48-6.826666s6.826667-13.653333 6.826667-20.48v-6.826667c0-27.306667-13.653333-40.96-27.306667-40.96z"  ></path><path d="M764.586667 88.746667h-68.266667c-20.48 0-34.133333 13.653333-34.133333 34.133333v68.266667c0 20.48 13.653333 34.133333 34.133333 34.133333h68.266667c20.48 0 34.133333-13.653333 34.133333-34.133333v-68.266667c0-20.48-13.653333-34.133333-34.133333-34.133333zM901.12 430.08h-757.76c-20.48 0-34.133333 13.653333-34.133333 34.133333v6.826667c0 20.48 13.653333 34.133333 34.133333 34.133333h757.76c20.48 0 34.133333-13.653333 34.133333-34.133333v-6.826667c-6.826667-20.48-20.48-34.133333-34.133333-34.133333z"  ></path><path d="M552.96 395.946667h-68.266667c-20.48 0-34.133333 13.653333-34.133333 34.133333v68.266667c0 20.48 13.653333 34.133333 34.133333 34.133333h68.266667c20.48 0 34.133333-13.653333 34.133333-34.133333v-68.266667c0-20.48-13.653333-34.133333-34.133333-34.133333zM901.12 737.28h-757.76c-6.826667 0-13.653333 0-20.48 6.826667-6.826667 6.826667-6.826667 13.653333-6.826667 20.48v6.826666c0 20.48 13.653333 34.133333 34.133334 34.133334h757.76c20.48 0 34.133333-13.653333 34.133333-34.133334v-6.826666c-13.653333-13.653333-27.306667-27.306667-40.96-27.306667z"  ></path><path d="M354.986667 703.146667h-68.266667c-20.48 0-34.133333 13.653333-34.133333 34.133333v68.266667c0 20.48 13.653333 34.133333 34.133333 34.133333h68.266667c20.48 0 34.133333-13.653333 34.133333-34.133333v-68.266667c0-20.48-13.653333-34.133333-34.133333-34.133333z"  ></path></symbol><symbol id="icon-color" viewBox="0 0 1024 1024"><path d="M297.78046416 323.45884442c0-38.83614815 31.06891852-69.90506667 66.02145186-69.90506666s66.02145185 31.06891852 66.02145186 69.90506666S402.63806416 389.48029628 363.80191602 389.48029628s-66.02145185-31.06891852-66.02145186-66.02145186zM165.73756046 459.38536294C165.73756046 420.54921479 196.80647899 389.48029628 231.75901232 389.48029628s66.02145185 31.06891852 66.02145184 69.90506666-31.06891852 66.02145185-66.02145184 66.02145185-66.02145185-31.06891852-66.02145186-66.02145185zM476.42674566 276.85546665c0-38.83614815 31.06891852-69.90506667 66.02145184-69.90506667 34.95253333 0 66.02145185 31.06891852 66.02145185 69.90506665s-31.06891852 66.02145185-66.02145185 66.02145186c-34.95253333 0-66.02145185-31.06891852-66.02145184-66.02145184zM476.42674566 661.33333331c0-50.48699259 38.83614815-89.32314075 89.32314073-89.32314076s89.32314075 38.83614815 89.32314074 89.32314076-38.83614815 89.32314075-89.32314074 89.32314075-89.32314075-38.83614815-89.32314073-89.32314075z"  ></path><path d="M519.14650861 164.23063701C297.78046416 164.23063701 119.13418269 315.69161479 119.13418269 505.98874073s178.64628148 337.87448889 400.01232592 337.87448888c62.13783703 0 108.74121482-7.76722963 147.57736297-23.30168888 27.1853037-11.65084445 50.48699259-27.1853037 62.13783703-46.60337779 27.1853037-42.71976297 7.76722963-104.8576-11.65084445-143.69374815-42.71976297-89.32314075-3.88361482-128.15928889 15.53445927-139.81013333 11.65084445-7.76722963 23.30168889-11.65084445 34.95253333-11.65084445 19.41807408 0 50.48699259 7.76722963 81.55591112 54.37060741 15.53445925 27.1853037 34.95253333 34.95253333 42.71976295 34.95253334 15.53445925 0 27.1853037-27.1853037 27.18530371-69.90506667 0-182.5298963-178.64628148-333.99087408-400.01232593-333.99087408z m0 722.35235556c-116.50844445 0-229.13327408-38.83614815-310.68918518-112.62482963-42.71976297-34.95253333-73.78868148-77.6722963-97.09037037-124.27567408-23.30168889-42.71976297-34.95253333-93.20675555-34.95253333-147.57736296S88.06526416 401.13114073 111.36695306 350.64414813c23.30168889-46.60337778 54.37060741-85.43952592 97.09037037-124.27567407C290.01323454 156.46340739 402.63806416 117.62725923 519.14650861 117.62725923s229.13327408 38.83614815 310.68918519 112.62482963c42.71976297 34.95253333 73.78868148 77.6722963 97.09037036 124.27567408 23.30168889 46.60337778 34.95253333 97.09037037 34.95253334 151.46097777 0 85.43952592-34.95253333 112.62482963-69.90506667 112.62482963-27.1853037 0-58.25422222-19.41807408-81.5559111-54.3706074-15.53445925-23.30168889-31.06891852-34.95253333-42.71976297-34.95253333-3.88361482 0-7.76722963 0-11.65084444 3.88361481-23.30168889 15.53445925-11.65084445 58.25422222 0 77.67229629 34.95253333 73.78868148 38.83614815 139.81013333 7.76722962 190.29712592-34.95253333 58.25422222-116.50844445 85.43952592-244.66773333 85.43952592z"  ></path></symbol><symbol id="icon-radio-active" viewBox="0 0 1024 1024"><path d="M512 4.533c-279.803 0-507.467 227.665-507.467 507.467 0 279.839 227.629 507.467 507.467 507.467 279.839 0 507.467-227.629 507.467-507.467 0-279.803-227.629-507.467-507.467-507.467zM512 946.65c-239.68 0-434.65-195.006-434.65-434.65 0-239.68 194.97-434.65 434.65-434.65 239.644 0 434.65 194.97 434.65 434.65 0 239.644-195.006 434.65-434.65 434.65zM512 329.955c-100.38 0-182.045 81.665-182.045 182.045s81.665 182.045 182.045 182.045 182.045-81.665 182.045-182.045-81.665-182.045-182.045-182.045z"  ></path></symbol><symbol id="icon-input" viewBox="0 0 1669 1024"><path d="M1398.66921433 732.06637047c0 70.6134846-45.10390102 127.64034389-100.83679598 127.64034389L366.82504671 859.70671436C311.18457777 859.70671436 265.98825072 802.67985575 265.98825072 732.06637047L265.98825072 292.02605556C265.98825072 221.41257027 311.18457777 164.38571167 366.82504671 164.38571167l931.09979834 0c55.73289429 0 100.836796 57.0268586 100.83679599 127.54791786L1398.76164038 732.06637047zM1362.43821147 286.48049352c0-51.01916714-41.40686012-92.42602727-92.42602726-92.42602726L394.83013288 194.05446626c-51.01916714 0-92.42602727 41.40686012-92.42602726 92.42602726l0 451.13143898c0 51.11159317 41.40686012 92.42602727 92.42602726 92.42602727l875.18205134 0c51.01916714 0 92.42602727-41.3144341 92.42602725-92.42602727L1362.43821147 286.48049352z"  ></path><path d="M447.23569039 723.84045447c0 16.0821286-12.93964383 28.9293464-28.92934643 28.92934639l0 0c-15.89727654 0-28.9293464-12.8472178-28.92934639-28.9293464l0-392.81061538c0-15.89727654 12.93964383-28.9293464 28.92934639-28.92934639l0 0c15.89727654 0 28.9293464 12.93964383 28.92934643 28.92934639L447.23569039 723.84045447z"  ></path><path d="M556.94538452 690.75193637m-34.65976047 0a0.25460031 0.25460031 0 1 0 69.31952028 0 0.25460031 0.25460031 0 1 0-69.31952028 0Z"  ></path><path d="M691.33282806 690.75193637m-34.65976048 0a0.25460031 0.25460031 0 1 0 69.31952028 0 0.25460031 0.25460031 0 1 0-69.31952028 0Z"  ></path><path d="M821.2838225 690.75193637m-34.65976049 0a0.25460031 0.25460031 0 1 0 69.3195203 0 0.25460031 0.25460031 0 1 0-69.3195203 0Z"  ></path></symbol><symbol id="icon-switch" viewBox="0 0 1024 1024"><path d="M729.008 806.496 295.008 806.496C140.912 806.496 16 681.584 16 527.504l0-31.008c0-154.08 124.912-278.992 279.008-278.992l434 0c154.08 0 279.008 124.912 279.008 278.992l0 31.008C1008 681.584 883.088 806.496 729.008 806.496zM946.96 496.768c0-119.696-97.04-216.736-216.736-216.736L294.384 280.032c-119.696 0-216.736 97.04-216.736 216.736l0 31.008c0 119.696 97.04 216.736 216.736 216.736L730.24 744.512c119.696 0 216.736-97.04 216.736-216.736L946.976 496.768zM702.32 672.576c-90.72 0-164.272-73.536-164.272-164.256 0-90.72 73.552-164.272 164.272-164.272 90.72 0 164.272 73.536 164.272 164.272C866.592 599.04 793.04 672.576 702.32 672.576z"  ></path></symbol><symbol id="icon-checkbox" viewBox="0 0 1024 1024"><path d="M797.8 248.4c-11.4-11.6-30.2-11.6-41.6-0.2L409.2 592.4l-146.8-148c-11.4-11.6-30.2-11.6-41.6-0.2l-55.8 55.4c-11.6 11.4-11.6 30.2-0.2 41.6l222.8 224.6c11.4 11.6 30.2 11.6 41.6 0.2l423.6-420.2c11.6-11.4 11.6-30.2 0.2-41.6l-55.2-55.8z"  ></path><path d="M857 59h-696c-55.2 0-100 44.8-100 100v696c0 55.2 44.8 100 100 100h696c55.2 0 100-44.8 100-100v-696c0-55.2-44.8-100-100-100z m53.8 777.8c0 39.8-32.2 72-72 72H179.2c-39.8 0-72-32.2-72-72V177.2c0-39.8 32.2-72 72-72h659.6c39.8 0 72 32.2 72 72v659.6z"  ></path></symbol><symbol id="icon-tooltip" viewBox="0 0 1024 1024"><path d="M511.999488 64.900126c-247.025093 0-447.290209 200.147436-447.290209 447.085548 0 246.909459 200.264093 447.115224 447.290209 447.115224s447.290209-200.205764 447.290209-447.115224C959.288674 265.046538 759.024581 64.900126 511.999488 64.900126L511.999488 64.900126zM511.999488 895.276267c-211.386408 0-383.348921-172.020842-383.348921-383.291616 0-211.299427 171.962513-383.203612 383.348921-383.203612 211.444736 0 383.408273 171.904185 383.408273 383.203612C895.407762 723.255425 723.444225 895.276267 511.999488 895.276267L511.999488 895.276267zM511.999488 256.486582c-88.048335 0-159.734004 71.685669-159.734004 159.647023l0 32.028461 63.881936 0 0-32.028461c0-52.759621 42.976814-95.764064 95.852068-95.764064 52.876278 0 95.852068 43.004443 95.852068 95.764064 0 35.987632-20.73116 56.019875-54.506405 85.835947-32.66905 28.767184-73.257467 64.521502-73.257467 126.716007l0 42.97579 63.881936 0 0-42.97579c0-31.679513 19.624966-50.547233 51.595099-78.848813 33.95023-29.815049 76.168774-67.083861 76.168774-133.703141C671.733493 328.172251 600.106152 256.486582 511.999488 256.486582L511.999488 256.486582zM480.087685 703.57213l63.881936 0 0 63.940265L480.087685 767.512395 480.087685 703.57213 480.087685 703.57213zM480.087685 703.57213"  ></path></symbol><symbol id="icon-tupian" viewBox="0 0 1170 1024"><path d="M1060.432916 0H109.768851A109.768851 109.768851 0 0 0 0 109.768851v804.462298a109.768851 109.768851 0 0 0 109.768851 109.768851h950.664065a109.768851 109.768851 0 0 0 109.768851-109.768851V109.768851A109.768851 109.768851 0 0 0 1060.432916 0zM109.768851 73.218409h950.781591a36.550442 36.550442 0 0 1 36.550442 36.550442v430.731092c-58.762768-48.302996-161.127511-113.529668-283.706646-113.529669-113.059566 0-224.473775 87.556525-332.127166 172.292437-82.267876 64.874096-167.943992 131.981178-227.76449 131.981177-84.030759 0-155.956387-61.818432-180.284173-85.323539V109.768851a36.667967 36.667967 0 0 1 36.550442-36.550442z m950.781591 877.680707H109.768851a36.550442 36.550442 0 0 1-36.550442-36.550442V740.645931c43.837025 31.026742 107.300815 63.698841 180.284173 63.698841 85.206014 0 176.288305-71.690577 273.011822-147.612074s199.793412-156.66154 286.99736-156.66154c157.131642 0 282.061288 138.327557 283.119018 139.737863v274.422128a36.550442 36.550442 0 0 1-36.550442 36.550442z"  ></path><path d="M303.450935 501.716516a147.259497 147.259497 0 1 0-147.259497-147.612074 147.259497 147.259497 0 0 0 147.259497 147.612074z m0-220.948009a73.335935 73.335935 0 1 1-72.748307 73.335935 73.335935 73.335935 0 0 1 73.21841-73.335935z"  ></path></symbol><symbol id="icon-rate" viewBox="0 0 1024 1024"><path d="M512.161682 66.028832c-7.767917 0-23.348778 6.231935-43.649126 46.343491-48.821939 87.162152-125.945457 229.404784-125.945457 229.404784s-140.995221 27.38572-231.952816 44.577265c-44.614104 7.344269-59.193147 47.083341-36.548404 75.05644 63.996546 77.008908 177.216167 204.165959 177.216167 204.165959s-18.48091 139.628084-28.888957 234.942917c-3.384074 36.602639 15.915481 57.597813 42.837644 57.597813 8.772804 0 18.367323-2.248204 28.256554-6.9022 76.339666-37.858236 192.462406-95.745644 218.751143-108.816335 25.840528 13.211906 140.817166 72.034617 216.300324 110.004393 9.775644 4.686742 19.295462 6.934946 27.958772 6.934946 26.621311 0 45.695738-20.957311 42.314735-57.634652-10.261715-95.458095-28.554336-235.31233-28.554336-235.31233s111.922069-127.270639 175.171602-204.391087c22.381753-28.043706 7.990998-67.821665-36.106336-75.197656-89.908706-17.238616-229.310639-44.650943-229.310639-44.650943S603.786473 199.717647 555.523259 112.451118c-17.066701-32.216749-30.122041-42.547025-38.377052-45.388746C516.367471 66.659189 514.695389 66.028832 512.161682 66.028832L512.161682 66.028832 512.161682 66.028832zM512.161682 66.028832"  ></path></symbol><symbol id="icon-time" viewBox="0 0 1024 1024"><path d="M512 64C264.96 64 64 264.96 64 512s200.96 448 448 448 448-200.96 448-448S759.04 64 512 64z m0 831.712c-211.584 0-383.712-172.16-383.712-383.712 0-211.584 172.128-383.712 383.712-383.712 211.552 0 383.712 172.128 383.712 383.712 0 211.552-172.16 383.712-383.712 383.712z"  ></path><path d="M671.968 512H512V288.064c0-17.76-14.24-32.128-32-32.128s-32 14.4-32 32.128V544c0 17.76 14.272 32 32 32h191.968c17.76 0 32.128-14.24 32.128-32s-14.368-32-32.128-32z"  ></path></symbol><symbol id="icon-clone" viewBox="0 0 1024 1024"><path d="M897.71428583 881.64285753l2e-8-546.42857168q0-6.52901748-4.77120499-11.30022335t-11.30022333-4.77120497l-546.42857168 0q-6.52901748 0-11.30022335 4.77120497t-4.77120497 11.30022335l0 546.42857168q0 6.52901748 4.77120497 11.30022333t11.30022335 4.77120499l546.42857168 0q6.52901748 0 11.30022333-4.77120499t4.77120499-11.30022333z m64.28571417-546.42857168l0 546.42857168q0 33.14732167-23.60491084 56.75223251t-56.75223252 23.60491085l-546.42857167 0q-33.14732167 0-56.75223252-23.60491085t-23.60491084-56.75223251l0-546.42857168q0-33.14732167 23.60491084-56.75223252t56.75223252-23.60491084l546.42857167 0q33.14732167 0 56.75223252 23.60491084t23.60491084 56.75223252z m-192.85714247-192.85714249l0 80.35714249-64.28571417 0 0-80.35714249q0-6.52901748-4.77120498-11.30022334t-11.30022335-4.77120498l-546.42857167 0q-6.52901748 0-11.30022334 4.77120498t-4.77120498 11.30022334l0 546.42857168q0 6.52901748 4.77120498 11.30022334t11.30022334 4.77120498l80.35714247 0 0 64.28571417-80.35714247 0q-33.14732167 0-56.75223252-23.60491085t-23.60491084-56.75223251l0-546.42857168q0-33.14732167 23.60491084-56.75223252t56.75223252-23.60491084l546.42857167 0q33.14732167 0 56.75223252 23.60491084t23.60491084 56.75223252z"  ></path></symbol><symbol id="icon-jilianxuanze" viewBox="0 0 1024 1024"><path d="M128 512V224c0-16 12.8-32 32-32h384c19.2 0 32 12.8 32 32v288c0 16-12.8 32-32 32h-32v64h64c35.2 0 64-28.8 64-64V192c0-35.2-28.8-64-64-64H128c-35.2 0-64 28.8-64 64v352c0 35.2 28.8 64 64 64h192v-64H160c-16 0-32-12.8-32-32z"  ></path><path d="M896 416H704v64h160c19.2 0 32 12.8 32 32v288c0 16-12.8 32-32 32H480c-19.2 0-32-12.8-32-32V512c0-16 12.8-32 32-32h32v-64h-64c-35.2 0-64 28.8-64 64v352c0 35.2 28.8 64 64 64h448c35.2 0 64-28.8 64-64V480c0-35.2-28.8-64-64-64z"  ></path></symbol><symbol id="icon-textarea" viewBox="0 0 1024 1024"><path d="M64.60757333 814.92195555h885.46417778V209.07804445h-885.46417778v605.8439111zM18.00419555 162.47466667h978.67093334v699.05066666H18.00419555V162.47466667z m885.46417778 466.03377778l-139.81013333 139.81013333h139.81013333V628.50844445z m-752.64455111-291.27111112v233.01688889c0 13.98101333 9.32067555 23.30168889 23.30168889 23.30168889s23.30168889-9.32067555 23.30168889-23.30168889V337.23733333c0-13.98101333-9.32067555-23.30168889-23.30168889-23.30168888s-23.30168889 9.32067555-23.30168889 23.30168888z"  ></path></symbol><symbol id="icon-clear" viewBox="0 0 1024 1024"><path d="M883.2 403.2l-147.2-44.8 57.6-224c0-6.4 0-19.2-6.4-25.6-6.4-6.4-12.8-12.8-19.2-12.8L627.2 57.6c-6.4 0-19.2 0-25.6 0C595.2 70.4 588.8 76.8 588.8 83.2L524.8 300.8 358.4 256c-6.4 0-19.2 0-25.6 0S320 275.2 320 281.6l-89.6 320C211.2 684.8 128 768 128 768c-6.4 6.4-12.8 19.2-6.4 32 0 12.8 12.8 19.2 25.6 25.6l524.8 140.8c0 0 6.4 0 6.4 0 6.4 0 19.2-6.4 25.6-12.8 6.4-6.4 83.2-89.6 115.2-179.2 32-83.2 89.6-326.4 89.6-332.8C908.8 422.4 896 409.6 883.2 403.2zM755.2 748.8c-25.6 57.6-70.4 115.2-89.6 147.2l-70.4-19.2c32-38.4 70.4-96 89.6-160 6.4-19.2-6.4-32-25.6-38.4-19.2-6.4-32 6.4-38.4 25.6-19.2 70.4-76.8 134.4-96 153.6l-57.6-12.8c32-38.4 70.4-96 83.2-153.6 6.4-19.2-6.4-32-25.6-38.4-19.2-6.4-32 6.4-38.4 25.6-19.2 64-70.4 128-89.6 153.6l-64-19.2c32-38.4 70.4-96 89.6-153.6 6.4-19.2-6.4-32-25.6-38.4C384 608 364.8 620.8 364.8 633.6c-19.2 64-70.4 128-96 153.6l-57.6-19.2c32-38.4 70.4-96 83.2-153.6l76.8-294.4 166.4 44.8c6.4 0 19.2 0 25.6 0C569.6 364.8 576 358.4 582.4 352L640 128l83.2 19.2-57.6 224c-6.4 19.2 6.4 32 19.2 38.4L832 454.4C819.2 524.8 780.8 691.2 755.2 748.8z"  ></path><path d="M364.8 473.6C364.8 492.8 371.2 505.6 390.4 512l339.2 96c0 0 6.4 0 6.4 0 12.8 0 25.6-6.4 32-25.6 6.4-19.2-6.4-32-19.2-38.4L409.6 448C390.4 448 371.2 454.4 364.8 473.6z"  ></path></symbol><symbol id="icon-table" viewBox="0 0 1024 1024"><path d="M928.229 784.149c0 44.024-36.02 80.044-80.044 80.044L175.815 864.193c-44.024 0-80.044-36.02-80.044-80.044L95.771 239.851c0-44.024 36.02-80.044 80.044-80.044l672.369 0c44.024 0 80.044 36.02 80.044 80.044L928.228 784.149zM351.912 303.886c0-9.005-7.004-16.009-16.009-16.009L175.815 287.877c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L351.912 303.886zM351.912 495.991c0-9.005-7.004-16.009-16.009-16.009L175.815 479.982c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L351.912 495.991zM351.912 688.097c0-9.005-7.004-16.009-16.009-16.009L175.815 672.088c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L351.912 688.097zM608.053 303.886c0-9.005-7.004-16.009-16.009-16.009L431.956 287.877c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L608.053 303.886zM608.053 495.991c0-9.005-7.004-16.009-16.009-16.009L431.956 479.982c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L608.053 495.991zM608.053 688.097c0-9.005-7.004-16.009-16.009-16.009L431.956 672.088c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L608.053 688.097zM864.193 303.886c0-9.005-7.004-16.009-16.009-16.009L688.097 287.877c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L864.194 303.886zM864.193 495.991c0-9.005-7.004-16.009-16.009-16.009L688.097 479.982c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L864.194 495.991zM864.193 688.097c0-9.005-7.004-16.009-16.009-16.009L688.097 672.088c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L864.194 688.097z"  ></path></symbol><symbol id="icon-depart" viewBox="0 0 1024 1024"><path d="M916.23451733 477.51649173L547.318336 477.51649173 547.318336 255.34498133 696.308 255.34498133 696.308 34.66668053 331.7635616 34.66668053 331.7635616 255.34498133 478.22732907 255.34498133 478.22732907 477.51649173 108.1573568 477.51649173 108.1573568 534.23985493 108.1573568 551.07119467 108.1573568 771.74949653 34.4369952 771.74949653 34.4369952 989.33331947 254.03822507 989.33331947 254.03822507 771.74949653 181.86461973 771.74949653 181.86461973 551.07119467 478.22732907 551.07119467 478.22732907 771.74949653 402.9722176 771.74949653 402.9722176 989.33331947 622.57344747 989.33331947 622.57344747 771.74949653 547.318336 771.74949653 547.318336 551.07119467 842.90712107 551.07119467 842.90712107 771.74949653 769.98797333 771.74949653 769.98797333 989.33331947 989.5619136 989.33331947 989.5619136 771.74949653 916.23451733 771.74949653Z"  ></path></symbol></svg>',function(l){var c=(c=document.getElementsByTagName("script"))[c.length-1],h=c.getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var a,t,o,z,i,v=function(c,h){h.parentNode.insertBefore(c,h)};if(h&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(c){console&&console.log(c)}}a=function(){var c,h=document.createElement("div");h.innerHTML=l._iconfont_svg_string_3814468,(h=h.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",h=h,(c=document.body).firstChild?v(h,c.firstChild):c.appendChild(h))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),a()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(o=a,z=l.document,i=!1,m(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,s())})}function s(){i||(i=!0,o())}function m(){try{z.documentElement.doScroll("left")}catch(c){return void setTimeout(m,50)}s()}}(window);
\ No newline at end of file
diff --git a/public/resource/tinymce/langs/en.js b/public/resource/tinymce/langs/en.js
deleted file mode 100644
index 27337c3..0000000
--- a/public/resource/tinymce/langs/en.js
+++ /dev/null
@@ -1,419 +0,0 @@
-tinymce.addI18n('es', {
-  Redo: 'Rehacer',
-  Undo: 'Deshacer',
-  Cut: 'Cortar',
-  Copy: 'Copiar',
-  Paste: 'Pegar',
-  'Select all': 'Seleccionar todo',
-  'New document': 'Nuevo documento',
-  Ok: 'Ok',
-  Cancel: 'Cancelar',
-  'Visual aids': 'Ayudas visuales',
-  Bold: 'Negrita',
-  Italic: 'Cursiva',
-  Underline: 'Subrayado',
-  Strikethrough: 'Tachado',
-  Superscript: 'Super\u00edndice',
-  Subscript: 'Sub\u00edndice',
-  'Clear formatting': 'Limpiar formato',
-  'Align left': 'Alinear a la izquierda',
-  'Align center': 'Alinear al centro',
-  'Align right': 'Alinear a la derecha',
-  Justify: 'Justificar',
-  'Bullet list': 'Lista de vi\u00f1etas',
-  'Numbered list': 'Lista numerada',
-  'Decrease indent': 'Disminuir sangr\u00eda',
-  'Increase indent': 'Incrementar sangr\u00eda',
-  Close: 'Cerrar',
-  Formats: 'Formatos',
-  "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": 'Su navegador no es compatible con el acceso directo al portapapeles. Use las teclas Crtl+X\/C\/V de su teclado.',
-  Headers: 'Encabezados',
-  'Header 1': 'Encabezado 1',
-  'Header 2': 'Encabezado 2',
-  'Header 3': 'Encabezado 3',
-  'Header 4': 'Encabezado 4',
-  'Header 5': 'Encabezado 5',
-  'Header 6': 'Encabezado 6',
-  Headings: 'Encabezados',
-  'Heading 1': 'Encabezado 1',
-  'Heading 2': 'Encabezado 2',
-  'Heading 3': 'Encabezado 3',
-  'Heading 4': 'Encabezado 4',
-  'Heading 5': 'Encabezado 5',
-  'Heading 6': 'Encabezado 6',
-  Preformatted: 'Con formato previo',
-  Div: 'Div',
-  Pre: 'Pre',
-  Code: 'C\u00f3digo',
-  Paragraph: 'P\u00e1rrafo',
-  Blockquote: 'Blockquote',
-  Inline: 'Alineado',
-  Blocks: 'Bloques',
-  'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.': 'Pegar est\u00e1 ahora en modo de texto plano. El contenido se pegar\u00e1 como texto plano hasta que desactive esta opci\u00f3n.',
-  Fonts: 'Fuentes',
-  'Font Sizes': 'Tama\u00f1os de fuente',
-  Class: 'Clase',
-  'Browse for an image': 'Buscar una imagen',
-  OR: 'OR',
-  'Drop an image here': 'Arrastre una imagen aqu\u00ed',
-  Upload: 'Cargar',
-  Block: 'Bloque',
-  Align: 'Alinear',
-  Default: 'Por defecto',
-  Circle: 'C\u00edrculo',
-  Disc: 'Disco',
-  Square: 'Cuadrado',
-  'Lower Alpha': 'Inferior Alfa',
-  'Lower Greek': 'Inferior Griega',
-  'Lower Roman': 'Inferior Romana',
-  'Upper Alpha': 'Superior Alfa',
-  'Upper Roman': 'Superior Romana',
-  'Anchor...': 'Anclaje...',
-  Name: 'Nombre',
-  Id: 'Id',
-  'Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.': 'Deber\u00eda comenzar por una letra, seguida solo de letras, n\u00fameros, guiones, puntos, dos puntos o guiones bajos.',
-  'You have unsaved changes are you sure you want to navigate away?': 'Tiene cambios sin guardar. \u00bfEst\u00e1 seguro de que quiere salir?',
-  'Restore last draft': 'Restaurar el \u00faltimo borrador',
-  'Special character...': 'Car\u00e1cter especial...',
-  'Source code': 'C\u00f3digo fuente',
-  'Insert\/Edit code sample': 'Insertar\/editar c\u00f3digo de prueba',
-  Language: 'Idioma',
-  'Code sample...': 'Ejemplo de c\u00f3digo...',
-  'Color Picker': 'Selector de colores',
-  R: 'R',
-  G: 'V',
-  B: 'A',
-  'Left to right': 'De izquierda a derecha',
-  'Right to left': 'De derecha a izquierda',
-  'Emoticons...': 'Emoticones...',
-  'Metadata and Document Properties': 'Metadatos y propiedades del documento',
-  Title: 'T\u00edtulo',
-  Keywords: 'Palabras clave',
-  Description: 'Descripci\u00f3n',
-  Robots: 'Robots',
-  Author: 'Autor',
-  Encoding: 'Codificaci\u00f3n',
-  Fullscreen: 'Pantalla completa',
-  Action: 'Acci\u00f3n',
-  Shortcut: 'Atajo',
-  Help: 'Ayuda',
-  Address: 'Direcci\u00f3n',
-  'Focus to menubar': 'Enfocar la barra del men\u00fa',
-  'Focus to toolbar': 'Enfocar la barra de herramientas',
-  'Focus to element path': 'Enfocar la ruta del elemento',
-  'Focus to contextual toolbar': 'Enfocar la barra de herramientas contextual',
-  'Insert link (if link plugin activated)': 'Insertar enlace (si el complemento de enlace est\u00e1 activado)',
-  'Save (if save plugin activated)': 'Guardar (si el componente de salvar est\u00e1 activado)',
-  'Find (if searchreplace plugin activated)': 'Buscar (si el complemento buscar-remplazar est\u00e1 activado)',
-  'Plugins installed ({0}):': 'Plugins instalados ({0}):',
-  'Premium plugins:': 'Complementos premium:',
-  'Learn more...': 'Aprende m\u00e1s...',
-  'You are using {0}': 'Estas usando {0}',
-  Plugins: 'Complementos',
-  'Handy Shortcuts': 'Accesos directos',
-  'Horizontal line': 'L\u00ednea horizontal',
-  'Insert\/edit image': 'Insertar\/editar imagen',
-  'Image description': 'Descripci\u00f3n de la imagen',
-  Source: 'Enlace',
-  Dimensions: 'Dimensiones',
-  'Constrain proportions': 'Restringir proporciones',
-  General: 'General',
-  Advanced: 'Avanzado',
-  Style: 'Estilo',
-  'Vertical space': 'Espacio vertical',
-  'Horizontal space': 'Espacio horizontal',
-  Border: 'Borde',
-  'Insert image': 'Insertar imagen',
-  'Image...': 'Imagen...',
-  'Image list': 'Lista de im\u00e1genes',
-  'Rotate counterclockwise': 'Girar a la izquierda',
-  'Rotate clockwise': 'Girar a la derecha',
-  'Flip vertically': 'Invertir verticalmente',
-  'Flip horizontally': 'Invertir horizontalmente',
-  'Edit image': 'Editar imagen',
-  'Image options': 'Opciones de imagen',
-  'Zoom in': 'Acercar',
-  'Zoom out': 'Alejar',
-  Crop: 'Recortar',
-  Resize: 'Redimensionar',
-  Orientation: 'Orientaci\u00f3n',
-  Brightness: 'Brillo',
-  Sharpen: 'Forma',
-  Contrast: 'Contraste',
-  'Color levels': 'Niveles de color',
-  Gamma: 'Gamma',
-  Invert: 'Invertir',
-  Apply: 'Aplicar',
-  Back: 'Atr\u00e1s',
-  'Insert date\/time': 'Insertar fecha\/hora',
-  'Date\/time': 'Fecha\/hora',
-  'Insert\/Edit Link': 'Insertar\/editar enlace',
-  'Insert\/edit link': 'Insertar\/editar enlace',
-  'Text to display': 'Texto para mostrar',
-  Url: 'URL',
-  'Open link in...': 'Abrir enlace en...',
-  'Current window': 'Ventana actual',
-  None: 'Ninguno',
-  'New window': 'Nueva ventana',
-  'Remove link': 'Quitar enlace',
-  Anchors: 'Anclas',
-  'Link...': 'Enlace...',
-  'Paste or type a link': 'Pega o introduce un enlace',
-  'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?': 'El enlace que has introducido no parece ser una direcci\u00f3n de correo electr\u00f3nico. Quieres a\u00f1adir el prefijo necesario mailto: ?',
-  'The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?': 'El enlace que has introducido no parece ser una enlace externo. Quieres a\u00f1adir el prefijo necesario http:\/\/ ?',
-  'Link list': 'Lista de enlaces',
-  'Insert video': 'Insertar video',
-  'Insert\/edit video': 'Insertar\/editar video',
-  'Insert\/edit media': 'Insertar\/editar medio',
-  'Alternative source': 'Enlace alternativo',
-  'Alternative source URL': 'Origen de URL alternativo',
-  'Media poster (Image URL)': 'P\u00f3ster de medio (URL de imagen)',
-  'Paste your embed code below:': 'Pega tu c\u00f3digo embebido debajo',
-  Embed: 'Incrustado',
-  'Media...': 'Medios...',
-  'Nonbreaking space': 'Espacio fijo',
-  'Page break': 'Salto de p\u00e1gina',
-  'Paste as text': 'Pegar como texto',
-  Preview: 'Previsualizar',
-  'Print...': 'Imprimir...',
-  Save: 'Guardar',
-  Find: 'Buscar',
-  'Replace with': 'Reemplazar con',
-  Replace: 'Reemplazar',
-  'Replace all': 'Reemplazar todo',
-  Previous: 'Anterior',
-  Next: 'Siguiente',
-  'Find and replace...': 'Buscar y reemplazar...',
-  'Could not find the specified string.': 'No se encuentra la cadena de texto especificada',
-  'Match case': 'Coincidencia exacta',
-  'Find whole words only': 'Solo palabras completas',
-  'Spell check': 'Revisar ortograf\u00eda',
-  Ignore: 'Ignorar',
-  'Ignore all': 'Ignorar todos',
-  Finish: 'Finalizar',
-  'Add to Dictionary': 'A\u00f1adir al Diccionario',
-  'Insert table': 'Insertar tabla',
-  'Table properties': 'Propiedades de la tabla',
-  'Delete table': 'Eliminar tabla',
-  Cell: 'Celda',
-  Row: 'Fila',
-  Column: 'Columna',
-  'Cell properties': 'Propiedades de la celda',
-  'Merge cells': 'Combinar celdas',
-  'Split cell': 'Dividir celdas',
-  'Insert row before': 'Insertar fila antes',
-  'Insert row after': 'Insertar fila despu\u00e9s ',
-  'Delete row': 'Eliminar fila',
-  'Row properties': 'Propiedades de la fila',
-  'Cut row': 'Cortar fila',
-  'Copy row': 'Copiar fila',
-  'Paste row before': 'Pegar la fila antes',
-  'Paste row after': 'Pegar la fila despu\u00e9s',
-  'Insert column before': 'Insertar columna antes',
-  'Insert column after': 'Insertar columna despu\u00e9s',
-  'Delete column': 'Eliminar columna',
-  Cols: 'Columnas',
-  Rows: 'Filas',
-  Width: 'Ancho',
-  Height: 'Alto',
-  'Cell spacing': 'Espacio entre celdas',
-  'Cell padding': 'Relleno de celda',
-  'Show caption': 'Mostrar t\u00edtulo',
-  Left: 'Izquierda',
-  Center: 'Centrado',
-  Right: 'Derecha',
-  'Cell type': 'Tipo de celda',
-  Scope: '\u00c1mbito',
-  Alignment: 'Alineaci\u00f3n',
-  'H Align': 'Alineamiento Horizontal',
-  'V Align': 'Alineamiento Vertical',
-  Top: 'Arriba',
-  Middle: 'Centro',
-  Bottom: 'Abajo',
-  'Header cell': 'Celda de la cebecera',
-  'Row group': 'Grupo de filas',
-  'Column group': 'Grupo de columnas',
-  'Row type': 'Tipo de fila',
-  Header: 'Cabecera',
-  Body: 'Cuerpo',
-  Footer: 'Pie de p\u00e1gina',
-  'Border color': 'Color del borde',
-  'Insert template...': 'Insertar plantilla...',
-  Templates: 'Plantillas',
-  Template: 'Plantilla',
-  'Text color': 'Color del texto',
-  'Background color': 'Color de fondo',
-  'Custom...': 'Personalizar...',
-  'Custom color': 'Color personalizado',
-  'No color': 'Sin color',
-  'Remove color': 'Quitar color',
-  'Table of Contents': 'Tabla de contenidos',
-  'Show blocks': 'Mostrar bloques',
-  'Show invisible characters': 'Mostrar caracteres invisibles',
-  'Word count': 'Contar palabras',
-  Count: 'Recuento',
-  Document: 'Documento',
-  Selection: 'Selecci\u00f3n',
-  Words: 'Palabras',
-  'Words: {0}': 'Palabras: {0}',
-  '{0} words': '{0} palabras',
-  File: 'Archivo',
-  Edit: 'Editar',
-  Insert: 'Insertar',
-  View: 'Ver',
-  Format: 'Formato',
-  Table: 'Tabla',
-  Tools: 'Herramientas',
-  'Powered by {0}': 'Desarrollado por {0}',
-  'Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help': '\u00c1rea de texto enriquecido. Pulse ALT-F9 para el menu. Pulse ALT-F10 para la barra de herramientas. Pulse ALT-0 para ayuda',
-  'Image title': 'Titulo de imagen',
-  'Border width': 'Ancho de borde',
-  'Border style': 'Estilo de borde',
-  Error: 'Error',
-  Warn: 'Advertencia',
-  Valid: 'V\u00e1lido',
-  'To open the popup, press Shift+Enter': 'Para abrir el elemento emergente, pulse May\u00fas+Intro',
-  'Rich Text Area. Press ALT-0 for help.': '\u00c1rea de texto enriquecido. Pulse ALT-0 para abrir la ayuda.',
-  'System Font': 'Fuente de sistema',
-  'Failed to upload image: {0}': 'Fallo al cargar imagen: {0}',
-  'Failed to load plugin: {0} from url {1}': 'Fallo al cargar complemento: {0} desde URL {1}',
-  'Failed to load plugin url: {0}': 'Fallo al cargar URL del complemento: {0}',
-  'Failed to initialize plugin: {0}': 'Fallo al iniciar el complemento: {0}',
-  example: 'ejemplo',
-  Search: 'Buscar',
-  All: 'Todo',
-  Currency: 'Divisa',
-  Text: 'Texto',
-  Quotations: 'Comillas',
-  Mathematical: 'S\u00edmbolo matem\u00e1tico',
-  'Extended Latin': 'Latino extendido A',
-  Symbols: 'S\u00edmbolos',
-  Arrows: 'Flechas',
-  'User Defined': 'Definido por el usuario',
-  'dollar sign': 'signo de d\u00f3lar',
-  'currency sign': 'signo de divisa',
-  'euro-currency sign': 'signo de euro',
-  'colon sign': 'signo de dos puntos',
-  'cruzeiro sign': 'signo de cruceiro',
-  'french franc sign': 'signo de franco franc\u00e9s',
-  'lira sign': 'signo de lira',
-  'mill sign': 'signo de mill',
-  'naira sign': 'signo de naira',
-  'peseta sign': 'signo de peseta',
-  'rupee sign': 'signo de rupia',
-  'won sign': 'signo de won',
-  'new sheqel sign': 'signo de nuevo s\u00e9quel',
-  'dong sign': 'signo de dong',
-  'kip sign': 'signo de kip',
-  'tugrik sign': 'signo de tugrik',
-  'drachma sign': 'signo de dracma',
-  'german penny symbol': 'signo de penique alem\u00e1n',
-  'peso sign': 'signo de peso',
-  'guarani sign': 'signo de guaran\u00ed',
-  'austral sign': 'signo de austral',
-  'hryvnia sign': 'signo de grivna',
-  'cedi sign': 'signo de cedi',
-  'livre tournois sign': 'signo de libra tornesa',
-  'spesmilo sign': 'signo de spesmilo',
-  'tenge sign': 'signo de tenge',
-  'indian rupee sign': 'signo de rupia india',
-  'turkish lira sign': 'signo de lira turca',
-  'nordic mark sign': 'signo de marco n\u00f3rdico',
-  'manat sign': 'signo de manat',
-  'ruble sign': 'signo de rublo',
-  'yen character': 'car\u00e1cter de yen',
-  'yuan character': 'car\u00e1cter de yuan',
-  'yuan character, in hong kong and taiwan': 'car\u00e1cter de yuan en Hong Kong y Taiw\u00e1n',
-  'yen\/yuan character variant one': 'Variante uno de car\u00e1cter de yen\/yuan',
-  'Loading emoticons...': 'Cargando emoticonos...',
-  'Could not load emoticons': 'No se han podido cargar los emoticonos',
-  People: 'Personas',
-  'Animals and Nature': 'Animales y naturaleza',
-  'Food and Drink': 'Comida y bebida',
-  Activity: 'Actividad',
-  'Travel and Places': 'Viajes y lugares',
-  Objects: 'Objetos',
-  Flags: 'Banderas',
-  Characters: 'Caracteres',
-  'Characters (no spaces)': 'Caracteres (sin espacios)',
-  '{0} characters': '{0} caracteres',
-  'Error: Form submit field collision.': 'Error: Colisi\u00f3n de campo al enviar formulario.',
-  'Error: No form element found.': 'Error: No se encuentra ning\u00fan elemento de formulario.',
-  Update: 'Actualizar',
-  'Color swatch': 'Muestrario de colores',
-  Turquoise: 'Turquesa',
-  Green: 'Verde',
-  Blue: 'Azul',
-  Purple: 'P\u00farpura',
-  'Navy Blue': 'Azul marino',
-  'Dark Turquoise': 'Turquesa oscuro',
-  'Dark Green': 'Verde oscuro',
-  'Medium Blue': 'Azul medio',
-  'Medium Purple': 'P\u00farpura medio',
-  'Midnight Blue': 'Azul medio',
-  Yellow: 'Amarillo',
-  Orange: 'Naranja',
-  Red: 'Rojo',
-  'Light Gray': 'Gris claro',
-  Gray: 'Gris',
-  'Dark Yellow': 'Amarillo oscuro',
-  'Dark Orange': 'Naranja oscuro',
-  'Dark Red': 'Rojo oscuro',
-  'Medium Gray': 'Gris medio',
-  'Dark Gray': 'Gris oscuro',
-  'Light Green': 'Verde claro',
-  'Light Yellow': 'Amarillo claro',
-  'Light Red': 'Rojo claro',
-  'Light Purple': 'Morado claro',
-  'Light Blue': 'Azul claro',
-  'Dark Purple': 'Morado oscuro',
-  'Dark Blue': 'Azul oscuro',
-  Black: 'Negro',
-  White: 'Blanco',
-  'Switch to or from fullscreen mode': 'Activar o desactivar modo pantalla completa',
-  'Open help dialog': 'Abrir di\u00e1logo de ayuda',
-  history: 'historial',
-  styles: 'estilos',
-  formatting: 'formato',
-  alignment: 'alineaci\u00f3n',
-  indentation: 'sangr\u00eda',
-  'permanent pen': 'bol\u00edgrafo permanente',
-  comments: 'comentarios',
-  'Format Painter': 'Copiar formato',
-  'Insert\/edit iframe': 'Insertar\/editar iframe',
-  Capitalization: 'Uso de may\u00fasculas',
-  lowercase: 'min\u00fasculas',
-  UPPERCASE: 'MAY\u00daSCULAS',
-  'Title Case': 'Tipo T\u00edtulo',
-  'Permanent Pen Properties': 'Propiedades del bol\u00edgrafo permanente',
-  'Permanent pen properties...': 'Propiedades del bol\u00edgrafo permanente...',
-  Font: 'Fuente',
-  Size: 'Tama\u00f1o',
-  'More...': 'M\u00e1s...',
-  'Spellcheck Language': 'Corrector',
-  'Select...': 'Seleccionar...',
-  Preferences: 'Preferencias',
-  Yes: 'S\u00ed',
-  No: 'No',
-  'Keyboard Navigation': 'Navegaci\u00f3n con el teclado',
-  Version: 'Versi\u00f3n',
-  Anchor: 'Ancla',
-  'Special character': 'Car\u00e1cter especial',
-  'Code sample': 'Ejemplo de c\u00f3digo',
-  Color: 'Color',
-  Emoticons: 'Emoticonos',
-  'Document properties': 'Propiedades del documento',
-  Image: 'Imagen',
-  'Insert link': 'Insertar enlace',
-  Target: 'Destino',
-  Link: 'Enlace',
-  Poster: 'Miniatura',
-  Media: 'Media',
-  Print: 'Imprimir',
-  Prev: 'Anterior',
-  'Find and replace': 'Buscar y reemplazar',
-  'Whole words': 'Palabras completas',
-  Spellcheck: 'Corrector ortogr\u00e1fico',
-  Caption: 'Subt\u00edtulo',
-  'Insert template': 'Insertar plantilla'
-})
diff --git a/public/resource/tinymce/langs/zh_CN.js b/public/resource/tinymce/langs/zh_CN.js
deleted file mode 100644
index f9d8b5c..0000000
--- a/public/resource/tinymce/langs/zh_CN.js
+++ /dev/null
@@ -1,389 +0,0 @@
-tinymce.addI18n('zh_CN',{
-"Redo": "\u91cd\u505a",
-"Undo": "\u64a4\u9500",
-"Cut": "\u526a\u5207",
-"Copy": "\u590d\u5236",
-"Paste": "\u7c98\u8d34",
-"Select all": "\u5168\u9009",
-"New document": "\u65b0\u6587\u4ef6",
-"Ok": "\u786e\u5b9a",
-"Cancel": "\u53d6\u6d88",
-"Visual aids": "\u7f51\u683c\u7ebf",
-"Bold": "\u7c97\u4f53",
-"Italic": "\u659c\u4f53",
-"Underline": "\u4e0b\u5212\u7ebf",
-"Strikethrough": "\u5220\u9664\u7ebf",
-"Superscript": "\u4e0a\u6807",
-"Subscript": "\u4e0b\u6807",
-"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
-"Align left": "\u5de6\u8fb9\u5bf9\u9f50",
-"Align center": "\u4e2d\u95f4\u5bf9\u9f50",
-"Align right": "\u53f3\u8fb9\u5bf9\u9f50",
-"Justify": "\u4e24\u7aef\u5bf9\u9f50",
-"Bullet list": "\u9879\u76ee\u7b26\u53f7",
-"Numbered list": "\u7f16\u53f7\u5217\u8868",
-"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
-"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
-"Close": "\u5173\u95ed",
-"Formats": "\u683c\u5f0f",
-"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u7b49\u5feb\u6377\u952e\u3002",
-"Headers": "\u6807\u9898",
-"Header 1": "\u6807\u98981",
-"Header 2": "\u6807\u98982",
-"Header 3": "\u6807\u98983",
-"Header 4": "\u6807\u98984",
-"Header 5": "\u6807\u98985",
-"Header 6": "\u6807\u98986",
-"Headings": "\u6807\u9898",
-"Heading 1": "\u6807\u98981",
-"Heading 2": "\u6807\u98982",
-"Heading 3": "\u6807\u98983",
-"Heading 4": "\u6807\u98984",
-"Heading 5": "\u6807\u98985",
-"Heading 6": "\u6807\u98986",
-"Preformatted": "\u9884\u5148\u683c\u5f0f\u5316\u7684",
-"Div": "Div",
-"Pre": "Pre",
-"Code": "\u4ee3\u7801",
-"Paragraph": "\u6bb5\u843d",
-"Blockquote": "\u5f15\u6587\u533a\u5757",
-"Inline": "\u6587\u672c",
-"Blocks": "\u57fa\u5757",
-"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
-"Fonts": "\u5b57\u4f53",
-"Font Sizes": "\u5b57\u53f7",
-"Class": "\u7c7b\u578b",
-"Browse for an image": "\u6d4f\u89c8\u56fe\u50cf",
-"OR": "\u6216",
-"Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64",
-"Upload": "\u4e0a\u4f20",
-"Block": "\u5757",
-"Align": "\u5bf9\u9f50",
-"Default": "\u9ed8\u8ba4",
-"Circle": "\u7a7a\u5fc3\u5706",
-"Disc": "\u5b9e\u5fc3\u5706",
-"Square": "\u65b9\u5757",
-"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
-"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
-"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
-"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
-"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
-"Anchor...": "\u951a\u70b9...",
-"Name": "\u540d\u79f0",
-"Id": "\u6807\u8bc6\u7b26",
-"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
-"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
-"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
-"Special characters...": "\u7279\u6b8a\u5b57\u7b26...",
-"Source code": "\u6e90\u4ee3\u7801",
-"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
-"Language": "\u8bed\u8a00",
-"Code sample...": "\u793a\u4f8b\u4ee3\u7801...",
-"Color Picker": "\u9009\u8272\u5668",
-"R": "R",
-"G": "G",
-"B": "B",
-"Left to right": "\u4ece\u5de6\u5230\u53f3",
-"Right to left": "\u4ece\u53f3\u5230\u5de6",
-"Emoticons...": "\u8868\u60c5\u7b26\u53f7...",
-"Metadata and Document Properties": "\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027",
-"Title": "\u6807\u9898",
-"Keywords": "\u5173\u952e\u8bcd",
-"Description": "\u63cf\u8ff0",
-"Robots": "\u673a\u5668\u4eba",
-"Author": "\u4f5c\u8005",
-"Encoding": "\u7f16\u7801",
-"Fullscreen": "\u5168\u5c4f",
-"Action": "\u64cd\u4f5c",
-"Shortcut": "\u5feb\u6377\u952e",
-"Help": "\u5e2e\u52a9",
-"Address": "\u5730\u5740",
-"Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f",
-"Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f",
-"Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84",
-"Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355",
-"Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
-"Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
-"Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
-"Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):",
-"Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a",
-"Learn more...": "\u4e86\u89e3\u66f4\u591a...",
-"You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}",
-"Plugins": "\u63d2\u4ef6",
-"Handy Shortcuts": "\u5feb\u6377\u952e",
-"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
-"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
-"Image description": "\u56fe\u7247\u63cf\u8ff0",
-"Source": "\u5730\u5740",
-"Dimensions": "\u5927\u5c0f",
-"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
-"General": "\u666e\u901a",
-"Advanced": "\u9ad8\u7ea7",
-"Style": "\u6837\u5f0f",
-"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
-"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
-"Border": "\u8fb9\u6846",
-"Insert image": "\u63d2\u5165\u56fe\u7247",
-"Image...": "\u56fe\u7247...",
-"Image list": "\u56fe\u7247\u5217\u8868",
-"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
-"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
-"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
-"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
-"Edit image": "\u7f16\u8f91\u56fe\u7247",
-"Image options": "\u56fe\u7247\u9009\u9879",
-"Zoom in": "\u653e\u5927",
-"Zoom out": "\u7f29\u5c0f",
-"Crop": "\u88c1\u526a",
-"Resize": "\u8c03\u6574\u5927\u5c0f",
-"Orientation": "\u65b9\u5411",
-"Brightness": "\u4eae\u5ea6",
-"Sharpen": "\u9510\u5316",
-"Contrast": "\u5bf9\u6bd4\u5ea6",
-"Color levels": "\u989c\u8272\u5c42\u6b21",
-"Gamma": "\u4f3d\u9a6c\u503c",
-"Invert": "\u53cd\u8f6c",
-"Apply": "\u5e94\u7528",
-"Back": "\u540e\u9000",
-"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
-"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
-"Insert\/Edit Link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
-"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
-"Text to display": "\u663e\u793a\u6587\u5b57",
-"Url": "\u5730\u5740",
-"Open link in...": "\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...",
-"Current window": "\u5f53\u524d\u7a97\u53e3",
-"None": "\u65e0",
-"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
-"Remove link": "\u5220\u9664\u94fe\u63a5",
-"Anchors": "\u951a\u70b9",
-"Link...": "\u94fe\u63a5...",
-"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
-"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
-"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
-"Link list": "\u94fe\u63a5\u5217\u8868",
-"Insert video": "\u63d2\u5165\u89c6\u9891",
-"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
-"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
-"Alternative source": "\u955c\u50cf",
-"Alternative source URL": "\u66ff\u4ee3\u6765\u6e90\u7f51\u5740",
-"Media poster (Image URL)": "\u5c01\u9762(\u56fe\u7247\u5730\u5740)",
-"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
-"Embed": "\u5185\u5d4c",
-"Media...": "\u591a\u5a92\u4f53...",
-"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
-"Page break": "\u5206\u9875\u7b26",
-"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
-"Preview": "\u9884\u89c8",
-"Print...": "\u6253\u5370...",
-"Save": "\u4fdd\u5b58",
-"Find": "\u67e5\u627e",
-"Replace with": "\u66ff\u6362\u4e3a",
-"Replace": "\u66ff\u6362",
-"Replace all": "\u5168\u90e8\u66ff\u6362",
-"Previous": "\u4e0a\u4e00\u4e2a",
-"Next": "\u4e0b\u4e00\u4e2a",
-"Find and replace...": "\u67e5\u627e\u5e76\u66ff\u6362...",
-"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
-"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
-"Find whole words only": "\u5168\u5b57\u5339\u914d",
-"Spell check": "\u62fc\u5199\u68c0\u67e5",
-"Ignore": "\u5ffd\u7565",
-"Ignore all": "\u5168\u90e8\u5ffd\u7565",
-"Finish": "\u5b8c\u6210",
-"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
-"Insert table": "\u63d2\u5165\u8868\u683c",
-"Table properties": "\u8868\u683c\u5c5e\u6027",
-"Delete table": "\u5220\u9664\u8868\u683c",
-"Cell": "\u5355\u5143\u683c",
-"Row": "\u884c",
-"Column": "\u5217",
-"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
-"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
-"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
-"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
-"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
-"Delete row": "\u5220\u9664\u884c",
-"Row properties": "\u884c\u5c5e\u6027",
-"Cut row": "\u526a\u5207\u884c",
-"Copy row": "\u590d\u5236\u884c",
-"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
-"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
-"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
-"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
-"Delete column": "\u5220\u9664\u5217",
-"Cols": "\u5217",
-"Rows": "\u884c",
-"Width": "\u5bbd",
-"Height": "\u9ad8",
-"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
-"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
-"Show caption": "\u663e\u793a\u6807\u9898",
-"Left": "\u5de6\u5bf9\u9f50",
-"Center": "\u5c45\u4e2d",
-"Right": "\u53f3\u5bf9\u9f50",
-"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
-"Scope": "\u8303\u56f4",
-"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
-"H Align": "\u6c34\u5e73\u5bf9\u9f50",
-"V Align": "\u5782\u76f4\u5bf9\u9f50",
-"Top": "\u9876\u90e8\u5bf9\u9f50",
-"Middle": "\u5782\u76f4\u5c45\u4e2d",
-"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
-"Header cell": "\u8868\u5934\u5355\u5143\u683c",
-"Row group": "\u884c\u7ec4",
-"Column group": "\u5217\u7ec4",
-"Row type": "\u884c\u7c7b\u578b",
-"Header": "\u8868\u5934",
-"Body": "\u8868\u4f53",
-"Footer": "\u8868\u5c3e",
-"Border color": "\u8fb9\u6846\u989c\u8272",
-"Insert template...": "\u63d2\u5165\u6a21\u677f...",
-"Templates": "\u6a21\u677f",
-"Template": "\u6a21\u677f",
-"Text color": "\u6587\u5b57\u989c\u8272",
-"Background color": "\u80cc\u666f\u8272",
-"Custom...": "\u81ea\u5b9a\u4e49...",
-"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
-"No color": "\u65e0",
-"Remove color": "\u79fb\u9664\u989c\u8272",
-"Table of Contents": "\u5185\u5bb9\u5217\u8868",
-"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
-"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
-"Word count": "\u5b57\u6570",
-"Words: {0}": "\u5b57\u6570\uff1a{0}",
-"{0} words": "{0} \u5b57",
-"File": "\u6587\u4ef6",
-"Edit": "\u7f16\u8f91",
-"Insert": "\u63d2\u5165",
-"View": "\u89c6\u56fe",
-"Format": "\u683c\u5f0f",
-"Table": "\u8868\u683c",
-"Tools": "\u5de5\u5177",
-"Powered by {0}": "\u7531{0}\u9a71\u52a8",
-"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
-"Image title": "\u56fe\u7247\u6807\u9898",
-"Border width": "\u8fb9\u6846\u5bbd\u5ea6",
-"Border style": "\u8fb9\u6846\u6837\u5f0f",
-"Error": "\u9519\u8bef",
-"Warn": "\u8b66\u544a",
-"Valid": "\u6709\u6548",
-"To open the popup, press Shift+Enter": "\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846",
-"Rich Text Area. Press ALT-0 for help.": "\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002",
-"System Font": "\u7cfb\u7edf\u5b57\u4f53",
-"Failed to upload image: {0}": "\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}",
-"Failed to load plugin: {0} from url {1}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}",
-"Failed to load plugin url: {0}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}",
-"Failed to initialize plugin: {0}": "\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}",
-"example": "\u793a\u4f8b",
-"Search": "\u641c\u7d22",
-"All": "\u5168\u90e8",
-"Currency": "\u8d27\u5e01",
-"Text": "\u6587\u5b57",
-"Quotations": "\u5f15\u7528",
-"Mathematical": "\u6570\u5b66",
-"Extended Latin": "\u62c9\u4e01\u8bed\u6269\u5145",
-"Symbols": "\u7b26\u53f7",
-"Arrows": "\u7bad\u5934",
-"User Defined": "\u81ea\u5b9a\u4e49",
-"dollar sign": "\u7f8e\u5143\u7b26\u53f7",
-"currency sign": "\u8d27\u5e01\u7b26\u53f7",
-"euro-currency sign": "\u6b27\u5143\u7b26\u53f7",
-"colon sign": "\u5192\u53f7",
-"cruzeiro sign": "\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7",
-"french franc sign": "\u6cd5\u90ce\u7b26\u53f7",
-"lira sign": "\u91cc\u62c9\u7b26\u53f7",
-"mill sign": "\u5bc6\u5c14\u7b26\u53f7",
-"naira sign": "\u5948\u62c9\u7b26\u53f7",
-"peseta sign": "\u6bd4\u585e\u5854\u7b26\u53f7",
-"rupee sign": "\u5362\u6bd4\u7b26\u53f7",
-"won sign": "\u97e9\u5143\u7b26\u53f7",
-"new sheqel sign": "\u65b0\u8c22\u514b\u5c14\u7b26\u53f7",
-"dong sign": "\u8d8a\u5357\u76fe\u7b26\u53f7",
-"kip sign": "\u8001\u631d\u57fa\u666e\u7b26\u53f7",
-"tugrik sign": "\u56fe\u683c\u91cc\u514b\u7b26\u53f7",
-"drachma sign": "\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7",
-"german penny symbol": "\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7",
-"peso sign": "\u6bd4\u7d22\u7b26\u53f7",
-"guarani sign": "\u74dc\u62c9\u5c3c\u7b26\u53f7",
-"austral sign": "\u6fb3\u5143\u7b26\u53f7",
-"hryvnia sign": "\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7",
-"cedi sign": "\u585e\u5730\u7b26\u53f7",
-"livre tournois sign": "\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7",
-"spesmilo sign": "spesmilo\u7b26\u53f7",
-"tenge sign": "\u575a\u6208\u7b26\u53f7",
-"indian rupee sign": "\u5370\u5ea6\u5362\u6bd4",
-"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9",
-"nordic mark sign": "\u5317\u6b27\u9a6c\u514b",
-"manat sign": "\u9a6c\u7eb3\u7279\u7b26\u53f7",
-"ruble sign": "\u5362\u5e03\u7b26\u53f7",
-"yen character": "\u65e5\u5143\u5b57\u6837",
-"yuan character": "\u4eba\u6c11\u5e01\u5143\u5b57\u6837",
-"yuan character, in hong kong and taiwan": "\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09",
-"yen\/yuan character variant one": "\u5143\u5b57\u6837\uff08\u5927\u5199\uff09",
-"Loading emoticons...": "\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7...",
-"Could not load emoticons": "\u4e0d\u80fd\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7",
-"People": "\u4eba\u7c7b",
-"Animals and Nature": "\u52a8\u7269\u548c\u81ea\u7136",
-"Food and Drink": "\u98df\u7269\u548c\u996e\u54c1",
-"Activity": "\u6d3b\u52a8",
-"Travel and Places": "\u65c5\u6e38\u548c\u5730\u70b9",
-"Objects": "\u7269\u4ef6",
-"Flags": "\u65d7\u5e1c",
-"Characters": "\u5b57\u7b26",
-"Characters (no spaces)": "\u5b57\u7b26(\u65e0\u7a7a\u683c)",
-"Error: Form submit field collision.": "\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002",
-"Error: No form element found.": "\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002",
-"Update": "\u66f4\u65b0",
-"Color swatch": "\u989c\u8272\u6837\u672c",
-"Turquoise": "\u9752\u7eff\u8272",
-"Green": "\u7eff\u8272",
-"Blue": "\u84dd\u8272",
-"Purple": "\u7d2b\u8272",
-"Navy Blue": "\u6d77\u519b\u84dd",
-"Dark Turquoise": "\u6df1\u84dd\u7eff\u8272",
-"Dark Green": "\u6df1\u7eff\u8272",
-"Medium Blue": "\u4e2d\u84dd\u8272",
-"Medium Purple": "\u4e2d\u7d2b\u8272",
-"Midnight Blue": "\u6df1\u84dd\u8272",
-"Yellow": "\u9ec4\u8272",
-"Orange": "\u6a59\u8272",
-"Red": "\u7ea2\u8272",
-"Light Gray": "\u6d45\u7070\u8272",
-"Gray": "\u7070\u8272",
-"Dark Yellow": "\u6697\u9ec4\u8272",
-"Dark Orange": "\u6df1\u6a59\u8272",
-"Dark Red": "\u6df1\u7ea2\u8272",
-"Medium Gray": "\u4e2d\u7070\u8272",
-"Dark Gray": "\u6df1\u7070\u8272",
-"Black": "\u9ed1\u8272",
-"White": "\u767d\u8272",
-"Switch to or from fullscreen mode": "\u5207\u6362\u5168\u5c4f\u6a21\u5f0f",
-"Open help dialog": "\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846",
-"history": "\u5386\u53f2",
-"styles": "\u6837\u5f0f",
-"formatting": "\u683c\u5f0f\u5316",
-"alignment": "\u5bf9\u9f50",
-"indentation": "\u7f29\u8fdb",
-"permanent pen": "\u8bb0\u53f7\u7b14",
-"comments": "\u5907\u6ce8",
-"Anchor": "\u951a\u70b9",
-"Special character": "\u7279\u6b8a\u7b26\u53f7",
-"Code sample": "\u4ee3\u7801\u793a\u4f8b",
-"Color": "\u989c\u8272",
-"Emoticons": "\u8868\u60c5",
-"Document properties": "\u6587\u6863\u5c5e\u6027",
-"Image": "\u56fe\u7247",
-"Insert link": "\u63d2\u5165\u94fe\u63a5",
-"Target": "\u6253\u5f00\u65b9\u5f0f",
-"Link": "\u94fe\u63a5",
-"Poster": "\u5c01\u9762",
-"Media": "\u5a92\u4f53",
-"Print": "\u6253\u5370",
-"Prev": "\u4e0a\u4e00\u4e2a",
-"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
-"Whole words": "\u5168\u5b57\u5339\u914d",
-"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
-"Caption": "\u6807\u9898",
-"Insert template": "\u63d2\u5165\u6a21\u677f"
-});
\ No newline at end of file
diff --git a/public/resource/tinymce/skins/ui/jeecg/content.css b/public/resource/tinymce/skins/ui/jeecg/content.css
deleted file mode 100644
index c9dc16d..0000000
--- a/public/resource/tinymce/skins/ui/jeecg/content.css
+++ /dev/null
@@ -1,711 +0,0 @@
-/**
-* Copyright (c) Tiny Technologies, Inc. All rights reserved.
-* Licensed under the LGPL or a commercial license.
-* For LGPL see License.txt in the project root for license information.
-* For commercial licenses see https://www.tiny.cloud/
-*/
-.mce-content-body .mce-item-anchor {
-  background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
-  cursor: default;
-  display: inline-block;
-  height: 12px !important;
-  padding: 0 2px;
-  -webkit-user-modify: read-only;
-  -moz-user-modify: read-only;
-  -webkit-user-select: all;
-  -ms-user-select: all;
-      user-select: all;
-  width: 8px !important;
-}
-.mce-content-body .mce-item-anchor[data-mce-selected] {
-  outline-offset: 1px;
-}
-.tox-comments-visible .tox-comment {
-  background-color: #fff0b7;
-}
-.tox-comments-visible .tox-comment--active {
-  background-color: #ffe168;
-}
-.tox-checklist > li:not(.tox-checklist--hidden) {
-  list-style: none;
-  margin: 0.25em 0;
-}
-.tox-checklist > li:not(.tox-checklist--hidden)::before {
-  content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
-  cursor: pointer;
-  height: 1em;
-  margin-left: -1.5em;
-  margin-top: 0.125em;
-  position: absolute;
-  width: 1em;
-}
-.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {
-  content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
-}
-[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {
-  margin-left: 0;
-  margin-right: -1.5em;
-}
-/* stylelint-disable */
-/* http://prismjs.com/ */
-/**
- * prism.js default theme for JavaScript, CSS and HTML
- * Based on dabblet (http://dabblet.com)
- * @author Lea Verou
- */
-code[class*="language-"],
-pre[class*="language-"] {
-  color: black;
-  background: none;
-  text-shadow: 0 1px white;
-  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
-  font-size: 1em;
-  text-align: left;
-  white-space: pre;
-  word-spacing: normal;
-  word-break: normal;
-  word-wrap: normal;
-  line-height: 1.5;
-  -moz-tab-size: 4;
-  tab-size: 4;
-  -webkit-hyphens: none;
-  -ms-hyphens: none;
-  hyphens: none;
-}
-pre[class*="language-"]::selection,
-pre[class*="language-"] ::selection,
-code[class*="language-"]::selection,
-code[class*="language-"] ::selection {
-  text-shadow: none;
-  background: #b3d4fc;
-}
-@media print {
-  code[class*="language-"],
-  pre[class*="language-"] {
-    text-shadow: none;
-  }
-}
-/* Code blocks */
-pre[class*="language-"] {
-  padding: 1em;
-  margin: 0.5em 0;
-  overflow: auto;
-}
-:not(pre) > code[class*="language-"],
-pre[class*="language-"] {
-  background: #f5f2f0;
-}
-/* Inline code */
-:not(pre) > code[class*="language-"] {
-  padding: 0.1em;
-  border-radius: 0.3em;
-  white-space: normal;
-}
-.token.comment,
-.token.prolog,
-.token.doctype,
-.token.cdata {
-  color: slategray;
-}
-.token.punctuation {
-  color: #999;
-}
-.namespace {
-  opacity: 0.7;
-}
-.token.property,
-.token.tag,
-.token.boolean,
-.token.number,
-.token.constant,
-.token.symbol,
-.token.deleted {
-  color: #905;
-}
-.token.selector,
-.token.attr-name,
-.token.string,
-.token.char,
-.token.builtin,
-.token.inserted {
-  color: #690;
-}
-.token.operator,
-.token.entity,
-.token.url,
-.language-css .token.string,
-.style .token.string {
-  color: #9a6e3a;
-  background: hsla(0, 0%, 100%, 0.5);
-}
-.token.atrule,
-.token.attr-value,
-.token.keyword {
-  color: #07a;
-}
-.token.function,
-.token.class-name {
-  color: #DD4A68;
-}
-.token.regex,
-.token.important,
-.token.variable {
-  color: #e90;
-}
-.token.important,
-.token.bold {
-  font-weight: bold;
-}
-.token.italic {
-  font-style: italic;
-}
-.token.entity {
-  cursor: help;
-}
-/* stylelint-enable */
-.mce-content-body {
-  overflow-wrap: break-word;
-  word-wrap: break-word;
-}
-.mce-content-body .mce-visual-caret {
-  background-color: black;
-  background-color: currentColor;
-  position: absolute;
-}
-.mce-content-body .mce-visual-caret-hidden {
-  display: none;
-}
-.mce-content-body *[data-mce-caret] {
-  left: -1000px;
-  margin: 0;
-  padding: 0;
-  position: absolute;
-  right: auto;
-  top: 0;
-}
-.mce-content-body .mce-offscreen-selection {
-  left: -2000000px;
-  max-width: 1000000px;
-  position: absolute;
-}
-.mce-content-body *[contentEditable=false] {
-  cursor: default;
-}
-.mce-content-body *[contentEditable=true] {
-  cursor: text;
-}
-.tox-cursor-format-painter {
-  cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default;
-}
-.mce-content-body figure.align-left {
-  float: left;
-}
-.mce-content-body figure.align-right {
-  float: right;
-}
-.mce-content-body figure.image.align-center {
-  display: table;
-  margin-left: auto;
-  margin-right: auto;
-}
-.mce-preview-object {
-  border: 1px solid gray;
-  display: inline-block;
-  line-height: 0;
-  margin: 0 2px 0 2px;
-  position: relative;
-}
-.mce-preview-object .mce-shim {
-  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
-  height: 100%;
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.mce-preview-object[data-mce-selected="2"] .mce-shim {
-  display: none;
-}
-.mce-object {
-  background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
-  border: 1px dashed #aaa;
-}
-.mce-pagebreak {
-  border: 1px dashed #aaa;
-  cursor: default;
-  display: block;
-  height: 5px;
-  margin-top: 15px;
-  page-break-before: always;
-  width: 100%;
-}
-@media print {
-  .mce-pagebreak {
-    border: 0;
-  }
-}
-.tiny-pageembed .mce-shim {
-  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
-  height: 100%;
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.tiny-pageembed[data-mce-selected="2"] .mce-shim {
-  display: none;
-}
-.tiny-pageembed {
-  display: inline-block;
-  position: relative;
-}
-.tiny-pageembed--21by9,
-.tiny-pageembed--16by9,
-.tiny-pageembed--4by3,
-.tiny-pageembed--1by1 {
-  display: block;
-  overflow: hidden;
-  padding: 0;
-  position: relative;
-  width: 100%;
-}
-.tiny-pageembed--21by9 {
-  padding-top: 42.857143%;
-}
-.tiny-pageembed--16by9 {
-  padding-top: 56.25%;
-}
-.tiny-pageembed--4by3 {
-  padding-top: 75%;
-}
-.tiny-pageembed--1by1 {
-  padding-top: 100%;
-}
-.tiny-pageembed--21by9 iframe,
-.tiny-pageembed--16by9 iframe,
-.tiny-pageembed--4by3 iframe,
-.tiny-pageembed--1by1 iframe {
-  border: 0;
-  height: 100%;
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.mce-content-body[data-mce-placeholder] {
-  position: relative;
-}
-.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
-  color: rgba(84, 111, 94, 0.7);
-  content: attr(data-mce-placeholder);
-  position: absolute;
-}
-.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {
-  left: 1px;
-}
-.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {
-  right: 1px;
-}
-.mce-content-body div.mce-resizehandle {
-  background-color: #4099ff;
-  border-color: #4099ff;
-  border-style: solid;
-  border-width: 1px;
-  box-sizing: border-box;
-  height: 10px;
-  position: absolute;
-  width: 10px;
-  z-index: 10000;
-}
-.mce-content-body div.mce-resizehandle:hover {
-  background-color: #4099ff;
-}
-.mce-content-body div.mce-resizehandle:nth-of-type(1) {
-  cursor: nwse-resize;
-}
-.mce-content-body div.mce-resizehandle:nth-of-type(2) {
-  cursor: nesw-resize;
-}
-.mce-content-body div.mce-resizehandle:nth-of-type(3) {
-  cursor: nwse-resize;
-}
-.mce-content-body div.mce-resizehandle:nth-of-type(4) {
-  cursor: nesw-resize;
-}
-.mce-content-body .mce-resize-backdrop {
-  z-index: 10000;
-}
-.mce-content-body .mce-clonedresizable {
-  cursor: default;
-  opacity: 0.5;
-  outline: 1px dashed black;
-  position: absolute;
-  z-index: 10001;
-}
-.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,
-.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {
-  border: 0;
-}
-.mce-content-body .mce-resize-helper {
-  background: #555;
-  background: rgba(0, 0, 0, 0.75);
-  border: 1px;
-  border-radius: 3px;
-  color: white;
-  display: none;
-  font-family: sans-serif;
-  font-size: 12px;
-  line-height: 14px;
-  margin: 5px 10px;
-  padding: 5px;
-  position: absolute;
-  white-space: nowrap;
-  z-index: 10002;
-}
-.tox-rtc-user-selection {
-  position: relative;
-}
-.tox-rtc-user-cursor {
-  bottom: 0;
-  cursor: default;
-  position: absolute;
-  top: 0;
-  width: 2px;
-}
-.tox-rtc-user-cursor::before {
-  background-color: inherit;
-  border-radius: 50%;
-  content: '';
-  display: block;
-  height: 8px;
-  position: absolute;
-  right: -3px;
-  top: -3px;
-  width: 8px;
-}
-.tox-rtc-user-cursor:hover::after {
-  background-color: inherit;
-  border-radius: 100px;
-  box-sizing: border-box;
-  color: #fff;
-  content: attr(data-user);
-  display: block;
-  font-size: 12px;
-  font-weight: normal;
-  left: -5px;
-  min-height: 8px;
-  min-width: 8px;
-  padding: 0 12px;
-  position: absolute;
-  top: -11px;
-  white-space: nowrap;
-  z-index: 1000;
-}
-.tox-rtc-user-selection--1 .tox-rtc-user-cursor {
-  background-color: #2dc26b;
-}
-.tox-rtc-user-selection--2 .tox-rtc-user-cursor {
-  background-color: #e03e2d;
-}
-.tox-rtc-user-selection--3 .tox-rtc-user-cursor {
-  background-color: #f1c40f;
-}
-.tox-rtc-user-selection--4 .tox-rtc-user-cursor {
-  background-color: #3598db;
-}
-.tox-rtc-user-selection--5 .tox-rtc-user-cursor {
-  background-color: #b96ad9;
-}
-.tox-rtc-user-selection--6 .tox-rtc-user-cursor {
-  background-color: #e67e23;
-}
-.tox-rtc-user-selection--7 .tox-rtc-user-cursor {
-  background-color: #aaa69d;
-}
-.tox-rtc-user-selection--8 .tox-rtc-user-cursor {
-  background-color: #f368e0;
-}
-.tox-rtc-remote-image {
-  background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;
-  border: 1px solid #ccc;
-  min-height: 240px;
-  min-width: 320px;
-}
-.mce-match-marker {
-  background: #aaa;
-  color: #fff;
-}
-.mce-match-marker-selected {
-  background: #39f;
-  color: #fff;
-}
-.mce-match-marker-selected::selection {
-  background: #39f;
-  color: #fff;
-}
-.mce-content-body img[data-mce-selected],
-.mce-content-body video[data-mce-selected],
-.mce-content-body audio[data-mce-selected],
-.mce-content-body object[data-mce-selected],
-.mce-content-body embed[data-mce-selected],
-.mce-content-body table[data-mce-selected] {
-  outline: 3px solid #b4d7ff;
-}
-.mce-content-body hr[data-mce-selected] {
-  outline: 3px solid #b4d7ff;
-  outline-offset: 1px;
-}
-.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {
-  outline: 3px solid #b4d7ff;
-}
-.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {
-  outline: 3px solid #b4d7ff;
-}
-.mce-content-body *[contentEditable=false][data-mce-selected] {
-  cursor: not-allowed;
-  outline: 3px solid #b4d7ff;
-}
-.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,
-.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {
-  outline: none;
-}
-.mce-content-body *[data-mce-selected="inline-boundary"] {
-  background-color: #b4d7ff;
-}
-.mce-content-body .mce-edit-focus {
-  outline: 3px solid #b4d7ff;
-}
-.mce-content-body td[data-mce-selected],
-.mce-content-body th[data-mce-selected] {
-  position: relative;
-}
-.mce-content-body td[data-mce-selected]::selection,
-.mce-content-body th[data-mce-selected]::selection {
-  background: none;
-}
-.mce-content-body td[data-mce-selected] *,
-.mce-content-body th[data-mce-selected] * {
-  outline: none;
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-}
-.mce-content-body td[data-mce-selected]::after,
-.mce-content-body th[data-mce-selected]::after {
-  background-color: rgba(180, 215, 255, 0.7);
-  border: 1px solid rgba(180, 215, 255, 0.7);
-  bottom: -1px;
-  content: '';
-  left: -1px;
-  mix-blend-mode: multiply;
-  position: absolute;
-  right: -1px;
-  top: -1px;
-}
-@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
-  .mce-content-body td[data-mce-selected]::after,
-  .mce-content-body th[data-mce-selected]::after {
-    border-color: rgba(0, 84, 180, 0.7);
-  }
-}
-.mce-content-body img::selection {
-  background: none;
-}
-.ephox-snooker-resizer-bar {
-  background-color: #b4d7ff;
-  opacity: 0;
-  -webkit-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-.ephox-snooker-resizer-cols {
-  cursor: col-resize;
-}
-.ephox-snooker-resizer-rows {
-  cursor: row-resize;
-}
-.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {
-  opacity: 1;
-}
-.mce-spellchecker-word {
-  background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
-  background-position: 0 calc(100% + 1px);
-  background-repeat: repeat-x;
-  background-size: auto 6px;
-  cursor: default;
-  height: 2rem;
-}
-.mce-spellchecker-grammar {
-  background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
-  background-position: 0 calc(100% + 1px);
-  background-repeat: repeat-x;
-  background-size: auto 6px;
-  cursor: default;
-}
-.mce-toc {
-  border: 1px solid gray;
-}
-.mce-toc h2 {
-  margin: 4px;
-}
-.mce-toc li {
-  list-style-type: none;
-}
-table[style*="border-width: 0px"],
-.mce-item-table:not([border]),
-.mce-item-table[border="0"],
-table[style*="border-width: 0px"] td,
-.mce-item-table:not([border]) td,
-.mce-item-table[border="0"] td,
-table[style*="border-width: 0px"] th,
-.mce-item-table:not([border]) th,
-.mce-item-table[border="0"] th,
-table[style*="border-width: 0px"] caption,
-.mce-item-table:not([border]) caption,
-.mce-item-table[border="0"] caption {
-  border: 1px dashed #bbb;
-}
-.mce-visualblocks p,
-.mce-visualblocks h1,
-.mce-visualblocks h2,
-.mce-visualblocks h3,
-.mce-visualblocks h4,
-.mce-visualblocks h5,
-.mce-visualblocks h6,
-.mce-visualblocks div:not([data-mce-bogus]),
-.mce-visualblocks section,
-.mce-visualblocks article,
-.mce-visualblocks blockquote,
-.mce-visualblocks address,
-.mce-visualblocks pre,
-.mce-visualblocks figure,
-.mce-visualblocks figcaption,
-.mce-visualblocks hgroup,
-.mce-visualblocks aside,
-.mce-visualblocks ul,
-.mce-visualblocks ol,
-.mce-visualblocks dl {
-  background-repeat: no-repeat;
-  border: 1px dashed #bbb;
-  margin-left: 3px;
-  padding-top: 10px;
-}
-.mce-visualblocks p {
-  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
-}
-.mce-visualblocks h1 {
-  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
-}
-.mce-visualblocks h2 {
-  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
-}
-.mce-visualblocks h3 {
-  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
-}
-.mce-visualblocks h4 {
-  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
-}
-.mce-visualblocks h5 {
-  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
-}
-.mce-visualblocks h6 {
-  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
-}
-.mce-visualblocks div:not([data-mce-bogus]) {
-  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
-}
-.mce-visualblocks section {
-  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
-}
-.mce-visualblocks article {
-  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
-}
-.mce-visualblocks blockquote {
-  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
-}
-.mce-visualblocks address {
-  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
-}
-.mce-visualblocks pre {
-  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
-}
-.mce-visualblocks figure {
-  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
-}
-.mce-visualblocks figcaption {
-  border: 1px dashed #bbb;
-}
-.mce-visualblocks hgroup {
-  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
-}
-.mce-visualblocks aside {
-  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
-}
-.mce-visualblocks ul {
-  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
-}
-.mce-visualblocks ol {
-  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
-}
-.mce-visualblocks dl {
-  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
-}
-.mce-visualblocks:not([dir=rtl]) p,
-.mce-visualblocks:not([dir=rtl]) h1,
-.mce-visualblocks:not([dir=rtl]) h2,
-.mce-visualblocks:not([dir=rtl]) h3,
-.mce-visualblocks:not([dir=rtl]) h4,
-.mce-visualblocks:not([dir=rtl]) h5,
-.mce-visualblocks:not([dir=rtl]) h6,
-.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),
-.mce-visualblocks:not([dir=rtl]) section,
-.mce-visualblocks:not([dir=rtl]) article,
-.mce-visualblocks:not([dir=rtl]) blockquote,
-.mce-visualblocks:not([dir=rtl]) address,
-.mce-visualblocks:not([dir=rtl]) pre,
-.mce-visualblocks:not([dir=rtl]) figure,
-.mce-visualblocks:not([dir=rtl]) figcaption,
-.mce-visualblocks:not([dir=rtl]) hgroup,
-.mce-visualblocks:not([dir=rtl]) aside,
-.mce-visualblocks:not([dir=rtl]) ul,
-.mce-visualblocks:not([dir=rtl]) ol,
-.mce-visualblocks:not([dir=rtl]) dl {
-  margin-left: 3px;
-}
-.mce-visualblocks[dir=rtl] p,
-.mce-visualblocks[dir=rtl] h1,
-.mce-visualblocks[dir=rtl] h2,
-.mce-visualblocks[dir=rtl] h3,
-.mce-visualblocks[dir=rtl] h4,
-.mce-visualblocks[dir=rtl] h5,
-.mce-visualblocks[dir=rtl] h6,
-.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),
-.mce-visualblocks[dir=rtl] section,
-.mce-visualblocks[dir=rtl] article,
-.mce-visualblocks[dir=rtl] blockquote,
-.mce-visualblocks[dir=rtl] address,
-.mce-visualblocks[dir=rtl] pre,
-.mce-visualblocks[dir=rtl] figure,
-.mce-visualblocks[dir=rtl] figcaption,
-.mce-visualblocks[dir=rtl] hgroup,
-.mce-visualblocks[dir=rtl] aside,
-.mce-visualblocks[dir=rtl] ul,
-.mce-visualblocks[dir=rtl] ol,
-.mce-visualblocks[dir=rtl] dl {
-  background-position-x: right;
-  margin-right: 3px;
-}
-.mce-nbsp,
-.mce-shy {
-  background: #aaa;
-}
-.mce-shy::after {
-  content: '-';
-}
-body {
-  font-family: sans-serif;
-}
-table {
-  border-collapse: collapse;
-}
diff --git a/public/resource/tinymce/skins/ui/jeecg/content.inline.css b/public/resource/tinymce/skins/ui/jeecg/content.inline.css
deleted file mode 100644
index 9eebd5b..0000000
--- a/public/resource/tinymce/skins/ui/jeecg/content.inline.css
+++ /dev/null
@@ -1,705 +0,0 @@
-/**
-* Copyright (c) Tiny Technologies, Inc. All rights reserved.
-* Licensed under the LGPL or a commercial license.
-* For LGPL see License.txt in the project root for license information.
-* For commercial licenses see https://www.tiny.cloud/
-*/
-.mce-content-body .mce-item-anchor {
-  background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
-  cursor: default;
-  display: inline-block;
-  height: 12px !important;
-  padding: 0 2px;
-  -webkit-user-modify: read-only;
-  -moz-user-modify: read-only;
-  -webkit-user-select: all;
-  -ms-user-select: all;
-      user-select: all;
-  width: 8px !important;
-}
-.mce-content-body .mce-item-anchor[data-mce-selected] {
-  outline-offset: 1px;
-}
-.tox-comments-visible .tox-comment {
-  background-color: #fff0b7;
-}
-.tox-comments-visible .tox-comment--active {
-  background-color: #ffe168;
-}
-.tox-checklist > li:not(.tox-checklist--hidden) {
-  list-style: none;
-  margin: 0.25em 0;
-}
-.tox-checklist > li:not(.tox-checklist--hidden)::before {
-  content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
-  cursor: pointer;
-  height: 1em;
-  margin-left: -1.5em;
-  margin-top: 0.125em;
-  position: absolute;
-  width: 1em;
-}
-.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {
-  content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
-}
-[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {
-  margin-left: 0;
-  margin-right: -1.5em;
-}
-/* stylelint-disable */
-/* http://prismjs.com/ */
-/**
- * prism.js default theme for JavaScript, CSS and HTML
- * Based on dabblet (http://dabblet.com)
- * @author Lea Verou
- */
-code[class*="language-"],
-pre[class*="language-"] {
-  color: black;
-  background: none;
-  text-shadow: 0 1px white;
-  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
-  font-size: 1em;
-  text-align: left;
-  white-space: pre;
-  word-spacing: normal;
-  word-break: normal;
-  word-wrap: normal;
-  line-height: 1.5;
-  -moz-tab-size: 4;
-  tab-size: 4;
-  -webkit-hyphens: none;
-  -ms-hyphens: none;
-  hyphens: none;
-}
-pre[class*="language-"]::selection,
-pre[class*="language-"] ::selection,
-code[class*="language-"]::selection,
-code[class*="language-"] ::selection {
-  text-shadow: none;
-  background: #b3d4fc;
-}
-@media print {
-  code[class*="language-"],
-  pre[class*="language-"] {
-    text-shadow: none;
-  }
-}
-/* Code blocks */
-pre[class*="language-"] {
-  padding: 1em;
-  margin: 0.5em 0;
-  overflow: auto;
-}
-:not(pre) > code[class*="language-"],
-pre[class*="language-"] {
-  background: #f5f2f0;
-}
-/* Inline code */
-:not(pre) > code[class*="language-"] {
-  padding: 0.1em;
-  border-radius: 0.3em;
-  white-space: normal;
-}
-.token.comment,
-.token.prolog,
-.token.doctype,
-.token.cdata {
-  color: slategray;
-}
-.token.punctuation {
-  color: #999;
-}
-.namespace {
-  opacity: 0.7;
-}
-.token.property,
-.token.tag,
-.token.boolean,
-.token.number,
-.token.constant,
-.token.symbol,
-.token.deleted {
-  color: #905;
-}
-.token.selector,
-.token.attr-name,
-.token.string,
-.token.char,
-.token.builtin,
-.token.inserted {
-  color: #690;
-}
-.token.operator,
-.token.entity,
-.token.url,
-.language-css .token.string,
-.style .token.string {
-  color: #9a6e3a;
-  background: hsla(0, 0%, 100%, 0.5);
-}
-.token.atrule,
-.token.attr-value,
-.token.keyword {
-  color: #07a;
-}
-.token.function,
-.token.class-name {
-  color: #DD4A68;
-}
-.token.regex,
-.token.important,
-.token.variable {
-  color: #e90;
-}
-.token.important,
-.token.bold {
-  font-weight: bold;
-}
-.token.italic {
-  font-style: italic;
-}
-.token.entity {
-  cursor: help;
-}
-/* stylelint-enable */
-.mce-content-body {
-  overflow-wrap: break-word;
-  word-wrap: break-word;
-}
-.mce-content-body .mce-visual-caret {
-  background-color: black;
-  background-color: currentColor;
-  position: absolute;
-}
-.mce-content-body .mce-visual-caret-hidden {
-  display: none;
-}
-.mce-content-body *[data-mce-caret] {
-  left: -1000px;
-  margin: 0;
-  padding: 0;
-  position: absolute;
-  right: auto;
-  top: 0;
-}
-.mce-content-body .mce-offscreen-selection {
-  left: -2000000px;
-  max-width: 1000000px;
-  position: absolute;
-}
-.mce-content-body *[contentEditable=false] {
-  cursor: default;
-}
-.mce-content-body *[contentEditable=true] {
-  cursor: text;
-}
-.tox-cursor-format-painter {
-  cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default;
-}
-.mce-content-body figure.align-left {
-  float: left;
-}
-.mce-content-body figure.align-right {
-  float: right;
-}
-.mce-content-body figure.image.align-center {
-  display: table;
-  margin-left: auto;
-  margin-right: auto;
-}
-.mce-preview-object {
-  border: 1px solid gray;
-  display: inline-block;
-  line-height: 0;
-  margin: 0 2px 0 2px;
-  position: relative;
-}
-.mce-preview-object .mce-shim {
-  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
-  height: 100%;
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.mce-preview-object[data-mce-selected="2"] .mce-shim {
-  display: none;
-}
-.mce-object {
-  background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
-  border: 1px dashed #aaa;
-}
-.mce-pagebreak {
-  border: 1px dashed #aaa;
-  cursor: default;
-  display: block;
-  height: 5px;
-  margin-top: 15px;
-  page-break-before: always;
-  width: 100%;
-}
-@media print {
-  .mce-pagebreak {
-    border: 0;
-  }
-}
-.tiny-pageembed .mce-shim {
-  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
-  height: 100%;
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.tiny-pageembed[data-mce-selected="2"] .mce-shim {
-  display: none;
-}
-.tiny-pageembed {
-  display: inline-block;
-  position: relative;
-}
-.tiny-pageembed--21by9,
-.tiny-pageembed--16by9,
-.tiny-pageembed--4by3,
-.tiny-pageembed--1by1 {
-  display: block;
-  overflow: hidden;
-  padding: 0;
-  position: relative;
-  width: 100%;
-}
-.tiny-pageembed--21by9 {
-  padding-top: 42.857143%;
-}
-.tiny-pageembed--16by9 {
-  padding-top: 56.25%;
-}
-.tiny-pageembed--4by3 {
-  padding-top: 75%;
-}
-.tiny-pageembed--1by1 {
-  padding-top: 100%;
-}
-.tiny-pageembed--21by9 iframe,
-.tiny-pageembed--16by9 iframe,
-.tiny-pageembed--4by3 iframe,
-.tiny-pageembed--1by1 iframe {
-  border: 0;
-  height: 100%;
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.mce-content-body[data-mce-placeholder] {
-  position: relative;
-}
-.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
-  color: rgba(84, 111, 94, 0.7);
-  content: attr(data-mce-placeholder);
-  position: absolute;
-}
-.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {
-  left: 1px;
-}
-.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {
-  right: 1px;
-}
-.mce-content-body div.mce-resizehandle {
-  background-color: #4099ff;
-  border-color: #4099ff;
-  border-style: solid;
-  border-width: 1px;
-  box-sizing: border-box;
-  height: 10px;
-  position: absolute;
-  width: 10px;
-  z-index: 10000;
-}
-.mce-content-body div.mce-resizehandle:hover {
-  background-color: #4099ff;
-}
-.mce-content-body div.mce-resizehandle:nth-of-type(1) {
-  cursor: nwse-resize;
-}
-.mce-content-body div.mce-resizehandle:nth-of-type(2) {
-  cursor: nesw-resize;
-}
-.mce-content-body div.mce-resizehandle:nth-of-type(3) {
-  cursor: nwse-resize;
-}
-.mce-content-body div.mce-resizehandle:nth-of-type(4) {
-  cursor: nesw-resize;
-}
-.mce-content-body .mce-resize-backdrop {
-  z-index: 10000;
-}
-.mce-content-body .mce-clonedresizable {
-  cursor: default;
-  opacity: 0.5;
-  outline: 1px dashed black;
-  position: absolute;
-  z-index: 10001;
-}
-.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,
-.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {
-  border: 0;
-}
-.mce-content-body .mce-resize-helper {
-  background: #555;
-  background: rgba(0, 0, 0, 0.75);
-  border: 1px;
-  border-radius: 3px;
-  color: white;
-  display: none;
-  font-family: sans-serif;
-  font-size: 12px;
-  line-height: 14px;
-  margin: 5px 10px;
-  padding: 5px;
-  position: absolute;
-  white-space: nowrap;
-  z-index: 10002;
-}
-.tox-rtc-user-selection {
-  position: relative;
-}
-.tox-rtc-user-cursor {
-  bottom: 0;
-  cursor: default;
-  position: absolute;
-  top: 0;
-  width: 2px;
-}
-.tox-rtc-user-cursor::before {
-  background-color: inherit;
-  border-radius: 50%;
-  content: '';
-  display: block;
-  height: 8px;
-  position: absolute;
-  right: -3px;
-  top: -3px;
-  width: 8px;
-}
-.tox-rtc-user-cursor:hover::after {
-  background-color: inherit;
-  border-radius: 100px;
-  box-sizing: border-box;
-  color: #fff;
-  content: attr(data-user);
-  display: block;
-  font-size: 12px;
-  font-weight: normal;
-  left: -5px;
-  min-height: 8px;
-  min-width: 8px;
-  padding: 0 12px;
-  position: absolute;
-  top: -11px;
-  white-space: nowrap;
-  z-index: 1000;
-}
-.tox-rtc-user-selection--1 .tox-rtc-user-cursor {
-  background-color: #2dc26b;
-}
-.tox-rtc-user-selection--2 .tox-rtc-user-cursor {
-  background-color: #e03e2d;
-}
-.tox-rtc-user-selection--3 .tox-rtc-user-cursor {
-  background-color: #f1c40f;
-}
-.tox-rtc-user-selection--4 .tox-rtc-user-cursor {
-  background-color: #3598db;
-}
-.tox-rtc-user-selection--5 .tox-rtc-user-cursor {
-  background-color: #b96ad9;
-}
-.tox-rtc-user-selection--6 .tox-rtc-user-cursor {
-  background-color: #e67e23;
-}
-.tox-rtc-user-selection--7 .tox-rtc-user-cursor {
-  background-color: #aaa69d;
-}
-.tox-rtc-user-selection--8 .tox-rtc-user-cursor {
-  background-color: #f368e0;
-}
-.tox-rtc-remote-image {
-  background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;
-  border: 1px solid #ccc;
-  min-height: 240px;
-  min-width: 320px;
-}
-.mce-match-marker {
-  background: #aaa;
-  color: #fff;
-}
-.mce-match-marker-selected {
-  background: #39f;
-  color: #fff;
-}
-.mce-match-marker-selected::selection {
-  background: #39f;
-  color: #fff;
-}
-.mce-content-body img[data-mce-selected],
-.mce-content-body video[data-mce-selected],
-.mce-content-body audio[data-mce-selected],
-.mce-content-body object[data-mce-selected],
-.mce-content-body embed[data-mce-selected],
-.mce-content-body table[data-mce-selected] {
-  outline: 3px solid #b4d7ff;
-}
-.mce-content-body hr[data-mce-selected] {
-  outline: 3px solid #b4d7ff;
-  outline-offset: 1px;
-}
-.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {
-  outline: 3px solid #b4d7ff;
-}
-.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {
-  outline: 3px solid #b4d7ff;
-}
-.mce-content-body *[contentEditable=false][data-mce-selected] {
-  cursor: not-allowed;
-  outline: 3px solid #b4d7ff;
-}
-.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,
-.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {
-  outline: none;
-}
-.mce-content-body *[data-mce-selected="inline-boundary"] {
-  background-color: #b4d7ff;
-}
-.mce-content-body .mce-edit-focus {
-  outline: 3px solid #b4d7ff;
-}
-.mce-content-body td[data-mce-selected],
-.mce-content-body th[data-mce-selected] {
-  position: relative;
-}
-.mce-content-body td[data-mce-selected]::selection,
-.mce-content-body th[data-mce-selected]::selection {
-  background: none;
-}
-.mce-content-body td[data-mce-selected] *,
-.mce-content-body th[data-mce-selected] * {
-  outline: none;
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-}
-.mce-content-body td[data-mce-selected]::after,
-.mce-content-body th[data-mce-selected]::after {
-  background-color: rgba(180, 215, 255, 0.7);
-  border: 1px solid rgba(180, 215, 255, 0.7);
-  bottom: -1px;
-  content: '';
-  left: -1px;
-  mix-blend-mode: multiply;
-  position: absolute;
-  right: -1px;
-  top: -1px;
-}
-@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
-  .mce-content-body td[data-mce-selected]::after,
-  .mce-content-body th[data-mce-selected]::after {
-    border-color: rgba(0, 84, 180, 0.7);
-  }
-}
-.mce-content-body img::selection {
-  background: none;
-}
-.ephox-snooker-resizer-bar {
-  background-color: #b4d7ff;
-  opacity: 0;
-  -webkit-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-.ephox-snooker-resizer-cols {
-  cursor: col-resize;
-}
-.ephox-snooker-resizer-rows {
-  cursor: row-resize;
-}
-.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {
-  opacity: 1;
-}
-.mce-spellchecker-word {
-  background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
-  background-position: 0 calc(100% + 1px);
-  background-repeat: repeat-x;
-  background-size: auto 6px;
-  cursor: default;
-  height: 2rem;
-}
-.mce-spellchecker-grammar {
-  background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
-  background-position: 0 calc(100% + 1px);
-  background-repeat: repeat-x;
-  background-size: auto 6px;
-  cursor: default;
-}
-.mce-toc {
-  border: 1px solid gray;
-}
-.mce-toc h2 {
-  margin: 4px;
-}
-.mce-toc li {
-  list-style-type: none;
-}
-table[style*="border-width: 0px"],
-.mce-item-table:not([border]),
-.mce-item-table[border="0"],
-table[style*="border-width: 0px"] td,
-.mce-item-table:not([border]) td,
-.mce-item-table[border="0"] td,
-table[style*="border-width: 0px"] th,
-.mce-item-table:not([border]) th,
-.mce-item-table[border="0"] th,
-table[style*="border-width: 0px"] caption,
-.mce-item-table:not([border]) caption,
-.mce-item-table[border="0"] caption {
-  border: 1px dashed #bbb;
-}
-.mce-visualblocks p,
-.mce-visualblocks h1,
-.mce-visualblocks h2,
-.mce-visualblocks h3,
-.mce-visualblocks h4,
-.mce-visualblocks h5,
-.mce-visualblocks h6,
-.mce-visualblocks div:not([data-mce-bogus]),
-.mce-visualblocks section,
-.mce-visualblocks article,
-.mce-visualblocks blockquote,
-.mce-visualblocks address,
-.mce-visualblocks pre,
-.mce-visualblocks figure,
-.mce-visualblocks figcaption,
-.mce-visualblocks hgroup,
-.mce-visualblocks aside,
-.mce-visualblocks ul,
-.mce-visualblocks ol,
-.mce-visualblocks dl {
-  background-repeat: no-repeat;
-  border: 1px dashed #bbb;
-  margin-left: 3px;
-  padding-top: 10px;
-}
-.mce-visualblocks p {
-  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
-}
-.mce-visualblocks h1 {
-  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
-}
-.mce-visualblocks h2 {
-  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
-}
-.mce-visualblocks h3 {
-  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
-}
-.mce-visualblocks h4 {
-  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
-}
-.mce-visualblocks h5 {
-  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
-}
-.mce-visualblocks h6 {
-  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
-}
-.mce-visualblocks div:not([data-mce-bogus]) {
-  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
-}
-.mce-visualblocks section {
-  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
-}
-.mce-visualblocks article {
-  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
-}
-.mce-visualblocks blockquote {
-  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
-}
-.mce-visualblocks address {
-  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
-}
-.mce-visualblocks pre {
-  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
-}
-.mce-visualblocks figure {
-  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
-}
-.mce-visualblocks figcaption {
-  border: 1px dashed #bbb;
-}
-.mce-visualblocks hgroup {
-  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
-}
-.mce-visualblocks aside {
-  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
-}
-.mce-visualblocks ul {
-  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
-}
-.mce-visualblocks ol {
-  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
-}
-.mce-visualblocks dl {
-  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
-}
-.mce-visualblocks:not([dir=rtl]) p,
-.mce-visualblocks:not([dir=rtl]) h1,
-.mce-visualblocks:not([dir=rtl]) h2,
-.mce-visualblocks:not([dir=rtl]) h3,
-.mce-visualblocks:not([dir=rtl]) h4,
-.mce-visualblocks:not([dir=rtl]) h5,
-.mce-visualblocks:not([dir=rtl]) h6,
-.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),
-.mce-visualblocks:not([dir=rtl]) section,
-.mce-visualblocks:not([dir=rtl]) article,
-.mce-visualblocks:not([dir=rtl]) blockquote,
-.mce-visualblocks:not([dir=rtl]) address,
-.mce-visualblocks:not([dir=rtl]) pre,
-.mce-visualblocks:not([dir=rtl]) figure,
-.mce-visualblocks:not([dir=rtl]) figcaption,
-.mce-visualblocks:not([dir=rtl]) hgroup,
-.mce-visualblocks:not([dir=rtl]) aside,
-.mce-visualblocks:not([dir=rtl]) ul,
-.mce-visualblocks:not([dir=rtl]) ol,
-.mce-visualblocks:not([dir=rtl]) dl {
-  margin-left: 3px;
-}
-.mce-visualblocks[dir=rtl] p,
-.mce-visualblocks[dir=rtl] h1,
-.mce-visualblocks[dir=rtl] h2,
-.mce-visualblocks[dir=rtl] h3,
-.mce-visualblocks[dir=rtl] h4,
-.mce-visualblocks[dir=rtl] h5,
-.mce-visualblocks[dir=rtl] h6,
-.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),
-.mce-visualblocks[dir=rtl] section,
-.mce-visualblocks[dir=rtl] article,
-.mce-visualblocks[dir=rtl] blockquote,
-.mce-visualblocks[dir=rtl] address,
-.mce-visualblocks[dir=rtl] pre,
-.mce-visualblocks[dir=rtl] figure,
-.mce-visualblocks[dir=rtl] figcaption,
-.mce-visualblocks[dir=rtl] hgroup,
-.mce-visualblocks[dir=rtl] aside,
-.mce-visualblocks[dir=rtl] ul,
-.mce-visualblocks[dir=rtl] ol,
-.mce-visualblocks[dir=rtl] dl {
-  background-position-x: right;
-  margin-right: 3px;
-}
-.mce-nbsp,
-.mce-shy {
-  background: #aaa;
-}
-.mce-shy::after {
-  content: '-';
-}
diff --git a/public/resource/tinymce/skins/ui/jeecg/content.inline.min.css b/public/resource/tinymce/skins/ui/jeecg/content.inline.min.css
deleted file mode 100644
index 9acf095..0000000
--- a/public/resource/tinymce/skins/ui/jeecg/content.inline.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
-* Copyright (c) Tiny Technologies, Inc. All rights reserved.
-* Licensed under the LGPL or a commercial license.
-* For LGPL see License.txt in the project root for license information.
-* For commercial licenses see https://www.tiny.cloud/
-*/
-.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(84,111,94,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:10000}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:400;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}
\ No newline at end of file
diff --git a/public/resource/tinymce/skins/ui/jeecg/content.min.css b/public/resource/tinymce/skins/ui/jeecg/content.min.css
deleted file mode 100644
index e9a1d89..0000000
--- a/public/resource/tinymce/skins/ui/jeecg/content.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
-* Copyright (c) Tiny Technologies, Inc. All rights reserved.
-* Licensed under the LGPL or a commercial license.
-* For LGPL see License.txt in the project root for license information.
-* For commercial licenses see https://www.tiny.cloud/
-*/
-.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(84,111,94,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:10000}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:400;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse}
\ No newline at end of file
diff --git a/public/resource/tinymce/skins/ui/jeecg/content.mobile.css b/public/resource/tinymce/skins/ui/jeecg/content.mobile.css
deleted file mode 100644
index 64783f0..0000000
--- a/public/resource/tinymce/skins/ui/jeecg/content.mobile.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
-* Copyright (c) Tiny Technologies, Inc. All rights reserved.
-* Licensed under the LGPL or a commercial license.
-* For LGPL see License.txt in the project root for license information.
-* For commercial licenses see https://www.tiny.cloud/
-*/
-.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection {
-  /* Note: this file is used inside the content, so isn't part of theming */
-  background-color: green;
-  display: inline-block;
-  opacity: 0.5;
-  position: absolute;
-}
-body {
-  -webkit-text-size-adjust: none;
-}
-body img {
-  /* this is related to the content margin */
-  max-width: 96vw;
-}
-body table img {
-  max-width: 95%;
-}
-body {
-  font-family: sans-serif;
-}
-table {
-  border-collapse: collapse;
-}
diff --git a/public/resource/tinymce/skins/ui/jeecg/content.mobile.min.css b/public/resource/tinymce/skins/ui/jeecg/content.mobile.min.css
deleted file mode 100644
index 1b87246..0000000
--- a/public/resource/tinymce/skins/ui/jeecg/content.mobile.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
-* Copyright (c) Tiny Technologies, Inc. All rights reserved.
-* Licensed under the LGPL or a commercial license.
-* For LGPL see License.txt in the project root for license information.
-* For commercial licenses see https://www.tiny.cloud/
-*/
-.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse}
\ No newline at end of file
diff --git a/public/resource/tinymce/skins/ui/jeecg/fonts/tinymce-mobile.woff b/public/resource/tinymce/skins/ui/jeecg/fonts/tinymce-mobile.woff
deleted file mode 100644
index 1e3be03..0000000
--- a/public/resource/tinymce/skins/ui/jeecg/fonts/tinymce-mobile.woff
+++ /dev/null
Binary files differ
diff --git a/public/resource/tinymce/skins/ui/jeecg/skin.css b/public/resource/tinymce/skins/ui/jeecg/skin.css
deleted file mode 100644
index 7d54f3c..0000000
--- a/public/resource/tinymce/skins/ui/jeecg/skin.css
+++ /dev/null
@@ -1,3045 +0,0 @@
-/**
-* Copyright (c) Tiny Technologies, Inc. All rights reserved.
-* Licensed under the LGPL or a commercial license.
-* For LGPL see License.txt in the project root for license information.
-* For commercial licenses see https://www.tiny.cloud/
-*/
-.tox {
-  box-shadow: none;
-  box-sizing: content-box;
-  color: rgba(84, 111, 94, 0.85);
-  cursor: auto;
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
-  font-size: 10px;
-  font-style: normal;
-  font-weight: normal;
-  line-height: normal;
-  -webkit-tap-highlight-color: transparent;
-  text-decoration: none;
-  text-shadow: none;
-  text-transform: none;
-  vertical-align: initial;
-  white-space: normal;
-}
-.tox *:not(svg):not(rect) {
-  box-sizing: inherit;
-  color: inherit;
-  cursor: inherit;
-  direction: inherit;
-  font-family: inherit;
-  font-size: inherit;
-  font-style: inherit;
-  font-weight: inherit;
-  line-height: inherit;
-  -webkit-tap-highlight-color: inherit;
-  text-align: inherit;
-  text-decoration: inherit;
-  text-shadow: inherit;
-  text-transform: inherit;
-  vertical-align: inherit;
-  white-space: inherit;
-}
-.tox *:not(svg):not(rect) {
-  /* stylelint-disable-line no-duplicate-selectors */
-  background: transparent;
-  border: 0;
-  box-shadow: none;
-  float: none;
-  height: auto;
-  margin: 0;
-  max-width: none;
-  outline: 0;
-  padding: 0;
-  position: static;
-  width: auto;
-}
-.tox:not([dir=rtl]) {
-  direction: ltr;
-  text-align: left;
-}
-.tox[dir=rtl] {
-  direction: rtl;
-  text-align: right;
-}
-.tox-tinymce {
-  border: 1px solid #d9d9d9;
-  border-radius: 0px;
-  box-shadow: none;
-  box-sizing: border-box;
-  display: flex;
-  flex-direction: column;
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
-  overflow: hidden;
-  position: relative;
-  visibility: inherit !important;
-}
-.tox-tinymce-inline {
-  border: none;
-  box-shadow: none;
-}
-.tox-tinymce-inline .tox-editor-header {
-  background-color: transparent;
-  border: 1px solid #d9d9d9;
-  border-radius: 0px;
-  box-shadow: none;
-}
-.tox-tinymce-aux {
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
-  z-index: 1300;
-}
-.tox-tinymce *:focus,
-.tox-tinymce-aux *:focus {
-  outline: none;
-}
-button::-moz-focus-inner {
-  border: 0;
-}
-.tox[dir=rtl] .tox-icon--flip svg {
-  transform: rotateY(180deg);
-}
-.tox .accessibility-issue__header {
-  align-items: center;
-  display: flex;
-  margin-bottom: 2.5px;
-}
-.tox .accessibility-issue__description {
-  align-items: stretch;
-  border: 1px solid #d9d9d9;
-  border-radius: 3px;
-  display: flex;
-  justify-content: space-between;
-}
-.tox .accessibility-issue__description > div {
-  padding-bottom: 2.5px;
-}
-.tox .accessibility-issue__description > div > div {
-  align-items: center;
-  display: flex;
-  margin-bottom: 2.5px;
-}
-.tox .accessibility-issue__description > *:last-child:not(:only-child) {
-  border-color: #d9d9d9;
-  border-style: solid;
-}
-.tox .accessibility-issue__repair {
-  margin-top: 16px;
-}
-.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description {
-  background-color: rgba(10, 143, 233, 0.1);
-  border-color: rgba(10, 143, 233, 0.4);
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description > *:last-child {
-  border-color: rgba(10, 143, 233, 0.4);
-}
-.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 {
-  color: #0a8fe9;
-}
-.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg {
-  fill: #0a8fe9;
-}
-.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon {
-  color: #0a8fe9;
-}
-.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description {
-  background-color: rgba(255, 165, 0, 0.1);
-  border-color: rgba(255, 165, 0, 0.5);
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description > *:last-child {
-  border-color: rgba(255, 165, 0, 0.5);
-}
-.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 {
-  color: #cc8500;
-}
-.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg {
-  fill: #cc8500;
-}
-.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon {
-  color: #cc8500;
-}
-.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description {
-  background-color: rgba(204, 0, 0, 0.1);
-  border-color: rgba(204, 0, 0, 0.4);
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description > *:last-child {
-  border-color: rgba(204, 0, 0, 0.4);
-}
-.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 {
-  color: #c00;
-}
-.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg {
-  fill: #c00;
-}
-.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon {
-  color: #c00;
-}
-.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description {
-  background-color: rgba(120, 171, 70, 0.1);
-  border-color: rgba(120, 171, 70, 0.4);
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child {
-  border-color: rgba(120, 171, 70, 0.4);
-}
-.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 {
-  color: #78AB46;
-}
-.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg {
-  fill: #78AB46;
-}
-.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon {
-  color: #78AB46;
-}
-.tox .tox-dialog__body-content .accessibility-issue__header h1,
-.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 {
-  margin-top: 0;
-}
-.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button {
-  margin-left: 2.5px;
-}
-.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {
-  margin-left: auto;
-}
-.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description {
-  padding: 2.5px 2.5px 2.5px 5px;
-}
-.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description > *:last-child {
-  border-left-width: 1px;
-  padding-left: 2.5px;
-}
-.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button {
-  margin-right: 2.5px;
-}
-.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {
-  margin-right: auto;
-}
-.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description {
-  padding: 2.5px 5px 2.5px 2.5px;
-}
-.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description > *:last-child {
-  border-right-width: 1px;
-  padding-right: 2.5px;
-}
-.tox .tox-anchorbar {
-  display: flex;
-  flex: 0 0 auto;
-}
-.tox .tox-bar {
-  display: flex;
-  flex: 0 0 auto;
-}
-.tox .tox-button {
-  background-color: #0a8fe9;
-  background-image: none;
-  background-position: 0 0;
-  background-repeat: repeat;
-  border-color: #0a8fe9;
-  border-radius: 3px;
-  border-style: solid;
-  border-width: 1px;
-  box-shadow: none;
-  box-sizing: border-box;
-  color: #fff;
-  cursor: pointer;
-  display: inline-block;
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
-  font-size: 8.75px;
-  font-style: normal;
-  font-weight: normal;
-  letter-spacing: normal;
-  line-height: 24px;
-  margin: 0;
-  outline: none;
-  padding: 2.5px 10px;
-  text-align: center;
-  text-decoration: none;
-  text-transform: none;
-  white-space: nowrap;
-}
-.tox .tox-button[disabled] {
-  background-color: #0a8fe9;
-  background-image: none;
-  border-color: #0a8fe9;
-  box-shadow: none;
-  color: rgba(255, 255, 255, 0.5);
-  cursor: not-allowed;
-}
-.tox .tox-button:focus:not(:disabled) {
-  background-color: #0980d1;
-  background-image: none;
-  border-color: #0980d1;
-  box-shadow: none;
-  color: #fff;
-}
-.tox .tox-button:hover:not(:disabled) {
-  background-color: #0980d1;
-  background-image: none;
-  border-color: #0980d1;
-  box-shadow: none;
-  color: #fff;
-}
-.tox .tox-button:active:not(:disabled) {
-  background-color: #0871b8;
-  background-image: none;
-  border-color: #0871b8;
-  box-shadow: none;
-  color: #fff;
-}
-.tox .tox-button--secondary {
-  background-color: #f0f0f0;
-  background-image: none;
-  background-position: 0 0;
-  background-repeat: repeat;
-  border-color: #f0f0f0;
-  border-radius: 3px;
-  border-style: solid;
-  border-width: 1px;
-  box-shadow: none;
-  color: rgba(84, 111, 94, 0.85);
-  font-size: 8.75px;
-  font-style: normal;
-  font-weight: normal;
-  letter-spacing: normal;
-  outline: none;
-  padding: 2.5px 10px;
-  text-decoration: none;
-  text-transform: none;
-}
-.tox .tox-button--secondary[disabled] {
-  background-color: #f0f0f0;
-  background-image: none;
-  border-color: #f0f0f0;
-  box-shadow: none;
-  color: rgba(84, 111, 94, 0.5);
-}
-.tox .tox-button--secondary:focus:not(:disabled) {
-  background-color: #e3e3e3;
-  background-image: none;
-  border-color: #e3e3e3;
-  box-shadow: none;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-button--secondary:hover:not(:disabled) {
-  background-color: #e3e3e3;
-  background-image: none;
-  border-color: #e3e3e3;
-  box-shadow: none;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-button--secondary:active:not(:disabled) {
-  background-color: #d6d6d6;
-  background-image: none;
-  border-color: #d6d6d6;
-  box-shadow: none;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-button--icon,
-.tox .tox-button.tox-button--icon,
-.tox .tox-button.tox-button--secondary.tox-button--icon {
-  padding: 2.5px;
-}
-.tox .tox-button--icon .tox-icon svg,
-.tox .tox-button.tox-button--icon .tox-icon svg,
-.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg {
-  display: block;
-  fill: currentColor;
-}
-.tox .tox-button-link {
-  background: 0;
-  border: none;
-  box-sizing: border-box;
-  cursor: pointer;
-  display: inline-block;
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
-  font-size: 10px;
-  font-weight: normal;
-  line-height: 1.3;
-  margin: 0;
-  padding: 0;
-  white-space: nowrap;
-}
-.tox .tox-button-link--sm {
-  font-size: 8.75px;
-}
-.tox .tox-button--naked {
-  background-color: transparent;
-  border-color: transparent;
-  box-shadow: unset;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-button--naked[disabled] {
-  background-color: #f0f0f0;
-  border-color: #f0f0f0;
-  box-shadow: none;
-  color: rgba(84, 111, 94, 0.5);
-}
-.tox .tox-button--naked:hover:not(:disabled) {
-  background-color: #e3e3e3;
-  border-color: #e3e3e3;
-  box-shadow: none;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-button--naked:focus:not(:disabled) {
-  background-color: #e3e3e3;
-  border-color: #e3e3e3;
-  box-shadow: none;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-button--naked:active:not(:disabled) {
-  background-color: #d6d6d6;
-  border-color: #d6d6d6;
-  box-shadow: none;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-button--naked .tox-icon svg {
-  fill: currentColor;
-}
-.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) {
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-checkbox {
-  align-items: center;
-  border-radius: 3px;
-  cursor: pointer;
-  display: flex;
-  height: 36px;
-  min-width: 36px;
-}
-.tox .tox-checkbox__input {
-  /* Hide from view but visible to screen readers */
-  height: 1px;
-  overflow: hidden;
-  position: absolute;
-  top: auto;
-  width: 1px;
-}
-.tox .tox-checkbox__icons {
-  align-items: center;
-  border-radius: 3px;
-  box-shadow: 0 0 0 2px transparent;
-  box-sizing: content-box;
-  display: flex;
-  height: 24px;
-  justify-content: center;
-  padding: calc(2.5px - 1px);
-  width: 24px;
-}
-.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
-  display: block;
-  fill: rgba(84, 111, 94, 0.3);
-}
-.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {
-  display: none;
-  fill: #0a8fe9;
-}
-.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg {
-  display: none;
-  fill: #0a8fe9;
-}
-.tox .tox-checkbox--disabled {
-  color: rgba(84, 111, 94, 0.5);
-  cursor: not-allowed;
-}
-.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg {
-  fill: rgba(84, 111, 94, 0.5);
-}
-.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
-  fill: rgba(84, 111, 94, 0.5);
-}
-.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {
-  fill: rgba(84, 111, 94, 0.5);
-}
-.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
-  display: none;
-}
-.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg {
-  display: block;
-}
-.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
-  display: none;
-}
-.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {
-  display: block;
-}
-.tox input.tox-checkbox__input:focus + .tox-checkbox__icons {
-  border-radius: 3px;
-  box-shadow: inset 0 0 0 1px #0a8fe9;
-  padding: calc(2.5px - 1px);
-}
-.tox:not([dir=rtl]) .tox-checkbox__label {
-  margin-left: 2.5px;
-}
-.tox:not([dir=rtl]) .tox-checkbox__input {
-  left: -10000px;
-}
-.tox:not([dir=rtl]) .tox-bar .tox-checkbox {
-  margin-left: 2.5px;
-}
-.tox[dir=rtl] .tox-checkbox__label {
-  margin-right: 2.5px;
-}
-.tox[dir=rtl] .tox-checkbox__input {
-  right: -10000px;
-}
-.tox[dir=rtl] .tox-bar .tox-checkbox {
-  margin-right: 2.5px;
-}
-.tox {
-  /* stylelint-disable-next-line no-descending-specificity */
-}
-.tox .tox-collection--toolbar .tox-collection__group {
-  display: flex;
-  padding: 0;
-}
-.tox .tox-collection--grid .tox-collection__group {
-  display: flex;
-  flex-wrap: wrap;
-  max-height: 208px;
-  overflow-x: hidden;
-  overflow-y: auto;
-  padding: 0;
-}
-.tox .tox-collection--list .tox-collection__group {
-  border-bottom-width: 0;
-  border-color: #d9d9d9;
-  border-left-width: 0;
-  border-right-width: 0;
-  border-style: solid;
-  border-top-width: 1px;
-  padding: 2.5px 0;
-}
-.tox .tox-collection--list .tox-collection__group:first-child {
-  border-top-width: 0;
-}
-.tox .tox-collection__group-heading {
-  background-color: #f3f3f3;
-  color: rgba(84, 111, 94, 0.7);
-  cursor: default;
-  font-size: 12px;
-  font-style: normal;
-  font-weight: normal;
-  margin-bottom: 2.5px;
-  margin-top: -2.5px;
-  padding: 2.5px 5px;
-  text-transform: none;
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-}
-.tox .tox-collection__item {
-  align-items: center;
-  color: rgba(84, 111, 94, 0.85);
-  cursor: pointer;
-  display: flex;
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-}
-.tox .tox-collection--list .tox-collection__item {
-  padding: 2.5px 5px;
-}
-.tox .tox-collection--toolbar .tox-collection__item {
-  border-radius: 3px;
-  padding: 2.5px;
-}
-.tox .tox-collection--grid .tox-collection__item {
-  border-radius: 3px;
-  padding: 2.5px;
-}
-.tox .tox-collection--list .tox-collection__item--enabled {
-  background-color: #fff;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-collection--list .tox-collection__item--active {
-  background-color: #e5e9e7;
-}
-.tox .tox-collection--toolbar .tox-collection__item--enabled {
-  background-color: #e5e9e7;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-collection--toolbar .tox-collection__item--active {
-  background-color: #e5e9e7;
-}
-.tox .tox-collection--grid .tox-collection__item--enabled {
-  background-color: #e5e9e7;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) {
-  background-color: #e5e9e7;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) {
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) {
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-collection__item-icon,
-.tox .tox-collection__item-checkmark {
-  align-items: center;
-  display: flex;
-  height: 24px;
-  justify-content: center;
-  width: 24px;
-}
-.tox .tox-collection__item-icon svg,
-.tox .tox-collection__item-checkmark svg {
-  fill: currentColor;
-}
-.tox .tox-collection--toolbar-lg .tox-collection__item-icon {
-  height: 48px;
-  width: 48px;
-}
-.tox .tox-collection__item-label {
-  color: currentColor;
-  display: inline-block;
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-  font-size: 8.75px;
-  font-style: normal;
-  font-weight: normal;
-  line-height: 24px;
-  text-transform: none;
-  word-break: break-all;
-}
-.tox .tox-collection__item-accessory {
-  color: rgba(84, 111, 94, 0.7);
-  display: inline-block;
-  font-size: 8.75px;
-  height: 24px;
-  line-height: 24px;
-  text-transform: none;
-}
-.tox .tox-collection__item-caret {
-  align-items: center;
-  display: flex;
-  min-height: 24px;
-}
-.tox .tox-collection__item-caret::after {
-  content: '';
-  font-size: 0;
-  min-height: inherit;
-}
-.tox .tox-collection__item-caret svg {
-  fill: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-collection__item--state-disabled {
-  background-color: transparent;
-  color: rgba(84, 111, 94, 0.5);
-  cursor: not-allowed;
-}
-.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg {
-  fill: rgba(84, 111, 94, 0.5);
-}
-.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg {
-  display: none;
-}
-.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark {
-  display: none;
-}
-.tox .tox-collection--horizontal {
-  background-color: #fff;
-  border: 1px solid #d9d9d9;
-  border-radius: 3px;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
-  display: flex;
-  flex: 0 0 auto;
-  flex-shrink: 0;
-  flex-wrap: nowrap;
-  margin-bottom: 0;
-  overflow-x: auto;
-  padding: 0;
-}
-.tox .tox-collection--horizontal .tox-collection__group {
-  align-items: center;
-  display: flex;
-  flex-wrap: nowrap;
-  margin: 0;
-  padding: 0 2.5px;
-}
-.tox .tox-collection--horizontal .tox-collection__item {
-  height: 34px;
-  margin: 2px 0 3px 0;
-  padding: 0 4px;
-}
-.tox .tox-collection--horizontal .tox-collection__item-label {
-  white-space: nowrap;
-}
-.tox .tox-collection--horizontal .tox-collection__item-caret {
-  margin-left: 4px;
-}
-.tox .tox-collection__item-container {
-  display: flex;
-}
-.tox .tox-collection__item-container--row {
-  align-items: center;
-  flex: 1 1 auto;
-  flex-direction: row;
-}
-.tox .tox-collection__item-container--row.tox-collection__item-container--align-left {
-  margin-right: auto;
-}
-.tox .tox-collection__item-container--row.tox-collection__item-container--align-right {
-  justify-content: flex-end;
-  margin-left: auto;
-}
-.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top {
-  align-items: flex-start;
-  margin-bottom: auto;
-}
-.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle {
-  align-items: center;
-}
-.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom {
-  align-items: flex-end;
-  margin-top: auto;
-}
-.tox .tox-collection__item-container--column {
-  -ms-grid-row-align: center;
-      align-self: center;
-  flex: 1 1 auto;
-  flex-direction: column;
-}
-.tox .tox-collection__item-container--column.tox-collection__item-container--align-left {
-  align-items: flex-start;
-}
-.tox .tox-collection__item-container--column.tox-collection__item-container--align-right {
-  align-items: flex-end;
-}
-.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top {
-  align-self: flex-start;
-}
-.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle {
-  -ms-grid-row-align: center;
-      align-self: center;
-}
-.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom {
-  align-self: flex-end;
-}
-.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {
-  border-right: 1px solid #d9d9d9;
-}
-.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) {
-  margin-left: 5px;
-}
-.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {
-  margin-left: 2.5px;
-}
-.tox:not([dir=rtl]) .tox-collection__item-accessory {
-  margin-left: 10px;
-  text-align: right;
-}
-.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret {
-  margin-left: 10px;
-}
-.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {
-  border-left: 1px solid #d9d9d9;
-}
-.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) {
-  margin-right: 5px;
-}
-.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {
-  margin-right: 2.5px;
-}
-.tox[dir=rtl] .tox-collection__item-accessory {
-  margin-right: 10px;
-  text-align: left;
-}
-.tox[dir=rtl] .tox-collection .tox-collection__item-caret {
-  margin-right: 10px;
-  transform: rotateY(180deg);
-}
-.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret {
-  margin-right: 4px;
-}
-.tox .tox-color-picker-container {
-  display: flex;
-  flex-direction: row;
-  height: 225px;
-  margin: 0;
-}
-.tox .tox-sv-palette {
-  box-sizing: border-box;
-  display: flex;
-  height: 100%;
-}
-.tox .tox-sv-palette-spectrum {
-  height: 100%;
-}
-.tox .tox-sv-palette,
-.tox .tox-sv-palette-spectrum {
-  width: 225px;
-}
-.tox .tox-sv-palette-thumb {
-  background: none;
-  border: 1px solid black;
-  border-radius: 50%;
-  box-sizing: content-box;
-  height: 12px;
-  position: absolute;
-  width: 12px;
-}
-.tox .tox-sv-palette-inner-thumb {
-  border: 1px solid white;
-  border-radius: 50%;
-  height: 10px;
-  position: absolute;
-  width: 10px;
-}
-.tox .tox-hue-slider {
-  box-sizing: border-box;
-  height: 100%;
-  width: 25px;
-}
-.tox .tox-hue-slider-spectrum {
-  background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00);
-  height: 100%;
-  width: 100%;
-}
-.tox .tox-hue-slider,
-.tox .tox-hue-slider-spectrum {
-  width: 20px;
-}
-.tox .tox-hue-slider-thumb {
-  background: white;
-  border: 1px solid black;
-  box-sizing: content-box;
-  height: 4px;
-  width: 100%;
-}
-.tox .tox-rgb-form {
-  display: flex;
-  flex-direction: column;
-  justify-content: space-between;
-}
-.tox .tox-rgb-form div {
-  align-items: center;
-  display: flex;
-  justify-content: space-between;
-  margin-bottom: 5px;
-  width: inherit;
-}
-.tox .tox-rgb-form input {
-  width: 6em;
-}
-.tox .tox-rgb-form input.tox-invalid {
-  /* Need !important to override Chrome's focus styling unfortunately */
-  border: 1px solid red !important;
-}
-.tox .tox-rgb-form .tox-rgba-preview {
-  border: 1px solid black;
-  flex-grow: 2;
-  margin-bottom: 0;
-}
-.tox:not([dir=rtl]) .tox-sv-palette {
-  margin-right: 15px;
-}
-.tox:not([dir=rtl]) .tox-hue-slider {
-  margin-right: 15px;
-}
-.tox:not([dir=rtl]) .tox-hue-slider-thumb {
-  margin-left: -1px;
-}
-.tox:not([dir=rtl]) .tox-rgb-form label {
-  margin-right: 0.5em;
-}
-.tox[dir=rtl] .tox-sv-palette {
-  margin-left: 15px;
-}
-.tox[dir=rtl] .tox-hue-slider {
-  margin-left: 15px;
-}
-.tox[dir=rtl] .tox-hue-slider-thumb {
-  margin-right: -1px;
-}
-.tox[dir=rtl] .tox-rgb-form label {
-  margin-left: 0.5em;
-}
-.tox .tox-toolbar .tox-swatches,
-.tox .tox-toolbar__primary .tox-swatches,
-.tox .tox-toolbar__overflow .tox-swatches {
-  margin: 2px 0 3px 4px;
-}
-.tox .tox-collection--list .tox-collection__group .tox-swatches-menu {
-  border: 0;
-  margin: -2.5px 0;
-}
-.tox .tox-swatches__row {
-  display: flex;
-}
-.tox .tox-swatch {
-  height: 30px;
-  transition: transform 0.15s, box-shadow 0.15s;
-  width: 30px;
-}
-.tox .tox-swatch:hover,
-.tox .tox-swatch:focus {
-  box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset;
-  transform: scale(0.8);
-}
-.tox .tox-swatch--remove {
-  align-items: center;
-  display: flex;
-  justify-content: center;
-}
-.tox .tox-swatch--remove svg path {
-  stroke: #e74c3c;
-}
-.tox .tox-swatches__picker-btn {
-  align-items: center;
-  background-color: transparent;
-  border: 0;
-  cursor: pointer;
-  display: flex;
-  height: 30px;
-  justify-content: center;
-  outline: none;
-  padding: 0;
-  width: 30px;
-}
-.tox .tox-swatches__picker-btn svg {
-  height: 24px;
-  width: 24px;
-}
-.tox .tox-swatches__picker-btn:hover {
-  background: #e5e9e7;
-}
-.tox:not([dir=rtl]) .tox-swatches__picker-btn {
-  margin-left: auto;
-}
-.tox[dir=rtl] .tox-swatches__picker-btn {
-  margin-right: auto;
-}
-.tox .tox-comment-thread {
-  background: #fff;
-  position: relative;
-}
-.tox .tox-comment-thread > *:not(:first-child) {
-  margin-top: 5px;
-}
-.tox .tox-comment {
-  background: #fff;
-  border: 1px solid #d9d9d9;
-  border-radius: 3px;
-  box-shadow: 0 4px 8px 0 rgba(84, 111, 94, 0.1);
-  padding: 5px 5px 10px 5px;
-  position: relative;
-}
-.tox .tox-comment__header {
-  align-items: center;
-  color: rgba(84, 111, 94, 0.85);
-  display: flex;
-  justify-content: space-between;
-}
-.tox .tox-comment__date {
-  color: rgba(84, 111, 94, 0.7);
-  font-size: 12px;
-}
-.tox .tox-comment__body {
-  color: rgba(84, 111, 94, 0.85);
-  font-size: 8.75px;
-  font-style: normal;
-  font-weight: normal;
-  line-height: 1.3;
-  margin-top: 5px;
-  position: relative;
-  text-transform: initial;
-}
-.tox .tox-comment__body textarea {
-  resize: none;
-  white-space: normal;
-  width: 100%;
-}
-.tox .tox-comment__expander {
-  padding-top: 5px;
-}
-.tox .tox-comment__expander p {
-  color: rgba(84, 111, 94, 0.7);
-  font-size: 8.75px;
-  font-style: normal;
-}
-.tox .tox-comment__body p {
-  margin: 0;
-}
-.tox .tox-comment__buttonspacing {
-  padding-top: 10px;
-  text-align: center;
-}
-.tox .tox-comment-thread__overlay::after {
-  background: #fff;
-  bottom: 0;
-  content: "";
-  display: flex;
-  left: 0;
-  opacity: 0.9;
-  position: absolute;
-  right: 0;
-  top: 0;
-  z-index: 5;
-}
-.tox .tox-comment__reply {
-  display: flex;
-  flex-shrink: 0;
-  flex-wrap: wrap;
-  justify-content: flex-end;
-  margin-top: 5px;
-}
-.tox .tox-comment__reply > *:first-child {
-  margin-bottom: 5px;
-  width: 100%;
-}
-.tox .tox-comment__edit {
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: flex-end;
-  margin-top: 10px;
-}
-.tox .tox-comment__gradient::after {
-  background: linear-gradient(rgba(255, 255, 255, 0), #fff);
-  bottom: 0;
-  content: "";
-  display: block;
-  height: 5em;
-  margin-top: -40px;
-  position: absolute;
-  width: 100%;
-}
-.tox .tox-comment__overlay {
-  background: #fff;
-  bottom: 0;
-  display: flex;
-  flex-direction: column;
-  flex-grow: 1;
-  left: 0;
-  opacity: 0.9;
-  position: absolute;
-  right: 0;
-  text-align: center;
-  top: 0;
-  z-index: 5;
-}
-.tox .tox-comment__loading-text {
-  align-items: center;
-  color: rgba(84, 111, 94, 0.85);
-  display: flex;
-  flex-direction: column;
-  position: relative;
-}
-.tox .tox-comment__loading-text > div {
-  padding-bottom: 10px;
-}
-.tox .tox-comment__overlaytext {
-  bottom: 0;
-  flex-direction: column;
-  font-size: 8.75px;
-  left: 0;
-  padding: 1em;
-  position: absolute;
-  right: 0;
-  top: 0;
-  z-index: 10;
-}
-.tox .tox-comment__overlaytext p {
-  background-color: #fff;
-  box-shadow: 0 0 8px 8px #fff;
-  color: rgba(84, 111, 94, 0.85);
-  text-align: center;
-}
-.tox .tox-comment__overlaytext div:nth-of-type(2) {
-  font-size: 0.8em;
-}
-.tox .tox-comment__busy-spinner {
-  align-items: center;
-  background-color: #fff;
-  bottom: 0;
-  display: flex;
-  justify-content: center;
-  left: 0;
-  position: absolute;
-  right: 0;
-  top: 0;
-  z-index: 20;
-}
-.tox .tox-comment__scroll {
-  display: flex;
-  flex-direction: column;
-  flex-shrink: 1;
-  overflow: auto;
-}
-.tox .tox-conversations {
-  margin: 5px;
-}
-.tox:not([dir=rtl]) .tox-comment__edit {
-  margin-left: 5px;
-}
-.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child,
-.tox:not([dir=rtl]) .tox-comment__edit > *:last-child,
-.tox:not([dir=rtl]) .tox-comment__reply > *:last-child {
-  margin-left: 5px;
-}
-.tox[dir=rtl] .tox-comment__edit {
-  margin-right: 5px;
-}
-.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child,
-.tox[dir=rtl] .tox-comment__edit > *:last-child,
-.tox[dir=rtl] .tox-comment__reply > *:last-child {
-  margin-right: 5px;
-}
-.tox .tox-user {
-  align-items: center;
-  display: flex;
-}
-.tox .tox-user__avatar svg {
-  fill: rgba(84, 111, 94, 0.7);
-}
-.tox .tox-user__name {
-  color: rgba(84, 111, 94, 0.7);
-  font-size: 12px;
-  font-style: normal;
-  font-weight: normal;
-  text-transform: uppercase;
-}
-.tox:not([dir=rtl]) .tox-user__avatar svg {
-  margin-right: 5px;
-}
-.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name {
-  margin-left: 5px;
-}
-.tox[dir=rtl] .tox-user__avatar svg {
-  margin-left: 5px;
-}
-.tox[dir=rtl] .tox-user__avatar + .tox-user__name {
-  margin-right: 5px;
-}
-.tox .tox-dialog-wrap {
-  align-items: center;
-  bottom: 0;
-  display: flex;
-  justify-content: center;
-  left: 0;
-  position: fixed;
-  right: 0;
-  top: 0;
-  z-index: 1100;
-}
-.tox .tox-dialog-wrap__backdrop {
-  background-color: rgba(255, 255, 255, 0.75);
-  bottom: 0;
-  left: 0;
-  position: absolute;
-  right: 0;
-  top: 0;
-  z-index: 1;
-}
-.tox .tox-dialog-wrap__backdrop--opaque {
-  background-color: #fff;
-}
-.tox .tox-dialog {
-  background-color: #fff;
-  border-color: #d9d9d9;
-  border-radius: 3px;
-  border-style: solid;
-  border-width: 1px;
-  box-shadow: 0 16px 16px -10px rgba(84, 111, 94, 0.15), 0 0 40px 1px rgba(84, 111, 94, 0.15);
-  display: flex;
-  flex-direction: column;
-  max-height: 100%;
-  max-width: 480px;
-  overflow: hidden;
-  position: relative;
-  width: 95vw;
-  z-index: 2;
-}
-@media only screen and (max-width:767px) {
-  body:not(.tox-force-desktop) .tox .tox-dialog {
-    align-self: flex-start;
-    margin: 5px auto;
-    width: calc(100vw - 10px);
-  }
-}
-.tox .tox-dialog-inline {
-  z-index: 1100;
-}
-.tox .tox-dialog__header {
-  align-items: center;
-  background-color: #fff;
-  border-bottom: none;
-  color: rgba(84, 111, 94, 0.85);
-  display: flex;
-  font-size: 10px;
-  justify-content: space-between;
-  padding: 5px 10px 0 10px;
-  position: relative;
-}
-.tox .tox-dialog__header .tox-button {
-  z-index: 1;
-}
-.tox .tox-dialog__draghandle {
-  cursor: grab;
-  height: 100%;
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.tox .tox-dialog__draghandle:active {
-  cursor: grabbing;
-}
-.tox .tox-dialog__dismiss {
-  margin-left: auto;
-}
-.tox .tox-dialog__title {
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
-  font-size: 12.5px;
-  font-style: normal;
-  font-weight: normal;
-  line-height: 1.3;
-  margin: 0;
-  text-transform: none;
-}
-.tox .tox-dialog__body {
-  color: rgba(84, 111, 94, 0.85);
-  display: flex;
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-  font-size: 10px;
-  font-style: normal;
-  font-weight: normal;
-  line-height: 1.3;
-  min-width: 0;
-  text-align: left;
-  text-transform: none;
-}
-@media only screen and (max-width:767px) {
-  body:not(.tox-force-desktop) .tox .tox-dialog__body {
-    flex-direction: column;
-  }
-}
-.tox .tox-dialog__body-nav {
-  align-items: flex-start;
-  display: flex;
-  flex-direction: column;
-  padding: 10px 10px;
-}
-@media only screen and (max-width:767px) {
-  body:not(.tox-force-desktop) .tox .tox-dialog__body-nav {
-    flex-direction: row;
-    -webkit-overflow-scrolling: touch;
-    overflow-x: auto;
-    padding-bottom: 0;
-  }
-}
-.tox .tox-dialog__body-nav-item {
-  border-bottom: 2px solid transparent;
-  color: rgba(84, 111, 94, 0.7);
-  display: inline-block;
-  font-size: 8.75px;
-  line-height: 1.3;
-  margin-bottom: 5px;
-  text-decoration: none;
-  white-space: nowrap;
-}
-.tox .tox-dialog__body-nav-item:focus {
-  background-color: rgba(10, 143, 233, 0.1);
-}
-.tox .tox-dialog__body-nav-item--active {
-  border-bottom: 2px solid #0a8fe9;
-  color: #0a8fe9;
-}
-.tox .tox-dialog__body-content {
-  box-sizing: border-box;
-  display: flex;
-  flex: 1;
-  flex-direction: column;
-  -ms-flex-preferred-size: auto;
-  max-height: 650px;
-  overflow: auto;
-  -webkit-overflow-scrolling: touch;
-  padding: 10px 10px;
-}
-.tox .tox-dialog__body-content > * {
-  margin-bottom: 0;
-  margin-top: 10px;
-}
-.tox .tox-dialog__body-content > *:first-child {
-  margin-top: 0;
-}
-.tox .tox-dialog__body-content > *:last-child {
-  margin-bottom: 0;
-}
-.tox .tox-dialog__body-content > *:only-child {
-  margin-bottom: 0;
-  margin-top: 0;
-}
-.tox .tox-dialog__body-content a {
-  color: #0a8fe9;
-  cursor: pointer;
-  text-decoration: none;
-}
-.tox .tox-dialog__body-content a:hover,
-.tox .tox-dialog__body-content a:focus {
-  color: #0871b8;
-  text-decoration: none;
-}
-.tox .tox-dialog__body-content a:active {
-  color: #0871b8;
-  text-decoration: none;
-}
-.tox .tox-dialog__body-content svg {
-  fill: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-dialog__body-content ul {
-  display: block;
-  list-style-type: disc;
-  margin-bottom: 10px;
-  -webkit-margin-end: 0;
-          margin-inline-end: 0;
-  -webkit-margin-start: 0;
-          margin-inline-start: 0;
-  -webkit-padding-start: 2.5rem;
-          padding-inline-start: 2.5rem;
-}
-.tox .tox-dialog__body-content .tox-form__group h1 {
-  color: rgba(84, 111, 94, 0.85);
-  font-size: 12.5px;
-  font-style: normal;
-  font-weight: normal;
-  letter-spacing: normal;
-  margin-bottom: 10px;
-  margin-top: 2rem;
-  text-transform: none;
-}
-.tox .tox-dialog__body-content .tox-form__group h2 {
-  color: rgba(84, 111, 94, 0.85);
-  font-size: 10px;
-  font-style: normal;
-  font-weight: normal;
-  letter-spacing: normal;
-  margin-bottom: 10px;
-  margin-top: 2rem;
-  text-transform: none;
-}
-.tox .tox-dialog__body-content .tox-form__group p {
-  margin-bottom: 10px;
-}
-.tox .tox-dialog__body-content .tox-form__group h1:first-child,
-.tox .tox-dialog__body-content .tox-form__group h2:first-child,
-.tox .tox-dialog__body-content .tox-form__group p:first-child {
-  margin-top: 0;
-}
-.tox .tox-dialog__body-content .tox-form__group h1:last-child,
-.tox .tox-dialog__body-content .tox-form__group h2:last-child,
-.tox .tox-dialog__body-content .tox-form__group p:last-child {
-  margin-bottom: 0;
-}
-.tox .tox-dialog__body-content .tox-form__group h1:only-child,
-.tox .tox-dialog__body-content .tox-form__group h2:only-child,
-.tox .tox-dialog__body-content .tox-form__group p:only-child {
-  margin-bottom: 0;
-  margin-top: 0;
-}
-.tox .tox-dialog--width-lg {
-  height: 650px;
-  max-width: 1200px;
-}
-.tox .tox-dialog--width-md {
-  max-width: 800px;
-}
-.tox .tox-dialog--width-md .tox-dialog__body-content {
-  overflow: auto;
-}
-.tox .tox-dialog__body-content--centered {
-  text-align: center;
-}
-.tox .tox-dialog__footer {
-  align-items: center;
-  background-color: #fff;
-  border-top: 1px solid #d9d9d9;
-  display: flex;
-  justify-content: space-between;
-  padding: 5px 10px;
-}
-.tox .tox-dialog__footer-start,
-.tox .tox-dialog__footer-end {
-  display: flex;
-}
-.tox .tox-dialog__busy-spinner {
-  align-items: center;
-  background-color: rgba(255, 255, 255, 0.75);
-  bottom: 0;
-  display: flex;
-  justify-content: center;
-  left: 0;
-  position: absolute;
-  right: 0;
-  top: 0;
-  z-index: 3;
-}
-.tox .tox-dialog__table {
-  border-collapse: collapse;
-  width: 100%;
-}
-.tox .tox-dialog__table thead th {
-  font-weight: normal;
-  padding-bottom: 5px;
-}
-.tox .tox-dialog__table tbody tr {
-  border-bottom: 1px solid #d9d9d9;
-}
-.tox .tox-dialog__table tbody tr:last-child {
-  border-bottom: none;
-}
-.tox .tox-dialog__table td {
-  padding-bottom: 5px;
-  padding-top: 5px;
-}
-.tox .tox-dialog__popups {
-  position: absolute;
-  width: 100%;
-  z-index: 1100;
-}
-.tox .tox-dialog__body-iframe {
-  display: flex;
-  flex: 1;
-  flex-direction: column;
-  -ms-flex-preferred-size: auto;
-}
-.tox .tox-dialog__body-iframe .tox-navobj {
-  display: flex;
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-}
-.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) {
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-  height: 100%;
-}
-.tox .tox-dialog-dock-fadeout {
-  opacity: 0;
-  visibility: hidden;
-}
-.tox .tox-dialog-dock-fadein {
-  opacity: 1;
-  visibility: visible;
-}
-.tox .tox-dialog-dock-transition {
-  transition: visibility 0s linear 0.3s, opacity 0.3s ease;
-}
-.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein {
-  transition-delay: 0s;
-}
-.tox.tox-platform-ie {
-  /* IE11 CSS styles go here */
-}
-.tox.tox-platform-ie .tox-dialog-wrap {
-  position: -ms-device-fixed;
-}
-@media only screen and (max-width:767px) {
-  body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav {
-    margin-right: 0;
-  }
-}
-@media only screen and (max-width:767px) {
-  body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) {
-    margin-left: 5px;
-  }
-}
-.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *,
-.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * {
-  margin-left: 5px;
-}
-.tox[dir=rtl] .tox-dialog__body {
-  text-align: right;
-}
-@media only screen and (max-width:767px) {
-  body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav {
-    margin-left: 0;
-  }
-}
-@media only screen and (max-width:767px) {
-  body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) {
-    margin-right: 5px;
-  }
-}
-.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *,
-.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * {
-  margin-right: 5px;
-}
-body.tox-dialog__disable-scroll {
-  overflow: hidden;
-}
-.tox .tox-dropzone-container {
-  display: flex;
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-}
-.tox .tox-dropzone {
-  align-items: center;
-  background: #fff;
-  border: 2px dashed #d9d9d9;
-  box-sizing: border-box;
-  display: flex;
-  flex-direction: column;
-  flex-grow: 1;
-  justify-content: center;
-  min-height: 100px;
-  padding: 10px;
-}
-.tox .tox-dropzone p {
-  color: rgba(84, 111, 94, 0.7);
-  margin: 0 0 10px 0;
-}
-.tox .tox-edit-area {
-  display: flex;
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-  overflow: hidden;
-  position: relative;
-}
-.tox .tox-edit-area__iframe {
-  background-color: #fff;
-  border: 0;
-  box-sizing: border-box;
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-  height: 100%;
-  position: absolute;
-  width: 100%;
-}
-.tox.tox-inline-edit-area {
-  border: 1px dotted #d9d9d9;
-}
-.tox .tox-editor-container {
-  display: flex;
-  flex: 1 1 auto;
-  flex-direction: column;
-  overflow: hidden;
-}
-.tox .tox-editor-header {
-  z-index: 1;
-}
-.tox:not(.tox-tinymce-inline) .tox-editor-header {
-  box-shadow: none;
-  transition: box-shadow 0.5s;
-}
-.tox.tox-tinymce--toolbar-bottom .tox-editor-header,
-.tox.tox-tinymce-inline .tox-editor-header {
-  margin-bottom: -1px;
-}
-.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header {
-  background-color: transparent;
-  box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);
-}
-.tox-editor-dock-fadeout {
-  opacity: 0;
-  visibility: hidden;
-}
-.tox-editor-dock-fadein {
-  opacity: 1;
-  visibility: visible;
-}
-.tox-editor-dock-transition {
-  transition: visibility 0s linear 0.25s, opacity 0.25s ease;
-}
-.tox-editor-dock-transition.tox-editor-dock-fadein {
-  transition-delay: 0s;
-}
-.tox .tox-control-wrap {
-  flex: 1;
-  position: relative;
-}
-.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,
-.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,
-.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid {
-  display: none;
-}
-.tox .tox-control-wrap svg {
-  display: block;
-}
-.tox .tox-control-wrap__status-icon-wrap {
-  position: absolute;
-  top: 50%;
-  transform: translateY(-50%);
-}
-.tox .tox-control-wrap__status-icon-invalid svg {
-  fill: #c00;
-}
-.tox .tox-control-wrap__status-icon-unknown svg {
-  fill: orange;
-}
-.tox .tox-control-wrap__status-icon-valid svg {
-  fill: green;
-}
-.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,
-.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,
-.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield {
-  padding-right: 20px;
-}
-.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap {
-  right: 2.5px;
-}
-.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,
-.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,
-.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield {
-  padding-left: 20px;
-}
-.tox[dir=rtl] .tox-control-wrap__status-icon-wrap {
-  left: 2.5px;
-}
-.tox .tox-autocompleter {
-  max-width: 25em;
-}
-.tox .tox-autocompleter .tox-menu {
-  max-width: 25em;
-}
-.tox .tox-autocompleter .tox-autocompleter-highlight {
-  font-weight: normal;
-}
-.tox .tox-color-input {
-  display: flex;
-  position: relative;
-  z-index: 1;
-}
-.tox .tox-color-input .tox-textfield {
-  z-index: -1;
-}
-.tox .tox-color-input span {
-  border-color: rgba(84, 111, 94, 0.2);
-  border-radius: 3px;
-  border-style: solid;
-  border-width: 1px;
-  box-shadow: none;
-  box-sizing: border-box;
-  height: 24px;
-  position: absolute;
-  top: 6px;
-  width: 24px;
-}
-.tox .tox-color-input span:hover:not([aria-disabled=true]),
-.tox .tox-color-input span:focus:not([aria-disabled=true]) {
-  border-color: #0a8fe9;
-  cursor: pointer;
-}
-.tox .tox-color-input span::before {
-  background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%);
-  background-position: 0 0, 0 6px, 6px -6px, -6px 0;
-  background-size: 12px 12px;
-  border: 1px solid #fff;
-  border-radius: 3px;
-  box-sizing: border-box;
-  content: '';
-  height: 24px;
-  left: -1px;
-  position: absolute;
-  top: -1px;
-  width: 24px;
-  z-index: -1;
-}
-.tox .tox-color-input span[aria-disabled=true] {
-  cursor: not-allowed;
-}
-.tox:not([dir=rtl]) .tox-color-input {
-  /* stylelint-disable-next-line no-descending-specificity */
-}
-.tox:not([dir=rtl]) .tox-color-input .tox-textfield {
-  padding-left: 36px;
-}
-.tox:not([dir=rtl]) .tox-color-input span {
-  left: 6px;
-}
-.tox[dir="rtl"] .tox-color-input {
-  /* stylelint-disable-next-line no-descending-specificity */
-}
-.tox[dir="rtl"] .tox-color-input .tox-textfield {
-  padding-right: 36px;
-}
-.tox[dir="rtl"] .tox-color-input span {
-  right: 6px;
-}
-.tox .tox-label,
-.tox .tox-toolbar-label {
-  color: rgba(84, 111, 94, 0.7);
-  display: block;
-  font-size: 8.75px;
-  font-style: normal;
-  font-weight: normal;
-  line-height: 1.3;
-  padding: 0 5px 0 0;
-  text-transform: none;
-  white-space: nowrap;
-}
-.tox .tox-toolbar-label {
-  padding: 0 5px;
-}
-.tox[dir=rtl] .tox-label {
-  padding: 0 0 0 5px;
-}
-.tox .tox-form {
-  display: flex;
-  flex: 1;
-  flex-direction: column;
-  -ms-flex-preferred-size: auto;
-}
-.tox .tox-form__group {
-  box-sizing: border-box;
-  margin-bottom: 2.5px;
-}
-.tox .tox-form-group--maximize {
-  flex: 1;
-}
-.tox .tox-form__group--error {
-  color: #c00;
-}
-.tox .tox-form__group--collection {
-  display: flex;
-}
-.tox .tox-form__grid {
-  display: flex;
-  flex-direction: row;
-  flex-wrap: wrap;
-  justify-content: space-between;
-}
-.tox .tox-form__grid--2col > .tox-form__group {
-  width: calc(50% - (5px / 2));
-}
-.tox .tox-form__grid--3col > .tox-form__group {
-  width: calc(100% / 3 - (5px / 2));
-}
-.tox .tox-form__grid--4col > .tox-form__group {
-  width: calc(25% - (5px / 2));
-}
-.tox .tox-form__controls-h-stack {
-  align-items: center;
-  display: flex;
-}
-.tox .tox-form__group--inline {
-  align-items: center;
-  display: flex;
-}
-.tox .tox-form__group--stretched {
-  display: flex;
-  flex: 1;
-  flex-direction: column;
-  -ms-flex-preferred-size: auto;
-}
-.tox .tox-form__group--stretched .tox-textarea {
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-}
-.tox .tox-form__group--stretched .tox-navobj {
-  display: flex;
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-}
-.tox .tox-form__group--stretched .tox-navobj :nth-child(2) {
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-  height: 100%;
-}
-.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) {
-  margin-left: 2.5px;
-}
-.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) {
-  margin-right: 2.5px;
-}
-.tox .tox-lock.tox-locked .tox-lock-icon__unlock,
-.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock {
-  display: none;
-}
-.tox .tox-textfield,
-.tox .tox-toolbar-textfield,
-.tox .tox-listboxfield .tox-listbox--select,
-.tox .tox-textarea {
-  -webkit-appearance: none;
-     -moz-appearance: none;
-          appearance: none;
-  background-color: #fff;
-  border-color: #d9d9d9;
-  border-radius: 3px;
-  border-style: solid;
-  border-width: 1px;
-  box-shadow: none;
-  box-sizing: border-box;
-  color: rgba(84, 111, 94, 0.85);
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
-  font-size: 10px;
-  line-height: 24px;
-  margin: 0;
-  min-height: 34px;
-  outline: none;
-  padding: 5px 3.25px;
-  resize: none;
-  width: 100%;
-}
-.tox .tox-textfield[disabled],
-.tox .tox-textarea[disabled] {
-  background-color: #f2f2f2;
-  color: rgba(84, 111, 94, 0.85);
-  cursor: not-allowed;
-}
-.tox .tox-textfield:focus,
-.tox .tox-listboxfield .tox-listbox--select:focus,
-.tox .tox-textarea:focus {
-  background-color: #fff;
-  border-color: #0a8fe9;
-  box-shadow: none;
-  outline: none;
-}
-.tox .tox-toolbar-textfield {
-  border-width: 0;
-  margin-bottom: 3px;
-  margin-top: 2px;
-  max-width: 250px;
-}
-.tox .tox-naked-btn {
-  background-color: transparent;
-  border: 0;
-  border-color: transparent;
-  box-shadow: unset;
-  color: #0a8fe9;
-  cursor: pointer;
-  display: block;
-  margin: 0;
-  padding: 0;
-}
-.tox .tox-naked-btn svg {
-  display: block;
-  fill: rgba(84, 111, 94, 0.85);
-}
-.tox:not([dir=rtl]) .tox-toolbar-textfield + * {
-  margin-left: 2.5px;
-}
-.tox[dir=rtl] .tox-toolbar-textfield + * {
-  margin-right: 2.5px;
-}
-.tox .tox-listboxfield {
-  cursor: pointer;
-  position: relative;
-}
-.tox .tox-listboxfield .tox-listbox--select[disabled] {
-  background-color: #f2f2f2;
-  color: rgba(84, 111, 94, 0.85);
-  cursor: not-allowed;
-}
-.tox .tox-listbox__select-label {
-  cursor: default;
-  flex: 1;
-  margin: 0 4px;
-}
-.tox .tox-listbox__select-chevron {
-  align-items: center;
-  display: flex;
-  justify-content: center;
-  width: 10px;
-}
-.tox .tox-listbox__select-chevron svg {
-  fill: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-listboxfield .tox-listbox--select {
-  align-items: center;
-  display: flex;
-}
-.tox:not([dir=rtl]) .tox-listboxfield svg {
-  right: 5px;
-}
-.tox[dir=rtl] .tox-listboxfield svg {
-  left: 5px;
-}
-.tox .tox-selectfield {
-  cursor: pointer;
-  position: relative;
-}
-.tox .tox-selectfield select {
-  -webkit-appearance: none;
-     -moz-appearance: none;
-          appearance: none;
-  background-color: #fff;
-  border-color: #d9d9d9;
-  border-radius: 3px;
-  border-style: solid;
-  border-width: 1px;
-  box-shadow: none;
-  box-sizing: border-box;
-  color: rgba(84, 111, 94, 0.85);
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
-  font-size: 10px;
-  line-height: 24px;
-  margin: 0;
-  min-height: 34px;
-  outline: none;
-  padding: 5px 3.25px;
-  resize: none;
-  width: 100%;
-}
-.tox .tox-selectfield select[disabled] {
-  background-color: #f2f2f2;
-  color: rgba(84, 111, 94, 0.85);
-  cursor: not-allowed;
-}
-.tox .tox-selectfield select::-ms-expand {
-  display: none;
-}
-.tox .tox-selectfield select:focus {
-  background-color: #fff;
-  border-color: #0a8fe9;
-  box-shadow: none;
-  outline: none;
-}
-.tox .tox-selectfield svg {
-  pointer-events: none;
-  position: absolute;
-  top: 50%;
-  transform: translateY(-50%);
-}
-.tox:not([dir=rtl]) .tox-selectfield select[size="0"],
-.tox:not([dir=rtl]) .tox-selectfield select[size="1"] {
-  padding-right: 15px;
-}
-.tox:not([dir=rtl]) .tox-selectfield svg {
-  right: 5px;
-}
-.tox[dir=rtl] .tox-selectfield select[size="0"],
-.tox[dir=rtl] .tox-selectfield select[size="1"] {
-  padding-left: 15px;
-}
-.tox[dir=rtl] .tox-selectfield svg {
-  left: 5px;
-}
-.tox .tox-textarea {
-  -webkit-appearance: textarea;
-     -moz-appearance: textarea;
-          appearance: textarea;
-  white-space: pre-wrap;
-}
-.tox-fullscreen {
-  border: 0;
-  height: 100%;
-  left: 0;
-  margin: 0;
-  overflow: hidden;
-  -ms-scroll-chaining: none;
-      overscroll-behavior: none;
-  padding: 0;
-  position: fixed;
-  top: 0;
-  touch-action: pinch-zoom;
-  width: 100%;
-}
-.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
-  display: none;
-}
-.tox.tox-tinymce.tox-fullscreen {
-  background-color: transparent;
-  z-index: 1200;
-}
-.tox-shadowhost.tox-fullscreen {
-  z-index: 1200;
-}
-.tox-fullscreen .tox.tox-tinymce-aux,
-.tox-fullscreen ~ .tox.tox-tinymce-aux {
-  z-index: 1201;
-}
-.tox .tox-help__more-link {
-  list-style: none;
-  margin-top: 1em;
-}
-.tox .tox-image-tools {
-  width: 100%;
-}
-.tox .tox-image-tools__toolbar {
-  align-items: center;
-  display: flex;
-  justify-content: center;
-}
-.tox .tox-image-tools__image {
-  background-color: #666;
-  height: 380px;
-  overflow: auto;
-  position: relative;
-  width: 100%;
-}
-.tox .tox-image-tools__image,
-.tox .tox-image-tools__image + .tox-image-tools__toolbar {
-  margin-top: 5px;
-}
-.tox .tox-image-tools__image-bg {
-  background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);
-}
-.tox .tox-image-tools__toolbar > .tox-spacer {
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-}
-.tox .tox-croprect-block {
-  background: black;
-  filter: alpha(opacity=50);
-  opacity: 0.5;
-  position: absolute;
-  zoom: 1;
-}
-.tox .tox-croprect-handle {
-  border: 2px solid white;
-  height: 20px;
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 20px;
-}
-.tox .tox-croprect-handle-move {
-  border: 0;
-  cursor: move;
-  position: absolute;
-}
-.tox .tox-croprect-handle-nw {
-  border-width: 2px 0 0 2px;
-  cursor: nw-resize;
-  left: 100px;
-  margin: -2px 0 0 -2px;
-  top: 100px;
-}
-.tox .tox-croprect-handle-ne {
-  border-width: 2px 2px 0 0;
-  cursor: ne-resize;
-  left: 200px;
-  margin: -2px 0 0 -20px;
-  top: 100px;
-}
-.tox .tox-croprect-handle-sw {
-  border-width: 0 0 2px 2px;
-  cursor: sw-resize;
-  left: 100px;
-  margin: -20px 2px 0 -2px;
-  top: 200px;
-}
-.tox .tox-croprect-handle-se {
-  border-width: 0 2px 2px 0;
-  cursor: se-resize;
-  left: 200px;
-  margin: -20px 0 0 -20px;
-  top: 200px;
-}
-.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-slider:not(:first-of-type) {
-  margin-left: 5px;
-}
-.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-button + .tox-slider {
-  margin-left: 20px;
-}
-.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-slider + .tox-button {
-  margin-left: 20px;
-}
-.tox[dir=rtl] .tox-image-tools__toolbar > .tox-slider:not(:first-of-type) {
-  margin-right: 5px;
-}
-.tox[dir=rtl] .tox-image-tools__toolbar > .tox-button + .tox-slider {
-  margin-right: 20px;
-}
-.tox[dir=rtl] .tox-image-tools__toolbar > .tox-slider + .tox-button {
-  margin-right: 20px;
-}
-.tox .tox-insert-table-picker {
-  display: flex;
-  flex-wrap: wrap;
-  width: 110px;
-}
-.tox .tox-insert-table-picker > div {
-  border-color: #d9d9d9;
-  border-style: solid;
-  border-width: 0 1px 1px 0;
-  box-sizing: border-box;
-  height: 11px;
-  width: 11px;
-}
-.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker {
-  margin: -2.5px 0;
-}
-.tox .tox-insert-table-picker .tox-insert-table-picker__selected {
-  background-color: rgba(10, 143, 233, 0.5);
-  border-color: rgba(10, 143, 233, 0.5);
-}
-.tox .tox-insert-table-picker__label {
-  color: rgba(84, 111, 94, 0.7);
-  display: block;
-  font-size: 8.75px;
-  padding: 2.5px;
-  text-align: center;
-  width: 100%;
-}
-.tox:not([dir=rtl]) {
-  /* stylelint-disable-next-line no-descending-specificity */
-}
-.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) {
-  border-right: 0;
-}
-.tox[dir=rtl] {
-  /* stylelint-disable-next-line no-descending-specificity */
-}
-.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) {
-  border-right: 0;
-}
-.tox {
-  /* stylelint-disable */
-  /* stylelint-enable */
-}
-.tox .tox-menu {
-  background-color: #fff;
-  border: 1px solid #d9d9d9;
-  border-radius: 3px;
-  box-shadow: 0 4px 8px 0 rgba(84, 111, 94, 0.1);
-  display: inline-block;
-  overflow: hidden;
-  vertical-align: top;
-  z-index: 1150;
-}
-.tox .tox-menu.tox-collection.tox-collection--list {
-  padding: 0;
-}
-.tox .tox-menu.tox-collection.tox-collection--toolbar {
-  padding: 2.5px;
-}
-.tox .tox-menu.tox-collection.tox-collection--grid {
-  padding: 2.5px;
-}
-.tox .tox-menu__label h1,
-.tox .tox-menu__label h2,
-.tox .tox-menu__label h3,
-.tox .tox-menu__label h4,
-.tox .tox-menu__label h5,
-.tox .tox-menu__label h6,
-.tox .tox-menu__label p,
-.tox .tox-menu__label blockquote,
-.tox .tox-menu__label code {
-  margin: 0;
-}
-.tox .tox-menubar {
-  background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23d9d9d9'/%3E%3C/svg%3E") left 0 top 0 #fff;
-  background-color: #fff;
-  display: flex;
-  flex: 0 0 auto;
-  flex-shrink: 0;
-  flex-wrap: wrap;
-  padding: 0 4px 0 4px;
-}
-.tox.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar {
-  border-top: 1px solid #d9d9d9;
-}
-/* Deprecated. Remove in next major release */
-.tox .tox-mbtn {
-  align-items: center;
-  background: transparent;
-  border: 0;
-  border-radius: 3px;
-  box-shadow: none;
-  color: #817f7c;
-  display: flex;
-  flex: 0 0 auto;
-  font-size: 8.75px;
-  font-style: normal;
-  font-weight: normal;
-  height: 34px;
-  justify-content: center;
-  margin: 2px 0 3px 0;
-  outline: none;
-  overflow: hidden;
-  padding: 0 4px;
-  text-transform: none;
-  width: auto;
-}
-.tox .tox-mbtn[disabled] {
-  background-color: transparent;
-  border: 0;
-  box-shadow: none;
-  color: rgba(129, 127, 124, 0.5);
-  cursor: not-allowed;
-}
-.tox .tox-mbtn:focus:not(:disabled) {
-  background: #e5e9e7;
-  border: 0;
-  box-shadow: none;
-  color: #0a9fe5;
-}
-.tox .tox-mbtn--active {
-  background: #e5e9e7;
-  border: 0;
-  box-shadow: none;
-  color: rgba(41, 159, 250, 0.88);
-}
-.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) {
-  background: #e5e9e7;
-  border: 0;
-  box-shadow: none;
-  color: #0a9fe5;
-}
-.tox .tox-mbtn__select-label {
-  cursor: default;
-  font-weight: normal;
-  margin: 0 4px;
-}
-.tox .tox-mbtn[disabled] .tox-mbtn__select-label {
-  cursor: not-allowed;
-}
-.tox .tox-mbtn__select-chevron {
-  align-items: center;
-  display: flex;
-  justify-content: center;
-  width: 16px;
-  display: none;
-}
-.tox .tox-notification {
-  border-radius: 3px;
-  border-style: solid;
-  border-width: 1px;
-  box-shadow: none;
-  box-sizing: border-box;
-  display: -ms-grid;
-  display: grid;
-  font-size: 8.75px;
-  font-weight: normal;
-  -ms-grid-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);
-  grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);
-  margin-top: 2.5px;
-  opacity: 0;
-  padding: 2.5px;
-  transition: transform 100ms ease-in, opacity 150ms ease-in;
-}
-.tox .tox-notification p {
-  font-size: 8.75px;
-  font-weight: normal;
-}
-.tox .tox-notification a {
-  cursor: pointer;
-  text-decoration: underline;
-}
-.tox .tox-notification--in {
-  opacity: 1;
-}
-.tox .tox-notification--success {
-  background-color: #e4eeda;
-  border-color: #d7e6c8;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--success p {
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--success a {
-  color: #547831;
-}
-.tox .tox-notification--success svg {
-  fill: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--error {
-  background-color: #f8dede;
-  border-color: #f2bfbf;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--error p {
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--error a {
-  color: #c00;
-}
-.tox .tox-notification--error svg {
-  fill: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--warn,
-.tox .tox-notification--warning {
-  background-color: #fffaea;
-  border-color: #ffe89d;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--warn p,
-.tox .tox-notification--warning p {
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--warn a,
-.tox .tox-notification--warning a {
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--warn svg,
-.tox .tox-notification--warning svg {
-  fill: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--info {
-  background-color: #d9edf7;
-  border-color: #779ecb;
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--info p {
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--info a {
-  color: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification--info svg {
-  fill: rgba(84, 111, 94, 0.85);
-}
-.tox .tox-notification__body {
-  -ms-grid-row-align: center;
-      align-self: center;
-  color: rgba(84, 111, 94, 0.85);
-  font-size: 14px;
-  -ms-grid-column-span: 1;
-  grid-column-end: 3;
-  -ms-grid-column: 2;
-      grid-column-start: 2;
-  -ms-grid-row-span: 1;
-  grid-row-end: 2;
-  -ms-grid-row: 1;
-      grid-row-start: 1;
-  text-align: center;
-  white-space: normal;
-  word-break: break-all;
-  word-break: break-word;
-}
-.tox .tox-notification__body > * {
-  margin: 0;
-}
-.tox .tox-notification__body > * + * {
-  margin-top: 1rem;
-}
-.tox .tox-notification__icon {
-  -ms-grid-row-align: center;
-      align-self: center;
-  -ms-grid-column-span: 1;
-  grid-column-end: 2;
-  -ms-grid-column: 1;
-      grid-column-start: 1;
-  -ms-grid-row-span: 1;
-  grid-row-end: 2;
-  -ms-grid-row: 1;
-      grid-row-start: 1;
-  -ms-grid-column-align: end;
-      justify-self: end;
-}
-.tox .tox-notification__icon svg {
-  display: block;
-}
-.tox .tox-notification__dismiss {
-  -ms-grid-row-align: start;
-      align-self: start;
-  -ms-grid-column-span: 1;
-  grid-column-end: 4;
-  -ms-grid-column: 3;
-      grid-column-start: 3;
-  -ms-grid-row-span: 1;
-  grid-row-end: 2;
-  -ms-grid-row: 1;
-      grid-row-start: 1;
-  -ms-grid-column-align: end;
-      justify-self: end;
-}
-.tox .tox-notification .tox-progress-bar {
-  -ms-grid-column-span: 3;
-  grid-column-end: 4;
-  -ms-grid-column: 1;
-      grid-column-start: 1;
-  -ms-grid-row-span: 1;
-  grid-row-end: 3;
-  -ms-grid-row: 2;
-      grid-row-start: 2;
-  -ms-grid-column-align: center;
-      justify-self: center;
-}
-.tox .tox-pop {
-  display: inline-block;
-  position: relative;
-}
-.tox .tox-pop--resizing {
-  transition: width 0.1s ease;
-}
-.tox .tox-pop--resizing .tox-toolbar,
-.tox .tox-pop--resizing .tox-toolbar__group {
-  flex-wrap: nowrap;
-}
-.tox .tox-pop--transition {
-  transition: 0.15s ease;
-  transition-property: left, right, top, bottom;
-}
-.tox .tox-pop--transition::before,
-.tox .tox-pop--transition::after {
-  transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s;
-}
-.tox .tox-pop__dialog {
-  background-color: #fff;
-  border: 1px solid #d9d9d9;
-  border-radius: 3px;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
-  min-width: 0;
-  overflow: hidden;
-}
-.tox .tox-pop__dialog > *:not(.tox-toolbar) {
-  margin: 2.5px 2.5px 2.5px 5px;
-}
-.tox .tox-pop__dialog .tox-toolbar {
-  background-color: transparent;
-  margin-bottom: -1px;
-}
-.tox .tox-pop::before,
-.tox .tox-pop::after {
-  border-style: solid;
-  content: '';
-  display: block;
-  height: 0;
-  opacity: 1;
-  position: absolute;
-  width: 0;
-}
-.tox .tox-pop.tox-pop--inset::before,
-.tox .tox-pop.tox-pop--inset::after {
-  opacity: 0;
-  transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease;
-}
-.tox .tox-pop.tox-pop--bottom::before,
-.tox .tox-pop.tox-pop--bottom::after {
-  left: 50%;
-  top: 100%;
-}
-.tox .tox-pop.tox-pop--bottom::after {
-  border-color: #fff transparent transparent transparent;
-  border-width: 8px;
-  margin-left: -8px;
-  margin-top: -1px;
-}
-.tox .tox-pop.tox-pop--bottom::before {
-  border-color: #d9d9d9 transparent transparent transparent;
-  border-width: 9px;
-  margin-left: -9px;
-}
-.tox .tox-pop.tox-pop--top::before,
-.tox .tox-pop.tox-pop--top::after {
-  left: 50%;
-  top: 0;
-  transform: translateY(-100%);
-}
-.tox .tox-pop.tox-pop--top::after {
-  border-color: transparent transparent #fff transparent;
-  border-width: 8px;
-  margin-left: -8px;
-  margin-top: 1px;
-}
-.tox .tox-pop.tox-pop--top::before {
-  border-color: transparent transparent #d9d9d9 transparent;
-  border-width: 9px;
-  margin-left: -9px;
-}
-.tox .tox-pop.tox-pop--left::before,
-.tox .tox-pop.tox-pop--left::after {
-  left: 0;
-  top: calc(50% - 1px);
-  transform: translateY(-50%);
-}
-.tox .tox-pop.tox-pop--left::after {
-  border-color: transparent #fff transparent transparent;
-  border-width: 8px;
-  margin-left: -15px;
-}
-.tox .tox-pop.tox-pop--left::before {
-  border-color: transparent #d9d9d9 transparent transparent;
-  border-width: 10px;
-  margin-left: -19px;
-}
-.tox .tox-pop.tox-pop--right::before,
-.tox .tox-pop.tox-pop--right::after {
-  left: 100%;
-  top: calc(50% + 1px);
-  transform: translateY(-50%);
-}
-.tox .tox-pop.tox-pop--right::after {
-  border-color: transparent transparent transparent #fff;
-  border-width: 8px;
-  margin-left: -1px;
-}
-.tox .tox-pop.tox-pop--right::before {
-  border-color: transparent transparent transparent #d9d9d9;
-  border-width: 10px;
-  margin-left: -1px;
-}
-.tox .tox-pop.tox-pop--align-left::before,
-.tox .tox-pop.tox-pop--align-left::after {
-  left: 20px;
-}
-.tox .tox-pop.tox-pop--align-right::before,
-.tox .tox-pop.tox-pop--align-right::after {
-  left: calc(100% - 20px);
-}
-.tox .tox-sidebar-wrap {
-  display: flex;
-  flex-direction: row;
-  flex-grow: 1;
-  -ms-flex-preferred-size: 0;
-  min-height: 0;
-}
-.tox .tox-sidebar {
-  background-color: #fff;
-  display: flex;
-  flex-direction: row;
-  justify-content: flex-end;
-}
-.tox .tox-sidebar__slider {
-  display: flex;
-  overflow: hidden;
-}
-.tox .tox-sidebar__pane-container {
-  display: flex;
-}
-.tox .tox-sidebar__pane {
-  display: flex;
-}
-.tox .tox-sidebar--sliding-closed {
-  opacity: 0;
-}
-.tox .tox-sidebar--sliding-open {
-  opacity: 1;
-}
-.tox .tox-sidebar--sliding-growing,
-.tox .tox-sidebar--sliding-shrinking {
-  transition: width 0.5s ease, opacity 0.5s ease;
-}
-.tox .tox-selector {
-  background-color: #4099ff;
-  border-color: #4099ff;
-  border-style: solid;
-  border-width: 1px;
-  box-sizing: border-box;
-  display: inline-block;
-  height: 10px;
-  position: absolute;
-  width: 10px;
-}
-.tox.tox-platform-touch .tox-selector {
-  height: 12px;
-  width: 12px;
-}
-.tox .tox-slider {
-  align-items: center;
-  display: flex;
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-  height: 24px;
-  justify-content: center;
-  position: relative;
-}
-.tox .tox-slider__rail {
-  background-color: transparent;
-  border: 1px solid #d9d9d9;
-  border-radius: 3px;
-  height: 10px;
-  min-width: 120px;
-  width: 100%;
-}
-.tox .tox-slider__handle {
-  background-color: #0a8fe9;
-  border: 2px solid #0871b8;
-  border-radius: 3px;
-  box-shadow: none;
-  height: 24px;
-  left: 50%;
-  position: absolute;
-  top: 50%;
-  transform: translateX(-50%) translateY(-50%);
-  width: 14px;
-}
-.tox .tox-source-code {
-  overflow: auto;
-}
-.tox .tox-spinner {
-  display: flex;
-}
-.tox .tox-spinner > div {
-  animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;
-  background-color: rgba(84, 111, 94, 0.7);
-  border-radius: 100%;
-  height: 5px;
-  width: 5px;
-}
-.tox .tox-spinner > div:nth-child(1) {
-  animation-delay: -0.32s;
-}
-.tox .tox-spinner > div:nth-child(2) {
-  animation-delay: -0.16s;
-}
-@keyframes tam-bouncing-dots {
-  0%,
-  80%,
-  100% {
-    transform: scale(0);
-  }
-  40% {
-    transform: scale(1);
-  }
-}
-.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) {
-  margin-left: 2.5px;
-}
-.tox[dir=rtl] .tox-spinner > div:not(:first-child) {
-  margin-right: 2.5px;
-}
-.tox .tox-statusbar {
-  align-items: center;
-  background-color: #fff;
-  border-top: 1px solid #d9d9d9;
-  color: rgba(84, 111, 94, 0.7);
-  display: flex;
-  flex: 0 0 auto;
-  font-size: 12px;
-  font-weight: normal;
-  height: 18px;
-  overflow: hidden;
-  padding: 0 5px;
-  position: relative;
-  text-transform: uppercase;
-}
-.tox .tox-statusbar__text-container {
-  display: flex;
-  flex: 1 1 auto;
-  justify-content: flex-end;
-  overflow: hidden;
-}
-.tox .tox-statusbar__path {
-  display: flex;
-  flex: 1 1 auto;
-  margin-right: auto;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.tox .tox-statusbar__path > * {
-  display: inline;
-  white-space: nowrap;
-}
-.tox .tox-statusbar__wordcount {
-  flex: 0 0 auto;
-  margin-left: 1ch;
-}
-.tox .tox-statusbar a,
-.tox .tox-statusbar__path-item,
-.tox .tox-statusbar__wordcount {
-  color: rgba(84, 111, 94, 0.7);
-  text-decoration: none;
-}
-.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),
-.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),
-.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),
-.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),
-.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),
-.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) {
-  cursor: pointer;
-  text-decoration: underline;
-}
-.tox .tox-statusbar__resize-handle {
-  align-items: flex-end;
-  align-self: stretch;
-  cursor: nwse-resize;
-  display: flex;
-  flex: 0 0 auto;
-  justify-content: flex-end;
-  margin-left: auto;
-  margin-right: -5px;
-  padding-left: 1ch;
-}
-.tox .tox-statusbar__resize-handle svg {
-  display: block;
-  fill: rgba(84, 111, 94, 0.7);
-}
-.tox .tox-statusbar__resize-handle:focus svg {
-  background-color: #e5e9e7;
-  border-radius: 1px;
-  box-shadow: 0 0 0 2px #e5e9e7;
-}
-.tox:not([dir=rtl]) .tox-statusbar__path > * {
-  margin-right: 2.5px;
-}
-.tox:not([dir=rtl]) .tox-statusbar__branding {
-  margin-left: 1ch;
-}
-.tox[dir=rtl] .tox-statusbar {
-  flex-direction: row-reverse;
-}
-.tox[dir=rtl] .tox-statusbar__path > * {
-  margin-left: 2.5px;
-}
-.tox .tox-throbber {
-  z-index: 1299;
-}
-.tox .tox-throbber__busy-spinner {
-  align-items: center;
-  background-color: rgba(255, 255, 255, 0.6);
-  bottom: 0;
-  display: flex;
-  justify-content: center;
-  left: 0;
-  position: absolute;
-  right: 0;
-  top: 0;
-}
-.tox .tox-tbtn {
-  align-items: center;
-  background: transparent;
-  border: 0;
-  border-radius: 3px;
-  box-shadow: none;
-  color: #817f7c;
-  display: flex;
-  flex: 0 0 auto;
-  font-size: 8.75px;
-  font-style: normal;
-  font-weight: normal;
-  height: 34px;
-  justify-content: center;
-  margin: 2px 0 3px 0;
-  outline: none;
-  overflow: hidden;
-  padding: 0;
-  text-transform: none;
-  width: 34px;
-}
-.tox .tox-tbtn svg {
-  display: block;
-  fill: #817f7c;
-}
-.tox .tox-tbtn.tox-tbtn-more {
-  padding-left: 5px;
-  padding-right: 5px;
-  width: inherit;
-}
-.tox .tox-tbtn:focus {
-  background: #e5e9e7;
-  border: 0;
-  box-shadow: none;
-}
-.tox .tox-tbtn:hover {
-  background: #e5e9e7;
-  border: 0;
-  box-shadow: none;
-  color: #0a9fe5;
-}
-.tox .tox-tbtn:hover svg {
-  fill: #0a9fe5;
-}
-.tox .tox-tbtn:active {
-  background: #e5e9e7;
-  border: 0;
-  box-shadow: none;
-  color: rgba(41, 159, 250, 0.88);
-}
-.tox .tox-tbtn:active svg {
-  fill: rgba(41, 159, 250, 0.88);
-}
-.tox .tox-tbtn--disabled,
-.tox .tox-tbtn--disabled:hover,
-.tox .tox-tbtn:disabled,
-.tox .tox-tbtn:disabled:hover {
-  background: transparent;
-  border: 0;
-  box-shadow: none;
-  color: rgba(129, 127, 124, 0.5);
-  cursor: not-allowed;
-}
-.tox .tox-tbtn--disabled svg,
-.tox .tox-tbtn--disabled:hover svg,
-.tox .tox-tbtn:disabled svg,
-.tox .tox-tbtn:disabled:hover svg {
-  /* stylelint-disable-line no-descending-specificity */
-  fill: rgba(129, 127, 124, 0.5);
-}
-.tox .tox-tbtn--enabled,
-.tox .tox-tbtn--enabled:hover {
-  background: #e5e9e7;
-  border: 0;
-  box-shadow: none;
-  color: rgba(41, 159, 250, 0.88);
-}
-.tox .tox-tbtn--enabled > *,
-.tox .tox-tbtn--enabled:hover > * {
-  transform: none;
-}
-.tox .tox-tbtn--enabled svg,
-.tox .tox-tbtn--enabled:hover svg {
-  /* stylelint-disable-line no-descending-specificity */
-  fill: rgba(41, 159, 250, 0.88);
-}
-.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) {
-  color: #ee930e;
-}
-.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg {
-  fill: #ee930e;
-}
-.tox .tox-tbtn:active > * {
-  transform: none;
-}
-.tox .tox-tbtn--md {
-  height: 51px;
-  width: 51px;
-}
-.tox .tox-tbtn--lg {
-  flex-direction: column;
-  height: 68px;
-  width: 68px;
-}
-.tox .tox-tbtn--return {
-  -ms-grid-row-align: stretch;
-      align-self: stretch;
-  height: unset;
-  width: 16px;
-}
-.tox .tox-tbtn--labeled {
-  padding: 0 4px;
-  width: unset;
-}
-.tox .tox-tbtn__vlabel {
-  display: block;
-  font-size: 10px;
-  font-weight: normal;
-  letter-spacing: -0.025em;
-  margin-bottom: 2.5px;
-  white-space: nowrap;
-}
-.tox .tox-tbtn--select {
-  margin: 2px 0 3px 0;
-  padding: 0 4px;
-  width: auto;
-}
-.tox .tox-tbtn__select-label {
-  cursor: default;
-  font-weight: normal;
-  margin: 0 4px;
-}
-.tox .tox-tbtn__select-chevron {
-  align-items: center;
-  display: flex;
-  justify-content: center;
-  width: 10px;
-}
-.tox .tox-tbtn__select-chevron svg {
-  fill: rgba(129, 127, 124, 0.5);
-}
-.tox .tox-tbtn--bespoke .tox-tbtn__select-label {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  width: 7em;
-}
-.tox .tox-split-button {
-  border: 0;
-  border-radius: 3px;
-  box-sizing: border-box;
-  display: flex;
-  margin: 2px 0 3px 0;
-  overflow: hidden;
-}
-.tox .tox-split-button:hover {
-  box-shadow: 0 0 0 1px #e5e9e7 inset;
-}
-.tox .tox-split-button:focus {
-  background: #e5e9e7;
-  box-shadow: none;
-  color: #ee930e;
-}
-.tox .tox-split-button > * {
-  border-radius: 0;
-}
-.tox .tox-split-button__chevron {
-  width: 10px;
-}
-.tox .tox-split-button__chevron svg {
-  fill: rgba(129, 127, 124, 0.5);
-}
-.tox .tox-split-button .tox-tbtn {
-  margin: 0;
-}
-.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child {
-  width: 30px;
-}
-.tox.tox-platform-touch .tox-split-button__chevron {
-  width: 14px;
-}
-.tox .tox-split-button.tox-tbtn--disabled:hover,
-.tox .tox-split-button.tox-tbtn--disabled:focus,
-.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,
-.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus {
-  background: transparent;
-  box-shadow: none;
-  color: rgba(129, 127, 124, 0.5);
-}
-.tox .tox-toolbar-overlord {
-  background-color: #fff;
-}
-.tox .tox-toolbar,
-.tox .tox-toolbar__primary,
-.tox .tox-toolbar__overflow {
-  background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23d9d9d9'/%3E%3C/svg%3E") left 0 top 0 #fff;
-  background-color: #fff;
-  display: flex;
-  flex: 0 0 auto;
-  flex-shrink: 0;
-  flex-wrap: wrap;
-  padding: 0 0;
-}
-.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed {
-  height: 0;
-  opacity: 0;
-  padding-bottom: 0;
-  padding-top: 0;
-  visibility: hidden;
-}
-.tox .tox-toolbar__overflow--growing {
-  transition: height 0.3s ease, opacity 0.2s linear 0.1s;
-}
-.tox .tox-toolbar__overflow--shrinking {
-  transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s;
-}
-.tox .tox-menubar + .tox-toolbar,
-.tox .tox-menubar + .tox-toolbar-overlord .tox-toolbar__primary {
-  border-top: 1px solid #d9d9d9;
-  margin-top: -1px;
-}
-.tox .tox-toolbar--scrolling {
-  flex-wrap: nowrap;
-  overflow-x: auto;
-}
-.tox .tox-pop .tox-toolbar {
-  border-width: 0;
-}
-.tox .tox-toolbar--no-divider {
-  background-image: none;
-}
-.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child,
-.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary {
-  border-top: 1px solid #d9d9d9;
-}
-.tox.tox-tinymce-aux .tox-toolbar__overflow {
-  background-color: #fff;
-  border: 1px solid #d9d9d9;
-  border-radius: 3px;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
-}
-.tox .tox-toolbar__group {
-  align-items: center;
-  display: flex;
-  flex-wrap: wrap;
-  margin: 0 0;
-  padding: 0 4px 0 4px;
-}
-.tox .tox-toolbar__group--pull-right {
-  margin-left: auto;
-}
-.tox .tox-toolbar--scrolling .tox-toolbar__group {
-  flex-shrink: 0;
-  flex-wrap: nowrap;
-}
-.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) {
-  border-right: 1px solid #d9d9d9;
-}
-.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) {
-  border-left: 1px solid #d9d9d9;
-}
-.tox .tox-tooltip {
-  display: inline-block;
-  padding: 5px;
-  position: relative;
-}
-.tox .tox-tooltip__body {
-  background-color: rgba(84, 111, 94, 0.85);
-  border-radius: 3px;
-  box-shadow: 0 2px 4px rgba(84, 111, 94, 0.3);
-  color: rgba(255, 255, 255, 0.75);
-  font-size: 8.75px;
-  font-style: normal;
-  font-weight: normal;
-  padding: 2.5px 5px;
-  text-transform: none;
-}
-.tox .tox-tooltip__arrow {
-  position: absolute;
-}
-.tox .tox-tooltip--down .tox-tooltip__arrow {
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  border-top: 5px solid rgba(84, 111, 94, 0.85);
-  bottom: 0;
-  left: 50%;
-  position: absolute;
-  transform: translateX(-50%);
-}
-.tox .tox-tooltip--up .tox-tooltip__arrow {
-  border-bottom: 5px solid rgba(84, 111, 94, 0.85);
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  left: 50%;
-  position: absolute;
-  top: 0;
-  transform: translateX(-50%);
-}
-.tox .tox-tooltip--right .tox-tooltip__arrow {
-  border-bottom: 5px solid transparent;
-  border-left: 5px solid rgba(84, 111, 94, 0.85);
-  border-top: 5px solid transparent;
-  position: absolute;
-  right: 0;
-  top: 50%;
-  transform: translateY(-50%);
-}
-.tox .tox-tooltip--left .tox-tooltip__arrow {
-  border-bottom: 5px solid transparent;
-  border-right: 5px solid rgba(84, 111, 94, 0.85);
-  border-top: 5px solid transparent;
-  left: 0;
-  position: absolute;
-  top: 50%;
-  transform: translateY(-50%);
-}
-.tox .tox-well {
-  border: 1px solid #d9d9d9;
-  border-radius: 3px;
-  padding: 5px;
-  width: 100%;
-}
-.tox .tox-well > *:first-child {
-  margin-top: 0;
-}
-.tox .tox-well > *:last-child {
-  margin-bottom: 0;
-}
-.tox .tox-well > *:only-child {
-  margin: 0;
-}
-.tox .tox-custom-editor {
-  border: 1px solid #d9d9d9;
-  border-radius: 3px;
-  display: flex;
-  flex: 1;
-  position: relative;
-}
-/* stylelint-disable */
-.tox {
-  /* stylelint-enable */
-}
-.tox .tox-dialog-loading::before {
-  background-color: rgba(0, 0, 0, 0.5);
-  content: "";
-  height: 100%;
-  position: absolute;
-  width: 100%;
-  z-index: 1000;
-}
-.tox .tox-tab {
-  cursor: pointer;
-}
-.tox .tox-dialog__content-js {
-  display: flex;
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-}
-.tox .tox-dialog__body-content .tox-collection {
-  display: flex;
-  flex: 1;
-  -ms-flex-preferred-size: auto;
-}
-.tox .tox-image-tools-edit-panel {
-  height: 60px;
-}
-.tox .tox-image-tools__sidebar {
-  height: 60px;
-}
diff --git a/public/resource/tinymce/skins/ui/jeecg/skin.min.css b/public/resource/tinymce/skins/ui/jeecg/skin.min.css
deleted file mode 100644
index c86e0c1..0000000
--- a/public/resource/tinymce/skins/ui/jeecg/skin.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
-* Copyright (c) Tiny Technologies, Inc. All rights reserved.
-* Licensed under the LGPL or a commercial license.
-* For LGPL see License.txt in the project root for license information.
-* For commercial licenses see https://www.tiny.cloud/
-*/
-.tox{box-shadow:none;box-sizing:content-box;color:rgba(84,111,94,.85);cursor:auto;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:10px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:1px solid #d9d9d9;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox-tinymce-inline{border:none;box-shadow:none}.tox-tinymce-inline .tox-editor-header{background-color:transparent;border:1px solid #d9d9d9;border-radius:0;box-shadow:none}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:2.5px}.tox .accessibility-issue__description{align-items:stretch;border:1px solid #d9d9d9;border-radius:3px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:2.5px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:2.5px}.tox .accessibility-issue__description>:last-child:not(:only-child){border-color:#d9d9d9;border-style:solid}.tox .accessibility-issue__repair{margin-top:16px}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:rgba(10,143,233,.1);border-color:rgba(10,143,233,.4);color:rgba(84,111,94,.85)}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description>:last-child{border-color:rgba(10,143,233,.4)}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{color:#0a8fe9}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg{fill:#0a8fe9}.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon{color:#0a8fe9}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.1);border-color:rgba(255,165,0,.5);color:rgba(84,111,94,.85)}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description>:last-child{border-color:rgba(255,165,0,.5)}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{color:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg{fill:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon{color:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.1);border-color:rgba(204,0,0,.4);color:rgba(84,111,94,.85)}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description>:last-child{border-color:rgba(204,0,0,.4)}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg{fill:#c00}.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);border-color:rgba(120,171,70,.4);color:rgba(84,111,94,.85)}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{border-color:rgba(120,171,70,.4)}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#78ab46}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg{fill:#78ab46}.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon{color:#78ab46}.tox .tox-dialog__body-content .accessibility-issue__header h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:2.5px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:2.5px 2.5px 2.5px 5px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description>:last-child{border-left-width:1px;padding-left:2.5px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:2.5px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:2.5px 5px 2.5px 2.5px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description>:last-child{border-right-width:1px;padding-right:2.5px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#0a8fe9;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#0a8fe9;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:8.75px;font-style:normal;font-weight:400;letter-spacing:normal;line-height:24px;margin:0;outline:0;padding:2.5px 10px;text-align:center;text-decoration:none;text-transform:none;white-space:nowrap}.tox .tox-button[disabled]{background-color:#0a8fe9;background-image:none;border-color:#0a8fe9;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#0980d1;background-image:none;border-color:#0980d1;box-shadow:none;color:#fff}.tox .tox-button:hover:not(:disabled){background-color:#0980d1;background-image:none;border-color:#0980d1;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#0871b8;background-image:none;border-color:#0871b8;box-shadow:none;color:#fff}.tox .tox-button--secondary{background-color:#f0f0f0;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#f0f0f0;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;color:rgba(84,111,94,.85);font-size:8.75px;font-style:normal;font-weight:400;letter-spacing:normal;outline:0;padding:2.5px 10px;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:#f0f0f0;background-image:none;border-color:#f0f0f0;box-shadow:none;color:rgba(84,111,94,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:rgba(84,111,94,.85)}.tox .tox-button--secondary:hover:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:rgba(84,111,94,.85)}.tox .tox-button--secondary:active:not(:disabled){background-color:#d6d6d6;background-image:none;border-color:#d6d6d6;box-shadow:none;color:rgba(84,111,94,.85)}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:2.5px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:10px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:8.75px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:rgba(84,111,94,.85)}.tox .tox-button--naked[disabled]{background-color:#f0f0f0;border-color:#f0f0f0;box-shadow:none;color:rgba(84,111,94,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:#e3e3e3;border-color:#e3e3e3;box-shadow:none;color:rgba(84,111,94,.85)}.tox .tox-button--naked:focus:not(:disabled){background-color:#e3e3e3;border-color:#e3e3e3;box-shadow:none;color:rgba(84,111,94,.85)}.tox .tox-button--naked:active:not(:disabled){background-color:#d6d6d6;border-color:#d6d6d6;box-shadow:none;color:rgba(84,111,94,.85)}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:rgba(84,111,94,.85)}.tox .tox-checkbox{align-items:center;border-radius:3px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:3px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(2.5px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(84,111,94,.3)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#0a8fe9}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#0a8fe9}.tox .tox-checkbox--disabled{color:rgba(84,111,94,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(84,111,94,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(84,111,94,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(84,111,94,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:3px;box-shadow:inset 0 0 0 1px #0a8fe9;padding:calc(2.5px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:2.5px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:2.5px}.tox[dir=rtl] .tox-checkbox__label{margin-right:2.5px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:2.5px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#d9d9d9;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:2.5px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#f3f3f3;color:rgba(84,111,94,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:2.5px;margin-top:-2.5px;padding:2.5px 5px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;color:rgba(84,111,94,.85);cursor:pointer;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:2.5px 5px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:2.5px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:2.5px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:#fff;color:rgba(84,111,94,.85)}.tox .tox-collection--list .tox-collection__item--active{background-color:#e5e9e7}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#e5e9e7;color:rgba(84,111,94,.85)}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#e5e9e7}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#e5e9e7;color:rgba(84,111,94,.85)}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#e5e9e7;color:rgba(84,111,94,.85)}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:rgba(84,111,94,.85)}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:rgba(84,111,94,.85)}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;-ms-flex-preferred-size:auto;font-size:8.75px;font-style:normal;font-weight:400;line-height:24px;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(84,111,94,.7);display:inline-block;font-size:8.75px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:rgba(84,111,94,.85)}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(84,111,94,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(84,111,94,.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #d9d9d9;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 2.5px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:2px 0 3px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{-ms-grid-row-align:center;align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{-ms-grid-row-align:center;align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #d9d9d9}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:5px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:2.5px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:10px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:10px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #d9d9d9}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:5px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:2.5px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:10px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:10px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-2.5px 0}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#e5e9e7}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#fff;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:5px}.tox .tox-comment{background:#fff;border:1px solid #d9d9d9;border-radius:3px;box-shadow:0 4px 8px 0 rgba(84,111,94,.1);padding:5px 5px 10px 5px;position:relative}.tox .tox-comment__header{align-items:center;color:rgba(84,111,94,.85);display:flex;justify-content:space-between}.tox .tox-comment__date{color:rgba(84,111,94,.7);font-size:12px}.tox .tox-comment__body{color:rgba(84,111,94,.85);font-size:8.75px;font-style:normal;font-weight:400;line-height:1.3;margin-top:5px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:5px}.tox .tox-comment__expander p{color:rgba(84,111,94,.7);font-size:8.75px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:10px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#fff;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:5px}.tox .tox-comment__reply>:first-child{margin-bottom:5px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:10px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(255,255,255,0),#fff);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:rgba(84,111,94,.85);display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:10px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:8.75px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:rgba(84,111,94,.85);text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:5px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:5px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:5px}.tox[dir=rtl] .tox-comment__edit{margin-right:5px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:5px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(84,111,94,.7)}.tox .tox-user__name{color:rgba(84,111,94,.7);font-size:12px;font-style:normal;font-weight:400;text-transform:uppercase}.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:5px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:5px}.tox[dir=rtl] .tox-user__avatar svg{margin-left:5px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:5px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(255,255,255,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{background-color:#fff;border-color:#d9d9d9;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(84,111,94,.15),0 0 40px 1px rgba(84,111,94,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:5px auto;width:calc(100vw - 10px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:rgba(84,111,94,.85);display:flex;font-size:10px;justify-content:space-between;padding:5px 10px 0 10px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12.5px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:rgba(84,111,94,.85);display:flex;flex:1;-ms-flex-preferred-size:auto;font-size:10px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;padding:10px 10px}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(84,111,94,.7);display:inline-block;font-size:8.75px;line-height:1.3;margin-bottom:5px;text-decoration:none;white-space:nowrap}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(10,143,233,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #0a8fe9;color:#0a8fe9}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto;max-height:650px;overflow:auto;-webkit-overflow-scrolling:touch;padding:10px 10px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:10px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#0a8fe9;cursor:pointer;text-decoration:none}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#0871b8;text-decoration:none}.tox .tox-dialog__body-content a:active{color:#0871b8;text-decoration:none}.tox .tox-dialog__body-content svg{fill:rgba(84,111,94,.85)}.tox .tox-dialog__body-content ul{display:block;list-style-type:disc;margin-bottom:10px;-webkit-margin-end:0;margin-inline-end:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-padding-start:2.5rem;padding-inline-start:2.5rem}.tox .tox-dialog__body-content .tox-form__group h1{color:rgba(84,111,94,.85);font-size:12.5px;font-style:normal;font-weight:400;letter-spacing:normal;margin-bottom:10px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:rgba(84,111,94,.85);font-size:10px;font-style:normal;font-weight:400;letter-spacing:normal;margin-bottom:10px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:10px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:1px solid #d9d9d9;display:flex;justify-content:space-between;padding:5px 10px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(255,255,255,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:400;padding-bottom:5px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #d9d9d9}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:5px;padding-top:5px}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}.tox.tox-platform-ie .tox-dialog-wrap{position:-ms-device-fixed}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:5px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:5px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:5px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:5px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #d9d9d9;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(84,111,94,.7);margin:0 0 10px 0}.tox .tox-edit-area{display:flex;flex:1;-ms-flex-preferred-size:auto;overflow:hidden;position:relative}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;-ms-flex-preferred-size:auto;height:100%;position:absolute;width:100%}.tox.tox-inline-edit-area{border:1px dotted #d9d9d9}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{z-index:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{box-shadow:none;transition:box-shadow .5s}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:transparent;box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:20px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:2.5px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:20px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:2.5px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:400}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(84,111,94,.2);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#0a8fe9;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #fff;border-radius:3px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(84,111,94,.7);display:block;font-size:8.75px;font-style:normal;font-weight:400;line-height:1.3;padding:0 5px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 5px}.tox[dir=rtl] .tox-label{padding:0 0 0 5px}.tox .tox-form{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group{box-sizing:border-box;margin-bottom:2.5px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (5px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (5px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (5px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-textarea{flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:2.5px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:2.5px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d9d9d9;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:rgba(84,111,94,.85);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:10px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 3.25px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#f2f2f2;color:rgba(84,111,94,.85);cursor:not-allowed}.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{background-color:#fff;border-color:#0a8fe9;box-shadow:none;outline:0}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#0a8fe9;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:rgba(84,111,94,.85)}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:2.5px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:2.5px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#f2f2f2;color:rgba(84,111,94,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:10px}.tox .tox-listbox__select-chevron svg{fill:rgba(84,111,94,.85)}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:5px}.tox[dir=rtl] .tox-listboxfield svg{left:5px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d9d9d9;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:rgba(84,111,94,.85);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:10px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 3.25px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(84,111,94,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#fff;border-color:#0a8fe9;box-shadow:none;outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:15px}.tox:not([dir=rtl]) .tox-selectfield svg{right:5px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:15px}.tox[dir=rtl] .tox-selectfield svg{left:5px}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox-fullscreen{border:0;height:100%;left:0;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;position:fixed;top:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox.tox-tinymce.tox-fullscreen{background-color:transparent;z-index:1200}.tox-shadowhost.tox-fullscreen{z-index:1200}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-image-tools{width:100%}.tox .tox-image-tools__toolbar{align-items:center;display:flex;justify-content:center}.tox .tox-image-tools__image{background-color:#666;height:380px;overflow:auto;position:relative;width:100%}.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top:5px}.tox .tox-image-tools__image-bg{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools__toolbar>.tox-spacer{flex:1;-ms-flex-preferred-size:auto}.tox .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left:5px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-left:20px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left:20px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right:5px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-right:20px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right:20px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:110px}.tox .tox-insert-table-picker>div{border-color:#d9d9d9;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:11px;width:11px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-2.5px 0}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(10,143,233,.5);border-color:rgba(10,143,233,.5)}.tox .tox-insert-table-picker__label{color:rgba(84,111,94,.7);display:block;font-size:8.75px;padding:2.5px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#fff;border:1px solid #d9d9d9;border-radius:3px;box-shadow:0 4px 8px 0 rgba(84,111,94,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:2.5px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:2.5px}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23d9d9d9'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 4px 0 4px}.tox.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #d9d9d9}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#817f7c;display:flex;flex:0 0 auto;font-size:8.75px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:transparent;border:0;box-shadow:none;color:rgba(129,127,124,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#e5e9e7;border:0;box-shadow:none;color:#0a9fe5}.tox .tox-mbtn--active{background:#e5e9e7;border:0;box-shadow:none;color:rgba(41,159,250,.88)}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#e5e9e7;border:0;box-shadow:none;color:#0a9fe5}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:-ms-grid;display:grid;font-size:8.75px;font-weight:400;-ms-grid-columns:minmax(40px,1fr) auto minmax(40px,1fr);grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:2.5px;opacity:0;padding:2.5px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:8.75px;font-weight:400}.tox .tox-notification a{cursor:pointer;text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:rgba(84,111,94,.85)}.tox .tox-notification--success p{color:rgba(84,111,94,.85)}.tox .tox-notification--success a{color:#547831}.tox .tox-notification--success svg{fill:rgba(84,111,94,.85)}.tox .tox-notification--error{background-color:#f8dede;border-color:#f2bfbf;color:rgba(84,111,94,.85)}.tox .tox-notification--error p{color:rgba(84,111,94,.85)}.tox .tox-notification--error a{color:#c00}.tox .tox-notification--error svg{fill:rgba(84,111,94,.85)}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fffaea;border-color:#ffe89d;color:rgba(84,111,94,.85)}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:rgba(84,111,94,.85)}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:rgba(84,111,94,.85)}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:rgba(84,111,94,.85)}.tox .tox-notification--info{background-color:#d9edf7;border-color:#779ecb;color:rgba(84,111,94,.85)}.tox .tox-notification--info p{color:rgba(84,111,94,.85)}.tox .tox-notification--info a{color:rgba(84,111,94,.85)}.tox .tox-notification--info svg{fill:rgba(84,111,94,.85)}.tox .tox-notification__body{-ms-grid-row-align:center;align-self:center;color:rgba(84,111,94,.85);font-size:14px;-ms-grid-column-span:1;grid-column-end:3;-ms-grid-column:2;grid-column-start:2;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{-ms-grid-row-align:center;align-self:center;-ms-grid-column-span:1;grid-column-end:2;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{-ms-grid-row-align:start;align-self:start;-ms-grid-column-span:1;grid-column-end:4;-ms-grid-column:3;grid-column-start:3;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification .tox-progress-bar{-ms-grid-column-span:3;grid-column-end:4;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:3;-ms-grid-row:2;grid-row-start:2;-ms-grid-column-align:center;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #d9d9d9;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:2.5px 2.5px 2.5px 5px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#d9d9d9 transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #d9d9d9 transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #d9d9d9 transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #d9d9d9;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;-ms-flex-preferred-size:0;min-height:0}.tox .tox-sidebar{background-color:#fff;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;-ms-flex-preferred-size:auto;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #d9d9d9;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#0a8fe9;border:2px solid #0871b8;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(84,111,94,.7);border-radius:100%;height:5px;width:5px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:2.5px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:2.5px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #d9d9d9;color:rgba(84,111,94,.7);display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 5px;position:relative;text-transform:uppercase}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:flex-end;overflow:hidden}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(84,111,94,.7);text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){cursor:pointer;text-decoration:underline}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-5px;padding-left:1ch}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(84,111,94,.7)}.tox .tox-statusbar__resize-handle:focus svg{background-color:#e5e9e7;border-radius:1px;box-shadow:0 0 0 2px #e5e9e7}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:2.5px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:2.5px}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(255,255,255,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#817f7c;display:flex;flex:0 0 auto;font-size:8.75px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0;text-transform:none;width:34px}.tox .tox-tbtn svg{display:block;fill:#817f7c}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#e5e9e7;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#e5e9e7;border:0;box-shadow:none;color:#0a9fe5}.tox .tox-tbtn:hover svg{fill:#0a9fe5}.tox .tox-tbtn:active{background:#e5e9e7;border:0;box-shadow:none;color:rgba(41,159,250,.88)}.tox .tox-tbtn:active svg{fill:rgba(41,159,250,.88)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(129,127,124,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(129,127,124,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#e5e9e7;border:0;box-shadow:none;color:rgba(41,159,250,.88)}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:rgba(41,159,250,.88)}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#ee930e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#ee930e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{-ms-grid-row-align:stretch;align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:2.5px;white-space:nowrap}.tox .tox-tbtn--select{margin:2px 0 3px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:10px}.tox .tox-tbtn__select-chevron svg{fill:rgba(129,127,124,.5)}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:2px 0 3px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #e5e9e7 inset}.tox .tox-split-button:focus{background:#e5e9e7;box-shadow:none;color:#ee930e}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:10px}.tox .tox-split-button__chevron svg{fill:rgba(129,127,124,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:14px}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(129,127,124,.5)}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23d9d9d9'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #d9d9d9;margin-top:-1px}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #d9d9d9}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;border:1px solid #d9d9d9;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #d9d9d9}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #d9d9d9}.tox .tox-tooltip{display:inline-block;padding:5px;position:relative}.tox .tox-tooltip__body{background-color:rgba(84,111,94,.85);border-radius:3px;box-shadow:0 2px 4px rgba(84,111,94,.3);color:rgba(255,255,255,.75);font-size:8.75px;font-style:normal;font-weight:400;padding:2.5px 5px;text-transform:none}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid rgba(84,111,94,.85);bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:5px solid rgba(84,111,94,.85);border-left:5px solid transparent;border-right:5px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:5px solid transparent;border-left:5px solid rgba(84,111,94,.85);border-top:5px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:5px solid transparent;border-right:5px solid rgba(84,111,94,.85);border-top:5px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-well{border:1px solid #d9d9d9;border-radius:3px;padding:5px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #d9d9d9;border-radius:3px;display:flex;flex:1;position:relative}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-image-tools-edit-panel{height:60px}.tox .tox-image-tools__sidebar{height:60px}
\ No newline at end of file
diff --git a/public/resource/tinymce/skins/ui/jeecg/skin.mobile.css b/public/resource/tinymce/skins/ui/jeecg/skin.mobile.css
deleted file mode 100644
index df458d5..0000000
--- a/public/resource/tinymce/skins/ui/jeecg/skin.mobile.css
+++ /dev/null
@@ -1,677 +0,0 @@
-/**
-* Copyright (c) Tiny Technologies, Inc. All rights reserved.
-* Licensed under the LGPL or a commercial license.
-* For LGPL see License.txt in the project root for license information.
-* For commercial licenses see https://www.tiny.cloud/
-*/
-/* RESET all the things! */
-.tinymce-mobile-outer-container {
-  all: initial;
-  display: block;
-}
-.tinymce-mobile-outer-container * {
-  border: 0;
-  box-sizing: initial;
-  cursor: inherit;
-  float: none;
-  line-height: 1;
-  margin: 0;
-  outline: 0;
-  padding: 0;
-  -webkit-tap-highlight-color: transparent;
-  /* TBIO-3691, stop the gray flicker on touch. */
-  text-shadow: none;
-  white-space: nowrap;
-}
-.tinymce-mobile-icon-arrow-back::before {
-  content: "\e5cd";
-}
-.tinymce-mobile-icon-image::before {
-  content: "\e412";
-}
-.tinymce-mobile-icon-cancel-circle::before {
-  content: "\e5c9";
-}
-.tinymce-mobile-icon-full-dot::before {
-  content: "\e061";
-}
-.tinymce-mobile-icon-align-center::before {
-  content: "\e234";
-}
-.tinymce-mobile-icon-align-left::before {
-  content: "\e236";
-}
-.tinymce-mobile-icon-align-right::before {
-  content: "\e237";
-}
-.tinymce-mobile-icon-bold::before {
-  content: "\e238";
-}
-.tinymce-mobile-icon-italic::before {
-  content: "\e23f";
-}
-.tinymce-mobile-icon-unordered-list::before {
-  content: "\e241";
-}
-.tinymce-mobile-icon-ordered-list::before {
-  content: "\e242";
-}
-.tinymce-mobile-icon-font-size::before {
-  content: "\e245";
-}
-.tinymce-mobile-icon-underline::before {
-  content: "\e249";
-}
-.tinymce-mobile-icon-link::before {
-  content: "\e157";
-}
-.tinymce-mobile-icon-unlink::before {
-  content: "\eca2";
-}
-.tinymce-mobile-icon-color::before {
-  content: "\e891";
-}
-.tinymce-mobile-icon-previous::before {
-  content: "\e314";
-}
-.tinymce-mobile-icon-next::before {
-  content: "\e315";
-}
-.tinymce-mobile-icon-large-font::before,
-.tinymce-mobile-icon-style-formats::before {
-  content: "\e264";
-}
-.tinymce-mobile-icon-undo::before {
-  content: "\e166";
-}
-.tinymce-mobile-icon-redo::before {
-  content: "\e15a";
-}
-.tinymce-mobile-icon-removeformat::before {
-  content: "\e239";
-}
-.tinymce-mobile-icon-small-font::before {
-  content: "\e906";
-}
-.tinymce-mobile-icon-readonly-back::before,
-.tinymce-mobile-format-matches::after {
-  content: "\e5ca";
-}
-.tinymce-mobile-icon-small-heading::before {
-  content: "small";
-}
-.tinymce-mobile-icon-large-heading::before {
-  content: "large";
-}
-.tinymce-mobile-icon-small-heading::before,
-.tinymce-mobile-icon-large-heading::before {
-  font-family: sans-serif;
-  font-size: 80%;
-}
-.tinymce-mobile-mask-edit-icon::before {
-  content: "\e254";
-}
-.tinymce-mobile-icon-back::before {
-  content: "\e5c4";
-}
-.tinymce-mobile-icon-heading::before {
-  /* TODO: Translate */
-  content: "Headings";
-  font-family: sans-serif;
-  font-size: 80%;
-  font-weight: bold;
-}
-.tinymce-mobile-icon-h1::before {
-  content: "H1";
-  font-weight: bold;
-}
-.tinymce-mobile-icon-h2::before {
-  content: "H2";
-  font-weight: bold;
-}
-.tinymce-mobile-icon-h3::before {
-  content: "H3";
-  font-weight: bold;
-}
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask {
-  align-items: center;
-  display: flex;
-  justify-content: center;
-  background: rgba(51, 51, 51, 0.5);
-  height: 100%;
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container {
-  align-items: center;
-  border-radius: 50%;
-  display: flex;
-  flex-direction: column;
-  font-family: sans-serif;
-  font-size: 1em;
-  justify-content: space-between;
-}
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item {
-  align-items: center;
-  display: flex;
-  justify-content: center;
-  border-radius: 50%;
-  height: 2.1em;
-  width: 2.1em;
-}
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {
-  align-items: center;
-  display: flex;
-  justify-content: center;
-  flex-direction: column;
-  font-size: 1em;
-}
-@media only screen and (min-device-width:700px) {
-  .tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {
-    font-size: 1.2em;
-  }
-}
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon {
-  align-items: center;
-  display: flex;
-  justify-content: center;
-  border-radius: 50%;
-  height: 2.1em;
-  width: 2.1em;
-  background-color: white;
-  color: #207ab7;
-}
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before {
-  content: "\e900";
-  font-family: 'tinymce-mobile', sans-serif;
-}
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon {
-  z-index: 2;
-}
-.tinymce-mobile-android-container.tinymce-mobile-android-maximized {
-  background: #ffffff;
-  border: none;
-  bottom: 0;
-  display: flex;
-  flex-direction: column;
-  left: 0;
-  position: fixed;
-  right: 0;
-  top: 0;
-}
-.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized) {
-  position: relative;
-}
-.tinymce-mobile-android-container .tinymce-mobile-editor-socket {
-  display: flex;
-  flex-grow: 1;
-}
-.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe {
-  display: flex !important;
-  flex-grow: 1;
-  height: auto !important;
-}
-.tinymce-mobile-android-scroll-reload {
-  overflow: hidden;
-}
-:not(.tinymce-mobile-readonly-mode) > .tinymce-mobile-android-selection-context-toolbar {
-  margin-top: 23px;
-}
-.tinymce-mobile-toolstrip {
-  background: #fff;
-  display: flex;
-  flex: 0 0 auto;
-  z-index: 1;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar {
-  align-items: center;
-  background-color: #fff;
-  border-bottom: 1px solid #cccccc;
-  display: flex;
-  flex: 1;
-  height: 2.5em;
-  width: 100%;
-  /* Make it no larger than the toolstrip, so that it needs to scroll */
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group {
-  align-items: center;
-  display: flex;
-  height: 100%;
-  flex-shrink: 1;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group > div {
-  align-items: center;
-  display: flex;
-  height: 100%;
-  flex: 1;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container {
-  background: #f44336;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group {
-  flex-grow: 1;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {
-  padding-left: 0.5em;
-  padding-right: 0.5em;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button {
-  align-items: center;
-  display: flex;
-  height: 80%;
-  margin-left: 2px;
-  margin-right: 2px;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected {
-  background: #d4dbd7;
-  color: #cccccc;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type {
-  background: #207ab7;
-  color: #eceff1;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar {
-  /* Note, this file is imported inside .tinymce-mobile-context-toolbar, so that prefix is on everything here. */
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group {
-  align-items: center;
-  display: flex;
-  height: 100%;
-  flex: 1;
-  padding-bottom: 0.4em;
-  padding-top: 0.4em;
-  /* Make any buttons appearing on the left and right display in the centre (e.g. color edges) */
-  /* For widgets like the colour picker, use the whole height */
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog {
-  display: flex;
-  min-height: 1.5em;
-  overflow: hidden;
-  padding-left: 0;
-  padding-right: 0;
-  position: relative;
-  width: 100%;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain {
-  display: flex;
-  height: 100%;
-  transition: left cubic-bezier(0.4, 0, 1, 1) 0.15s;
-  width: 100%;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen {
-  display: flex;
-  flex: 0 0 auto;
-  justify-content: space-between;
-  width: 100%;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input {
-  font-family: Sans-serif;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container {
-  display: flex;
-  flex-grow: 1;
-  position: relative;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x {
-  -ms-grid-row-align: center;
-      align-self: center;
-  background: inherit;
-  border: none;
-  border-radius: 50%;
-  color: #888;
-  font-size: 0.6em;
-  font-weight: bold;
-  height: 100%;
-  padding-right: 2px;
-  position: absolute;
-  right: 0;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x {
-  display: none;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous,
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next {
-  align-items: center;
-  display: flex;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before,
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before {
-  align-items: center;
-  display: flex;
-  font-weight: bold;
-  height: 100%;
-  padding-left: 0.5em;
-  padding-right: 0.5em;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before,
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before {
-  visibility: hidden;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item {
-  color: #cccccc;
-  font-size: 10px;
-  line-height: 10px;
-  margin: 0 2px;
-  padding-top: 3px;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active {
-  color: #d4dbd7;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before {
-  margin-left: 0.5em;
-  margin-right: 0.9em;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before {
-  margin-left: 0.9em;
-  margin-right: 0.5em;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider {
-  display: flex;
-  flex: 1;
-  margin-left: 0;
-  margin-right: 0;
-  padding: 0.28em 0;
-  position: relative;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container {
-  align-items: center;
-  display: flex;
-  flex-grow: 1;
-  height: 100%;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line {
-  background: #cccccc;
-  display: flex;
-  flex: 1;
-  height: 0.2em;
-  margin-bottom: 0.3em;
-  margin-top: 0.3em;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container {
-  padding-left: 2em;
-  padding-right: 2em;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container {
-  align-items: center;
-  display: flex;
-  flex-grow: 1;
-  height: 100%;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient {
-  background: linear-gradient(to right, hsl(0, 100%, 50%) 0%, hsl(60, 100%, 50%) 17%, hsl(120, 100%, 50%) 33%, hsl(180, 100%, 50%) 50%, hsl(240, 100%, 50%) 67%, hsl(300, 100%, 50%) 83%, hsl(0, 100%, 50%) 100%);
-  display: flex;
-  flex: 1;
-  height: 0.2em;
-  margin-bottom: 0.3em;
-  margin-top: 0.3em;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black {
-  /* Not part of theming */
-  background: black;
-  height: 0.2em;
-  margin-bottom: 0.3em;
-  margin-top: 0.3em;
-  width: 1.2em;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white {
-  /* Not part of theming */
-  background: white;
-  height: 0.2em;
-  margin-bottom: 0.3em;
-  margin-top: 0.3em;
-  width: 1.2em;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb {
-  /* vertically centering trick (margin: auto, top: 0, bottom: 0). On iOS and Safari, if you leave
-     * out these values, then it shows the thumb at the top of the spectrum. This is probably because it is
-     * absolutely positioned with only a left value, and not a top. Note, on Chrome it seems to be fine without
-     * this approach.
-    */
-  align-items: center;
-  background-clip: padding-box;
-  background-color: #455a64;
-  border: 0.5em solid rgba(136, 136, 136, 0);
-  border-radius: 3em;
-  bottom: 0;
-  color: #fff;
-  display: flex;
-  height: 0.5em;
-  justify-content: center;
-  left: -10px;
-  margin: auto;
-  position: absolute;
-  top: 0;
-  transition: border 120ms cubic-bezier(0.39, 0.58, 0.57, 1);
-  width: 0.5em;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active {
-  border: 0.5em solid rgba(136, 136, 136, 0.39);
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group > div {
-  align-items: center;
-  display: flex;
-  height: 100%;
-  flex: 1;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper {
-  flex-direction: column;
-  justify-content: center;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {
-  align-items: center;
-  display: flex;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog) {
-  height: 100%;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container {
-  display: flex;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input {
-  background: #ffffff;
-  border: none;
-  border-radius: 0;
-  color: #455a64;
-  flex-grow: 1;
-  font-size: 0.85em;
-  padding-bottom: 0.1em;
-  padding-left: 5px;
-  padding-top: 0.1em;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder {
-  /* WebKit, Blink, Edge */
-  color: #888;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input:-ms-input-placeholder {
-  /* WebKit, Blink, Edge */
-  color: #888;
-}
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder {
-  /* WebKit, Blink, Edge */
-  color: #888;
-}
-/* dropup */
-.tinymce-mobile-dropup {
-  background: white;
-  display: flex;
-  overflow: hidden;
-  width: 100%;
-}
-.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking {
-  transition: height 0.3s ease-out;
-}
-.tinymce-mobile-dropup.tinymce-mobile-dropup-growing {
-  transition: height 0.3s ease-in;
-}
-.tinymce-mobile-dropup.tinymce-mobile-dropup-closed {
-  flex-grow: 0;
-}
-.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing) {
-  flex-grow: 1;
-}
-/* TODO min-height for device size and orientation */
-.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
-  min-height: 200px;
-}
-@media only screen and (orientation: landscape) {
-  .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
-    min-height: 200px;
-  }
-}
-@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {
-  .tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
-    min-height: 150px;
-  }
-}
-/* styles menu */
-.tinymce-mobile-styles-menu {
-  font-family: sans-serif;
-  outline: 4px solid black;
-  overflow: hidden;
-  position: relative;
-  width: 100%;
-}
-.tinymce-mobile-styles-menu [role="menu"] {
-  display: flex;
-  flex-direction: column;
-  height: 100%;
-  position: absolute;
-  width: 100%;
-}
-.tinymce-mobile-styles-menu [role="menu"].transitioning {
-  transition: transform 0.5s ease-in-out;
-}
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-item {
-  border-bottom: 1px solid #ddd;
-  color: #455a64;
-  cursor: pointer;
-  display: flex;
-  padding: 1em 1em;
-  position: relative;
-}
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before {
-  color: #455a64;
-  content: "\e314";
-  font-family: 'tinymce-mobile', sans-serif;
-}
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after {
-  color: #455a64;
-  content: "\e315";
-  font-family: 'tinymce-mobile', sans-serif;
-  padding-left: 1em;
-  padding-right: 1em;
-  position: absolute;
-  right: 0;
-}
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after {
-  font-family: 'tinymce-mobile', sans-serif;
-  padding-left: 1em;
-  padding-right: 1em;
-  position: absolute;
-  right: 0;
-}
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator,
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser {
-  align-items: center;
-  background: #fff;
-  border-top: #455a64;
-  color: #455a64;
-  display: flex;
-  min-height: 2.5em;
-  padding-left: 1em;
-  padding-right: 1em;
-}
-.tinymce-mobile-styles-menu [data-transitioning-destination="before"][data-transitioning-state],
-.tinymce-mobile-styles-menu [data-transitioning-state="before"] {
-  transform: translate(-100%);
-}
-.tinymce-mobile-styles-menu [data-transitioning-destination="current"][data-transitioning-state],
-.tinymce-mobile-styles-menu [data-transitioning-state="current"] {
-  transform: translate(0%);
-}
-.tinymce-mobile-styles-menu [data-transitioning-destination="after"][data-transitioning-state],
-.tinymce-mobile-styles-menu [data-transitioning-state="after"] {
-  transform: translate(100%);
-}
-@font-face {
-  font-family: 'tinymce-mobile';
-  font-style: normal;
-  font-weight: normal;
-  src: url('fonts/tinymce-mobile.woff?8x92w3') format('woff');
-}
-@media (min-device-width: 700px) {
-  .tinymce-mobile-outer-container,
-  .tinymce-mobile-outer-container input {
-    font-size: 25px;
-  }
-}
-@media (max-device-width: 700px) {
-  .tinymce-mobile-outer-container,
-  .tinymce-mobile-outer-container input {
-    font-size: 18px;
-  }
-}
-.tinymce-mobile-icon {
-  font-family: 'tinymce-mobile', sans-serif;
-}
-.mixin-flex-and-centre {
-  align-items: center;
-  display: flex;
-  justify-content: center;
-}
-.mixin-flex-bar {
-  align-items: center;
-  display: flex;
-  height: 100%;
-}
-.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe {
-  background-color: #fff;
-  width: 100%;
-}
-.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
-  /* Note, on the iPod touch in landscape, this isn't visible when the navbar appears */
-  background-color: #207ab7;
-  border-radius: 50%;
-  bottom: 1em;
-  color: white;
-  font-size: 1em;
-  height: 2.1em;
-  position: fixed;
-  right: 2em;
-  width: 2.1em;
-  align-items: center;
-  display: flex;
-  justify-content: center;
-}
-@media only screen and (min-device-width:700px) {
-  .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
-    font-size: 1.2em;
-  }
-}
-.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket {
-  height: 300px;
-  overflow: hidden;
-}
-.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe {
-  height: 100%;
-}
-.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip {
-  display: none;
-}
-/*
-  Note, that if you don't include this (::-webkit-file-upload-button), the toolbar width gets
-  increased and the whole body becomes scrollable. It's important!
- */
-input[type="file"]::-webkit-file-upload-button {
-  display: none;
-}
-@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {
-  .tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
-    bottom: 50%;
-  }
-}
diff --git a/public/resource/tinymce/skins/ui/jeecg/skin.mobile.min.css b/public/resource/tinymce/skins/ui/jeecg/skin.mobile.min.css
deleted file mode 100644
index eaad954..0000000
--- a/public/resource/tinymce/skins/ui/jeecg/skin.mobile.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
-* Copyright (c) Tiny Technologies, Inc. All rights reserved.
-* Licensed under the LGPL or a commercial license.
-* For LGPL see License.txt in the project root for license information.
-* For commercial licenses see https://www.tiny.cloud/
-*/
-.tinymce-mobile-outer-container{all:initial;display:block}.tinymce-mobile-outer-container *{border:0;box-sizing:initial;cursor:inherit;float:none;line-height:1;margin:0;outline:0;padding:0;-webkit-tap-highlight-color:transparent;text-shadow:none;white-space:nowrap}.tinymce-mobile-icon-arrow-back::before{content:"\e5cd"}.tinymce-mobile-icon-image::before{content:"\e412"}.tinymce-mobile-icon-cancel-circle::before{content:"\e5c9"}.tinymce-mobile-icon-full-dot::before{content:"\e061"}.tinymce-mobile-icon-align-center::before{content:"\e234"}.tinymce-mobile-icon-align-left::before{content:"\e236"}.tinymce-mobile-icon-align-right::before{content:"\e237"}.tinymce-mobile-icon-bold::before{content:"\e238"}.tinymce-mobile-icon-italic::before{content:"\e23f"}.tinymce-mobile-icon-unordered-list::before{content:"\e241"}.tinymce-mobile-icon-ordered-list::before{content:"\e242"}.tinymce-mobile-icon-font-size::before{content:"\e245"}.tinymce-mobile-icon-underline::before{content:"\e249"}.tinymce-mobile-icon-link::before{content:"\e157"}.tinymce-mobile-icon-unlink::before{content:"\eca2"}.tinymce-mobile-icon-color::before{content:"\e891"}.tinymce-mobile-icon-previous::before{content:"\e314"}.tinymce-mobile-icon-next::before{content:"\e315"}.tinymce-mobile-icon-large-font::before,.tinymce-mobile-icon-style-formats::before{content:"\e264"}.tinymce-mobile-icon-undo::before{content:"\e166"}.tinymce-mobile-icon-redo::before{content:"\e15a"}.tinymce-mobile-icon-removeformat::before{content:"\e239"}.tinymce-mobile-icon-small-font::before{content:"\e906"}.tinymce-mobile-format-matches::after,.tinymce-mobile-icon-readonly-back::before{content:"\e5ca"}.tinymce-mobile-icon-small-heading::before{content:"small"}.tinymce-mobile-icon-large-heading::before{content:"large"}.tinymce-mobile-icon-large-heading::before,.tinymce-mobile-icon-small-heading::before{font-family:sans-serif;font-size:80%}.tinymce-mobile-mask-edit-icon::before{content:"\e254"}.tinymce-mobile-icon-back::before{content:"\e5c4"}.tinymce-mobile-icon-heading::before{content:"Headings";font-family:sans-serif;font-size:80%;font-weight:700}.tinymce-mobile-icon-h1::before{content:"H1";font-weight:700}.tinymce-mobile-icon-h2::before{content:"H2";font-weight:700}.tinymce-mobile-icon-h3::before{content:"H3";font-weight:700}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{align-items:center;display:flex;justify-content:center;background:rgba(51,51,51,.5);height:100%;position:absolute;top:0;width:100%}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{align-items:center;border-radius:50%;display:flex;flex-direction:column;font-family:sans-serif;font-size:1em;justify-content:space-between}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{align-items:center;display:flex;justify-content:center;flex-direction:column;font-size:1em}@media only screen and (min-device-width:700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size:1.2em}}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em;background-color:#fff;color:#207ab7}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before{content:"\e900";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index:2}.tinymce-mobile-android-container.tinymce-mobile-android-maximized{background:#fff;border:none;bottom:0;display:flex;flex-direction:column;left:0;position:fixed;right:0;top:0}.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position:relative}.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display:flex;flex-grow:1}.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display:flex!important;flex-grow:1;height:auto!important}.tinymce-mobile-android-scroll-reload{overflow:hidden}:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top:23px}.tinymce-mobile-toolstrip{background:#fff;display:flex;flex:0 0 auto;z-index:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{align-items:center;background-color:#fff;border-bottom:1px solid #ccc;display:flex;flex:1;height:2.5em;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex-shrink:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background:#f44336}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{flex-grow:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{align-items:center;display:flex;height:80%;margin-left:2px;margin-right:2px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{background:#d4dbd7;color:#ccc}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{background:#207ab7;color:#eceff1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex:1;padding-bottom:.4em;padding-top:.4em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{display:flex;min-height:1.5em;overflow:hidden;padding-left:0;padding-right:0;position:relative;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{display:flex;height:100%;transition:left cubic-bezier(.4,0,1,1) .15s;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{display:flex;flex:0 0 auto;justify-content:space-between;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family:Sans-serif}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{display:flex;flex-grow:1;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{-ms-grid-row-align:center;align-self:center;background:inherit;border:none;border-radius:50%;color:#888;font-size:.6em;font-weight:700;height:100%;padding-right:2px;position:absolute;right:0}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display:none}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before{align-items:center;display:flex;font-weight:700;height:100%;padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before{visibility:hidden}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{color:#ccc;font-size:10px;line-height:10px;margin:0 2px;padding-top:3px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color:#d4dbd7}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before{margin-left:.5em;margin-right:.9em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before{margin-left:.9em;margin-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{display:flex;flex:1;margin-left:0;margin-right:0;padding:.28em 0;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{background:#ccc;display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-left:2em;padding-right:2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{background:linear-gradient(to right,red 0,#feff00 17%,#0f0 33%,#00feff 50%,#00f 67%,#ff00fe 83%,red 100%);display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{background:#000;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{background:#fff;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{align-items:center;background-clip:padding-box;background-color:#455a64;border:.5em solid rgba(136,136,136,0);border-radius:3em;bottom:0;color:#fff;display:flex;height:.5em;justify-content:center;left:-10px;margin:auto;position:absolute;top:0;transition:border 120ms cubic-bezier(.39,.58,.57,1);width:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border:.5em solid rgba(136,136,136,.39)}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{flex-direction:column;justify-content:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{background:#fff;border:none;border-radius:0;color:#455a64;flex-grow:1;font-size:.85em;padding-bottom:.1em;padding-left:5px;padding-top:.1em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input:-ms-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color:#888}.tinymce-mobile-dropup{background:#fff;display:flex;overflow:hidden;width:100%}.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{transition:height .3s ease-out}.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{transition:height .3s ease-in}.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{flex-grow:0}.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){flex-grow:1}.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}@media only screen and (orientation:landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:150px}}.tinymce-mobile-styles-menu{font-family:sans-serif;outline:4px solid #000;overflow:hidden;position:relative;width:100%}.tinymce-mobile-styles-menu [role=menu]{display:flex;flex-direction:column;height:100%;position:absolute;width:100%}.tinymce-mobile-styles-menu [role=menu].transitioning{transition:transform .5s ease-in-out}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{border-bottom:1px solid #ddd;color:#455a64;cursor:pointer;display:flex;padding:1em 1em;position:relative}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before{color:#455a64;content:"\e314";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after{color:#455a64;content:"\e315";font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after{font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser,.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator{align-items:center;background:#fff;border-top:#455a64;color:#455a64;display:flex;min-height:2.5em;padding-left:1em;padding-right:1em}.tinymce-mobile-styles-menu [data-transitioning-destination=before][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=before]{transform:translate(-100%)}.tinymce-mobile-styles-menu [data-transitioning-destination=current][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=current]{transform:translate(0)}.tinymce-mobile-styles-menu [data-transitioning-destination=after][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=after]{transform:translate(100%)}@font-face{font-family:tinymce-mobile;font-style:normal;font-weight:400;src:url(fonts/tinymce-mobile.woff?8x92w3) format('woff')}@media (min-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:25px}}@media (max-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:18px}}.tinymce-mobile-icon{font-family:tinymce-mobile,sans-serif}.mixin-flex-and-centre{align-items:center;display:flex;justify-content:center}.mixin-flex-bar{align-items:center;display:flex;height:100%}.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe{background-color:#fff;width:100%}.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{background-color:#207ab7;border-radius:50%;bottom:1em;color:#fff;font-size:1em;height:2.1em;position:fixed;right:2em;width:2.1em;align-items:center;display:flex;justify-content:center}@media only screen and (min-device-width:700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size:1.2em}}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{height:300px;overflow:hidden}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe{height:100%}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display:none}input[type=file]::-webkit-file-upload-button{display:none}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom:50%}}
\ No newline at end of file
diff --git a/public/resource/tinymce/skins/ui/oxide-dark/content.inline.min.css b/public/resource/tinymce/skins/ui/oxide-dark/content.inline.min.css
deleted file mode 100644
index 748f313..0000000
--- a/public/resource/tinymce/skins/ui/oxide-dark/content.inline.min.css
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- */
-.mce-content-body .mce-item-anchor{display: inline-block;width: 8px !important;height: 12px !important;padding: 0 2px;cursor: default;background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;-webkit-user-select: all;-moz-user-select: all;-ms-user-select: all;user-select: all;-webkit-user-modify: read-only;-moz-user-modify: read-only;}
-
-.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset: 1px;}
-
-.tox-comments-visible .tox-comment{background-color: #fff0b7;}
-
-.tox-comments-visible .tox-comment--active{background-color: #ffe168;}
-
-.tox-checklist>li:not(.tox-checklist--hidden){margin: .25em 0;list-style: none;}
-
-.tox-checklist>li:not(.tox-checklist--hidden)::before{position: absolute;width: 1em;height: 1em;margin-top: .125em;margin-left: -1.5em;cursor: pointer;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size: 100%;content: '';}
-
-.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");}
-
-[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-right: -1.5em;margin-left: 0;}
-
-code[class*=language-],pre[class*=language-]{font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size: .875rem;-webkit-hyphens: none;-ms-hyphens: none;hyphens: none;line-height: 1.5;word-spacing: normal;color: #000;text-shadow: 0 1px #fff;word-break: normal;word-wrap: normal;white-space: pre;-moz-tab-size: 4;tab-size: 4;}
-
-code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow: none;background: #b3d4fc;}
-
-code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow: none;background: #b3d4fc;}@media print{code[class*=language-],pre[class*=language-]{text-shadow: none;}}
-
-pre[class*=language-]{padding: 1em;margin: .5em 0;overflow: auto;}
-
-:not(pre)>code[class*=language-],pre[class*=language-]{background: 0 0 !important;border: 1px solid #ccc;}
-
-:not(pre)>code[class*=language-]{padding: .1em;border-radius: .3em;}
-
-.token.cdata,.token.comment,.token.doctype,.token.prolog{color: #708090;}
-
-.token.punctuation{color: #999;}
-
-.namespace{opacity: .7;}
-
-.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color: #905;}
-
-.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color: #690;}
-
-.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color: #a67f59;background: hsla(0,0%,100%,.5);}
-
-.token.atrule,.token.attr-value,.token.keyword{color: #07a;}
-
-.token.function{color: #dd4a68;}
-
-.token.important,.token.regex,.token.variable{color: #e90;}
-
-.token.bold,.token.important{font-weight: 700;}
-
-.token.italic{font-style: italic;}
-
-.token.entity{cursor: help;}
-
-:not([dir=rtl]) code[class*=language-],:not([dir=rtl]) pre[class*=language-]{text-align: left;direction: ltr;}
-
-[dir=rtl] code[class*=language-],[dir=rtl] pre[class*=language-]{text-align: right;direction: rtl;}
-
-.mce-content-body{overflow-wrap: break-word;word-wrap: break-word;}
-
-.mce-content-body .mce-visual-caret{position: absolute;background-color: #000;background-color: currentColor;}
-
-.mce-content-body .mce-visual-caret-hidden{display: none;}
-
-.mce-content-body [data-mce-caret]{position: absolute;top: 0;right: auto;left: -1000px;padding: 0;margin: 0;}
-
-.mce-content-body .mce-offscreen-selection{position: absolute;left: -9999999999px;max-width: 1000000px;}
-
-.mce-content-body [contentEditable=false]{cursor: default;}
-
-.mce-content-body [contentEditable=true]{cursor: text;}
-
-.tox-cursor-format-painter{cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default;}
-
-.mce-content-body figure.align-left{float: left;}
-
-.mce-content-body figure.align-right{float: right;}
-
-.mce-content-body figure.image.align-center{display: table;margin-right: auto;margin-left: auto;}
-
-.mce-preview-object{position: relative;display: inline-block;margin: 0 2px 0 2px;line-height: 0;border: 1px solid gray;}
-
-.mce-preview-object .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);}
-
-.mce-preview-object[data-mce-selected="2"] .mce-shim{display: none;}
-
-.mce-object{background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border: 1px dashed #aaa;}
-
-.mce-pagebreak{display: block;width: 100%;height: 5px;margin-top: 15px;cursor: default;border: 1px dashed #aaa;page-break-before: always;}@media print{.mce-pagebreak{border: 0;}}
-
-.tiny-pageembed .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);}
-
-.tiny-pageembed[data-mce-selected="2"] .mce-shim{display: none;}
-
-.tiny-pageembed{position: relative;display: inline-block;}
-
-.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{position: relative;display: block;width: 100%;padding: 0;overflow: hidden;}
-
-.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{display: block;content: "";}
-
-.tiny-pageembed--21by9::before{padding-top: 42.857143%;}
-
-.tiny-pageembed--16by9::before{padding-top: 56.25%;}
-
-.tiny-pageembed--4by3::before{padding-top: 75%;}
-
-.tiny-pageembed--1by1::before{padding-top: 100%;}
-
-.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{position: absolute;top: 0;left: 0;width: 100%;height: 100%;border: 0;}
-
-.mce-content-body div.mce-resizehandle{position: absolute;z-index: 10000;width: 10px;height: 10px;background-color: #4099ff;border-color: #4099ff;border-style: solid;border-width: 1px;box-sizing: border-box;}
-
-.mce-content-body div.mce-resizehandle:hover{background-color: #4099ff;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor: nwse-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor: nesw-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor: nwse-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor: nesw-resize;}
-
-.mce-content-body .mce-clonedresizable{position: absolute;z-index: 10000;outline: 1px dashed #000;opacity: .5;}
-
-.mce-content-body .mce-resize-helper{position: absolute;z-index: 10001;display: none;padding: 5px;margin: 5px 10px;font-family: sans-serif;font-size: 12px;line-height: 14px;color: #fff;white-space: nowrap;background: #555;background: rgba(0,0,0,.75);border: 1px;border-radius: 3px;}
-
-.mce-match-marker{color: #fff;background: #aaa;}
-
-.mce-match-marker-selected{color: #fff;background: #39f;}
-
-.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline: 3px solid #b4d7ff;}
-
-.mce-content-body hr[data-mce-selected]{outline: 3px solid #b4d7ff;outline-offset: 1px;}
-
-.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline: 3px solid #b4d7ff;}
-
-.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline: 3px solid #b4d7ff;}
-
-.mce-content-body [contentEditable=false][data-mce-selected]{cursor: not-allowed;outline: 3px solid #b4d7ff;}
-
-.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline: 0;}
-
-.mce-content-body [data-mce-selected=inline-boundary]{background-color: #b4d7ff;}
-
-.mce-content-body .mce-edit-focus{outline: 3px solid #b4d7ff;}
-
-.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color: #b4d7ff !important;}
-
-.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background: 0 0;}
-
-.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background: 0 0;}
-
-.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout: none;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}
-
-.mce-content-body img::-moz-selection{background: 0 0;}
-
-.mce-content-body img::selection{background: 0 0;}
-
-.ephox-snooker-resizer-bar{background-color: #b4d7ff;opacity: 0;}
-
-.ephox-snooker-resizer-cols{cursor: col-resize;}
-
-.ephox-snooker-resizer-rows{cursor: row-resize;}
-
-.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity: 1;}
-
-.mce-spellchecker-word{height: 2rem;cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.5'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;}
-
-.mce-spellchecker-grammar{cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23008800'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;}
-
-.mce-toc{border: 1px solid gray;}
-
-.mce-toc h2{margin: 4px;}
-
-.mce-toc li{list-style-type: none;}
-
-.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border: 1px dashed #bbb;}
-
-.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{padding-top: 10px;margin-left: 3px;background-repeat: no-repeat;border: 1px dashed #bbb;}
-
-.mce-visualblocks p{background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);}
-
-.mce-visualblocks h1{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);}
-
-.mce-visualblocks h2{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);}
-
-.mce-visualblocks h3{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);}
-
-.mce-visualblocks h4{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);}
-
-.mce-visualblocks h5{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);}
-
-.mce-visualblocks h6{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);}
-
-.mce-visualblocks div:not([data-mce-bogus]){background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);}
-
-.mce-visualblocks section{background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);}
-
-.mce-visualblocks article{background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);}
-
-.mce-visualblocks blockquote{background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);}
-
-.mce-visualblocks address{background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);}
-
-.mce-visualblocks pre{background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);}
-
-.mce-visualblocks figure{background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);}
-
-.mce-visualblocks figcaption{border: 1px dashed #bbb;}
-
-.mce-visualblocks hgroup{background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);}
-
-.mce-visualblocks aside{background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);}
-
-.mce-visualblocks ul{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);}
-
-.mce-visualblocks ol{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);}
-
-.mce-visualblocks dl{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);}
-
-.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left: 3px;}
-
-.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x: right;margin-right: 3px;}
-
-.mce-nbsp,.mce-shy{background: #aaa;}
-
-.mce-shy::after{content: '-';}
-
-.tox-toolbar-dock-fadeout{opacity: 0;visibility: hidden;}
-
-.tox-toolbar-dock-fadein{opacity: 1;visibility: visible;}
-
-.tox-toolbar-dock-transition{transition: visibility 0s linear .3s,opacity .3s ease;}
-
-.tox-toolbar-dock-transition.tox-toolbar-dock-fadein{transition-delay: 0s;}
diff --git a/public/resource/tinymce/skins/ui/oxide-dark/content.min.css b/public/resource/tinymce/skins/ui/oxide-dark/content.min.css
deleted file mode 100644
index 6e7165f..0000000
--- a/public/resource/tinymce/skins/ui/oxide-dark/content.min.css
+++ /dev/null
@@ -1,235 +0,0 @@
-/**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- */
-.mce-content-body .mce-item-anchor{display: inline-block;width: 8px !important;height: 12px !important;padding: 0 2px;cursor: default;background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;-webkit-user-select: all;-moz-user-select: all;-ms-user-select: all;user-select: all;-webkit-user-modify: read-only;-moz-user-modify: read-only;}
-
-.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset: 1px;}
-
-.tox-comments-visible .tox-comment{background-color: #fff0b7;}
-
-.tox-comments-visible .tox-comment--active{background-color: #ffe168;}
-
-.tox-checklist>li:not(.tox-checklist--hidden){margin: .25em 0;list-style: none;}
-
-.tox-checklist>li:not(.tox-checklist--hidden)::before{position: absolute;width: 1em;height: 1em;margin-top: .125em;margin-left: -1.5em;cursor: pointer;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size: 100%;content: '';}
-
-.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");}
-
-[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-right: -1.5em;margin-left: 0;}
-
-code[class*=language-],pre[class*=language-]{font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size: .875rem;-webkit-hyphens: none;-ms-hyphens: none;hyphens: none;line-height: 1.5;word-spacing: normal;color: #000;text-shadow: 0 1px #fff;word-break: normal;word-wrap: normal;white-space: pre;-moz-tab-size: 4;tab-size: 4;}
-
-code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow: none;background: #b3d4fc;}
-
-code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow: none;background: #b3d4fc;}@media print{code[class*=language-],pre[class*=language-]{text-shadow: none;}}
-
-pre[class*=language-]{padding: 1em;margin: .5em 0;overflow: auto;}
-
-:not(pre)>code[class*=language-],pre[class*=language-]{background: 0 0 !important;border: 1px solid #ccc;}
-
-:not(pre)>code[class*=language-]{padding: .1em;border-radius: .3em;}
-
-.token.cdata,.token.comment,.token.doctype,.token.prolog{color: #708090;}
-
-.token.punctuation{color: #999;}
-
-.namespace{opacity: .7;}
-
-.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color: #905;}
-
-.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color: #690;}
-
-.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color: #a67f59;background: hsla(0,0%,100%,.5);}
-
-.token.atrule,.token.attr-value,.token.keyword{color: #07a;}
-
-.token.function{color: #dd4a68;}
-
-.token.important,.token.regex,.token.variable{color: #e90;}
-
-.token.bold,.token.important{font-weight: 700;}
-
-.token.italic{font-style: italic;}
-
-.token.entity{cursor: help;}
-
-:not([dir=rtl]) code[class*=language-],:not([dir=rtl]) pre[class*=language-]{text-align: left;direction: ltr;}
-
-[dir=rtl] code[class*=language-],[dir=rtl] pre[class*=language-]{text-align: right;direction: rtl;}
-
-.mce-content-body{overflow-wrap: break-word;word-wrap: break-word;}
-
-.mce-content-body .mce-visual-caret{position: absolute;background-color: #000;background-color: currentColor;}
-
-.mce-content-body .mce-visual-caret-hidden{display: none;}
-
-.mce-content-body [data-mce-caret]{position: absolute;top: 0;right: auto;left: -1000px;padding: 0;margin: 0;}
-
-.mce-content-body .mce-offscreen-selection{position: absolute;left: -9999999999px;max-width: 1000000px;}
-
-.mce-content-body [contentEditable=false]{cursor: default;}
-
-.mce-content-body [contentEditable=true]{cursor: text;}
-
-.tox-cursor-format-painter{cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default;}
-
-.mce-content-body figure.align-left{float: left;}
-
-.mce-content-body figure.align-right{float: right;}
-
-.mce-content-body figure.image.align-center{display: table;margin-right: auto;margin-left: auto;}
-
-.mce-preview-object{position: relative;display: inline-block;margin: 0 2px 0 2px;line-height: 0;border: 1px solid gray;}
-
-.mce-preview-object .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);}
-
-.mce-preview-object[data-mce-selected="2"] .mce-shim{display: none;}
-
-.mce-object{background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border: 1px dashed #aaa;}
-
-.mce-pagebreak{display: block;width: 100%;height: 5px;margin-top: 15px;cursor: default;border: 1px dashed #aaa;page-break-before: always;}@media print{.mce-pagebreak{border: 0;}}
-
-.tiny-pageembed .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);}
-
-.tiny-pageembed[data-mce-selected="2"] .mce-shim{display: none;}
-
-.tiny-pageembed{position: relative;display: inline-block;}
-
-.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{position: relative;display: block;width: 100%;padding: 0;overflow: hidden;}
-
-.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{display: block;content: "";}
-
-.tiny-pageembed--21by9::before{padding-top: 42.857143%;}
-
-.tiny-pageembed--16by9::before{padding-top: 56.25%;}
-
-.tiny-pageembed--4by3::before{padding-top: 75%;}
-
-.tiny-pageembed--1by1::before{padding-top: 100%;}
-
-.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{position: absolute;top: 0;left: 0;width: 100%;height: 100%;border: 0;}
-
-.mce-content-body div.mce-resizehandle{position: absolute;z-index: 10000;width: 10px;height: 10px;background-color: #4099ff;border-color: #4099ff;border-style: solid;border-width: 1px;box-sizing: border-box;}
-
-.mce-content-body div.mce-resizehandle:hover{background-color: #4099ff;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor: nwse-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor: nesw-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor: nwse-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor: nesw-resize;}
-
-.mce-content-body .mce-clonedresizable{position: absolute;z-index: 10000;outline: 1px dashed #000;opacity: .5;}
-
-.mce-content-body .mce-resize-helper{position: absolute;z-index: 10001;display: none;padding: 5px;margin: 5px 10px;font-family: sans-serif;font-size: 12px;line-height: 14px;color: #fff;white-space: nowrap;background: #555;background: rgba(0,0,0,.75);border: 1px;border-radius: 3px;}
-
-.mce-match-marker{color: #fff;background: #aaa;}
-
-.mce-match-marker-selected{color: #fff;background: #39f;}
-
-.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline: 3px solid #b4d7ff;}
-
-.mce-content-body hr[data-mce-selected]{outline: 3px solid #b4d7ff;outline-offset: 1px;}
-
-.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline: 3px solid #b4d7ff;}
-
-.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline: 3px solid #b4d7ff;}
-
-.mce-content-body [contentEditable=false][data-mce-selected]{cursor: not-allowed;outline: 3px solid #b4d7ff;}
-
-.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline: 0;}
-
-.mce-content-body [data-mce-selected=inline-boundary]{background-color: #b4d7ff;}
-
-.mce-content-body .mce-edit-focus{outline: 3px solid #b4d7ff;}
-
-.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color: #b4d7ff !important;}
-
-.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background: 0 0;}
-
-.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background: 0 0;}
-
-.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout: none;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}
-
-.mce-content-body img::-moz-selection{background: 0 0;}
-
-.mce-content-body img::selection{background: 0 0;}
-
-.ephox-snooker-resizer-bar{background-color: #b4d7ff;opacity: 0;}
-
-.ephox-snooker-resizer-cols{cursor: col-resize;}
-
-.ephox-snooker-resizer-rows{cursor: row-resize;}
-
-.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity: 1;}
-
-.mce-spellchecker-word{height: 2rem;cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.5'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;}
-
-.mce-spellchecker-grammar{cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23008800'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;}
-
-.mce-toc{border: 1px solid gray;}
-
-.mce-toc h2{margin: 4px;}
-
-.mce-toc li{list-style-type: none;}
-
-.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border: 1px dashed #bbb;}
-
-.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{padding-top: 10px;margin-left: 3px;background-repeat: no-repeat;border: 1px dashed #bbb;}
-
-.mce-visualblocks p{background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);}
-
-.mce-visualblocks h1{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);}
-
-.mce-visualblocks h2{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);}
-
-.mce-visualblocks h3{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);}
-
-.mce-visualblocks h4{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);}
-
-.mce-visualblocks h5{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);}
-
-.mce-visualblocks h6{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);}
-
-.mce-visualblocks div:not([data-mce-bogus]){background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);}
-
-.mce-visualblocks section{background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);}
-
-.mce-visualblocks article{background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);}
-
-.mce-visualblocks blockquote{background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);}
-
-.mce-visualblocks address{background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);}
-
-.mce-visualblocks pre{background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);}
-
-.mce-visualblocks figure{background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);}
-
-.mce-visualblocks figcaption{border: 1px dashed #bbb;}
-
-.mce-visualblocks hgroup{background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);}
-
-.mce-visualblocks aside{background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);}
-
-.mce-visualblocks ul{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);}
-
-.mce-visualblocks ol{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);}
-
-.mce-visualblocks dl{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);}
-
-.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left: 3px;}
-
-.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x: right;margin-right: 3px;}
-
-.mce-nbsp,.mce-shy{background: #aaa;}
-
-.mce-shy::after{content: '-';}
-
-body{font-family: sans-serif;}
-
-table{border-collapse: collapse;}
diff --git a/public/resource/tinymce/skins/ui/oxide-dark/content.mobile.min.css b/public/resource/tinymce/skins/ui/oxide-dark/content.mobile.min.css
deleted file mode 100644
index c052252..0000000
--- a/public/resource/tinymce/skins/ui/oxide-dark/content.mobile.min.css
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- */
-.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{position: absolute;display: inline-block;background-color: green;opacity: .5;}
-
-body{-webkit-text-size-adjust: none;}
-
-body img{max-width: 96vw;}
-
-body table img{max-width: 95%;}
-
-body{font-family: sans-serif;}
-
-table{border-collapse: collapse;}
diff --git a/public/resource/tinymce/skins/ui/oxide-dark/skin.min.css b/public/resource/tinymce/skins/ui/oxide-dark/skin.min.css
deleted file mode 100644
index d8dc9b2..0000000
--- a/public/resource/tinymce/skins/ui/oxide-dark/skin.min.css
+++ /dev/null
@@ -1,875 +0,0 @@
-/**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- */
-.tox{font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 16px;font-style: normal;font-weight: 400;line-height: normal;color: #222f3e;text-decoration: none;text-shadow: none;text-transform: none;white-space: normal;vertical-align: initial;cursor: auto;box-sizing: content-box;-webkit-tap-highlight-color: transparent;}
-
-.tox :not(svg){font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;line-height: inherit;color: inherit;text-align: inherit;text-decoration: inherit;text-shadow: inherit;text-transform: inherit;white-space: inherit;vertical-align: inherit;cursor: inherit;box-sizing: inherit;direction: inherit;-webkit-tap-highlight-color: inherit;}
-
-.tox :not(svg){position: static;float: none;width: auto;height: auto;max-width: none;padding: 0;margin: 0;background: 0 0;border: 0;outline: 0;}
-
-.tox:not([dir=rtl]){text-align: left;direction: ltr;}
-
-.tox[dir=rtl]{text-align: right;direction: rtl;}
-
-.tox-tinymce{position: relative;display: flex;overflow: hidden;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;border: 1px solid #000;border-radius: 0;visibility: inherit !important;box-shadow: none;box-sizing: border-box;flex-direction: column;}
-
-.tox-editor-container{display: flex;flex: 1 1 auto;flex-direction: column;overflow: hidden;}
-
-.tox-editor-container>:first-child{border-top: none !important;}
-
-.tox-tinymce-aux{font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;}
-
-.tox-tinymce :focus,.tox-tinymce-aux :focus{outline: 0;}
-
-button::-moz-focus-inner{border: 0;}
-
-.tox-silver-sink{z-index: 1300;}
-
-.tox .tox-anchorbar{display: flex;flex: 0 0 auto;}
-
-.tox .tox-bar{display: flex;flex: 0 0 auto;}
-
-.tox .tox-button{display: inline-block;padding: 4px 16px;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 14px;font-weight: 700;line-height: 24px;letter-spacing: 1;color: #fff;text-align: center;text-decoration: none;text-transform: capitalize;white-space: nowrap;cursor: pointer;background-color: #207ab7;background-image: none;background-position: none;background-repeat: none;border-color: #207ab7;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;box-sizing: border-box;}
-
-.tox .tox-button[disabled]{color: rgba(255,255,255,.5);cursor: not-allowed;background-color: #207ab7;background-image: none;border-color: #207ab7;box-shadow: none;}
-
-.tox .tox-button:focus:not(:disabled){color: #fff;background-color: #1c6ca1;background-image: none;border-color: #1c6ca1;box-shadow: none;}
-
-.tox .tox-button:hover:not(:disabled){color: #fff;background-color: #1c6ca1;background-image: none;border-color: #1c6ca1;box-shadow: none;}
-
-.tox .tox-button:active:not(:disabled){color: #fff;background-color: #185d8c;background-image: none;border-color: #185d8c;box-shadow: none;}
-
-.tox .tox-button--secondary{padding: 4px 16px;color: #fff;text-decoration: none;text-transform: capitalize;background-color: #3d546f;background-image: none;background-position: none;background-repeat: none;border-color: #3d546f;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;}
-
-.tox .tox-button--secondary[disabled]{color: rgba(255,255,255,.5);background-color: #3d546f;background-image: none;border-color: #3d546f;box-shadow: none;}
-
-.tox .tox-button--secondary:focus:not(:disabled){color: #fff;background-color: #34485f;background-image: none;border-color: #34485f;box-shadow: none;}
-
-.tox .tox-button--secondary:hover:not(:disabled){color: #fff;background-color: #34485f;background-image: none;border-color: #34485f;box-shadow: none;}
-
-.tox .tox-button--secondary:active:not(:disabled){color: #fff;background-color: #2b3b4e;background-image: none;border-color: #2b3b4e;box-shadow: none;}
-
-.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding: 4px;}
-
-.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display: block;fill: currentColor;}
-
-.tox .tox-button-link{display: inline-block;padding: 0;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 16px;font-weight: 400;line-height: 1.3;white-space: nowrap;cursor: pointer;background: 0;border: none;box-sizing: border-box;}
-
-.tox .tox-button-link--sm{font-size: 14px;}
-
-.tox .tox-button--naked{color: #fff;background-color: transparent;border-color: transparent;box-shadow: unset;}
-
-.tox .tox-button--naked:hover:not(:disabled){color: #fff;background-color: #34485f;border-color: #34485f;box-shadow: none;}
-
-.tox .tox-button--naked:focus:not(:disabled){color: #fff;background-color: #34485f;border-color: #34485f;box-shadow: none;}
-
-.tox .tox-button--naked:active:not(:disabled){color: #fff;background-color: #2b3b4e;border-color: #2b3b4e;box-shadow: none;}
-
-.tox .tox-button--naked .tox-icon svg{fill: currentColor;}
-
-.tox .tox-button--naked.tox-button--icon{color: currentColor;}
-
-.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color: #fff;}
-
-.tox .tox-checkbox{display: flex;height: 36px;min-width: 36px;cursor: pointer;border-radius: 3px;align-items: center;}
-
-.tox .tox-checkbox__input{position: absolute;top: auto;left: -10000px;width: 1px;height: 1px;overflow: hidden;}
-
-.tox .tox-checkbox__icons{width: 24px;height: 24px;padding: calc(4px - 1px);border-radius: 3px;box-shadow: 0 0 0 2px transparent;box-sizing: content-box;}
-
-.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: block;fill: rgba(255,255,255,.2);}
-
-.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display: none;fill: #207ab7;}
-
-.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display: none;fill: #207ab7;}
-
-.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: none;}
-
-.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display: block;}
-
-.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: none;}
-
-.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display: block;}
-
-.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{padding: calc(4px - 1px);border-radius: 3px;box-shadow: inset 0 0 0 1px #207ab7;}
-
-.tox:not([dir=rtl]) .tox-checkbox__label{margin-left: 4px;}
-
-.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left: 4px;}
-
-.tox[dir=rtl] .tox-checkbox__label{margin-right: 4px;}
-
-.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right: 4px;}
-
-.tox .tox-collection--toolbar .tox-collection__group{display: flex;padding: 0;}
-
-.tox .tox-collection--grid .tox-collection__group{display: flex;max-height: 208px;padding: 0;overflow-x: hidden;overflow-y: auto;flex-wrap: wrap;}
-
-.tox .tox-collection--list .tox-collection__group{padding: 4px 0;border-color: #1a1a1a;border-style: solid;border-top-width: 1px;border-right-width: 0;border-bottom-width: 0;border-left-width: 0;}
-
-.tox .tox-collection--list .tox-collection__group:first-child{border-top-width: 0;}
-
-.tox .tox-collection__group-heading{padding: 4px 8px;margin-top: -4px;margin-bottom: 4px;font-size: 12px;font-style: normal;font-weight: 400;color: #fff;text-transform: none;cursor: default;background-color: #333;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;-webkit-touch-callout: none;}
-
-.tox .tox-collection__item{display: flex;color: #fff;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;align-items: center;-webkit-touch-callout: none;}
-
-.tox .tox-collection--list .tox-collection__item{padding: 4px 8px;}
-
-.tox .tox-collection--toolbar .tox-collection__item{padding: 4px;border-radius: 3px;}
-
-.tox .tox-collection--grid .tox-collection__item{padding: 4px;border-radius: 3px;}
-
-.tox .tox-collection--list .tox-collection__item--enabled{color: contrast(inherit,#222f3e,#fff);background-color: inherit;}
-
-.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #fff;background-color: #434e5b;}
-
-.tox .tox-collection--toolbar .tox-collection__item--enabled{color: #fff;background-color: #6f7882;}
-
-.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #fff;background-color: #434e5b;}
-
-.tox .tox-collection--grid .tox-collection__item--enabled{color: #fff;background-color: #6f7882;}
-
-.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #fff;background-color: #434e5b;}
-
-.tox .tox-collection__item--state-disabled{color: rgba(255,255,255,.5);cursor: default;background-color: transparent;}
-
-.tox .tox-collection__item-icon{display: flex;width: 24px;height: 24px;align-items: center;justify-content: center;}
-
-.tox .tox-collection__item-icon svg{fill: currentColor;}
-
-.tox .tox-collection--toolbar-lg .tox-collection__item-icon{width: 48px;height: 48px;}
-
-.tox .tox-collection__item[role=menuitemcheckbox]:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display: none;}
-
-.tox .tox-collection__item-label{display: inline-block;font-size: 14px;font-style: normal;font-weight: 400;line-height: 24px;color: currentColor;text-transform: none;word-break: break-all;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-collection__item-accessory{display: inline-block;height: 24px;font-size: 14px;line-height: 24px;color: rgba(255,255,255,.5);text-transform: normal;}
-
-.tox .tox-collection__item-caret{align-items: center;display: flex;min-height: 24px;}
-
-.tox .tox-collection__item-caret::after{min-height: inherit;font-size: 0;content: '';}
-
-.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left: 8px;}
-
-.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item-label:first-child{margin-left: 4px;}
-
-.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left: 16px;text-align: right;}
-
-.tox:not([dir=rtl]) .tox-collection__item-caret{margin-left: 16px;}
-
-.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right: 8px;}
-
-.tox[dir=rtl] .tox-collection--list .tox-collection__item-label:first-child{margin-right: 4px;}
-
-.tox[dir=rtl] .tox-collection__item-icon-rtl .tox-collection__item-icon svg{transform: rotateY(180deg);}
-
-.tox[dir=rtl] .tox-collection__item-accessory{margin-right: 16px;text-align: left;}
-
-.tox[dir=rtl] .tox-collection__item-caret{margin-right: 16px;transform: rotateY(180deg);}
-
-.tox .tox-color-picker-container{display: flex;flex-direction: row;height: 225px;margin: 0;}
-
-.tox .tox-sv-palette{display: flex;height: 100%;box-sizing: border-box;}
-
-.tox .tox-sv-palette-spectrum{height: 100%;}
-
-.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width: 225px;}
-
-.tox .tox-sv-palette-thumb{position: absolute;width: 12px;height: 12px;background: 0 0;border: 1px solid #000;border-radius: 50%;box-sizing: content-box;}
-
-.tox .tox-sv-palette-inner-thumb{position: absolute;width: 10px;height: 10px;border: 1px solid #fff;border-radius: 50%;}
-
-.tox .tox-hue-slider{width: 25px;height: 100%;box-sizing: border-box;}
-
-.tox .tox-hue-slider-spectrum{width: 100%;height: 100%;background: linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);}
-
-.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width: 20px;}
-
-.tox .tox-hue-slider-thumb{width: 100%;height: 4px;background: #fff;border: 1px solid #000;box-sizing: content-box;}
-
-.tox .tox-rgb-form{display: flex;flex-direction: column;justify-content: space-between;}
-
-.tox .tox-rgb-form div{display: flex;width: inherit;margin-bottom: 5px;align-items: center;justify-content: space-between;}
-
-.tox .tox-rgb-form input{width: 6em;}
-
-.tox .tox-rgb-form input.tox-invalid{border: 1px solid red !important;}
-
-.tox .tox-rgb-form .tox-rgba-preview{margin-bottom: 0;border: 1px solid #000;flex-grow: 2;}
-
-.tox:not([dir=rtl]) .tox-sv-palette{margin-right: 15px;}
-
-.tox:not([dir=rtl]) .tox-hue-slider{margin-right: 15px;}
-
-.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left: -1px;}
-
-.tox:not([dir=rtl]) .tox-rgb-form label{margin-right: .5em;}
-
-.tox[dir=rtl] .tox-sv-palette{margin-left: 15px;}
-
-.tox[dir=rtl] .tox-hue-slider{margin-left: 15px;}
-
-.tox[dir=rtl] .tox-hue-slider-thumb{margin-right: -1px;}
-
-.tox[dir=rtl] .tox-rgb-form label{margin-left: .5em;}
-
-.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin: 2px 0 3px 4px;}
-
-.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{margin: -4px 0;border: 0;}
-
-.tox .tox-swatches__row{display: flex;}
-
-.tox .tox-swatch{width: 30px;height: 30px;transition: transform .15s,box-shadow .15s;}
-
-.tox .tox-swatch:focus,.tox .tox-swatch:hover{transform: scale(.8);box-shadow: 0 0 0 1px rgba(127,127,127,.3) inset;}
-
-.tox .tox-swatch--remove{align-items: center;display: flex;justify-content: center;}
-
-.tox .tox-swatch--remove svg path{stroke: #e74c3c;}
-
-.tox .tox-swatches__picker-btn{display: flex;width: 30px;height: 30px;padding: 0;cursor: pointer;background-color: transparent;border: 0;outline: 0;align-items: center;justify-content: center;}
-
-.tox .tox-swatches__picker-btn svg{width: 24px;height: 24px;}
-
-.tox .tox-swatches__picker-btn:hover{background: #434e5b;}
-
-.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left: auto;}
-
-.tox[dir=rtl] .tox-swatches__picker-btn{margin-right: auto;}
-
-.tox .tox-comment-thread{position: relative;background: #2b3b4e;}
-
-.tox .tox-comment-thread>:not(:first-child){margin-top: 8px;}
-
-.tox .tox-comment{position: relative;padding: 8px 8px 16px 8px;background: #2b3b4e;border: 1px solid #000;border-radius: 3px;box-shadow: 0 4px 8px 0 rgba(34,47,62,.1);}
-
-.tox .tox-comment__header{display: flex;color: #fff;align-items: center;justify-content: space-between;}
-
-.tox .tox-comment__date{font-size: 12px;color: rgba(255,255,255,.5);}
-
-.tox .tox-comment__body{position: relative;margin-top: 8px;font-size: 14px;font-style: normal;font-weight: 400;line-height: 1.3;color: #fff;text-transform: initial;}
-
-.tox .tox-comment__body textarea{width: 100%;white-space: normal;resize: none;}
-
-.tox .tox-comment__expander{padding-top: 8px;}
-
-.tox .tox-comment__expander p{font-size: 14px;font-style: normal;color: rgba(255,255,255,.5);}
-
-.tox .tox-comment__body p{margin: 0;}
-
-.tox .tox-comment__buttonspacing{padding-top: 16px;text-align: center;}
-
-.tox .tox-comment-thread__overlay::after{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 5;display: flex;background: #2b3b4e;content: "";opacity: .9;}
-
-.tox .tox-comment__reply{display: flex;flex-shrink: 0;flex-wrap: wrap;justify-content: flex-end;margin-top: 8px;}
-
-.tox .tox-comment__reply>:first-child{width: 100%;margin-bottom: 8px;}
-
-.tox .tox-comment__edit{display: flex;flex-wrap: wrap;justify-content: flex-end;margin-top: 16px;}
-
-.tox .tox-comment__gradient::after{position: absolute;bottom: 0;display: block;width: 100%;height: 5em;margin-top: -40px;background: linear-gradient(rgba(43,59,78,0),#2b3b4e);content: "";}
-
-.tox .tox-comment__overlay{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 5;display: flex;text-align: center;background: #2b3b4e;opacity: .9;flex-direction: column;flex-grow: 1;}
-
-.tox .tox-comment__loading-text{position: relative;display: flex;color: #fff;align-items: center;flex-direction: column;}
-
-.tox .tox-comment__loading-text>div{padding-bottom: 16px;}
-
-.tox .tox-comment__overlaytext{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 10;padding: 1em;font-size: 14px;flex-direction: column;}
-
-.tox .tox-comment__overlaytext p{color: #fff;text-align: center;background-color: #2b3b4e;box-shadow: 0 0 8px 8px #2b3b4e;}
-
-.tox .tox-comment__overlaytext div:nth-of-type(2){font-size: .8em;}
-
-.tox .tox-comment__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1103;display: flex;background-color: #2b3b4e;align-items: center;justify-content: center;}
-
-.tox .tox-comment__scroll{display: flex;flex-direction: column;flex-shrink: 1;overflow: auto;}
-
-.tox .tox-conversations{margin: 8px;}
-
-.tox:not([dir=rtl]) .tox-comment__edit{margin-left: 8px;}
-
-.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left: 8px;}
-
-.tox[dir=rtl] .tox-comment__edit{margin-right: 8px;}
-
-.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right: 8px;}
-
-.tox .tox-user{align-items: center;display: flex;}
-
-.tox .tox-user__avatar svg{fill: rgba(255,255,255,.5);}
-
-.tox .tox-user__name{font-size: 12px;font-style: normal;font-weight: 700;color: rgba(255,255,255,.5);text-transform: uppercase;}
-
-.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right: 8px;}
-
-.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left: 8px;}
-
-.tox[dir=rtl] .tox-user__avatar svg{margin-left: 8px;}
-
-.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right: 8px;}
-
-.tox .tox-dialog-wrap{position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 1100;display: flex;align-items: center;justify-content: center;}
-
-.tox .tox-dialog-wrap__backdrop{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1101;background-color: rgba(34,47,62,.75);}
-
-.tox .tox-dialog{position: relative;z-index: 1102;display: flex;width: 95vw;max-width: 480px;max-height: 100%;overflow: hidden;background-color: #2b3b4e;border-color: #000;border-style: solid;border-width: 1px;border-radius: 3px;box-shadow: 0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);flex-direction: column;}
-
-.tox .tox-dialog__header{position: relative;display: flex;padding: 8px 16px 0 16px;margin-bottom: 16px;font-size: 16px;color: #fff;background-color: #2b3b4e;border-bottom: none;align-items: center;justify-content: space-between;}
-
-.tox .tox-dialog__header .tox-button{z-index: 1;}
-
-.tox .tox-dialog__draghandle{position: absolute;top: 0;left: 0;width: 100%;height: 100%;cursor: grab;}
-
-.tox .tox-dialog__draghandle:active{cursor: grabbing;}
-
-.tox .tox-dialog__dismiss{margin-left: auto;}
-
-.tox .tox-dialog__title{margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 20px;font-style: normal;font-weight: 400;line-height: 1.3;text-transform: normal;}
-
-.tox .tox-dialog__body{display: flex;min-width: 0;padding: 0 16px;font-size: 16px;font-style: normal;font-weight: 400;line-height: 1.3;color: #fff;text-align: left;text-transform: normal;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-dialog__body-nav{align-items: flex-start;display: flex;flex-direction: column;}
-
-.tox .tox-dialog__body-nav-item{display: inline-block;margin-bottom: 8px;font-size: 14px;line-height: 1.3;color: rgba(255,255,255,.5);text-decoration: none;border-bottom: 2px solid transparent;}
-
-.tox .tox-dialog__body-nav-item--active{color: #207ab7;border-bottom: 2px solid #207ab7;}
-
-.tox .tox-dialog__body-content{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;max-height: 650px;overflow: auto;}
-
-.tox .tox-dialog__body-content>*{margin-top: 16px;margin-bottom: 0;}
-
-.tox .tox-dialog__body-content>:first-child{margin-top: 0;}
-
-.tox .tox-dialog__body-content>:last-child{margin-bottom: 0;}
-
-.tox .tox-dialog__body-content>:only-child{margin-top: 0;margin-bottom: 0;}
-
-.tox .tox-dialog--width-lg{height: 650px;max-width: 1200px;}
-
-.tox .tox-dialog--width-md{max-width: 800px;}
-
-.tox .tox-dialog--width-md .tox-dialog__body-content{overflow: auto;}
-
-.tox .tox-dialog__body-content--centered{text-align: center;}
-
-.tox .tox-dialog__body-content--spacious{margin-bottom: 16px;}
-
-.tox .tox-dialog__footer{display: flex;padding: 8px 16px;margin-top: 16px;background-color: #2b3b4e;border-top: 1px solid #000;align-items: center;justify-content: space-between;}
-
-.tox .tox-dialog__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1103;display: flex;background-color: rgba(34,47,62,.75);align-items: center;justify-content: center;}
-
-.tox .tox-dialog__table{width: 100%;border-collapse: collapse;}
-
-.tox .tox-dialog__table thead th{padding-bottom: 8px;font-weight: 700;}
-
-.tox .tox-dialog__table tbody tr{border-bottom: 1px solid #000;}
-
-.tox .tox-dialog__table tbody tr:last-child{border-bottom: none;}
-
-.tox .tox-dialog__table td{padding-top: 8px;padding-bottom: 8px;}
-
-.tox .tox-dialog__popups{position: absolute;z-index: 1100;width: 100%;}
-
-.tox .tox-dialog__body-iframe{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;}
-
-.tox .tox-dialog__body-iframe .tox-navobj{display: flex;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex: 1;-ms-flex-preferred-size: auto;height: 100%;}
-
-body.tox-dialog__disable-scroll{overflow: hidden;}
-
-.tox.tox-platform-ie .tox-dialog-wrap{position: -ms-device-fixed;}
-
-.tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right: 32px;}
-
-.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left: 8px;}
-
-.tox[dir=rtl] .tox-dialog__body{text-align: right;}
-
-.tox[dir=rtl] .tox-dialog__body-nav{margin-left: 32px;}
-
-.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right: 8px;}
-
-.tox .tox-dropzone-container{display: flex;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-dropzone{display: flex;min-height: 100px;padding: 10px;background: #fff;border: 2px dashed #000;box-sizing: border-box;align-items: center;flex-direction: column;flex-grow: 1;justify-content: center;}
-
-.tox .tox-dropzone p{margin: 0 0 16px 0;color: rgba(255,255,255,.5);}
-
-.tox .tox-edit-area{position: relative;display: flex;overflow: hidden;border-top: 1px solid #000;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-edit-area__iframe{position: absolute;width: 100%;height: 100%;background-color: #fff;border: 0;box-sizing: border-box;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox.tox-inline-edit-area{border: 1px dotted #000;}
-
-.tox .tox-control-wrap{flex: 1;position: relative;}
-
-.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display: none;}
-
-.tox .tox-control-wrap svg{display: block;}
-
-.tox .tox-control-wrap__status-icon-wrap{position: absolute;top: 50%;transform: translateY(-50%);}
-
-.tox .tox-control-wrap__status-icon-invalid svg{fill: #c00;}
-
-.tox .tox-control-wrap__status-icon-unknown svg{fill: orange;}
-
-.tox .tox-control-wrap__status-icon-valid svg{fill: green;}
-
-.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right: 32px;}
-
-.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right: 4px;}
-
-.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left: 32px;}
-
-.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left: 4px;}
-
-.tox .tox-autocompleter{max-width: 25em;}
-
-.tox .tox-autocompleter .tox-menu{max-width: 25em;}
-
-.tox .tox-color-input{display: flex;}
-
-.tox .tox-color-input .tox-textfield{display: flex;border-radius: 3px 0 0 3px;}
-
-.tox .tox-color-input span{display: flex;width: 35px;cursor: pointer;border-color: rgba(34,47,62,.2);border-style: solid;border-width: 1px 1px 1px 0;border-radius: 0 3px 3px 0;box-shadow: none;box-sizing: border-box;}
-
-.tox .tox-color-input span:focus{border-color: #207ab7;}
-
-.tox[dir=rtl] .tox-color-input .tox-textfield{border-radius: 0 3px 3px 0;}
-
-.tox[dir=rtl] .tox-color-input span{border-width: 1px 0 1px 1px;border-radius: 3px 0 0 3px;}
-
-.tox .tox-label,.tox .tox-toolbar-label{display: block;padding: 0 8px 0 0;font-size: 14px;font-style: normal;font-weight: 400;line-height: 1.3;color: rgba(255,255,255,.5);text-transform: normal;white-space: nowrap;}
-
-.tox .tox-toolbar-label{padding: 0 8px;}
-
-.tox[dir=rtl] .tox-label{padding: 0 0 0 8px;}
-
-.tox .tox-form{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;}
-
-.tox .tox-form__group{margin-bottom: 4px;box-sizing: border-box;}
-
-.tox .tox-form__group--error{color: #c00;}
-
-.tox .tox-form__group--collection{display: flex;}
-
-.tox .tox-form__grid{display: flex;flex-direction: row;flex-wrap: wrap;justify-content: space-between;}
-
-.tox .tox-form__grid--2col>.tox-form__group{width: calc(50% - (8px / 2));}
-
-.tox .tox-form__grid--3col>.tox-form__group{width: calc(100% / 3 - (8px / 2));}
-
-.tox .tox-form__grid--4col>.tox-form__group{width: calc(25% - (8px / 2));}
-
-.tox .tox-form__controls-h-stack{align-items: center;display: flex;}
-
-.tox .tox-form__group--inline{align-items: center;display: flex;}
-
-.tox .tox-form__group--stretched{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;}
-
-.tox .tox-form__group--stretched .tox-textarea{flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-form__group--stretched .tox-navobj{display: flex;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex: 1;-ms-flex-preferred-size: auto;height: 100%;}
-
-.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left: 4px;}
-
-.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right: 4px;}
-
-.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display: none;}
-
-.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield,.tox:not([dir=rtl]) .tox-selectfield select,.tox[dir=rtl] .tox-selectfield select{width: 100%;padding: 5px 4.75px;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 16px;line-height: 24px;color: #fff;background-color: #2b3b4e;border-color: #000;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;box-sizing: border-box;resize: none;-webkit-appearance: none;-moz-appearance: none;appearance: none;}
-
-.tox .tox-selectfield select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{border-color: #207ab7;outline: 0;box-shadow: none;}
-
-.tox .tox-toolbar-textfield{max-width: 250px;margin-top: 2px;margin-bottom: 3px;border-width: 0;}
-
-.tox .tox-naked-btn{display: block;padding: 0;margin: 0;color: #207ab7;cursor: pointer;background-color: transparent;border: 0;border-color: transparent;box-shadow: unset;}
-
-.tox .tox-naked-btn svg{display: block;fill: #fff;}
-
-.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left: 4px;}
-
-.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right: 4px;}
-
-.tox .tox-selectfield{position: relative;cursor: pointer;}
-
-.tox .tox-selectfield select::-ms-expand{display: none;}
-
-.tox .tox-selectfield svg{position: absolute;top: 50%;pointer-events: none;transform: translateY(-50%);}
-
-.tox:not([dir=rtl]) .tox-selectfield select{padding-right: 24px;}
-
-.tox:not([dir=rtl]) .tox-selectfield svg{right: 8px;}
-
-.tox[dir=rtl] .tox-selectfield select{padding-left: 24px;}
-
-.tox[dir=rtl] .tox-selectfield svg{left: 8px;}
-
-.tox .tox-textarea{white-space: pre-wrap;-webkit-appearance: textarea;-moz-appearance: textarea;appearance: textarea;}
-
-.tox-fullscreen{position: fixed;top: 0;left: 0;width: 100%;height: 100%;padding: 0;margin: 0;overflow: hidden;border: 0;}
-
-.tox-fullscreen .tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display: none;}
-
-.tox-fullscreen .tox.tox-tinymce.tox-fullscreen{z-index: 1200;}
-
-.tox-fullscreen .tox.tox-tinymce-aux{z-index: 1201;}
-
-.tox .tox-image-tools{width: 100%;}
-
-.tox .tox-image-tools__toolbar{align-items: center;display: flex;justify-content: center;}
-
-.tox .tox-image-tools__image{position: relative;width: 100%;height: 380px;overflow: auto;background-color: #666;}
-
-.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top: 8px;}
-
-.tox .tox-image-tools__image-bg{background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);}
-
-.tox .tox-image-tools__toolbar>.tox-spacer{flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-croprect-block{position: absolute;background: #000;opacity: .5;zoom: 1;}
-
-.tox .tox-croprect-handle{position: absolute;top: 0;left: 0;width: 20px;height: 20px;border: 2px solid #fff;}
-
-.tox .tox-croprect-handle-move{position: absolute;cursor: move;border: 0;}
-
-.tox .tox-croprect-handle-nw{top: 100px;left: 100px;margin: -2px 0 0 -2px;cursor: nw-resize;border-width: 2px 0 0 2px;}
-
-.tox .tox-croprect-handle-ne{top: 100px;left: 200px;margin: -2px 0 0 -20px;cursor: ne-resize;border-width: 2px 2px 0 0;}
-
-.tox .tox-croprect-handle-sw{top: 200px;left: 100px;margin: -20px 2px 0 -2px;cursor: sw-resize;border-width: 0 0 2px 2px;}
-
-.tox .tox-croprect-handle-se{top: 200px;left: 200px;margin: -20px 0 0 -20px;cursor: se-resize;border-width: 0 2px 2px 0;}
-
-.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left: 8px;}
-
-.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-left: 32px;}
-
-.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left: 32px;}
-
-.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right: 8px;}
-
-.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-right: 32px;}
-
-.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right: 32px;}
-
-.tox .tox-insert-table-picker{display: flex;flex-wrap: wrap;width: 169px;}
-
-.tox .tox-insert-table-picker>div{width: 16px;height: 16px;border-color: #070a0d;border-style: solid;border-width: 0 1px 1px 0;box-sizing: content-box;}
-
-.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin: -4px 0;}
-
-.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color: rgba(32,122,183,.5);border-color: rgba(32,122,183,.5);}
-
-.tox .tox-insert-table-picker__label{display: block;width: 100%;padding: 4px;font-size: 14px;color: #fff;text-align: center;}
-
-.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right: 0;}
-
-.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right: 0;}
-
-.tox .tox-menu{z-index: 1;display: inline-block;overflow: hidden;vertical-align: top;background-color: #2b3b4e;border: 1px solid #000;border-radius: 3px;box-shadow: 0 4px 8px 0 rgba(34,47,62,.1);}
-
-.tox .tox-menu.tox-collection.tox-collection--list{padding: 0;}
-
-.tox .tox-menu.tox-collection.tox-collection--toolbar{padding: 4px;}
-
-.tox .tox-menu.tox-collection.tox-collection--grid{padding: 4px;}
-
-.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin: 0;}
-
-.tox .tox-menubar{display: flex;padding: 0 4px;margin-bottom: -1px;background: url("data:image/svg+xml;charset=utf8,%3Csvg height='43px' viewBox='0 0 40 43px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='42px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color: #222f3e;flex: 0 0 auto;flex-shrink: 0;flex-wrap: wrap;}
-
-.tox .tox-mbtn{display: flex;width: auto;height: 34px;padding: 0 4px;margin: 2px 0 3px 0;overflow: hidden;font-size: 14px;font-style: normal;font-weight: 400;color: #fff;text-transform: normal;background: 0 0;border: 0;border-radius: 3px;outline: 0;box-shadow: none;align-items: center;flex: 0 0 auto;justify-content: center;}
-
-.tox .tox-mbtn[disabled]{color: rgba(255,255,255,.5);cursor: not-allowed;background-color: none;border-color: none;box-shadow: none;}
-
-.tox .tox-mbtn:hover:not(:disabled){color: #fff;background: #434e5b;box-shadow: none;}
-
-.tox .tox-mbtn:focus:not(:disabled){color: #fff;background: #434e5b;box-shadow: none;}
-
-.tox .tox-mbtn--active{color: #fff;background: #6f7882;box-shadow: none;}
-
-.tox .tox-mbtn__select-label{margin: 0 4px;font-weight: 400;cursor: default;}
-
-.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor: not-allowed;}
-
-.tox .tox-mbtn__select-chevron{display: flex;display: none;width: 16px;align-items: center;justify-content: center;}
-
-.tox .tox-notification{display: grid;padding: 5px;margin-top: 5px;background-color: #fffaea;border-color: #ffe89d;border-style: solid;border-width: 1px;opacity: 0;box-sizing: border-box;transition: transform .1s ease-in,opacity 150ms ease-in;grid-template-columns: minmax(40px,1fr) auto minmax(40px,1fr);}
-
-.tox .tox-notification--in{opacity: 1;}
-
-.tox .tox-notification--success{background-color: #dff0d8;border-color: #d6e9c6;}
-
-.tox .tox-notification--error{background-color: #f2dede;border-color: #ebccd1;}
-
-.tox .tox-notification--warn{background-color: #fcf8e3;border-color: #faebcc;}
-
-.tox .tox-notification--info{background-color: #d9edf7;border-color: #779ecb;}
-
-.tox .tox-notification__body{font-size: 14px;color: #fff;text-align: center;word-break: break-all;word-break: break-word;white-space: normal;align-self: center;grid-column-end: 3;-ms-grid-column-span: 1;grid-column-start: 2;grid-row-end: 2;grid-row-start: 1;}
-
-.tox .tox-notification__body>*{margin: 0;}
-
-.tox .tox-notification__body>*+*{margin-top: 1rem;}
-
-.tox .tox-notification__icon{align-self: center;-ms-grid-column-align: end;grid-column-end: 2;-ms-grid-column-span: 1;grid-column-start: 1;grid-row-end: 2;grid-row-start: 1;justify-self: end;}
-
-.tox .tox-notification__icon svg{display: block;}
-
-.tox .tox-notification__dismiss{align-self: start;-ms-grid-column-align: end;grid-column-end: 4;-ms-grid-column-span: 1;grid-column-start: 3;grid-row-end: 2;grid-row-start: 1;justify-self: end;}
-
-.tox .tox-notification .tox-progress-bar{-ms-grid-column-align: center;grid-column-end: 4;-ms-grid-column-span: 3;grid-column-start: 1;grid-row-end: 3;-ms-grid-row-span: 1;grid-row-start: 2;justify-self: center;}
-
-.tox .tox-pop{position: relative;display: inline-block;}
-
-.tox .tox-pop--resizing{transition: width .1s ease;}
-
-.tox .tox-pop--resizing .tox-toolbar{flex-wrap: nowrap;}
-
-.tox .tox-pop__dialog{min-width: 0;overflow: hidden;background-color: #222f3e;border: 1px solid #000;border-radius: 3px;box-shadow: 0 1px 3px rgba(0,0,0,.15);}
-
-.tox .tox-pop__dialog>:not(.tox-toolbar){margin: 4px 4px 4px 8px;}
-
-.tox .tox-pop__dialog .tox-toolbar{background-color: transparent;}
-
-.tox .tox-pop::after,.tox .tox-pop::before{position: absolute;display: block;width: 0;height: 0;border-style: solid;content: '';}
-
-.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{top: 100%;left: 50%;}
-
-.tox .tox-pop.tox-pop--bottom::after{margin-top: -1px;margin-left: -8px;border-color: #222f3e transparent transparent transparent;border-width: 8px;}
-
-.tox .tox-pop.tox-pop--bottom::before{margin-left: -9px;border-color: #000 transparent transparent transparent;border-width: 9px;}
-
-.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{top: 0;left: 50%;transform: translateY(-100%);}
-
-.tox .tox-pop.tox-pop--top::after{margin-top: 1px;margin-left: -8px;border-color: transparent transparent #222f3e transparent;border-width: 8px;}
-
-.tox .tox-pop.tox-pop--top::before{margin-left: -9px;border-color: transparent transparent #000 transparent;border-width: 9px;}
-
-.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{top: calc(50% - 1px);left: 0;transform: translateY(-50%);}
-
-.tox .tox-pop.tox-pop--left::after{margin-left: -15px;border-color: transparent #222f3e transparent transparent;border-width: 8px;}
-
-.tox .tox-pop.tox-pop--left::before{margin-left: -19px;border-color: transparent #000 transparent transparent;border-width: 10px;}
-
-.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{top: calc(50% + 1px);left: 100%;transform: translateY(-50%);}
-
-.tox .tox-pop.tox-pop--right::after{margin-left: -1px;border-color: transparent transparent transparent #222f3e;border-width: 8px;}
-
-.tox .tox-pop.tox-pop--right::before{margin-left: -1px;border-color: transparent transparent transparent #000;border-width: 10px;}
-
-.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left: 20px;}
-
-.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left: calc(100% - 20px);}
-
-.tox .tox-sidebar-wrap{display: flex;flex-direction: row;flex-grow: 1;min-height: 0;}
-
-.tox .tox-sidebar{display: flex;flex-direction: row;justify-content: flex-end;}
-
-.tox .tox-sidebar__slider{display: flex;overflow: hidden;}
-
-.tox .tox-sidebar__pane-container{display: flex;}
-
-.tox .tox-sidebar__pane{display: flex;}
-
-.tox .tox-sidebar--sliding-closed{opacity: 0;}
-
-.tox .tox-sidebar--sliding-open{opacity: 1;}
-
-.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition: width .5s ease,opacity .5s ease;}
-
-.tox .tox-slider{position: relative;display: flex;height: 24px;align-items: center;flex: 1;-ms-flex-preferred-size: auto;justify-content: center;}
-
-.tox .tox-slider__rail{width: 100%;height: 10px;min-width: 120px;background-color: transparent;border: 1px solid #000;border-radius: 3px;}
-
-.tox .tox-slider__handle{position: absolute;top: 50%;left: 50%;width: 14px;height: 24px;background-color: #207ab7;border: 2px solid #185d8c;border-radius: 3px;transform: translateX(-50%) translateY(-50%);box-shadow: none;}
-
-.tox .tox-source-code{overflow: auto;}
-
-.tox .tox-spinner{display: flex;}
-
-.tox .tox-spinner>div{width: 8px;height: 8px;background-color: rgba(255,255,255,.5);border-radius: 100%;animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;}
-
-.tox .tox-spinner>div:nth-child(1){animation-delay: -.32s;}
-
-.tox .tox-spinner>div:nth-child(2){animation-delay: -.16s;}@keyframes tam-bouncing-dots{0%,100%,80%{transform: scale(0);}
-
-40%{transform: scale(1);}}
-
-.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left: 4px;}
-
-.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right: 4px;}
-
-.tox .tox-statusbar{position: relative;display: flex;height: 18px;padding: 0 8px;overflow: hidden;font-size: 12px;color: rgba(255,255,255,.5);text-transform: uppercase;background-color: #222f3e;border-top: 1px solid #000;align-items: center;flex: 0 0 auto;}
-
-.tox .tox-statusbar a{color: rgba(255,255,255,.5);text-decoration: none;}
-
-.tox .tox-statusbar a:hover{text-decoration: underline;}
-
-.tox .tox-statusbar__text-container{display: flex;flex: 1 1 auto;justify-content: flex-end;overflow: hidden;}
-
-.tox .tox-statusbar__path{display: flex;flex: 1 1 auto;margin-right: auto;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
-
-.tox .tox-statusbar__path>*{display: inline;white-space: nowrap;}
-
-.tox .tox-statusbar__wordcount{flex: 0 0 auto;margin-left: 1ch;}
-
-.tox .tox-statusbar__resize-handle{display: flex;padding-left: 1ch;margin-right: -8px;margin-left: auto;cursor: nwse-resize;align-items: flex-end;align-self: stretch;flex: 0 0 auto;justify-content: flex-end;}
-
-.tox .tox-statusbar__resize-handle svg{display: block;fill: rgba(255,255,255,.5);}
-
-.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right: 4px;}
-
-.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left: 1ch;}
-
-.tox[dir=rtl] .tox-statusbar{flex-direction: row-reverse;}
-
-.tox[dir=rtl] .tox-statusbar__path>*{margin-left: 4px;}
-
-.tox .tox-throbber{z-index: 1400;}
-
-.tox .tox-throbber__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;display: flex;background-color: rgba(34,47,62,.6);align-items: center;justify-content: center;}
-
-.tox .tox-tbtn{display: flex;width: 34px;height: 34px;padding: 0;margin: 2px 0 3px 0;overflow: hidden;font-size: 14px;font-style: normal;font-weight: 400;color: #fff;text-transform: normal;background: 0 0;border: 0;border-radius: 3px;outline: 0;box-shadow: none;align-items: center;flex: 0 0 auto;justify-content: center;}
-
-.tox .tox-tbtn svg{display: block;fill: #fff;}
-
-.tox .tox-tbtn.tox-tbtn-more{width: inherit;padding-right: 5px;padding-left: 5px;}
-
-.tox .tox-tbtn--enabled{color: #fff;background: #6f7882;box-shadow: none;}
-
-.tox .tox-tbtn--enabled>*{transform: none;}
-
-.tox .tox-tbtn--enabled svg{fill: #fff;}
-
-.tox .tox-tbtn:hover{color: #fff;background: #434e5b;box-shadow: none;}
-
-.tox .tox-tbtn:hover svg{fill: #fff;}
-
-.tox .tox-tbtn:focus{color: #fff;background: #434e5b;box-shadow: none;}
-
-.tox .tox-tbtn:focus svg{fill: #fff;}
-
-.tox .tox-tbtn:active{color: #fff;background: #6f7882;box-shadow: none;}
-
-.tox .tox-tbtn:active svg{fill: #fff;}
-
-.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{color: rgba(255,255,255,.5);cursor: not-allowed;background: 0 0;box-shadow: none;}
-
-.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill: rgba(255,255,255,.5);}
-
-.tox .tox-tbtn:active>*{transform: none;}
-
-.tox .tox-tbtn--md{width: 51px;height: 51px;}
-
-.tox .tox-tbtn--lg{width: 68px;height: 68px;flex-direction: column;}
-
-.tox .tox-tbtn--return{width: 16px;height: unset;align-self: stretch;}
-
-.tox .tox-tbtn--labeled{width: unset;padding: 0 4px;}
-
-.tox .tox-tbtn__vlabel{display: block;margin-bottom: 4px;font-size: 10px;font-weight: 400;letter-spacing: -.025em;white-space: nowrap;}
-
-.tox .tox-tbtn--select{width: auto;padding: 0 4px;margin: 2px 0 3px 0;}
-
-.tox .tox-tbtn__select-label{margin: 0 4px;font-weight: 400;cursor: default;}
-
-.tox .tox-tbtn__select-chevron{align-items: center;display: flex;justify-content: center;width: 16px;}
-
-.tox .tox-tbtn__select-chevron svg{fill: rgba(255,255,255,.5);}
-
-.tox .tox-tbtn--bespoke .tox-tbtn__select-label{width: 7em;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
-
-.tox .tox-split-button{display: flex;margin: 2px 0 3px 0;overflow: hidden;border: 0;border-radius: 3px;box-sizing: border-box;}
-
-.tox .tox-split-button:hover{box-shadow: 0 0 0 1px #434e5b inset;}
-
-.tox .tox-split-button:focus{color: #fff;background: #434e5b;box-shadow: none;}
-
-.tox .tox-split-button>*{border-radius: 0;}
-
-.tox .tox-split-button__chevron{width: 16px;}
-
-.tox .tox-split-button__chevron svg{fill: rgba(255,255,255,.5);}
-
-.tox .tox-pop .tox-split-button__chevron svg{transform: rotate(-90deg);}
-
-.tox .tox-split-button .tox-tbtn{margin: 0;}
-
-.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{color: rgba(255,255,255,.5);background: 0 0;box-shadow: none;}
-
-.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{display: flex;padding: 0 0;margin-bottom: -1px;background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color: #222f3e;border-top: 1px solid #000;flex: 0 0 auto;flex-shrink: 0;flex-wrap: wrap;}
-
-.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height: 0;opacity: 0;visibility: hidden;}
-
-.tox .tox-toolbar__overflow--growing{transition: height .3s ease,opacity .2s linear .1s;}
-
-.tox .tox-toolbar__overflow--shrinking{transition: opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s;}
-
-.tox .tox-pop .tox-toolbar{border-width: 0;}
-
-.tox .tox-toolbar--no-divider{background-image: none;}
-
-.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color: #222f3e;border: 1px solid #000;border-radius: 3px;box-shadow: 0 1px 3px rgba(0,0,0,.15);}
-
-.tox.tox-tinymce-aux:not([dir=rtl]) .tox-toolbar__overflow{margin-left: 4px;}
-
-.tox[dir=rtl] .tox-tbtn__icon-rtl svg{transform: rotateY(180deg);}
-
-.tox[dir=rtl].tox-tinymce-aux .tox-toolbar__overflow{margin-right: 4px;}
-
-.tox .tox-toolbar__group{display: flex;padding: 0 4px;margin: 0 0;align-items: center;flex-wrap: wrap;}
-
-.tox .tox-toolbar__group--pull-right{margin-left: auto;}
-
-.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right: 1px solid #000;}
-
-.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left: 1px solid #000;}
-
-.tox .tox-tooltip{position: relative;display: inline-block;padding: 8px;}
-
-.tox .tox-tooltip__body{padding: 4px 8px;font-size: 14px;font-style: normal;font-weight: 400;color: rgba(255,255,255,.75);text-transform: normal;background-color: #3d546f;border-radius: 3px;box-shadow: 0 2px 4px rgba(34,47,62,.3);}
-
-.tox .tox-tooltip__arrow{position: absolute;}
-
-.tox .tox-tooltip--down .tox-tooltip__arrow{position: absolute;bottom: 0;left: 50%;border-top: 8px solid #3d546f;border-right: 8px solid transparent;border-left: 8px solid transparent;transform: translateX(-50%);}
-
-.tox .tox-tooltip--up .tox-tooltip__arrow{position: absolute;top: 0;left: 50%;border-right: 8px solid transparent;border-bottom: 8px solid #3d546f;border-left: 8px solid transparent;transform: translateX(-50%);}
-
-.tox .tox-tooltip--right .tox-tooltip__arrow{position: absolute;top: 50%;right: 0;border-top: 8px solid transparent;border-bottom: 8px solid transparent;border-left: 8px solid #3d546f;transform: translateY(-50%);}
-
-.tox .tox-tooltip--left .tox-tooltip__arrow{position: absolute;top: 50%;left: 0;border-top: 8px solid transparent;border-right: 8px solid #3d546f;border-bottom: 8px solid transparent;transform: translateY(-50%);}
-
-.tox .tox-well{width: 100%;padding: 8px;border: 1px solid #000;border-radius: 3px;}
-
-.tox .tox-well>:first-child{margin-top: 0;}
-
-.tox .tox-well>:last-child{margin-bottom: 0;}
-
-.tox .tox-well>:only-child{margin: 0;}
-
-.tox .tox-custom-editor{display: flex;height: 525px;border: 1px solid #000;border-radius: 3px;}
-
-.tox .tox-dialog-loading::before{position: absolute;z-index: 1000;width: 100%;height: 100%;background-color: rgba(0,0,0,.5);content: "";}
-
-.tox .tox-tab{cursor: pointer;}
-
-.tox .tox-dialog__content-js{display: flex;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-dialog__body-content .tox-collection{display: flex;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox ul{display: block;list-style-type: disc;-webkit-margin-before: 1em;margin-block-start: 1em;-webkit-margin-after: 1em;margin-block-end: 1em;-webkit-margin-start: 0;margin-inline-start: 0;-webkit-margin-end: 0;margin-inline-end: 0;-webkit-padding-start: 40px;padding-inline-start: 40px;}
-
-.tox a{color: #2276d2;cursor: pointer;}
-
-.tox .tox-image-tools-edit-panel{height: 60px;}
-
-.tox .tox-image-tools__sidebar{height: 60px;}
diff --git a/public/resource/tinymce/skins/ui/oxide-dark/skin.mobile.min.css b/public/resource/tinymce/skins/ui/oxide-dark/skin.mobile.min.css
deleted file mode 100644
index 14847d0..0000000
--- a/public/resource/tinymce/skins/ui/oxide-dark/skin.mobile.min.css
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- */
-.tinymce-mobile-outer-container{all: initial;display: block;}
-
-.tinymce-mobile-outer-container *{float: none;padding: 0;margin: 0;line-height: 1;text-shadow: none;white-space: nowrap;cursor: inherit;border: 0;outline: 0;box-sizing: initial;-webkit-tap-highlight-color: transparent;}
-
-.tinymce-mobile-icon-arrow-back::before{content: "\e5cd";}
-
-.tinymce-mobile-icon-image::before{content: "\e412";}
-
-.tinymce-mobile-icon-cancel-circle::before{content: "\e5c9";}
-
-.tinymce-mobile-icon-full-dot::before{content: "\e061";}
-
-.tinymce-mobile-icon-align-center::before{content: "\e234";}
-
-.tinymce-mobile-icon-align-left::before{content: "\e236";}
-
-.tinymce-mobile-icon-align-right::before{content: "\e237";}
-
-.tinymce-mobile-icon-bold::before{content: "\e238";}
-
-.tinymce-mobile-icon-italic::before{content: "\e23f";}
-
-.tinymce-mobile-icon-unordered-list::before{content: "\e241";}
-
-.tinymce-mobile-icon-ordered-list::before{content: "\e242";}
-
-.tinymce-mobile-icon-font-size::before{content: "\e245";}
-
-.tinymce-mobile-icon-underline::before{content: "\e249";}
-
-.tinymce-mobile-icon-link::before{content: "\e157";}
-
-.tinymce-mobile-icon-unlink::before{content: "\eca2";}
-
-.tinymce-mobile-icon-color::before{content: "\e891";}
-
-.tinymce-mobile-icon-previous::before{content: "\e314";}
-
-.tinymce-mobile-icon-next::before{content: "\e315";}
-
-.tinymce-mobile-icon-large-font::before,.tinymce-mobile-icon-style-formats::before{content: "\e264";}
-
-.tinymce-mobile-icon-undo::before{content: "\e166";}
-
-.tinymce-mobile-icon-redo::before{content: "\e15a";}
-
-.tinymce-mobile-icon-removeformat::before{content: "\e239";}
-
-.tinymce-mobile-icon-small-font::before{content: "\e906";}
-
-.tinymce-mobile-format-matches::after,.tinymce-mobile-icon-readonly-back::before{content: "\e5ca";}
-
-.tinymce-mobile-icon-small-heading::before{content: "small";}
-
-.tinymce-mobile-icon-large-heading::before{content: "large";}
-
-.tinymce-mobile-icon-large-heading::before,.tinymce-mobile-icon-small-heading::before{font-family: sans-serif;font-size: 80%;}
-
-.tinymce-mobile-mask-edit-icon::before{content: "\e254";}
-
-.tinymce-mobile-icon-back::before{content: "\e5c4";}
-
-.tinymce-mobile-icon-heading::before{font-family: sans-serif;font-size: 80%;font-weight: 700;content: "Headings";}
-
-.tinymce-mobile-icon-h1::before{font-weight: 700;content: "H1";}
-
-.tinymce-mobile-icon-h2::before{font-weight: 700;content: "H2";}
-
-.tinymce-mobile-icon-h3::before{font-weight: 700;content: "H3";}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{position: absolute;top: 0;display: flex;width: 100%;height: 100%;background: rgba(51,51,51,.5);align-items: center;justify-content: center;}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{display: flex;font-family: sans-serif;font-size: 1em;border-radius: 50%;align-items: center;flex-direction: column;justify-content: space-between;}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{display: flex;width: 2.1em;height: 2.1em;border-radius: 50%;align-items: center;justify-content: center;}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{align-items: center;display: flex;justify-content: center;flex-direction: column;font-size: 1em;}@media only screen and (min-device-width: 700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size: 1.2em;}}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{display: flex;width: 2.1em;height: 2.1em;color: #207ab7;background-color: #fff;border-radius: 50%;align-items: center;justify-content: center;}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before{font-family: tinymce-mobile,sans-serif;content: "\e900";}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index: 2;}
-
-.tinymce-mobile-android-container.tinymce-mobile-android-maximized{position: fixed;top: 0;right: 0;bottom: 0;left: 0;display: flex;background: #fff;border: none;flex-direction: column;}
-
-.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position: relative;}
-
-.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display: flex;flex-grow: 1;}
-
-.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display: flex !important;flex-grow: 1;height: auto !important;}
-
-.tinymce-mobile-android-scroll-reload{overflow: hidden;}
-
-:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top: 23px;}
-
-.tinymce-mobile-toolstrip{z-index: 1;display: flex;background: #fff;flex: 0 0 auto;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{display: flex;width: 100%;height: 2.5em;background-color: #fff;border-bottom: 1px solid #ccc;align-items: center;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{align-items: center;display: flex;height: 100%;flex-shrink: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{align-items: center;display: flex;height: 100%;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background: #f44336;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{flex-grow: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-right: .5em;padding-left: .5em;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{display: flex;height: 80%;margin-right: 2px;margin-left: 2px;align-items: center;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{color: #ccc;background: #c8cbcf;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{color: #eceff1;background: #207ab7;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{display: flex;height: 100%;padding-top: .4em;padding-bottom: .4em;align-items: center;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{position: relative;display: flex;width: 100%;min-height: 1.5em;padding-right: 0;padding-left: 0;overflow: hidden;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{display: flex;width: 100%;height: 100%;transition: left cubic-bezier(.4,0,1,1) .15s;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{display: flex;flex: 0 0 auto;justify-content: space-between;width: 100%;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family: sans-serif;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{position: relative;display: flex;flex-grow: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{position: absolute;right: 0;height: 100%;padding-right: 2px;font-size: .6em;font-weight: 700;color: #888;background: inherit;border: none;border-radius: 50%;align-self: center;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display: none;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous{align-items: center;display: flex;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before{display: flex;height: 100%;padding-right: .5em;padding-left: .5em;font-weight: 700;align-items: center;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before{visibility: hidden;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{padding-top: 3px;margin: 0 2px;font-size: 10px;line-height: 10px;color: #ccc;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color: #c8cbcf;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before{margin-right: .9em;margin-left: .5em;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before{margin-right: .5em;margin-left: .9em;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{position: relative;display: flex;padding: .28em 0;margin-right: 0;margin-left: 0;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{align-items: center;display: flex;flex-grow: 1;height: 100%;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{display: flex;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #ccc;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-right: 2em;padding-left: 2em;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{align-items: center;display: flex;flex-grow: 1;height: 100%;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{display: flex;height: .2em;margin-top: .3em;margin-bottom: .3em;background: linear-gradient(to right,red 0,#feff00 17%,#0f0 33%,#00feff 50%,#00f 67%,#ff00fe 83%,red 100%);flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{width: 1.2em;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #000;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{width: 1.2em;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #fff;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{position: absolute;top: 0;bottom: 0;left: -10px;display: flex;width: .5em;height: .5em;margin: auto;color: #fff;background-color: #455a64;border: .5em solid rgba(136,136,136,0);border-radius: 3em;transition: border 120ms cubic-bezier(.39,.58,.57,1);background-clip: padding-box;align-items: center;justify-content: center;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border: .5em solid rgba(136,136,136,.39);}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{align-items: center;display: flex;height: 100%;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{flex-direction: column;justify-content: center;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{align-items: center;display: flex;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height: 100%;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display: flex;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{padding-top: .1em;padding-bottom: .1em;padding-left: 5px;font-size: .85em;color: #455a64;background: #fff;border: none;border-radius: 0;flex-grow: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color: #888;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color: #888;}
-
-.tinymce-mobile-dropup{display: flex;width: 100%;overflow: hidden;background: #fff;}
-
-.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{transition: height .3s ease-out;}
-
-.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{transition: height .3s ease-in;}
-
-.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{flex-grow: 0;}
-
-.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){flex-grow: 1;}
-
-.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 200px;}@media only screen and (orientation: landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 200px;}}@media only screen and (min-device-width: 320px) and (max-device-width: 568px) and (orientation: landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 150px;}}
-
-.tinymce-mobile-styles-menu{position: relative;width: 100%;overflow: hidden;font-family: sans-serif;outline: 4px solid #000;}
-
-.tinymce-mobile-styles-menu [role=menu]{position: absolute;display: flex;width: 100%;height: 100%;flex-direction: column;}
-
-.tinymce-mobile-styles-menu [role=menu].transitioning{transition: transform .5s ease-in-out;}
-
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{position: relative;display: flex;padding: 1em 1em;color: #455a64;cursor: pointer;border-bottom: 1px solid #ddd;}
-
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before{font-family: tinymce-mobile,sans-serif;color: #455a64;content: "\e314";}
-
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after{position: absolute;right: 0;padding-right: 1em;padding-left: 1em;font-family: tinymce-mobile,sans-serif;color: #455a64;content: "\e315";}
-
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after{position: absolute;right: 0;padding-right: 1em;padding-left: 1em;font-family: tinymce-mobile,sans-serif;}
-
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser,.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator{display: flex;min-height: 2.5em;padding-right: 1em;padding-left: 1em;color: #455a64;background: #fff;border-top: #455a64;align-items: center;}
-
-.tinymce-mobile-styles-menu [data-transitioning-destination=before][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=before]{transform: translate(-100%);}
-
-.tinymce-mobile-styles-menu [data-transitioning-destination=current][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=current]{transform: translate(0);}
-
-.tinymce-mobile-styles-menu [data-transitioning-destination=after][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=after]{transform: translate(100%);}@font-face{font-family: tinymce-mobile;font-style: normal;font-weight: 400;src: url(fonts/tinymce-mobile.woff?8x92w3) format('woff');}@media (min-device-width: 700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size: 25px;}}@media (max-device-width: 700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size: 18px;}}
-
-.tinymce-mobile-icon{font-family: tinymce-mobile,sans-serif;}
-
-.mixin-flex-and-centre{align-items: center;display: flex;justify-content: center;}
-
-.mixin-flex-bar{align-items: center;display: flex;height: 100%;}
-
-.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe{width: 100%;background-color: #fff;}
-
-.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{position: fixed;right: 2em;bottom: 1em;display: flex;width: 2.1em;height: 2.1em;font-size: 1em;color: #fff;background-color: #207ab7;border-radius: 50%;align-items: center;justify-content: center;}@media only screen and (min-device-width: 700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size: 1.2em;}}
-
-.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{height: 300px;overflow: hidden;}
-
-.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe{height: 100%;}
-
-.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display: none;}
-
-input[type=file]::-webkit-file-upload-button{display: none;}@media only screen and (min-device-width: 320px) and (max-device-width: 568px) and (orientation: landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom: 50%;}}
diff --git a/public/resource/tinymce/skins/ui/oxide/content.inline.min.css b/public/resource/tinymce/skins/ui/oxide/content.inline.min.css
deleted file mode 100644
index 748f313..0000000
--- a/public/resource/tinymce/skins/ui/oxide/content.inline.min.css
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- */
-.mce-content-body .mce-item-anchor{display: inline-block;width: 8px !important;height: 12px !important;padding: 0 2px;cursor: default;background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;-webkit-user-select: all;-moz-user-select: all;-ms-user-select: all;user-select: all;-webkit-user-modify: read-only;-moz-user-modify: read-only;}
-
-.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset: 1px;}
-
-.tox-comments-visible .tox-comment{background-color: #fff0b7;}
-
-.tox-comments-visible .tox-comment--active{background-color: #ffe168;}
-
-.tox-checklist>li:not(.tox-checklist--hidden){margin: .25em 0;list-style: none;}
-
-.tox-checklist>li:not(.tox-checklist--hidden)::before{position: absolute;width: 1em;height: 1em;margin-top: .125em;margin-left: -1.5em;cursor: pointer;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size: 100%;content: '';}
-
-.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");}
-
-[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-right: -1.5em;margin-left: 0;}
-
-code[class*=language-],pre[class*=language-]{font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size: .875rem;-webkit-hyphens: none;-ms-hyphens: none;hyphens: none;line-height: 1.5;word-spacing: normal;color: #000;text-shadow: 0 1px #fff;word-break: normal;word-wrap: normal;white-space: pre;-moz-tab-size: 4;tab-size: 4;}
-
-code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow: none;background: #b3d4fc;}
-
-code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow: none;background: #b3d4fc;}@media print{code[class*=language-],pre[class*=language-]{text-shadow: none;}}
-
-pre[class*=language-]{padding: 1em;margin: .5em 0;overflow: auto;}
-
-:not(pre)>code[class*=language-],pre[class*=language-]{background: 0 0 !important;border: 1px solid #ccc;}
-
-:not(pre)>code[class*=language-]{padding: .1em;border-radius: .3em;}
-
-.token.cdata,.token.comment,.token.doctype,.token.prolog{color: #708090;}
-
-.token.punctuation{color: #999;}
-
-.namespace{opacity: .7;}
-
-.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color: #905;}
-
-.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color: #690;}
-
-.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color: #a67f59;background: hsla(0,0%,100%,.5);}
-
-.token.atrule,.token.attr-value,.token.keyword{color: #07a;}
-
-.token.function{color: #dd4a68;}
-
-.token.important,.token.regex,.token.variable{color: #e90;}
-
-.token.bold,.token.important{font-weight: 700;}
-
-.token.italic{font-style: italic;}
-
-.token.entity{cursor: help;}
-
-:not([dir=rtl]) code[class*=language-],:not([dir=rtl]) pre[class*=language-]{text-align: left;direction: ltr;}
-
-[dir=rtl] code[class*=language-],[dir=rtl] pre[class*=language-]{text-align: right;direction: rtl;}
-
-.mce-content-body{overflow-wrap: break-word;word-wrap: break-word;}
-
-.mce-content-body .mce-visual-caret{position: absolute;background-color: #000;background-color: currentColor;}
-
-.mce-content-body .mce-visual-caret-hidden{display: none;}
-
-.mce-content-body [data-mce-caret]{position: absolute;top: 0;right: auto;left: -1000px;padding: 0;margin: 0;}
-
-.mce-content-body .mce-offscreen-selection{position: absolute;left: -9999999999px;max-width: 1000000px;}
-
-.mce-content-body [contentEditable=false]{cursor: default;}
-
-.mce-content-body [contentEditable=true]{cursor: text;}
-
-.tox-cursor-format-painter{cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default;}
-
-.mce-content-body figure.align-left{float: left;}
-
-.mce-content-body figure.align-right{float: right;}
-
-.mce-content-body figure.image.align-center{display: table;margin-right: auto;margin-left: auto;}
-
-.mce-preview-object{position: relative;display: inline-block;margin: 0 2px 0 2px;line-height: 0;border: 1px solid gray;}
-
-.mce-preview-object .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);}
-
-.mce-preview-object[data-mce-selected="2"] .mce-shim{display: none;}
-
-.mce-object{background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border: 1px dashed #aaa;}
-
-.mce-pagebreak{display: block;width: 100%;height: 5px;margin-top: 15px;cursor: default;border: 1px dashed #aaa;page-break-before: always;}@media print{.mce-pagebreak{border: 0;}}
-
-.tiny-pageembed .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);}
-
-.tiny-pageembed[data-mce-selected="2"] .mce-shim{display: none;}
-
-.tiny-pageembed{position: relative;display: inline-block;}
-
-.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{position: relative;display: block;width: 100%;padding: 0;overflow: hidden;}
-
-.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{display: block;content: "";}
-
-.tiny-pageembed--21by9::before{padding-top: 42.857143%;}
-
-.tiny-pageembed--16by9::before{padding-top: 56.25%;}
-
-.tiny-pageembed--4by3::before{padding-top: 75%;}
-
-.tiny-pageembed--1by1::before{padding-top: 100%;}
-
-.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{position: absolute;top: 0;left: 0;width: 100%;height: 100%;border: 0;}
-
-.mce-content-body div.mce-resizehandle{position: absolute;z-index: 10000;width: 10px;height: 10px;background-color: #4099ff;border-color: #4099ff;border-style: solid;border-width: 1px;box-sizing: border-box;}
-
-.mce-content-body div.mce-resizehandle:hover{background-color: #4099ff;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor: nwse-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor: nesw-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor: nwse-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor: nesw-resize;}
-
-.mce-content-body .mce-clonedresizable{position: absolute;z-index: 10000;outline: 1px dashed #000;opacity: .5;}
-
-.mce-content-body .mce-resize-helper{position: absolute;z-index: 10001;display: none;padding: 5px;margin: 5px 10px;font-family: sans-serif;font-size: 12px;line-height: 14px;color: #fff;white-space: nowrap;background: #555;background: rgba(0,0,0,.75);border: 1px;border-radius: 3px;}
-
-.mce-match-marker{color: #fff;background: #aaa;}
-
-.mce-match-marker-selected{color: #fff;background: #39f;}
-
-.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline: 3px solid #b4d7ff;}
-
-.mce-content-body hr[data-mce-selected]{outline: 3px solid #b4d7ff;outline-offset: 1px;}
-
-.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline: 3px solid #b4d7ff;}
-
-.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline: 3px solid #b4d7ff;}
-
-.mce-content-body [contentEditable=false][data-mce-selected]{cursor: not-allowed;outline: 3px solid #b4d7ff;}
-
-.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline: 0;}
-
-.mce-content-body [data-mce-selected=inline-boundary]{background-color: #b4d7ff;}
-
-.mce-content-body .mce-edit-focus{outline: 3px solid #b4d7ff;}
-
-.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color: #b4d7ff !important;}
-
-.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background: 0 0;}
-
-.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background: 0 0;}
-
-.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout: none;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}
-
-.mce-content-body img::-moz-selection{background: 0 0;}
-
-.mce-content-body img::selection{background: 0 0;}
-
-.ephox-snooker-resizer-bar{background-color: #b4d7ff;opacity: 0;}
-
-.ephox-snooker-resizer-cols{cursor: col-resize;}
-
-.ephox-snooker-resizer-rows{cursor: row-resize;}
-
-.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity: 1;}
-
-.mce-spellchecker-word{height: 2rem;cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.5'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;}
-
-.mce-spellchecker-grammar{cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23008800'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;}
-
-.mce-toc{border: 1px solid gray;}
-
-.mce-toc h2{margin: 4px;}
-
-.mce-toc li{list-style-type: none;}
-
-.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border: 1px dashed #bbb;}
-
-.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{padding-top: 10px;margin-left: 3px;background-repeat: no-repeat;border: 1px dashed #bbb;}
-
-.mce-visualblocks p{background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);}
-
-.mce-visualblocks h1{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);}
-
-.mce-visualblocks h2{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);}
-
-.mce-visualblocks h3{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);}
-
-.mce-visualblocks h4{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);}
-
-.mce-visualblocks h5{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);}
-
-.mce-visualblocks h6{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);}
-
-.mce-visualblocks div:not([data-mce-bogus]){background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);}
-
-.mce-visualblocks section{background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);}
-
-.mce-visualblocks article{background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);}
-
-.mce-visualblocks blockquote{background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);}
-
-.mce-visualblocks address{background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);}
-
-.mce-visualblocks pre{background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);}
-
-.mce-visualblocks figure{background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);}
-
-.mce-visualblocks figcaption{border: 1px dashed #bbb;}
-
-.mce-visualblocks hgroup{background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);}
-
-.mce-visualblocks aside{background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);}
-
-.mce-visualblocks ul{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);}
-
-.mce-visualblocks ol{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);}
-
-.mce-visualblocks dl{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);}
-
-.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left: 3px;}
-
-.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x: right;margin-right: 3px;}
-
-.mce-nbsp,.mce-shy{background: #aaa;}
-
-.mce-shy::after{content: '-';}
-
-.tox-toolbar-dock-fadeout{opacity: 0;visibility: hidden;}
-
-.tox-toolbar-dock-fadein{opacity: 1;visibility: visible;}
-
-.tox-toolbar-dock-transition{transition: visibility 0s linear .3s,opacity .3s ease;}
-
-.tox-toolbar-dock-transition.tox-toolbar-dock-fadein{transition-delay: 0s;}
diff --git a/public/resource/tinymce/skins/ui/oxide/content.min.css b/public/resource/tinymce/skins/ui/oxide/content.min.css
deleted file mode 100644
index 6e7165f..0000000
--- a/public/resource/tinymce/skins/ui/oxide/content.min.css
+++ /dev/null
@@ -1,235 +0,0 @@
-/**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- */
-.mce-content-body .mce-item-anchor{display: inline-block;width: 8px !important;height: 12px !important;padding: 0 2px;cursor: default;background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;-webkit-user-select: all;-moz-user-select: all;-ms-user-select: all;user-select: all;-webkit-user-modify: read-only;-moz-user-modify: read-only;}
-
-.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset: 1px;}
-
-.tox-comments-visible .tox-comment{background-color: #fff0b7;}
-
-.tox-comments-visible .tox-comment--active{background-color: #ffe168;}
-
-.tox-checklist>li:not(.tox-checklist--hidden){margin: .25em 0;list-style: none;}
-
-.tox-checklist>li:not(.tox-checklist--hidden)::before{position: absolute;width: 1em;height: 1em;margin-top: .125em;margin-left: -1.5em;cursor: pointer;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size: 100%;content: '';}
-
-.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");}
-
-[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-right: -1.5em;margin-left: 0;}
-
-code[class*=language-],pre[class*=language-]{font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size: .875rem;-webkit-hyphens: none;-ms-hyphens: none;hyphens: none;line-height: 1.5;word-spacing: normal;color: #000;text-shadow: 0 1px #fff;word-break: normal;word-wrap: normal;white-space: pre;-moz-tab-size: 4;tab-size: 4;}
-
-code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow: none;background: #b3d4fc;}
-
-code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow: none;background: #b3d4fc;}@media print{code[class*=language-],pre[class*=language-]{text-shadow: none;}}
-
-pre[class*=language-]{padding: 1em;margin: .5em 0;overflow: auto;}
-
-:not(pre)>code[class*=language-],pre[class*=language-]{background: 0 0 !important;border: 1px solid #ccc;}
-
-:not(pre)>code[class*=language-]{padding: .1em;border-radius: .3em;}
-
-.token.cdata,.token.comment,.token.doctype,.token.prolog{color: #708090;}
-
-.token.punctuation{color: #999;}
-
-.namespace{opacity: .7;}
-
-.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color: #905;}
-
-.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color: #690;}
-
-.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color: #a67f59;background: hsla(0,0%,100%,.5);}
-
-.token.atrule,.token.attr-value,.token.keyword{color: #07a;}
-
-.token.function{color: #dd4a68;}
-
-.token.important,.token.regex,.token.variable{color: #e90;}
-
-.token.bold,.token.important{font-weight: 700;}
-
-.token.italic{font-style: italic;}
-
-.token.entity{cursor: help;}
-
-:not([dir=rtl]) code[class*=language-],:not([dir=rtl]) pre[class*=language-]{text-align: left;direction: ltr;}
-
-[dir=rtl] code[class*=language-],[dir=rtl] pre[class*=language-]{text-align: right;direction: rtl;}
-
-.mce-content-body{overflow-wrap: break-word;word-wrap: break-word;}
-
-.mce-content-body .mce-visual-caret{position: absolute;background-color: #000;background-color: currentColor;}
-
-.mce-content-body .mce-visual-caret-hidden{display: none;}
-
-.mce-content-body [data-mce-caret]{position: absolute;top: 0;right: auto;left: -1000px;padding: 0;margin: 0;}
-
-.mce-content-body .mce-offscreen-selection{position: absolute;left: -9999999999px;max-width: 1000000px;}
-
-.mce-content-body [contentEditable=false]{cursor: default;}
-
-.mce-content-body [contentEditable=true]{cursor: text;}
-
-.tox-cursor-format-painter{cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default;}
-
-.mce-content-body figure.align-left{float: left;}
-
-.mce-content-body figure.align-right{float: right;}
-
-.mce-content-body figure.image.align-center{display: table;margin-right: auto;margin-left: auto;}
-
-.mce-preview-object{position: relative;display: inline-block;margin: 0 2px 0 2px;line-height: 0;border: 1px solid gray;}
-
-.mce-preview-object .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);}
-
-.mce-preview-object[data-mce-selected="2"] .mce-shim{display: none;}
-
-.mce-object{background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border: 1px dashed #aaa;}
-
-.mce-pagebreak{display: block;width: 100%;height: 5px;margin-top: 15px;cursor: default;border: 1px dashed #aaa;page-break-before: always;}@media print{.mce-pagebreak{border: 0;}}
-
-.tiny-pageembed .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);}
-
-.tiny-pageembed[data-mce-selected="2"] .mce-shim{display: none;}
-
-.tiny-pageembed{position: relative;display: inline-block;}
-
-.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{position: relative;display: block;width: 100%;padding: 0;overflow: hidden;}
-
-.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{display: block;content: "";}
-
-.tiny-pageembed--21by9::before{padding-top: 42.857143%;}
-
-.tiny-pageembed--16by9::before{padding-top: 56.25%;}
-
-.tiny-pageembed--4by3::before{padding-top: 75%;}
-
-.tiny-pageembed--1by1::before{padding-top: 100%;}
-
-.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{position: absolute;top: 0;left: 0;width: 100%;height: 100%;border: 0;}
-
-.mce-content-body div.mce-resizehandle{position: absolute;z-index: 10000;width: 10px;height: 10px;background-color: #4099ff;border-color: #4099ff;border-style: solid;border-width: 1px;box-sizing: border-box;}
-
-.mce-content-body div.mce-resizehandle:hover{background-color: #4099ff;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor: nwse-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor: nesw-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor: nwse-resize;}
-
-.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor: nesw-resize;}
-
-.mce-content-body .mce-clonedresizable{position: absolute;z-index: 10000;outline: 1px dashed #000;opacity: .5;}
-
-.mce-content-body .mce-resize-helper{position: absolute;z-index: 10001;display: none;padding: 5px;margin: 5px 10px;font-family: sans-serif;font-size: 12px;line-height: 14px;color: #fff;white-space: nowrap;background: #555;background: rgba(0,0,0,.75);border: 1px;border-radius: 3px;}
-
-.mce-match-marker{color: #fff;background: #aaa;}
-
-.mce-match-marker-selected{color: #fff;background: #39f;}
-
-.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline: 3px solid #b4d7ff;}
-
-.mce-content-body hr[data-mce-selected]{outline: 3px solid #b4d7ff;outline-offset: 1px;}
-
-.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline: 3px solid #b4d7ff;}
-
-.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline: 3px solid #b4d7ff;}
-
-.mce-content-body [contentEditable=false][data-mce-selected]{cursor: not-allowed;outline: 3px solid #b4d7ff;}
-
-.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline: 0;}
-
-.mce-content-body [data-mce-selected=inline-boundary]{background-color: #b4d7ff;}
-
-.mce-content-body .mce-edit-focus{outline: 3px solid #b4d7ff;}
-
-.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color: #b4d7ff !important;}
-
-.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background: 0 0;}
-
-.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background: 0 0;}
-
-.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout: none;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}
-
-.mce-content-body img::-moz-selection{background: 0 0;}
-
-.mce-content-body img::selection{background: 0 0;}
-
-.ephox-snooker-resizer-bar{background-color: #b4d7ff;opacity: 0;}
-
-.ephox-snooker-resizer-cols{cursor: col-resize;}
-
-.ephox-snooker-resizer-rows{cursor: row-resize;}
-
-.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity: 1;}
-
-.mce-spellchecker-word{height: 2rem;cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.5'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;}
-
-.mce-spellchecker-grammar{cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23008800'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;}
-
-.mce-toc{border: 1px solid gray;}
-
-.mce-toc h2{margin: 4px;}
-
-.mce-toc li{list-style-type: none;}
-
-.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border: 1px dashed #bbb;}
-
-.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{padding-top: 10px;margin-left: 3px;background-repeat: no-repeat;border: 1px dashed #bbb;}
-
-.mce-visualblocks p{background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);}
-
-.mce-visualblocks h1{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);}
-
-.mce-visualblocks h2{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);}
-
-.mce-visualblocks h3{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);}
-
-.mce-visualblocks h4{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);}
-
-.mce-visualblocks h5{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);}
-
-.mce-visualblocks h6{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);}
-
-.mce-visualblocks div:not([data-mce-bogus]){background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);}
-
-.mce-visualblocks section{background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);}
-
-.mce-visualblocks article{background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);}
-
-.mce-visualblocks blockquote{background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);}
-
-.mce-visualblocks address{background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);}
-
-.mce-visualblocks pre{background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);}
-
-.mce-visualblocks figure{background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);}
-
-.mce-visualblocks figcaption{border: 1px dashed #bbb;}
-
-.mce-visualblocks hgroup{background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);}
-
-.mce-visualblocks aside{background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);}
-
-.mce-visualblocks ul{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);}
-
-.mce-visualblocks ol{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);}
-
-.mce-visualblocks dl{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);}
-
-.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left: 3px;}
-
-.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x: right;margin-right: 3px;}
-
-.mce-nbsp,.mce-shy{background: #aaa;}
-
-.mce-shy::after{content: '-';}
-
-body{font-family: sans-serif;}
-
-table{border-collapse: collapse;}
diff --git a/public/resource/tinymce/skins/ui/oxide/content.mobile.min.css b/public/resource/tinymce/skins/ui/oxide/content.mobile.min.css
deleted file mode 100644
index c052252..0000000
--- a/public/resource/tinymce/skins/ui/oxide/content.mobile.min.css
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- */
-.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{position: absolute;display: inline-block;background-color: green;opacity: .5;}
-
-body{-webkit-text-size-adjust: none;}
-
-body img{max-width: 96vw;}
-
-body table img{max-width: 95%;}
-
-body{font-family: sans-serif;}
-
-table{border-collapse: collapse;}
diff --git a/public/resource/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff b/public/resource/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff
deleted file mode 100644
index 1e3be03..0000000
--- a/public/resource/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff
+++ /dev/null
Binary files differ
diff --git a/public/resource/tinymce/skins/ui/oxide/skin.min.css b/public/resource/tinymce/skins/ui/oxide/skin.min.css
deleted file mode 100644
index 5886c59..0000000
--- a/public/resource/tinymce/skins/ui/oxide/skin.min.css
+++ /dev/null
@@ -1,875 +0,0 @@
-/**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- */
-.tox{font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 16px;font-style: normal;font-weight: 400;line-height: normal;color: #222f3e;text-decoration: none;text-shadow: none;text-transform: none;white-space: normal;vertical-align: initial;cursor: auto;box-sizing: content-box;-webkit-tap-highlight-color: transparent;}
-
-.tox :not(svg){font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;line-height: inherit;color: inherit;text-align: inherit;text-decoration: inherit;text-shadow: inherit;text-transform: inherit;white-space: inherit;vertical-align: inherit;cursor: inherit;box-sizing: inherit;direction: inherit;-webkit-tap-highlight-color: inherit;}
-
-.tox :not(svg){position: static;float: none;width: auto;height: auto;max-width: none;padding: 0;margin: 0;background: 0 0;border: 0;outline: 0;}
-
-.tox:not([dir=rtl]){text-align: left;direction: ltr;}
-
-.tox[dir=rtl]{text-align: right;direction: rtl;}
-
-.tox-tinymce{position: relative;display: flex;overflow: hidden;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;border: 1px solid #ccc;border-radius: 0;visibility: inherit !important;box-shadow: none;box-sizing: border-box;flex-direction: column;}
-
-.tox-editor-container{display: flex;flex: 1 1 auto;flex-direction: column;overflow: hidden;}
-
-.tox-editor-container>:first-child{border-top: none !important;}
-
-.tox-tinymce-aux{font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;}
-
-.tox-tinymce :focus,.tox-tinymce-aux :focus{outline: 0;}
-
-button::-moz-focus-inner{border: 0;}
-
-.tox-silver-sink{z-index: 1300;}
-
-.tox .tox-anchorbar{display: flex;flex: 0 0 auto;}
-
-.tox .tox-bar{display: flex;flex: 0 0 auto;}
-
-.tox .tox-button{display: inline-block;padding: 4px 16px;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 14px;font-weight: 700;line-height: 24px;letter-spacing: 1;color: #fff;text-align: center;text-decoration: none;text-transform: capitalize;white-space: nowrap;cursor: pointer;background-color: #207ab7;background-image: none;background-position: none;background-repeat: none;border-color: #207ab7;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;box-sizing: border-box;}
-
-.tox .tox-button[disabled]{color: rgba(255,255,255,.5);cursor: not-allowed;background-color: #207ab7;background-image: none;border-color: #207ab7;box-shadow: none;}
-
-.tox .tox-button:focus:not(:disabled){color: #fff;background-color: #1c6ca1;background-image: none;border-color: #1c6ca1;box-shadow: none;}
-
-.tox .tox-button:hover:not(:disabled){color: #fff;background-color: #1c6ca1;background-image: none;border-color: #1c6ca1;box-shadow: none;}
-
-.tox .tox-button:active:not(:disabled){color: #fff;background-color: #185d8c;background-image: none;border-color: #185d8c;box-shadow: none;}
-
-.tox .tox-button--secondary{padding: 4px 16px;color: #222f3e;text-decoration: none;text-transform: capitalize;background-color: #f0f0f0;background-image: none;background-position: none;background-repeat: none;border-color: #f0f0f0;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;}
-
-.tox .tox-button--secondary[disabled]{color: rgba(34,47,62,.5);background-color: #f0f0f0;background-image: none;border-color: #f0f0f0;box-shadow: none;}
-
-.tox .tox-button--secondary:focus:not(:disabled){color: #222f3e;background-color: #e3e3e3;background-image: none;border-color: #e3e3e3;box-shadow: none;}
-
-.tox .tox-button--secondary:hover:not(:disabled){color: #222f3e;background-color: #e3e3e3;background-image: none;border-color: #e3e3e3;box-shadow: none;}
-
-.tox .tox-button--secondary:active:not(:disabled){color: #222f3e;background-color: #d6d6d6;background-image: none;border-color: #d6d6d6;box-shadow: none;}
-
-.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding: 4px;}
-
-.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display: block;fill: currentColor;}
-
-.tox .tox-button-link{display: inline-block;padding: 0;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 16px;font-weight: 400;line-height: 1.3;white-space: nowrap;cursor: pointer;background: 0;border: none;box-sizing: border-box;}
-
-.tox .tox-button-link--sm{font-size: 14px;}
-
-.tox .tox-button--naked{color: #222f3e;background-color: transparent;border-color: transparent;box-shadow: unset;}
-
-.tox .tox-button--naked:hover:not(:disabled){color: #222f3e;background-color: #e3e3e3;border-color: #e3e3e3;box-shadow: none;}
-
-.tox .tox-button--naked:focus:not(:disabled){color: #222f3e;background-color: #e3e3e3;border-color: #e3e3e3;box-shadow: none;}
-
-.tox .tox-button--naked:active:not(:disabled){color: #222f3e;background-color: #d6d6d6;border-color: #d6d6d6;box-shadow: none;}
-
-.tox .tox-button--naked .tox-icon svg{fill: currentColor;}
-
-.tox .tox-button--naked.tox-button--icon{color: currentColor;}
-
-.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color: #222f3e;}
-
-.tox .tox-checkbox{display: flex;height: 36px;min-width: 36px;cursor: pointer;border-radius: 3px;align-items: center;}
-
-.tox .tox-checkbox__input{position: absolute;top: auto;left: -10000px;width: 1px;height: 1px;overflow: hidden;}
-
-.tox .tox-checkbox__icons{width: 24px;height: 24px;padding: calc(4px - 1px);border-radius: 3px;box-shadow: 0 0 0 2px transparent;box-sizing: content-box;}
-
-.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: block;fill: rgba(34,47,62,.3);}
-
-.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display: none;fill: #207ab7;}
-
-.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display: none;fill: #207ab7;}
-
-.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: none;}
-
-.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display: block;}
-
-.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: none;}
-
-.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display: block;}
-
-.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{padding: calc(4px - 1px);border-radius: 3px;box-shadow: inset 0 0 0 1px #207ab7;}
-
-.tox:not([dir=rtl]) .tox-checkbox__label{margin-left: 4px;}
-
-.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left: 4px;}
-
-.tox[dir=rtl] .tox-checkbox__label{margin-right: 4px;}
-
-.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right: 4px;}
-
-.tox .tox-collection--toolbar .tox-collection__group{display: flex;padding: 0;}
-
-.tox .tox-collection--grid .tox-collection__group{display: flex;max-height: 208px;padding: 0;overflow-x: hidden;overflow-y: auto;flex-wrap: wrap;}
-
-.tox .tox-collection--list .tox-collection__group{padding: 4px 0;border-color: #ccc;border-style: solid;border-top-width: 1px;border-right-width: 0;border-bottom-width: 0;border-left-width: 0;}
-
-.tox .tox-collection--list .tox-collection__group:first-child{border-top-width: 0;}
-
-.tox .tox-collection__group-heading{padding: 4px 8px;margin-top: -4px;margin-bottom: 4px;font-size: 12px;font-style: normal;font-weight: 400;color: rgba(34,47,62,.7);text-transform: none;cursor: default;background-color: #e6e6e6;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;-webkit-touch-callout: none;}
-
-.tox .tox-collection__item{display: flex;color: #222f3e;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;align-items: center;-webkit-touch-callout: none;}
-
-.tox .tox-collection--list .tox-collection__item{padding: 4px 8px;}
-
-.tox .tox-collection--toolbar .tox-collection__item{padding: 4px;border-radius: 3px;}
-
-.tox .tox-collection--grid .tox-collection__item{padding: 4px;border-radius: 3px;}
-
-.tox .tox-collection--list .tox-collection__item--enabled{color: contrast(inherit,#222f3e,#fff);background-color: inherit;}
-
-.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #222f3e;background-color: #dee0e2;}
-
-.tox .tox-collection--toolbar .tox-collection__item--enabled{color: #222f3e;background-color: #c8cbcf;}
-
-.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #222f3e;background-color: #dee0e2;}
-
-.tox .tox-collection--grid .tox-collection__item--enabled{color: #222f3e;background-color: #c8cbcf;}
-
-.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #222f3e;background-color: #dee0e2;}
-
-.tox .tox-collection__item--state-disabled{color: rgba(34,47,62,.5);cursor: default;background-color: transparent;}
-
-.tox .tox-collection__item-icon{display: flex;width: 24px;height: 24px;align-items: center;justify-content: center;}
-
-.tox .tox-collection__item-icon svg{fill: currentColor;}
-
-.tox .tox-collection--toolbar-lg .tox-collection__item-icon{width: 48px;height: 48px;}
-
-.tox .tox-collection__item[role=menuitemcheckbox]:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display: none;}
-
-.tox .tox-collection__item-label{display: inline-block;font-size: 14px;font-style: normal;font-weight: 400;line-height: 24px;color: currentColor;text-transform: none;word-break: break-all;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-collection__item-accessory{display: inline-block;height: 24px;font-size: 14px;line-height: 24px;color: rgba(34,47,62,.7);text-transform: normal;}
-
-.tox .tox-collection__item-caret{align-items: center;display: flex;min-height: 24px;}
-
-.tox .tox-collection__item-caret::after{min-height: inherit;font-size: 0;content: '';}
-
-.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left: 8px;}
-
-.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item-label:first-child{margin-left: 4px;}
-
-.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left: 16px;text-align: right;}
-
-.tox:not([dir=rtl]) .tox-collection__item-caret{margin-left: 16px;}
-
-.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right: 8px;}
-
-.tox[dir=rtl] .tox-collection--list .tox-collection__item-label:first-child{margin-right: 4px;}
-
-.tox[dir=rtl] .tox-collection__item-icon-rtl .tox-collection__item-icon svg{transform: rotateY(180deg);}
-
-.tox[dir=rtl] .tox-collection__item-accessory{margin-right: 16px;text-align: left;}
-
-.tox[dir=rtl] .tox-collection__item-caret{margin-right: 16px;transform: rotateY(180deg);}
-
-.tox .tox-color-picker-container{display: flex;flex-direction: row;height: 225px;margin: 0;}
-
-.tox .tox-sv-palette{display: flex;height: 100%;box-sizing: border-box;}
-
-.tox .tox-sv-palette-spectrum{height: 100%;}
-
-.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width: 225px;}
-
-.tox .tox-sv-palette-thumb{position: absolute;width: 12px;height: 12px;background: 0 0;border: 1px solid #000;border-radius: 50%;box-sizing: content-box;}
-
-.tox .tox-sv-palette-inner-thumb{position: absolute;width: 10px;height: 10px;border: 1px solid #fff;border-radius: 50%;}
-
-.tox .tox-hue-slider{width: 25px;height: 100%;box-sizing: border-box;}
-
-.tox .tox-hue-slider-spectrum{width: 100%;height: 100%;background: linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);}
-
-.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width: 20px;}
-
-.tox .tox-hue-slider-thumb{width: 100%;height: 4px;background: #fff;border: 1px solid #000;box-sizing: content-box;}
-
-.tox .tox-rgb-form{display: flex;flex-direction: column;justify-content: space-between;}
-
-.tox .tox-rgb-form div{display: flex;width: inherit;margin-bottom: 5px;align-items: center;justify-content: space-between;}
-
-.tox .tox-rgb-form input{width: 6em;}
-
-.tox .tox-rgb-form input.tox-invalid{border: 1px solid red !important;}
-
-.tox .tox-rgb-form .tox-rgba-preview{margin-bottom: 0;border: 1px solid #000;flex-grow: 2;}
-
-.tox:not([dir=rtl]) .tox-sv-palette{margin-right: 15px;}
-
-.tox:not([dir=rtl]) .tox-hue-slider{margin-right: 15px;}
-
-.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left: -1px;}
-
-.tox:not([dir=rtl]) .tox-rgb-form label{margin-right: .5em;}
-
-.tox[dir=rtl] .tox-sv-palette{margin-left: 15px;}
-
-.tox[dir=rtl] .tox-hue-slider{margin-left: 15px;}
-
-.tox[dir=rtl] .tox-hue-slider-thumb{margin-right: -1px;}
-
-.tox[dir=rtl] .tox-rgb-form label{margin-left: .5em;}
-
-.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin: 2px 0 3px 4px;}
-
-.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{margin: -4px 0;border: 0;}
-
-.tox .tox-swatches__row{display: flex;}
-
-.tox .tox-swatch{width: 30px;height: 30px;transition: transform .15s,box-shadow .15s;}
-
-.tox .tox-swatch:focus,.tox .tox-swatch:hover{transform: scale(.8);box-shadow: 0 0 0 1px rgba(127,127,127,.3) inset;}
-
-.tox .tox-swatch--remove{align-items: center;display: flex;justify-content: center;}
-
-.tox .tox-swatch--remove svg path{stroke: #e74c3c;}
-
-.tox .tox-swatches__picker-btn{display: flex;width: 30px;height: 30px;padding: 0;cursor: pointer;background-color: transparent;border: 0;outline: 0;align-items: center;justify-content: center;}
-
-.tox .tox-swatches__picker-btn svg{width: 24px;height: 24px;}
-
-.tox .tox-swatches__picker-btn:hover{background: #dee0e2;}
-
-.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left: auto;}
-
-.tox[dir=rtl] .tox-swatches__picker-btn{margin-right: auto;}
-
-.tox .tox-comment-thread{position: relative;background: #fff;}
-
-.tox .tox-comment-thread>:not(:first-child){margin-top: 8px;}
-
-.tox .tox-comment{position: relative;padding: 8px 8px 16px 8px;background: #fff;border: 1px solid #ccc;border-radius: 3px;box-shadow: 0 4px 8px 0 rgba(34,47,62,.1);}
-
-.tox .tox-comment__header{display: flex;color: #222f3e;align-items: center;justify-content: space-between;}
-
-.tox .tox-comment__date{font-size: 12px;color: rgba(34,47,62,.7);}
-
-.tox .tox-comment__body{position: relative;margin-top: 8px;font-size: 14px;font-style: normal;font-weight: 400;line-height: 1.3;color: #222f3e;text-transform: initial;}
-
-.tox .tox-comment__body textarea{width: 100%;white-space: normal;resize: none;}
-
-.tox .tox-comment__expander{padding-top: 8px;}
-
-.tox .tox-comment__expander p{font-size: 14px;font-style: normal;color: rgba(34,47,62,.7);}
-
-.tox .tox-comment__body p{margin: 0;}
-
-.tox .tox-comment__buttonspacing{padding-top: 16px;text-align: center;}
-
-.tox .tox-comment-thread__overlay::after{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 5;display: flex;background: #fff;content: "";opacity: .9;}
-
-.tox .tox-comment__reply{display: flex;flex-shrink: 0;flex-wrap: wrap;justify-content: flex-end;margin-top: 8px;}
-
-.tox .tox-comment__reply>:first-child{width: 100%;margin-bottom: 8px;}
-
-.tox .tox-comment__edit{display: flex;flex-wrap: wrap;justify-content: flex-end;margin-top: 16px;}
-
-.tox .tox-comment__gradient::after{position: absolute;bottom: 0;display: block;width: 100%;height: 5em;margin-top: -40px;background: linear-gradient(rgba(255,255,255,0),#fff);content: "";}
-
-.tox .tox-comment__overlay{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 5;display: flex;text-align: center;background: #fff;opacity: .9;flex-direction: column;flex-grow: 1;}
-
-.tox .tox-comment__loading-text{position: relative;display: flex;color: #222f3e;align-items: center;flex-direction: column;}
-
-.tox .tox-comment__loading-text>div{padding-bottom: 16px;}
-
-.tox .tox-comment__overlaytext{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 10;padding: 1em;font-size: 14px;flex-direction: column;}
-
-.tox .tox-comment__overlaytext p{color: #222f3e;text-align: center;background-color: #fff;box-shadow: 0 0 8px 8px #fff;}
-
-.tox .tox-comment__overlaytext div:nth-of-type(2){font-size: .8em;}
-
-.tox .tox-comment__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1103;display: flex;background-color: #fff;align-items: center;justify-content: center;}
-
-.tox .tox-comment__scroll{display: flex;flex-direction: column;flex-shrink: 1;overflow: auto;}
-
-.tox .tox-conversations{margin: 8px;}
-
-.tox:not([dir=rtl]) .tox-comment__edit{margin-left: 8px;}
-
-.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left: 8px;}
-
-.tox[dir=rtl] .tox-comment__edit{margin-right: 8px;}
-
-.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right: 8px;}
-
-.tox .tox-user{align-items: center;display: flex;}
-
-.tox .tox-user__avatar svg{fill: rgba(34,47,62,.7);}
-
-.tox .tox-user__name{font-size: 12px;font-style: normal;font-weight: 700;color: rgba(34,47,62,.7);text-transform: uppercase;}
-
-.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right: 8px;}
-
-.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left: 8px;}
-
-.tox[dir=rtl] .tox-user__avatar svg{margin-left: 8px;}
-
-.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right: 8px;}
-
-.tox .tox-dialog-wrap{position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 1100;display: flex;align-items: center;justify-content: center;}
-
-.tox .tox-dialog-wrap__backdrop{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1101;background-color: rgba(255,255,255,.75);}
-
-.tox .tox-dialog{position: relative;z-index: 1102;display: flex;width: 95vw;max-width: 480px;max-height: 100%;overflow: hidden;background-color: #fff;border-color: #ccc;border-style: solid;border-width: 1px;border-radius: 3px;box-shadow: 0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);flex-direction: column;}
-
-.tox .tox-dialog__header{position: relative;display: flex;padding: 8px 16px 0 16px;margin-bottom: 16px;font-size: 16px;color: #222f3e;background-color: #fff;border-bottom: none;align-items: center;justify-content: space-between;}
-
-.tox .tox-dialog__header .tox-button{z-index: 1;}
-
-.tox .tox-dialog__draghandle{position: absolute;top: 0;left: 0;width: 100%;height: 100%;cursor: grab;}
-
-.tox .tox-dialog__draghandle:active{cursor: grabbing;}
-
-.tox .tox-dialog__dismiss{margin-left: auto;}
-
-.tox .tox-dialog__title{margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 20px;font-style: normal;font-weight: 400;line-height: 1.3;text-transform: normal;}
-
-.tox .tox-dialog__body{display: flex;min-width: 0;padding: 0 16px;font-size: 16px;font-style: normal;font-weight: 400;line-height: 1.3;color: #222f3e;text-align: left;text-transform: normal;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-dialog__body-nav{align-items: flex-start;display: flex;flex-direction: column;}
-
-.tox .tox-dialog__body-nav-item{display: inline-block;margin-bottom: 8px;font-size: 14px;line-height: 1.3;color: rgba(34,47,62,.7);text-decoration: none;border-bottom: 2px solid transparent;}
-
-.tox .tox-dialog__body-nav-item--active{color: #207ab7;border-bottom: 2px solid #207ab7;}
-
-.tox .tox-dialog__body-content{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;max-height: 650px;overflow: auto;}
-
-.tox .tox-dialog__body-content>*{margin-top: 16px;margin-bottom: 0;}
-
-.tox .tox-dialog__body-content>:first-child{margin-top: 0;}
-
-.tox .tox-dialog__body-content>:last-child{margin-bottom: 0;}
-
-.tox .tox-dialog__body-content>:only-child{margin-top: 0;margin-bottom: 0;}
-
-.tox .tox-dialog--width-lg{height: 650px;max-width: 1200px;}
-
-.tox .tox-dialog--width-md{max-width: 800px;}
-
-.tox .tox-dialog--width-md .tox-dialog__body-content{overflow: auto;}
-
-.tox .tox-dialog__body-content--centered{text-align: center;}
-
-.tox .tox-dialog__body-content--spacious{margin-bottom: 16px;}
-
-.tox .tox-dialog__footer{display: flex;padding: 8px 16px;margin-top: 16px;background-color: #fff;border-top: 1px solid #ccc;align-items: center;justify-content: space-between;}
-
-.tox .tox-dialog__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1103;display: flex;background-color: rgba(255,255,255,.75);align-items: center;justify-content: center;}
-
-.tox .tox-dialog__table{width: 100%;border-collapse: collapse;}
-
-.tox .tox-dialog__table thead th{padding-bottom: 8px;font-weight: 700;}
-
-.tox .tox-dialog__table tbody tr{border-bottom: 1px solid #ccc;}
-
-.tox .tox-dialog__table tbody tr:last-child{border-bottom: none;}
-
-.tox .tox-dialog__table td{padding-top: 8px;padding-bottom: 8px;}
-
-.tox .tox-dialog__popups{position: absolute;z-index: 1100;width: 100%;}
-
-.tox .tox-dialog__body-iframe{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;}
-
-.tox .tox-dialog__body-iframe .tox-navobj{display: flex;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex: 1;-ms-flex-preferred-size: auto;height: 100%;}
-
-body.tox-dialog__disable-scroll{overflow: hidden;}
-
-.tox.tox-platform-ie .tox-dialog-wrap{position: -ms-device-fixed;}
-
-.tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right: 32px;}
-
-.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left: 8px;}
-
-.tox[dir=rtl] .tox-dialog__body{text-align: right;}
-
-.tox[dir=rtl] .tox-dialog__body-nav{margin-left: 32px;}
-
-.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right: 8px;}
-
-.tox .tox-dropzone-container{display: flex;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-dropzone{display: flex;min-height: 100px;padding: 10px;background: #fff;border: 2px dashed #ccc;box-sizing: border-box;align-items: center;flex-direction: column;flex-grow: 1;justify-content: center;}
-
-.tox .tox-dropzone p{margin: 0 0 16px 0;color: rgba(34,47,62,.7);}
-
-.tox .tox-edit-area{position: relative;display: flex;overflow: hidden;border-top: 1px solid #ccc;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-edit-area__iframe{position: absolute;width: 100%;height: 100%;background-color: #fff;border: 0;box-sizing: border-box;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox.tox-inline-edit-area{border: 1px dotted #ccc;}
-
-.tox .tox-control-wrap{flex: 1;position: relative;}
-
-.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display: none;}
-
-.tox .tox-control-wrap svg{display: block;}
-
-.tox .tox-control-wrap__status-icon-wrap{position: absolute;top: 50%;transform: translateY(-50%);}
-
-.tox .tox-control-wrap__status-icon-invalid svg{fill: #c00;}
-
-.tox .tox-control-wrap__status-icon-unknown svg{fill: orange;}
-
-.tox .tox-control-wrap__status-icon-valid svg{fill: green;}
-
-.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right: 32px;}
-
-.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right: 4px;}
-
-.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left: 32px;}
-
-.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left: 4px;}
-
-.tox .tox-autocompleter{max-width: 25em;}
-
-.tox .tox-autocompleter .tox-menu{max-width: 25em;}
-
-.tox .tox-color-input{display: flex;}
-
-.tox .tox-color-input .tox-textfield{display: flex;border-radius: 3px 0 0 3px;}
-
-.tox .tox-color-input span{display: flex;width: 35px;cursor: pointer;border-color: rgba(34,47,62,.2);border-style: solid;border-width: 1px 1px 1px 0;border-radius: 0 3px 3px 0;box-shadow: none;box-sizing: border-box;}
-
-.tox .tox-color-input span:focus{border-color: #207ab7;}
-
-.tox[dir=rtl] .tox-color-input .tox-textfield{border-radius: 0 3px 3px 0;}
-
-.tox[dir=rtl] .tox-color-input span{border-width: 1px 0 1px 1px;border-radius: 3px 0 0 3px;}
-
-.tox .tox-label,.tox .tox-toolbar-label{display: block;padding: 0 8px 0 0;font-size: 14px;font-style: normal;font-weight: 400;line-height: 1.3;color: rgba(34,47,62,.7);text-transform: normal;white-space: nowrap;}
-
-.tox .tox-toolbar-label{padding: 0 8px;}
-
-.tox[dir=rtl] .tox-label{padding: 0 0 0 8px;}
-
-.tox .tox-form{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;}
-
-.tox .tox-form__group{margin-bottom: 4px;box-sizing: border-box;}
-
-.tox .tox-form__group--error{color: #c00;}
-
-.tox .tox-form__group--collection{display: flex;}
-
-.tox .tox-form__grid{display: flex;flex-direction: row;flex-wrap: wrap;justify-content: space-between;}
-
-.tox .tox-form__grid--2col>.tox-form__group{width: calc(50% - (8px / 2));}
-
-.tox .tox-form__grid--3col>.tox-form__group{width: calc(100% / 3 - (8px / 2));}
-
-.tox .tox-form__grid--4col>.tox-form__group{width: calc(25% - (8px / 2));}
-
-.tox .tox-form__controls-h-stack{align-items: center;display: flex;}
-
-.tox .tox-form__group--inline{align-items: center;display: flex;}
-
-.tox .tox-form__group--stretched{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;}
-
-.tox .tox-form__group--stretched .tox-textarea{flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-form__group--stretched .tox-navobj{display: flex;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex: 1;-ms-flex-preferred-size: auto;height: 100%;}
-
-.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left: 4px;}
-
-.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right: 4px;}
-
-.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display: none;}
-
-.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield,.tox:not([dir=rtl]) .tox-selectfield select,.tox[dir=rtl] .tox-selectfield select{width: 100%;padding: 5px 4.75px;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 16px;line-height: 24px;color: #222f3e;background-color: #fff;border-color: #ccc;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;box-sizing: border-box;resize: none;-webkit-appearance: none;-moz-appearance: none;appearance: none;}
-
-.tox .tox-selectfield select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{border-color: #207ab7;outline: 0;box-shadow: none;}
-
-.tox .tox-toolbar-textfield{max-width: 250px;margin-top: 2px;margin-bottom: 3px;border-width: 0;}
-
-.tox .tox-naked-btn{display: block;padding: 0;margin: 0;color: #207ab7;cursor: pointer;background-color: transparent;border: 0;border-color: transparent;box-shadow: unset;}
-
-.tox .tox-naked-btn svg{display: block;fill: #222f3e;}
-
-.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left: 4px;}
-
-.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right: 4px;}
-
-.tox .tox-selectfield{position: relative;cursor: pointer;}
-
-.tox .tox-selectfield select::-ms-expand{display: none;}
-
-.tox .tox-selectfield svg{position: absolute;top: 50%;pointer-events: none;transform: translateY(-50%);}
-
-.tox:not([dir=rtl]) .tox-selectfield select{padding-right: 24px;}
-
-.tox:not([dir=rtl]) .tox-selectfield svg{right: 8px;}
-
-.tox[dir=rtl] .tox-selectfield select{padding-left: 24px;}
-
-.tox[dir=rtl] .tox-selectfield svg{left: 8px;}
-
-.tox .tox-textarea{white-space: pre-wrap;-webkit-appearance: textarea;-moz-appearance: textarea;appearance: textarea;}
-
-.tox-fullscreen{position: fixed;top: 0;left: 0;width: 100%;height: 100%;padding: 0;margin: 0;overflow: hidden;border: 0;}
-
-.tox-fullscreen .tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display: none;}
-
-.tox-fullscreen .tox.tox-tinymce.tox-fullscreen{z-index: 1200;}
-
-.tox-fullscreen .tox.tox-tinymce-aux{z-index: 1201;}
-
-.tox .tox-image-tools{width: 100%;}
-
-.tox .tox-image-tools__toolbar{align-items: center;display: flex;justify-content: center;}
-
-.tox .tox-image-tools__image{position: relative;width: 100%;height: 380px;overflow: auto;background-color: #666;}
-
-.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top: 8px;}
-
-.tox .tox-image-tools__image-bg{background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);}
-
-.tox .tox-image-tools__toolbar>.tox-spacer{flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-croprect-block{position: absolute;background: #000;opacity: .5;zoom: 1;}
-
-.tox .tox-croprect-handle{position: absolute;top: 0;left: 0;width: 20px;height: 20px;border: 2px solid #fff;}
-
-.tox .tox-croprect-handle-move{position: absolute;cursor: move;border: 0;}
-
-.tox .tox-croprect-handle-nw{top: 100px;left: 100px;margin: -2px 0 0 -2px;cursor: nw-resize;border-width: 2px 0 0 2px;}
-
-.tox .tox-croprect-handle-ne{top: 100px;left: 200px;margin: -2px 0 0 -20px;cursor: ne-resize;border-width: 2px 2px 0 0;}
-
-.tox .tox-croprect-handle-sw{top: 200px;left: 100px;margin: -20px 2px 0 -2px;cursor: sw-resize;border-width: 0 0 2px 2px;}
-
-.tox .tox-croprect-handle-se{top: 200px;left: 200px;margin: -20px 0 0 -20px;cursor: se-resize;border-width: 0 2px 2px 0;}
-
-.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left: 8px;}
-
-.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-left: 32px;}
-
-.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left: 32px;}
-
-.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right: 8px;}
-
-.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-right: 32px;}
-
-.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right: 32px;}
-
-.tox .tox-insert-table-picker{display: flex;flex-wrap: wrap;width: 169px;}
-
-.tox .tox-insert-table-picker>div{width: 16px;height: 16px;border-color: #ccc;border-style: solid;border-width: 0 1px 1px 0;box-sizing: content-box;}
-
-.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin: -4px 0;}
-
-.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color: rgba(32,122,183,.5);border-color: rgba(32,122,183,.5);}
-
-.tox .tox-insert-table-picker__label{display: block;width: 100%;padding: 4px;font-size: 14px;color: rgba(34,47,62,.7);text-align: center;}
-
-.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right: 0;}
-
-.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right: 0;}
-
-.tox .tox-menu{z-index: 1;display: inline-block;overflow: hidden;vertical-align: top;background-color: #fff;border: 1px solid #ccc;border-radius: 3px;box-shadow: 0 4px 8px 0 rgba(34,47,62,.1);}
-
-.tox .tox-menu.tox-collection.tox-collection--list{padding: 0;}
-
-.tox .tox-menu.tox-collection.tox-collection--toolbar{padding: 4px;}
-
-.tox .tox-menu.tox-collection.tox-collection--grid{padding: 4px;}
-
-.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin: 0;}
-
-.tox .tox-menubar{display: flex;padding: 0 4px;margin-bottom: -1px;background: url("data:image/svg+xml;charset=utf8,%3Csvg height='43px' viewBox='0 0 40 43px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='42px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color: #fff;flex: 0 0 auto;flex-shrink: 0;flex-wrap: wrap;}
-
-.tox .tox-mbtn{display: flex;width: auto;height: 34px;padding: 0 4px;margin: 2px 0 3px 0;overflow: hidden;font-size: 14px;font-style: normal;font-weight: 400;color: #222f3e;text-transform: normal;background: 0 0;border: 0;border-radius: 3px;outline: 0;box-shadow: none;align-items: center;flex: 0 0 auto;justify-content: center;}
-
-.tox .tox-mbtn[disabled]{color: rgba(34,47,62,.5);cursor: not-allowed;background-color: none;border-color: none;box-shadow: none;}
-
-.tox .tox-mbtn:hover:not(:disabled){color: #222f3e;background: #dee0e2;box-shadow: none;}
-
-.tox .tox-mbtn:focus:not(:disabled){color: #222f3e;background: #dee0e2;box-shadow: none;}
-
-.tox .tox-mbtn--active{color: #222f3e;background: #c8cbcf;box-shadow: none;}
-
-.tox .tox-mbtn__select-label{margin: 0 4px;font-weight: 400;cursor: default;}
-
-.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor: not-allowed;}
-
-.tox .tox-mbtn__select-chevron{display: flex;display: none;width: 16px;align-items: center;justify-content: center;}
-
-.tox .tox-notification{display: grid;padding: 5px;margin-top: 5px;background-color: #fffaea;border-color: #ffe89d;border-style: solid;border-width: 1px;opacity: 0;box-sizing: border-box;transition: transform .1s ease-in,opacity 150ms ease-in;grid-template-columns: minmax(40px,1fr) auto minmax(40px,1fr);}
-
-.tox .tox-notification--in{opacity: 1;}
-
-.tox .tox-notification--success{background-color: #dff0d8;border-color: #d6e9c6;}
-
-.tox .tox-notification--error{background-color: #f2dede;border-color: #ebccd1;}
-
-.tox .tox-notification--warn{background-color: #fcf8e3;border-color: #faebcc;}
-
-.tox .tox-notification--info{background-color: #d9edf7;border-color: #779ecb;}
-
-.tox .tox-notification__body{font-size: 14px;color: #222f3e;text-align: center;word-break: break-all;word-break: break-word;white-space: normal;align-self: center;grid-column-end: 3;-ms-grid-column-span: 1;grid-column-start: 2;grid-row-end: 2;grid-row-start: 1;}
-
-.tox .tox-notification__body>*{margin: 0;}
-
-.tox .tox-notification__body>*+*{margin-top: 1rem;}
-
-.tox .tox-notification__icon{align-self: center;-ms-grid-column-align: end;grid-column-end: 2;-ms-grid-column-span: 1;grid-column-start: 1;grid-row-end: 2;grid-row-start: 1;justify-self: end;}
-
-.tox .tox-notification__icon svg{display: block;}
-
-.tox .tox-notification__dismiss{align-self: start;-ms-grid-column-align: end;grid-column-end: 4;-ms-grid-column-span: 1;grid-column-start: 3;grid-row-end: 2;grid-row-start: 1;justify-self: end;}
-
-.tox .tox-notification .tox-progress-bar{-ms-grid-column-align: center;grid-column-end: 4;-ms-grid-column-span: 3;grid-column-start: 1;grid-row-end: 3;-ms-grid-row-span: 1;grid-row-start: 2;justify-self: center;}
-
-.tox .tox-pop{position: relative;display: inline-block;}
-
-.tox .tox-pop--resizing{transition: width .1s ease;}
-
-.tox .tox-pop--resizing .tox-toolbar{flex-wrap: nowrap;}
-
-.tox .tox-pop__dialog{min-width: 0;overflow: hidden;background-color: #fff;border: 1px solid #ccc;border-radius: 3px;box-shadow: 0 1px 3px rgba(0,0,0,.15);}
-
-.tox .tox-pop__dialog>:not(.tox-toolbar){margin: 4px 4px 4px 8px;}
-
-.tox .tox-pop__dialog .tox-toolbar{background-color: transparent;}
-
-.tox .tox-pop::after,.tox .tox-pop::before{position: absolute;display: block;width: 0;height: 0;border-style: solid;content: '';}
-
-.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{top: 100%;left: 50%;}
-
-.tox .tox-pop.tox-pop--bottom::after{margin-top: -1px;margin-left: -8px;border-color: #fff transparent transparent transparent;border-width: 8px;}
-
-.tox .tox-pop.tox-pop--bottom::before{margin-left: -9px;border-color: #ccc transparent transparent transparent;border-width: 9px;}
-
-.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{top: 0;left: 50%;transform: translateY(-100%);}
-
-.tox .tox-pop.tox-pop--top::after{margin-top: 1px;margin-left: -8px;border-color: transparent transparent #fff transparent;border-width: 8px;}
-
-.tox .tox-pop.tox-pop--top::before{margin-left: -9px;border-color: transparent transparent #ccc transparent;border-width: 9px;}
-
-.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{top: calc(50% - 1px);left: 0;transform: translateY(-50%);}
-
-.tox .tox-pop.tox-pop--left::after{margin-left: -15px;border-color: transparent #fff transparent transparent;border-width: 8px;}
-
-.tox .tox-pop.tox-pop--left::before{margin-left: -19px;border-color: transparent #ccc transparent transparent;border-width: 10px;}
-
-.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{top: calc(50% + 1px);left: 100%;transform: translateY(-50%);}
-
-.tox .tox-pop.tox-pop--right::after{margin-left: -1px;border-color: transparent transparent transparent #fff;border-width: 8px;}
-
-.tox .tox-pop.tox-pop--right::before{margin-left: -1px;border-color: transparent transparent transparent #ccc;border-width: 10px;}
-
-.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left: 20px;}
-
-.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left: calc(100% - 20px);}
-
-.tox .tox-sidebar-wrap{display: flex;flex-direction: row;flex-grow: 1;min-height: 0;}
-
-.tox .tox-sidebar{display: flex;flex-direction: row;justify-content: flex-end;}
-
-.tox .tox-sidebar__slider{display: flex;overflow: hidden;}
-
-.tox .tox-sidebar__pane-container{display: flex;}
-
-.tox .tox-sidebar__pane{display: flex;}
-
-.tox .tox-sidebar--sliding-closed{opacity: 0;}
-
-.tox .tox-sidebar--sliding-open{opacity: 1;}
-
-.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition: width .5s ease,opacity .5s ease;}
-
-.tox .tox-slider{position: relative;display: flex;height: 24px;align-items: center;flex: 1;-ms-flex-preferred-size: auto;justify-content: center;}
-
-.tox .tox-slider__rail{width: 100%;height: 10px;min-width: 120px;background-color: transparent;border: 1px solid #ccc;border-radius: 3px;}
-
-.tox .tox-slider__handle{position: absolute;top: 50%;left: 50%;width: 14px;height: 24px;background-color: #207ab7;border: 2px solid #185d8c;border-radius: 3px;transform: translateX(-50%) translateY(-50%);box-shadow: none;}
-
-.tox .tox-source-code{overflow: auto;}
-
-.tox .tox-spinner{display: flex;}
-
-.tox .tox-spinner>div{width: 8px;height: 8px;background-color: rgba(34,47,62,.7);border-radius: 100%;animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;}
-
-.tox .tox-spinner>div:nth-child(1){animation-delay: -.32s;}
-
-.tox .tox-spinner>div:nth-child(2){animation-delay: -.16s;}@keyframes tam-bouncing-dots{0%,100%,80%{transform: scale(0);}
-
-40%{transform: scale(1);}}
-
-.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left: 4px;}
-
-.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right: 4px;}
-
-.tox .tox-statusbar{position: relative;display: flex;height: 18px;padding: 0 8px;overflow: hidden;font-size: 12px;color: rgba(34,47,62,.7);text-transform: uppercase;background-color: #fff;border-top: 1px solid #ccc;align-items: center;flex: 0 0 auto;}
-
-.tox .tox-statusbar a{color: rgba(34,47,62,.7);text-decoration: none;}
-
-.tox .tox-statusbar a:hover{text-decoration: underline;}
-
-.tox .tox-statusbar__text-container{display: flex;flex: 1 1 auto;justify-content: flex-end;overflow: hidden;}
-
-.tox .tox-statusbar__path{display: flex;flex: 1 1 auto;margin-right: auto;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
-
-.tox .tox-statusbar__path>*{display: inline;white-space: nowrap;}
-
-.tox .tox-statusbar__wordcount{flex: 0 0 auto;margin-left: 1ch;}
-
-.tox .tox-statusbar__resize-handle{display: flex;padding-left: 1ch;margin-right: -8px;margin-left: auto;cursor: nwse-resize;align-items: flex-end;align-self: stretch;flex: 0 0 auto;justify-content: flex-end;}
-
-.tox .tox-statusbar__resize-handle svg{display: block;fill: rgba(34,47,62,.7);}
-
-.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right: 4px;}
-
-.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left: 1ch;}
-
-.tox[dir=rtl] .tox-statusbar{flex-direction: row-reverse;}
-
-.tox[dir=rtl] .tox-statusbar__path>*{margin-left: 4px;}
-
-.tox .tox-throbber{z-index: 1400;}
-
-.tox .tox-throbber__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;display: flex;background-color: rgba(255,255,255,.6);align-items: center;justify-content: center;}
-
-.tox .tox-tbtn{display: flex;width: 34px;height: 34px;padding: 0;margin: 2px 0 3px 0;overflow: hidden;font-size: 14px;font-style: normal;font-weight: 400;color: #222f3e;text-transform: normal;background: 0 0;border: 0;border-radius: 3px;outline: 0;box-shadow: none;align-items: center;flex: 0 0 auto;justify-content: center;}
-
-.tox .tox-tbtn svg{display: block;fill: #222f3e;}
-
-.tox .tox-tbtn.tox-tbtn-more{width: inherit;padding-right: 5px;padding-left: 5px;}
-
-.tox .tox-tbtn--enabled{color: #222f3e;background: #c8cbcf;box-shadow: none;}
-
-.tox .tox-tbtn--enabled>*{transform: none;}
-
-.tox .tox-tbtn--enabled svg{fill: #222f3e;}
-
-.tox .tox-tbtn:hover{color: #222f3e;background: #dee0e2;box-shadow: none;}
-
-.tox .tox-tbtn:hover svg{fill: #222f3e;}
-
-.tox .tox-tbtn:focus{color: #222f3e;background: #dee0e2;box-shadow: none;}
-
-.tox .tox-tbtn:focus svg{fill: #222f3e;}
-
-.tox .tox-tbtn:active{color: #222f3e;background: #c8cbcf;box-shadow: none;}
-
-.tox .tox-tbtn:active svg{fill: #222f3e;}
-
-.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{color: rgba(34,47,62,.5);cursor: not-allowed;background: 0 0;box-shadow: none;}
-
-.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill: rgba(34,47,62,.5);}
-
-.tox .tox-tbtn:active>*{transform: none;}
-
-.tox .tox-tbtn--md{width: 51px;height: 51px;}
-
-.tox .tox-tbtn--lg{width: 68px;height: 68px;flex-direction: column;}
-
-.tox .tox-tbtn--return{width: 16px;height: unset;align-self: stretch;}
-
-.tox .tox-tbtn--labeled{width: unset;padding: 0 4px;}
-
-.tox .tox-tbtn__vlabel{display: block;margin-bottom: 4px;font-size: 10px;font-weight: 400;letter-spacing: -.025em;white-space: nowrap;}
-
-.tox .tox-tbtn--select{width: auto;padding: 0 4px;margin: 2px 0 3px 0;}
-
-.tox .tox-tbtn__select-label{margin: 0 4px;font-weight: 400;cursor: default;}
-
-.tox .tox-tbtn__select-chevron{align-items: center;display: flex;justify-content: center;width: 16px;}
-
-.tox .tox-tbtn__select-chevron svg{fill: rgba(34,47,62,.7);}
-
-.tox .tox-tbtn--bespoke .tox-tbtn__select-label{width: 7em;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
-
-.tox .tox-split-button{display: flex;margin: 2px 0 3px 0;overflow: hidden;border: 0;border-radius: 3px;box-sizing: border-box;}
-
-.tox .tox-split-button:hover{box-shadow: 0 0 0 1px #dee0e2 inset;}
-
-.tox .tox-split-button:focus{color: #222f3e;background: #dee0e2;box-shadow: none;}
-
-.tox .tox-split-button>*{border-radius: 0;}
-
-.tox .tox-split-button__chevron{width: 16px;}
-
-.tox .tox-split-button__chevron svg{fill: rgba(34,47,62,.7);}
-
-.tox .tox-pop .tox-split-button__chevron svg{transform: rotate(-90deg);}
-
-.tox .tox-split-button .tox-tbtn{margin: 0;}
-
-.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{color: rgba(34,47,62,.5);background: 0 0;box-shadow: none;}
-
-.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{display: flex;padding: 0 0;margin-bottom: -1px;background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color: #fff;border-top: 1px solid #ccc;flex: 0 0 auto;flex-shrink: 0;flex-wrap: wrap;}
-
-.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height: 0;opacity: 0;visibility: hidden;}
-
-.tox .tox-toolbar__overflow--growing{transition: height .3s ease,opacity .2s linear .1s;}
-
-.tox .tox-toolbar__overflow--shrinking{transition: opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s;}
-
-.tox .tox-pop .tox-toolbar{border-width: 0;}
-
-.tox .tox-toolbar--no-divider{background-image: none;}
-
-.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color: #fff;border: 1px solid #ccc;border-radius: 3px;box-shadow: 0 1px 3px rgba(0,0,0,.15);}
-
-.tox.tox-tinymce-aux:not([dir=rtl]) .tox-toolbar__overflow{margin-left: 4px;}
-
-.tox[dir=rtl] .tox-tbtn__icon-rtl svg{transform: rotateY(180deg);}
-
-.tox[dir=rtl].tox-tinymce-aux .tox-toolbar__overflow{margin-right: 4px;}
-
-.tox .tox-toolbar__group{display: flex;padding: 0 4px;margin: 0 0;align-items: center;flex-wrap: wrap;}
-
-.tox .tox-toolbar__group--pull-right{margin-left: auto;}
-
-.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right: 1px solid #ccc;}
-
-.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left: 1px solid #ccc;}
-
-.tox .tox-tooltip{position: relative;display: inline-block;padding: 8px;}
-
-.tox .tox-tooltip__body{padding: 4px 8px;font-size: 14px;font-style: normal;font-weight: 400;color: rgba(255,255,255,.75);text-transform: normal;background-color: #222f3e;border-radius: 3px;box-shadow: 0 2px 4px rgba(34,47,62,.3);}
-
-.tox .tox-tooltip__arrow{position: absolute;}
-
-.tox .tox-tooltip--down .tox-tooltip__arrow{position: absolute;bottom: 0;left: 50%;border-top: 8px solid #222f3e;border-right: 8px solid transparent;border-left: 8px solid transparent;transform: translateX(-50%);}
-
-.tox .tox-tooltip--up .tox-tooltip__arrow{position: absolute;top: 0;left: 50%;border-right: 8px solid transparent;border-bottom: 8px solid #222f3e;border-left: 8px solid transparent;transform: translateX(-50%);}
-
-.tox .tox-tooltip--right .tox-tooltip__arrow{position: absolute;top: 50%;right: 0;border-top: 8px solid transparent;border-bottom: 8px solid transparent;border-left: 8px solid #222f3e;transform: translateY(-50%);}
-
-.tox .tox-tooltip--left .tox-tooltip__arrow{position: absolute;top: 50%;left: 0;border-top: 8px solid transparent;border-right: 8px solid #222f3e;border-bottom: 8px solid transparent;transform: translateY(-50%);}
-
-.tox .tox-well{width: 100%;padding: 8px;border: 1px solid #ccc;border-radius: 3px;}
-
-.tox .tox-well>:first-child{margin-top: 0;}
-
-.tox .tox-well>:last-child{margin-bottom: 0;}
-
-.tox .tox-well>:only-child{margin: 0;}
-
-.tox .tox-custom-editor{display: flex;height: 525px;border: 1px solid #ccc;border-radius: 3px;}
-
-.tox .tox-dialog-loading::before{position: absolute;z-index: 1000;width: 100%;height: 100%;background-color: rgba(0,0,0,.5);content: "";}
-
-.tox .tox-tab{cursor: pointer;}
-
-.tox .tox-dialog__content-js{display: flex;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox .tox-dialog__body-content .tox-collection{display: flex;flex: 1;-ms-flex-preferred-size: auto;}
-
-.tox ul{display: block;list-style-type: disc;-webkit-margin-before: 1em;margin-block-start: 1em;-webkit-margin-after: 1em;margin-block-end: 1em;-webkit-margin-start: 0;margin-inline-start: 0;-webkit-margin-end: 0;margin-inline-end: 0;-webkit-padding-start: 40px;padding-inline-start: 40px;}
-
-.tox a{color: #2276d2;cursor: pointer;}
-
-.tox .tox-image-tools-edit-panel{height: 60px;}
-
-.tox .tox-image-tools__sidebar{height: 60px;}
diff --git a/public/resource/tinymce/skins/ui/oxide/skin.mobile.min.css b/public/resource/tinymce/skins/ui/oxide/skin.mobile.min.css
deleted file mode 100644
index 14847d0..0000000
--- a/public/resource/tinymce/skins/ui/oxide/skin.mobile.min.css
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- */
-.tinymce-mobile-outer-container{all: initial;display: block;}
-
-.tinymce-mobile-outer-container *{float: none;padding: 0;margin: 0;line-height: 1;text-shadow: none;white-space: nowrap;cursor: inherit;border: 0;outline: 0;box-sizing: initial;-webkit-tap-highlight-color: transparent;}
-
-.tinymce-mobile-icon-arrow-back::before{content: "\e5cd";}
-
-.tinymce-mobile-icon-image::before{content: "\e412";}
-
-.tinymce-mobile-icon-cancel-circle::before{content: "\e5c9";}
-
-.tinymce-mobile-icon-full-dot::before{content: "\e061";}
-
-.tinymce-mobile-icon-align-center::before{content: "\e234";}
-
-.tinymce-mobile-icon-align-left::before{content: "\e236";}
-
-.tinymce-mobile-icon-align-right::before{content: "\e237";}
-
-.tinymce-mobile-icon-bold::before{content: "\e238";}
-
-.tinymce-mobile-icon-italic::before{content: "\e23f";}
-
-.tinymce-mobile-icon-unordered-list::before{content: "\e241";}
-
-.tinymce-mobile-icon-ordered-list::before{content: "\e242";}
-
-.tinymce-mobile-icon-font-size::before{content: "\e245";}
-
-.tinymce-mobile-icon-underline::before{content: "\e249";}
-
-.tinymce-mobile-icon-link::before{content: "\e157";}
-
-.tinymce-mobile-icon-unlink::before{content: "\eca2";}
-
-.tinymce-mobile-icon-color::before{content: "\e891";}
-
-.tinymce-mobile-icon-previous::before{content: "\e314";}
-
-.tinymce-mobile-icon-next::before{content: "\e315";}
-
-.tinymce-mobile-icon-large-font::before,.tinymce-mobile-icon-style-formats::before{content: "\e264";}
-
-.tinymce-mobile-icon-undo::before{content: "\e166";}
-
-.tinymce-mobile-icon-redo::before{content: "\e15a";}
-
-.tinymce-mobile-icon-removeformat::before{content: "\e239";}
-
-.tinymce-mobile-icon-small-font::before{content: "\e906";}
-
-.tinymce-mobile-format-matches::after,.tinymce-mobile-icon-readonly-back::before{content: "\e5ca";}
-
-.tinymce-mobile-icon-small-heading::before{content: "small";}
-
-.tinymce-mobile-icon-large-heading::before{content: "large";}
-
-.tinymce-mobile-icon-large-heading::before,.tinymce-mobile-icon-small-heading::before{font-family: sans-serif;font-size: 80%;}
-
-.tinymce-mobile-mask-edit-icon::before{content: "\e254";}
-
-.tinymce-mobile-icon-back::before{content: "\e5c4";}
-
-.tinymce-mobile-icon-heading::before{font-family: sans-serif;font-size: 80%;font-weight: 700;content: "Headings";}
-
-.tinymce-mobile-icon-h1::before{font-weight: 700;content: "H1";}
-
-.tinymce-mobile-icon-h2::before{font-weight: 700;content: "H2";}
-
-.tinymce-mobile-icon-h3::before{font-weight: 700;content: "H3";}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{position: absolute;top: 0;display: flex;width: 100%;height: 100%;background: rgba(51,51,51,.5);align-items: center;justify-content: center;}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{display: flex;font-family: sans-serif;font-size: 1em;border-radius: 50%;align-items: center;flex-direction: column;justify-content: space-between;}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{display: flex;width: 2.1em;height: 2.1em;border-radius: 50%;align-items: center;justify-content: center;}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{align-items: center;display: flex;justify-content: center;flex-direction: column;font-size: 1em;}@media only screen and (min-device-width: 700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size: 1.2em;}}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{display: flex;width: 2.1em;height: 2.1em;color: #207ab7;background-color: #fff;border-radius: 50%;align-items: center;justify-content: center;}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before{font-family: tinymce-mobile,sans-serif;content: "\e900";}
-
-.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index: 2;}
-
-.tinymce-mobile-android-container.tinymce-mobile-android-maximized{position: fixed;top: 0;right: 0;bottom: 0;left: 0;display: flex;background: #fff;border: none;flex-direction: column;}
-
-.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position: relative;}
-
-.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display: flex;flex-grow: 1;}
-
-.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display: flex !important;flex-grow: 1;height: auto !important;}
-
-.tinymce-mobile-android-scroll-reload{overflow: hidden;}
-
-:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top: 23px;}
-
-.tinymce-mobile-toolstrip{z-index: 1;display: flex;background: #fff;flex: 0 0 auto;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{display: flex;width: 100%;height: 2.5em;background-color: #fff;border-bottom: 1px solid #ccc;align-items: center;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{align-items: center;display: flex;height: 100%;flex-shrink: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{align-items: center;display: flex;height: 100%;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background: #f44336;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{flex-grow: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-right: .5em;padding-left: .5em;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{display: flex;height: 80%;margin-right: 2px;margin-left: 2px;align-items: center;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{color: #ccc;background: #c8cbcf;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{color: #eceff1;background: #207ab7;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{display: flex;height: 100%;padding-top: .4em;padding-bottom: .4em;align-items: center;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{position: relative;display: flex;width: 100%;min-height: 1.5em;padding-right: 0;padding-left: 0;overflow: hidden;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{display: flex;width: 100%;height: 100%;transition: left cubic-bezier(.4,0,1,1) .15s;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{display: flex;flex: 0 0 auto;justify-content: space-between;width: 100%;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family: sans-serif;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{position: relative;display: flex;flex-grow: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{position: absolute;right: 0;height: 100%;padding-right: 2px;font-size: .6em;font-weight: 700;color: #888;background: inherit;border: none;border-radius: 50%;align-self: center;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display: none;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous{align-items: center;display: flex;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before{display: flex;height: 100%;padding-right: .5em;padding-left: .5em;font-weight: 700;align-items: center;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before{visibility: hidden;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{padding-top: 3px;margin: 0 2px;font-size: 10px;line-height: 10px;color: #ccc;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color: #c8cbcf;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before{margin-right: .9em;margin-left: .5em;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before{margin-right: .5em;margin-left: .9em;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{position: relative;display: flex;padding: .28em 0;margin-right: 0;margin-left: 0;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{align-items: center;display: flex;flex-grow: 1;height: 100%;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{display: flex;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #ccc;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-right: 2em;padding-left: 2em;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{align-items: center;display: flex;flex-grow: 1;height: 100%;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{display: flex;height: .2em;margin-top: .3em;margin-bottom: .3em;background: linear-gradient(to right,red 0,#feff00 17%,#0f0 33%,#00feff 50%,#00f 67%,#ff00fe 83%,red 100%);flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{width: 1.2em;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #000;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{width: 1.2em;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #fff;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{position: absolute;top: 0;bottom: 0;left: -10px;display: flex;width: .5em;height: .5em;margin: auto;color: #fff;background-color: #455a64;border: .5em solid rgba(136,136,136,0);border-radius: 3em;transition: border 120ms cubic-bezier(.39,.58,.57,1);background-clip: padding-box;align-items: center;justify-content: center;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border: .5em solid rgba(136,136,136,.39);}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{align-items: center;display: flex;height: 100%;flex: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{flex-direction: column;justify-content: center;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{align-items: center;display: flex;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height: 100%;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display: flex;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{padding-top: .1em;padding-bottom: .1em;padding-left: 5px;font-size: .85em;color: #455a64;background: #fff;border: none;border-radius: 0;flex-grow: 1;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color: #888;}
-
-.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color: #888;}
-
-.tinymce-mobile-dropup{display: flex;width: 100%;overflow: hidden;background: #fff;}
-
-.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{transition: height .3s ease-out;}
-
-.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{transition: height .3s ease-in;}
-
-.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{flex-grow: 0;}
-
-.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){flex-grow: 1;}
-
-.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 200px;}@media only screen and (orientation: landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 200px;}}@media only screen and (min-device-width: 320px) and (max-device-width: 568px) and (orientation: landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 150px;}}
-
-.tinymce-mobile-styles-menu{position: relative;width: 100%;overflow: hidden;font-family: sans-serif;outline: 4px solid #000;}
-
-.tinymce-mobile-styles-menu [role=menu]{position: absolute;display: flex;width: 100%;height: 100%;flex-direction: column;}
-
-.tinymce-mobile-styles-menu [role=menu].transitioning{transition: transform .5s ease-in-out;}
-
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{position: relative;display: flex;padding: 1em 1em;color: #455a64;cursor: pointer;border-bottom: 1px solid #ddd;}
-
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before{font-family: tinymce-mobile,sans-serif;color: #455a64;content: "\e314";}
-
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after{position: absolute;right: 0;padding-right: 1em;padding-left: 1em;font-family: tinymce-mobile,sans-serif;color: #455a64;content: "\e315";}
-
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after{position: absolute;right: 0;padding-right: 1em;padding-left: 1em;font-family: tinymce-mobile,sans-serif;}
-
-.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser,.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator{display: flex;min-height: 2.5em;padding-right: 1em;padding-left: 1em;color: #455a64;background: #fff;border-top: #455a64;align-items: center;}
-
-.tinymce-mobile-styles-menu [data-transitioning-destination=before][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=before]{transform: translate(-100%);}
-
-.tinymce-mobile-styles-menu [data-transitioning-destination=current][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=current]{transform: translate(0);}
-
-.tinymce-mobile-styles-menu [data-transitioning-destination=after][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=after]{transform: translate(100%);}@font-face{font-family: tinymce-mobile;font-style: normal;font-weight: 400;src: url(fonts/tinymce-mobile.woff?8x92w3) format('woff');}@media (min-device-width: 700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size: 25px;}}@media (max-device-width: 700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size: 18px;}}
-
-.tinymce-mobile-icon{font-family: tinymce-mobile,sans-serif;}
-
-.mixin-flex-and-centre{align-items: center;display: flex;justify-content: center;}
-
-.mixin-flex-bar{align-items: center;display: flex;height: 100%;}
-
-.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe{width: 100%;background-color: #fff;}
-
-.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{position: fixed;right: 2em;bottom: 1em;display: flex;width: 2.1em;height: 2.1em;font-size: 1em;color: #fff;background-color: #207ab7;border-radius: 50%;align-items: center;justify-content: center;}@media only screen and (min-device-width: 700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size: 1.2em;}}
-
-.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{height: 300px;overflow: hidden;}
-
-.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe{height: 100%;}
-
-.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display: none;}
-
-input[type=file]::-webkit-file-upload-button{display: none;}@media only screen and (min-device-width: 320px) and (max-device-width: 568px) and (orientation: landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom: 50%;}}
diff --git a/src/App.vue b/src/App.vue
deleted file mode 100644
index 2177ab8..0000000
--- a/src/App.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-<template>
-	<ConfigProvider :locale="getAntdLocale">
-		<AppProvider>
-			<RouterView />
-		</AppProvider>
-	</ConfigProvider>
-</template>
-
-<script lang="ts" setup>
-	import { ConfigProvider } from 'ant-design-vue'
-	import { AppProvider } from '/@/components/Application'
-	import { useTitle } from '/@/hooks/web/useTitle'
-	import { useLocale } from '/@/locales/useLocale'
-
-	// 瑙e喅鏃ユ湡鏃堕棿鍥介檯鍖栭棶棰�
-	import 'dayjs/locale/zh-cn'
-	// support Multi-language
-	const { getAntdLocale } = useLocale()
-
-	useTitle()
-</script>
diff --git a/src/api/common/api.ts b/src/api/common/api.ts
deleted file mode 100644
index 47d5cfb..0000000
--- a/src/api/common/api.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { message } from 'ant-design-vue';
-import { useGlobSetting } from '/@/hooks/setting';
-const globSetting = useGlobSetting();
-const baseUploadUrl = globSetting.uploadUrl;
-enum Api {
-  positionList = '/sys/position/list',
-  userList = '/sys/user/list',
-  roleList = '/sys/role/list',
-  queryDepartTreeSync = '/sys/sysDepart/queryDepartTreeSync',
-  queryTreeList = '/sys/sysDepart/queryTreeList',
-  loadTreeData = '/sys/category/loadTreeData',
-  loadDictItem = '/sys/category/loadDictItem/',
-  getDictItems = '/sys/dict/getDictItems/',
-  getTableList = '/sys/user/queryUserComponentData',
-  getCategoryData = '/sys/category/loadAllData',
-}
-
-/**
- * 涓婁紶鐖惰矾寰�
- */
-export const uploadUrl = `${baseUploadUrl}/sys/common/upload`;
-
-/**
- * 鑱屽姟鍒楄〃
- * @param params
- */
-export const getPositionList = (params) => {
-  return defHttp.get({ url: Api.positionList, params });
-};
-
-/**
- * 鐢ㄦ埛鍒楄〃
- * @param params
- */
-export const getUserList = (params) => {
-  return defHttp.get({ url: Api.userList, params });
-};
-
-/**
- * 瑙掕壊鍒楄〃
- * @param params
- */
-export const getRoleList = (params) => {
-  return defHttp.get({ url: Api.roleList, params });
-};
-
-/**
- * 寮傛鑾峰彇閮ㄩ棬鏍戝垪琛�
- */
-export const queryDepartTreeSync = (params?) => {
-  return defHttp.get({ url: Api.queryDepartTreeSync, params });
-};
-/**
- * 鑾峰彇閮ㄩ棬鏍戝垪琛�
- */
-export const queryTreeList = (params?) => {
-  return defHttp.get({ url: Api.queryTreeList, params });
-};
-
-/**
- * 鍒嗙被瀛楀吀鏍戞帶浠� 鍔犺浇鑺傜偣
- */
-export const loadTreeData = (params?) => {
-  return defHttp.get({ url: Api.loadTreeData, params });
-};
-
-/**
- * 鏍规嵁瀛楀吀code鍔犺浇瀛楀吀text
- */
-export const loadDictItem = (params?) => {
-  return defHttp.get({ url: Api.loadDictItem, params });
-};
-
-/**
- * 鏍规嵁瀛楀吀code鍔犺浇瀛楀吀text
- */
-export const getDictItems = (dictCode) => {
-  return defHttp.get({ url: Api.getDictItems + dictCode }, { joinTime: false });
-};
-/**
- * 閮ㄩ棬鐢ㄦ埛modal閫夋嫨鍒楄〃鍔犺浇list
- */
-export const getTableList = (params) => {
-  return defHttp.get({ url: Api.getTableList, params });
-};
-/**
- * 鍔犺浇鍏ㄩ儴鍒嗙被瀛楀吀鏁版嵁
- */
-export const loadCategoryData = (params) => {
-  return defHttp.get({ url: Api.getCategoryData, params });
-};
-/**
- * 鏂囦欢涓婁紶
- */
-export const uploadFile = (params, success) => {
-  return defHttp.uploadFile({ url: uploadUrl }, params, { success });
-};
-/**
- * 涓嬭浇鏂囦欢
- * @param url 鏂囦欢璺緞
- * @param fileName 鏂囦欢鍚�
- * @param parameter
- * @returns {*}
- */
-export const downloadFile = (url, fileName?, parameter?) => {
-  return getFileblob(url, parameter).then((data) => {
-    if (!data || data.size === 0) {
-      message.warning('鏂囦欢涓嬭浇澶辫触');
-      return;
-    }
-    if (typeof window.navigator.msSaveBlob !== 'undefined') {
-      window.navigator.msSaveBlob(new Blob([data]), fileName);
-    } else {
-      let url = window.URL.createObjectURL(new Blob([data]));
-      let link = document.createElement('a');
-      link.style.display = 'none';
-      link.href = url;
-      link.setAttribute('download', fileName);
-      document.body.appendChild(link);
-      link.click();
-      document.body.removeChild(link); //涓嬭浇瀹屾垚绉婚櫎鍏冪礌
-      window.URL.revokeObjectURL(url); //閲婃斁鎺塨lob瀵硅薄
-    }
-  });
-};
-
-/**
- * 涓嬭浇鏂囦欢 鐢ㄤ簬excel瀵煎嚭
- * @param url
- * @param parameter
- * @returns {*}
- */
-export const getFileblob = (url, parameter) => {
-  return defHttp.get(
-    {
-      url: url,
-      params: parameter,
-      responseType: 'blob',
-    },
-    { isTransformResponse: false }
-  );
-};
-
-/**
- * 銆愮敤浜庤瘎璁哄姛鑳姐�戣嚜瀹氫箟鏂囦欢涓婁紶-鏂规硶
- */
-export const uploadMyFile = (url, data) => {
-  return defHttp.uploadMyFile(url, data);
-};
diff --git a/src/api/demo/account.ts b/src/api/demo/account.ts
deleted file mode 100644
index 2c3ea06..0000000
--- a/src/api/demo/account.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { GetAccountInfoModel } from './model/accountModel';
-
-enum Api {
-  ACCOUNT_INFO = '/mock/account/getAccountInfo',
-  SESSION_TIMEOUT = '/mock/user/sessionTimeout',
-  TOKEN_EXPIRED = '/mock/user/tokenExpired',
-}
-
-// Get personal center-basic settings
-
-export const accountInfoApi = () => defHttp.get<GetAccountInfoModel>({ url: Api.ACCOUNT_INFO });
-
-export const sessionTimeoutApi = () => defHttp.post<void>({ url: Api.SESSION_TIMEOUT });
-
-export const tokenExpiredApi = () => defHttp.post<void>({ url: Api.TOKEN_EXPIRED });
diff --git a/src/api/demo/error.ts b/src/api/demo/error.ts
deleted file mode 100644
index 3ce6072..0000000
--- a/src/api/demo/error.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  // The address does not exist
-  Error = '/error',
-}
-
-/**
- * @description: Trigger ajax error
- */
-
-export const fireErrorApi = () => defHttp.get({ url: Api.Error });
diff --git a/src/api/demo/model/accountModel.ts b/src/api/demo/model/accountModel.ts
deleted file mode 100644
index 4594393..0000000
--- a/src/api/demo/model/accountModel.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export interface GetAccountInfoModel {
-  email: string;
-  name: string;
-  introduction: string;
-  phone: string;
-  address: string;
-}
diff --git a/src/api/demo/model/optionsModel.ts b/src/api/demo/model/optionsModel.ts
deleted file mode 100644
index c15ef8f..0000000
--- a/src/api/demo/model/optionsModel.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { BasicFetchResult } from '/@/api/model/baseModel';
-
-export interface DemoOptionsItem {
-  label: string;
-  value: string;
-}
-
-export interface selectParams {
-  id: number | string;
-}
-
-/**
- * @description: Request list return value
- */
-export type DemoOptionsGetResultModel = BasicFetchResult<DemoOptionsItem>;
diff --git a/src/api/demo/model/systemModel.ts b/src/api/demo/model/systemModel.ts
deleted file mode 100644
index 72904de..0000000
--- a/src/api/demo/model/systemModel.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-import { BasicPageParams, BasicFetchResult } from '/@/api/model/baseModel';
-
-export type AccountParams = BasicPageParams & {
-  account?: string;
-  nickname?: string;
-};
-
-export type RoleParams = {
-  roleName?: string;
-  status?: string;
-};
-
-export type TestParams = {
-  testName?: string;
-};
-
-export type RolePageParams = BasicPageParams & RoleParams;
-
-export type TestPageParams = BasicPageParams & TestParams;
-
-export type UserPageParams = BasicPageParams & UserParams;
-
-export type DeptParams = {
-  deptName?: string;
-  status?: string;
-};
-
-export type UserParams = {
-  username?: string;
-};
-
-export type MenuParams = {
-  menuName?: string;
-  status?: string;
-};
-
-export interface AccountListItem {
-  id: string;
-  account: string;
-  email: string;
-  nickname: string;
-  role: number;
-  createTime: string;
-  remark: string;
-  status: number;
-}
-
-export interface DeptListItem {
-  id: string;
-  orderNo: string;
-  createTime: string;
-  remark: string;
-  status: number;
-}
-
-export interface MenuListItem {
-  id: string;
-  orderNo: string;
-  createTime: string;
-  status: number;
-  icon: string;
-  component: string;
-  permission: string;
-}
-
-export interface RoleListItem {
-  id: string;
-  roleName: string;
-  roleValue: string;
-  status: number;
-  orderNo: string;
-  createTime: string;
-}
-export interface TestListItem {
-  id: string;
-  testName: string;
-  testValue: string;
-  createTime: string;
-}
-
-export interface UserListItem {
-  id: string;
-  username: string;
-  password: string;
-  realname: string;
-}
-
-/**
- * @description: Request list return value
- */
-export type AccountListGetResultModel = BasicFetchResult<AccountListItem>;
-
-export type DeptListGetResultModel = BasicFetchResult<DeptListItem>;
-
-export type MenuListGetResultModel = BasicFetchResult<MenuListItem>;
-
-export type RolePageListGetResultModel = BasicFetchResult<RoleListItem>;
-
-export type RoleListGetResultModel = RoleListItem[];
-
-export type TestListGetResultModel = TestListItem[];
-
-export type UserListGetResultModel = UserListItem[];
diff --git a/src/api/demo/model/tableModel.ts b/src/api/demo/model/tableModel.ts
deleted file mode 100644
index 322a8b4..0000000
--- a/src/api/demo/model/tableModel.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { BasicPageParams, BasicFetchResult } from '/@/api/model/baseModel';
-/**
- * @description: Request list interface parameters
- */
-export type DemoParams = BasicPageParams;
-
-export interface DemoListItem {
-  id: string;
-  beginTime: string;
-  endTime: string;
-  address: string;
-  name: string;
-  no: number;
-  status: number;
-}
-
-/**
- * @description: Request list return value
- */
-export type DemoListGetResultModel = BasicFetchResult<DemoListItem>;
diff --git a/src/api/demo/select.ts b/src/api/demo/select.ts
deleted file mode 100644
index 9fb5cae..0000000
--- a/src/api/demo/select.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { DemoOptionsItem, selectParams } from './model/optionsModel';
-enum Api {
-  OPTIONS_LIST = '/mock/select/getDemoOptions',
-}
-
-/**
- * @description: Get sample options value
- */
-export const optionsListApi = (params?: selectParams) => defHttp.get<DemoOptionsItem[]>({ url: Api.OPTIONS_LIST, params });
diff --git a/src/api/demo/system.ts b/src/api/demo/system.ts
deleted file mode 100644
index 01c1fd5..0000000
--- a/src/api/demo/system.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import {
-  AccountParams,
-  DeptListItem,
-  MenuParams,
-  RoleParams,
-  TestPageParams,
-  RolePageParams,
-  MenuListGetResultModel,
-  DeptListGetResultModel,
-  AccountListGetResultModel,
-  RolePageListGetResultModel,
-  RoleListGetResultModel,
-  TestListGetResultModel,
-} from './model/systemModel';
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  AccountList = '/mock/system/getAccountList',
-  IsAccountExist = '/mock/system/accountExist',
-  DeptList = '/mock/system/getDeptList',
-  setRoleStatus = '/mock/system/setRoleStatus',
-  MenuList = '/mock/system/getMenuList',
-  RolePageList = '/mock/system/getRoleListByPage',
-  DemoTableList = '/mock/system/getDemoTableListByPage',
-  TestPageList = '/mock/system/getTestListByPage',
-  GetAllRoleList = '/mock/system/getAllRoleList',
-}
-
-export const getAccountList = (params: AccountParams) => defHttp.get<AccountListGetResultModel>({ url: Api.AccountList, params });
-
-export const getDeptList = (params?: DeptListItem) => defHttp.get<DeptListGetResultModel>({ url: Api.DeptList, params });
-
-export const getMenuList = (params?: MenuParams) => defHttp.get<MenuListGetResultModel>({ url: Api.MenuList, params });
-
-export const getRoleListByPage = (params?: RolePageParams) => defHttp.get<RolePageListGetResultModel>({ url: Api.RolePageList, params });
-
-export const getAllRoleList = (params?: RoleParams) => defHttp.get<RoleListGetResultModel>({ url: Api.GetAllRoleList, params });
-
-export const setRoleStatus = (id: number, status: string) => defHttp.post({ url: Api.setRoleStatus, params: { id, status } });
-
-export const getTestListByPage = (params?: TestPageParams) => defHttp.get<TestListGetResultModel>({ url: Api.TestPageList, params });
-
-export const getDemoTableListByPage = (params) => defHttp.get({ url: Api.DemoTableList, params });
-
-export const isAccountExist = (account: string) => defHttp.post({ url: Api.IsAccountExist, params: { account } }, { errorMessageMode: 'none' });
diff --git a/src/api/demo/table.ts b/src/api/demo/table.ts
deleted file mode 100644
index 41ada55..0000000
--- a/src/api/demo/table.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { DemoParams, DemoListGetResultModel } from './model/tableModel';
-
-enum Api {
-  DEMO_LIST = '/mock/table/getDemoList',
-}
-
-/**
- * @description: Get sample list value
- */
-
-export const demoListApi = (params: DemoParams) =>
-  defHttp.get<DemoListGetResultModel>({
-    url: Api.DEMO_LIST,
-    params,
-    headers: {
-      ignoreCancelToken: true,
-    },
-  });
diff --git a/src/api/demo/tree.ts b/src/api/demo/tree.ts
deleted file mode 100644
index 8fe3acf..0000000
--- a/src/api/demo/tree.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  TREE_OPTIONS_LIST = '/mock/tree/getDemoOptions',
-}
-
-/**
- * @description: Get sample options value
- */
-export const treeOptionsListApi = (params?: Recordable) => defHttp.get<Recordable[]>({ url: Api.TREE_OPTIONS_LIST, params });
diff --git a/src/api/model/baseModel.ts b/src/api/model/baseModel.ts
deleted file mode 100644
index 7a4d797..0000000
--- a/src/api/model/baseModel.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-export interface BasicPageParams {
-  page: number;
-  pageSize: number;
-}
-
-export interface BasicFetchResult<T extends any> {
-  items: T[];
-  total: number;
-}
-
-export interface BasicResult<T extends any> {
-  records: T[];
-  total: number;
-}
diff --git a/src/api/sys/menu.ts b/src/api/sys/menu.ts
deleted file mode 100644
index 68a240e..0000000
--- a/src/api/sys/menu.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { getMenuListResultModel } from './model/menuModel'
-import { defHttp } from '/@/utils/http/axios'
-
-enum Api {
-	GetMenuList = '/sys/permission/getUserPermissionByToken',
-	SwitchVue3Menu = '/sys/switchVue3Menu',
-}
-
-/**
- * @description: Get user menu based on id
- */
-
-export const getMenuList = () => {
-	return new Promise((resolve) => {
-		//涓轰簡鍏煎mock鍜屾帴鍙f暟鎹�
-		defHttp.get<getMenuListResultModel>({ url: Api.GetMenuList }).then((res) => {
-			if (Array.isArray(res)) {
-				resolve(res)
-			} else {
-				resolve(res['menu'])
-			}
-		})
-	})
-}
-
-/**
- * 鍒囨崲鎴恦ue3鑿滃崟
- */
-export const switchVue3Menu = () => {
-	return new Promise((resolve) => {
-		defHttp.get({ url: Api.SwitchVue3Menu })
-	})
-}
diff --git a/src/api/sys/model/menuModel.ts b/src/api/sys/model/menuModel.ts
deleted file mode 100644
index 472c292..0000000
--- a/src/api/sys/model/menuModel.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import type { RouteMeta } from 'vue-router'
-export interface RouteItem {
-	path: string
-	component: any
-	meta: RouteMeta
-	name?: string
-	alias?: string | string[]
-	redirect?: string
-	caseSensitive?: boolean
-	children?: RouteItem[]
-}
-
-/**
- * @description: Get menu return value
- */
-export type getMenuListResultModel = RouteItem[]
diff --git a/src/api/sys/model/uploadModel.ts b/src/api/sys/model/uploadModel.ts
deleted file mode 100644
index d770c64..0000000
--- a/src/api/sys/model/uploadModel.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export interface UploadApiResult {
-  message: string;
-  code: number;
-  url: string;
-}
diff --git a/src/api/sys/model/userModel.ts b/src/api/sys/model/userModel.ts
deleted file mode 100644
index f1d9be7..0000000
--- a/src/api/sys/model/userModel.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * @description: Login interface parameters
- */
-export interface LoginParams {
-  username: string;
-  password: string;
-}
-
-export interface ThirdLoginParams {
-  token: string;
-  thirdType: string;
-}
-
-export interface RoleInfo {
-  roleName: string;
-  value: string;
-}
-
-/**
- * @description: Login interface return value
- */
-export interface LoginResultModel {
-  userId: string | number;
-  token: string;
-  role: RoleInfo;
-  userInfo?: any
-}
-
-/**
- * @description: Get user information return value
- */
-export interface GetUserInfoModel {
-  roles: RoleInfo[];
-  // 鐢ㄦ埛id
-  userId: string | number;
-  // 鐢ㄦ埛鍚�
-  username: string;
-  // 鐪熷疄鍚嶅瓧
-  realname: string;
-  // 澶村儚
-  avatar: string;
-  // 浠嬬粛
-  desc?: string;
-  // 鐢ㄦ埛淇℃伅
-  userInfo?: any;
-  // 缂撳瓨瀛楀吀椤�
-  sysAllDictItems?: any;
-}
-
-/**
- * @description: Get user information return value
- */
-export interface GetResultModel {
-  code: number;
-  message: string;
-  result: object;
-  success: Boolean;
-}
diff --git a/src/api/sys/upload.ts b/src/api/sys/upload.ts
deleted file mode 100644
index 1a83e93..0000000
--- a/src/api/sys/upload.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { UploadApiResult } from './model/uploadModel';
-import { defHttp } from '/@/utils/http/axios';
-import { UploadFileParams } from '/#/axios';
-import { useGlobSetting } from '/@/hooks/setting';
-
-const { uploadUrl = '' } = useGlobSetting();
-
-/**
- * @description: Upload interface
- */
-export function uploadApi(params: UploadFileParams, onUploadProgress: (progressEvent: ProgressEvent) => void) {
-  return defHttp.uploadFile<UploadApiResult>(
-    {
-      url: uploadUrl,
-      onUploadProgress,
-    },
-    params
-  );
-}
-/**
- * @description: Upload interface
- */
-export function uploadImg(params: UploadFileParams, onUploadProgress: (progressEvent: ProgressEvent) => void) {
-  return defHttp.uploadFile<UploadApiResult>(
-    {
-      url: `${uploadUrl}/sys/common/upload`,
-      onUploadProgress,
-    },
-    params,
-    { isReturnResponse: true }
-  );
-}
diff --git a/src/api/sys/user.ts b/src/api/sys/user.ts
deleted file mode 100644
index 253c4a2..0000000
--- a/src/api/sys/user.ts
+++ /dev/null
@@ -1,197 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { LoginParams, LoginResultModel, GetUserInfoModel } from './model/userModel';
-
-import { ErrorMessageMode } from '/#/axios';
-import { useMessage } from '/@/hooks/web/useMessage';
-import { useUserStoreWithOut } from '/@/store/modules/user';
-import { setAuthCache } from '/@/utils/auth';
-import { TOKEN_KEY } from '/@/enums/cacheEnum';
-import { router } from '/@/router';
-import { PageEnum } from '/@/enums/pageEnum';
-
-const { createErrorModal } = useMessage();
-enum Api {
-  Login = '/sys/login',
-  phoneLogin = '/sys/phoneLogin',
-  Logout = '/sys/logout',
-  GetUserInfo = '/sys/user/getUserInfo',
-  // 鑾峰彇绯荤粺鏉冮檺
-  // 1銆佹煡璇㈢敤鎴锋嫢鏈夌殑鎸夐挳/琛ㄥ崟璁块棶鏉冮檺
-  // 2銆佹墍鏈夋潈闄�
-  // 3銆佺郴缁熷畨鍏ㄦā寮�
-  GetPermCode = '/sys/permission/getPermCode',
-  //鏂板姞鐨勮幏鍙栧浘褰㈤獙璇佺爜鐨勬帴鍙�
-  getInputCode = '/sys/randomImage',
-  //鑾峰彇鐭俊楠岃瘉鐮佺殑鎺ュ彛
-  getCaptcha = '/sys/sms',
-  //娉ㄥ唽鎺ュ彛
-  registerApi = '/sys/user/register',
-  //鏍¢獙鐢ㄦ埛鎺ュ彛
-  checkOnlyUser = '/sys/user/checkOnlyUser',
-  //SSO鐧诲綍鏍¢獙
-  validateCasLogin = '/sys/cas/client/validateLogin',
-  //鏍¢獙鎵嬫満鍙�
-  phoneVerify = '/sys/user/phoneVerification',
-  //淇敼瀵嗙爜
-  passwordChange = '/sys/user/passwordChange',
-  //绗笁鏂圭櫥褰�
-  thirdLogin = '/sys/thirdLogin/getLoginUser',
-  //绗笁鏂圭櫥褰�
-  getThirdCaptcha = '/sys/thirdSms',
-  //鑾峰彇浜岀淮鐮佷俊鎭�
-  getLoginQrcode = '/sys/getLoginQrcode',
-  //鐩戞帶浜岀淮鐮佹壂鎻忕姸鎬�
-  getQrcodeToken = '/sys/getQrcodeToken',
-}
-
-/**
- * @description: user login api
- */
-export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') {
-  return defHttp.post<LoginResultModel>(
-    {
-      url: Api.Login,
-      params,
-    },
-    {
-      errorMessageMode: mode,
-    }
-  );
-}
-
-/**
- * @description: user phoneLogin api
- */
-export function phoneLoginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') {
-  return defHttp.post<LoginResultModel>(
-    {
-      url: Api.phoneLogin,
-      params,
-    },
-    {
-      errorMessageMode: mode,
-    }
-  );
-}
-
-/**
- * @description: getUserInfo
- */
-export function getUserInfo() {
-  return defHttp.get<GetUserInfoModel>({ url: Api.GetUserInfo }, {}).catch((e) => {
-    // update-begin--author:zyf---date:20220425---for:銆怴UEN-76銆戞崟鑾锋帴鍙h秴鏃跺紓甯�,璺宠浆鍒扮櫥褰曠晫闈�
-    if (e && (e.message.includes('timeout') || e.message.includes('401'))) {
-      //鎺ュ彛涓嶉�氭椂璺宠浆鍒扮櫥褰曠晫闈�
-      const userStore = useUserStoreWithOut();
-      userStore.setToken('');
-      setAuthCache(TOKEN_KEY, null);
-      router.push(PageEnum.BASE_LOGIN);
-    }
-    // update-end--author:zyf---date:20220425---for:銆怴UEN-76銆戞崟鑾锋帴鍙h秴鏃跺紓甯�,璺宠浆鍒扮櫥褰曠晫闈�
-  });
-}
-
-export function getPermCode() {
-  return defHttp.get({ url: Api.GetPermCode });
-}
-
-export function doLogout() {
-  return defHttp.get({ url: Api.Logout });
-}
-
-export function getCodeInfo(currdatetime) {
-  let url = Api.getInputCode + `/${currdatetime}`;
-  return defHttp.get({ url: url });
-}
-/**
- * @description: 鑾峰彇鐭俊楠岃瘉鐮�
- */
-export function getCaptcha(params) {
-  return new Promise((resolve, reject) => {
-    defHttp.post({ url: Api.getCaptcha, params }, { isTransformResponse: false }).then((res) => {
-      console.log(res);
-      if (res.success) {
-        resolve(true);
-      } else {
-        createErrorModal({ title: '閿欒鎻愮ず', content: res.message || '鏈煡闂' });
-        reject();
-      }
-    });
-  });
-}
-
-/**
- * @description: 娉ㄥ唽鎺ュ彛
- */
-export function register(params) {
-  return defHttp.post({ url: Api.registerApi, params }, { isReturnNativeResponse: true });
-}
-
-/**
- *鏍¢獙鐢ㄦ埛鏄惁瀛樺湪
- * @param params
- */
-export const checkOnlyUser = (params) => defHttp.get({ url: Api.checkOnlyUser, params }, { isTransformResponse: false });
-/**
- *鏍¢獙鎵嬫満鍙风爜
- * @param params
- */
-export const phoneVerify = (params) => defHttp.post({ url: Api.phoneVerify, params }, { isTransformResponse: false });
-/**
- *瀵嗙爜淇敼
- * @param params
- */
-export const passwordChange = (params) => defHttp.get({ url: Api.passwordChange, params }, { isTransformResponse: false });
-/**
- * @description: 绗笁鏂圭櫥褰�
- */
-export function thirdLogin(params, mode: ErrorMessageMode = 'modal') {
-  return defHttp.get<LoginResultModel>(
-    {
-      url: `${Api.thirdLogin}/${params.token}/${params.thirdType}`,
-    },
-    {
-      errorMessageMode: mode,
-    }
-  );
-}
-/**
- * @description: 鑾峰彇绗笁鏂圭煭淇¢獙璇佺爜
- */
-export function setThirdCaptcha(params) {
-  return new Promise((resolve, reject) => {
-    defHttp.post({ url: Api.getThirdCaptcha, params }, { isTransformResponse: false }).then((res) => {
-      console.log(res);
-      if (res.success) {
-        resolve(true);
-      } else {
-        createErrorModal({ title: '閿欒鎻愮ず', content: res.message || '鏈煡闂' });
-        reject();
-      }
-    });
-  });
-}
-
-/**
- * 鑾峰彇鐧诲綍浜岀淮鐮佷俊鎭�
- */
-export function getLoginQrcode() {
-  let url = Api.getLoginQrcode;
-  return defHttp.get({ url: url });
-}
-
-/**
- * 鐩戞帶鎵爜鐘舵��
- */
-export function getQrcodeToken(params) {
-  let url = Api.getQrcodeToken;
-  return defHttp.get({ url: url, params });
-}
-
-/**
- * SSO鐧诲綍鏍¢獙
- */
-export async function validateCasLogin(params) {
-  let url = Api.validateCasLogin;
-  return defHttp.get({ url: url, params });
-}
diff --git a/src/assets/icons/download-count.svg b/src/assets/icons/download-count.svg
deleted file mode 100644
index 1c95195..0000000
--- a/src/assets/icons/download-count.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 356.99 419.8"><defs><style>.cls-1{fill:#ffa546;}.cls-2{fill:#ff6059;opacity:0.4;}.cls-3{fill:#426572;}.cls-4{fill:#ffd947;}</style></defs><title>Asset 91</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M351,380.73v17.59a15.52,15.52,0,0,1-15.47,15.48H21.46A15.52,15.52,0,0,1,6,398.32V380.73a15.51,15.51,0,0,1,15.47-15.47H335.52A15.51,15.51,0,0,1,351,380.73Z"/><path class="cls-2" d="M351,406.85c0,3.95-7,7.19-15.47,7.19H21.46C13,414,6,410.8,6,406.85V380.73a15.51,15.51,0,0,1,15.47-15.47H37.66l3.44,25.27c0,4,7,7.2,15.47,7.2l283.72,12.44,7.38-2.28Z"/><path class="cls-3" d="M335.52,419.8H21.46A21.5,21.5,0,0,1,0,398.32V380.73a21.49,21.49,0,0,1,21.46-21.47H335.52A21.49,21.49,0,0,1,357,380.73v17.59a21.52,21.52,0,0,1-21.46,21.48ZM21.46,371.26A9.48,9.48,0,0,0,12,380.73v17.59a9.48,9.48,0,0,0,9.46,9.48H335.52a9.52,9.52,0,0,0,9.46-9.48V380.73a9.48,9.48,0,0,0-9.46-9.47Z"/><path class="cls-1" d="M247.93,138H233.23V41.7A35.7,35.7,0,0,0,197.53,6H159.45a35.7,35.7,0,0,0-35.7,35.7V138H109.06C80,138,61.84,169.48,76.37,194.64l34.72,60.13,30,52c16.6,28.76,58.12,28.76,74.72,0l30-52,34.72-60.13C295.14,169.48,277,138,247.93,138Z"/><path class="cls-2" d="M280.62,188l-34.73,60.13-30,52c-11.24,19.46-66.68,32.78-52.52,18.88,60.22-59.12,104.3-182.16,104.3-182.16A37.74,37.74,0,0,1,280.62,188Z"/><path class="cls-4" d="M192.3,6c-.22.23-.42.47-.63.72-38.92,45-18.36,116.49-42.85,170.71-10.14,22.45-29.18,41.51-52.15,49.48L78,194.64C63.52,169.48,81.67,138,110.72,138h14.7V41.7A35.7,35.7,0,0,1,161.12,6Z"/><path class="cls-3" d="M178.49,334.39h0a48.64,48.64,0,0,1-42.56-24.57L71.17,197.64A43.75,43.75,0,0,1,109.06,132h8.69V41.7A41.74,41.74,0,0,1,159.45,0h38.09a41.75,41.75,0,0,1,41.7,41.7V132h8.69a43.75,43.75,0,0,1,37.89,65.62L221,309.82A48.64,48.64,0,0,1,178.49,334.39ZM109.06,144a31.75,31.75,0,0,0-27.49,47.62l64.76,112.17a37.14,37.14,0,0,0,64.33,0l64.76-112.17A31.75,31.75,0,0,0,247.92,144H227.23V41.7A29.73,29.73,0,0,0,197.53,12H159.45a29.73,29.73,0,0,0-29.7,29.7V144Z"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/icons/dynamic-avatar-1.svg b/src/assets/icons/dynamic-avatar-1.svg
deleted file mode 100644
index e1553e5..0000000
--- a/src/assets/icons/dynamic-avatar-1.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 391.31 560.11"><defs><style>.cls-1{fill:#f9cdb7;}.cls-2{fill:#e2a78d;}.cls-3{fill:#213346;}.cls-4{fill:#bfe1ee;}.cls-5{fill:#dfe7ea;}.cls-6{fill:#b46078;}.cls-7{fill:#96426e;}.cls-8{fill:#fff;}.cls-9{fill:#fefdf5;}.cls-10{fill:#f4eae1;}.cls-11{fill:#f9637c;}.cls-12{fill:#ba4264;}.cls-13{fill:#b13a59;}</style></defs><title>Asset 15</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><circle class="cls-1" cx="45.9" cy="303.35" r="41.4"/><path class="cls-2" d="M78.13,278.08a41.39,41.39,0,0,0-57.27,57.27,41.4,41.4,0,1,1,57.27-57.27Z"/><path class="cls-3" d="M45.9,347.82a45.9,45.9,0,1,1,45.89-45.9A46,46,0,0,1,45.9,347.82Zm0-82.79a36.9,36.9,0,1,0,36.89,36.89A36.94,36.94,0,0,0,45.9,265Z"/><circle class="cls-1" cx="345.41" cy="303.35" r="41.4"/><path class="cls-3" d="M345.42,347.82a45.9,45.9,0,1,1,45.89-45.9A46,46,0,0,1,345.42,347.82Zm0-82.79a36.9,36.9,0,1,0,36.89,36.89A36.94,36.94,0,0,0,345.42,265Z"/><path class="cls-1" d="M191.57,88.78h2.79a146.1,146.1,0,0,1,146.1,146.1v95A147.5,147.5,0,0,1,193,477.43h0a147.5,147.5,0,0,1-147.5-147.5v-95a146.1,146.1,0,0,1,146.1-146.1Z"/><path class="cls-2" d="M211.7,474.46a147.74,147.74,0,0,1-20.29,1.41c-81.14,0-147.5-66.37-147.5-147.5v-97c0-79.3,64.87-144.18,144.17-144.18h6.65a142.14,142.14,0,0,1,17,1C147.26,95.87,91.42,154.6,81.17,220.06a509,509,0,0,1-13.33,61.86L54.49,328.37C54.49,402.62,140.07,464.5,211.7,474.46Z"/><path class="cls-3" d="M191.41,481.93a152.43,152.43,0,0,1-152-152V234.88A151,151,0,0,1,190,84.28h2.79a151,151,0,0,1,150.61,150.6v95.05a152.45,152.45,0,0,1-152,152ZM190,93.28a142,142,0,0,0-141.6,141.6v95.05a142.82,142.82,0,0,0,244,101,142,142,0,0,0,42-101V234.88A142,142,0,0,0,192.8,93.28Z"/><path class="cls-4" d="M325.44,305.26v.19C324.89,305.48,325.11,305.35,325.44,305.26Z"/><path class="cls-3" d="M368.43,305.61a3,3,0,0,1-2.94-2.41c-4.06-20.3-24.53-16.89-25.4-16.73a3,3,0,1,1-1-5.91c9.36-1.67,28.17.66,32.33,21.46a3,3,0,0,1-2.35,3.53A3,3,0,0,1,368.43,305.61Z"/><path class="cls-3" d="M21.27,308.26a2.36,2.36,0,0,1-.37,0,3,3,0,0,1-2.61-3.34c1.75-14.23,7.79-21.26,12.55-24.65a20.94,20.94,0,0,1,10.61-4.05,3,3,0,0,1,.24,6c-.65,0-14.7,1.08-17.45,23.43A3,3,0,0,1,21.27,308.26Z"/><ellipse class="cls-5" cx="184.64" cy="499.11" rx="179.73" ry="52.86"/><path class="cls-6" d="M335.74,353.31c21.15,38.6,14.42,76.22,15.16,112.12l-11.45-12.67a123.72,123.72,0,0,1-30.05,60,44.13,44.13,0,0,0-13.92-15.33,92.89,92.89,0,0,1-28.69,48.92,37.34,37.34,0,0,0-1.06-30.87A58.87,58.87,0,0,1,233.6,551.2a24.22,24.22,0,0,0,2.63-23.34c-11.66,19.79-45.18,20.39-57.53,1-.86,3.91-.23,9.05,3.76,9.38-16.8,2.59-32.18-4.49-43.74-16.95a28.25,28.25,0,0,0,9.37,18.32A51.33,51.33,0,0,1,105.4,511.3c-21.68,1.35-43.33-13.51-49.87-34.21a10.36,10.36,0,0,1-2.7,9.92C15.38,468,17.38,382.75,41.91,354.63c0,0,51.63,8.28,83,32.06,8.53,6.48,8.78-2.64,21-7.72,16.48-6.83,45.87-11.63,62.57-11.7,24.41-.11,37.46,30.85,53.1,16.16C303,344.58,335.38,352.66,335.74,353.31Z"/><path class="cls-7" d="M352.35,461,340.9,448.3a123.83,123.83,0,0,1-30,60,44.26,44.26,0,0,0-13.92-15.34,92.89,92.89,0,0,1-28.69,48.92A37.38,37.38,0,0,0,267.18,511a58.84,58.84,0,0,1-32.13,35.77,24.22,24.22,0,0,0,2.63-23.33c-11.66,19.79-45.18,20.39-57.53,1-.87,3.91.11,18.31,4.11,18.65-16.8,2.58-32.53-13.76-44.09-26.22.67,7,2.41,19.59,7.68,24.23-17.9-.91-33.22-18.12-41-34.26-21.68,1.35-43.33-13.5-49.87-34.21a10.38,10.38,0,0,1-2.7,9.93C41.34,476,32.8,461.71,28.19,444.67,44.75,456.74,64.24,465,83.51,472.46c13.08,5,26.33,9.83,40.12,12.34,13.38,2.43,27.05,2.67,40.65,2.91,37.73.65,77,1,111.14-15.22,9.78-4.65,20.09-12.6,19.75-23.43-.39-12.38-13.93-19.44-25.48-23.87,24.6-3.65,44.78-22.73,56-44.92a136.88,136.88,0,0,0,9.89-26.39l3.31,2.58C349,391.91,351.61,425.08,352.35,461Z"/><path class="cls-3" d="M256.37,560.11l7.72-18.34a32.54,32.54,0,0,0,2.3-16.08,63.44,63.44,0,0,1-29.54,26.86l-15.22,6.65,9.78-13.42A19.55,19.55,0,0,0,235,535.31c-6.64,5.87-15.71,9.29-25.74,9.47a40.71,40.71,0,0,1-22-5.69c1.08,5.49,1.15,10.37-3.11,12.33l-1.88.87-1.88-.87c-13.79-6.36-24.61-12.92-33.69-20.51,1.54,6.3,3.28,8.56,4.17,9.34l9.71,8.53-12.91-.66c-19.13-1-35-18.9-43.5-35h-.05c-18.58,0-36.49-10.43-46.18-26.13l-.46.48-2.31,2.25-2.88-1.46C38,481,27.7,464.56,23.31,441.92c-6.43-33.13.88-73.25,16.66-91.33a4.5,4.5,0,0,1,6.78,5.91c-14.15,16.23-20.57,53-14.61,83.71,3.45,17.74,10.68,31,20.55,37.85a5.39,5.39,0,0,0-.06-2.56L61.27,473c5.89,18.64,25.78,32.29,45.3,31.07l3-.19,1.31,2.73c7.82,16.21,18.57,26.05,28.08,30.23A85.81,85.81,0,0,1,135.69,519l-1.27-13.24,9.05,9.75c9,9.69,19.89,17.53,34.83,25-.35-1.64-.78-3.38-1.09-4.62-1.3-5.17-2-8.22-1.46-10.69l2.33-10.64,5.86,9.18c4.85,7.6,14,12.09,24.49,12.09h.66c10.8-.2,20-5,24.71-13l4.51-7.66,3.5,8.16a28.32,28.32,0,0,1,2,14.83,54.25,54.25,0,0,0,19.1-26.84l3.33-10.56,5,9.89a41.62,41.62,0,0,1,4.38,18.57,88.24,88.24,0,0,0,16.95-35.57l1.43-6.48,5.49,3.73a48.58,48.58,0,0,1,11.95,11.55,120.21,120.21,0,0,0,25.08-53.29l1.69-8.89,10.47,11.59c2.16-37.59-3.37-68.28-17.17-95.91a4.5,4.5,0,1,1,8-4c15.83,31.7,21.33,67,17.31,111.15l-.93,10.24-12.53-13.87A127.42,127.42,0,0,1,314.17,513l-4.26,4.66-3-5.54a39.46,39.46,0,0,0-7.37-9.62,97.41,97.41,0,0,1-28.29,44.41Z"/><path class="cls-1" d="M158.08,455.14A10.16,10.16,0,0,1,147.94,445V406.25a10.17,10.17,0,0,1,10.14-10.14H229a10.17,10.17,0,0,1,10.13,10.14V445A10.16,10.16,0,0,1,229,455.14"/><path class="cls-2" d="M240.85,410.47v12a10.15,10.15,0,0,0-9.29-6.1H160.61a10.16,10.16,0,0,0-10.14,10.13v26.74a10.1,10.1,0,0,1-.84-4V410.47a10.16,10.16,0,0,1,10.13-10.13h71A10.16,10.16,0,0,1,240.85,410.47Z"/><path class="cls-3" d="M193.13,394.93c7.32,0,14.47,0,21.37.11l10.16.12,2.48,0,1.23,0h.34l.45,0,.89.06a14.83,14.83,0,0,1,6.56,2.4,14.65,14.65,0,0,1,6.5,11.19l0,.81v.68l0,1.11-.06,2.21c0,1.45-.08,2.89-.13,4.3-.18,5.64-.38,10.9-.61,15.69s-.48,9.14-.75,12.95c0,.48-.06,1-.1,1.41,0,.23,0,.45,0,.68s-.05.55-.08.81a12.38,12.38,0,0,1-.77,3.09,12,12,0,0,1-3.1,4.43,10.12,10.12,0,0,1-6.49,2.68,5.06,5.06,0,0,1-1.78-.27c-.39-.15-.58-.31-.58-.49s.19-.35.52-.54l1.41-.68a10.84,10.84,0,0,0,4.06-3.37,8.74,8.74,0,0,0,1.39-3.21,8.13,8.13,0,0,0,.13-1.92l0-.53c0-.23,0-.45-.05-.68,0-.46-.07-.93-.1-1.41-.27-3.81-.52-8.15-.74-12.95s-.44-10.05-.62-15.69c0-1.41-.09-2.85-.13-4.3l-.06-2.21,0-1.11v-.28l0-.16,0-.32a5.68,5.68,0,0,0-2.72-4.14,5.59,5.59,0,0,0-2.44-.77h-.76l-1.23,0-2.48,0-10.16.12c-6.9.07-14.05.1-21.37.1s-14.47,0-21.37-.1l-10.17-.12-2.47,0-1.23,0h-.76a5.59,5.59,0,0,0-2.44.77,5.68,5.68,0,0,0-2.72,4.14l0,.32,0,.16v.28l0,1.11-.06,2.21c0,1.45-.09,2.89-.13,4.3-.18,5.64-.39,10.9-.62,15.69s-.47,9.14-.74,12.95c0,.48-.07,1-.1,1.41,0,.23,0,.45,0,.68l0,.53a8.13,8.13,0,0,0,.13,1.92,8.58,8.58,0,0,0,1.39,3.21,10.69,10.69,0,0,0,4.06,3.37l1.4.68c.34.19.52.37.52.54s-.18.34-.57.49a5.06,5.06,0,0,1-1.78.27,10.14,10.14,0,0,1-6.5-2.68,12,12,0,0,1-3.09-4.43,12.38,12.38,0,0,1-.77-3.09c0-.26-.07-.59-.08-.81l-.06-.68c0-.46-.06-.93-.1-1.41-.26-3.81-.51-8.15-.74-12.95s-.43-10.05-.61-15.69c0-1.41-.09-2.85-.13-4.3,0-.73-.05-1.47-.07-2.21l0-1.11v-.68l0-.81a14.74,14.74,0,0,1,13.06-13.59l.89-.06.45,0h.34l1.23,0,2.47,0,10.17-.12C178.66,395,185.81,394.93,193.13,394.93Z"/><path class="cls-3" d="M54.48,374.11a37.83,37.83,0,0,0,.49,9.41,39.45,39.45,0,0,0,3,9.29,40.75,40.75,0,0,1-5.73-8.37,42.54,42.54,0,0,1-3.46-9.9,46.05,46.05,0,0,1-1-10.71,50.72,50.72,0,0,1,.42-5.48,35.47,35.47,0,0,1,1.17-5.68l10.41,4.56a24.21,24.21,0,0,0-2,3.68,43.89,43.89,0,0,0-1.6,4.2A39.74,39.74,0,0,0,54.48,374.11Z"/><path class="cls-3" d="M70,382.66c.81,7.4,4.1,14.79,8.86,21.21A47.32,47.32,0,0,1,64.51,384a38.71,38.71,0,0,1-2.31-12.94,35.09,35.09,0,0,1,2.63-13.62l10,5.38C71,367.93,69.21,375.33,70,382.66Z"/><path class="cls-3" d="M98.32,388.23a51,51,0,0,0,6.84,20.32,54,54,0,0,1-12.35-18.93A56.65,56.65,0,0,1,89,366.14l11.2,1.92A47.79,47.79,0,0,0,98.32,388.23Z"/><path class="cls-3" d="M282.66,384.17a26.93,26.93,0,0,1-.31,8.78c-.5,2.23-1.26,3.53-2,3.48-1.43-.15-2-5.39-2.82-11.65s-1.36-11.51,0-12c.66-.21,1.71.88,2.72,2.92A27,27,0,0,1,282.66,384.17Z"/><path class="cls-3" d="M305.19,378.25a35.36,35.36,0,0,1-2.39,12.16c-1.21,3-2.49,4.54-3.14,4.31-1.37-.52.25-7.73.42-16.61s-.95-16.16.45-16.6c.65-.19,1.85,1.45,2.91,4.47A35.62,35.62,0,0,1,305.19,378.25Z"/><path class="cls-3" d="M328.91,374.58a53,53,0,0,1,.5,9.22,44.45,44.45,0,0,1-.88,7.48c-.89,4.19-2.12,6.59-2.77,6.45-1.47-.31-.09-10.37-1.91-22.42s-5.7-21.42-4.36-22.11c.6-.31,2.41,1.68,4.41,5.46a46.7,46.7,0,0,1,2.91,6.93A56.29,56.29,0,0,1,328.91,374.58Z"/><path class="cls-3" d="M63.25,476.89a41,41,0,0,1-.26-8.64,36.07,36.07,0,0,1,.52-3.73,28.41,28.41,0,0,1,.79-3.18c1.19-3.83,2.68-5.88,3.3-5.66s.47,2.63.25,6.31c0,.93-.12,1.93-.13,3s0,2.22,0,3.41a68.87,68.87,0,0,0,.61,7.76,75.5,75.5,0,0,0,1.58,7.62c.34,1.15.63,2.26,1,3.27s.66,2,1,2.85c1.24,3.47,2.14,5.7,1.53,6.13s-2.54-1.16-4.76-4.51A27.16,27.16,0,0,1,67,488.7a35.74,35.74,0,0,1-1.55-3.44A41.24,41.24,0,0,1,63.25,476.89Z"/><path class="cls-3" d="M95.32,490.74a52.94,52.94,0,0,1-.06-13.92c.47-3.51,1.17-5.64,1.87-5.63s1.28,2.19,1.74,5.63.8,8.16,1.51,13.2c.37,2.51.82,4.86,1.3,7,.29,1,.5,2.06.8,3q.19.7.39,1.35l.41,1.23c1,3.14,1.89,5.16,1.29,5.61s-2.46-.92-4.52-4l-.78-1.23c-.25-.43-.48-.9-.73-1.39a31.63,31.63,0,0,1-1.37-3.18A41.46,41.46,0,0,1,95.32,490.74Z"/><path class="cls-3" d="M133.57,497.43c-4.22-15-4.79-27.65-3.43-27.82s4.23,11.85,8.35,26.45,7.93,26.36,6.6,26.93S137.74,512.42,133.57,497.43Z"/><path class="cls-3" d="M246.46,509.58c1.89-6.31,3.22-12.24,4.4-16.52s2.17-6.94,2.88-6.83.94,2.91.68,7.41a78.07,78.07,0,0,1-3.07,17.43,59.78,59.78,0,0,1-3.67,9.2,42.39,42.39,0,0,1-2.2,3.76c-.37.57-.73,1.13-1.1,1.64l-1.13,1.43c-3,3.61-5.46,5.14-5.93,4.69s.94-2.87,2.92-6.68c.25-.47.5-1,.77-1.49l.78-1.65c.56-1.12,1-2.39,1.62-3.67C244.45,515.67,245.5,512.73,246.46,509.58Z"/><path class="cls-3" d="M276.25,498.2c1.34-7.68,2-14.9,3-20.1s1.81-8.37,2.51-8.31,1.07,3.35,1.08,8.62a122.32,122.32,0,0,1-1.55,20.69,60.77,60.77,0,0,1-3.08,11.26,42.45,42.45,0,0,1-4.42,8.53c-3.14,4.54-6,6.46-6.51,6s1.27-3.2,3.37-7.8a68.85,68.85,0,0,0,3.11-8.29A89.28,89.28,0,0,0,276.25,498.2Z"/><path class="cls-3" d="M306.39,479c1.49-6.22,2.52-12,3.48-16.23s1.83-6.81,2.54-6.73,1.08,2.78,1,7.15a78.88,78.88,0,0,1-2.11,17,58.26,58.26,0,0,1-3,9.11c-.63,1.35-1.19,2.63-1.87,3.77-.33.58-.63,1.14-1,1.66l-1,1.47c-2.59,3.69-4.87,5.39-5.38,5s.61-2.87,2.22-6.72L302,493c.2-.53.41-1.08.62-1.66.47-1.12.85-2.38,1.32-3.67C304.79,485,305.63,482.1,306.39,479Z"/><path class="cls-3" d="M316.6,469.6c1.61-4,2.93-7.79,4-11.33.5-1.78,1-3.46,1.41-5.07s.78-3.1,1.1-4.47c1.26-5.5,1.93-9,2.68-9s1.27,3.64.89,9.52c-.1,1.46-.24,3.07-.52,4.78s-.61,3.53-1,5.44a76.28,76.28,0,0,1-9.69,23.34c-1.07,1.63-2.07,3.19-3.13,4.56s-2.05,2.64-3,3.74c-3.89,4.42-6.89,6.55-7.37,6.09s1.47-3.46,4.47-8.24c.75-1.2,1.57-2.5,2.39-3.94s1.69-3,2.6-4.58C313.16,477.18,315,473.53,316.6,469.6Z"/><path class="cls-8" d="M36.38,392.54c.75-3.65,2.73-6.2,4.07-5.78s1.62,3.43.93,6.81-2.14,6-3.55,5.89S35.63,396.18,36.38,392.54Z"/><path class="cls-8" d="M37.64,432a53,53,0,0,1-1.88-14.87c.13-3.85.79-6.2,1.47-6.2,1.47,0,2.42,9.08,5.35,19.74s6.63,19,5.37,19.72c-.59.34-2.36-1.34-4.42-4.6A51.58,51.58,0,0,1,37.64,432Z"/><path class="cls-3" d="M125.55,391.49h-.49c-5.14-.18-9.18-3.25-12.42-5.71l-.2-.15a157,157,0,0,0-68.06-29.49,4.5,4.5,0,0,1,1.51-8.87,166.07,166.07,0,0,1,72,31.19l.19.15c2.47,1.87,5,3.8,7.31,3.89s4.86-1.61,7.58-3.4l.77-.5C149.09,368.55,169,363,189.86,363h0c20.83,0,40.77,5.52,56.13,15.56l.77.5c2.71,1.79,5.3,3.48,7.58,3.4s4.84-2,7.3-3.89l.2-.15a166.07,166.07,0,0,1,72-31.19,4.5,4.5,0,1,1,1.51,8.87,157,157,0,0,0-68.06,29.49l-.2.15c-3.24,2.46-7.28,5.53-12.42,5.71s-9.43-2.62-12.85-4.87l-.74-.49c-28.72-18.76-73.71-18.76-102.43,0l-.74.49C134.6,388.79,130.5,391.49,125.55,391.49Z"/><path class="cls-3" d="M190.39,345.16a4.49,4.49,0,0,1-4.5-4.5V294.07a4.5,4.5,0,0,1,9,0v46.59A4.5,4.5,0,0,1,190.39,345.16Z"/><path class="cls-2" d="M178.07,222.19c1.68,7.42,1.09,17.32-4.12,23.31-6.08,7-15.65,5.56-23.92,5.21a103.64,103.64,0,0,0-30,3.07c-8,2.05-15.14,7-23.27,8.36-8.9,1.55-11-3.2-5.06-9.72,7-7.66,17-15.82,26.45-20.25,17.56-8.26,39.91-12.29,59.6-10.32"/><path class="cls-2" d="M204.25,225.47c-1.68,7.42-1.08,17.32,4.13,23.31,6.07,7,15.65,5.56,23.92,5.21a103.61,103.61,0,0,1,30,3.07c8,2.05,15.14,6.95,23.27,8.36,8.91,1.55,11-3.19,5.06-9.72-6.94-7.66-17-15.81-26.44-20.25-17.57-8.26-39.91-12.29-59.61-10.31"/><path class="cls-6" d="M205.19,214.55c-1.68,7.41-1.09,17.31,4.12,23.3,6.07,7,15.65,5.57,23.92,5.22a103.23,103.23,0,0,1,30,3.07c8,2.05,15.15,6.94,23.27,8.36,8.91,1.55,11-3.2,5.07-9.73-6.95-7.66-17-15.81-26.45-20.25-17.57-8.26-39.91-12.28-59.6-10.31"/><path class="cls-3" d="M289.6,259.29a22.42,22.42,0,0,1-3.85-.36c-5-.87-9.51-2.84-13.86-4.75a64.83,64.83,0,0,0-9.76-3.68,98.35,98.35,0,0,0-28.71-2.93c-.88,0-1.78.08-2.68.13-8,.44-18,1-24.83-6.89-6.61-7.6-6.88-19.43-5.11-27.26a5.34,5.34,0,0,1,4.29-3.82,123.23,123.23,0,0,1,62,10.72c9.2,4.33,19.88,12.49,27.87,21.3,5.87,6.47,4.76,11.05,3.58,13.2C297.53,256.7,295.17,259.29,289.6,259.29Zm-51.81-20.82a106.54,106.54,0,0,1,26.58,3.31,73,73,0,0,1,11.13,4.16c4,1.77,7.86,3.44,11.79,4.12a12.72,12.72,0,0,0,2.79.22,12.53,12.53,0,0,0-1.83-2.48c-7.24-8-16.83-15.35-25-19.2a114.19,114.19,0,0,0-54.15-10.17c-.7,5.74.13,12.44,3.63,16.47,4,4.56,10.57,4.2,17.55,3.82l2.79-.15C234.63,238.51,236.21,238.47,237.79,238.47Z"/><path class="cls-6" d="M173.31,210.57c1.68,7.42,1.09,17.32-4.12,23.3-6.08,7-15.66,5.57-23.93,5.22a103.27,103.27,0,0,0-30,3.07c-8,2.05-15.14,7-23.27,8.36-8.91,1.55-11-3.2-5.06-9.72,6.94-7.66,17-15.82,26.45-20.25,17.56-8.26,39.9-12.29,59.6-10.32"/><path class="cls-3" d="M88.89,255.31c-5.56,0-7.93-2.59-8.89-4.34-1.19-2.15-2.3-6.72,3.58-13.2,8-8.81,18.66-17,27.86-21.29a123,123,0,0,1,62-10.72,5.3,5.3,0,0,1,4.29,3.82c1.77,7.82,1.49,19.65-5.12,27.25-6.86,7.88-16.82,7.33-24.83,6.89l-2.68-.13a98.35,98.35,0,0,0-28.71,2.93,66.24,66.24,0,0,0-9.75,3.68c-4.36,1.91-8.86,3.88-13.87,4.75A22.42,22.42,0,0,1,88.89,255.31Zm-.47-9a12.45,12.45,0,0,0,2.78-.21c3.93-.69,7.75-2.36,11.8-4.13a73.52,73.52,0,0,1,11.12-4.16,107.61,107.61,0,0,1,31.33-3.2c.92,0,1.85.09,2.8.14,7,.38,13.57.75,17.54-3.82,3.51-4,4.33-10.72,3.63-16.47a114.34,114.34,0,0,0-54.15,10.17c-8.19,3.85-17.78,11.21-25,19.2A12.55,12.55,0,0,0,88.42,246.3Z"/><path class="cls-3" d="M183.32,443.66a115.94,115.94,0,0,1-19.23-1.61,3.5,3.5,0,1,1,1.27-6.88c.3.05,30.64,5.45,44.81-4.67a15.44,15.44,0,0,0,6.65-10.76,3.5,3.5,0,1,1,6.92,1.05,22.47,22.47,0,0,1-9.51,15.42C205.9,442.15,193.63,443.66,183.32,443.66Z"/><path class="cls-3" d="M353.48,315.47a3,3,0,0,1-2.91-2.3,38.7,38.7,0,0,1-1.16-13.9A21,21,0,0,1,355.94,286a3,3,0,0,1,4,4.48,15.11,15.11,0,0,0-4.57,9.53,33.19,33.19,0,0,0,1,11.77,3,3,0,0,1-2.22,3.61A2.79,2.79,0,0,1,353.48,315.47Z"/><path class="cls-3" d="M33.65,315.47a2.79,2.79,0,0,1-.7-.08,3,3,0,0,1-2.23-3.61,33.19,33.19,0,0,0,1-11.77,15.1,15.1,0,0,0-4.56-9.53,3,3,0,1,1,4-4.48,21,21,0,0,1,6.53,13.27,38.93,38.93,0,0,1-1.16,13.9A3,3,0,0,1,33.65,315.47Z"/><path class="cls-8" d="M257.31,169.69a45.27,45.27,0,0,1,7.68,4,35.23,35.23,0,0,1,5.5,4.42c2.85,2.87,4,5.23,3.3,6s-3.05,0-6.42-1.57l-5.81-2.68c-2.18-1-4.56-2-7.09-3s-5-1.88-7.24-2.68l-6.07-2c-3.49-1.2-5.77-2.2-5.73-3.28s2.48-2,6.52-2.08a34.71,34.71,0,0,1,7,.58A45.21,45.21,0,0,1,257.31,169.69Z"/><path class="cls-8" d="M37.56,196.45a14.27,14.27,0,0,1,4.18-5.72c1.52-1.16,2.92-1.47,3.78-.87s1.07,2,.85,3.68a23.93,23.93,0,0,1-1.76,5.89,23.77,23.77,0,0,1-3,5.37c-1.06,1.34-2.18,2.15-3.23,1.95s-1.79-1.42-2-3.31A14.32,14.32,0,0,1,37.56,196.45Z"/><path class="cls-8" d="M59.41,173.58c3.26-1.52,6.63-1.21,7.53.71s-1,4.71-4.29,6.23-6.63,1.2-7.53-.71S56.15,175.1,59.41,173.58Z"/><path class="cls-8" d="M74.62,157.15c2.37-5.05,5.43-8.82,7.45-8.15s2.07,5.88-.51,11.39-6.65,8.81-8.43,7.7S72.26,162.2,74.62,157.15Z"/><path class="cls-9" d="M57.89,159.15V82c0-15.57,6.93-29.64,17.59-35.75l38.7-22.17c46.33-26.53,98.7-26.53,145,0l38.71,22.17C308.57,52.33,315.49,66.4,315.49,82v77.18"/><path class="cls-10" d="M312.46,80.79v19.39c-49.22-48.34-115.1-74.62-177.69-59.93-17.18,4-34.87,11.84-45.35,28.33-13.07,20.57-10.54,52.57,5.53,70C106.58,151.12,122,155,137.89,158h-83V80.79c0-15.58,6.92-29.65,17.59-35.76l38.7-22.17c46.32-26.52,98.7-26.52,145,0L294.88,45C305.55,51.14,312.46,65.21,312.46,80.79Z"/><path class="cls-3" d="M315.3,163.91a4.5,4.5,0,0,1-4.5-4.5V82.23c0-14-6-26.52-15.32-31.85L256.77,28.22c-22.36-12.81-46-19.31-70.27-19.31s-47.91,6.5-70.27,19.31L77.52,50.38C68.22,55.71,62.2,68.22,62.2,82.23v77.18a4.5,4.5,0,0,1-9,0V82.23c0-17.18,7.79-32.75,19.85-39.66l38.7-22.16c47.51-27.21,102-27.21,149.5,0L300,42.57C312,49.48,319.8,65.05,319.8,82.23v77.18A4.49,4.49,0,0,1,315.3,163.91Z"/><path class="cls-11" d="M358.91,168a188.7,188.7,0,0,1-7.86,25.11c-1.65,4.39-15.77,41.8-14.06,43.41-34-31.93-86.3-52.37-145-52.37S81.13,204.56,47.14,236.44c-12.27-38.2-42.51-96.29-6.57-129,10.27-9.35,23.35-13.28,36.1-16.5,72.69-18.36,148.62-20.81,221.57-3.88,12,2.79,24,6.15,34.87,12.74s20.46,16.78,25,30C362.43,142.3,361.73,155.35,358.91,168Z"/><path class="cls-12" d="M61.88,102.48C69,96,77.49,92.12,86.27,89.28q-4.09,1-8.18,2c-12.75,3.22-25.83,7.15-36.1,16.5-35.94,32.71-5.7,90.8,6.57,129a163.52,163.52,0,0,1,17-13.88C52.14,185,28.54,132.83,61.88,102.48Z"/><path class="cls-13" d="M104.58,105a1,1,0,0,1-.19-2c6.25-1.26,12.88-2.39,19.71-3.36a1,1,0,0,1,.28,2c-6.79,1-13.39,2.09-19.6,3.34A.68.68,0,0,1,104.58,105Z"/><path class="cls-13" d="M57.19,120.46a1,1,0,0,1-.84-.46,1,1,0,0,1,.3-1.38c.42-.27,10.63-6.73,35.7-12.92a1,1,0,1,1,.48,1.94c-24.75,6.11-35,12.6-35.1,12.66A1,1,0,0,1,57.19,120.46Z"/><path class="cls-13" d="M220.93,96.32h-.09c-6.83-.61-13.48-1-19.79-1.22a1,1,0,0,1,0-2h0c6.34.2,13,.62,19.9,1.23a1,1,0,0,1-.09,2Z"/><path class="cls-13" d="M152,99.31a1,1,0,0,1-.16-2l5.35-.91c10.3-1.78,21-3.62,31.71-3.45a1,1,0,1,1,0,2c-10.58-.16-21.13,1.66-31.34,3.42l-5.37.91Z"/><path class="cls-13" d="M326.33,116.8a1,1,0,0,1-.33-.06c-6.55-2.35-13-4.47-19.07-6.29a1,1,0,0,1-.67-1.25,1,1,0,0,1,1.25-.67c6.13,1.83,12.58,4,19.16,6.33a1,1,0,0,1-.34,1.94Z"/><path class="cls-13" d="M295.34,107.21a1,1,0,0,1-.24,0C270.44,101,258.75,102,258.64,102a1,1,0,1,1-.19-2c.48,0,12.09-1.07,37.13,5.24a1,1,0,0,1-.24,2Z"/><path class="cls-13" d="M105.15,117.87a1,1,0,0,1-.19-2c6.24-1.26,12.88-2.39,19.71-3.36a1,1,0,1,1,.28,2c-6.79,1-13.39,2.09-19.6,3.34A.68.68,0,0,1,105.15,117.87Z"/><path class="cls-13" d="M57.76,133.34a1,1,0,0,1-.54-1.84c.42-.27,10.63-6.73,35.7-12.92a1,1,0,0,1,.48,1.94c-24.69,6.1-35,12.6-35.1,12.66A1,1,0,0,1,57.76,133.34Z"/><path class="cls-13" d="M221.5,109.2h-.09c-6.83-.61-13.49-1-19.79-1.22a1,1,0,0,1-1-1,1,1,0,0,1,1-1c6.33.2,13,.62,19.89,1.23a1,1,0,0,1-.08,2Z"/><path class="cls-13" d="M152.57,112.24a1,1,0,0,1-.35-1.94c.46-.17,11.58-4.16,37.21-4.46a1,1,0,0,1,1,1,1,1,0,0,1-1,1c-25.23.3-36.44,4.3-36.55,4.34A1,1,0,0,1,152.57,112.24Z"/><path class="cls-13" d="M326.9,129.68a1,1,0,0,1-.34-.06c-6.54-2.35-12.95-4.47-19.06-6.29a1,1,0,0,1,.58-1.92c6.13,1.83,12.58,4,19.16,6.33a1,1,0,0,1-.34,1.94Z"/><path class="cls-13" d="M295.91,120.09a1,1,0,0,1-.24,0c-24.72-6.23-36.35-5.2-36.46-5.19a1,1,0,0,1-.2-2c.49,0,12.09-1.07,37.14,5.24a1,1,0,0,1-.24,2Z"/><path class="cls-13" d="M104,132.4a1,1,0,0,1-1-.8,1,1,0,0,1,.78-1.18c6.25-1.25,12.88-2.39,19.71-3.36a1,1,0,0,1,1.14.85,1,1,0,0,1-.85,1.13c-6.8,1-13.4,2.09-19.61,3.34A.65.65,0,0,1,104,132.4Z"/><path class="cls-13" d="M56.62,147.87a1,1,0,0,1-.84-.46,1,1,0,0,1,.3-1.38c.42-.27,10.64-6.73,35.71-12.92a1,1,0,0,1,1.21.73,1,1,0,0,1-.74,1.21c-24.74,6.11-35,12.6-35.1,12.66A1,1,0,0,1,56.62,147.87Z"/><path class="cls-13" d="M220.36,123.73h-.09c-6.83-.62-13.48-1-19.78-1.23a1,1,0,0,1-1-1,1,1,0,0,1,1-1c6.34.2,13,.62,19.9,1.23a1,1,0,0,1-.09,2Z"/><path class="cls-13" d="M151.43,126.77a1,1,0,0,1-.35-1.94c.47-.17,11.58-4.16,37.22-4.46h0a1,1,0,0,1,0,2c-25.29.3-36.43,4.3-36.54,4.34A1.07,1.07,0,0,1,151.43,126.77Z"/><path class="cls-13" d="M325.77,144.22a1,1,0,0,1-.34-.06c-6.54-2.36-12.95-4.48-19.06-6.3a1,1,0,0,1-.67-1.25,1,1,0,0,1,1.24-.67c6.14,1.84,12.59,4,19.16,6.33a1,1,0,0,1-.33,1.95Z"/><path class="cls-13" d="M294.77,134.62l-.24,0c-24.65-6.21-36.35-5.2-36.46-5.19a1,1,0,0,1-.19-2c.48,0,12.08-1.07,37.14,5.24a1,1,0,0,1-.25,2Z"/><path class="cls-8" d="M134.28,55.94a21.68,21.68,0,0,1,9.13,1c2.27.86,3.52,2,3.38,3s-1.6,1.81-3.74,2.36a52.83,52.83,0,0,1-8.1,1.2,52.47,52.47,0,0,1-8.19.23c-2.2-.16-3.76-.65-4.09-1.66s.7-2.36,2.79-3.59A21.52,21.52,0,0,1,134.28,55.94Z"/><path class="cls-8" d="M189.16,54c14.08.87,25.23,3.94,25,6s-11.61,2.48-25.44,1.63S163.63,59,163.64,56.91,175.09,53.15,189.16,54Z"/><path class="cls-3" d="M45,244.59l-2.18-6.77c-1.91-6-4.28-12.43-6.78-19.29-13.82-37.8-31-84.85,1.47-114.42C48.67,94,62.43,89.89,75.57,86.57c75.35-19,152.7-20.37,223.69-3.89C311.33,85.48,324.07,89,335.45,96c12.88,7.83,22.44,19.32,26.92,32.35,4.08,11.86,4.39,25.17.93,40.67h0a191.33,191.33,0,0,1-8,25.71l-.14.4c-10,26.58-13.67,38.62-13.77,40.85a3.89,3.89,0,0,0-1.28-2.7l-6.16,6.56C299.3,207.29,247.58,188.65,192,188.65S84.83,207.26,50.21,239.73ZM197.37,80.24A489.6,489.6,0,0,0,77.77,95.3c-12,3-24.58,6.73-34.17,15.47-28,25.5-12,69.4.92,104.68,1.65,4.52,3.25,8.88,4.7,13.07,36.12-31.14,87.71-48.87,142.8-48.87,54.72,0,106,17.49,142,48.22,1-3.25,2.37-7.53,4.18-12.73,2.27-6.56,5.11-14.37,8.44-23.22l.15-.39A184.81,184.81,0,0,0,354.52,167c3.08-13.83,2.87-25.54-.66-35.78-3.8-11.05-12-20.85-23.09-27.6-9.72-5.91-20.44-9.15-33.54-12.19A441.79,441.79,0,0,0,197.37,80.24ZM358.91,168h0Z"/><path class="cls-8" d="M316.3,283a85,85,0,0,1-.17-10.5c.2-2.77.72-4.63,1.76-4.88s2.37,1.22,3.57,3.91a35.67,35.67,0,0,1,1.44,22.17c-.84,2.82-2,4.45-3,4.34s-1.82-1.89-2.38-4.61A83.3,83.3,0,0,1,316.3,283Z"/><path class="cls-8" d="M310.41,253a8.45,8.45,0,0,1-.74-3.45,4,4,0,0,1,1-2.95,2.9,2.9,0,0,1,3.26-.34,7.5,7.5,0,0,1,3.8,8.75,2.92,2.92,0,0,1-2.48,2.15,4.08,4.08,0,0,1-2.87-1.26A8.5,8.5,0,0,1,310.41,253Z"/><path class="cls-8" d="M300.23,237.15c-1-1.27-.45-3.35,1.22-4.65s3.82-1.33,4.82-.06.44,3.36-1.23,4.66S301.22,238.42,300.23,237.15Z"/><path class="cls-8" d="M258.7,168A36.44,36.44,0,0,1,271.61,173c3,2,4.41,3.89,3.92,4.8s-2.75.81-6,.2-7.55-1.61-12.31-2.55-9.11-1.61-12.36-2.27-5.37-1.37-5.47-2.44,1.91-2.24,5.43-3A36.43,36.43,0,0,1,258.7,168Z"/><path class="cls-8" d="M296.63,182.34a5.05,5.05,0,0,1,2.82,2.8,3,3,0,0,1-.45,3,4.48,4.48,0,0,1-2.58,1.46,4.48,4.48,0,0,1-4.87-2,4.37,4.37,0,0,1-.75-2.87,3,3,0,0,1,1.85-2.44A5.05,5.05,0,0,1,296.63,182.34Z"/><path class="cls-8" d="M320.06,194.45a16.53,16.53,0,0,1,5.18,5.14c1,1.69,1.19,3.15.49,3.94s-2.13.8-3.88.28a28.09,28.09,0,0,1-11.07-7.19c-1.19-1.39-1.77-2.7-1.32-3.67s1.85-1.37,3.8-1.15A16.57,16.57,0,0,1,320.06,194.45Z"/><circle class="cls-3" cx="133.38" cy="300.14" r="22.91"/><circle class="cls-1" cx="143.6" cy="283.11" r="12.7"/><circle class="cls-8" cx="124.18" cy="308.69" r="5.28"/><circle class="cls-3" cx="239.38" cy="305.14" r="22.91"/><circle class="cls-1" cx="249.6" cy="288.11" r="12.7"/><circle class="cls-8" cx="230.18" cy="313.69" r="5.28"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/icons/dynamic-avatar-2.svg b/src/assets/icons/dynamic-avatar-2.svg
deleted file mode 100644
index c4c1722..0000000
--- a/src/assets/icons/dynamic-avatar-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 379.47 510.81"><defs><style>.cls-1{fill:#dfe7ea;}.cls-2{fill:#ceea57;}.cls-3{fill:#213346;}.cls-4{fill:#95bc4a;}.cls-5{fill:#bfe1ee;}.cls-11,.cls-6{fill:#fff;}.cls-7{fill:#f5a2c6;}.cls-8{fill:#d676a3;}.cls-9{fill:#f9637c;}.cls-10{fill:#cc3656;}.cls-11{opacity:0.5;}.cls-12{fill:#f6aecd;}.cls-13{fill:#86b9f8;}.cls-14{fill:#7662fa;}</style></defs><title>Asset 16</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><ellipse class="cls-1" cx="191.74" cy="457.95" rx="179.73" ry="52.86"/><circle class="cls-2" cx="334.64" cy="271.05" r="40.33"/><path class="cls-3" d="M334.64,314.49a44.83,44.83,0,1,1,44.83-44.83A44.88,44.88,0,0,1,334.64,314.49Zm0-80.66a35.83,35.83,0,1,0,35.83,35.83A35.87,35.87,0,0,0,334.64,233.83Z"/><path class="cls-3" d="M356.42,273.33a3,3,0,0,1-2.93-2.41c-3.92-19.6-23.82-16.39-24.67-16.24a3,3,0,0,1-1.05-5.91c9.15-1.63,27.53.65,31.6,21a3,3,0,0,1-2.35,3.53A3.05,3.05,0,0,1,356.42,273.33Z"/><circle class="cls-2" cx="44.83" cy="269.05" r="40.33"/><path class="cls-4" d="M76.23,244.43a40.32,40.32,0,0,0-55.79,55.79,40.33,40.33,0,1,1,55.79-55.79Z"/><path class="cls-3" d="M44.83,312.49a44.83,44.83,0,1,1,44.83-44.83A44.88,44.88,0,0,1,44.83,312.49Zm0-80.66a35.83,35.83,0,1,0,35.83,35.83A35.87,35.87,0,0,0,44.83,231.83Z"/><path class="cls-2" d="M188.76,62h2.72A142.34,142.34,0,0,1,333.82,204.34v92.6a143.7,143.7,0,0,1-143.7,143.7h0a143.7,143.7,0,0,1-143.7-143.7v-92.6A142.34,142.34,0,0,1,188.76,62Z"/><path class="cls-4" d="M208.37,437.76a143.43,143.43,0,0,1-19.77,1.37c-79,0-143.71-64.66-143.71-143.71V200.94c0-77.25,63.22-140.46,140.47-140.46h6.48a136.88,136.88,0,0,1,16.53,1C138.82,69.71,84.43,129.29,84.43,200.94v94.48C84.43,367.76,138.58,428.06,208.37,437.76Z"/><path class="cls-3" d="M188.6,445.15A148.62,148.62,0,0,1,40.39,296.94v-92.6A147.26,147.26,0,0,1,187.24,57.5H190A147.26,147.26,0,0,1,336.8,204.34v92.6A148.62,148.62,0,0,1,188.6,445.15ZM187.24,66.5A138.26,138.26,0,0,0,49.39,204.34v92.6a139,139,0,0,0,237.52,98.31,138.2,138.2,0,0,0,40.89-98.31v-92.6A138.24,138.24,0,0,0,190,66.5Z"/><path class="cls-5" d="M319.19,272.92v.18C318.65,273.12,318.86,273,319.19,272.92Z"/><path class="cls-3" d="M20.84,273.92a2.31,2.31,0,0,1-.37,0,3,3,0,0,1-2.61-3.34c1.7-13.89,7.61-20.76,12.26-24.07a20.44,20.44,0,0,1,10.38-4,3,3,0,0,1,.23,6c-.63,0-14.25,1.06-16.92,22.76A3,3,0,0,1,20.84,273.92Z"/><path class="cls-3" d="M190.57,306.5a3,3,0,0,1-3-3V256.91a3,3,0,1,1,6,0V303.5A3,3,0,0,1,190.57,306.5Z"/><path class="cls-6" d="M40.94,365.6c.72-3.5,2.66-5.94,4-5.52s1.67,3.31,1,6.55-2.1,5.77-3.51,5.62S40.22,369.1,40.94,365.6Z"/><path class="cls-6" d="M42.16,403.44a49.43,49.43,0,0,1-1.78-14.27c.14-3.7.8-5.95,1.48-6,1.47,0,2.43,8.7,5.23,18.9s6.3,18.17,5,18.93c-.59.34-2.31-1.26-4.31-4.37A48.78,48.78,0,0,1,42.16,403.44Z"/><path class="cls-7" d="M137.75,2.51a33.77,33.77,0,0,0-24.37,10.94,34,34,0,0,0-41.26,46,34,34,0,1,0,38.79,54.36,34,34,0,0,0,54.73-27.46c0-.39,0-.78-.06-1.17a34,34,0,1,0,7.68-66.91,34.46,34.46,0,0,0-5.87.62A33.92,33.92,0,0,0,137.75,2.51Z"/><path class="cls-8" d="M89.32,49.48a33.74,33.74,0,0,0,2.8,12.94,34,34,0,0,0,6.82,64,34.92,34.92,0,0,1-6.91.82A34,34,0,0,1,77.12,62.42a34,34,0,0,1,30.57-47.49,34.27,34.27,0,0,1,8.1.82A34,34,0,0,0,89.32,49.48Z"/><path class="cls-3" d="M86.42,130.69A38.47,38.47,0,0,1,66.54,59.3,38.47,38.47,0,0,1,102.61,9.43a38.62,38.62,0,0,1,9.42,1A38,38,0,0,1,137.67,0h0a38.68,38.68,0,0,1,31.88,16c1.2-.14,2.42-.22,3.63-.24a38.47,38.47,0,0,1,28.34,65.18,38.17,38.17,0,0,1-27,11.75,40.18,40.18,0,0,1-4.53-.19,38.46,38.46,0,0,1-58.66,29.07,38.09,38.09,0,0,1-24.22,9.13ZM103.29,18.42h-.53a29.45,29.45,0,0,0-28.94,30,29,29,0,0,0,2.43,11.22l1.75,4L74,65.5a29.47,29.47,0,1,0,33.65,47.16l2.8-2.92,3.2,2.48A29.45,29.45,0,0,0,161.14,88.4c0-.29,0-.58,0-.87l-.53-6.29,6.12,1.55a29.47,29.47,0,1,0,6.65-58.05,28.71,28.71,0,0,0-5.08.54l-3.08.6-1.63-2.68A29.59,29.59,0,0,0,137.83,9h0a29.21,29.21,0,0,0-21.14,9.5l-1.93,2.09L112,19.75A29.32,29.32,0,0,0,103.29,18.42ZM137.75,4.51h0Z"/><polygon class="cls-3" points="225.1 107.59 226.73 112.26 221.44 110.12 233.38 107.94 235.94 107.48 236.58 109.21 243.09 126.94 231.9 111.73 235.06 112.98 224.2 118.39 221.46 119.76 218.98 116.27 215.87 111.89 194.8 82.23 205.66 66.03 225.1 107.59"/><polygon class="cls-3" points="81.49 154.74 81.53 157.94 84.27 155.47 76.54 156.78 74.89 157.06 74.88 158.25 74.82 170.43 78.27 158.75 76.63 160.2 84.41 161.1 86.37 161.33 87.11 158.67 88.04 155.33 95.65 128.68 84.16 125.25 81.49 154.74"/><polygon class="cls-3" points="197.95 122.51 197.9 126.47 194.51 123.42 204.09 125.03 206.15 125.38 206.16 126.86 206.23 141.99 201.95 127.48 203.99 129.29 194.33 130.4 191.89 130.68 190.97 127.38 189.82 123.23 180.37 90.14 194.63 85.89 197.95 122.51"/><polygon class="cls-3" points="149.78 144.16 144.65 143.61 144.93 142.63 148.61 118.63 135.56 121.73 137.8 143.28 138.05 145.98 138.25 148.13 140.4 147.9 147.64 147.1 148.59 155.26 151.23 145.32 151.49 144.35 149.78 144.16"/><circle class="cls-3" cx="241.03" cy="227.35" r="41.06"/><rect class="cls-9" x="238.09" y="225.78" width="15.99" height="86.04" rx="6.5"/><path class="cls-10" d="M249.78,310.38a5.81,5.81,0,0,1-3.69,1.43c-4.42,0-8-5.69-8-12.71V238.48c0-7,3.58-12.7,8-12.7a5.8,5.8,0,0,1,3.69,1.42c-2.56,2.13-4.31,6.38-4.31,11.28V299.1C245.47,304,247.22,308.25,249.78,310.38Z"/><path class="cls-3" d="M246.09,314.81a11,11,0,0,1-11-11v-70a11,11,0,0,1,22,0v70A11,11,0,0,1,246.09,314.81Zm0-86a5,5,0,0,0-5,5v70a5,5,0,1,0,10,0v-70A5,5,0,0,0,246.09,228.78Z"/><path class="cls-6" d="M296.05,131.36a75.23,75.23,0,0,1,6,11c.74,1.78,1.43,3.47,1.95,5.11s1,3.16,1.31,4.57c1.35,5.68,1.2,9.35.22,9.6-2.16.52-6.69-12.4-15.84-26.1-9-13.81-19.06-23.07-17.73-24.84.61-.81,4.05.51,8.73,4,1.17.87,2.42,1.86,3.69,3s2.58,2.43,3.93,3.81A76.62,76.62,0,0,1,296.05,131.36Z"/><path class="cls-6" d="M313.3,178.31c.48,2.42-.82,4.71-2.89,5.12s-4.15-1.22-4.62-3.64.82-4.72,2.9-5.13S312.83,175.89,313.3,178.31Z"/><path class="cls-6" d="M317,202.62c.54,4.11-.73,7.66-2.82,7.94s-4.24-2.84-4.77-6.94.73-7.66,2.83-7.94S316.48,198.52,317,202.62Z"/><circle class="cls-11" cx="229.78" cy="343.53" r="5.28"/><path class="cls-12" d="M138,52.68a29,29,0,0,0-19.37-.87c-4.89,1.53-7.35,3.77-7.61,3.46-.11-.12.35-.84,1.49-1.84A19.53,19.53,0,0,1,118,50.11a27.32,27.32,0,0,1,9.38-1.92,29,29,0,0,1,11.56,2.13,27.34,27.34,0,0,1,9.7,6.66,27.9,27.9,0,0,1,5.25,8,23.39,23.39,0,0,1,1.74,6.16c.19,1.49.1,2.34-.06,2.36-.42.07-.9-3.21-3.31-7.74a30.26,30.26,0,0,0-5.31-7.14A27.38,27.38,0,0,0,138,52.68Z"/><path class="cls-12" d="M108.26,80.3a20.07,20.07,0,0,1,5.12-6.47,17.38,17.38,0,0,1,5.9-3.25,12.35,12.35,0,0,1,4.47-.59c1.06.08,1.62.29,1.61.45,0,.42-2.29.4-5.44,1.83a19,19,0,0,0-5,3.33,20.41,20.41,0,0,0-4.38,5.83,30,30,0,0,0-2.72,13.22c0,3.56.27,5.81-.11,5.89s-1.22-2.07-1.69-5.78a27.59,27.59,0,0,1,0-6.59A24.21,24.21,0,0,1,108.26,80.3Z"/><path class="cls-12" d="M140.43,20.33a25.58,25.58,0,0,1,7.06,2.46,15.34,15.34,0,0,1,4.81,3.92,8.61,8.61,0,0,1,1.76,3.83c.16,1,0,1.54-.14,1.56-.41.07-.75-2-3-4.19a16.3,16.3,0,0,0-4.52-3,28.82,28.82,0,0,0-6.48-2.05,20.5,20.5,0,0,0-6.69-.31,13.86,13.86,0,0,0-5.09,1.69c-2.71,1.55-3.75,3.39-4.09,3.2-.15-.07-.09-.63.35-1.52a9.55,9.55,0,0,1,2.73-3.17,13.55,13.55,0,0,1,5.72-2.52A19.9,19.9,0,0,1,140.43,20.33Z"/><path class="cls-12" d="M186.89,58.43a31.33,31.33,0,0,0,1.87-9.7,11.92,11.92,0,0,0-2.48-7.23,38.35,38.35,0,0,0-3.72-4.12c-.95-1-1.44-1.54-1.33-1.68s.8.18,2,.91a22.1,22.1,0,0,1,4.49,3.76,12.88,12.88,0,0,1,3.43,8.27,30.14,30.14,0,0,1-1.79,10.58,20.67,20.67,0,0,1-2.38,5.16,14,14,0,0,1-3.87,3.81,16.85,16.85,0,0,1-8.49,2.65,18,18,0,0,1-5.85-.68c-1.33-.39-2-.81-1.95-1,.1-.41,3,.43,7.63-.16a16.46,16.46,0,0,0,7.33-2.79A12.18,12.18,0,0,0,184.85,63,19.79,19.79,0,0,0,186.89,58.43Z"/><path class="cls-12" d="M85.1,87.16A13.11,13.11,0,0,1,81,78.56c-.12-2.47.54-3.89.85-3.83s.39,1.48.94,3.56A14,14,0,0,0,94.08,88.92c2.11.43,3.54.36,3.61.74s-1.3,1-3.78,1.06A13.1,13.1,0,0,1,85.1,87.16Z"/><path class="cls-12" d="M133,92.83a24.28,24.28,0,0,0,4.74-.43,20,20,0,0,0,2-.52,16.5,16.5,0,0,0,1.73-.6c2.1-.83,3.36-1.6,3.61-1.3s-.66,1.54-2.78,2.91a13.24,13.24,0,0,1-1.81,1,16.71,16.71,0,0,1-2.21.82,18.08,18.08,0,0,1-10.7-.22,16.23,16.23,0,0,1-2.18-.92,11.2,11.2,0,0,1-1.76-1c-2.06-1.46-2.88-2.81-2.66-3s1.49.54,3.55,1.46c.52.22,1.08.47,1.71.67s1.3.4,2,.6A24.26,24.26,0,0,0,133,92.83Z"/><path class="cls-12" d="M104.17,42.92a20.9,20.9,0,0,1,4-4,17.67,17.67,0,0,1,2.09-1.33,12.45,12.45,0,0,1,2-.9c2.48-.93,4.14-.86,4.19-.55s-1.36.94-3.41,2.17a17.51,17.51,0,0,0-1.62,1.08c-.58.38-1.13.88-1.74,1.37a23.08,23.08,0,0,0-6,8.07c-.29.72-.6,1.4-.8,2.06s-.4,1.29-.55,1.87c-.59,2.31-.7,3.86-1.09,3.89s-.86-1.53-.7-4.17a13.28,13.28,0,0,1,.3-2.13,16.39,16.39,0,0,1,.66-2.4A20.41,20.41,0,0,1,104.17,42.92Z"/><path class="cls-12" d="M163.78,45.73a23.94,23.94,0,0,0,1.71-3.89,22.19,22.19,0,0,0,.81-3.4c.32-2,.34-3.32.72-3.38s.95,1.21,1.09,3.46a14.52,14.52,0,0,1-.35,3.94A16.69,16.69,0,0,1,163,50.82a14.36,14.36,0,0,1-3.2,2.32c-2,1-3.43,1.14-3.54.85s1-1.06,2.54-2.35a22.65,22.65,0,0,0,2.5-2.45A23.79,23.79,0,0,0,163.78,45.73Z"/><path class="cls-6" d="M173.73,70.51a21.63,21.63,0,0,0,8.47-4.27c1.93-1.57,3-3,3.68-2.73.32.11.49.65.41,1.55a8.73,8.73,0,0,1-1.32,3.5,16.46,16.46,0,0,1-10,6.9,22.68,22.68,0,0,1-11.76-.33c-2.83-.87-4.37-1.93-4.22-2.6s2-.89,4.71-1A47.09,47.09,0,0,0,173.73,70.51Z"/><path class="cls-6" d="M186.07,51.39c.2-1.77,1.49-3.08,2.89-2.93s2.38,1.72,2.19,3.49-1.49,3.08-2.89,2.92S185.88,53.16,186.07,51.39Z"/><path class="cls-6" d="M183.86,41.8a2.6,2.6,0,0,1,4.14-3,2.61,2.61,0,0,1-4.14,3Z"/><path class="cls-13" d="M330,302c20.28,37,13.83,73.05,14.54,107.47l-11-12.15a118.62,118.62,0,0,1-28.8,57.47,42.38,42.38,0,0,0-13.34-14.7A89.09,89.09,0,0,1,263.9,487a35.8,35.8,0,0,0-1-29.59,56.4,56.4,0,0,1-30.8,34.29,23.17,23.17,0,0,0,2.52-22.37c-11.17,19-43.3,19.54-55.14,1-.82,3.75-.22,8.67,3.61,9-16.11,2.48-30.85-4.3-41.93-16.25a27.05,27.05,0,0,0,9,17.56,49.18,49.18,0,0,1-40.92-27.17c-20.77,1.29-41.53-12.94-47.8-32.79a9.91,9.91,0,0,1-2.59,9.51c-35.89-18.22-34-99.94-10.46-126.89,0,0,49.48,7.94,79.51,30.74,6.43,4.88,14.43-4.6,23.27-7.4,17.51-5.53,38.32-11.15,56.88-11.22,23.39-.1,35.9,29.56,50.89,15.49C298.57,293.65,329.64,301.39,330,302Z"/><path class="cls-14" d="M345.91,405.22l-11-12.16a118.76,118.76,0,0,1-28.81,57.48,42.3,42.3,0,0,0-13.34-14.7,89,89,0,0,1-27.51,46.89,35.83,35.83,0,0,0-1-29.59,56.4,56.4,0,0,1-30.8,34.29A23.2,23.2,0,0,0,236,465.06c-11.17,19-43.3,19.54-55.14,1-.83,3.75.11,17.55,3.94,17.87-16.1,2.48-31.18-13.18-42.26-25.13.64,6.7,2.31,18.78,7.36,23.23-17.16-.88-31.84-17.37-39.3-32.84-20.78,1.29-41.53-12.95-47.8-32.79a9.91,9.91,0,0,1-2.58,9.51c-12.41-6.3-20.59-20-25-36.31,15.87,11.57,34.55,19.51,53,26.63,12.54,4.82,25.24,9.42,38.46,11.83,12.82,2.33,25.92,2.56,39,2.79,36.17.62,73.84.94,106.53-14.59,9.37-4.45,19.26-12.08,18.93-22.46-.37-11.86-13.35-18.63-24.42-22.88,23.58-3.5,42.91-21.78,53.67-43.05a131.59,131.59,0,0,0,9.48-25.3L333,305C342.73,339,345.19,370.81,345.91,405.22Z"/><path class="cls-3" d="M253.41,500.93l7.73-18.34a31,31,0,0,0,2.25-14.75,61,61,0,0,1-28.12,25.32l-15.22,6.65,9.79-13.42a18.51,18.51,0,0,0,3.37-9.49,38.29,38.29,0,0,1-24.46,8.83,39.29,39.29,0,0,1-20.87-5.26c1,5.16.93,9.73-3.16,11.61l-1.89.86-1.88-.86c-13-6-23.27-12.19-31.89-19.33,1.42,5.57,3,7.6,3.8,8.31l9.71,8.53-12.91-.66c-18.37-.93-33.64-18.1-41.8-33.56-17.77,0-34.88-10-44.23-24.92l-.28.28L61,433l-2.87-1.46c-13.73-7-23.61-22.79-27.84-44.54-6.17-31.81.86-70.33,16-87.71a4.5,4.5,0,1,1,6.78,5.92c-13.31,15.26-19.57,51.18-14,80.07,3.26,16.82,10.08,29.4,19.38,36a5.07,5.07,0,0,0-.1-2.09l8.63-2.54c5.62,17.79,24.6,30.81,43.23,29.66l3-.19,1.31,2.72c7.38,15.29,17.47,24.65,26.45,28.73a83.68,83.68,0,0,1-3-16.73l-1.27-13.24,9.05,9.75c8.53,9.2,18.86,16.65,33,23.73-.31-1.46-.69-2.95-1-4-1.25-5-1.93-7.92-1.4-10.33l2.33-10.64,5.86,9.18c4.71,7.38,13.68,11.69,24,11.5s19.08-4.81,23.52-12.35l4.51-7.66,3.51,8.17a27.18,27.18,0,0,1,2,13.86A51.87,51.87,0,0,0,260,453.4l3.32-10.56,5,9.88a40,40,0,0,1,4.21,17.36,84.32,84.32,0,0,0,15.89-33.6l1.43-6.48,5.49,3.72a47,47,0,0,1,11.36,10.93,115.09,115.09,0,0,0,23.84-50.82l1.7-8.88,10,11.05c2-35.79-3.31-65-16.46-91.39a4.5,4.5,0,1,1,8-4C349,331,354.25,364.9,350.39,407.23l-.93,10.24-12.07-13.36a122.34,122.34,0,0,1-27.94,51.07l-4.26,4.65-3-5.53a37.69,37.69,0,0,0-6.81-9,93.54,93.54,0,0,1-27.08,42.37Z"/><path class="cls-2" d="M159.69,399.62a9.74,9.74,0,0,1-9.71-9.71V352.76a9.74,9.74,0,0,1,9.71-9.71h68a9.75,9.75,0,0,1,9.72,9.71v37.15a9.75,9.75,0,0,1-9.72,9.71"/><path class="cls-4" d="M239,356.81v11.52a9.75,9.75,0,0,0-8.91-5.85h-68a9.74,9.74,0,0,0-9.71,9.71v25.63a9.65,9.65,0,0,1-.81-3.87V356.81a9.75,9.75,0,0,1,9.71-9.72h68A9.76,9.76,0,0,1,239,356.81Z"/><path class="cls-3" d="M193.29,341.91c7,0,13.87,0,20.49.1l9.74.12,2.37,0,1.18,0h.33l.43,0,.85.06a14.26,14.26,0,0,1,6.29,2.29,14.06,14.06,0,0,1,6.23,10.73l0,.78v.65l0,1.07c0,.7,0,1.41-.05,2.11,0,1.39-.09,2.77-.13,4.12-.17,5.41-.37,10.45-.59,15s-.45,8.76-.71,12.42c0,.45-.07.9-.1,1.34,0,.22,0,.44-.05.66s-.05.52-.08.78a11.57,11.57,0,0,1-.74,3,11.41,11.41,0,0,1-3,4.24,9.64,9.64,0,0,1-6.23,2.57,4.68,4.68,0,0,1-1.7-.26c-.38-.14-.55-.3-.55-.46s.17-.34.49-.52l1.35-.66a10.23,10.23,0,0,0,3.89-3.22,8.51,8.51,0,0,0,1.34-3.09,8,8,0,0,0,.12-1.84l0-.5c0-.22,0-.44-.05-.66l-.09-1.34c-.26-3.66-.5-7.82-.72-12.42s-.41-9.63-.59-15c0-1.35-.08-2.73-.12-4.12l-.06-2.11,0-1.07v-.43l0-.3a5.41,5.41,0,0,0-4.95-4.71h-.73l-1.18,0-2.37,0-9.74.12c-6.62.06-13.47.1-20.49.1s-13.87,0-20.48-.1l-9.74-.12-2.38,0-1.18,0h-.73a5.42,5.42,0,0,0-4.94,4.71l0,.3,0,.16v.27l0,1.07c0,.7,0,1.41-.05,2.11,0,1.39-.09,2.77-.13,4.12-.17,5.41-.37,10.45-.59,15s-.46,8.76-.71,12.42c0,.45-.07.9-.1,1.34,0,.22,0,.44,0,.66l0,.5a7.43,7.43,0,0,0,.13,1.84,8.18,8.18,0,0,0,1.34,3.09,10.21,10.21,0,0,0,3.88,3.22l1.35.66c.32.18.5.35.5.52s-.18.32-.55.46A4.74,4.74,0,0,1,157,404a9.6,9.6,0,0,1-6.22-2.57,11.32,11.32,0,0,1-3-4.24,12,12,0,0,1-.74-3c0-.26-.06-.57-.08-.78s0-.44-.05-.66l-.09-1.34c-.26-3.66-.5-7.82-.72-12.42s-.41-9.63-.59-15c0-1.35-.08-2.73-.12-4.12l-.06-2.11,0-1.07v-.65l0-.78a14.08,14.08,0,0,1,6.22-10.73,14.31,14.31,0,0,1,6.29-2.29l.86-.06.43,0h.32l1.18,0,2.38,0,9.74-.12C179.42,342,186.28,341.91,193.29,341.91Z"/><path class="cls-3" d="M60.39,322a37.09,37.09,0,0,0,.47,9,37.78,37.78,0,0,0,2.92,8.91,39.35,39.35,0,0,1-5.49-8A40.74,40.74,0,0,1,55,322.37a44.5,44.5,0,0,1-1-10.27,49.21,49.21,0,0,1,.4-5.25,33.42,33.42,0,0,1,1.13-5.44l10,4.36a23.19,23.19,0,0,0-1.89,3.53,41.21,41.21,0,0,0-1.54,4A38.35,38.35,0,0,0,60.39,322Z"/><path class="cls-3" d="M75.3,330.15c.78,7.09,3.93,14.18,8.49,20.33A45.39,45.39,0,0,1,70,331.43,37.16,37.16,0,0,1,67.79,319,33.53,33.53,0,0,1,70.32,306l9.59,5.16C76.2,316,74.51,323.12,75.3,330.15Z"/><path class="cls-3" d="M102.41,335.48A49,49,0,0,0,109,355a51.46,51.46,0,0,1-11.83-18.14,54.08,54.08,0,0,1-3.61-22.51l10.73,1.85A45.78,45.78,0,0,0,102.41,335.48Z"/><path class="cls-3" d="M279.1,331.6a25.9,25.9,0,0,1-.28,8.41c-.49,2.14-1.22,3.39-1.88,3.33-1.37-.13-2-5.16-2.7-11.16s-1.3-11,0-11.49c.63-.2,1.64.84,2.61,2.8A25.74,25.74,0,0,1,279.1,331.6Z"/><path class="cls-3" d="M300.7,325.92a34.06,34.06,0,0,1-2.28,11.66c-1.17,2.83-2.4,4.35-3,4.13-1.32-.5.23-7.41.4-15.92s-.91-15.49.43-15.91c.62-.19,1.77,1.39,2.79,4.28A34.18,34.18,0,0,1,300.7,325.92Z"/><path class="cls-3" d="M323.44,322.4a51.55,51.55,0,0,1,.48,8.84,42.08,42.08,0,0,1-.84,7.17c-.86,4-2,6.32-2.66,6.19-1.41-.31-.09-10-1.83-21.5s-5.47-20.53-4.18-21.19c.58-.3,2.31,1.61,4.22,5.24a44.14,44.14,0,0,1,2.79,6.64A53.12,53.12,0,0,1,323.44,322.4Z"/><path class="cls-3" d="M68.8,420.47a39.61,39.61,0,0,1-.25-8.28,35.94,35.94,0,0,1,.5-3.58,25.93,25.93,0,0,1,.76-3c1.14-3.68,2.57-5.64,3.16-5.43s.45,2.52.24,6.05c0,.89-.12,1.85-.12,2.88s0,2.13,0,3.28a59.18,59.18,0,0,0,2.11,14.73c.33,1.1.6,2.17.94,3.14s.63,1.89.92,2.73c1.2,3.32,2,5.46,1.47,5.87s-2.43-1.11-4.56-4.32a23.37,23.37,0,0,1-1.57-2.71,33.94,33.94,0,0,1-1.49-3.3A40.12,40.12,0,0,1,68.8,420.47Z"/><path class="cls-3" d="M99.55,433.75a50.42,50.42,0,0,1-.07-13.35c.45-3.36,1.12-5.4,1.79-5.39s1.24,2.09,1.67,5.4.77,7.81,1.45,12.64c.35,2.41.78,4.67,1.25,6.7.27,1,.47,2,.76,2.85l.38,1.3c.14.41.27.8.39,1.18,1,3,1.81,4.94,1.24,5.37s-2.36-.88-4.34-3.84c-.24-.37-.49-.77-.74-1.18s-.46-.87-.7-1.33a28,28,0,0,1-1.31-3.05A39.4,39.4,0,0,1,99.55,433.75Z"/><path class="cls-3" d="M136.2,440.16c-4-14.35-4.59-26.51-3.28-26.67s4.05,11.36,8,25.35,7.6,25.27,6.32,25.82S140.2,454.53,136.2,440.16Z"/><path class="cls-3" d="M244.41,451.81c1.82-6.05,3.09-11.74,4.22-15.84s2.08-6.65,2.75-6.55.91,2.79.66,7.11a75.23,75.23,0,0,1-2.94,16.7,56.28,56.28,0,0,1-3.52,8.82c-.71,1.29-1.35,2.52-2.1,3.61-.37.54-.71,1.07-1.06,1.56l-1.08,1.38c-2.84,3.46-5.24,4.92-5.69,4.49s.9-2.74,2.8-6.4c.24-.45.48-.93.74-1.43l.74-1.58c.54-1.08,1-2.29,1.55-3.52C242.49,457.64,243.49,454.83,244.41,451.81Z"/><path class="cls-3" d="M273,440.9c1.29-7.37,2-14.28,2.87-19.27s1.74-8,2.41-8,1,3.21,1,8.27a116.76,116.76,0,0,1-1.5,19.83,57.15,57.15,0,0,1-2.95,10.79,40,40,0,0,1-4.24,8.17c-3,4.36-5.79,6.2-6.23,5.76s1.21-3.06,3.23-7.47a65,65,0,0,0,3-7.94A85.72,85.72,0,0,0,273,440.9Z"/><path class="cls-3" d="M301.86,422.49c1.43-6,2.41-11.53,3.33-15.56s1.76-6.53,2.43-6.46,1,2.67,1,6.86a74.69,74.69,0,0,1-2,16.31,56.91,56.91,0,0,1-2.88,8.73c-.61,1.29-1.15,2.53-1.8,3.62-.31.55-.6,1.09-.91,1.59l-.95,1.41c-2.48,3.54-4.67,5.16-5.16,4.77s.59-2.76,2.14-6.45l.6-1.45q.3-.76.6-1.59c.45-1.08.82-2.28,1.26-3.51C300.32,428.25,301.13,425.46,301.86,422.49Z"/><path class="cls-3" d="M311.64,413.48c1.55-3.78,2.81-7.46,3.86-10.85.48-1.71,1-3.33,1.35-4.87s.75-3,1.06-4.28c1.21-5.28,1.85-8.64,2.57-8.62s1.22,3.49.85,9.12c-.1,1.41-.23,2.95-.5,4.59s-.58,3.38-1,5.21a72.61,72.61,0,0,1-9.28,22.38c-1,1.56-2,3-3,4.36s-2,2.53-2.89,3.59c-3.73,4.24-6.6,6.27-7.06,5.84s1.41-3.32,4.28-7.9c.72-1.15,1.51-2.4,2.29-3.78s1.62-2.84,2.49-4.39C308.34,420.75,310.06,417.25,311.64,413.48Z"/><path class="cls-6" d="M42.94,339.6c.72-3.5,2.66-5.94,4-5.52s1.67,3.31,1,6.55-2.1,5.77-3.51,5.62S42.22,343.1,42.94,339.6Z"/><path class="cls-6" d="M44.16,377.44a49.43,49.43,0,0,1-1.78-14.27c.14-3.7.8-5.95,1.48-6,1.47,0,2.43,8.7,5.23,18.9s6.3,18.17,5,18.93c-.59.34-2.31-1.26-4.31-4.37A48.78,48.78,0,0,1,44.16,377.44Z"/><path class="cls-3" d="M128.52,338.8H128c-5-.18-8.88-3.13-12-5.51l-.19-.14a150.17,150.17,0,0,0-65.16-28.23A4.5,4.5,0,0,1,52.19,296,159.48,159.48,0,0,1,121.27,326l.19.15c2.35,1.77,4.77,3.61,6.9,3.69s4.58-1.53,7.15-3.22l.75-.49c14.75-9.64,33.89-14.95,53.9-14.95h0c20,0,39.15,5.31,53.9,14.95l.74.48c2.58,1.7,5,3.3,7.15,3.23s4.56-1.92,6.9-3.69l.19-.15A159.59,159.59,0,0,1,328.13,296a4.5,4.5,0,0,1,1.52,8.88,150.17,150.17,0,0,0-65.16,28.23l-.19.14c-3.13,2.38-7,5.33-12,5.51s-9.12-2.53-12.42-4.7l-.71-.47c-27.47-17.94-70.5-17.94-98,0l-.72.47C137.27,336.2,133.32,338.8,128.52,338.8Z"/><path class="cls-3" d="M210.09,385.31h-36a3.5,3.5,0,1,1,0-7h36a3.5,3.5,0,0,1,0,7Z"/><circle class="cls-14" cx="256.32" cy="340.31" r="34.5"/><circle class="cls-6" cx="246.03" cy="330.35" r="40.04"/><circle class="cls-11" cx="250.78" cy="312.53" r="5.28"/><polygon class="cls-3" points="141.26 29.28 141.29 32.05 143.66 29.92 136.97 31.05 135.54 31.29 135.53 32.32 135.48 42.88 138.47 32.75 137.05 34.01 143.79 34.79 145.49 34.99 146.13 32.68 146.93 29.79 152.37 10.18 143.58 3.72 141.26 29.28"/><polygon class="cls-3" points="131.05 92.41 129.84 89.02 133.69 90.55 125.03 92.19 123.17 92.54 122.7 91.28 117.89 78.43 126.08 89.43 123.78 88.53 131.65 84.56 133.64 83.55 135.46 86.07 137.73 89.24 153.18 110.69 145.37 122.52 131.05 92.41"/><circle class="cls-3" cx="123.96" cy="232.98" r="22.91"/><circle class="cls-2" cx="134.18" cy="215.95" r="12.7"/><circle class="cls-6" cx="114.77" cy="241.53" r="5.28"/><circle class="cls-3" cx="242.84" cy="330.2" r="15.77"/><circle class="cls-6" cx="255.89" cy="340.77" r="10.18"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/icons/dynamic-avatar-3.svg b/src/assets/icons/dynamic-avatar-3.svg
deleted file mode 100644
index 81145f9..0000000
--- a/src/assets/icons/dynamic-avatar-3.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 391.79 532.35"><defs><style>.cls-1{fill:#f9cdb7;}.cls-2{fill:#e2a78d;}.cls-3{fill:#213346;}.cls-4{fill:#bfe1ee;}.cls-5{fill:#dfe7ea;}.cls-6{fill:#e99a4f;}.cls-7{fill:#ce7149;}.cls-8,.cls-9{fill:#fff;}.cls-9{opacity:0.5;}</style></defs><title>Asset 17</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><circle class="cls-1" cx="345.9" cy="275.59" r="41.4"/><path class="cls-2" d="M333.5,312.37a41.4,41.4,0,1,0,0-79.56,41.41,41.41,0,0,1,0,79.56Z"/><circle class="cls-1" cx="45.9" cy="275.59" r="41.4"/><path class="cls-2" d="M55.4,314.37a41.4,41.4,0,1,1,0-79.56,41.41,41.41,0,0,0,0,79.56Z"/><path class="cls-3" d="M45.9,320.06a45.9,45.9,0,1,1,45.89-45.9A46,46,0,0,1,45.9,320.06Zm0-82.79a36.9,36.9,0,1,0,36.89,36.89A36.94,36.94,0,0,0,45.9,237.27Z"/><path class="cls-3" d="M21.27,281a3.1,3.1,0,0,1-.43,0,3.51,3.51,0,0,1-3.05-3.9c1.77-14.41,7.92-21.55,12.76-25a21.46,21.46,0,0,1,10.88-4.14,3.5,3.5,0,0,1,.28,7c-.65,0-14.28,1.11-17,23A3.5,3.5,0,0,1,21.27,281Z"/><path class="cls-3" d="M33.65,288.21a3.88,3.88,0,0,1-.82-.09,3.5,3.5,0,0,1-2.59-4.22,32.88,32.88,0,0,0,1-11.59,14.61,14.61,0,0,0-4.4-9.21,3.5,3.5,0,1,1,4.65-5.23,21.52,21.52,0,0,1,6.69,13.58,39.36,39.36,0,0,1-1.16,14.07A3.5,3.5,0,0,1,33.65,288.21Z"/><path class="cls-3" d="M345.9,320.06a45.9,45.9,0,1,1,45.89-45.9A46,46,0,0,1,345.9,320.06Zm0-82.79a36.9,36.9,0,1,0,36.89,36.89A36.94,36.94,0,0,0,345.9,237.27Z"/><path class="cls-3" d="M370.52,281a3.5,3.5,0,0,1-3.47-3.07c-2.69-21.94-16.39-23-17-23a3.52,3.52,0,0,1-3.32-3.66,3.47,3.47,0,0,1,3.6-3.34,21.46,21.46,0,0,1,10.88,4.14c4.85,3.45,11,10.59,12.76,25A3.5,3.5,0,0,1,371,281,3,3,0,0,1,370.52,281Z"/><path class="cls-3" d="M358.15,288.21a3.49,3.49,0,0,1-3.4-2.69,39.2,39.2,0,0,1-1.17-14.08,21.56,21.56,0,0,1,6.69-13.57,3.5,3.5,0,1,1,4.66,5.23,14.56,14.56,0,0,0-4.4,9.21,32.42,32.42,0,0,0,1,11.59,3.52,3.52,0,0,1-2.6,4.22A3.72,3.72,0,0,1,358.15,288.21Z"/><path class="cls-1" d="M196.57,61h2.79a146.1,146.1,0,0,1,146.1,146.1v95A147.5,147.5,0,0,1,198,449.67h0a147.5,147.5,0,0,1-147.5-147.5v-95A146.1,146.1,0,0,1,196.57,61Z"/><path class="cls-2" d="M216.7,446.7a147.74,147.74,0,0,1-20.29,1.41c-81.14,0-147.5-66.37-147.5-147.5v-97c0-79.3,64.87-144.18,144.17-144.18h6.65a142.14,142.14,0,0,1,17,1C152.26,68.11,96.42,126.84,86.17,192.3a509.6,509.6,0,0,1-13.33,61.87L59.49,300.61C59.49,374.86,145.07,436.74,216.7,446.7Z"/><path class="cls-3" d="M196.41,454.17a152.43,152.43,0,0,1-152-152V207.12A151,151,0,0,1,195,56.52h2.79a151,151,0,0,1,150.61,150.6v95.05a152.45,152.45,0,0,1-152,152ZM195,65.52a142,142,0,0,0-141.6,141.6v95.05a143.43,143.43,0,0,0,143,143h0a143.43,143.43,0,0,0,143-143V207.12A142,142,0,0,0,197.8,65.52Z"/><path class="cls-4" d="M330.44,277.5v.2C329.89,277.72,330.11,277.59,330.44,277.5Z"/><ellipse class="cls-5" cx="189.64" cy="471.35" rx="179.73" ry="52.86"/><path class="cls-6" d="M340.74,325.56c21.15,38.59,14.42,76.21,15.16,112.11L344.45,425A123.67,123.67,0,0,1,314.4,485a44.13,44.13,0,0,0-13.92-15.33,92.89,92.89,0,0,1-28.69,48.92,37.34,37.34,0,0,0-1.06-30.87,58.87,58.87,0,0,1-32.13,35.77,24.22,24.22,0,0,0,2.63-23.34c-11.66,19.79-45.18,20.39-57.53,1-.86,3.91-.23,9.05,3.76,9.38-16.8,2.59-32.18-4.49-43.74-16.95a28.25,28.25,0,0,0,9.37,18.32,51.33,51.33,0,0,1-42.69-28.35c-21.68,1.35-43.33-13.5-49.87-34.21a10.36,10.36,0,0,1-2.7,9.92C20.38,440.24,22.38,355,46.91,326.87c0,0,51.63,8.28,83,32.07,20,15.18,54.48-19.31,83.62-19.43,24.41-.11,37.46,30.85,53.1,16.16C308,316.82,340.38,324.9,340.74,325.56Z"/><path class="cls-7" d="M357.35,433.22,345.9,420.54a123.83,123.83,0,0,1-30,60,44.26,44.26,0,0,0-13.92-15.34,92.85,92.85,0,0,1-28.69,48.92,37.38,37.38,0,0,0-1.06-30.87A58.84,58.84,0,0,1,240.05,519a24.22,24.22,0,0,0,2.63-23.33c-11.66,19.79-45.18,20.39-57.53,1-.87,3.92.11,18.31,4.11,18.65-16.8,2.58-32.53-13.75-44.09-26.22.67,7,2.41,19.59,7.68,24.23-17.9-.91-33.22-18.12-41-34.26-21.68,1.35-43.33-13.5-49.87-34.21a10.38,10.38,0,0,1-2.7,9.93C46.34,448.23,37.8,434,33.19,416.91,49.75,429,69.24,437.27,88.51,444.7c13.08,5,26.33,9.83,40.12,12.34,13.38,2.43,27.05,2.67,40.65,2.91,37.73.65,77,1,111.14-15.22,9.78-4.65,20.09-12.6,19.75-23.43-.39-12.38-13.93-19.44-25.48-23.87,24.6-3.65,44.78-22.73,56-44.92a136.88,136.88,0,0,0,9.89-26.39l3.31,2.58C354,364.15,356.61,397.32,357.35,433.22Z"/><path class="cls-6" d="M180.3,341l-49.84,18.58-82-37.21a62.33,62.33,0,0,0-12.09,21.43A237,237,0,0,1,86,361.31a244.47,244.47,0,0,1,22.74,12.33c4,2.46,12.45,10.51,17.42,9.89a10.29,10.29,0,0,0,4.12-1.85c45.61-29.33,79.08-30.62,132.55-21.06L237.74,346Z"/><path class="cls-3" d="M261.36,532.35,269.09,514a32.54,32.54,0,0,0,2.3-16.08,63.44,63.44,0,0,1-29.54,26.86l-15.22,6.65L236.41,518A19.55,19.55,0,0,0,240,507.55c-6.64,5.87-15.71,9.29-25.74,9.47a40.79,40.79,0,0,1-22.06-5.69c1.1,5.49,1.16,10.38-3.1,12.33l-1.88.87-1.88-.87c-13.79-6.36-24.61-12.91-33.69-20.51,1.53,6.3,3.28,8.56,4.17,9.34l9.71,8.53-12.91-.66c-19.13-1-35-18.9-43.5-35h-.06c-18.58,0-36.48-10.43-46.17-26.13l-.47.48L60.12,462l-2.88-1.46C43,453.25,32.7,436.8,28.31,414.16,21.88,381,29.19,340.91,45,322.83a4.5,4.5,0,1,1,6.78,5.92c-14.15,16.22-20.57,53-14.61,83.7,3.45,17.74,10.68,31,20.55,37.85a5.39,5.39,0,0,0-.06-2.56l8.64-2.54c5.89,18.64,25.8,32.28,45.3,31.07l3-.19,1.32,2.73C123.72,495,134.47,504.86,144,509a85.81,85.81,0,0,1-3.29-17.82L139.42,478l9.05,9.75c9,9.69,19.89,17.53,34.83,25-.35-1.64-.78-3.38-1.09-4.62-1.3-5.17-2-8.22-1.46-10.69l2.33-10.64,5.86,9.18c4.95,7.76,14.36,12.28,25.15,12.09s20-5,24.71-13l4.51-7.66,3.5,8.17a28.27,28.27,0,0,1,2,14.82,54.35,54.35,0,0,0,19.11-26.83L271.21,473l5,9.89a41.62,41.62,0,0,1,4.38,18.57,88.11,88.11,0,0,0,16.95-35.57l1.43-6.48,5.49,3.73a48.76,48.76,0,0,1,11.95,11.55,120.21,120.21,0,0,0,25.08-53.29l1.69-8.89,10.47,11.59c2.16-37.59-3.37-68.28-17.17-95.91a4.5,4.5,0,1,1,8-4c15.83,31.7,21.33,67,17.31,111.15l-.93,10.24-12.53-13.87a127.51,127.51,0,0,1-29.2,53.55l-4.26,4.65-3-5.54a39.94,39.94,0,0,0-7.38-9.62,97.41,97.41,0,0,1-28.29,44.41Z"/><path class="cls-1" d="M163.08,427.38a10.16,10.16,0,0,1-10.14-10.13V378.49a10.17,10.17,0,0,1,10.14-10.14H234a10.17,10.17,0,0,1,10.13,10.14v38.76A10.16,10.16,0,0,1,234,427.38"/><path class="cls-2" d="M245.85,382.71v12a10.15,10.15,0,0,0-9.29-6.1H165.61a10.16,10.16,0,0,0-10.14,10.13V425.5a10.1,10.1,0,0,1-.84-4V382.71a10.16,10.16,0,0,1,10.13-10.13h71A10.16,10.16,0,0,1,245.85,382.71Z"/><path class="cls-3" d="M198.13,367.18c7.32,0,14.47,0,21.37.1l10.16.12,2.48,0,1.23,0h.34l.45,0,.89.06a14.83,14.83,0,0,1,6.56,2.4,14.65,14.65,0,0,1,6.5,11.19l0,.81v.68l0,1.11L248,386c0,1.45-.08,2.89-.13,4.3-.18,5.64-.38,10.9-.61,15.69s-.48,9.14-.75,12.95c0,.48-.06.95-.1,1.41,0,.23,0,.46,0,.68s-.05.55-.08.81a12.57,12.57,0,0,1-.77,3.1,12,12,0,0,1-3.1,4.42A10.12,10.12,0,0,1,236,432a4.84,4.84,0,0,1-1.78-.27c-.39-.15-.58-.31-.58-.49s.19-.35.52-.54l1.41-.68a10.84,10.84,0,0,0,4.06-3.37,8.74,8.74,0,0,0,1.39-3.21,8.13,8.13,0,0,0,.13-1.92l0-.53c0-.22,0-.45-.05-.68,0-.46-.07-.93-.1-1.41-.27-3.81-.52-8.15-.74-12.95s-.44-10.05-.62-15.69c0-1.41-.09-2.85-.13-4.3l-.06-2.21,0-1.11v-.28l0-.16,0-.32a5.7,5.7,0,0,0-2.72-4.14,5.59,5.59,0,0,0-2.44-.77h-.76l-1.23,0-2.48,0-10.16.12c-6.9.07-14.05.11-21.37.11s-14.47,0-21.37-.11L166.59,377l-2.47,0-1.23,0h-.76a5.59,5.59,0,0,0-2.44.77,5.7,5.7,0,0,0-2.72,4.14l0,.32,0,.16v.28l0,1.11-.06,2.21c0,1.45-.09,2.89-.13,4.3-.18,5.64-.39,10.9-.62,15.69s-.47,9.14-.74,12.95c0,.48-.07.95-.1,1.41,0,.23,0,.46,0,.68l0,.53a8.13,8.13,0,0,0,.13,1.92,8.58,8.58,0,0,0,1.39,3.21,10.69,10.69,0,0,0,4.06,3.37l1.4.68c.34.19.52.37.52.54s-.18.34-.57.49a4.84,4.84,0,0,1-1.78.27,10.14,10.14,0,0,1-6.5-2.68,12,12,0,0,1-3.09-4.42,12.57,12.57,0,0,1-.77-3.1c0-.26-.07-.59-.08-.81l-.06-.68c0-.46-.06-.93-.1-1.41-.26-3.81-.51-8.15-.74-12.95s-.43-10.05-.61-15.69c0-1.41-.09-2.85-.13-4.3,0-.73-.05-1.47-.07-2.21l0-1.11V382l0-.81a14.74,14.74,0,0,1,13.06-13.59l.89-.06.45,0h.34l1.23,0,2.47,0,10.17-.12C183.66,367.21,190.81,367.18,198.13,367.18Z"/><path class="cls-3" d="M59.48,346.35a37.83,37.83,0,0,0,.49,9.41,39.45,39.45,0,0,0,3,9.29,40.75,40.75,0,0,1-5.73-8.37,42.54,42.54,0,0,1-3.46-9.9,46.05,46.05,0,0,1-1-10.71,50.92,50.92,0,0,1,.42-5.48,35.69,35.69,0,0,1,1.17-5.68l10.41,4.56a24.7,24.7,0,0,0-2,3.68,43.89,43.89,0,0,0-1.6,4.2A39.74,39.74,0,0,0,59.48,346.35Z"/><path class="cls-3" d="M75,354.9c.81,7.4,4.1,14.8,8.86,21.21a47.35,47.35,0,0,1-14.38-19.87,38.82,38.82,0,0,1-2.31-12.95,35.09,35.09,0,0,1,2.63-13.62l10,5.38C76,340.17,74.21,347.57,75,354.9Z"/><path class="cls-3" d="M103.32,360.47a51,51,0,0,0,6.84,20.32,54,54,0,0,1-12.35-18.93A56.65,56.65,0,0,1,94,338.38l11.2,1.92A47.79,47.79,0,0,0,103.32,360.47Z"/><path class="cls-3" d="M287.66,356.41a26.93,26.93,0,0,1-.31,8.78c-.5,2.23-1.26,3.53-2,3.48-1.43-.15-2-5.39-2.82-11.65s-1.36-11.51,0-12c.66-.22,1.71.87,2.72,2.91A27,27,0,0,1,287.66,356.41Z"/><path class="cls-3" d="M310.19,350.49a35.36,35.36,0,0,1-2.39,12.16c-1.21,3-2.49,4.54-3.14,4.31-1.37-.52.25-7.73.42-16.61s-.95-16.16.45-16.6c.65-.19,1.85,1.45,2.91,4.47A35.62,35.62,0,0,1,310.19,350.49Z"/><path class="cls-3" d="M333.91,346.82a53,53,0,0,1,.5,9.22,44.45,44.45,0,0,1-.88,7.48c-.89,4.19-2.12,6.59-2.77,6.45-1.47-.31-.09-10.37-1.91-22.42s-5.7-21.42-4.36-22.11c.6-.31,2.41,1.68,4.41,5.46a46.7,46.7,0,0,1,2.91,6.93A56.29,56.29,0,0,1,333.91,346.82Z"/><path class="cls-3" d="M68.25,449.13a41,41,0,0,1-.26-8.64,36.07,36.07,0,0,1,.52-3.73,28.41,28.41,0,0,1,.79-3.18c1.19-3.83,2.68-5.88,3.3-5.66s.47,2.63.25,6.32c0,.92-.12,1.92-.13,3s0,2.22,0,3.41a68.87,68.87,0,0,0,.61,7.76A75.5,75.5,0,0,0,74.89,456c.34,1.15.63,2.26,1,3.27s.66,2,1,2.85c1.24,3.47,2.14,5.7,1.53,6.13s-2.54-1.16-4.76-4.51A26.15,26.15,0,0,1,72,460.94a35.74,35.74,0,0,1-1.55-3.44A41.24,41.24,0,0,1,68.25,449.13Z"/><path class="cls-3" d="M100.32,463a52.94,52.94,0,0,1-.06-13.92c.47-3.51,1.17-5.64,1.87-5.63s1.28,2.19,1.74,5.63.8,8.16,1.51,13.2c.37,2.51.82,4.86,1.3,7,.29,1,.5,2.06.8,3q.19.7.39,1.35l.41,1.23c1,3.14,1.89,5.16,1.29,5.61s-2.46-.92-4.52-4l-.78-1.23c-.25-.43-.48-.9-.73-1.39a31.63,31.63,0,0,1-1.37-3.18A41.46,41.46,0,0,1,100.32,463Z"/><path class="cls-3" d="M138.57,469.67c-4.22-15-4.79-27.65-3.43-27.82s4.23,11.85,8.35,26.45,7.93,26.36,6.6,26.93S142.74,484.66,138.57,469.67Z"/><path class="cls-3" d="M251.46,481.82c1.89-6.31,3.22-12.24,4.4-16.52s2.17-6.94,2.88-6.83.94,2.91.68,7.41a78.07,78.07,0,0,1-3.07,17.43,59.38,59.38,0,0,1-3.67,9.2,42.39,42.39,0,0,1-2.2,3.76c-.37.57-.73,1.13-1.1,1.64l-1.13,1.43c-3,3.61-5.46,5.14-5.93,4.69s.94-2.87,2.92-6.68c.25-.47.5-1,.77-1.49l.78-1.65c.56-1.12,1-2.39,1.62-3.67C249.45,487.91,250.5,485,251.46,481.82Z"/><path class="cls-3" d="M281.25,470.44c1.34-7.68,2-14.9,3-20.1s1.81-8.37,2.51-8.31,1.07,3.35,1.08,8.62a122.32,122.32,0,0,1-1.55,20.69,60.77,60.77,0,0,1-3.08,11.26,42.45,42.45,0,0,1-4.42,8.53c-3.14,4.54-6,6.46-6.51,6s1.27-3.2,3.37-7.8a68.21,68.21,0,0,0,3.11-8.29A89.28,89.28,0,0,0,281.25,470.44Z"/><path class="cls-3" d="M311.39,451.23c1.49-6.22,2.52-12,3.48-16.23s1.83-6.81,2.54-6.73,1.08,2.78,1,7.15a78.88,78.88,0,0,1-2.11,17,58.26,58.26,0,0,1-3,9.11c-.63,1.35-1.19,2.63-1.87,3.78-.33.57-.63,1.13-1,1.65l-1,1.47c-2.59,3.69-4.87,5.39-5.38,5s.61-2.87,2.22-6.72c.2-.48.42-1,.64-1.51s.41-1.08.62-1.66c.47-1.12.85-2.38,1.32-3.67C309.79,457.25,310.63,454.34,311.39,451.23Z"/><path class="cls-3" d="M321.6,441.84c1.61-3.95,2.93-7.79,4-11.33.5-1.78,1-3.46,1.41-5.07s.78-3.1,1.1-4.47c1.26-5.5,1.93-9,2.68-9s1.27,3.64.89,9.52c-.1,1.46-.24,3.07-.52,4.78s-.61,3.53-1,5.44a76,76,0,0,1-9.69,23.34c-1.07,1.63-2.07,3.19-3.13,4.56s-2.05,2.64-3,3.74c-3.89,4.43-6.89,6.55-7.37,6.09s1.47-3.46,4.47-8.24c.75-1.2,1.57-2.5,2.39-3.94s1.69-3,2.6-4.58C318.16,449.42,320,445.77,321.6,441.84Z"/><path class="cls-8" d="M41.38,364.78c.75-3.65,2.73-6.2,4.07-5.78s1.62,3.43.93,6.81-2.14,6-3.55,5.89S40.63,368.42,41.38,364.78Z"/><path class="cls-8" d="M42.64,404.21a53,53,0,0,1-1.88-14.87c.13-3.85.79-6.2,1.47-6.2,1.47,0,2.42,9.08,5.35,19.74s6.63,19,5.37,19.72c-.59.34-2.36-1.34-4.42-4.6A51.58,51.58,0,0,1,42.64,404.21Z"/><path class="cls-3" d="M130.55,363.73h-.49c-5.14-.18-9.18-3.24-12.42-5.71l-.2-.15a157,157,0,0,0-68.07-29.49,4.5,4.5,0,0,1,1.52-8.87,166.07,166.07,0,0,1,72,31.19l.2.15c2.46,1.87,5,3.8,7.3,3.89s4.87-1.61,7.58-3.4l.77-.5c15.36-10,35.29-15.56,56.13-15.56h0c20.83,0,40.77,5.52,56.13,15.56l.77.5c2.71,1.79,5.25,3.48,7.58,3.4s4.84-2,7.3-3.89l.2-.15a166.07,166.07,0,0,1,72-31.19,4.5,4.5,0,0,1,1.52,8.87,157,157,0,0,0-68.07,29.49l-.2.15c-3.24,2.46-7.28,5.53-12.42,5.71s-9.43-2.62-12.85-4.87l-.74-.49c-28.72-18.76-73.71-18.76-102.43,0l-.74.49C139.6,361,135.5,363.73,130.55,363.73Z"/><path class="cls-3" d="M195.39,318.4a3.5,3.5,0,0,1-3.5-3.5V268.31a3.5,3.5,0,0,1,7,0V314.9A3.5,3.5,0,0,1,195.39,318.4Z"/><path class="cls-2" d="M209.25,194.71c-1.68,7.42-1.08,17.32,4.13,23.31,6.07,7,15.65,5.56,23.92,5.22a103.26,103.26,0,0,1,30,3.06c8,2,15.14,6.95,23.27,8.36,8.91,1.55,11-3.19,5.06-9.72-6.94-7.66-17-15.81-26.44-20.25a118.77,118.77,0,0,0-59.61-10.31"/><path class="cls-6" d="M210.19,183.79c-1.68,7.41-1.09,17.31,4.12,23.3,6.07,7,15.65,5.57,23.92,5.22a103.23,103.23,0,0,1,30,3.07c8,2.05,15.15,6.94,23.27,8.36,8.91,1.55,11-3.2,5.07-9.73-6.95-7.65-17-15.81-26.45-20.24a118.64,118.64,0,0,0-59.6-10.32"/><path class="cls-3" d="M294.6,227.53a21.4,21.4,0,0,1-3.68-.35c-4.88-.84-9.33-2.79-13.63-4.67a65.63,65.63,0,0,0-9.91-3.74,99.68,99.68,0,0,0-29-3c-.89,0-1.79.08-2.69.13-7.79.43-17.48,1-24-6.55-6.37-7.32-6.62-18.78-4.9-26.37a3.52,3.52,0,0,1,1.16-1.91,3.48,3.48,0,0,1,2.26-1.14,122,122,0,0,1,61.44,10.63c9.08,4.27,19.64,12.34,27.55,21.06,5.45,6,4.5,10.13,3.44,12.05C301.77,225.25,299.66,227.53,294.6,227.53Zm-51.81-18.82A105.61,105.61,0,0,1,269.13,212a72.87,72.87,0,0,1,11,4.1c4.1,1.8,8,3.49,12,4.2a8.67,8.67,0,0,0,4.3,0c-.08-.54-.6-1.9-2.43-3.91-7.32-8.08-17-15.53-25.34-19.44a115.35,115.35,0,0,0-55.46-10.2c-.91,6.15-.12,13.61,3.76,18.07,4.29,4.93,11.12,4.55,18.35,4.15l2.78-.14C239.66,208.75,241.23,208.71,242.79,208.71Z"/><path class="cls-2" d="M183.07,186.43c1.68,7.42,1.09,17.32-4.12,23.31-6.08,7-15.65,5.56-23.92,5.21A103.64,103.64,0,0,0,125,218c-8,2-15.14,6.95-23.27,8.36-8.9,1.55-11-3.2-5.06-9.72,7-7.66,17-15.82,26.45-20.25,17.56-8.26,39.91-12.29,59.6-10.31"/><path class="cls-6" d="M178.31,175.81c1.68,7.42,1.09,17.32-4.12,23.31-6.08,7-15.66,5.56-23.93,5.21a103.27,103.27,0,0,0-30,3.07c-8,2-15.14,6.95-23.27,8.36-8.91,1.55-11-3.2-5.06-9.72,6.94-7.66,17-15.82,26.45-20.25,17.56-8.26,39.9-12.29,59.6-10.32"/><path class="cls-3" d="M93.9,219.55c-5.06,0-7.17-2.27-8-3.82-1.05-1.92-2-6,3.44-12,7.91-8.72,18.47-16.8,27.56-21.07A122.07,122.07,0,0,1,178.31,172a3.5,3.5,0,0,1,2.25,1.14,3.44,3.44,0,0,1,1.16,1.91c1.72,7.59,1.47,19.05-4.89,26.37-6.54,7.52-16.23,7-24,6.56l-2.69-.14a99.71,99.71,0,0,0-29,3,66,66,0,0,0-9.91,3.74c-4.3,1.88-8.75,3.83-13.63,4.68A21.29,21.29,0,0,1,93.9,219.55Zm-1.83-7.24a8.88,8.88,0,0,0,4.3,0c4-.7,7.93-2.4,12-4.19a72.1,72.1,0,0,1,11-4.11,106.66,106.66,0,0,1,31-3.17c.91,0,1.84.09,2.78.14,7.23.4,14.06.77,18.36-4.16,3.87-4.46,4.66-11.92,3.75-18.07A115.18,115.18,0,0,0,119.85,189c-8.31,3.9-18,11.35-25.35,19.43C92.67,210.41,92.15,211.77,92.07,212.31Z"/><path class="cls-7" d="M340.46,243.84c-6-46.08-35.17-92.93-58.18-123.34l-7-5.27,60-2.06C346.81,155.27,349.82,201.11,340.46,243.84Z"/><path class="cls-8" d="M249.46,120.86a38.06,38.06,0,0,1,6.86,3.6,29.12,29.12,0,0,1,4.87,4c2.51,2.63,3.45,4.8,2.77,5.58s-2.86.14-5.88-1.15c-1.51-.65-3.27-1.42-5.19-2.28s-4-1.75-6.26-2.65-4.4-1.67-6.37-2.4-3.8-1.34-5.34-1.9c-3.08-1.15-5.09-2.14-5-3.22s2.22-2,5.84-2.14a29.39,29.39,0,0,1,6.3.43A38.48,38.48,0,0,1,249.46,120.86Z"/><path class="cls-6" d="M92.19,132.81c29.19-4.84,58.37,3.32,87,9,29,5.73,57,5.91,86-.74,38.4-8.81,88.08-27.83,106.7-71.12A76.9,76.9,0,0,0,375,61.34c-20.42,14.6-47.12,12.59-69.71,3s-42.46-25.77-63.5-39.17S197.13.91,173.16,3.63c-23.29,2.64-47.76,17.86-65.39,35A78.55,78.55,0,0,0,91.53,60.7C88,68.12,87.33,78.9,81.26,84.4c-2.86,2.59-6.59,3.46-10,5.08-15.49,7.47-21.13,29-23.64,48-5.17,39-3.54,79,1.88,118"/><path class="cls-3" d="M344,247a4.31,4.31,0,0,1-1.12-.15,4.5,4.5,0,0,1-3.24-5.48c11.44-44.36,5.43-83.13-7.1-127.69a4.5,4.5,0,1,1,8.66-2.44c12.93,46,19.09,86.07,7.16,132.38A4.51,4.51,0,0,1,344,247Z"/><path class="cls-7" d="M84.69,146.36c0,1.6,0,3.18-.09,4.75L75.34,178.6l-3.12,9.24c-3.13,5.88-6.5,11.7-9.62,17.59S59.57,217,57.35,223a130.31,130.31,0,0,0-6.44,22.57c-2-10.35-6-20.67-7.22-31.15,4.9-4.13,7.94-10.22,9.47-16.49,1.66-6.79,1.69-13.86,1.72-20.85a34.9,34.9,0,0,1,7.45,16.14c.05-.22.1-.46.15-.69q4.08-19.68,6.46-39.66c.72,1.35,1.38,2.72,2,4.13a71.28,71.28,0,0,1,2.81,9.87c0-.33.09-.64.12-1Q76,150.39,76.69,134.7A48.12,48.12,0,0,1,84.69,146.36Z"/><path class="cls-7" d="M338,110.71a155.88,155.88,0,0,1-30.76,16c-2.21.87-4.44,1.72-6.67,2.52-4.79,1.72-9.61,3.25-14.4,4.64-8.59,2.5-17.07,4.5-25.07,6.1-29,5.82-57,5.66-86,.65-15.34-2.66-30.82-5.94-46.39-7.76h0l-37.41.79c0,.4.09.81.12,1.21l-1.06.14-1.67,4.22h0l-1.12,2.81c.18-1.56.3-3.14.34-4.74a56.14,56.14,0,0,0-.35-8.13l35.56-.75a95,95,0,0,1-13.84,2l1.47,0a70.84,70.84,0,0,0,14.31-2h0c10-2.44,23.3-8.24,32.64-12.89-1.21,3.52-4,10.23-7.47,11.6,13.7.77,23.75-2.55,37.16-5.45a30.37,30.37,0,0,1-12.68,10.25l-.52.22c.56,0,1.12,0,1.69,0,.17-.09.33-.19.49-.29a49.15,49.15,0,0,0,6.42-4.7s-3.72,6-3.72,6h0a103,103,0,0,0,44.29-4.43l5.39-1.77,5.76-.8c-1.71,1.75-6.58,3.31-8.61,4.67a34.78,34.78,0,0,1-9.85,4.61c1.37,0,3.49,2.12,4.85,2,10.13-.7,19.39-4.89,29.33-7.14,3.41-.77,7.56-2.33,11-3.14,3-.73,12.1-3.72,15-4.82L275,125.25l3.61-.08-2.11-.59-3,3c.11,0-.86,1.54-.75,1.5,16.8-4.79,47.23-14.23,63.65-20.18h1.07C337.63,109.47,337.82,110.08,338,110.71Z"/><path class="cls-3" d="M49.07,260.3a4.4,4.4,0,0,1-1.42-.23,4.51,4.51,0,0,1-2.85-5.69c3-8.87,40.51-120.88,40.89-122a4.5,4.5,0,0,1,8.54,2.86c-.38,1.13-37.94,113.13-40.89,122A4.5,4.5,0,0,1,49.07,260.3Z"/><path class="cls-8" d="M53.66,144.87a12,12,0,0,1,3.85-5.08c1.42-1,2.76-1.21,3.62-.61s1.14,1.88,1,3.42A20.34,20.34,0,0,1,58,152.52c-1,1.17-2.11,1.87-3.16,1.67s-1.81-1.31-2.09-3A12,12,0,0,1,53.66,144.87Z"/><path class="cls-8" d="M73.29,124.32c2.9-1.35,6-.89,6.87,1s-.73,4.57-3.63,5.93-6,.89-6.87-1S70.39,125.68,73.29,124.32Z"/><path class="cls-8" d="M86.6,109.93c2.1-4.46,5-7.73,7-7.06s2.24,5.38-.07,10.31-6.09,7.77-7.88,6.65S84.52,114.4,86.6,109.93Z"/><path class="cls-3" d="M70.57,69.83a55.25,55.25,0,0,0-9.49-9.16c-2.74-2-4.72-2.87-5.16-2.37-.89,1.07,4.59,7,10.86,14.67l2.69,3.26a17.67,17.67,0,0,0-6.57-.85c-2,.18-3.16.77-3.19,1.43s1,1.34,2.69,2,3.87,1.45,6.3,2.34,4.61,1.76,6.3,2.31l.77.23c1.72,1.88,2.94,2.92,3.46,2.62s.07-2.44-1.41-5.5A56.54,56.54,0,0,0,70.57,69.83Z"/><path class="cls-3" d="M189.84,121.17c-.54.28-1.18.64-1.9,1.06s-1.52.9-2.37,1.43l-1.32.83-1.38.88-2.93,1.88-1.53,1c-.26.16-.51.32-.78.47l-.78.48q-1.57.94-3.18,1.83c-1.07.57-2.15,1.12-3.22,1.63l-.82.36c-.26.13-.53.24-.81.36l-1.6.65c-1.07.4-2.11.8-3.13,1.09-.51.18-1,.29-1.49.44s-1,.24-1.43.37l-1.35.3-1.25.23c-.79.12-1.5.23-2.1.29s-1.08.11-1.41.15l-.52.07.41.31a10.67,10.67,0,0,0,1.24.79,16.92,16.92,0,0,0,2.09,1l1.36.43c.48.12,1,.24,1.54.35s1.12.18,1.71.23,1.22.09,1.85.09a22.9,22.9,0,0,0,4-.34,18.43,18.43,0,0,0,2.06-.44l1-.28,1-.34a27.94,27.94,0,0,0,4-1.77,34.42,34.42,0,0,0,3.63-2.31l.84-.64c.27-.21.53-.44.79-.66.53-.44,1-.89,1.51-1.36a33.1,33.1,0,0,0,2.6-2.77c.39-.46.75-.92,1.1-1.37l.95-1.32c.59-.87,1.1-1.68,1.52-2.42s.77-1.4,1-2,.46-1,.59-1.32l.19-.49-.47.22C190.82,120.66,190.38,120.88,189.84,121.17Z"/><path class="cls-3" d="M232.08,127.34l-2.08.93c-.79.37-1.67.79-2.64,1.22-.47.23-1,.48-1.47.71l-1.57.75L221,132.56c-.58.26-1.16.55-1.75.84-.3.15-.59.29-.9.42l-.9.43c-1.2.59-2.44,1.13-3.65,1.73s-2.46,1.15-3.68,1.68l-.91.41c-.3.15-.6.28-.9.41-.61.26-1.2.52-1.78.81-1.18.49-2.31,1.05-3.4,1.51-.55.24-1.08.47-1.59.72s-1,.44-1.5.66c-1,.46-1.86.86-2.65,1.22l-2.08,1c-.58.28-1,.52-1.35.69l-.48.27.53.12c.35.07.86.16,1.5.25a21.78,21.78,0,0,0,2.34.23,30.35,30.35,0,0,0,3,0c.55,0,1.13-.05,1.73-.1s1.2-.13,1.84-.21c1.26-.15,2.57-.42,3.93-.72.67-.16,1.35-.35,2-.55.34-.09.69-.19,1-.3l1-.36c1.39-.45,2.74-1,4.1-1.63s2.66-1.31,3.9-2.07l.94-.55c.31-.19.6-.39.9-.59.59-.4,1.18-.79,1.74-1.2,1.1-.85,2.16-1.66,3.09-2.53l1.35-1.27c.42-.42.81-.86,1.19-1.26a26,26,0,0,0,1.94-2.33,21.05,21.05,0,0,0,1.34-1.93c.35-.55.6-1,.77-1.31l.26-.49-.52.19C233.14,126.89,232.67,127.08,232.08,127.34Z"/><path class="cls-3" d="M285.59,114.78c-.58.47-1.29,1-2.1,1.64-.4.31-.82.65-1.26,1l-1.41,1.09c-.48.38-1,.79-1.49,1.19L277.72,121c-1.08.88-2.28,1.73-3.45,2.67-.62.44-1.22.91-1.84,1.38-.3.23-.61.47-.93.69l-.95.69c-1.25,1-2.58,1.85-3.86,2.79s-2.62,1.84-3.94,2.7l-1,.65c-.31.23-.64.44-1,.65-.65.42-1.29.83-1.92,1.26-1.28.78-2.49,1.63-3.69,2.34l-1.73,1.1c-.55.36-1.12.66-1.64,1l-1.51,1-1.38.84c-.87.54-1.63,1-2.27,1.42s-1.13.72-1.47,1l-.52.36h.63c.41,0,1,0,1.76-.05a26.4,26.4,0,0,0,2.72-.26l1.67-.25c.58-.11,1.18-.24,1.81-.39s1.3-.29,2-.48,1.36-.41,2.07-.63c1.42-.44,2.87-1,4.37-1.67.74-.33,1.48-.69,2.23-1.06.38-.18.76-.36,1.13-.57l1.11-.62c1.5-.81,2.94-1.78,4.39-2.74s2.79-2.05,4.07-3.18l1-.84c.32-.27.62-.57.92-.86.6-.59,1.2-1.16,1.76-1.74,1.1-1.2,2.15-2.35,3.05-3.54l1.3-1.73c.41-.57.76-1.15,1.12-1.68s.68-1.07,1-1.58l.8-1.48a24.8,24.8,0,0,0,1.17-2.47c.29-.7.5-1.26.64-1.64l.2-.59-.52.36C286.65,114,286.17,114.32,285.59,114.78Z"/><path class="cls-3" d="M75.07,168.26c0-.33,0-.66-.07-1-.07-.66-.14-1.3-.21-1.94s-.22-1.25-.33-1.86a16,16,0,0,0-.4-1.75c-.16-.57-.32-1.11-.47-1.64s-.38-1-.56-1.5-.38-.92-.55-1.35-.42-.8-.61-1.17a13.83,13.83,0,0,0-1.09-1.82c-.34-.49-.61-.86-.79-1.11l-.29-.39.11.47.35,1.3c.17.55.33,1.23.49,2,.09.38.18.79.28,1.22s.14.89.22,1.37.2,1,.24,1.47.12,1,.18,1.59.1,1.1.14,1.67.11,1.15.1,1.75,0,1.2,0,1.81c0,.31,0,.62,0,.93l0,.93q0,.94-.06,1.89c0,.64-.06,1.27-.11,1.91-.11,1.27-.2,2.55-.36,3.8l-.1.94-.12.94c-.08.61-.15,1.22-.23,1.83-.19,1.19-.32,2.37-.51,3.47-.08.56-.16,1.1-.23,1.62s-.16,1-.24,1.52c-.14,1-.27,1.87-.39,2.67s-.2,1.5-.27,2.07-.13,1-.16,1.35,0,.48,0,.48l.23-.42.61-1.21c.26-.53.55-1.17.88-1.92s.67-1.59,1-2.53l.54-1.47q.24-.76.51-1.59c.36-1.09.65-2.27,1-3.49.15-.61.28-1.24.41-1.87l.2-1,.15-1c.23-1.3.37-2.65.48-4,.06-.67.06-1.36.09-2a19.44,19.44,0,0,0,0-2Z"/><path class="cls-3" d="M62.89,191.23l-.23-.94c-.08-.31-.17-.62-.27-.92-.19-.61-.36-1.21-.59-1.78a24.73,24.73,0,0,0-1.44-3.24c-.26-.5-.52-1-.8-1.43s-.56-.88-.84-1.28a22.14,22.14,0,0,0-1.65-2.09c-.53-.59-1-1.07-1.44-1.45s-.77-.66-1-.84l-.37-.27.22.4c.14.26.36.64.62,1.13s.57,1.07.89,1.75.68,1.46,1,2.31c.18.42.35.86.52,1.33s.34.94.5,1.43c.34,1,.64,2,.92,3.14.15.54.26,1.11.39,1.67.07.29.13.57.18.86l.16.87c.21,1.16.37,2.35.5,3.55s.19,2.39.21,3.58v.89a8.42,8.42,0,0,1,0,.87c0,.59,0,1.16,0,1.73s-.05,1.13-.1,1.67-.09,1.09-.16,1.61-.11,1-.18,1.52-.13,1-.22,1.43c-.14.91-.31,1.75-.46,2.5s-.31,1.4-.43,1.94l-.3,1.26c-.07.3-.1.45-.1.45l.27-.37c.18-.24.44-.6.75-1.07s.66-1.07,1-1.77a24.08,24.08,0,0,0,1.12-2.41c.2-.45.35-.93.53-1.43s.33-1,.48-1.56.29-1.1.41-1.68.24-1.17.33-1.78.17-1.23.23-1.86c0-.32.06-.64.08-.95l0-1a32.15,32.15,0,0,0-.12-3.92A35.27,35.27,0,0,0,62.89,191.23Z"/><path class="cls-3" d="M340.52,135.12c-.56-.33-2.35,1.41-4.39,4.82a31.05,31.05,0,0,0-1.53,2.85c-.53,1-1,2.19-1.5,3.41a54.73,54.73,0,0,0-2.4,8.19,53.3,53.3,0,0,0-1,8.48c0,1.31,0,2.55,0,3.72s.16,2.24.29,3.22c.54,3.94,1.5,6.24,2.14,6.16,1.42-.19,1-9.55,3.37-20.59S341.75,135.85,340.52,135.12Z"/><path class="cls-3" d="M332.65,76.3q.6-.6,1.08-1.11c1.28-1.36,1.88-2.21,1.67-2.46s-1.68.43-4.06,1.79q.2-.28.12-.42c-.32-.6-3.28.45-8,1.89-1.18.36-2.47.76-3.87,1.11s-2.89.74-4.46,1.13c-3.16.7-6.64,1.35-10.34,1.81s-7.24.61-10.48.67c-1.61,0-3.15,0-4.59,0s-2.79-.11-4-.17c-4.93-.3-8-.62-8.21,0s2.72,2,7.75,3.17a39.25,39.25,0,0,0,4.15.75c1.5.25,3.12.36,4.83.49a68.2,68.2,0,0,0,11.11-.34,68,68,0,0,0,10.48-2.16A105.26,105.26,0,0,1,303,86.69a105.34,105.34,0,0,1-13.4,2.42c-2.09.18-4.08.41-5.94.45-.94,0-1.84.12-2.71.12l-2.51,0c-6.38,0-10.4-.39-10.54.3-.06.31.87.77,2.65,1.35l1.48.45c.55.14,1.15.26,1.79.4a42.19,42.19,0,0,0,4.43.73l2.6.29c.9.08,1.85.09,2.83.14,2,.12,4.05,0,6.26,0a78.72,78.72,0,0,0,14.2-2.19,78.61,78.61,0,0,0,13.5-4.9c2-1,3.85-1.92,5.51-3,.84-.51,1.66-1,2.42-1.48l2.14-1.5a44.2,44.2,0,0,0,3.53-2.77C331.77,77.08,332.24,76.69,332.65,76.3Z"/><path class="cls-3" d="M258.59,56.35c.84-.51,1.67-1,2.42-1.49l2.14-1.49a42.47,42.47,0,0,0,3.53-2.77c.5-.43,1-.82,1.38-1.21s.77-.77,1.09-1.11c1.27-1.36,1.87-2.22,1.67-2.46s-1.69.43-4.07,1.79c.13-.19.17-.33.12-.43-.32-.59-3.27.46-8,1.9-1.18.35-2.47.75-3.87,1.11s-2.89.74-4.46,1.13c-3.15.7-6.64,1.35-10.34,1.8s-7.24.61-10.47.68c-1.62,0-3.16,0-4.6,0s-2.79-.11-4-.18c-4.92-.29-8-.61-8.21,0s2.72,2,7.75,3.17c1.26.28,2.65.56,4.15.75s3.12.36,4.83.49a67.15,67.15,0,0,0,11.11-.35,66.79,66.79,0,0,0,10.48-2.16,104.66,104.66,0,0,1-12.79,4.27A105.34,105.34,0,0,1,225,62.2c-2.09.18-4.07.41-5.94.45-.94,0-1.84.12-2.71.12l-2.5,0c-6.39,0-10.41-.39-10.55.29-.06.31.87.78,2.65,1.36l1.48.45c.55.14,1.15.26,1.79.4a42.64,42.64,0,0,0,4.43.73l2.6.28c.9.09,1.85.1,2.83.15,2,.12,4,0,6.26,0a79.62,79.62,0,0,0,14.2-2.19,78.61,78.61,0,0,0,13.5-4.9C255.05,58.32,256.93,57.4,258.59,56.35Z"/><path class="cls-3" d="M195.19,30.86c.37-.2.73-.43,1.11-.66.73-.47,1.54-.92,2.32-1.45.41-.24.8-.5,1.2-.76.21-.13.41-.27.62-.39l.61-.4c.81-.54,1.66-1.05,2.48-1.62s1.64-1.1,2.47-1.63l.6-.41c.2-.15.4-.28.6-.41.41-.27.81-.53,1.19-.81.79-.52,1.53-1.08,2.26-1.57l1-.76c.34-.26.67-.49,1-.72l1.76-1.33c.52-.43,1-.8,1.37-1.1s.68-.59.88-.77l.15-.14.21-.06,1.73-.51.62-.2-.62-.19c-.41-.12-1-.29-1.77-.45s-1.69-.35-2.77-.5-2.3-.26-3.64-.33c-.67,0-1.37,0-2.1,0s-1.47,0-2.23.07a47,47,0,0,0-4.82.5c-.83.13-1.67.29-2.52.47l-1.28.28-1.28.32A43.6,43.6,0,0,0,191.24,17a39.83,39.83,0,0,0-4.92,2.38c-.39.22-.78.45-1.16.69l-1.13.73c-.73.51-1.46,1-2.13,1.56a28.65,28.65,0,0,0-3.65,3.44l-.78.89-.7.92a17.84,17.84,0,0,0-1.22,1.8,15.91,15.91,0,0,0-1,1.75c-.14.28-.27.55-.41.82s-.21.55-.31.81a18.1,18.1,0,0,0-.83,2.76,13.93,13.93,0,0,0-.26,1.82c0,.41,0,.63,0,.63l.41-.49c.28-.32.61-.81,1.11-1.37s1.07-1.25,1.8-2l.54-.55.61-.56c.41-.38.83-.78,1.31-1.15s.93-.8,1.47-1.18l.78-.59.83-.58c1.11-.79,2.36-1.53,3.64-2.28l2-1.09,1-.52q.51-.27,1.05-.51c1.42-.69,2.91-1.31,4.4-1.92,1.16-.46,2.32-.9,3.5-1.32l0,0-.63.53c-.21.18-.4.37-.6.56-.39.37-.77.74-1.13,1.12a27.05,27.05,0,0,0-2,2.33c-.28.39-.56.76-.81,1.14s-.48.76-.69,1.13a18.31,18.31,0,0,0-1,2.06,12.12,12.12,0,0,0-.65,1.69c-.16.48-.26.87-.33,1.13l-.09.42.39-.17c.25-.11.61-.28,1.05-.5l1.53-.82,1.9-1.07Z"/><path class="cls-3" d="M107.52,78.93q-.13-.72-.33-1.71l-.46-2.13c-.1-.38-.19-.78-.29-1.19s-.2-.82-.31-1.25c-.23-.84-.42-1.75-.7-2.65-.1-.46-.23-.91-.37-1.38-.07-.23-.13-.46-.19-.7l-.2-.7c-.28-.94-.51-1.9-.81-2.84s-.57-1.9-.83-2.85l-.21-.7c-.09-.23-.15-.46-.22-.69-.14-.46-.27-.92-.43-1.37-.25-.91-.57-1.78-.83-2.62l-.41-1.23c-.15-.4-.27-.79-.4-1.17l-.75-2.06-.65-1.64c-.18-.46-.35-.82-.47-1.07l-.09-.18v-.22c0-.77,0-1.39,0-1.8s0-.65,0-.65l-.36.53c-.24.35-.57.87-1,1.55s-.83,1.52-1.29,2.51-.93,2.12-1.4,3.38c-.21.63-.44,1.29-.66,2s-.4,1.42-.6,2.16c-.37,1.49-.7,3.09-.94,4.75q-.18,1.24-.3,2.55L92,66.84q0,.66-.06,1.32A42.83,42.83,0,0,0,92,73.58a39.33,39.33,0,0,0,.82,5.4c.09.44.19.88.31,1.31l.37,1.3c.27.85.54,1.69.86,2.49a29.54,29.54,0,0,0,2.21,4.51l.62,1,.67.93a19.84,19.84,0,0,0,1.36,1.7,15.78,15.78,0,0,0,1.39,1.43l.67.63.68.54a17.42,17.42,0,0,0,2.39,1.6,12.55,12.55,0,0,0,1.66.79l.59.24-.35-.54c-.22-.36-.59-.82-1-1.47s-.88-1.39-1.34-2.3l-.37-.67-.35-.75c-.24-.5-.5-1-.72-1.59s-.49-1.13-.69-1.75c-.11-.3-.22-.61-.34-.92l-.3-1c-.43-1.3-.76-2.71-1.11-4.15-.14-.74-.29-1.48-.44-2.23L99.44,79a11.19,11.19,0,0,1-.18-1.16c-.24-1.55-.39-3.16-.54-4.76-.1-1.25-.17-2.49-.22-3.74v0l.32.75c.11.25.23.5.35.74.25.48.48,1,.74,1.41a28.05,28.05,0,0,0,1.65,2.55c.29.38.57.76.86,1.11s.58.69.87,1A18.9,18.9,0,0,0,105,78.52a12.68,12.68,0,0,0,1.42,1.12c.41.3.75.51,1,.65l.37.21s0-.15,0-.42S107.6,79.41,107.52,78.93Z"/><path class="cls-3" d="M157.63,30.1c.21-.26.41-.52.63-.76l.62-.77c.82-1,1.69-2.06,2.5-3.13s1.66-2.11,2.5-3.13l.6-.79c.19-.27.4-.52.6-.78.41-.51.81-1,1.18-1.54.8-1,1.52-2,2.25-3,.36-.48.7-1,1-1.41s.66-.92,1-1.35l1.7-2.45c.5-.77.93-1.44,1.3-2s.63-1,.81-1.36l.13-.24.25-.17,2-1.38.71-.52h-.87c-.58,0-1.41.06-2.46.17s-2.34.26-3.79.52-3.07.63-4.82,1.1c-.87.26-1.78.52-2.71.83s-1.88.66-2.85,1c-1.94.76-4,1.64-6,2.67-1,.52-2,1.07-3,1.66l-1.53.9-1.51.95a65.41,65.41,0,0,0-5.9,4.36,52.74,52.74,0,0,0-5.32,5.14c-.42.44-.82.9-1.21,1.37l-1.14,1.41c-.73,1-1.45,1.92-2.09,2.91a39.74,39.74,0,0,0-3.25,6q-.31.75-.63,1.47t-.51,1.47a25.35,25.35,0,0,0-.81,2.83,22.86,22.86,0,0,0-.5,2.66c0,.42-.11.83-.17,1.23s0,.79-.06,1.17a22.82,22.82,0,0,0,.1,3.9,18.82,18.82,0,0,0,.42,2.44l.2.85.32-.81c.23-.53.45-1.3.86-2.23s.85-2.06,1.49-3.28l.46-.94.55-1a23.46,23.46,0,0,1,1.2-2c.44-.69.86-1.42,1.39-2.12l.76-1.1.83-1.09c1.09-1.49,2.39-3,3.72-4.47l2.11-2.23L141.81,32c.36-.38.74-.75,1.13-1.11,1.54-1.47,3.19-2.89,4.85-4.31,1.3-1.08,2.61-2.13,4-3.17l0,0-.59.95c-.19.31-.36.64-.53,1-.34.65-.68,1.28-1,1.93a38.56,38.56,0,0,0-1.52,3.8c-.2.63-.4,1.23-.57,1.82s-.29,1.18-.41,1.74a27.31,27.31,0,0,0-.49,3.1,18.32,18.32,0,0,0-.12,2.44c0,.68,0,1.23,0,1.6l.06.57L147,42c.28-.25.67-.62,1.14-1.09l1.63-1.69,2-2.18c.35-.4.71-.82,1.09-1.24s.75-.87,1.14-1.32c.75-.92,1.6-1.84,2.38-2.84C156.83,31.11,157.23,30.61,157.63,30.1Z"/><path class="cls-3" d="M188.32,415.9a115.94,115.94,0,0,1-19.23-1.61,3.5,3.5,0,1,1,1.26-6.88c.31,0,30.65,5.45,44.82-4.67A15.44,15.44,0,0,0,221.82,392a3.5,3.5,0,1,1,6.92,1,22.47,22.47,0,0,1-9.51,15.42C210.9,414.39,198.63,415.9,188.32,415.9Z"/><circle class="cls-9" cx="260.6" cy="260.93" r="5.28"/><circle class="cls-3" cx="245.8" cy="264.38" r="22.91"/><circle class="cls-1" cx="256.02" cy="247.35" r="12.7"/><path class="cls-8" d="M300.59,168.74c1.29,2.37,1.34,4.85.1,5.52s-3.29-.7-4.58-3.08-1.34-4.85-.1-5.52S299.3,166.36,300.59,168.74Z"/><path class="cls-8" d="M310.25,189.88c1.94,3.62,2.51,7.1,1.27,7.77s-3.83-1.73-5.77-5.36-2.52-7.1-1.27-7.77S308.3,186.25,310.25,189.88Z"/><path class="cls-2" d="M299.47,144.54a262.36,262.36,0,0,1-35.32,10.62c-29,6.65-57,6.47-86,.74-25.17-5-50.77-11.88-76.43-10.17q2.81-6.3,6.16-12.27l18.41-.39c10.64,1.22,21.21,3.34,31.78,5.55.36.16.75.32,1.18.49l1.36.43c.48.12,1,.24,1.54.35s1.12.18,1.71.23,1.22.09,1.85.09h.06c7.43,1.54,14.86,3,22.32,4.12,2.23.33,4.49.63,6.8.88l-.46.26.53.12c.35.07.86.16,1.5.25a21.78,21.78,0,0,0,2.34.23,30.35,30.35,0,0,0,3,0c.53,0,1.1-.05,1.68-.1,27.91,1.92,60.1-1.45,89.18-11.39C295,137.79,297.22,141.11,299.47,144.54Z"/><path class="cls-3" d="M48.53,260.48a4.48,4.48,0,0,1-4.45-3.88c-6.29-45.25-7.1-84.24-2.47-119.22C45.3,109.48,53.85,92.67,67.76,86c1.14-.55,2.28-1,3.38-1.45a18.15,18.15,0,0,0,5.5-2.92c3.46-3.14,5-8.42,6.69-14a62.23,62.23,0,0,1,4-10.82C101,30.15,129.81,8.13,159,2c40.31-8.54,71.8,12.57,102.27,33,14.23,9.53,28.94,19.39,44.16,25.83,24.66,10.44,48.47,9.52,65.33-2.54l10.62-7.6-3.69,12.53a80.3,80.3,0,0,1-3.28,9.09C365.33,93.3,343.91,122,293.34,139c-32.79,11-72.38,14.65-105.89,9.64-9.25-1.38-18.56-3.32-27.56-5.2-23.42-4.88-45.55-9.49-68.56-5.67a4.5,4.5,0,0,1-1.47-8.88c24.66-4.09,48.66.91,71.87,5.74,8.87,1.85,18.05,3.77,27.05,5.11,32.17,4.81,70.18,1.35,101.69-9.27,25.37-8.54,58.45-25.6,74.21-58.63-18,7.64-40.17,6.76-62.78-2.81-16-6.78-31.08-16.88-45.66-26.65C226,22.14,197.43,3,160.84,10.75c-26.25,5.56-53.21,26.18-65.55,50.13A54.71,54.71,0,0,0,92,70.14c-1.85,6.24-3.95,13.3-9.28,18.13a25.88,25.88,0,0,1-8.19,4.6c-1,.4-1.95.79-2.83,1.21-10.95,5.28-17.87,19.83-21.13,44.48C46,172.72,46.82,210.93,53,255.37a4.5,4.5,0,0,1-3.84,5.07A4.4,4.4,0,0,1,48.53,260.48Z"/><path class="cls-3" d="M343.6,255.94a4.49,4.49,0,0,1-4.5-4.47c-.3-40.92-49.59-113.6-50.09-114.33a4.5,4.5,0,1,1,7.44-5.08c2.09,3.07,51.33,75.71,51.65,119.35a4.51,4.51,0,0,1-4.47,4.53Z"/><path class="cls-8" d="M327.53,239.22a114.3,114.3,0,0,1,1,14c0,2.15,0,4.2-.15,6.11s-.26,3.69-.45,5.31c-.76,6.47-2,10.34-2.64,10.25-1.5-.19-.14-15.93-2.82-35-2.51-19.06-8.05-33.86-6.65-34.44.61-.26,2.82,3.14,5.29,9.17.62,1.51,1.26,3.17,1.86,5s1.19,3.78,1.78,5.85A114.05,114.05,0,0,1,327.53,239.22Z"/><circle class="cls-3" cx="145.8" cy="264.38" r="22.91"/><circle class="cls-1" cx="156.02" cy="247.35" r="12.7"/><circle class="cls-8" cx="136.6" cy="272.93" r="5.28"/><circle class="cls-8" cx="239.6" cy="272.93" r="5.28"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/icons/dynamic-avatar-4.svg b/src/assets/icons/dynamic-avatar-4.svg
deleted file mode 100644
index e586ed4..0000000
--- a/src/assets/icons/dynamic-avatar-4.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 464.12 605.75"><defs><style>.cls-1{fill:#dfe7ea;}.cls-2{fill:#f0d7c2;}.cls-3{fill:#d7ad8c;}.cls-4{fill:#c4987a;}.cls-5{fill:#8376a5;}.cls-6{fill:#655a8e;}.cls-7{fill:#ebcbac;}.cls-16,.cls-8,.cls-9{fill:none;stroke:#42565e;stroke-miterlimit:10;}.cls-8{stroke-linecap:round;}.cls-8,.cls-9{stroke-width:10px;}.cls-9{stroke-linecap:square;}.cls-10{fill:#dcb79b;}.cls-11{fill:#fff;}.cls-12{fill:#40565a;}.cls-13{fill:#a699d6;}.cls-14{fill:#485d63;}.cls-15{fill:#796f9c;}.cls-16{stroke-width:11px;}.cls-17{fill:#325560;}</style></defs><title>Asset 120</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><ellipse class="cls-1" cx="236.82" cy="551.53" rx="184.33" ry="54.22"/><path class="cls-2" d="M30.24,275.91A69.67,69.67,0,0,0,21.69,369c4.48,6,10.06,11.3,16.89,14.32s15,3.46,21.65,0"/><path class="cls-3" d="M18,366.5c3.62,6.7,8.36,12.95,14.66,17.24,2.69,1.84,7,1.57,11.13,1.27-5.9-4.26-10.4-10.26-13.86-16.68-15.65-29-9.35-68.14,14.59-90.75H68.76v-1.84H32.58C8.64,298.37,2.34,337.52,18,366.5Z"/><path class="cls-3" d="M419,275a69.67,69.67,0,0,1,29.75,88.61c-3,6.84-7.19,13.32-13.14,17.82s-13.82,6.82-21.06,5"/><path class="cls-4" d="M411.42,386.76a29.59,29.59,0,0,0,19.15-4.19c6.72-4,11.79-10.17,15.61-16.77A67.58,67.58,0,0,0,453.47,316c-4.12-16.58-18.64-31.49-33.49-41l-1,13.49c7.89,8.45,16.35,18.74,19.1,29.76a67.58,67.58,0,0,1-7.29,49.78c-3.82,6.6-8.9,12.74-15.61,16.77A30.36,30.36,0,0,1,411.42,386.76Z"/><path class="cls-5" d="M452.36,118.46c-8.78-30.07-32.4-57-62.92-63.67a46.85,46.85,0,0,0-9.71-17.86c-5.41-6.13-12.35-10.72-19.61-14.48-36.17-18.7-79.26-17-119.65-11.85-16.15,2.07-32.27,4.63-48,8.91C128.34,37,73,84.38,45.91,145.09s-22.25,133.54,7.56,193L262.36,185.91V334.35H414.7c-8.85-26.74-4.64-73.12,7.76-98.72,9.21-19,22.61-32.09,28.47-53.07C457,160.94,458.72,140.29,452.36,118.46Z"/><path class="cls-6" d="M454.65,186.37C452,196,447.72,203.88,443,211.49c-.82-48.6-11-97.83-36.11-139.38A92.48,92.48,0,0,0,398.41,60c28,8.43,49.4,34,57.66,62.31C462.44,144.1,460.69,164.75,454.65,186.37Z"/><path class="cls-7" d="M53.69,331.22c15.1-11.09,21.39-30.36,26.05-48.51A691.24,691.24,0,0,0,99.16,167.36l91,27.16c10,3,20.12,6,30.54,6.38,26.17,1,49.73-14.31,74.25-23.5A165.16,165.16,0,0,1,370,167.87s7.5,121.7,48.83,164.47c.81,73-43.54,137.46-92.3,191.78-11.27,12.55-23,25.08-37.55,33.62l-.21.12a72.52,72.52,0,0,1-36.5,10.2l-29.86.15a71.65,71.65,0,0,1-36.73-9.91l-1-.56c-14.55-8.54-26.28-21.06-37.55-33.62C98.47,469.8,52,405.33,52.78,332.34"/><path class="cls-2" d="M146.18,528.31c-48.31-54-94-118-93.24-190.45l.91-1.13c15.09-11.09,21.39-30.36,26-48.51A690.78,690.78,0,0,0,99.31,172.88l28.18,8.41C118.46,222.82,83,409.19,146.18,528.31Z"/><path class="cls-3" d="M323.51,525.35a270.7,270.7,0,0,1-19.2,19.85c22.46-40.14,35.38-85.8,40-131.73,6.33-63.1-2.24-126.93-17.2-188.56-.55-2.26-1.17-4.63-2.75-6.34-2.47-2.67-6.5-3-10.13-3.13-20.76-.84-41.76-1.81-61.63-7.87a105.08,105.08,0,0,1-17.44-7c19.43-4.07,37.77-14.78,56.7-21.88A165.11,165.11,0,0,1,367,169.1s7.49,121.69,48.83,164.46C416.61,406.56,372.26,471,323.51,525.35Z"/><path class="cls-8" d="M390.57,54.45c31.3,6,55.6,33.41,64.53,64,6.37,21.82,4.61,42.47-1.43,64.1-5.86,21-19.26,34.06-28.47,53.07-12.4,25.6-14.78,71.07-5.93,97.81"/><path class="cls-8" d="M27.49,275.91A69.67,69.67,0,0,0,18.93,369c4.48,6,10.06,11.3,16.89,14.32s15,3.46,21.65,0"/><path class="cls-8" d="M422.38,274.38A69.67,69.67,0,0,1,452.13,363c-3,6.84-7.19,13.32-13.14,17.82s-13.82,6.82-21.06,5"/><polygon class="cls-3" points="237.17 353.31 237.17 432.24 264.71 432.24 237.17 353.31"/><polyline class="cls-9" points="237.32 357.44 236.19 423.51 236.11 428.1"/><path class="cls-10" d="M344.27,308.58c.57,5-.41,9-1.09,8.93s-.9-4-1.45-8.65-1.2-8.52-.51-8.75S343.71,303.58,344.27,308.58Z"/><path class="cls-11" d="M160.6,204.75a109.34,109.34,0,0,1,22.25,7.54c5.49,2.71,8.48,5.28,8,6.57s-4.34,1.18-10.15.31-13.7-2.41-22.45-4.49A144,144,0,0,1,136,207.81c-5.57-2.38-8.76-4.67-8.36-6s4.24-1.55,10.15-1A175.83,175.83,0,0,1,160.6,204.75Z"/><path class="cls-12" d="M397.3,128.18a75.72,75.72,0,0,1,1.9,14c0,2.17.07,4.23-.09,6.16-.07,1-.1,1.89-.21,2.78l-.35,2.55c-1,6.48-2.82,10.19-3.8,10s-1.24-4.15-1.61-10.27L393,151c0-.83-.16-1.7-.23-2.59-.11-1.78-.38-3.68-.6-5.67-.54-4-1.27-8.29-2.32-12.78s-2.39-8.66-3.69-12.45c-.71-1.87-1.32-3.68-2-5.33-.34-.83-.63-1.65-1-2.41l-.95-2.21c-2.43-5.63-4.08-9.23-3.19-9.9s4.05,1.91,7.9,7.22l1.46,2.11c.5.74.95,1.55,1.44,2.38,1,1.65,1.9,3.5,2.85,5.46A75.74,75.74,0,0,1,397.3,128.18Z"/><path class="cls-12" d="M435.13,118.25a108.47,108.47,0,0,1-2.34,18.33c-.67,2.76-1.29,5.39-2.1,7.78-.39,1.2-.73,2.37-1.14,3.46L428.33,151a55.23,55.23,0,0,1-2.41,5.25c-.39.76-.74,1.46-1.11,2.09s-.74,1.19-1.08,1.69c-1.34,2-2.3,3-2.79,2.77-1-.47.38-5.47,2.21-13.44l.71-3.13c.25-1.08.43-2.23.67-3.4.51-2.34.86-4.87,1.31-7.51A173.57,173.57,0,0,0,427.48,118a173.79,173.79,0,0,0-.37-17.39c-.26-2.66-.43-5.21-.77-7.58-.16-1.18-.25-2.34-.42-3.44l-.48-3.17c-1.25-8.08-2.3-13.17-1.24-13.56.5-.18,1.38.87,2.58,3q.45.79,1,1.76c.32.66.62,1.38,1,2.17a55.19,55.19,0,0,1,2,5.41l1,3.21c.33,1.12.59,2.31.89,3.54.64,2.45,1.06,5.11,1.53,7.91A108.47,108.47,0,0,1,435.13,118.25Z"/><path class="cls-12" d="M407,237.87a61.19,61.19,0,0,1,3-13.43,51.88,51.88,0,0,1,2.35-5.53c.43-.84.8-1.66,1.25-2.41l1.31-2.14a30.51,30.51,0,0,1,2.52-3.48c.4-.49.77-.95,1.14-1.34s.75-.73,1.09-1c1.35-1.2,2.28-1.69,2.71-1.38.91.66-.62,4.15-2.6,9.64l-.77,2.16c-.27.75-.48,1.55-.74,2.36-.56,1.61-1,3.38-1.49,5.21A83.83,83.83,0,0,0,414.29,251c.13,1.9.18,3.72.4,5.4.1.85.14,1.68.25,2.46l.32,2.27c.83,5.79,1.62,9.51.59,10-.48.21-1.3-.46-2.37-1.9q-.4-.54-.85-1.23c-.29-.46-.55-1-.84-1.54A30.49,30.49,0,0,1,410,262.5l-.85-2.36c-.28-.83-.48-1.71-.73-2.61a51.91,51.91,0,0,1-1.18-5.89A61.23,61.23,0,0,1,407,237.87Z"/><path class="cls-13" d="M338.06,11a505.1,505.1,0,0,0-65.52,7.53c-9.44,1.72-18.9,3.72-27.78,7.32C237.13,29,230,33.22,222.27,36.08l-1,.35c-15.13,5.37-33.2,6.48-43.21,19L179.81,52q1.31-2.53,2.6-5.07a64.64,64.64,0,0,0-39.5,17c-.84.79-1.73,1.54-2.63,2.27-9,7.24-20.27,11.3-28.87,19.81q-.45-4.32-.89-8.65-2,1.23-3.94,2.52c-9.37,6.19-18,13.53-24.81,22.49-7.31,9.7-12.31,21.4-12.89,33.52a2.76,2.76,0,0,0-1.28-1.65c-.22.33-.44.67-.65,1a164.8,164.8,0,0,0-25.72,75.23q-1.39-4.56-2.77-9.1c-.08,1.17-.16,2.37-.21,3.63a304,304,0,0,0,3.3,57.5,58,58,0,0,1-13.19-23.61,221.08,221.08,0,0,1,5.31-59.68A200.24,200.24,0,0,1,46,142.48a217.66,217.66,0,0,1,18.72-33.54A52.26,52.26,0,0,1,66.84,100a231.53,231.53,0,0,1,78.78-67.78,147.77,147.77,0,0,0-11.25,10A223.1,223.1,0,0,1,179,21.07q6.69-2.31,13.52-4.18a312,312,0,0,1,36.29-7.31c3.89-.58,7.79-1.1,11.68-1.61,10.4-1.34,21-2.43,31.56-3C294.53,3.75,317,4.85,338.06,11Z"/><path class="cls-8" d="M50.86,335.92C21,276.49,16.19,203.66,43.3,142.95S125.73,34.84,189.89,17.37c15.71-4.28,31.83-6.84,48-8.91,40.39-5.18,83.48-6.85,119.65,11.85,7.26,3.75,14.2,8.35,19.61,14.48C388.79,48,392,67.82,386,84.4s-20.53,29.56-37.4,34.67"/><path class="cls-12" d="M119.45,55.71a122.27,122.27,0,0,1,11.37-12.29c1.91-1.73,3.71-3.37,5.52-4.79s3.48-2.72,5.07-3.83c6.39-4.44,10.89-6.3,11.46-5.47,1.28,1.85-13.39,13.4-27.43,31.16C111.22,78.11,103.19,95,101.1,94.13c-.93-.38-.12-5.17,2.8-12.39.74-1.8,1.58-3.75,2.62-5.79s2.18-4.19,3.45-6.44A122.24,122.24,0,0,1,119.45,55.71Z"/><path class="cls-12" d="M152.92,44.74a155.46,155.46,0,0,1,12.6-13.37c2.09-1.91,4.07-3.71,6-5.29s3.78-3,5.5-4.29c6.91-5,11.74-7.28,12.34-6.46,1.32,1.81-14.6,14.92-30.58,34.31C142.68,68.9,132.71,87,130.69,86c-.91-.44.42-5.6,4.09-13.32.92-1.92,2-4,3.21-6.2s2.61-4.49,4.1-6.89A155.46,155.46,0,0,1,152.92,44.74Z"/><path class="cls-12" d="M193,32.11a87.62,87.62,0,0,1,14.89-12.4,79.37,79.37,0,0,1,14-7.35c8.37-3.31,14-3.82,14.24-2.87s-4.55,3.39-11.85,7.73a121.7,121.7,0,0,0-25.76,20.23c-8.94,9.23-15.89,18.86-21.16,25.73s-8.78,11.07-9.7,10.51,1-5.67,5.14-13.44A127.77,127.77,0,0,1,193,32.11Z"/><path class="cls-12" d="M246.25,15.32A101.07,101.07,0,0,1,263,7.14a76.92,76.92,0,0,1,14.74-4c8.63-1.37,14-.51,14.08.47s-5,2.2-12.8,4.79a141.76,141.76,0,0,0-28.82,13.45c-10.67,6.49-19.73,13.51-26.43,18.52s-11.06,8-11.8,7.22,2.32-5.1,8.21-11.27A131.37,131.37,0,0,1,246.25,15.32Z"/><path class="cls-12" d="M38.39,192.46a120.8,120.8,0,0,0,3.08,13.79c.66,2.07,1.22,4.08,1.91,5.9.33.91.6,1.82.94,2.67l.95,2.43c2.44,6.21,4.26,10.1,3.34,10.76-.43.31-1.43-.29-2.9-1.67q-.55-.52-1.19-1.18c-.41-.45-.81-1-1.26-1.52a38.32,38.32,0,0,1-2.81-3.91L39,217.34c-.5-.84-.94-1.75-1.43-2.68a65,65,0,0,1-2.76-6.13,71.66,71.66,0,0,1-4.66-30.3,64.9,64.9,0,0,1,.79-6.68c.19-1,.33-2,.56-3l.69-2.72a38.34,38.34,0,0,1,1.5-4.57c.26-.66.49-1.27.74-1.83s.53-1,.78-1.48c1-1.76,1.76-2.63,2.26-2.47,1.07.35.52,4.61.05,11.26l-.17,2.61c-.06.9,0,1.85-.09,2.82-.11,1.94,0,4,0,6.2A120.86,120.86,0,0,0,38.39,192.46Z"/><path class="cls-12" d="M36.06,250.75a94.42,94.42,0,0,0,5.12,8.54c.9,1.25,1.71,2.48,2.56,3.55.42.55.8,1.1,1.2,1.6l1.16,1.45c3,3.71,5,6.11,4.35,7s-3.77,0-8.06-3.08l-1.65-1.24c-.57-.44-1.1-1-1.68-1.47a42.43,42.43,0,0,1-3.46-3.52,47.69,47.69,0,0,1-10.33-19.94,42.32,42.32,0,0,1-.88-4.85c-.09-.77-.19-1.5-.23-2.22s0-1.4-.06-2.06c0-5.26,1.13-8.39,2.13-8.36s1.91,3.05,3.23,7.61l.52,1.78c.18.62.41,1.25.62,1.91.38,1.32.92,2.69,1.42,4.14A94.39,94.39,0,0,0,36.06,250.75Z"/><path class="cls-12" d="M67.93,123.65A94.35,94.35,0,0,0,69.15,133c.31,1.43.54,2.81.87,4.07.16.64.27,1.27.43,1.86l.44,1.71c1.13,4.37,1.93,7.26,1,7.85s-3.35-1.43-6-5.72l-1-1.71c-.33-.6-.61-1.25-.92-1.92a40.14,40.14,0,0,1-1.7-4.39,45.45,45.45,0,0,1-1.49-21.39,40.27,40.27,0,0,1,1.08-4.58c.22-.71.4-1.39.64-2l.73-1.83c2-4.61,4.21-6.91,5.12-6.49s.62,3.42.11,7.91l-.2,1.76c-.07.61-.1,1.25-.17,1.9-.15,1.3-.19,2.7-.3,4.16A94.26,94.26,0,0,0,67.93,123.65Z"/><path class="cls-6" d="M355.66,174.31a165.11,165.11,0,0,0-59.78,10.43c-10.63,4-21.07,9.1-31.63,13.56v-4.12L252.17,203a106,106,0,0,1-14.22,3.9c-1.55.3-3.11.56-4.69.78a69.08,69.08,0,0,1-11.64.58c-10.43-.39-20.55-3.4-30.53-6.38l-56.29-16.8-14.54-4.34-20.14-6q-2.75,33.38-8.73,66.39Q87.06,265.14,81,288.82c-.1.41-.21.82-.31,1.23-4.66,18.14-10.95,37.42-26,48.5l-.92,1.13c0,1.12,0,2.25,0,3.36Q50.69,336.71,48,330.2c11.22-9.15,18.92-22.41,22.74-36.44,4.32-15.88,4-32.73,1.4-49a1.49,1.49,0,0,0,1.43.57c1.44-.21,3-2.36,3.4-4.18a188.87,188.87,0,0,0,4.36-49.24c0-.66-.06-1.31-.09-2l3.23,3.4c6-11.47,4.25-31.47,6.3-44.25,13.89,12.88,48.77,13.2,66.08,5.51-4.33,3.77-5,12.86-10.1,15.6,1.53,0-8.28,5-6.75,4.94a129.75,129.75,0,0,0,65.78-21.6c-5.24,11-14.41,26.68-26,30.42,1.69.36,2.65-6.32,4.34-6q12.47,2.51,25.09,4.17c12.06,1.61,24.59,2.62,36.17-1.11,14.49-4.66,25.64-16.08,36.16-27.09q0,2.9-.35,5.8a65.84,65.84,0,0,1-5,19.31l32.61-13.88c.05.5.09,1,.12,1.51a27,27,0,0,1-3.55,14.74q25.15-11.8,49.59-25A27.75,27.75,0,0,1,355.66,174.31Z"/><path class="cls-6" d="M411.74,319.21c-8.3-10.85-15.05-25-20.53-40.32-.08-.22-.16-.44-.23-.65-11.25-33.09-16.84-70.92-19.39-93.54,10.71,26.93,25,59.59,39.5,85.45h0C408.88,287.05,408.92,304.81,411.74,319.21Z"/><path class="cls-14" d="M269.63,176.7c24.26-13.66,43.82-25.11,45.05-23.33s-16.68,16.14-41.28,30-46.18,21.74-47,19.86S245.4,190.42,269.63,176.7Z"/><path class="cls-14" d="M257.18,173.65c4.41-4.6,8.39-9.18,11.9-13.46,1.71-2.18,3.38-4.21,4.84-6.2.74-1,1.49-1.92,2.16-2.85l1.94-2.68c4.93-6.84,8-11.24,9-10.75s-.41,5.73-4.33,13.56l-1.59,3c-.56,1.05-1.22,2.11-1.87,3.22-1.28,2.24-2.84,4.51-4.47,6.91a121.8,121.8,0,0,1-26.14,27c-2.34,1.71-4.56,3.34-6.75,4.7-1.09.69-2.12,1.38-3.15,2l-3,1.69c-7.7,4.18-13,5.67-13.41,4.78s3.78-4.16,10.45-9.32l2.61-2c.91-.7,1.81-1.48,2.78-2.25,1.94-1.52,3.92-3.26,6-5C248.28,182.34,252.73,178.22,257.18,173.65Z"/><path class="cls-12" d="M167.43,170.51a127.73,127.73,0,0,0,20.86-7.38c3-1.53,6-2.88,8.6-4.48,1.31-.77,2.63-1.44,3.82-2.21l3.41-2.23c2.24-1.34,4.06-2.84,5.78-4,.84-.61,1.67-1.15,2.38-1.68s1.35-1.06,1.94-1.5c2.38-1.77,3.91-2.61,4.3-2.26s-.39,1.87-2.19,4.37q-.68.93-1.54,2c-.6.72-1.3,1.44-2,2.23a55.67,55.67,0,0,1-5.34,5.13l-3.32,2.77c-1.17.95-2.49,1.79-3.81,2.73a89.12,89.12,0,0,1-8.83,5.42,103.88,103.88,0,0,1-22.17,8.5,103.87,103.87,0,0,1-23.57,2.85,89.14,89.14,0,0,1-10.34-.66c-1.61-.22-3.17-.34-4.64-.63l-4.23-.9a55.7,55.7,0,0,1-7.12-2c-1-.36-2-.66-2.85-1s-1.63-.75-2.32-1.09c-2.76-1.36-4.16-2.34-4-2.84s1.92-.47,4.86,0c.73.11,1.54.26,2.42.42s1.86.23,2.89.37c2.07.25,4.38.72,7,.86l4.06.38c1.41.13,2.89.1,4.41.17,3,.2,6.29,0,9.69-.06A127.74,127.74,0,0,0,167.43,170.51Z"/><path class="cls-12" d="M132.77,165a101.23,101.23,0,0,0,11.59-5.33c1.7-1,3.36-1.87,4.83-2.84.74-.47,1.49-.89,2.17-1.36l2-1.33c5-3.41,8.07-5.83,8.93-5.11.4.34.13,1.39-.74,3q-.33.61-.76,1.34c-.3.47-.67.95-1.06,1.47a32.16,32.16,0,0,1-2.84,3.38L155,160c-.64.63-1.36,1.21-2.09,1.85a54.7,54.7,0,0,1-4.91,3.75,60.59,60.59,0,0,1-26.34,9.87,54.62,54.62,0,0,1-6.16.4c-1,0-1.9,0-2.79,0l-2.57-.2a32.13,32.13,0,0,1-4.36-.68c-.64-.14-1.23-.26-1.76-.41s-1-.34-1.45-.5c-1.73-.66-2.62-1.27-2.54-1.8.17-1.11,4.09-1.32,10.09-2l2.35-.29c.81-.1,1.65-.27,2.52-.4,1.74-.23,3.58-.66,5.51-1A101.21,101.21,0,0,0,132.77,165Z"/><path class="cls-12" d="M72.26,253c-3.94-18.19-10.05-32.28-8.1-33.34.9-.48,3.66,2.5,6.83,8.12.79,1.41,1.62,3,2.4,4.69S75,236,75.75,238a99.8,99.8,0,0,1,4,13.3,99.82,99.82,0,0,1,2,13.73c.12,2.13.24,4.15.2,6.05s-.07,3.66-.19,5.27c-.5,6.44-1.74,10.3-2.76,10.25C76.78,286.49,76.37,271.13,72.26,253Z"/><path class="cls-12" d="M82.64,210.52c-.93-5.11-1.91-9.93-2.87-14.31-.52-2.17-1-4.26-1.47-6.19l-.69-2.81-.68-2.58c-1.72-6.58-2.86-10.76-1.87-11.26s3.8,3,6.94,9.37l1.19,2.53c.4.89.76,1.83,1.15,2.8.8,1.94,1.5,4.06,2.24,6.29a126.38,126.38,0,0,1,3.6,14.79,156.62,156.62,0,0,1,2.4,27.28c0,7-.65,11.34-1.7,11.43s-2.36-4.11-3.69-10.92S84.46,220.74,82.64,210.52Z"/><path class="cls-12" d="M344.09,154.54c1.54-2,2.91-4,4.14-5.82.58-.94,1.18-1.81,1.68-2.67s1-1.65,1.46-2.38c1.79-2.95,3.1-4.91,4.17-4.69s1.56,2.67.92,6.54a22.28,22.28,0,0,1-.74,3.1,30,30,0,0,1-1.27,3.44A34.57,34.57,0,0,1,344.2,165.2a30,30,0,0,1-3,2.07,22.28,22.28,0,0,1-2.83,1.48c-3.59,1.57-6.13,1.62-6.56.71s1.11-2.74,3.53-5.19c.6-.62,1.27-1.27,2-2s1.41-1.49,2.18-2.28C340.94,158.34,342.52,156.53,344.09,154.54Z"/><path class="cls-8" d="M53.84,333.37C68.95,322.28,75.23,303,79.9,284.86A691.24,691.24,0,0,0,99.31,169.51l91,27.16c10,3,20.12,6,30.54,6.38,26.17,1,49.73-14.31,74.25-23.5A165.16,165.16,0,0,1,370.19,170s7.5,121.7,48.83,164.47c.81,73-43.54,137.46-92.3,191.78-11.27,12.55-23,25.08-37.55,33.62L289,560a72.52,72.52,0,0,1-36.5,10.2l-29.86.15a71.65,71.65,0,0,1-36.73-9.91l-1-.56c-14.55-8.54-26.28-21.06-37.55-33.62C98.62,472,52.12,407.48,52.93,334.49"/><path class="cls-15" d="M366.79,83c3.56-9.19,4.7-18.51,5.61-25.39s1.67-11.38,3.11-11.5,3.15,4.16,4.11,11.49a63.11,63.11,0,0,1,.29,13.08,57.22,57.22,0,0,1-3.61,16A46.21,46.21,0,0,1,367.44,101a36.74,36.74,0,0,1-11,8.3,22.84,22.84,0,0,1-8.9,2.45c-2.21.06-3.45-.39-3.59-1.06-.32-1.48,3.72-3.27,8.61-7.49A48.83,48.83,0,0,0,360.21,95,53.81,53.81,0,0,0,366.79,83Z"/><path class="cls-15" d="M393.72,82.48c.87-4.87,1.17-9.75,1.81-13.49s1.62-6.21,3-6.35,2.93,2,4.17,5.79a32.63,32.63,0,0,1,1.39,6.9,33.45,33.45,0,0,1-.35,9,27.19,27.19,0,0,1-3.21,8.81,20.26,20.26,0,0,1-5.08,5.9,11.07,11.07,0,0,1-4.8,2.28c-1.31.2-2.17-.08-2.53-.67-.73-1.26.54-3.35,1.86-6.32A49.1,49.1,0,0,0,393.72,82.48Z"/><path class="cls-15" d="M363.5,116.33c3.72-2.45,7.13-4.62,9.92-6.06s5-2.06,6-1.12.74,3.29-1,6.3a32.08,32.08,0,0,1-21.71,14.25c-3.46.41-5.77-.25-6.18-1.58s1-3.12,3.44-5.1S359.77,118.77,363.5,116.33Z"/><path class="cls-15" d="M405.25,202a22.88,22.88,0,0,1,7.56-8.1c2.52-1.51,4.63-1.74,5.6-.75s.76,3-.12,5.45a57,57,0,0,1-4.2,8.5,57,57,0,0,1-5.26,7.89c-1.67,2-3.28,3.19-4.65,2.83s-2.2-2.28-2.16-5.22A22.88,22.88,0,0,1,405.25,202Z"/><path class="cls-11" d="M46.05,163.48a38.77,38.77,0,0,1,3.68-7.13,28.5,28.5,0,0,1,4.21-5c2.78-2.58,5.19-3.49,6.27-2.63s.8,3.3-.21,6.55-2.66,7.39-4.44,12-3.35,8.72-4.8,11.81-2.84,5.08-4.27,5-2.54-2.4-2.85-6.18a28.52,28.52,0,0,1,.3-6.56A38.81,38.81,0,0,1,46.05,163.48Z"/><path class="cls-11" d="M77.47,109.21a11.49,11.49,0,0,1,6.45-3c2-.16,3.51.49,4.17,1.73a4.9,4.9,0,0,1-.29,4.37,16,16,0,0,1-8.4,7.53,4.9,4.9,0,0,1-4.37-.18c-1.16-.79-1.64-2.38-1.27-4.33A11.49,11.49,0,0,1,77.47,109.21Z"/><ellipse class="cls-11" cx="210.56" cy="221.64" rx="5.11" ry="8.76" transform="translate(-22.94 418.97) rotate(-86.67)"/><path class="cls-9" d="M224.78,442.79h22.94"/><path class="cls-9" d="M20.87,340A35.55,35.55,0,0,1,42,316.79"/><path class="cls-9" d="M442.19,340A35.55,35.55,0,0,0,421,316.79"/><path class="cls-11" d="M36.71,359.23a58.7,58.7,0,0,1,4.48,7.36c1.06,2.29,1.34,4.25.37,5.29s-2.92,1-5.37-.08a19.33,19.33,0,0,1-8-6.91c-2.49-3.68-3.38-8-2.81-11.09a7,7,0,0,1,1.47-3.46,2.37,2.37,0,0,1,2.07-.95c1.42.21,2.44,1.71,3.61,3.43S35.05,356.75,36.71,359.23Z"/><path class="cls-3" d="M306.74,281.15a53.41,53.41,0,0,0-19.38,5.9c-4.86,2.45-8,4.52-9.27,3.52-.59-.47-.59-1.67.1-3.41a20.9,20.9,0,0,1,4.39-6.38,33.08,33.08,0,0,1,4-3.56,37.32,37.32,0,0,1,5.31-3.26,38.1,38.1,0,0,1,28.15-2.45,37.32,37.32,0,0,1,5.79,2.29,33.07,33.07,0,0,1,4.6,2.8,20.9,20.9,0,0,1,5.43,5.52c1,1.6,1.18,2.78.69,3.34-1.07,1.2-4.53-.29-9.74-1.86A53.41,53.41,0,0,0,306.74,281.15Z"/><path class="cls-9" d="M342.4,280.36a49.37,49.37,0,0,0-70.8,6.17"/><path class="cls-16" d="M264.12,323.48c12.85-5.69,25.89-11.31,39.71-13.84s28.68-1.72,41.06,4.94"/><path class="cls-17" d="M326.2,321.18a17.9,17.9,0,0,1-35.79,0c0-9.88,8-13.77,17.9-13.77S326.2,311.3,326.2,321.18Z"/><path class="cls-3" d="M167.36,281.15a53.41,53.41,0,0,1,19.38,5.9c4.86,2.45,8,4.52,9.27,3.52.59-.47.59-1.67-.1-3.41a20.9,20.9,0,0,0-4.39-6.38,33.08,33.08,0,0,0-4-3.56,37.32,37.32,0,0,0-5.31-3.26A38.1,38.1,0,0,0,154,271.51a37.32,37.32,0,0,0-5.79,2.29,33.07,33.07,0,0,0-4.6,2.8,20.9,20.9,0,0,0-5.43,5.52c-1,1.6-1.18,2.78-.69,3.34,1.07,1.2,4.53-.29,9.74-1.86A53.41,53.41,0,0,1,167.36,281.15Z"/><path class="cls-9" d="M131.69,280.36a49.37,49.37,0,0,1,70.8,6.17"/><path class="cls-16" d="M210,323.48c-12.85-5.69-25.89-11.31-39.71-13.84s-28.68-1.72-41.06,4.94"/><path class="cls-17" d="M147.9,321.18a17.9,17.9,0,0,0,35.79,0c0-9.88-8-13.77-17.9-13.77S147.9,311.3,147.9,321.18Z"/><path class="cls-9" d="M206,498.28A59.24,59.24,0,0,0,236,503c14.26-1.51,29.15-10,32.35-24"/><circle class="cls-2" cx="237.17" cy="528.6" r="10.55" transform="translate(-329.15 406.34) rotate(-53.65)"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/icons/dynamic-avatar-5.svg b/src/assets/icons/dynamic-avatar-5.svg
deleted file mode 100644
index 746e4b8..0000000
--- a/src/assets/icons/dynamic-avatar-5.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 485.29 648.83"><defs><style>.cls-1{fill:#485d63;}.cls-2{fill:#dfe7ea;}.cls-3{fill:#f0d7c2;}.cls-4{fill:#e8bc70;}.cls-5{fill:#9e8863;}.cls-6{fill:#eace9b;}.cls-7{fill:#ebcbac;}.cls-8{fill:#d7ad8c;}.cls-9{fill:#fff;}.cls-10{fill:#ebdce8;}.cls-11,.cls-12,.cls-13,.cls-15,.cls-16{fill:none;stroke:#42565e;stroke-miterlimit:10;}.cls-11{stroke-linecap:square;}.cls-11,.cls-15,.cls-16{stroke-width:10px;}.cls-12,.cls-13{stroke-width:8px;}.cls-13,.cls-15{stroke-linecap:round;}.cls-14{fill:#dcb79b;}.cls-17{fill:#325560;}.cls-18{fill:#f9d7a5;}.cls-19{fill:#aa9777;}</style></defs><title>Asset 110</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M443.55,323.66c2.62-14.83,4.62-26.94,6.06-26.84s1.64,12.6-1,27.72-7.13,26.8-8.45,26.42S441,338.5,443.55,323.66Z"/><ellipse class="cls-2" cx="268.35" cy="594.61" rx="184.33" ry="54.22"/><path class="cls-3" d="M428.34,469.65c0-8.3,16.78-.48,23.63-5.16s12-11.49,16-18.79c17.05-31.58,10.19-74.24-15.9-98.88H412.62V469.59S428.34,471.71,428.34,469.65Z"/><path class="cls-4" d="M434.11,381c-9.53,46,36-85,40.14-131.84A277.35,277.35,0,0,0,475.52,220a190.51,190.51,0,0,0-21.46-84.42c-9.77-18.73-24.42-37-45-41.73H276.62V389.38S434.59,378.69,434.11,381Z"/><path class="cls-5" d="M472.25,252.2C468.11,299,422.58,430,432.11,384c.12-.56-8.91-.38-22.68.23,8.3-26.32,15.11-53,19.16-80.32,7-47.44,5.38-96.92-11.08-142a79.81,79.81,0,0,1-9.11,39,99.38,99.38,0,0,0-66.89-53.24,146.34,146.34,0,0,1-3.3,57.77,113.39,113.39,0,0,0-63.59-35.83V96.83H407.05c20.59,4.74,35.24,23,45,41.73A190.51,190.51,0,0,1,473.52,223,276.87,276.87,0,0,1,472.25,252.2Z"/><path class="cls-4" d="M358.56,191.68c18.18-3.38,30.29-20.74,37.35-37.83A161.36,161.36,0,0,0,407.4,107,85.23,85.23,0,0,0,382.46,38.8h0A82.69,82.69,0,0,0,364,24.87C291.64-14.73,216.06,17,145.47,66.21,71.2,118,29.88,211,34.33,301.46c1.21,24.66,5.52,49.05,8,73.62,3,30.75,3.14,61.7,3.24,92.6.09,28.69.18,57.42-2,86s-9.05,60.95-33.71,75.78C25,638.32,41.63,645.8,59.15,645.74c32.19-.11,59.91-26.75,69.67-57.43s4.74-64.17-4.61-95"/><path class="cls-6" d="M127.21,490.34c9.35,30.8,14.36,64.3,4.61,95s-37.48,57.33-69.67,57.43c-17.52.06-34.2-7.41-49.34-16.24.81-.49,1.59-1,2.36-1.51,40.57-1.44,79.75-27.29,96.16-64.58a37.9,37.9,0,0,1-38,.64A52.25,52.25,0,0,0,111.77,525a51.18,51.18,0,0,1-32.54,2.87c10.53-2.58,18.3-12,22.13-22.1s4.42-21.18,5.43-32c1.93-20.56,5.55-41.07,12.68-60.45,15.06-40.93,44.72-74.4,74.56-106.4q7.86,36.69,19.35,72.48Z"/><path class="cls-7" d="M115.17,463.89C130.26,540.2,184.36,587,245.46,628.51c8.84,6,18.31,12.23,29,12.65,10.49.41,20.28-4.85,29.28-10.26,49.1-29.54,94.28-70.57,113.42-124.58,13-36.78,13.08-76.71,13-115.73-.09-35-1-72.74-21.94-100.84-13.87-18.64-36-32.23-42.17-54.64-4.65-16.91,0-38.12-16.91-48a29.44,29.44,0,0,0-9.22-3.32c-27.55-5.42-55,14.79-81.91,8.28-11.58-2.8-21.58-10.31-33.12-13.26-15-3.84-31.36.63-44.2,9.35s-22.58,21.33-30.6,34.61c-28.1,46.52-37,101.94-42.33,156l0,.43a214,214,0,0,0,3.08,62.46Z"/><path class="cls-3" d="M418.83,302s34.47,218.5-141.37,339.17c-8.65,5.93,20.28-4.85,29.27-10.26,49.1-29.54,94.28-70.57,113.43-124.58,13-36.78,13.08-76.71,13-115.73-.08-30.16-.78-62.3-14.31-88.6"/><path class="cls-8" d="M367.25,203.16c-.15.26-.31.51-.47.77-17,27.27-46.39,49.11-78.51,48-11.52-.41-23-3.7-34.44-2.2-17.75,2.32-32,15.69-42.92,29.89C168,335.51,159.1,412.77,176.93,481c7.78,29.76,20.24,58.34,25.29,88.69a75.28,75.28,0,0,1,.81,21.66c-39.62-33.48-70.95-73.23-81.86-128.43l-4.39-22.2a213.9,213.9,0,0,1-3.08-62.46c0-.14,0-.28,0-.43,5.35-54.09,14.23-109.5,42.33-156,8-13.29,17.76-25.89,30.6-34.62s29.16-13.18,44.2-9.34c11.55,3,21.54,10.46,33.12,13.25,26.94,6.51,54.36-13.7,81.92-8.28a29.37,29.37,0,0,1,9.22,3.32C362.15,190.21,365.45,196.27,367.25,203.16Z"/><path class="cls-9" d="M384.43,338.52c-13.54,10.91-12.77,39.26-34.85,41-14.66,1.18-44.11-16.07-34.5-26.74,5-5.5,25-11.47,25-11.47Z"/><path class="cls-10" d="M384.43,338.52c-13.53,10.91-12.77,39.26-34.85,41-14.66,1.19-44.11-16.07-34.5-26.74a15.69,15.69,0,0,1,3.11-2.48c4.63,9.4,24.27,19.12,35.39,18.22,16.34-1.32,20.17-17.18,26.54-29.76Z"/><path class="cls-8" d="M356,316.88c-12.09,1.06-22.72,5.35-30.26,9.22s-12.51,7-14.47,5.49c-.92-.74-.92-2.6.15-5.33a32.62,32.62,0,0,1,6.86-10,51.64,51.64,0,0,1,6.32-5.55,58.26,58.26,0,0,1,8.29-5.08,59.48,59.48,0,0,1,43.94-3.83,58.26,58.26,0,0,1,9,3.57,51.62,51.62,0,0,1,7.18,4.38,32.64,32.64,0,0,1,8.47,8.62c1.53,2.5,1.85,4.33,1.07,5.22-1.66,1.87-7.07-.45-15.21-2.9S368.11,315.84,356,316.88Z"/><path class="cls-11" d="M411.69,319.94a77.07,77.07,0,0,0-110.53,9.63"/><path class="cls-12" d="M300.9,360.34c13.2-7.76,26.61-15.47,41.26-19.92s30.84-5.43,45.06.23"/><path class="cls-13" d="M313.72,357c5.68,13.18,20.84,23.93,35.5,22.74,22.08-1.78,20.31-29.13,33.85-40"/><path class="cls-14" d="M365.83,389.68a35.49,35.49,0,0,1-7.48,2.76,30.48,30.48,0,0,1-3.43.6,22.93,22.93,0,0,1-3,.2c-3.71,0-5.91-.66-5.87-1s2.27-.36,5.74-.84c.87-.12,1.81-.26,2.81-.49s2.06-.49,3.17-.78a39.27,39.27,0,0,0,13.18-6.78c.88-.73,1.75-1.4,2.48-2.12s1.43-1.37,2-2c2.4-2.54,3.67-4.38,4-4.18s-.46,2.33-2.63,5.33a22.9,22.9,0,0,1-1.92,2.33,30.56,30.56,0,0,1-2.48,2.44A35.49,35.49,0,0,1,365.83,389.68Z"/><path class="cls-14" d="M324.31,390.28a20.85,20.85,0,0,1-5.91-3.69c-1.32-1.22-1.92-2.18-1.69-2.44.49-.55,3.92,1.86,8.59,3.78s8.77,2.73,8.72,3.47c0,.34-1.13.6-2.93.51A20.86,20.86,0,0,1,324.31,390.28Z"/><path class="cls-9" d="M163.16,338.52c13.54,10.91,12.77,39.26,34.85,41,14.66,1.18,44.11-16.07,34.5-26.74-5-5.5-25-11.47-25-11.47Z"/><path class="cls-10" d="M163.16,338.52c13.53,10.91,12.77,39.26,34.85,41,14.66,1.19,44.11-16.07,34.5-26.74a15.69,15.69,0,0,0-3.11-2.48c-4.63,9.4-24.27,19.12-35.39,18.22-16.34-1.32-20.17-17.18-26.54-29.76Z"/><path class="cls-8" d="M191.58,316.88c12.09,1.06,22.72,5.35,30.26,9.22s12.51,7,14.47,5.49c.92-.74.92-2.6-.15-5.33a32.62,32.62,0,0,0-6.86-10,51.64,51.64,0,0,0-6.32-5.55,58.26,58.26,0,0,0-8.29-5.08,59.48,59.48,0,0,0-43.94-3.83,58.26,58.26,0,0,0-9,3.57,51.62,51.62,0,0,0-7.18,4.38,32.64,32.64,0,0,0-8.47,8.62c-1.53,2.5-1.85,4.33-1.07,5.22,1.66,1.87,7.07-.45,15.21-2.9S179.48,315.84,191.58,316.88Z"/><path class="cls-11" d="M135.9,319.94a77.07,77.07,0,0,1,110.53,9.63"/><path class="cls-12" d="M246.69,360.34c-13.2-7.76-26.61-15.47-41.26-19.92s-30.84-5.43-45.06.23"/><path class="cls-13" d="M233.87,357c-5.68,13.18-20.84,23.93-35.5,22.74-22.08-1.78-20.31-29.13-33.85-40"/><path class="cls-14" d="M182.94,387.41a43.84,43.84,0,0,0,6.92,2.76c1.11.29,2.16.61,3.17.78s1.94.37,2.81.49c3.47.47,5.69.44,5.74.84s-2.16,1-5.87,1a22.93,22.93,0,0,1-3-.2,30.47,30.47,0,0,1-3.43-.6,33.07,33.07,0,0,1-14.08-7.24,30.55,30.55,0,0,1-2.48-2.44,22.9,22.9,0,0,1-1.92-2.33c-2.18-3-2.9-5.2-2.63-5.33s1.62,1.63,4,4.18c.61.63,1.26,1.32,2,2s1.6,1.39,2.48,2.12A43.84,43.84,0,0,0,182.94,387.41Z"/><path class="cls-14" d="M222.31,387.93c4.67-1.92,8.1-4.33,8.59-3.78.22.26-.37,1.23-1.69,2.44a21.64,21.64,0,0,1-12.7,5.31c-1.79.09-2.9-.17-2.93-.51C213.54,390.66,217.66,389.9,222.31,387.93Z"/><path class="cls-15" d="M118.17,465.89C133.26,542.2,187.36,589,248.46,630.51c8.84,6,18.31,12.23,29,12.65,10.49.41,20.28-4.85,29.28-10.26,49.1-29.54,94.28-70.57,113.42-124.58,13-36.78,13.08-76.71,13-115.73-.09-35-1-72.74-21.94-100.84-13.87-18.64-36-32.23-42.17-54.64-4.65-16.91,0-38.12-16.91-48a29.44,29.44,0,0,0-9.22-3.32c-27.55-5.42-55,14.79-81.91,8.28-11.58-2.8-21.58-10.31-33.12-13.26-15-3.84-31.36.63-44.2,9.35s-22.58,21.33-30.6,34.61c-28.1,46.52-37,101.94-42.33,156l0,.43a214,214,0,0,0,3.08,62.46Z"/><path class="cls-15" d="M408.06,91.27c20.59,4.74,35.24,23,45,41.73a190.51,190.51,0,0,1,21.46,84.42,277.35,277.35,0,0,1-1.27,29.22c-4.14,46.8-11.45,94.63-40.14,131.84"/><path class="cls-15" d="M431.34,466.89c8.08,1.87,16.78-.48,23.63-5.16s12-11.49,16-18.79c17.05-31.58,10.19-74.24-15.9-98.88"/><polygon class="cls-3" points="274.12 398.32 274.12 484.32 304.12 484.32 274.12 398.32"/><polyline class="cls-11" points="274.28 402.83 273.05 474.82 272.96 479.82"/><path class="cls-9" d="M363.87,259.63c2.39,2.34,5,4.47,7.37,6.54a66.27,66.27,0,0,1,6.23,6,21.72,21.72,0,0,1,3.45,5c.59,1.36.69,2.25.28,2.58s-1.28.1-2.47-.56-2.79-1.64-4.78-2.86-4.34-2.7-7-4.47a59.84,59.84,0,0,1-8.45-6.68,30.66,30.66,0,0,1-6.65-9.31,26.37,26.37,0,0,1-2.3-9,17.4,17.4,0,0,1,.59-6.16c.45-1.41,1-2.13,1.55-2.09,1.1.08,1.66,3,3.17,7.19a39.37,39.37,0,0,0,3.26,6.83A35.88,35.88,0,0,0,363.87,259.63Z"/><ellipse class="cls-9" cx="351.31" cy="225.49" rx="3.83" ry="5.04" transform="translate(-15.6 26.39) rotate(-4.21)"/><path class="cls-1" d="M65.56,459.91c-.07-30.74-1.78-55.72.4-56,1-.13,2.79,6,4.36,16.12.79,5.06,1.49,11.11,2,17.86s.84,14.18.88,22-.25,15.25-.71,22-1.13,12.81-1.88,17.87c-1.49,10.13-3.21,16.28-4.23,16.16C64.22,515.65,65.74,490.65,65.56,459.91Z"/><path class="cls-1" d="M111.93,261.4a45.42,45.42,0,0,1,5.4-11.7c1.89-2.77,3.61-4.19,4.56-3.75,1.93.92.15,8.64-2.65,17.73s-5.74,16.44-7.86,16.11c-1-.18-1.65-2.32-1.64-5.67A45.45,45.45,0,0,1,111.93,261.4Z"/><path class="cls-1" d="M77.62,398.25c-4-26.89-6.89-48.82-4.79-49.26s8.3,21,12.36,48.12,4.42,49.44,2.35,49.63S81.69,425.13,77.62,398.25Z"/><path class="cls-1" d="M427.32,123.89a91.18,91.18,0,0,1,3.08,13c.28,2,.56,4,.67,5.81s.21,3.53.22,5.08c0,6.23-.81,10-1.47,10-1.53,0-1.71-15.08-7.36-32.38C417,108.09,408.4,95.73,409.62,94.82c.52-.4,3.4,2.2,7,7.28.9,1.27,1.85,2.68,2.77,4.26s1.88,3.29,2.83,5.11A91.15,91.15,0,0,1,427.32,123.89Z"/><path class="cls-1" d="M435.53,122.29a80.51,80.51,0,0,1,5,12.58c.55,2,1.09,3.91,1.43,5.73.18.91.38,1.78.5,2.62l.33,2.44c.74,6.25.25,10.13-.4,10.17s-1.55-3.67-3.14-9.47l-.63-2.27c-.22-.79-.51-1.59-.76-2.44-.49-1.69-1.15-3.45-1.79-5.32a107.91,107.91,0,0,0-11.54-22.83c-1.12-1.62-2.14-3.2-3.22-4.6-.53-.71-1-1.41-1.51-2.06L418.35,105c-3.72-4.72-6.25-7.57-5.76-8.15s3.83,1.41,8.42,5.71l1.77,1.72c.61.6,1.19,1.28,1.81,2,1.27,1.35,2.48,2.91,3.77,4.55A80.56,80.56,0,0,1,435.53,122.29Z"/><path class="cls-1" d="M437.62,333.7c-.34-15.36-3.9-27.55-2.48-28.05.63-.22,2.37,2.59,4.09,7.59a64,64,0,0,1,2.31,9,74.61,74.61,0,0,1,.62,22.7,63.92,63.92,0,0,1-1.82,9.1c-1.44,5.09-3,8-3.67,7.8C435.24,361.42,438.12,349.06,437.62,333.7Z"/><path class="cls-16" d="M433.65,395.23a27.4,27.4,0,0,1,25.66,32.54"/><path class="cls-17" d="M184.12,352.09a15.92,15.92,0,1,0,31.84,0c0-8.79-7.13-13.92-15.92-13.92S184.12,343.29,184.12,352.09Z"/><circle class="cls-9" cx="206.12" cy="357.33" r="2.5"/><path class="cls-17" d="M364,352.09a15.92,15.92,0,1,1-31.84,0c0-8.79,7.13-13.92,15.92-13.92S364,343.29,364,352.09Z"/><circle class="cls-9" cx="341.95" cy="357.33" r="2.5"/><circle class="cls-3" cx="314.12" cy="599.33" r="11.5"/><path class="cls-8" d="M332.64,526.83c-1.48,3.18-4.8,5.06-8.08,6.31-13,5-25.52,2.38-36.86-5-4.46,3.84-9.18,5.62-14.07,5.29l.4-5.84c3.77.25,7.57-1.5,11.3-5.23l1.72-1.72,2,1.37c7.57,5.19,36.55-.44,42.56-1.18"/><path class="cls-8" d="M209.56,521.86c-3.46-2.9-5.74-5-5.94-5l3-3c6,.75,45.11,13.37,52.68,8.18l2-1.37,1.72,1.72c3.73,3.73,7.53,5.48,11.3,5.23l.4,5.84c-4.88.33-9.61-1.44-14.07-5.29-1.94,1.26-5.62,2.48-10,3.53A46.93,46.93,0,0,1,209.56,521.86Z"/><path class="cls-16" d="M271.67,524.41c3.93.27,8.6-1.11,13.57-6.08,0,0,1.62,1.11,4.16,2.68A33,33,0,0,0,330,516.25h0"/><path class="cls-16" d="M272.36,524.41c-3.93.27-8.6-1.11-13.57-6.08l-.1.07a37.13,37.13,0,0,1-47.07-4.52l-3.53-3.53"/><path class="cls-18" d="M390.67,49.67a524.8,524.8,0,0,0-73-15.76c-22.42-3.1-45.46-4.46-67.51.61-21.72,5-42.56,16.9-54.62,35.6a34.67,34.67,0,0,0,4.79-12.35c.11-.6.21-1.2.28-1.8a71.27,71.27,0,0,0-45.38,38.41,54.12,54.12,0,0,0,4-14.52,52.4,52.4,0,0,0,.43-8.21,96.11,96.11,0,0,0-45.21,47.18c-.65,1.46-1.26,3-1.82,4.45a1.23,1.23,0,0,0-.32-.17c-1.85-.64-3.67.94-4.91,2.45a58.38,58.38,0,0,0-12.54,27.11l-.06-9.87-.51.44a66.28,66.28,0,0,0-22.54,56.07q-.63-3-1.27-6c-.38.65-.75,1.3-1.12,2a87.78,87.78,0,0,0-9.45,57.92A37.49,37.49,0,0,0,54,243.29c-.67-.81-1.38-1.6-2.12-2.35a73.15,73.15,0,0,0-.2,50.58,11.34,11.34,0,0,0-3.33-3q-.41-.24-.84-.45c-.5,15.72-.26,31.47.71,47.16q-2.35-2.53-4.63-5.15c-2.08-8.34-4.19-16.69-6.18-25.05.35,6.55.92,13.09,1.61,19.61-.4-.47-.78-1-1.15-1.43-.68-6.57-1.22-13.15-1.55-19.75q-.3-6.09-.32-12.19a276.58,276.58,0,0,1,2.33-35,282.81,282.81,0,0,1,8.88-42.43,275.52,275.52,0,0,1,52.85-100.1,243.92,243.92,0,0,1,47.39-43.55c9.57-6.67,19.23-13,29-18.91,1.1-1.38,2.25-2.74,3.43-4.06,21-12.49,42.38-22.77,63.85-29.51q-3.33,2-6.52,4.15C280.13,7,323.61,5.69,366,28.88a79.64,79.64,0,0,1,9.72,6.31,87,87,0,0,1,15,14.48Z"/><path class="cls-15" d="M358.56,189.68c18.18-3.38,30.29-20.74,37.35-37.83A161.36,161.36,0,0,0,407.4,105,85.23,85.23,0,0,0,382.46,36.8h0A82.69,82.69,0,0,0,364,22.87C291.64-16.73,216.06,15,145.47,64.21,71.2,116,29.88,209,34.33,299.46c1.21,24.66,5.52,49.05,8,73.62,3,30.75,3.14,61.7,3.24,92.6.09,28.69.18,57.42-2,86s-9.05,60.95-33.71,75.78C25,636.32,41.63,643.8,59.15,643.74c32.19-.11,59.91-26.75,69.67-57.43s4.74-64.17-4.61-95"/><path class="cls-1" d="M46.16,273.53c3.26,8.9,6.48,17,8.51,23s2.9,10,1.93,10.42-3.52-2.66-6.84-8.14A133.92,133.92,0,0,1,39,276.15,109.19,109.19,0,0,1,35,262.74c-.42-2.12-.83-4.12-1.06-6-.12-1-.26-1.87-.34-2.76l-.18-2.56c-.35-6.55.52-10.59,1.53-10.63s2.16,3.78,3.82,9.76l.65,2.35.75,2.53c.48,1.75,1.09,3.6,1.67,5.55C43.12,264.82,44.55,269.08,46.16,273.53Z"/><path class="cls-1" d="M54.21,234.57c1.33,3.41,2.73,6.6,4.06,9.5.7,1.43,1.32,2.82,2,4.08s1.23,2.47,1.78,3.57c2.2,4.38,3.55,7.28,2.72,8s-3.63-1-7.18-4.91a39.82,39.82,0,0,1-2.72-3.31c-1-1.22-1.84-2.6-2.78-4.06a61.19,61.19,0,0,1-8.07-21c-.28-1.71-.55-3.34-.66-4.88a39.84,39.84,0,0,1-.19-4.28c0-5.25,1-8.44,2-8.45s2,3,3.34,7.76c.33,1.18.66,2.47,1.07,3.84s.83,2.83,1.27,4.36C51.81,227.84,52.91,231.15,54.21,234.57Z"/><path class="cls-1" d="M69.46,183.31A92.69,92.69,0,0,0,72,193.87c.54,1.58,1,3.13,1.55,4.52.27.7.49,1.4.75,2l.76,1.87c2,4.78,3.38,7.85,2.51,8.56-.41.33-1.31,0-2.6-1q-.49-.36-1-.84c-.36-.32-.72-.7-1.11-1.11A26.41,26.41,0,0,1,70.36,205l-1.3-1.82c-.44-.64-.83-1.35-1.26-2.07a45.69,45.69,0,0,1-2.42-4.77,51.11,51.11,0,0,1-4.07-24A45.6,45.6,0,0,1,62,167c.17-.82.3-1.61.5-2.36l.63-2.14A26.44,26.44,0,0,1,64.53,159c.23-.51.45-1,.68-1.41s.48-.8.71-1.14c.9-1.34,1.63-2,2.13-1.79,1.05.38.72,3.75.45,8.91l-.1,2c0,.7,0,1.43,0,2.18-.07,1.5,0,3.1,0,4.77A92.67,92.67,0,0,0,69.46,183.31Z"/><path class="cls-1" d="M89,131.24a74.29,74.29,0,0,1,2.76-13.29c.66-2,1.28-3.86,2-5.56.37-.85.69-1.68,1.07-2.45l1.12-2.2c3-5.56,5.78-8.38,6.65-7.89s-.08,4.2-1.62,9.9l-.61,2.23c-.21.77-.38,1.59-.6,2.43-.45,1.66-.8,3.47-1.23,5.34-.76,3.78-1.48,7.93-2,12.33s-.65,8.62-.72,12.47c0,1.92,0,3.76.06,5.48,0,.86,0,1.7.06,2.5l.11,2.31c.29,5.9.53,9.7-.54,10s-3.08-3.06-4.81-9.13l-.63-2.39c-.21-.84-.35-1.72-.52-2.63-.37-1.82-.58-3.79-.8-5.87A74.3,74.3,0,0,1,89,131.24Z"/><path class="cls-1" d="M113.68,100.1a74.8,74.8,0,0,1,7.45-12.67,63.61,63.61,0,0,1,4.07-4.95c.68-.74,1.31-1.47,2-2.11l2-1.83a37.12,37.12,0,0,1,3.55-2.91c.54-.4,1-.77,1.54-1.09s1-.57,1.39-.8c1.7-.91,2.78-1.21,3.12-.8.72.86-1.83,4.07-5.57,9.22l-1.46,2c-.51.7-1,1.47-1.51,2.23-1.08,1.51-2.09,3.22-3.21,5a126.11,126.11,0,0,0-6.32,11.89,126.2,126.2,0,0,0-4.81,12.58c-.58,2-1.2,3.88-1.63,5.68-.23.9-.5,1.76-.69,2.6l-.56,2.43c-1.43,6.2-2.17,10.24-3.29,10.26-.53,0-1-1-1.45-2.88q-.16-.7-.31-1.57c-.09-.57-.13-1.2-.19-1.87a37.14,37.14,0,0,1-.14-4.59l.1-2.67c0-.93.18-1.89.29-2.88A63.54,63.54,0,0,1,109,114,74.81,74.81,0,0,1,113.68,100.1Z"/><path class="cls-1" d="M154,73.71A101.68,101.68,0,0,1,161.36,60c1.33-2,2.6-3.88,3.92-5.55.65-.84,1.26-1.66,1.9-2.42L169,49.87c4.85-5.38,8.61-7.92,9.35-7.24,1.66,1.52-9.16,15-17.39,34.15-8.45,19.07-11,36.15-13.21,36-1-.08-1.69-4.56-1.05-11.78l.3-2.82c.12-1,.31-2,.48-3,.32-2.11.85-4.32,1.4-6.65A101.72,101.72,0,0,1,154,73.71Z"/><path class="cls-1" d="M202.65,42a130.36,130.36,0,0,1,14.27-14.29c2.4-2,4.67-3.85,6.94-5.42,1.13-.8,2.19-1.6,3.26-2.29l3.11-2c2-1.27,3.86-2.23,5.51-3.09.83-.42,1.59-.82,2.32-1.15s1.41-.59,2-.83c2.46-.94,3.93-1.23,4.19-.77.56,1-4,4.45-10.88,10.24l-2.7,2.28c-.94.79-1.87,1.67-2.86,2.54-2,1.71-4,3.69-6.18,5.7-4.23,4.13-8.73,8.82-13.15,14s-8.25,10.43-11.62,15.29c-1.62,2.47-3.24,4.78-4.59,7-.69,1.12-1.41,2.18-2,3.24l-1.79,3c-4.56,7.77-7.22,12.82-8.28,12.43-.5-.18-.45-1.68.07-4.26q.19-1,.48-2.14c.2-.77.47-1.59.75-2.48.58-1.76,1.21-3.8,2.13-5.94L185,69.82c.51-1.18,1.12-2.36,1.72-3.6,1.17-2.5,2.65-5.05,4.19-7.75A130.38,130.38,0,0,1,202.65,42Z"/><path class="cls-1" d="M404.92,184.19A38,38,0,0,1,412,199.47c.83,4.26.44,7-.22,7s-1.62-2.32-3.23-6a65.1,65.1,0,0,0-7.68-13.26A56.35,56.35,0,0,0,395.3,181a40.81,40.81,0,0,0-5.17-4.37c-3.08-2.17-5.53-2.54-5.57-3.28,0-.34.64-.73,1.93-.86a11.71,11.71,0,0,1,5.3.94,26.48,26.48,0,0,1,6.61,4A38.63,38.63,0,0,1,404.92,184.19Z"/><path class="cls-1" d="M426.85,221.88c-3.16-30-9.14-53.8-7.67-54.21.64-.18,3,5.57,5.63,15.23,1.33,4.82,2.68,10.63,3.94,17.13s2.34,13.7,3.18,21.3,1.25,14.87,1.45,21.49.08,12.58-.19,17.58c-.52,10-1.57,16.12-2.24,16.08C429.42,276.39,430.17,251.84,426.85,221.88Z"/><path class="cls-19" d="M380.87,146.32A106.55,106.55,0,0,0,391,112.41a124.37,124.37,0,0,0,.3-29.22c-1.82-16.69-6.12-26.48-5-27,.44-.21,2.1,2,4.21,6.39a72.26,72.26,0,0,1,3.24,8.3,88.36,88.36,0,0,1,2.92,11.47A110,110,0,0,1,398,113.2a103.85,103.85,0,0,1-10.25,36.55,85.57,85.57,0,0,1-18,24.27l-4.9,4.58-1.2-6.53c-1.62-8.83-4.94-17-7.77-24.34l-2.08-5.41c-.66-1.78-1.27-3.33-1.94-4.88a69.07,69.07,0,0,0-4.23-8.2,59.88,59.88,0,0,0-8-10.43c-2.15-2.25-3.42-3.45-3.18-3.84s1.94.18,4.73,2a41.67,41.67,0,0,1,10.23,9.73,61.38,61.38,0,0,1,5.38,8.41c.83,1.57,1.68,3.34,2.43,5l2.41,5.24c1.65,3.62,3.4,7.5,5,11.7a85.72,85.72,0,0,1,4.18,13.7l-6.1-2A84.44,84.44,0,0,0,380.87,146.32Z"/><path class="cls-5" d="M355.62,172.83c.9,6.31-1.07,6.63-1,13-1.26-1.84-16.19-21.71-17.49-23.52-9.26-12.88-20.25-25.65-35.12-31.05l-.86-.31c-8.47-2.9-17.55-3.15-26.53-2.35l-2,.19c-1.94.21-3.88.46-5.8.74a206.66,206.66,0,0,0-62.9,19.75c-7.52,3.76-15,8.21-20.48,14.49a112.31,112.31,0,0,1,27.42-27.11c17.7-12.23,39.63-21,61.76-23.36l2-.2a100.49,100.49,0,0,1,29.26,1.53c22,4.57,34.59,18.37,42.26,35.86C344,149.82,357.85,173.33,355.62,172.83Z"/><path class="cls-16" d="M164.14,208.58c8-29.33,23.69-55.63,48.72-72.92,26.11-18,61.42-28.59,93-22,36.59,7.59,47.1,40.71,52.4,73.85"/><path class="cls-1" d="M215.74,147.22a100.7,100.7,0,0,1,26.07-3.78c6.69-.08,10.83.5,10.94,1.54s-3.87,2.39-10.3,3.84-15.26,3.05-24.56,5.75a101.18,101.18,0,0,0-22.64,9.55c-5.48,3.16-8.72,5.67-9.56,4.92-.38-.35-.08-1.46,1-3.12a30.21,30.21,0,0,1,5.4-6.17,51.65,51.65,0,0,1,10-6.95A70.64,70.64,0,0,1,215.74,147.22Z"/><path class="cls-1" d="M309.26,130.58a66.63,66.63,0,0,1,7.25,11.53,56.48,56.48,0,0,1,2.3,5.48c.31.88.63,1.71.87,2.54l.65,2.39a32.74,32.74,0,0,1,.81,4.18c.08.62.17,1.19.2,1.73s0,1,0,1.48c0,1.79-.29,2.81-.81,2.92-1.09.23-2.67-3.22-5.32-8.44l-1-2c-.36-.71-.79-1.42-1.19-2.17-.78-1.52-1.75-3.06-2.7-4.71A99.37,99.37,0,0,0,295,126.14c-1.39-1.31-2.66-2.61-4-3.71-.64-.56-1.23-1.15-1.84-1.66l-1.75-1.48c-4.47-3.77-7.47-6.1-7-7.11.23-.48,1.28-.5,3-.11q.66.15,1.44.37c.51.16,1.05.37,1.64.6a32.82,32.82,0,0,1,3.88,1.75l2.18,1.18c.75.42,1.49.93,2.27,1.43a56.59,56.59,0,0,1,4.8,3.5A66.67,66.67,0,0,1,309.26,130.58Z"/><path class="cls-1" d="M61.4,607.71a117.32,117.32,0,0,0,16.11-10.4C79.9,595.56,82,593.67,84,592l2.81-2.59c.45-.42.91-.81,1.33-1.22L89.4,587c6.42-6.34,10-10.83,11-10.22.82.48-1.2,6.11-6.94,13.78L92.38,592c-.39.49-.81,1-1.23,1.47l-2.67,3.08c-2,2-4.05,4.2-6.49,6.23a91.29,91.29,0,0,1-17,11.7A88.58,88.58,0,0,1,45.76,622l-2.27.6c-.75.17-1.51.31-2.24.46-1.48.27-2.9.6-4.3.78a74.11,74.11,0,0,1-7.8.73c-1.2,0-2.32.09-3.41.1a8.86,8.86,0,0,1-3.91-.72,5.16,5.16,0,0,1-1.69-1.33,7,7,0,0,1-.87-1.36c-.39-.8-.62-1.42-.83-1.84a2.56,2.56,0,0,0-.66-.9,2.74,2.74,0,0,0-.69-.47c-.39-.21-.81-.1-1-.27s-.14-.24-.06-.49a1.5,1.5,0,0,1,.83-.77,3.81,3.81,0,0,1,3.89,1c.63.58,1.11,1.22,1.58,1.73a3.45,3.45,0,0,0,.65.58,1,1,0,0,0,.5.16,7.4,7.4,0,0,0,1.91-.18l3.16-.63c2.22-.36,4.61-1,7.18-1.58,1.28-.3,2.58-.73,3.93-1.09l2-.58,2.07-.7A112.21,112.21,0,0,0,61.4,607.71Z"/><path class="cls-1" d="M93.87,544.17a90.31,90.31,0,0,0,6.1-6.67c.85-1.1,1.72-2.12,2.44-3.14.37-.51.76-1,1.1-1.46l1-1.38c2.5-3.52,4.14-5.89,5.2-5.56s1.14,3.36-.35,8l-.63,1.79c-.23.62-.53,1.23-.83,1.88a37.89,37.89,0,0,1-2.15,4,42.83,42.83,0,0,1-14.82,14.37,37.88,37.88,0,0,1-4.06,2c-.66.27-1.28.56-1.9.77l-1.8.58c-4.65,1.34-7.72,1.07-8,.1s2.12-2.63,5.72-5l1.41-.93c.49-.32,1-.7,1.49-1.05,1-.69,2.09-1.53,3.22-2.34A90.35,90.35,0,0,0,93.87,544.17Z"/><path class="cls-1" d="M95.45,496.29c2.6-8.77,4-17.18,5.28-23.3s2.5-10,3.56-9.87,1.74,4,1.83,10.4a86.21,86.21,0,0,1-3.33,25,60.1,60.1,0,0,1-5.63,13.06A44.34,44.34,0,0,1,90,520.81a26.34,26.34,0,0,1-6.29,4.73c-1.68.84-2.78,1-3.09.6-.67-.9,2-3.78,5.2-8.78A80.56,80.56,0,0,0,95.45,496.29Z"/><path class="cls-9" d="M306.51,19.4a82.38,82.38,0,0,1,10.9,3.14,62.75,62.75,0,0,1,8.43,3.81c4.63,2.56,7.07,4.86,6.63,5.79-1,2-12.76-2.18-27.55-5.25s-27.21-4.21-27.31-6.4c0-1,3.14-2.13,8.41-2.59a62.76,62.76,0,0,1,9.26-.06A82.38,82.38,0,0,1,306.51,19.4Z"/><path class="cls-9" d="M357.75,44.44a32.45,32.45,0,0,1,6.12,10.68c1,3.06.87,5.19-.07,5.63s-2.59-.79-4.62-2.92-4.52-5.16-7.29-8.45-5.32-6.26-7.09-8.62-2.71-4.17-2.09-5,2.71-.57,5.56.89A32.45,32.45,0,0,1,357.75,44.44Z"/><path class="cls-9" d="M367.32,553.4c2.58-2.66,5-5.26,7.12-7.65l5.7-6.46c3.28-3.7,5.55-6,6.51-5.45s.28,3.75-2,8.45a57.59,57.59,0,0,1-4.68,7.85,71.75,71.75,0,0,1-15.58,16,57.59,57.59,0,0,1-7.72,4.89c-4.64,2.4-7.87,3.11-8.39,2.22s1.66-3.27,5.27-6.65l6.31-5.87C362.19,558.5,364.72,556,367.32,553.4Z"/><path class="cls-9" d="M399.53,493.29c2-9.66,4.13-17.57,6.27-17.45,1,.08,1.87,2.22,2.19,5.66a52.17,52.17,0,0,1-5.22,25.92c-1.63,3.06-3.22,4.71-4.21,4.38C396.53,511.09,397.61,503,399.53,493.29Z"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/icons/dynamic-avatar-6.svg b/src/assets/icons/dynamic-avatar-6.svg
deleted file mode 100644
index b2432f2..0000000
--- a/src/assets/icons/dynamic-avatar-6.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 586.2 682.51"><defs><style>.cls-1{fill:#dfe7ea;}.cls-2{fill:#b0d7e9;}.cls-3{fill:#54b9d3;}.cls-4{fill:#f2c7a5;}.cls-20,.cls-5{opacity:0.5;}.cls-6{fill:#ffac89;}.cls-14,.cls-7{fill:none;stroke-miterlimit:10;stroke-width:10px;}.cls-7{stroke:#274b5b;}.cls-20,.cls-8{fill:#ef997b;}.cls-9{fill:#fcdac3;}.cls-10{fill:#fff;}.cls-11{fill:#274b5b;}.cls-12{fill:#3b535c;}.cls-13{fill:#d9edf4;}.cls-14{stroke:#42565e;stroke-linecap:round;}.cls-15{fill:#ebcbac;}.cls-16{fill:#d7ad8c;}.cls-17{fill:#3f565e;}.cls-18{fill:#f2dcca;}.cls-19{fill:#ce956e;}</style></defs><title>Asset 100</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><ellipse class="cls-1" cx="289.02" cy="618.52" rx="184.33" ry="54.22"/><path class="cls-2" d="M518.48,204.9l16.76,4.24,42.08,10.65a7.19,7.19,0,0,1,2.5,12.76L516.64,279a7.19,7.19,0,0,0-.88,10.82l54.39,55.65a7.19,7.19,0,0,1-1.52,11.23l-60.92,35.54a7.19,7.19,0,0,0-3,9l23.9,56.16a7.19,7.19,0,0,1-7.12,10L448.38,459l-305.16,3.1L67.8,467.44a7.19,7.19,0,0,1-7.12-10l23.9-56.16a7.19,7.19,0,0,0-3-9L20.67,356.73a7.19,7.19,0,0,1-1.52-11.23l54.39-55.65A7.19,7.19,0,0,0,72.65,279L9.48,232.55A7.19,7.19,0,0,1,12,219.79l44.73-11.32,23.55-6L125.78,191,90.1,107.72A7.19,7.19,0,0,1,98.83,98l119.89,37.21L233.83,14.4a7.19,7.19,0,0,1,13.82-1.75l45.43,114.84"/><path class="cls-2" d="M492,198.21,463.51,191l35.69-83.27a7.19,7.19,0,0,0-8.74-9.7L370.57,135.23l-6.09-48.76-3.73-29.86L355.46,14.4a7.19,7.19,0,0,0-13.82-1.75L296.22,127.48l-7.39,3.1"/><path class="cls-3" d="M233,368q0,46-1.73,92l-86.5.88-75.42,5.37a7.2,7.2,0,0,1-7.13-10l23.9-56.17a7.17,7.17,0,0,0-3-9L22.21,355.52a7.2,7.2,0,0,1-1.52-11.25l54.39-55.64a7.18,7.18,0,0,0-.88-10.81L11,231.34a7.19,7.19,0,0,1,2.49-12.76l44.74-11.32,23.56-5.95,45.51-11.52L91.64,106.5a7.19,7.19,0,0,1,8.75-9.7L142,109.72c-2,20.85-.12,41.93,7.5,61.34,3.36,8.54,7.81,16.73,10,25.65,4.38,18.17-1.25,37.39-10,53.89s-20.63,31.17-30.05,47.31c-5.36,9.22-10,19.27-10.24,29.93s5,22,14.75,26.29c14.89,6.55,31.1-5.22,42.57-16.76S192,312.6,207.88,316c10.25,2.17,18,11.15,21.52,21S233,357.54,233,368Z"/><circle class="cls-4" cx="145.54" cy="410.18" r="47.25"/><g class="cls-5"><path class="cls-6" d="M162,452.3a47.25,47.25,0,1,1-18-90.91,48.21,48.21,0,0,1,6.74.48A47.25,47.25,0,0,0,162,452.3Z"/></g><circle class="cls-7" cx="144" cy="410.18" r="47.25"/><circle class="cls-4" cx="439.86" cy="410.18" r="47.25"/><g class="cls-5"><path class="cls-6" d="M423.36,452.3a47.25,47.25,0,1,0,18-90.91,48.21,48.21,0,0,0-6.74.48,47.25,47.25,0,0,1-11.31,90.43Z"/></g><circle class="cls-7" cx="441.41" cy="410.18" r="47.25"/><path class="cls-4" d="M174.94,538q-4.07-6.33-7.72-13.08c-16.85-31.19-26.7-68.82-26.7-109.33,0-107.79,69.7-195.18,155.68-195.18S451.87,307.81,451.87,415.6,382.17,610.78,296.2,610.78c-39.91,0-76.31-18.83-103.86-49.78"/><g class="cls-5"><path class="cls-8" d="M312.5,609.72a126,126,0,0,1-16.3,1.05c-39.92,0-76.32-18.82-103.86-49.79l-17.4-23q-4.09-6.34-7.73-13.09c-16.85-31.2-26.69-68.82-26.69-109.33,0-107.8,69.69-195.18,155.68-195.18a125.57,125.57,0,0,1,16.26,1.05c-78.33,10.19-139.41,93.2-139.41,194.12,0,40.51,9.84,78.13,26.69,109.33q3.65,6.74,7.73,13.09l17.4,23C248.63,587.7,279,605.37,312.5,609.72Z"/></g><g class="cls-5"><path class="cls-9" d="M278.39,608.72a126,126,0,0,0,16.3,1.05C334.6,609.78,371,591,398.55,560l17.4-23q4.09-6.34,7.73-13.09c16.85-31.2,26.69-68.82,26.69-109.33,0-107.8-69.69-195.18-155.68-195.18a125.57,125.57,0,0,0-16.26,1.05c78.33,10.19,139.41,93.2,139.41,194.12,0,40.51-9.84,78.13-26.69,109.33q-3.65,6.74-7.73,13.09L366,560C342.25,586.7,311.91,604.37,278.39,608.72Z"/></g><path class="cls-7" d="M416.2,294.56c20.42,33,32.58,74.47,32.58,119.49,0,107.79-69.7,195.18-155.68,195.18-39.91,0-76.31-18.83-103.86-49.78"/><path class="cls-7" d="M386.26,257.67a174,174,0,0,1,17.85,19.56"/><path class="cls-7" d="M171.84,536.47q-4.07-6.33-7.72-13.08c-16.85-31.19-26.7-68.82-26.7-109.33,0-107.79,69.7-195.18,155.68-195.18,25.65,0,49.85,7.78,71.19,21.55"/><path class="cls-10" d="M281.08,387.72a43.37,43.37,0,0,1-86.75,0"/><path class="cls-1" d="M279.21,387.62a43.37,43.37,0,1,1-86.75,0h1.36a43.39,43.39,0,0,0,84,0Z"/><path class="cls-7" d="M278,387.72a43.37,43.37,0,0,1-86.75,0"/><circle class="cls-11" cx="233.06" cy="401.66" r="10.84"/><circle class="cls-10" cx="245.46" cy="398.56" r="7.75"/><path class="cls-10" d="M403.46,387.72a43.37,43.37,0,0,1-86.75,0"/><path class="cls-1" d="M400,387.62a43.37,43.37,0,0,1-86.75,0h1.36a43.39,43.39,0,0,0,84,0Z"/><path class="cls-7" d="M400.36,387.72a43.37,43.37,0,1,1-86.75,0"/><circle class="cls-11" cx="355.44" cy="401.66" r="10.84"/><circle class="cls-10" cx="367.83" cy="398.56" r="7.75"/><path class="cls-12" d="M108.89,340.21a50,50,0,0,1-1.71-8.58,50.56,50.56,0,0,1-.16-8.11,45.27,45.27,0,0,1,2.89-13.28,31.43,31.43,0,0,1,4.37-8c1.36-1.67,2.38-2.4,2.82-2.14,1,.57-.72,4.78-2,11.6a62,62,0,0,0-1,12,59.64,59.64,0,0,0,.55,7,55.64,55.64,0,0,0,1.6,7.31c.4,1.21.76,2.43,1.21,3.58a27,27,0,0,0,1.43,3.15,13.38,13.38,0,0,0,1.74,2.56l.47.58.53.52a9.35,9.35,0,0,0,1.1,1,27.49,27.49,0,0,0,10.2,4.72c3.33.91,6.22,1.44,8.21,2s3.12,1,3.11,1.58-1.15,1-3.23,1.39a36.81,36.81,0,0,1-9,.37,31.7,31.7,0,0,1-6.37-1.1,24,24,0,0,1-7.12-3.28,14.79,14.79,0,0,1-1.73-1.33l-.85-.74-.78-.82a19.33,19.33,0,0,1-2.78-3.69,30.37,30.37,0,0,1-2-4.07C109.8,343.06,109.36,341.65,108.89,340.21Z"/><path class="cls-12" d="M137.29,260.49C144,249.27,149.5,240,151.5,240.83c1,.4.82,3.3-.45,7.63a78.09,78.09,0,0,1-17.71,29.88c-3.19,3.19-5.66,4.71-6.48,4.06C125.2,281,130.66,271.75,137.29,260.49Z"/><path class="cls-12" d="M150.36,180c-3.32-14-7.15-25.25-5.2-26.23.93-.45,3.15,1.86,5.66,6.22a75.14,75.14,0,0,1,9.05,37.63c-.25,5-1.17,8.09-2.21,8.11C155.48,205.77,153.78,194,150.36,180Z"/><path class="cls-2" d="M444.61,469.61c26,26,14.79,78.17,15.55,115l-11.74-13a126.89,126.89,0,0,1-30.82,61.49,45.3,45.3,0,0,0-14.28-15.73,95.16,95.16,0,0,1-29.43,50.17,38.29,38.29,0,0,0-1.09-31.66,60.36,60.36,0,0,1-33,36.69,24.83,24.83,0,0,0,2.7-23.94c-12,20.29-46.33,20.91-59,1.06-.88,4-.23,9.28,3.86,9.62-17.23,2.65-33-4.61-44.86-17.39a29,29,0,0,0,9.61,18.79,52.63,52.63,0,0,1-43.78-29.08c-22.23,1.38-44.43-13.85-51.15-35.09a10.63,10.63,0,0,1-2.77,10.18C116,587.24,118.1,499.8,143.26,471c0,0,43.88,33.13,85.07,32.88,25.75-.15,55.88-19.8,85.76-19.93,25-.11,35.94,34.12,52,19.06C408.52,463.13,444.07,469.07,444.61,469.61Z"/><path class="cls-3" d="M461,579.41l-11.74-13a127,127,0,0,1-30.82,61.5,45.32,45.32,0,0,0-14.28-15.73,95.26,95.26,0,0,1-29.43,50.18,38.33,38.33,0,0,0-1.08-31.66,60.34,60.34,0,0,1-33,36.69,24.83,24.83,0,0,0,2.69-23.94c-12,20.3-46.33,20.91-59,1.07-.88,4,.12,18.77,4.22,19.12-17.23,2.65-33.36-14.1-45.22-26.89.68,7.17,2.47,20.1,7.87,24.85-18.36-.94-34.06-18.58-42.05-35.14-22.23,1.39-44.43-13.85-51.15-35.09a10.63,10.63,0,0,1-2.76,10.18c-13.27-6.74-22-21.38-26.76-38.85,17,12.38,37,20.88,56.73,28.49,13.42,5.16,27,10.08,41.15,12.66,13.72,2.49,27.74,2.75,41.69,3,38.71.67,79,1,114-15.61,10-4.76,20.61-12.93,20.26-24-.4-12.69-14.29-19.93-26.14-24.48,25.24-3.74,45.92-23.31,57.43-46.07a140.7,140.7,0,0,0,10.14-27.06l3.39,2.64C453.92,508.44,460.27,542.6,461,579.41Z"/><path class="cls-13" d="M279.44,484.79l-51.11,19.06-84.11-38.17a63.86,63.86,0,0,0-12.41,22,243.36,243.36,0,0,1,51,18,250.66,250.66,0,0,1,23.32,12.64c4.12,2.52,12.77,10.78,17.87,10.15a10.52,10.52,0,0,0,4.23-1.9c46.77-30.08,81.11-31.4,135.95-21.6l-25.77-15Z"/><path class="cls-14" d="M443.74,469.61C461,504.23,464.64,541.56,461,581.14l-11.74-13a126.89,126.89,0,0,1-30.82,61.49,45.3,45.3,0,0,0-14.28-15.73,95.16,95.16,0,0,1-29.43,50.17,38.29,38.29,0,0,0-1.09-31.66,60.36,60.36,0,0,1-33,36.69,24.83,24.83,0,0,0,2.7-23.94c-12,20.29-46.33,20.91-59,1.06-.88,4,6,20,2.13,21.75-17-7.82-31.27-16.74-43.13-29.52.69,7.17,2.46,21,7.87,25.72-18.36-.94-34.06-19.45-42.05-36-22.23,1.38-44.43-13.85-51.15-35.09a10.63,10.63,0,0,1-2.77,10.18c-38.41-19.5-36.36-105.21-11.2-134"/><path class="cls-15" d="M261.78,573.43a10.43,10.43,0,0,1-10.4-10.4V523.29a10.43,10.43,0,0,1,10.4-10.4h72.77a10.43,10.43,0,0,1,10.4,10.4V563a10.43,10.43,0,0,1-10.4,10.4"/><path class="cls-16" d="M346.68,527.62v12.33a10.43,10.43,0,0,0-9.53-6.26H264.38a10.43,10.43,0,0,0-10.4,10.4V571.5a10.29,10.29,0,0,1-.87-4.13V527.62a10.43,10.43,0,0,1,10.4-10.4h72.77A10.43,10.43,0,0,1,346.68,527.62Z"/><path class="cls-17" d="M297.73,509.18c7.51,0,14.84.05,21.92.16l10.42.19,2.54.06,1.26,0h.36l.53,0,1.06.08a17.57,17.57,0,0,1,7.76,2.86,17.26,17.26,0,0,1,7.6,13.23l0,1v.76l0,1.14-.09,2.26-.2,4.41c-.28,5.79-.59,11.18-.94,16.1s-.73,9.37-1.13,13.28l-.15,1.44-.19,1.61a13.71,13.71,0,0,1-.95,3.46,13,13,0,0,1-3.6,4.84,10.45,10.45,0,0,1-7.27,2.58c-1.75-.16-2.53-.78-2.52-1.27s.76-1,1.87-1.75a11.19,11.19,0,0,0,3.55-3.62,8,8,0,0,0,1-3,7.12,7.12,0,0,0,0-1.68l-.29-2.61c-.41-3.91-.79-8.36-1.13-13.28s-.66-10.31-.94-16.1l-.2-4.41-.09-2.26,0-1.14v-.29l0-.11a2,2,0,0,1,0-.2,3.62,3.62,0,0,0-1.85-2.5,3.46,3.46,0,0,0-1.47-.38l-4.35.1-10.42.19c-7.08.1-14.41.16-21.92.16s-14.84-.05-21.92-.16l-10.42-.19-4.35-.1a3.46,3.46,0,0,0-1.47.38,3.62,3.62,0,0,0-1.86,2.5,2,2,0,0,1,0,.2l0,.11v.29l0,1.14-.09,2.26-.2,4.41c-.28,5.79-.59,11.18-.94,16.1s-.73,9.37-1.13,13.28l-.29,2.61a7.13,7.13,0,0,0,0,1.68,8,8,0,0,0,1,3,11.2,11.2,0,0,0,3.55,3.62c1.1.73,1.87,1.19,1.87,1.75s-.78,1.11-2.52,1.27a10.45,10.45,0,0,1-7.27-2.58,13,13,0,0,1-3.6-4.84,13.71,13.71,0,0,1-.95-3.46l-.19-1.61-.15-1.44c-.41-3.91-.79-8.36-1.13-13.28s-.66-10.31-.94-16.1l-.2-4.41-.09-2.26,0-1.14v-.76l0-1a17.26,17.26,0,0,1,7.6-13.23,17.57,17.57,0,0,1,7.76-2.86l1.06-.08.53,0h.36l1.26,0,2.54-.06,10.42-.19C282.89,509.23,290.22,509.18,297.73,509.18Z"/><path class="cls-17" d="M302.86,552.58a54.43,54.43,0,0,0,5.71-1.73,48,48,0,0,0,5-2.23,39.67,39.67,0,0,0,7.71-5.1c2-1.73,3.52-3.4,4.81-4.61s2.25-2,3.11-1.78,1.44,1.34,1.56,3.45a17.79,17.79,0,0,1-2.29,8.39,29.29,29.29,0,0,1-8.6,9.58,38.08,38.08,0,0,1-6.48,3.82,42.55,42.55,0,0,1-7.57,2.62c-1.33.33-2.67.56-4,.77s-2.65.32-3.9.37a47.38,47.38,0,0,1-7.23-.2A41.23,41.23,0,0,1,279,563a23.64,23.64,0,0,1-7-4.26c-1.44-1.37-2-2.56-1.64-3.35.75-1.65,4.79-1.39,10.66-1.18,2.94.11,6.36.18,10.08,0,1.86-.1,3.8-.26,5.79-.51,1-.11,2-.3,2.95-.45S301.87,552.83,302.86,552.58Z"/><path class="cls-17" d="M155.46,490.33A39.37,39.37,0,0,0,156,500a41,41,0,0,0,3.15,9.52,42.44,42.44,0,0,1-5.84-8.6,43.67,43.67,0,0,1-3.52-10.15,47.59,47.59,0,0,1-1-11c0-.93.08-1.86.14-2.79s.15-1.87.31-2.81a36.46,36.46,0,0,1,1.21-5.8l10.41,4.56a25.27,25.27,0,0,0-2,3.8c-.33.69-.58,1.41-.87,2.12l-.76,2.2A40.47,40.47,0,0,0,155.46,490.33Z"/><path class="cls-17" d="M171.41,499.11c.85,7.6,4.25,15.18,9.15,21.74a48.54,48.54,0,0,1-14.67-20.41,39.56,39.56,0,0,1-2.34-13.25,35.77,35.77,0,0,1,2.72-13.91l10,5.38C172.32,484,170.54,491.58,171.41,499.11Z"/><path class="cls-17" d="M200.42,504.82a52.28,52.28,0,0,0,7.09,20.82,55.13,55.13,0,0,1-12.6-19.43,57.85,57.85,0,0,1-3.79-24l11.2,1.92A49.27,49.27,0,0,0,200.42,504.82Z"/><path class="cls-17" d="M389.49,500.65a28,28,0,0,1-.29,9c-.5,2.28-1.27,3.62-2,3.56-1.43-.14-2-5.52-2.82-12S383,489.45,384.35,489c.66-.22,1.72.9,2.74,3A28,28,0,0,1,389.49,500.65Z"/><path class="cls-17" d="M413.62,499.69a36.83,36.83,0,0,1-2.43,12.46c-1.23,3-2.53,4.66-3.17,4.43-1.37-.52.31-7.91.5-17s-1-16.59.39-17c.65-.19,1.87,1.5,2.94,4.59A36.83,36.83,0,0,1,413.62,499.69Z"/><path class="cls-17" d="M436.93,497a55.34,55.34,0,0,1,.52,9.45,45.63,45.63,0,0,1-.89,7.66c-.91,4.3-2.14,6.77-2.8,6.63-1.47-.31,0-10.64-1.89-23s-5.89-22-4.54-22.67c.6-.31,2.44,1.74,4.48,5.63a47.93,47.93,0,0,1,3,7.1A57.59,57.59,0,0,1,436.93,497Z"/><path class="cls-17" d="M164.59,595.73a42.25,42.25,0,0,1-.27-8.85,35.84,35.84,0,0,1,.53-3.82,26.8,26.8,0,0,1,.8-3.26c1.21-3.93,2.72-6,3.34-5.81s.45,2.69.21,6.47c-.06.95-.13,2-.14,3.08s0,2.28,0,3.51a62.81,62.81,0,0,0,2.26,15.79c.35,1.18.65,2.32,1,3.36s.68,2,1,2.92c1.29,3.56,2.22,5.84,1.61,6.27s-2.57-1.21-4.84-4.65a26.73,26.73,0,0,1-1.68-2.91,35.79,35.79,0,0,1-1.58-3.52A42.25,42.25,0,0,1,164.59,595.73Z"/><path class="cls-17" d="M197.49,609.93a54.89,54.89,0,0,1-.09-14.27c.47-3.6,1.18-5.78,1.87-5.77s1.28,2.24,1.74,5.77.81,8.37,1.53,13.54c.38,2.58.84,5,1.34,7.18.3,1.07.52,2.12.83,3.06l.4,1.38.43,1.26c1.09,3.22,2,5.28,1.36,5.73s-2.5-1-4.6-4.13l-.79-1.26c-.25-.45-.49-.93-.74-1.43a32.2,32.2,0,0,1-1.4-3.26A42.34,42.34,0,0,1,197.49,609.93Z"/><path class="cls-17" d="M236.71,616.79c-4.33-15.35-4.94-28.35-3.58-28.52s4.28,12.17,8.5,27.14,8.17,27,6.83,27.61S241,632.15,236.71,616.79Z"/><path class="cls-17" d="M346.34,623.13c1.94-6.48,3.3-12.56,4.5-17s2.2-7.12,2.9-7,.94,3,.66,7.6a81.29,81.29,0,0,1-3.17,17.86,60.46,60.46,0,0,1-3.75,9.43c-.76,1.38-1.45,2.7-2.24,3.86-.39.58-.75,1.15-1.13,1.68l-1.15,1.47c-3,3.7-5.58,5.28-6,4.83s1-2.91,3-6.82l.8-1.53.8-1.69c.58-1.15,1.08-2.45,1.67-3.76C344.27,629.38,345.35,626.36,346.34,623.13Z"/><path class="cls-17" d="M376.89,610.42c1.38-7.88,2.09-15.29,3-20.62s1.84-8.6,2.54-8.54,1.06,3.43,1.06,8.84a126.52,126.52,0,0,1-1.62,21.21,61.86,61.86,0,0,1-3.15,11.54,43.31,43.31,0,0,1-4.52,8.74c-3.21,4.66-6.17,6.64-6.63,6.19s1.33-3.26,3.49-8a69.42,69.42,0,0,0,3.21-8.5A91.9,91.9,0,0,0,376.89,610.42Z"/><path class="cls-17" d="M414,597.91c1.53-6.39,2.57-12.34,3.55-16.65s1.85-7,2.56-6.92,1.08,2.86,1,7.33a81.07,81.07,0,0,1-2.17,17.44,61.49,61.49,0,0,1-3.08,9.33c-.64,1.38-1.22,2.7-1.91,3.87-.33.59-.64,1.16-1,1.7l-1,1.51c-2.65,3.79-5,5.54-5.48,5.13s.65-2.93,2.32-6.87l.65-1.55.65-1.7c.48-1.16.88-2.44,1.36-3.77C412.32,604.08,413.18,601.1,414,597.91Z"/><path class="cls-17" d="M424.42,588.28c1.66-4,3-8,4.13-11.62.51-1.83,1.05-3.56,1.44-5.21s.79-3.18,1.12-4.59c1.28-5.65,2-9.25,2.7-9.22s1.27,3.73.87,9.75c-.11,1.5-.26,3.15-.54,4.9s-.63,3.62-1,5.57a78.08,78.08,0,0,1-9.93,23.93c-1.09,1.67-2.12,3.27-3.21,4.67s-2.1,2.71-3.09,3.84c-4,4.54-7,6.72-7.52,6.27s1.53-3.53,4.62-8.43c.77-1.23,1.62-2.56,2.46-4s1.74-3,2.67-4.7C420.89,596.06,422.73,592.32,424.42,588.28Z"/><path class="cls-18" d="M137,509.24c.76-3.74,2.77-6.36,4.11-5.94s1.6,3.5.9,7-2.17,6.21-3.58,6.05S136.26,513,137,509.24Z"/><path class="cls-18" d="M138.33,549.64a54.36,54.36,0,0,1-1.95-15.24c.12-3.95.78-6.35,1.46-6.36,1.47,0,2.42,9.33,5.42,20.26s6.83,19.45,5.58,20.21c-.59.34-2.39-1.39-4.5-4.73A53.49,53.49,0,0,1,138.33,549.64Z"/><path class="cls-14" d="M442.82,467.33A165.7,165.7,0,0,0,371,498.45c-3.11,2.36-6.43,4.93-10.32,5.07-4.14.15-7.78-2.48-11.25-4.75a88.22,88.22,0,0,0-21-10.34c-7.89-2.54-16.26-3.27-24.5-3.47s-16.56-.42-24.68.2a82.67,82.67,0,0,0-20.63,4.06,87.16,87.16,0,0,0-19.26,9.55c-3.47,2.26-7.11,4.89-11.25,4.75-3.9-.14-7.22-2.72-10.32-5.07a165.7,165.7,0,0,0-71.82-31.12"/><line class="cls-19" x1="228.33" y1="503.85" x2="263.97" y2="487.62"/><path class="cls-3" d="M219.34,122.68a55.94,55.94,0,0,1,29.93,12.77c.6-22.61-11.09-43.51-22.43-63.08A20.72,20.72,0,0,1,250,76.94a162.61,162.61,0,0,0-14.86-54.86c-4.94,2.27-6.38,8.48-7.16,13.85a673.21,673.21,0,0,0-6.9,86.47"/><path class="cls-12" d="M248.91,75a148.5,148.5,0,0,1,16.63,15.51,144.21,144.21,0,0,0-20.85-8.11,139.78,139.78,0,0,0-21.24-4.65l6.15-15.9A152.75,152.75,0,0,1,248.91,75Z"/><path class="cls-12" d="M246.73,129.61c7.6,7.08,14.49,15.09,19.26,24-7.16-7.34-15.61-12.79-24.45-17.26s-18.17-8-27.69-11.66l8.85-14.58C230.8,116.24,239.12,122.51,246.73,129.61Z"/><path class="cls-12" d="M41.67,334.64c5.88-2.52,11.18-5.31,15.27-7.08s6.9-2.54,7.48-1.65-1.16,3.21-4.57,6.22a58.45,58.45,0,0,1-15.18,9.57c-6.61,2.85-13.35,3.82-18.13,3.34s-7.5-2-7.33-3,2.94-1.5,7-2.42A86.51,86.51,0,0,0,41.67,334.64Z"/><path class="cls-3" d="M292,123.06A73,73,0,0,1,312.67,143a111.15,111.15,0,0,0,10.74-54.92l7.34,11.35A218.87,218.87,0,0,0,342,35.73c.18-6.89-.08-14.2-3.84-20a574.49,574.49,0,0,0-39.41,98"/><path class="cls-12" d="M329.81,92.79a148.49,148.49,0,0,1,8.38,21.15,144.21,144.21,0,0,0-15.36-16.27,139.76,139.76,0,0,0-17.2-13.31L318,72.64A152.73,152.73,0,0,1,329.81,92.79Z"/><path class="cls-12" d="M314.81,132.79a148.49,148.49,0,0,1,8.38,21.15,144.21,144.21,0,0,0-15.36-16.27,139.76,139.76,0,0,0-17.2-13.31L303,112.64A152.73,152.73,0,0,1,314.81,132.79Z"/><path class="cls-3" d="M400,125.72l3.05,20.6a98.07,98.07,0,0,0,40.39-35,165.29,165.29,0,0,1,1.82,34.87c18.29-2.58,31.49-18.24,42.86-32.79,3.7-4.74,7.52-9.73,8.59-15.65"/><path class="cls-12" d="M405.83,140.91a148.49,148.49,0,0,1-4.13,22.37,144.24,144.24,0,0,0-4.38-21.94,139.8,139.8,0,0,0-7.51-20.41l16.71-3.37A152.75,152.75,0,0,1,405.83,140.91Z"/><path class="cls-12" d="M448.83,134.91a148.49,148.49,0,0,1-4.13,22.37,144.24,144.24,0,0,0-4.38-21.94,139.8,139.8,0,0,0-7.51-20.41l16.71-3.37A152.75,152.75,0,0,1,448.83,134.91Z"/><path class="cls-3" d="M464.55,183.7a38,38,0,0,1-28.72,20.79c5,2.49,10.14,5,15.66,6,10.25,1.84,20.63-1.73,30.28-5.63,2.76-1.11,5.91-2.76,6.27-5.71.26-2.14-1.18-4.2-3-5.33a17.78,17.78,0,0,0-6.15-1.91c-5.36-1-11-2.31-14.88-6.17"/><path class="cls-3" d="M549.55,205.7a38,38,0,0,1-28.72,20.79c5,2.49,10.14,5,15.66,6,10.25,1.84,20.63-1.73,30.28-5.63,2.76-1.11,5.91-2.76,6.27-5.71.26-2.14-1.18-4.2-3-5.33a17.78,17.78,0,0,0-6.15-1.91c-5.36-1-11-2.31-14.88-6.17"/><path class="cls-12" d="M448.64,203.38a148.49,148.49,0,0,1-22,5.87,144.21,144.21,0,0,0,17.94-13.38,139.79,139.79,0,0,0,15.21-15.54L470,194A152.72,152.72,0,0,1,448.64,203.38Z"/><path class="cls-7" d="M78.71,199.41l45.52-11.52L88.55,104.62a7.19,7.19,0,0,1,8.74-9.7l119.89,37.21L232.28,11.3A7.19,7.19,0,0,1,246.1,9.55l46.43,116.84"/><path class="cls-7" d="M38.24,364.79,19.12,353.64A7.19,7.19,0,0,1,17.6,342.4L72,286.75a7.19,7.19,0,0,0-.88-10.82L7.93,229.45a7.19,7.19,0,0,1,2.5-12.76l44.73-11.32"/><path class="cls-7" d="M141.67,459l-75.42,5.37a7.19,7.19,0,0,1-7.12-10L83,398.2a7.19,7.19,0,0,0-3-9L53.83,373.89"/><path class="cls-7" d="M359.19,53.51,353.92,11.3A7.19,7.19,0,0,0,340.1,9.55L292.67,126.39"/><path class="cls-7" d="M490.47,195.11,462,187.9l35.69-83.27a7.19,7.19,0,0,0-8.74-9.7L369,132.13l-6.09-48.76"/><path class="cls-7" d="M511.25,417.2l-8.09-19a7.19,7.19,0,0,1,3-9l60.92-35.54a7.19,7.19,0,0,0,1.52-11.23l-54.39-55.65a7.19,7.19,0,0,1,.88-10.82l63.17-46.49a7.19,7.19,0,0,0-2.5-12.76L533.69,206l-16.76-4.24"/><path class="cls-7" d="M446.83,455.88l73.12,8.47a7.19,7.19,0,0,0,7.12-10l-7.48-17.57"/><path class="cls-12" d="M530.64,225.38a148.49,148.49,0,0,1-22,5.87,144.21,144.21,0,0,0,17.94-13.38,139.79,139.79,0,0,0,15.21-15.54L552,216A152.72,152.72,0,0,1,530.64,225.38Z"/><path class="cls-10" d="M350.55,248.54a42,42,0,0,1,7.24,3.77,31.91,31.91,0,0,1,5.16,4.21c2.66,2.74,3.69,5,3,5.76s-2.95.06-6.13-1.33l-5.47-2.47c-2-.9-4.28-1.87-6.65-2.83s-4.67-1.77-6.77-2.52l-5.67-2c-3.27-1.17-5.41-2.17-5.36-3.25s2.34-2,6.15-2.11a31.91,31.91,0,0,1,6.64.5A41.94,41.94,0,0,1,350.55,248.54Z"/><path class="cls-10" d="M387.87,278.37a26.41,26.41,0,0,1,4.24,10.33c.43,2.88,0,4.8-1,5.11s-2.39-1-4-3-3.49-5-5.6-8.13-4.06-6-5.38-8.27-2-4-1.3-4.85,2.6-.49,5.11,1A26.41,26.41,0,0,1,387.87,278.37Z"/><path class="cls-10" d="M513.06,362.54c7.17-4.16,14-5.44,14.87-3.54s-4.19,6.2-11,10.17-13.09,6.23-14.32,4.49S505.88,366.68,513.06,362.54Z"/><ellipse class="cls-10" cx="543.85" cy="350.52" rx="5.22" ry="3.83" transform="translate(-99.25 279.43) rotate(-26.49)"/><ellipse class="cls-10" cx="513.36" cy="253.47" rx="11.08" ry="3.83" transform="translate(-32.22 427.05) rotate(-43.93)"/><path class="cls-10" d="M222.9,474a12.54,12.54,0,0,1,6.13,4.21c1.17,1.61,1.35,3.07.67,3.86s-2.05.89-3.66.66a45.65,45.65,0,0,1-10.88-3.6c-1.43-.77-2.48-1.64-2.55-2.71s.94-2.1,2.84-2.7A12.54,12.54,0,0,1,222.9,474Z"/><path class="cls-10" d="M262.35,467.89a49.09,49.09,0,0,1,8.52-.84,37.07,37.07,0,0,1,7,.59c3.93.75,6.21,2,6.1,3s-2.51,1.75-6.16,2.39c-1.83.31-4,.66-6.35,1s-4.94.82-7.64,1.33-5.25,1.08-7.59,1.58-4.46,1-6.28,1.38c-3.63.75-6.11,1-6.61.05s1.17-2.92,4.55-5.06a37.07,37.07,0,0,1,6.26-3.12A49.09,49.09,0,0,1,262.35,467.89Z"/><rect class="cls-20" x="312.3" y="359.24" width="89" height="10"/><line class="cls-7" x1="312.3" y1="359.24" x2="401.3" y2="359.24"/><rect class="cls-20" x="187.3" y="359.24" width="89" height="10"/><line class="cls-7" x1="187.3" y1="359.24" x2="276.3" y2="359.24"/><path class="cls-7" d="M113.3,415.55a22.64,22.64,0,0,1,23-12.58"/><path class="cls-7" d="M473.26,415.55a22.64,22.64,0,0,0-23-12.58"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/icons/js/iconfont.js b/src/assets/icons/js/iconfont.js
deleted file mode 100644
index dead26b..0000000
--- a/src/assets/icons/js/iconfont.js
+++ /dev/null
@@ -1 +0,0 @@
-window._iconfont_svg_string_3814468='<svg><symbol id="icon-time1" viewBox="0 0 1024 1024"><path d="M512 64C264.96 64 64 264.96 64 512s200.96 448 448 448 448-200.96 448-448S759.04 64 512 64zM512 895.712c-211.584 0-383.712-172.16-383.712-383.712C128.288 300.416 300.416 128.288 512 128.288c211.552 0 383.712 172.128 383.712 383.712C895.712 723.552 723.552 895.712 512 895.712z"  ></path><path d="M671.968 512 512 512 512 288.064c0-17.76-14.24-32.128-32-32.128s-32 14.4-32 32.128L448 544c0 17.76 14.272 32 32 32l191.968 0c17.76 0 32.128-14.24 32.128-32S689.728 512 671.968 512z"  ></path></symbol><symbol id="icon-select2" viewBox="0 0 1024 1024"><path d="M768 160 256 160C204.8 160 160 204.8 160 256l0 512c0 51.2 44.8 96 96 96l512 0c51.2 0 96-44.8 96-96L864 256C864 204.8 819.2 160 768 160zM800 768c0 19.2-12.8 32-32 32L256 800c-19.2 0-32-12.8-32-32L224 256c0-19.2 12.8-32 32-32l512 0c19.2 0 32 12.8 32 32L800 768z"  ></path><path d="M448 672c-6.4 0-19.2 0-25.6-6.4l-128-128c-12.8-12.8-12.8-32 0-44.8s32-12.8 44.8 0L448 595.2l230.4-230.4c12.8-12.8 32-12.8 44.8 0s12.8 32 0 44.8l-256 256C467.2 672 454.4 672 448 672z"  ></path></symbol><symbol id="icon-department" viewBox="0 0 1024 1024"><path d="M926.592 922.688l-157.312 0c-18.432 0-33.344-21.056-33.344-46.976L735.936 745.6c0-25.984 14.912-46.976 33.344-46.976l157.312 0c18.432 0 33.408 20.992 33.408 46.976l0 130.048C960 901.632 945.088 922.688 926.592 922.688zM773.312 513.152l-224 0L549.312 624 512 624 512 513.152 249.472 513.152C171.008 513.216 174.848 566.976 174.848 624L138.688 624 138.688 569.28c0-49.472 39.552-94.144 88.448-94.208L512 474.688 512 400l37.312 0 0 74.688 260.16 0c48.896 0.064 74.624 25.152 74.688 74.688L884.16 624 848 624C847.936 550.272 835.712 513.216 773.312 513.152zM653.504 325.312 406.528 325.312c-24.256 0-43.84-21.824-43.84-48.768L362.688 150.08c0-26.944 19.648-48.768 43.84-48.768l246.976 0c24.256 0 43.968 21.824 43.968 48.768l0 126.464C697.472 303.488 677.824 325.312 653.504 325.312zM288 745.6l0 130.048c0 25.92-14.976 46.976-33.344 46.976L97.344 922.624C78.912 922.688 64 901.632 64 875.712L64 745.6c0-25.984 14.912-46.976 33.344-46.976l157.312 0C273.024 698.688 288 719.68 288 745.6zM433.344 698.688l157.312 0c18.432 0 33.344 20.992 33.344 46.976l0 130.048c0 25.92-14.912 46.976-33.344 46.976L433.344 922.688c-18.432 0-33.344-21.056-33.344-46.976L400 745.6C400 719.68 414.912 698.688 433.344 698.688z"  ></path></symbol><symbol id="icon-tipsdepartmentdown" viewBox="0 0 1025 1024"><path d="M211.451008 532.32448 509.990336 532.32448 509.990336 658.368 552.443008 658.368 552.443008 532.31936 807.169408 532.31936C878.11072 532.31936 892.079872 574.52288 892.079872 658.368L933.177408 658.368 933.177408 573.45792C938.679552 532.06464 909.579584 494.04416 868.18656 488.54208 861.563648 487.6608 854.849088 487.66592 848.226176 488.5472L552.40224 488.5472 552.40224 403.64224 509.949568 403.64224 509.949568 488.55232 185.978368 489.06176C129.103104 491.91488 84.673728 539.23776 85.40224 596.17408L85.40224 658.368 126.540544 658.368C126.540544 593.49952 122.296768 532.36544 211.451008 532.32448L211.451008 532.32448ZM390.014208 318.73152 670.890816 318.73152C699.960192 317.13152 722.284352 292.36224 720.85792 263.28256L720.85792 119.44896C722.279296 90.36928 699.955072 65.6 670.890816 64L390.014208 64C360.970304 65.61984 338.681728 90.38976 340.128576 119.44896L340.128576 263.28768C338.681728 292.34176 360.965248 317.11168 390.014208 318.73152L390.014208 318.73152ZM217.263872 723.2 38.405248 723.2C13.605056 728.1312-3.033664 751.56608 0.491712 776.60608L0.491712 924.5152C-3.013312 949.55008 13.615232 972.9696 38.405248 977.92128L217.263872 977.92128C242.058944 972.9696 258.697664 949.5552 255.218112 924.5152L255.218112 776.60608C258.723136 751.56096 242.06912 728.1312 217.263872 723.2L217.263872 723.2ZM601.314624 723.2 422.410112 723.2C397.594688 728.11136 380.950848 751.56096 384.49664 776.60608L384.49664 924.5152C380.991616 949.55008 397.62016 972.9696 422.410112 977.92128L601.314624 977.92128C626.104576 972.9696 642.728064 949.55008 639.228096 924.5152L639.228096 776.60608C642.748416 751.56608 626.114816 728.1312 601.314624 723.2L601.314624 723.2ZM1023.218112 776.60608C1026.743552 751.55584 1010.084416 728.11136 985.263872 723.2L806.405248 723.2C781.605056 728.1312 764.966336 751.56608 768.491712 776.60608L768.491712 924.5152C764.986688 949.55008 781.615232 972.9696 806.405248 977.92128L985.263872 977.92128C1010.06912 972.99008 1026.71808 949.56032 1023.218112 924.5152L1023.218112 776.60608 1023.218112 776.60608ZM959.785728 813.93792C961.55072 801.39648 953.210368 789.65888 940.783936 787.2L851.238144 787.2C838.821952 789.66912 830.491712 801.4016 832.256768 813.93792L832.256768 887.98848C830.501952 900.52224 838.827008 912.24704 851.238144 914.7264L940.783936 914.7264C953.202688 912.25728 961.537984 900.52736 959.785728 887.98848L959.785728 813.93792 959.785728 813.93792ZM575.785728 813.93792C577.55072 801.39648 569.210368 789.65888 556.783936 787.2L467.238144 787.2C454.821952 789.66912 446.491712 801.4016 448.256768 813.93792L448.256768 887.98848C446.501952 900.52224 454.827008 912.24704 467.238144 914.7264L556.783936 914.7264C569.202688 912.25728 577.537984 900.52736 575.785728 887.98848L575.785728 813.93792 575.785728 813.93792ZM191.785728 813.93792C193.55072 801.39648 185.210368 789.65888 172.783936 787.2L83.238144 787.2C70.821952 789.66912 62.491712 801.4016 64.256768 813.93792L64.256768 887.98848C62.501952 900.52224 70.827008 912.24704 83.238144 914.7264L172.783936 914.7264C185.202688 912.25728 193.537984 900.52736 191.785728 887.98848L191.785728 813.93792 191.785728 813.93792Z" fill="#333" ></path></symbol><symbol id="icon-input1" viewBox="0 0 1024 1024"><path d="M118.784 727.04h778.24V296.96h-778.24v430.08zM77.824 256h860.16v512H77.824V256zM194.56 409.6v204.8c0 12.288 8.192 20.48 20.48 20.48s20.48-8.192 20.48-20.48V409.6c0-12.288-8.192-20.48-20.48-20.48s-20.48 8.192-20.48 20.48z"  ></path></symbol><symbol id="icon-calendar" viewBox="0 0 1024 1024"><path d="M853.333333 149.333333h-138.666666V106.666667c0-17.066667-14.933333-32-32-32s-32 14.933333-32 32v42.666666h-277.333334V106.666667c0-17.066667-14.933333-32-32-32s-32 14.933333-32 32v42.666666H170.666667c-40.533333 0-74.666667 34.133333-74.666667 74.666667v618.666667C96 883.2 130.133333 917.333333 170.666667 917.333333h682.666666c40.533333 0 74.666667-34.133333 74.666667-74.666666v-618.666667C928 183.466667 893.866667 149.333333 853.333333 149.333333zM170.666667 213.333333h138.666666v64c0 17.066667 14.933333 32 32 32s32-14.933333 32-32v-64h277.333334v64c0 17.066667 14.933333 32 32 32s32-14.933333 32-32v-64H853.333333c6.4 0 10.666667 4.266667 10.666667 10.666667v194.133333c-4.266667-2.133333-6.4-2.133333-10.666667-2.133333H170.666667c-4.266667 0-6.4 0-10.666667 2.133333v-194.133333c0-6.4 4.266667-10.666667 10.666667-10.666667z m682.666666 640H170.666667c-6.4 0-10.666667-4.266667-10.666667-10.666666V477.866667c4.266667 2.133333 6.4 2.133333 10.666667 2.133333h682.666666c4.266667 0 6.4 0 10.666667-2.133333v364.8c0 6.4-4.266667 10.666667-10.666667 10.666666z"  ></path><path d="M384 608h-85.333333c-17.066667 0-32 14.933333-32 32s14.933333 32 32 32h85.333333c17.066667 0 32-14.933333 32-32s-14.933333-32-32-32zM725.333333 608h-192c-17.066667 0-32 14.933333-32 32s14.933333 32 32 32h192c17.066667 0 32-14.933333 32-32s-14.933333-32-32-32z"  ></path></symbol><symbol id="icon-email1" viewBox="0 0 1024 1024"><path d="M874.666667 181.333333H149.333333c-40.533333 0-74.666667 34.133333-74.666666 74.666667v512c0 40.533333 34.133333 74.666667 74.666666 74.666667h725.333334c40.533333 0 74.666667-34.133333 74.666666-74.666667V256c0-40.533333-34.133333-74.666667-74.666666-74.666667z m-725.333334 64h725.333334c6.4 0 10.666667 4.266667 10.666666 10.666667v25.6L512 516.266667l-373.333333-234.666667V256c0-6.4 4.266667-10.666667 10.666666-10.666667z m725.333334 533.333334H149.333333c-6.4 0-10.666667-4.266667-10.666666-10.666667V356.266667l356.266666 224c4.266667 4.266667 10.666667 4.266667 17.066667 4.266666s12.8-2.133333 17.066667-4.266666l356.266666-224V768c0 6.4-4.266667 10.666667-10.666666 10.666667z"  ></path></symbol><symbol id="icon-user1" viewBox="0 0 1024 1024"><path d="M512 74.666667C270.933333 74.666667 74.666667 270.933333 74.666667 512S270.933333 949.333333 512 949.333333 949.333333 753.066667 949.333333 512 753.066667 74.666667 512 74.666667zM288 810.666667c0-123.733333 100.266667-224 224-224S736 686.933333 736 810.666667c-61.866667 46.933333-140.8 74.666667-224 74.666666s-162.133333-27.733333-224-74.666666z m128-384c0-53.333333 42.666667-96 96-96s96 42.666667 96 96-42.666667 96-96 96-96-42.666667-96-96z m377.6 328.533333c-19.2-96-85.333333-174.933333-174.933333-211.2 32-29.866667 51.2-70.4 51.2-117.333333 0-87.466667-72.533333-160-160-160s-160 72.533333-160 160c0 46.933333 19.2 87.466667 51.2 117.333333-89.6 36.266667-155.733333 115.2-174.933334 211.2-55.466667-66.133333-91.733333-149.333333-91.733333-243.2 0-204.8 168.533333-373.333333 373.333333-373.333333S885.333333 307.2 885.333333 512c0 93.866667-34.133333 177.066667-91.733333 243.2z"  ></path></symbol><symbol id="icon-number1" viewBox="0 0 1024 1024"><path d="M279.273 791.273h512a46.545 46.545 0 0 1 0 93.09h-512a46.545 46.545 0 0 1 0-93.09z m33.838-617.984v478.347H193.722V395.171c0-37.004-0.884-59.299-2.653-66.746a24.948 24.948 0 0 0-14.615-16.99c-8.006-3.863-25.786-5.771-53.341-5.771H111.29v-55.855c57.717-12.38 101.562-37.888 131.491-76.52h70.284z m303.71 396.8v81.547H354.163v-68.235c77.778-127.256 124.044-206.01 138.706-236.218 14.662-30.255 22.016-53.854 22.016-70.75 0-13.032-2.234-22.714-6.656-29.137-4.422-6.377-11.171-9.588-20.247-9.588a22.249 22.249 0 0 0-20.201 10.612c-4.469 7.121-6.656 21.178-6.656 42.263v45.522H354.164V318.65c0-26.763 1.397-47.942 4.143-63.348 2.746-15.5 9.542-30.72 20.387-45.661 10.798-14.988 24.902-26.298 42.217-33.978 17.361-7.68 38.167-11.544 62.37-11.544 47.477 0 83.317 11.776 107.707 35.328 24.296 23.552 36.445 53.341 36.445 89.368 0 27.368-6.842 56.32-20.48 86.853-13.731 30.534-54.04 95.325-121.018 194.42H616.82z m270.615-189.394c18.152 6.098 31.65 16.105 40.494 29.976 8.844 13.917 13.312 46.452 13.312 97.652 0 38.028-4.329 67.49-13.033 88.53-8.657 20.945-23.598 36.91-44.87 47.848-21.27 10.938-48.593 16.384-81.873 16.384-37.795 0-67.49-6.33-89.088-19.084-21.55-12.66-35.747-28.253-42.542-46.638-6.796-18.432-10.194-50.362-10.194-95.884v-37.841h119.39v77.73c0 20.667 1.21 33.84 3.723 39.425 2.42 5.585 7.913 8.424 16.337 8.424 9.31 0 15.36-3.537 18.34-10.612 2.932-7.121 4.421-25.6 4.421-55.575v-33.047c0-18.34-2.048-31.744-6.19-40.216a30.72 30.72 0 0 0-18.34-16.71c-8.052-2.653-23.738-4.189-46.964-4.561V357.05c28.393 0 45.894-1.07 52.597-3.258a22.947 22.947 0 0 0 14.475-14.15c2.933-7.307 4.422-18.711 4.422-34.257V278.76c0-16.757-1.722-27.741-5.12-33.048-3.49-5.352-8.844-8.005-16.151-8.005-8.285 0-13.964 2.792-16.99 8.378-3.025 5.632-4.56 17.64-4.56 35.933v39.284h-119.39V280.53c0-45.66 10.473-76.567 31.325-92.625 20.9-16.058 54.086-24.064 99.608-24.064 56.878 0 95.51 11.17 115.805 33.373 20.293 22.249 30.394 53.202 30.394 92.765 0 26.81-3.63 46.173-10.892 58.089-7.307 11.916-20.107 22.807-38.446 32.628z"  ></path></symbol><symbol id="icon-190tree" viewBox="0 0 1024 1024"><path d="M800 832c-41.6 0-76.8 25.6-89.6 64H288c-19.2 0-32-12.8-32-32V537.6c0 3.2 22.4 6.4 32 6.4h422.4c12.8 38.4 48 64 89.6 64 54.4 0 96-41.6 96-96s-41.6-96-96-96c-41.6 0-76.8 25.6-89.6 64H288c-19.2 0-32-12.8-32-32V185.6c32-12.8 64-48 64-89.6 0-54.4-41.6-96-96-96-51.2 0-96 41.6-96 96 0 41.6 32 76.8 64 89.6V864c0 54.4 44.8 96 96 96h422.4c12.8 38.4 48 64 89.6 64 54.4 0 96-41.6 96-96s-41.6-96-96-96z m0-384c35.2 0 64 28.8 64 64s-28.8 64-64 64-64-28.8-64-64 28.8-64 64-64zM160 96c0-35.2 28.8-64 64-64s64 28.8 64 64-28.8 64-64 64-64-28.8-64-64z m640 896c-35.2 0-64-28.8-64-64s28.8-64 64-64 64 28.8 64 64-28.8 64-64 64z"  ></path></symbol><symbol id="icon-dict-fill" viewBox="0 0 1024 1024"><path d="M764 888H200V324a4 4 0 0 0-4-4h-64a4 4 0 0 0-4 4v596a40 40 0 0 0 40 40h596a4 4 0 0 0 4-4v-64a4 4 0 0 0-4-4zM551.9 311.8h-57.5v327.1h56.8c83 0 120.4-60.6 120.4-172.6 0-99.9-40.2-154.5-119.7-154.5zM856 128H312a40 40 0 0 0-40 40v608a40 40 0 0 0 40 40h544a40 40 0 0 0 40-40V168a40 40 0 0 0-40-40zM552.8 694H430.2a4 4 0 0 1-4-4V260a4 4 0 0 1 4-4h128.5c116 0 183.1 74.2 183.1 208.9 0 144.8-63.5 229.1-189 229.1z"  ></path></symbol><symbol id="icon-user" viewBox="0 0 1024 1024"><path d="M648.6 538.9c63.2-46.6 104.2-121.6 104.2-206C752.8 191.8 638 77 496.9 77S241 191.8 241 332.9c0 84.4 41.1 159.4 104.2 206C200.4 598.7 98.3 741.4 98.3 907.5c0 22.1 17.9 40 40 40s40-17.9 40-40c0-175.8 143-318.7 318.7-318.7s318.7 143 318.7 318.7c0 22.1 17.9 40 40 40s40-17.9 40-40c-0.1-166.1-102.3-308.8-247.1-368.6z m-327.7-206c0-97.1 79-176 176-176s176 79 176 176-79 176-176 176-176-79-176-176z"  ></path></symbol><symbol id="icon-user-circle" viewBox="0 0 1024 1024"><path d="M509.44 1018.368c-141.312 0-277.504-59.904-372.736-164.352l-19.968-21.504 19.968-21.504c95.744-104.448 231.424-164.352 372.736-164.352 141.312 0 277.504 59.904 372.736 164.352l19.968 21.504-19.968 21.504c-95.232 104.448-231.424 164.352-372.736 164.352zM204.8 832.512c81.92 77.824 190.976 121.856 304.64 121.856 113.664 0 222.72-44.032 304.64-121.856-81.92-77.824-190.976-121.856-304.64-121.856-113.664 0-222.72 44.032-304.64 121.856zM509.952 600.576c-89.088 0-161.792-72.704-161.792-161.792 0-89.088 72.704-161.792 161.792-161.792s161.792 72.704 161.792 161.792c0 89.088-72.192 161.792-161.792 161.792z m0-259.584c-53.76 0-97.792 44.032-97.792 97.792s44.032 97.792 97.792 97.792 97.792-44.032 97.792-97.792-43.52-97.792-97.792-97.792z"  ></path><path d="M119.296 719.36c-33.792-63.488-51.2-134.144-51.2-206.848 0-243.712 198.144-441.344 441.344-441.344s441.344 198.144 441.344 441.344c0 72.192-17.92 143.36-51.2 206.336 16.384 15.36 31.744 31.744 46.08 49.152 45.568-77.312 69.12-165.376 69.12-255.488 0-279.04-226.816-505.856-505.856-505.856C230.4 7.168 4.096 233.984 4.096 512.512c0 90.112 24.064 178.688 69.632 255.488 13.824-16.896 29.184-33.28 45.568-48.64z"  ></path></symbol><symbol id="icon-dict" viewBox="0 0 1024 1024"><path d="M487.204 238.103h-81.567v340.516h81.567c59.425 0 102.943-13.871 130.303-41.101 26.721-27.868 40.083-70.88 40.083-129.158 0-59.678-13.362-103.329-40.083-129.923-27.359-27.104-70.877-40.336-130.303-40.336z"  ></path><path d="M778.859 61.224H245.306c-59.678 0-108.414 48.738-108.414 108.414v689.437c0 59.677 48.737 108.414 108.414 108.414h533.553c42.628 0 79.657-24.941 97.346-60.826H252.559c-22.269 0-40.591-18.197-40.591-40.59v-51.282c0-22.269 18.197-40.59 40.591-40.59h487.874c80.801 0 146.845-66.042 146.845-146.845V169.641c0-59.678-48.862-108.418-108.418-108.418zM677.696 581.291c-40.083 42.374-98.235 63.626-175.73 63.626H327.507v-473.11h174.458c77.494 0 135.647 21.25 175.73 63.625 38.048 39.703 57.518 97.346 57.518 172.931 0 74.95-19.468 132.59-57.516 172.93z"  ></path></symbol><symbol id="icon-btn" viewBox="0 0 1828 1024"><path d="M1322.88370217 78.26335901C1554.20991077 78.26335901 1745.77692672 273.44484711 1745.77692672 512s-191.56701595 433.73664099-426.50769668 433.73664099H509.62750045C274.68682069 945.73664099 83.11980375 750.55515289 83.11980375 512S274.68682069 78.26335901 509.62750045 78.26335901h813.25620172m0-72.28944H509.62750045C234.92762806 5.97391901 10.83036375 233.68565546 10.83036375 512s224.0972643 506.02608099 498.7971367 506.02608099h813.25620172C1593.96910242 1018.02608099 1818.0663677 790.31434454 1818.0663677 512S1593.96910242 5.97391901 1322.88370217 5.97391901z"  ></path><path d="M715.65240499 501.15658355c28.91577619-14.4578876 39.75919165-36.1447205 39.75919265-65.0604957-3.61447214-46.98813595-28.91577619-75.90391215-83.13285646-75.90391215H589.14588474c-21.68683191 0-32.53024835 10.84341645-32.53024835 32.53024835v249.39856834c0 21.68683191 10.84341645 32.53024835 32.53024835 32.53024836h90.36180075c65.0604957-3.61447214 97.59074405-36.1447205 101.20521619-97.59074505-3.61447214-43.3736638-25.30130405-68.67496785-65.06049669-75.90391215z m-93.9762719-86.7473276h32.53024835c21.68683191 0 36.1447205 10.84341645 36.1447195 32.53024835 0 21.68683191-14.4578876 32.53024835-36.1447195 36.14471951h-32.53024835v-68.67496786z m50.60260809 198.79596024h-50.60260809v-72.28944h46.98813595c28.91577619 0 43.3736638 10.84341645 46.98813595 36.14471951-3.61447214 21.68683191-18.07235974 32.53024835-43.37366381 36.14472049zM968.66544549 356.57770356H806.01420573c-14.4578876 0-25.30130405 10.84341645-25.30130405 28.91577619 0 21.68683191 10.84341645 32.53024835 25.30130405 32.53024835h46.98813596v224.09726429c0 21.68683191 10.84341645 32.53024835 32.53024735 32.53024836 21.68683191 0 32.53024835-10.84341645 32.53024835-32.53024836v-224.09726431h46.98813596c18.07235974 0 28.91577619-10.84341645 28.91577619-32.53024833 3.61447214-18.07235974-7.22894431-28.91577619-25.30130405-28.91577619zM1239.75084573 352.9632314c-21.68683191 0-32.53024835 14.4578876-32.53024733 36.1447205v166.2657119L1066.25618955 367.42112001c-7.22894431-10.84341645-14.4578876-14.4578876-28.91577622-14.45788861-21.68683191 0-32.53024835 14.4578876-32.53024734 36.1447205v253.01304049c0 21.68683191 10.84341645 32.53024835 32.53024734 32.53024836s32.53024835-10.84341645 32.53024835-32.53024836V475.8552795l137.34993672 184.33807265c7.22894431 7.22894431 14.4578876 10.84341645 28.91577617 10.84341643 21.68683191 0 32.53024835-10.84341645 32.53024736-32.53024833v-253.0130405c0-18.07235974-10.84341645-32.53024835-28.9157762-32.53024835z"  ></path></symbol><symbol id="icon-btn2" viewBox="0 0 1024 1024"><path d="M839.68 220.72888889h-72.81777778a36.40888889 36.40888889 0 0 0-36.22684444-36.40888889H111.32017778C91.47733333 184.32 75.09333333 200.74040889 75.09333333 220.98375111v472.80583111A36.40888889 36.40888889 0 0 0 111.32017778 730.45333333H111.50222222v72.81777778H75.09333333c-40.19541333 0-72.81777778-32.40391111-72.81777778-72.70855111V184.21077333C2.27555555 144.05176889 35.11637333 111.50222222 75.09333333 111.50222222h691.76888889c40.19541333 0 72.81777778 32.40391111 72.81777778 72.70855111V220.72888889zM147.91111111 329.77351111A72.81777778 72.81777778 0 0 1 220.91093333 257.13777778h727.81368889A72.81777778 72.81777778 0 0 1 1021.72444445 329.77351111v510.08853334A72.81777778 72.81777778 0 0 1 948.72462222 912.49777778H220.91093333A72.81777778 72.81777778 0 0 1 147.91111111 839.86204445v-510.08853334z m72.81777778 36.84579556v436.39694222A36.37248 36.37248 0 0 0 256.84650667 839.68h655.94254222c19.55157333 0 36.11761778-16.384 36.11761778-36.66375111V366.61930667A36.37248 36.37248 0 0 0 912.78904889 329.95555555H256.84650667C237.29493333 329.95555555 220.72888889 346.33955555 220.72888889 366.61930667z m249.43729778 271.24622222c0 13.83537778-2.18453333 26.36003555-6.5536 37.50115556-4.33265778 11.14112-10.37653333 20.53461333-18.05880889 28.21688888-7.68227555 7.64586667-16.60245333 13.54410667-26.76053333 17.62190222a86.54392889 86.54392889 0 0 1-32.51313778 6.08028445H293.54666667V439.18222222h82.35690666c9.75758222 0 18.93262222 1.82044445 27.52512 5.42492445 8.59249778 3.64088889 16.20195555 8.66531555 22.90119112 15.10968888 6.66282667 6.48078222 11.90570667 14.45432889 15.76504888 23.9570489a83.99530667 83.99530667 0 0 1 4.40547556 45.36547555c-0.87381333 4.84238222-2.18453333 9.42990222-3.82293334 13.79896889-1.67480889 4.36906667-3.78652445 8.33763555-6.37155555 11.94211556a31.60291555 31.60291555 0 0 1-8.84736 8.59249777c5.13365333 1.82044445 10.26730667 5.09724445 15.40096 9.93962667 5.09724445 4.80597333 9.75758222 10.55857778 13.83537778 17.14858666a91.85962667 91.85962667 0 0 1 13.47128889 47.40437334z m-57.70808889 0c0-12.63388445-3.71370667-22.02737778-11.17752889-28.21688889a38.19292445 38.19292445 0 0 0-25.01290667-9.24785778h-28.47175111v74.49258667h28.47175111c4.62392889 0 9.10222222-0.72817778 13.47128889-2.25735111a33.20490667 33.20490667 0 0 0 11.54161778-6.77205333 33.31413333 33.31413333 0 0 0 8.08277333-11.5052089c2.07530667-4.66033778 3.09475555-10.15808 3.09475556-16.49322666z m-18.85980445-117.85557334c0-10.55857778-2.76707555-18.05880889-8.26481778-22.5735111a28.69020445 28.69020445 0 0 0-18.67776-6.77205334h-18.85980444v58.25422222h18.85980444c6.91768889 0 13.14360889-2.18453333 18.67776-6.5536 5.49774222-4.36906667 8.26481778-11.79648 8.26481778-22.35505778z m189.47185778-24.83086222v232.10666667h-59.23726222v-232.54357333h-74.27413334V439.18222222h207.42144v55.99687111h-73.91004444zM830.75982222 730.45333333l-89.12896-163.18464v160.01706667H682.02951111V439.18222222h48.09614222l86.36188445 145.63555556v-145.63555556H876.08888889v291.27111111h-45.32906667z"  ></path></symbol><symbol id="icon-btn3" viewBox="0 0 1536 1024"><path d="M452.488242 541.251023h-100.802821v113.623092h99.272956c22.504318 0 40.41904-3.564586 53.224012-10.709057 16.369558-9.179191 24.569636-23.559925 24.569635-43.998924 0-20.989751-6.119461-35.814145-17.914722-45.054532q-18.419577-13.829982-58.34906-13.860579zM497.527475 479.367974c10.2195-8.735531 15.880001-22.550214 15.880001-41.489945 0-17.379269-5.660501-30.184241-15.880001-37.818269-11.24451-8.184779-28.654376-12.315415-53.224012-12.315415h-92.618042v104.367407h91.593032c25.594645 0 43.494069-4.589596 54.249022-12.743778z"  ></path><path d="M1407.980877 0H128.003825A128.003825 128.003825 0 0 0 0 128.003825v767.99235a128.003825 128.003825 0 0 0 128.003825 128.003825h1279.977052a128.003825 128.003825 0 0 0 128.003824-128.003825v-767.99235A128.003825 128.003825 0 0 0 1407.980877 0zM550.751487 682.503481c-21.509905 14.30424-52.199002 21.418113-91.103476 21.418113H291.806496V338.620372h167.351959c36.334299 0 64.958078 8.689635 85.458272 26.130099 18.909134 16.369558 28.623779 38.36902 28.623779 65.998386 0 20.439-5.094451 37.879463-14.809096 52.183703-9.745242 13.325126-23.559925 22.947979-41.964203 30.19954 24.034183 4.589596 41.964204 14.30424 54.249021 29.17453 11.749365 14.319539 17.899423 34.253683 17.899423 58.823319 0 36.869752-12.804972 63.994263-37.864164 81.373532zM916.297487 389.809663h-119.742552v314.188425h-59.878926V389.809663h-119.711955v-51.189291h299.333433z m346.59097 314.188425h-58.333761L1021.949981 436.868318h-2.05002v267.12977h-59.94012V338.620372h59.878926L1200.485254 602.262049h1.988825V338.620372h60.368482z"  ></path></symbol><symbol id="icon-popup2" viewBox="0 0 1024 1024"><path d="M989 614.5c-19.3 0-35 15.7-35 35v232.9c0 39.5-32.1 71.6-71.6 71.6H141.6c-6.7 0-13.2-1-19.4-2.7L486 587.5V773c0 19.3 15.7 35 35 35s35-15.7 35-35V501.3c0-0.3 0-0.5-0.1-0.8 0-0.3 0-0.6-0.1-0.9 0-0.3-0.1-0.7-0.1-1 0-0.2-0.1-0.4-0.1-0.7-0.1-0.4-0.1-0.7-0.2-1.1 0-0.2-0.1-0.4-0.1-0.6-0.1-0.4-0.2-0.7-0.2-1.1 0-0.2-0.1-0.4-0.1-0.6-0.1-0.4-0.2-0.7-0.3-1.1-0.1-0.2-0.1-0.4-0.2-0.6-0.1-0.3-0.2-0.6-0.3-1-0.1-0.2-0.1-0.4-0.2-0.7l-0.3-0.9c-0.1-0.3-0.2-0.5-0.3-0.8-0.1-0.3-0.2-0.5-0.3-0.7-0.1-0.3-0.3-0.6-0.4-0.8l-0.3-0.6c-0.2-0.3-0.3-0.6-0.5-0.9-0.1-0.2-0.2-0.4-0.3-0.5-0.2-0.3-0.4-0.6-0.6-1-0.1-0.2-0.2-0.3-0.3-0.5-0.2-0.3-0.4-0.6-0.6-1-0.1-0.2-0.2-0.3-0.3-0.5l-0.6-0.9c-0.1-0.2-0.3-0.3-0.4-0.5-0.2-0.3-0.4-0.5-0.6-0.8-0.2-0.2-0.4-0.4-0.6-0.7-0.2-0.2-0.4-0.4-0.5-0.6-0.4-0.4-0.8-0.8-1.2-1.3-0.4-0.4-0.8-0.8-1.3-1.2-0.2-0.2-0.4-0.4-0.6-0.5-0.2-0.2-0.5-0.4-0.7-0.6-0.3-0.2-0.5-0.4-0.8-0.6-0.2-0.1-0.4-0.3-0.5-0.4l-0.9-0.6c-0.2-0.1-0.3-0.2-0.5-0.3l-0.9-0.6c-0.2-0.1-0.3-0.2-0.5-0.3-0.3-0.2-0.6-0.4-1-0.5-0.2-0.1-0.4-0.2-0.5-0.3-0.3-0.2-0.6-0.3-0.9-0.5l-0.6-0.3c-0.3-0.1-0.6-0.3-0.8-0.4-0.2-0.1-0.5-0.2-0.7-0.3-0.3-0.1-0.5-0.2-0.8-0.3l-0.9-0.3c-0.2-0.1-0.5-0.2-0.7-0.2-0.3-0.1-0.6-0.2-1-0.3-0.2-0.1-0.4-0.1-0.6-0.2-0.3-0.1-0.7-0.2-1.1-0.3-0.2 0-0.4-0.1-0.6-0.1-0.4-0.1-0.7-0.2-1.1-0.2-0.2 0-0.4-0.1-0.6-0.1-0.4-0.1-0.7-0.1-1.1-0.2-0.2 0-0.5-0.1-0.7-0.1-0.3 0-0.7-0.1-1-0.1-0.3 0-0.6 0-0.9-0.1-0.3 0-0.5 0-0.8-0.1H251c-19.3 0-35 15.7-35 35s15.7 35 35 35h185.5L72.7 901.8c-1.7-6.2-2.7-12.7-2.7-19.4V141.6c0-39.5 32.1-71.6 71.6-71.6h232.9c19.3 0 35-15.7 35-35s-15.7-35-35-35H141.6C63.5 0 0 63.5 0 141.6v740.8C0 960.5 63.5 1024 141.6 1024h740.8c78.1 0 141.6-63.5 141.6-141.6V649.5c0-19.3-15.7-35-35-35z"  ></path><path d="M899.7 0H748.3C679.7 0 624 55.7 624 124.3v151.4c0 68.7 55.7 124.3 124.3 124.3h151.4c68.7 0 124.3-55.7 124.3-124.3V124.3C1024 55.7 968.3 0 899.7 0zM954 275.7c0 30-24.4 54.3-54.3 54.3H748.3c-30 0-54.3-24.4-54.3-54.3V124.3c0-30 24.4-54.3 54.3-54.3h151.4c30 0 54.3 24.4 54.3 54.3v151.4z"  ></path></symbol><symbol id="icon-popup" viewBox="0 0 1024 1024"><path d="M819.2 102.4 408.5248 102.4C352.256 102.4 307.2 147.456 307.2 203.776L307.2 614.4c0 56.32 46.08 102.4 102.4 102.4l409.6 0c56.32 0 102.4-46.08 102.4-102.4L921.6 204.8C921.6 148.48 875.52 102.4 819.2 102.4zM819.2 614.4 409.6 614.4 409.6 204.8l409.6 0L819.2 614.4zM204.8 512 102.4 512l0 307.2c0 56.32 46.08 102.4 102.4 102.4l307.2 0 0-102.4L204.8 819.2 204.8 512z"  ></path></symbol><symbol id="icon-depart2" viewBox="0 0 1024 1024"><path d="M411.20278261 292.83431884H612.91594203c12.10991304-1.42469565 21.37043478-11.63501449 21.37043478-24.10110145V73.90608696c0-13.41588406-10.92266666-24.33855073-24.33855072-24.33855073h-195.89565218c-13.41588406 0-24.33855073 10.92266666-24.33855072 24.33855073v194.70840579c0 12.46608696 9.37924638 22.67640579 21.48915942 24.21982609zM438.39072464 98.24463769h147.21855072v146.03130434H438.39072464v-146.03130434zM171.26028986 536.33855073h316.40115941V681.77623188h48.67710146V536.33855073H852.73971014V681.77623188h48.67710145V513.89959421c0-14.4844058-11.75373913-26.23814493-26.23814493-26.23814494H536.33855073V342.10504348h-48.67710146v145.67513043H150.83965217c-15.55292754 0-28.25646377 12.70353623-28.25646376 28.25646378V681.77623188h48.67710145V536.33855073zM609.3542029 731.04695652H414.6457971c-13.41588406 0-24.33855073 10.92266666-24.33855072 24.33855073v194.70840579c0 13.41588406 10.92266666 24.33855073 24.33855072 24.33855073h194.7084058c13.41588406 0 24.33855073-10.92266666 24.33855072-24.33855073V755.38550725c0-13.41588406-10.92266666-24.33855073-24.33855072-24.33855073z m-24.33855073 194.70840579h-146.03130434v-146.03130434h146.03130434v146.03130434zM244.27594203 731.04695652h-194.7084058c-13.41588406 0-24.33855073 10.92266666-24.33855072 24.33855073v194.70840579c0 13.41588406 10.92266666 24.33855073 24.33855072 24.33855073h194.7084058c13.41588406 0 24.33855073-10.92266666 24.33855072-24.33855073V755.38550725c0-13.41588406-10.92266666-24.33855073-24.33855072-24.33855073z m-24.33855072 194.70840579H73.90608696v-146.03130434h146.03130435v146.03130434zM974.43246377 731.04695652h-194.7084058c-13.41588406 0-24.33855073 10.92266666-24.33855072 24.33855073v194.70840579c0 13.41588406 10.92266666 24.33855073 24.33855072 24.33855073h194.7084058c13.41588406 0 24.33855073-10.92266666 24.33855072-24.33855073V755.38550725c0-14.60313044-9.73542029-24.33855073-24.33855072-24.33855073z m-24.33855073 194.70840579H804.06260869v-146.03130434h146.03130435v146.03130434z"  ></path></symbol><symbol id="icon-card" viewBox="0 0 1024 1024"><path d="M96.8 466.9h414.8V98.2H96.8v368.7z m46.1-322.6h322.6v276.5H142.9V144.3z m0 0M557.7 927.8h368.7V651.3H557.7v276.5z m46.1-230.5h276.5v184.3H603.8V697.3z m0 0M557.7 98.2v506.9h368.7V98.2H557.7z m322.6 460.9H603.8V144.3h276.5v414.8z m0 0M96.8 927.8h414.8V513H96.8v414.8z m46.1-368.7h322.6v322.6H142.9V559.1z m0 0"  ></path></symbol><symbol id="icon-tab" viewBox="0 0 1024 1024"><path d="M960 960H64V64h480v224h416v672zM128 896h768V352H480V128H128v768z"  ></path><path d="M608 128h288v96h-288z"  ></path></symbol><symbol id="icon-tab1" viewBox="0 0 1024 1024"><path d="M343.25 315.125V118.25H62v787.5h900V315.125H343.25z m562.5 534.375H118.25V174.5h168.75v196.875h618.75v478.125z"  ></path><path d="M652.625 118.25h-253.125v140.625h253.125V118.25z m-56.25 84.375h-140.625V174.5h140.625v28.125zM708.875 118.25v140.625h253.125V118.25h-253.125z m196.875 84.375h-140.625V174.5h140.625v28.125z"  ></path></symbol><symbol id="icon-tab2" viewBox="0 0 1024 1024"><path d="M615.3846875 68.9234375H408.6153125c-12.9234375 0-22.153125 11.0765625-22.153125 24v46.153125c0 12.9234375 11.0765625 24 22.153125 24h206.769375c12.9234375 0 22.153125-11.0765625 22.153125-24v-46.153125c1.846875-12.9234375-9.2296875-24-22.153125-24z m315.691875 0H724.308125c-12.9234375 0-24 11.0765625-24 24v46.153125c0 12.9234375 11.0765625 24 24 24h206.7684375c12.9234375-1.8459375 24-11.0765625 24-24v-46.153125c0-12.9234375-11.0765625-24-24-24z m0 155.0765625H345.846875c-12.9225 0-24-11.0765625-24-24V92.9234375c0-12.9234375-11.0765625-24-24-24H92.9234375c-12.9234375 0-24 11.0765625-24 24v840c0 11.0765625 11.0765625 22.153125 24 22.153125h838.153125c12.9234375 0 24-11.0765625 24-24V248c0-12.9234375-11.0765625-24-24-24z"  ></path></symbol><symbol id="icon-text" viewBox="0 0 1024 1024"><path d="M962.9656745 932.80074644c-4.52473921-61.83810252-6.03298562-125.18445145-6.03298561-187.02255398 0-31.67317446 0-61.83810252 1.50824638-93.51127698 0-28.65668166 3.01649281-57.31336332-7.54123201-84.46179856-24.13194244-61.83810252-105.57724821-73.90407375-164.39885791-73.90407375-30.16492806 0-60.32985613 4.52473921-90.49478419 12.06597121-21.11544964 6.03298562-42.2308993 13.57421762-60.3298561 22.62369605l19.60720322 48.26388489c4.52473921 9.04947843 6.03298562 19.60720323 7.54123203 28.65668166 39.21440646-18.09895683 78.42881296-28.65668166 117.64321942-28.65668166 61.83810252 0 92.00303057 24.13194244 92.00303057 72.39582735v22.62369604c-9.04947843 0-24.13194244-1.50824641-43.73914568-1.50824639-78.42881296 0-137.25042267 12.06597121-179.48132195 34.68966726-40.72265287 24.13194244-61.83810252 64.85459532-61.83810253 123.67620504 0 43.73914569 13.57421762 78.42881296 40.72265288 102.5607554 27.14843525 24.13194244 61.83810252 36.19791367 102.56075542 36.19791368 36.19791367 0 66.36284173-4.52473921 88.98653777-15.08246403s42.2308993-25.64018885 57.3133633-46.75563849h3.01649283c1.50824641 10.55772482 3.01649281 27.14843525 7.54123202 51.28037771 0 1.50824641 67.87108813 0 75.41232014 0 1.50824641-10.55772482 0-16.59071043 0-24.13194245zM873.97913671 780.46785973c0 10.55772482-1.50824641 21.11544964-6.03298561 31.67317447-3.01649281 7.54123201-6.03298562 15.08246403-12.06597122 22.62369604-18.09895683 25.64018885-49.77213131 39.21440646-79.93705936 45.2473921-19.60720323 3.01649281-37.70616007 1.50824641-57.3133633-1.50824641-15.08246403-3.01649281-30.16492806-10.55772482-37.70616008-24.13194245-13.57421762-21.11544964-10.55772482-54.29687052 4.5247392-73.90407375 9.04947843-12.06597121 22.62369604-19.60720323 36.19791368-24.13194245 37.70616007-12.06597121 81.44530576-12.06597121 119.15146583-12.06597121l33.18142086 1.50824639v34.68966727zM585.90407375 607.01952339L371.73308452 76.11678954c-3.01649281-10.55772482-12.06597121-16.59071043-22.62369604-16.59071043h-67.87108814c-10.55772482 0-21.11544964 7.54123201-24.13194244 16.59071043l-196.0720324 530.90273385c-4.52473921 10.55772482 3.01649281 22.62369604 13.57421763 22.62369604h75.41232016c10.55772482 0 21.11544964-9.04947843 24.13194245-19.60720324l49.77213129-138.75866906h193.05553958l55.80511693 138.75866906c3.01649281 10.55772482 13.57421762 19.60720323 24.13194243 19.60720324h73.90407375c12.06597121 0 21.11544964-12.06597121 15.08246403-22.62369604zM263.13934351 367.20834531l55.80511691-144.79165468 61.83810251 144.79165468h-117.64321942z"  ></path></symbol><symbol id="icon-divider" viewBox="0 0 1024 1024"><path d="M129.70666667 129.70666667h764.58666666a54.61333333 54.61333333 0 0 1 0 109.22666666H129.70666667a54.61333333 54.61333333 0 1 1 0-109.22666666z m0 655.36h764.58666666a54.61333333 54.61333333 0 0 1 0 109.22666666H129.70666667a54.61333333 54.61333333 0 0 1 0-109.22666666z m0-327.68h140.41088a54.61333333 54.61333333 0 1 1 0 109.22666666H129.70666667a54.61333333 54.61333333 0 0 1 0-109.22666666z m312.06058666 0h140.46549334a54.61333333 54.61333333 0 0 1 0 109.22666666H441.76725333a54.61333333 54.61333333 0 0 1 0-109.22666666z m312.1152 0H894.29333333a54.61333333 54.61333333 0 0 1 0 109.22666666h-140.41088a54.61333333 54.61333333 0 0 1 0-109.22666666z"  ></path></symbol><symbol id="icon-markdown" viewBox="0 0 1024 1024"><path d="M92 192C42.24 192 0 232.128 0 282.016v459.968C0 791.904 42.24 832 92 832h840C981.76 832 1024 791.872 1024 741.984V282.016C1024 232.16 981.76 192 932 192z m0 64h840c16.512 0 28 12.256 28 26.016v459.968c0 13.76-11.52 26.016-28 26.016H92C75.488 768 64 755.744 64 741.984V282.016c0-13.76 11.52-25.984 28-25.984zM160 352v320h96v-212.992l96 127.008 96-127.04V672h96V352h-96l-96 128-96-128z m544 0v160h-96l144 160 144-160h-96v-160z"  ></path></symbol><symbol id="icon-tree" viewBox="0 0 1024 1024"><path d="M251.255027 267.144745a89.048248 89.048248 0 1 0 0-178.096497 89.048248 89.048248 0 0 0 0 178.096497z m0 89.048248A178.096497 178.096497 0 1 1 251.255027 0.03657a178.096497 178.096497 0 0 1 0 356.192993z"  ></path><path d="M206.712617 267.144745h89.048249v44.542409a89.048248 89.048248 0 0 0 89.048248 89.048248h267.108175v89.011678h-267.108175a177.255384 177.255384 0 0 1-89.084818-23.807149l0.03657 246.409485a89.048248 89.048248 0 0 0 89.048248 89.048248h267.108175v89.048249h-267.108175a178.096497 178.096497 0 0 1-178.096497-178.096497V267.144745z"  ></path><path d="M785.471376 934.951752a89.048248 89.048248 0 1 0 0-178.096497 89.048248 89.048248 0 0 0 0 178.096497z m0 89.048248a178.096497 178.096497 0 1 1 0-356.192993 178.096497 178.096497 0 0 1 0 356.192993zM785.471376 534.28949a89.048248 89.048248 0 1 0 0-178.096497 89.048248 89.048248 0 0 0 0 178.096497z m0 89.011678a178.096497 178.096497 0 1 1 0-356.156423 178.096497 178.096497 0 0 1 0 356.192993z"  ></path></symbol><symbol id="icon-map" viewBox="0 0 1024 1024"><path d="M649.6 960c-12.8 0-25.6-9.6-28.8-22.4-6.4-16 3.2-35.2 19.2-41.6l256-86.4V428.8l-115.2 38.4c-16 6.4-35.2-3.2-41.6-19.2-6.4-16 3.2-35.2 19.2-41.6l160-51.2c9.6-6.4 19.2-3.2 28.8 3.2 6.4 6.4 12.8 16 12.8 25.6v448c0 12.8-9.6 25.6-22.4 28.8l-278.4 96c-3.2 3.2-6.4 3.2-9.6 3.2z"  ></path><path d="M649.6 960c-3.2 0-6.4 0-9.6-3.2l-278.4-96c-16-6.4-25.6-22.4-19.2-41.6 6.4-16 22.4-25.6 41.6-19.2l278.4 96c16 6.4 25.6 22.4 19.2 41.6-6.4 12.8-19.2 22.4-32 22.4z"  ></path><path d="M96 960c-6.4 0-12.8-3.2-19.2-6.4-9.6-6.4-12.8-16-12.8-25.6V480c0-12.8 9.6-25.6 22.4-28.8l73.6-28.8c16-6.4 35.2 3.2 41.6 19.2s-3.2 35.2-19.2 41.6l-54.4 19.2v380.8l233.6-80c16-6.4 35.2 3.2 41.6 19.2 6.4 16-3.2 35.2-19.2 41.6l-278.4 96H96z"  ></path><path d="M480 416c-54.4 0-96-41.6-96-96s41.6-96 96-96 96 41.6 96 96-41.6 96-96 96z m0-128c-19.2 0-32 12.8-32 32s12.8 32 32 32 32-12.8 32-32-12.8-32-32-32z"  ></path><path d="M480 688l-22.4-25.6C435.2 640 256 435.2 256 320c0-124.8 99.2-224 224-224s224 99.2 224 224c0 115.2-179.2 320-201.6 342.4l-22.4 25.6zM480 160c-89.6 0-160 70.4-160 160 0 60.8 89.6 188.8 160 272 70.4-83.2 160-211.2 160-272 0-89.6-70.4-160-160-160z"  ></path></symbol><symbol id="icon-jm-print" viewBox="0 0 1024 1024"><path d="M362.666667 853.333333l298.666667 0c12.8 0 21.333333-8.533333 21.333333-21.333333 0-12.8-8.533333-21.333333-21.333333-21.333333L362.666667 810.666667c-12.8 0-21.333333 8.533333-21.333333 21.333333C341.333333 844.8 349.866667 853.333333 362.666667 853.333333zM362.666667 768l213.333333 0c12.8 0 21.333333-8.533333 21.333333-21.333333 0-12.8-8.533333-21.333333-21.333333-21.333333L362.666667 725.333333c-12.8 0-21.333333 8.533333-21.333333 21.333333C341.333333 759.466667 349.866667 768 362.666667 768zM853.333333 298.666667l-42.666667 0L810.666667 85.333333c0-23.466667-19.2-42.666667-42.666667-42.666667L256 42.666667c-23.466667 0-42.666667 19.2-42.666667 42.666667l0 213.333333L170.666667 298.666667c-70.4 0-128 57.6-128 128l0 341.333333c0 70.4 57.6 128 128 128l42.666667 0 0 42.666667c0 23.466667 19.2 42.666667 42.666667 42.666667l512 0c23.466667 0 42.666667-19.2 42.666667-42.666667l0-42.666667 42.666667 0c70.4 0 128-57.6 128-128L981.333333 426.666667C981.333333 356.266667 923.733333 298.666667 853.333333 298.666667zM256 85.333333l512 0 0 213.333333L256 298.666667 256 85.333333zM768 896l0 42.666667L256 938.666667l0-42.666667L256 682.666667l512 0L768 896zM938.666667 768c0 46.933333-38.4 85.333333-85.333333 85.333333l-42.666667 0 0-170.666667c0-23.466667-19.2-42.666667-42.666667-42.666667L256 640c-23.466667 0-42.666667 19.2-42.666667 42.666667l0 170.666667L170.666667 853.333333c-46.933333 0-85.333333-38.4-85.333333-85.333333L85.333333 426.666667c0-46.933333 38.4-85.333333 85.333333-85.333333l682.666667 0c46.933333 0 85.333333 38.4 85.333333 85.333333L938.666667 768zM810.666667 426.666667c-23.466667 0-42.666667 19.2-42.666667 42.666667s19.2 42.666667 42.666667 42.666667 42.666667-19.2 42.666667-42.666667S834.133333 426.666667 810.666667 426.666667zM682.666667 426.666667c-23.466667 0-42.666667 19.2-42.666667 42.666667s19.2 42.666667 42.666667 42.666667 42.666667-19.2 42.666667-42.666667S706.133333 426.666667 682.666667 426.666667z"  ></path></symbol><symbol id="icon-phone" viewBox="0 0 1024 1024"><path d="M402.176 208.981333c-28.245333-40.256-50.901333-53.653333-81.258667-47.957333-13.098667 2.453333-21.184 6.869333-36.053333 19.712l-11.328 9.941333-22.037333 18.282667-5.76 5.034667c-3.242667 2.986667-5.589333 5.44-8.597334 8.853333-56 63.402667-71.509333 162.56-38.912 255.786667 23.445333 66.986667 65.28 133.546667 124.928 200.064 63.253333 70.549333 116.416 114.944 177.557334 147.328 48 25.386667 84.757333 36.522667 127.466666 37.824 51.626667 1.6 97.088-10.069333 134.442667-34.261334a141.866667 141.866667 0 0 0 17.109333-13.290666l7.253334-6.613334 14.293333-13.312 4.842667-4.309333 9.557333-8.256c19.285333-17.194667 25.536-27.946667 26.816-44.949333 1.92-25.941333-9.813333-46.144-43.52-74.986667l-22.805333-19.093333-10.602667-9.258667-10.026667-8.597333c-32.576-26.901333-56.704-35.605333-87.68-30.933334-21.248 3.178667-33.493333 10.624-55.189333 33.344l-9.578667 10.197334c-15.786667 16.64-24.789333 22.976-38.101333 25.642666-19.477333 3.904-38.826667-6.165333-70.229333-31.68-40.469333-32.853333-74.048-70.592-102.912-115.456-20.010667-31.296-27.904-55.04-21.824-76.650666 2.474667-8.746667 8.448-14.912 21.056-24.661334l13.12-9.898666 2.112-1.642667 19.904-16.234667c17.6-14.72 24.746667-24.746667 28.501333-40.106666 7.786667-31.594667 0.426667-57.813333-28.373333-102.933334l-13.674667-21.205333-4.864-7.466667-5.632-8.256z"  ></path></symbol><symbol id="icon-mobile-phone" viewBox="0 0 1024 1024"><path d="M746.666667 949.333333H277.333333c-40.533333 0-74.666667-34.133333-74.666666-74.666666V149.333333c0-40.533333 34.133333-74.666667 74.666666-74.666666h469.333334c40.533333 0 74.666667 34.133333 74.666666 74.666666v725.333334c0 40.533333-34.133333 74.666667-74.666666 74.666666z m-469.333334-810.666666c-6.4 0-10.666667 4.266667-10.666666 10.666666v725.333334c0 6.4 4.266667 10.666667 10.666666 10.666666h469.333334c6.4 0 10.666667-4.266667 10.666666-10.666666V149.333333c0-6.4-4.266667-10.666667-10.666666-10.666666H277.333333z"  ></path><path d="M512 768m-42.666667 0a42.666667 42.666667 0 1 0 85.333334 0 42.666667 42.666667 0 1 0-85.333334 0Z"  ></path><path d="M597.333333 245.333333h-170.666666c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h170.666666c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z"  ></path></symbol><symbol id="icon-email-filled" viewBox="0 0 1024 1024"><path d="M512.01284373 570.17116374l443.25167787-369.30789546c-2.401856-0.4367008-4.55967361-1.43854507-7.05143893-1.43854507L75.81260588 199.42472214c-2.44038933 0-4.61105067 0.98899947-7.01290669 1.43854507L512.01284373 570.17116374zM987.87582293 239.08746348c0-4.16150507-1.1431296-8.01475093-2.401856-11.803776L671.2674816 489.17594241l314.6817184 314.7459392c0.80918187-3.1725056 1.92662293-6.22941333 1.92662293-9.65880213L987.87582293 239.08746348zM38.56456533 227.24515521c-1.22019413 3.81471361-2.44038933 7.61658239-2.44038933 11.84230827l0 555.16277226c0 3.46792107 1.1945056 6.51198508 1.97799893 9.68449067l314.78447147-314.77162773L38.56456533 227.24515521zM640.62133548 514.65873921l-115.94415787 96.5751776c-3.63489492 3.09544107-8.13034773 4.58536213-12.66433388 4.58536213-4.4954528 0-9.01659413-1.48992214-12.6900224-4.58536213l-115.8414048-96.52380053L66.21802454 831.96066454c3.12112852 0.8220256 6.21656959 1.9651552 9.59458134 1.9651552l872.41332051 0c3.44223253 0 6.5376736-1.13028587 9.72302294-1.9651552L640.62133548 514.65873921z"  ></path></symbol><symbol id="icon-email" viewBox="0 0 1024 1024"><path d="M981.48588027 334.89335562V815.7849815a82.85044939 82.85044939 0 0 1-82.85044939 82.85044938H125.36456912a82.85044939 82.85044939 0 0 1-82.85044939-82.85044938V334.89335562l82.85044939 70.22956468V815.7849815h773.27086176V405.1229203l82.85044939-70.22956468zM898.63543088 125.36456912a83.87227117 83.87227117 0 0 1 29.54999276 5.41289689 82.35334669 82.35334669 0 0 1 34.68672191 25.13130254 83.26470163 83.26470163 0 0 1 12.0961656 20.02219237c3.59018571 8.5059799 5.79953147 17.72999617 6.35186822 27.42349875L981.48588027 208.2150185v27.61681732L565.76994165 590.43175918a82.85044939 82.85044939 0 0 1-103.42497721 3.2864003l-4.11490609-3.31401798L42.51411973 235.83183582v-27.61681732a82.57428165 82.57428165 0 0 1 45.48489672-73.95783361A82.68474848 82.68474848 0 0 1 125.36456912 125.36456912h773.27086176z m-12.4275674 82.85044938h-748.41572696L512 527.3825672 886.20786348 208.2150185z"  ></path></symbol><symbol id="icon-qrcode" viewBox="0 0 1024 1024"><path d="M423.836543 114.819049l0-0.274246L204.08256 114.544803c-45.911656 0-83.09451 36.932144-83.356476 82.59309l-0.023536 0 0 207.579709c0 2.468215 0.500397 4.782933 1.239224 7.000438 6.678096 39.245839 40.831964 69.164243 82.140789 69.164243L423.836543 480.882282l0-0.237407c38.877449-2.432399 70.477144-31.363312 76.798107-68.926836 0.763386-2.217505 1.289366-4.532223 1.289366-7.000438L501.924016 197.137893l-0.025583 0C501.683539 153.253406 467.244168 117.538997 423.836543 114.819049zM458.038506 393.46021c0 24.14798-19.654642 43.705408-43.88551 43.705408L208.445938 437.165618c-24.230867 0-43.858904-19.557428-43.858904-43.705408L164.587034 201.980177c0-24.149003 19.628036-43.717687 43.858904-43.717687l205.708082 0c24.230867 0 43.88551 19.569708 43.88551 43.717687L458.039529 393.46021zM902.246517 195.111746c-0.215918-42.799782-33.818223-77.644381-76.153424-80.304977l0-0.261966L634.384863 114.544803c-44.790112 0-81.040734 36.037774-81.304747 80.56592l-0.023536 0 0 202.511273c0 2.407839 0.476861 4.673439 1.240247 6.831592 6.487761 38.292118 39.830147 67.472717 80.08906 67.472717l191.70823 0 0-0.226151c37.921681-2.385327 68.734454-30.613228 74.961272-67.246567 0.738827-2.158153 1.216711-4.423753 1.216711-6.831592L902.2721 195.111746 902.246517 195.111746zM859.461061 386.638851c0 23.551392-19.152199 42.643216-42.813085 42.643216L638.678656 429.282067c-23.658839 0-42.834574-19.091824-42.834574-42.643216L595.844082 199.832258c0-23.552415 19.175735-42.643216 42.834574-42.643216l177.969321 0c23.660886 0 42.813085 19.091824 42.813085 42.643216L859.461061 386.638851zM415.680792 539.887141l0-0.260943L201.839473 539.626197c-44.670385 0-80.874959 35.94363-81.114412 80.375585l-0.023536 0 0 201.974038c0 2.420119 0.477884 4.687766 1.215688 6.821359 6.464225 38.181601 39.73498 67.316152 79.922261 67.316152L415.680792 896.113331l0-0.236384c37.824467-2.350534 68.567655-30.529317 74.744331-67.079768 0.762363-2.133593 1.24127-4.40124 1.24127-6.821359L491.666394 620.001783l-0.049119 0C491.402381 577.308425 457.919802 542.53648 415.680792 539.887141zM448.975083 811.04077c0 23.493064-19.127639 42.524512-42.691311 42.524512L212.953601 853.565283c0 0-0.022513 0-0.047072 0l-6.822382 0c-23.563672 0-42.690288-19.031449-42.690288-42.524512L163.393859 624.687502c0-23.469528 19.126616-42.525536 42.690288-42.525536l200.200648 0c23.563672 0 42.691311 19.056008 42.691311 42.525536L448.976106 811.04077zM721.154066 753.120616c-14.741749 0-26.66736 11.508102-26.66736 25.699312l0 51.395554c0 14.228049 11.924587 25.721825 26.66736 25.721825 14.736633 0 26.663266-11.492752 26.663266-25.721825l0-51.395554C747.817332 764.628718 735.891721 753.120616 721.154066 753.120616zM834.775846 727.398792c-14.739702 0-26.665313 11.494799-26.665313 25.697265l0 77.118402c0 14.214746 11.924587 25.701358 26.665313 25.701358 14.763239 0 26.688849-11.487635 26.688849-25.701358l0-77.118402C861.464695 738.894613 849.538061 727.398792 834.775846 727.398792zM834.775846 573.172221c-14.739702 0-26.665313 11.506055-26.665313 25.722848l0 51.395554c0 14.189164 11.924587 25.697265 26.665313 25.697265 14.763239 0 26.688849-11.508102 26.688849-25.697265l0-51.395554C861.464695 584.679299 849.538061 573.172221 834.775846 573.172221zM721.154066 573.195757c-14.741749 0-26.66736 11.507078-26.66736 25.709545L694.486706 701.735295c0 14.192234 11.924587 25.686009 26.66736 25.686009 14.736633 0 26.663266-11.492752 26.663266-25.686009L747.817332 598.905302C747.817332 584.702835 735.891721 573.195757 721.154066 573.195757zM606.050538 701.735295c-14.68956 0-26.640754 11.435447-26.640754 25.663496l0 102.81669c0 14.214746 11.951193 25.701358 26.640754 25.701358 14.787798 0 26.712385-11.487635 26.712385-25.701358L632.762923 727.398792C632.763946 713.170742 620.838336 701.735295 606.050538 701.735295zM606.050538 573.172221c-14.68956 0-26.640754 11.506055-26.640754 25.722848l0 25.709545c0 14.201443 11.951193 25.686009 26.640754 25.686009 14.787798 0 26.712385-11.484565 26.712385-25.686009l0-25.709545C632.763946 584.679299 620.838336 573.172221 606.050538 573.172221z"  ></path></symbol><symbol id="icon-save" viewBox="0 0 1024 1024"><path d="M753.38336182 141.58221435H164.75650023v740.8355713h694.48699952v-634.97543336L753.38336182 141.58221435z m-125.18749238 45.60699463v185.39428711H395.75778198v-185.39428711h232.43808747zM349.40921021 836.81079102V579.90065766l21.13494872-21.1812973h282.91168214l21.13494872 21.18129729v256.91013337H349.40921021z m463.48571777 0h-91.95556641V564.97641755L668.0092926 512H355.9907074L303.06063843 564.97641755v271.83437347H211.10507203V187.18920898h138.30413818v232.0672989h325.18157958V187.18920898h57.70397188l80.60016631 81.34174348v568.27983856z m-278.09143066-602.53143311h47.7853775v92.69714355H534.80349732v-92.69714355z"  ></path></symbol><symbol id="icon-link" viewBox="0 0 1024 1024"><path d="M928 896 416 896C380.656 896 352 867.344 352 832L352 448C352 412.656 380.656 384 416 384L512 384C529.68 384 544 398.336 544 416 544 433.68 529.68 448 512 448L416 448 416 832 928 832 928 448 768 448C750.32 448 736 433.68 736 416 736 398.336 750.32 384 768 384L928 384C963.344 384 992 412.656 992 448L992 832C992 867.344 963.344 896 928 896ZM608 640 512 640C494.336 640 480 625.68 480 608 480 590.32 494.336 576 512 576L608 576 608 192 96 192 96 576 256 576C273.68 576 288 590.32 288 608 288 625.68 273.68 640 256 640L96 640C60.656 640 32 611.344 32 576L32 192C32 156.656 60.656 128 96 128L608 128C643.344 128 672 156.656 672 192L672 576C672 611.344 643.344 640 608 640Z"  ></path></symbol><symbol id="icon-field" viewBox="0 0 1024 1024"><path d="M905.53963457 264.16739029H724.64948675c-27.47873238 0-49.71026963-22.23153725-49.71026963-49.71026963s22.23153725-49.71026963 49.71026963-49.71026963h180.89014782c27.47873238 0 49.71026963 22.23153725 49.71026962 49.71026963s-22.23153725 49.71026963-49.71026962 49.71026963zM905.53963457 474.0551954H724.64948675c-27.47873238 0-49.71026963-22.23153725-49.71026963-49.71026963s22.23153725-49.71026963 49.71026963-49.71026962h180.89014782c27.47873238 0 49.71026963 22.23153725 49.71026962 49.71026962s-22.23153725 49.71026963-49.71026962 49.71026963zM905.53963457 682.56215968H724.64948675c-27.47873238 0-49.71026963-22.23153725-49.71026963-49.71026963s22.23153725-49.71026963 49.71026963-49.71026963h180.89014782c27.47873238 0 49.71026963 22.23153725 49.71026962 49.71026963s-22.23153725 49.71026963-49.71026962 49.71026963zM905.53963457 892.44996478H121.22204708c-27.47873238 0-49.71026963-22.23153725-49.71026963-49.71026963s22.23153725-49.71026963 49.71026963-49.71026964h784.31758749c27.47873238 0 49.71026963 22.23153725 49.71026962 49.71026964s-22.23153725 49.71026963-49.71026962 49.71026963zM432.04931635 210.45268228v388.29243944c-4.41869063 46.39625165 19.88410785 67.52311625 73.04647953 63.10442561h19.88410785v33.14017975H219.67599776v-33.14017975H249.64024362c44.18690634 2.20934532 66.41844358-18.7794352 66.41844358-63.10442561V210.45268228h-102.8726413c-55.371717-11.04672658-85.19787878 22.09345317-89.61656943 99.55862334h-36.45419772l16.57008988-159.34903097h26.5121438c4.41869063 6.62803595 9.94205392 11.04672658 16.57008988 13.25607188 4.41869063 4.41869063 12.15139925 5.5233633 23.19812583 3.31401798h404.86252931c15.46541722 2.20934532 28.72148912-3.31401797 39.7682157-16.57008986h29.82616178l13.2560719 159.34903097h-33.14017975c-6.62803595-77.46517017-37.69695447-110.60534992-92.93058738-99.55862334h-99.55862335z"  ></path></symbol><symbol id="icon-field-1" viewBox="0 0 1024 1024"><path d="M373.64622187 123.6385184H87.22962987a24.27259307 24.27259307 0 0 0-24.27259307 24.27259307v285.20296213a24.27259307 24.27259307 0 0 0 24.27259307 24.27259307h285.2029632a24.27259307 24.27259307 0 0 0 24.272592-24.27259307V147.91111147a24.27259307 24.27259307 0 0 0-23.0589632-24.27259307z m-24.272592 285.2029632h-236.65777814V172.7905184h236.65777814zM859.70488853 185.53362987H468.91614827a24.27259307 24.27259307 0 1 0 0 48.54518506h390.78874026a24.27259307 24.27259307 0 0 0 0-48.54518506zM468.91614827 365.75762987h245.76a24.27259307 24.27259307 0 1 0 0-48.54518507H468.91614827a24.27259307 24.27259307 0 0 0 0 48.54518507zM373.64622187 566.61333333H87.22962987a24.27259307 24.27259307 0 0 0-24.27259307 24.27259307V876.08888853a24.27259307 24.27259307 0 0 0 24.27259307 24.27259307h285.2029632a24.27259307 24.27259307 0 0 0 24.272592-24.27259307v-285.20296213a24.27259307 24.27259307 0 0 0-23.0589632-24.27259307z m-24.272592 284.59614827h-236.65777814V615.1585184h236.65777814zM859.70488853 628.5084448H468.91614827a24.27259307 24.27259307 0 0 0 0 48.54518507h390.78874026a24.27259307 24.27259307 0 0 0 0-48.54518507zM714.67614827 760.18725973H468.91614827a24.27259307 24.27259307 0 0 0 0 48.54518507h245.76a24.27259307 24.27259307 0 0 0 0-48.54518507z"  ></path></symbol><symbol id="icon-fullscreen" viewBox="0 0 1024 1024"><path d="M290 236.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L169 160c-5.1-0.6-9.5 3.7-8.9 8.9L179 329.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zM642.7 423.7c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7L863.9 169c0.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.4zM845 694.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L734 787.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L855 864c5.1 0.6 9.5-3.7 8.9-8.9L845 694.9zM381.3 600.3c-3.1-3.1-8.2-3.1-11.3 0L236.3 733.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L160.1 855c-0.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-0.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z"  ></path></symbol><symbol id="icon-fullscreen-exit" viewBox="0 0 1024 1024"><path d="M391 240.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L280 333.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L401 410c5.1 0.6 9.5-3.7 8.9-8.9L391 240.9zM401.1 614.1L240.8 633c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7l18.9-160.1c0.6-5.1-3.7-9.4-8.8-8.8zM622.9 409.9L783.2 391c6.6-0.8 9.4-8.9 4.7-13.6L744 333.6 877.7 200c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.3c-3.1-3.1-8.2-3.1-11.3 0L690.3 279.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L614.1 401c-0.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L623 614c-5.1-0.6-9.5 3.7-8.9 8.9L633 783.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z"  ></path></symbol><symbol id="icon-money" viewBox="0 0 1048 1024"><path d="M524.2752 0C241.516134 0 12.288102 229.228032 12.288102 511.976038c0 117.534003 39.610982 225.814016 106.203955 312.231014l38.47895-40.06103C100.53417 708.109005 67.143168 613.944013 67.143168 511.976038c0-252.460954 204.668006-457.120973 457.132032-457.120973 252.45399 0 457.120973 204.660019 457.120973 457.120973 0 252.468019-204.668006 457.12896-457.120973 457.12896-91.12105 0-176.011981-26.66496-247.303987-72.611021l-34.630042 42.907955c80.855962 53.441024 177.760973 84.558029 281.934029 84.558029 282.755994 0 511.984026-229.224038 511.984026-511.984026C1036.258202 229.228032 807.03017 0 524.2752 0zM304.851149 566.841958 304.851149 621.697024 505.983181 621.697024 505.983181 767.966003 505.983181 767.97399 505.983181 767.97399 505.983181 804.54697 560.838144 804.54697 560.838144 767.97399 560.83712 767.97399 560.838144 767.966003 560.838144 621.697024 761.973146 621.697024 761.973146 566.841958 560.838144 566.841958 560.838144 457.136026 761.973146 457.136026 761.973146 402.270003 600.358195 402.270003 718.125158 284.499968 678.615142 244.985958 533.40713 390.177997 388.213146 244.985958 348.695142 284.499968 466.462106 402.270003 304.851149 402.270003 304.851149 457.136026 505.983181 457.136026 505.983181 566.841958Z"  ></path></symbol><symbol id="icon-integer" viewBox="0 0 1024 1024"><path d="M514.077312 702.673667c40.199561 0 70.936609-16.709567 92.211145-50.126654 1.876744-2.951215 3.570315-6.145977 5.279237-9.317203 19.652596 39.590694 52.199872 59.443857 97.718579 59.443857 40.196491 0 70.932516-16.709567 92.207052-50.126654 21.272489-33.419134 31.909757-80.859609 31.909757-142.327566 0-124.82596-39.174208-187.237405-117.515461-187.237405-41.081651 0-72.479755 16.748453-94.189196 50.242288-2.00568 3.100618-3.826142 6.459109-5.646604 9.812483-19.24225-40.009226-51.016931-60.055794-95.372138-60.055794-41.080627 0-72.475662 16.748453-94.186126 50.242288-21.714558 33.503045-32.573883 82.008782-32.573883 145.528468C393.919674 641.367393 433.973926 702.673667 514.077312 702.673667zM712.807469 381.76075c32.127721 0 48.196699 43.767829 48.196699 131.304512 0 87.220481-16.506952 130.828674-49.517787 130.828674-33.600259 0-50.39783-42.343387-50.39783-127.037325C661.089573 426.790316 678.329213 381.76075 712.807469 381.76075zM517.598508 381.76075c32.131815 0 48.196699 43.767829 48.196699 131.304512 0 87.220481-16.504906 130.828674-49.51574 130.828674-33.600259 0-50.395784-42.343387-50.395784-127.037325C465.884706 426.790316 483.124346 381.76075 517.598508 381.76075z"  ></path><path d="M285.863656 416.20933l0 285.908682 64.385403 0 0-381.212258-56.681954 0.181125c-29.344329 24.019043-64.11525 42.345434-104.314811 54.984289l0 65.651232c12.763698-1.575892 26.77583-5.64558 42.035372-12.20395C246.544139 422.962128 277.05913 424.424432 285.863656 416.20933z"  ></path><path d="M897.529587 66.766636 124.898615 66.766636c-35.558867 0-64.385403 28.827559-64.385403 64.385403l0 760.717641c0 35.558867 28.827559 64.387449 64.385403 64.387449l772.630972 0c35.558867 0 64.385403-28.828582 64.385403-64.387449L961.91499 131.153062C961.916013 95.594195 933.088454 66.766636 897.529587 66.766636zM897.529587 892.719025 124.898615 892.719025 124.898615 130.299625l772.630972 0L897.529587 892.719025z"  ></path></symbol><symbol id="icon-tiaoma" viewBox="0 0 1024 1024"><path d="M392.687614 869.933065l29.827329 0L422.514943 154.067958 392.687614 154.067958 392.687614 869.933065zM452.342272 869.933065l29.830399 0L482.172671 154.067958l-29.830399 0L452.342272 869.933065zM243.547899 869.933065l89.485057 0L333.032956 154.067958l-89.485057 0L243.547899 869.933065zM64.583924 869.933065l119.309316 0L183.89324 154.067958l-119.309316-0.002047L64.583924 869.933065zM512 869.933065l89.481987 0L601.481987 154.067958l-89.481987 0L512 869.933065zM840.102666 154.067958l0 715.865107L959.415053 869.933065 959.415053 154.067958 840.102666 154.067958zM750.621702 869.933065l59.654658 0L810.276361 154.067958l-59.654658 0L750.621702 869.933065zM631.309316 869.933065l59.654658 0L690.963974 154.067958l-59.654658 0L631.309316 869.933065z"  ></path></symbol><symbol id="icon-zuhe" viewBox="0 0 1042 1024"><path d="M1036.74608 135.558l-5.363-2.926a35.596 35.596 0 0 0-7.315-7.314L814.39208 4.876a36.084 36.084 0 0 0-34.133 0L570.58308 125.318l-5.852 5.852-8.29 4.876a10.728 10.728 0 0 0-5.363 9.264v20.48l-10.24-5.851a36.084 36.084 0 0 0-36.084 0l-10.24 5.851v-19.504a10.728 10.728 0 0 0-6.827-10.728l-8.29-4.876s-3.413-4.389-5.85-5.852L263.87008 4.876a36.084 36.084 0 0 0-36.084 0L18.11008 125.318a35.109 35.109 0 0 0-7.802 7.802l-5.364 2.926a10.728 10.728 0 0 0-4.876 10.24v263.802a10.728 10.728 0 0 0 5.364 9.264l5.364 2.926a34.621 34.621 0 0 0 7.802 7.802l209.676 120.442a36.084 36.084 0 0 0 36.084 0l11.703-6.827v10.24a36.571 36.571 0 0 0 16.579 31.208l5.364 2.926-19.018 10.727a10.728 10.728 0 0 0-5.363 9.265v265.265a10.24 10.24 0 0 0 4.876 8.777 35.596 35.596 0 0 0 14.14 16.579l209.677 120.442a36.084 36.084 0 0 0 36.084 0l209.676-120.442a35.596 35.596 0 0 0 14.14-16.58 10.24 10.24 0 0 0 4.877-8.776V608.06a10.728 10.728 0 0 0-5.364-9.265L743.20008 588.07l5.365-2.926a36.571 36.571 0 0 0 18.041-31.208v-10.24l11.703 6.827a36.084 36.084 0 0 0 36.084 0l209.676-120.442a36.084 36.084 0 0 0 7.315-7.314l5.363-2.926a10.728 10.728 0 0 0 5.364-9.265v-264.29a10.728 10.728 0 0 0-5.364-10.727zM526.21008 466.164a10.728 10.728 0 0 0-10.24 0l-163.84 92.16-23.893-14.141v-31.208l146.286-83.383 5.851-5.851 7.314-4.389a10.728 10.728 0 0 0 5.364-9.264V226.743l28.282-16.092 28.282 16.092v183.345a10.728 10.728 0 0 0 5.364 9.264l8.29 4.389a35.109 35.109 0 0 0 5.85 5.851l146.286 83.383v30.72l-23.893 14.141z"  ></path></symbol><symbol id="icon-col-2" viewBox="0 0 1024 1024"><path d="M921.6 0H102.4C45.8 0 0 45.8 0 102.4v819.3C0 978.2 45.8 1024 102.4 1024h819.3c56.5 0 102.4-45.8 102.4-102.4V102.4C1024 45.8 978.2 0 921.6 0zM435.2 819.2h-256c-14.1 0-25.6-11.5-25.6-25.6 0-14.1 11.5-25.6 25.6-25.6h256c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5H190.1c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h234.2c20.1 0 36.5 16.4 36.5 36.5v387.8z m384 190.1h-256c-14.1 0-25.6-11.5-25.6-25.6 0-14.1 11.5-25.6 25.6-25.6h256c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5H599.7c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h234.2c20.1 0 36.5 16.4 36.5 36.5v387.8z"  ></path></symbol><symbol id="icon-col-3" viewBox="0 0 1024 1024"><path d="M921.6 0H102.4C45.8 0 0 45.8 0 102.4v819.3C0 978.2 45.8 1024 102.4 1024h819.3c56.5 0 102.4-45.8 102.4-102.4V102.4C1024 45.8 978.2 0 921.6 0zM307.2 819.2H204.8c-14.1 0-25.6-11.5-25.6-25.6 0-14.1 11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8z m230.4 190.1H460.8c-14.1 0-25.6-11.5-25.6-25.6 0-14.1 11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8z m230.4 190.1H716.8c-14.1 0-25.6-11.5-25.6-25.6 0-14.1 11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8z"  ></path></symbol><symbol id="icon-col-4" viewBox="0 0 1024 1024"><path d="M921.6 0H102.4C45.8 0 0 45.8 0 102.4v819.3C0 978.2 45.8 1024 102.4 1024h819.3c56.5 0 102.4-45.8 102.4-102.4V102.4C1024 45.8 978.2 0 921.6 0zM113.3 241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3z m128 577.9H138.9c-14.1 0-25.6-11.5-25.6-25.6s11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m214.6 0H353.5c-14.1 0-25.6-11.5-25.6-25.6s11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6s-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5H445c20.1 0 36.5 16.4 36.5 36.5v387.8z m189.1 190.1H568.2c-14.1 0-25.6-11.5-25.6-25.6s11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6s-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8z m189 190.1H782.8c-14.1 0-25.6-11.5-25.6-25.6s11.5-25.6 25.6-25.6h102.4c14.1 0 25.6 11.5 25.6 25.6s-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5h-80.6c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h80.6c20.1 0 36.5 16.4 36.5 36.5v387.8z"  ></path></symbol><symbol id="icon-col-1" viewBox="0 0 1024 1024"><path d="M921.6 0H102.4C45.8 0 0 45.8 0 102.4v819.3C0 978.2 45.8 1024 102.4 1024h819.3c56.5 0 102.4-45.8 102.4-102.4V102.4C1024 45.8 978.2 0 921.6 0z m-76.8 819.2H179.2c-14.1 0-25.6-11.5-25.6-25.6s11.5-25.6 25.6-25.6h665.6c14.1 0 25.6 11.5 25.6 25.6 0 14.1-11.5 25.6-25.6 25.6z m25.6-190.1c0 20.1-16.4 36.5-36.5 36.5H190.1c-20.1 0-36.5-16.4-36.5-36.5V241.3c0-20.1 16.4-36.5 36.5-36.5h643.8c20.1 0 36.5 16.4 36.5 36.5v387.8z"  ></path></symbol><symbol id="icon-zuzhijuese" viewBox="0 0 1024 1024"><path d="M853.333333 256h-341.333333l-85.333333-85.333333H170.666667a85.333333 85.333333 0 0 0-85.333334 85.333333v512a85.333333 85.333333 0 0 0 85.333334 85.333333h682.666666a85.333333 85.333333 0 0 0 85.333334-85.333333V341.333333a85.333333 85.333333 0 0 0-85.333334-85.333333z m-341.333333 85.333333a106.666667 106.666667 0 1 1-106.666667 106.666667A106.24 106.24 0 0 1 512 341.333333z m192 426.666667h-384v-42.666667a128 128 0 0 1 128-128h128a128 128 0 0 1 128 128v42.666667z"  ></path></symbol><symbol id="icon-hashtag" viewBox="0 0 1024 1024"><path d="M870.4 448a64 64 0 0 0 0-128h-114.56l26.88-148.48a64 64 0 0 0-126.08-23.04l-32 171.52h-156.8l26.88-148.48a64 64 0 0 0-126.08-23.04l-32 171.52H198.4a64 64 0 1 0 0 128h116.16l-23.36 128H153.6a64 64 0 0 0 0 128h114.56l-26.88 148.48a64 64 0 1 0 126.08 23.04l32-171.52h157.76l-26.88 148.48a64 64 0 1 0 126.08 23.04l32-171.52h137.28a64 64 0 1 0 0-128h-116.16l23.36-128z m-291.2 128h-157.76l23.36-128h157.76z"  ></path></symbol><symbol id="icon-formula" viewBox="0 0 1024 1024"><path d="M471.2 358.3h-130l19-90.4a133.5 133.5 0 0 1 130.3-106.2h52.7a32.9 32.9 0 1 0 0-65.7h-52.7c-93.8 0-175.6 66.7-194.6 158.6l-21.8 103.7H128.8a32.9 32.9 0 0 0 0 65.7h131.6l-97.3 464.5a32.7 32.7 0 0 0 25.5 38.8 30.5 30.5 0 0 0 6.7 0.7 32.9 32.9 0 0 0 32.1-26.2L327.5 424h143.7a32.9 32.9 0 1 0 0-65.7zM758.4 712l160-160a32.8 32.8 0 1 0-46.5-46.4L712 665.5 552 505.6a32.8 32.8 0 1 0-46.4 46.4l160 160-160 159.9a32.8 32.8 0 1 0 46.4 46.5l160-160 159.9 160a32.9 32.9 0 0 0 46.5-46.5z"  ></path></symbol><symbol id="icon-t" viewBox="0 0 1024 1024"><path d="M851.968 167.936l0 109.568-281.6 0 0 587.776-116.736 0 0-587.776-281.6 0 0-109.568 679.936 0z"  ></path></symbol><symbol id="icon-t-filled" viewBox="0 0 1024 1024"><path d="M832 64 192 64C121.344 64 64 121.344 64 192l0 640c0 70.656 57.344 128 128 128l640 0c70.656 0 128-57.344 128-128L960 192C960 121.344 902.656 64 832 64zM768 320 576 320l0 448c0 35.392-28.608 64-64 64s-64-28.608-64-64L448 320 256 320C220.608 320 192 291.392 192 256s28.608-64 64-64l512 0c35.392 0 64 28.608 64 64S803.392 320 768 320z"  ></path></symbol><symbol id="icon-select" viewBox="0 0 1024 1024"><path d="M912.14545437 992L111.85454563 992A79.85454563 79.85454563 0 0 1 32 912.14545437L32 111.85454563A79.85454563 79.85454563 0 0 1 111.85454563 32l800.29090875 0A79.85454563 79.85454563 0 0 1 992 111.85454563l0 800.29090875A79.85454563 79.85454563 0 0 1 912.14545437 992zM111.85454563 111.85454563l-1e-8 800.29090875 800.29090875 0L912.14545437 111.85454563z"  ></path><path d="M224 520.72727281l205.52727281 205.52727282 370.47272719-370.47272719-58.03636406-58.03636406-312.43636313 311.99999999-147.49090875-147.49090874L224 520.72727281z"  ></path></symbol><symbol id="icon-number" viewBox="0 0 1224 1024"><path d="M0 901.567122h1224.462246v122.432878H0zM122.165946 745.589771h145.12211V10.310343h-101.137624a113.030935 113.030935 0 0 1-5.279325 23.490029C142.393471 95.076129 101.063477 124.690768 14.859223 124.690768h-13.198312v109.279055h120.490205zM400.991403 563.808979a402.222256 402.222256 0 0 0-35.175725 181.780792h397.550943v-130.722604H538.194526c7.044043-27.568159 17.587863-45.971647 49.248981-82.719307 7.044043-8.17109 14.073256-16.31252 21.117299-23.490028 139.842786-146.041543 161.835029-194.030012 156.555704-303.309067C757.197523 54.205852 682.441692-17.272645 517.967001 6.217384a147.450352 147.450352 0 0 0-62.447293 22.466789c-61.572349 39.832208-85.31448 88.843916-87.983801 188.928641 0 10.217569 0 20.420309 0.874944 30.637879h137.203124c-0.874944-9.194329-0.874944-17.365419-0.874945-25.536509 2.639662-78.596688 24.631905-108.255815 58.932687-110.287465 33.425837-1.02324 56.352342 26.544919 57.167968 92.922046 0.874944 71.478497-19.278433 116.426905-118.740317 218.54328-55.373591 57.197627-80.005496 91.943295-101.107965 139.916934zM819.644816 529.078141a246.452519 246.452519 0 0 0 0.874944 43.910338c13.198312 127.652884 69.491336 181.780792 197.900528 181.780792 120.490205 0 179.437721-53.104668 198.716153-171.563223 21.117299-130.722604-20.227525-209.348951-80.910099-228.760849a39.209366 39.209366 0 0 0-14.9482-3.06972c30.786174-8.17109 55.41808-31.661119 73.005942-75.630775 8.793931-21.443549 13.198312-49.026538 13.198311-87.820676-1.764718-136.847214-84.439536-212.418671-242.759958-180.757552-72.116168 14.295699-124.894586 75.630775-136.328179 162.368893-2.639662 16.31252-2.639662 32.62504-1.749888 49.026537h134.563461a150.490413 150.490413 0 0 1-0.889774-19.411899c2.639662-55.151147 16.712918-78.596688 42.219768-85.789026 38.705161-10.20274 60.682575 14.295699 63.322237 84.765787 3.514607 76.594697-25.50685 110.287465-87.954142 109.264225-5.279325-1.02324-11.433594-1.02324-16.712919-2.04648v106.209335h13.198312c84.439536 0 101.152454 17.365419 101.152454 115.403665 0 83.742546-12.323367 110.287465-43.094712 117.435315-43.094712 11.240809-66.851673-15.318939-73.005942-91.943295a104.933993 104.933993 0 0 1 0-23.490029z"  ></path></symbol><symbol id="icon-shangchuan" viewBox="0 0 1024 1024"><path d="M646.791 799v-31.447c0-8.837 7.164-16 16-16H735c88.127 0 159.569-71.46 159.569-159.61 0-88.15-71.442-159.61-159.569-159.61-11.454 0-26.738 2.548-45.854 7.645a7.931 7.931 0 0 1-9.616-10.01c7.907-25.529 11.861-45.89 11.861-61.083 0-99.1-80.316-179.438-179.391-179.438-99.075 0-179.391 80.337-179.391 179.438 0 15.193 3.954 35.554 11.861 61.083a7.929 7.929 0 0 1-9.616 10.01c-19.116-5.097-34.4-7.646-45.854-7.646-88.127 0-159.569 71.46-159.569 159.61 0 88.15 71.442 159.61 159.569 159.61h73.2c8.837 0 16 7.164 16 16V799c0 8.837-7.163 16-16 16H289c-123.16 0-223-99.866-223-223.058 0-116.51 89.304-212.156 203.18-222.188-0.002-0.29-0.002-0.58-0.002-0.87C269.178 234.745 377.893 126 512 126s242.822 108.743 242.822 242.885l-0.001 0.869C868.696 379.786 958 475.432 958 591.942 958 715.134 858.16 815 735 815h-72.209c-8.836 0-16-7.163-16-16z m-168.66-301.848l-79.364 69.93c-13.636 11.031-33.643 8.931-44.685-4.691-11.043-13.622-8.94-33.607 4.696-44.638l126.696-108.219c11-11.252 28.92-12.857 41.826-3.141L664.347 516.97c14.014 10.55 16.814 30.449 6.253 44.447-10.56 14-30.48 16.796-44.494 6.247l-84.431-70.973v286.57c0 17.529-14.225 31.738-31.772 31.738-17.547 0-31.772-14.21-31.772-31.738v-286.11z"  ></path></symbol><symbol id="icon-drag" viewBox="0 0 1024 1024"><path d="M909.3 506.3L781.7 405.6c-4.7-3.7-11.7-0.4-11.7 5.7V476H548V254h64.8c6 0 9.4-7 5.7-11.7L517.7 114.7c-2.9-3.7-8.5-3.7-11.3 0L405.6 242.3c-3.7 4.7-0.4 11.7 5.7 11.7H476v222H254v-64.8c0-6-7-9.4-11.7-5.7L114.7 506.3c-3.7 2.9-3.7 8.5 0 11.3l127.5 100.8c4.7 3.7 11.7 0.4 11.7-5.7V548h222v222h-64.8c-6 0-9.4 7-5.7 11.7l100.8 127.5c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7 0.4-11.7-5.7-11.7H548V548h222v64.8c0 6 7 9.4 11.7 5.7l127.5-100.8c3.7-2.9 3.7-8.5 0.1-11.4z"  ></path></symbol><symbol id="icon-grid" viewBox="0 0 1024 1024"><path d="M128 469.333333 469.333333 469.333333 469.333333 128 128 128M128 896 469.333333 896 469.333333 554.666667 128 554.666667M554.666667 896 896 896 896 554.666667 554.666667 554.666667M554.666667 128 554.666667 469.333333 896 469.333333 896 128"  ></path></symbol><symbol id="icon-trash" viewBox="0 0 1024 1024"><path d="M394.95161173 414.51738453l0 351.0632448q0 8.5327872-5.4853632 14.0181504t-14.0181504 5.4853632l-39.0070272 0q-8.5327872 0-14.0181504-5.4853632t-5.4853632-14.0181504l0-351.0632448q0-8.5327872 5.4853632-14.0181504t14.0181504-5.4853632l39.0070272 0q8.5327872 0 14.0181504 5.4853632t5.4853632 14.0181504z m156.0281088 0l0 351.0632448q0 8.5327872-5.4853632 14.0181504t-14.0181504 5.4853632l-39.0070272 0q-8.5327872 0-14.0181504-5.4853632t-5.4853632-14.0181504l0-351.0632448q0-8.5327872 5.4853632-14.0181504t14.0181504-5.4853632l39.0070272 0q8.5327872 0 14.0181504 5.4853632t5.4853632 14.0181504z m156.0281088 0l0 351.0632448q0 8.5327872-5.4853632 14.0181504t-14.0181504 5.4853632l-39.0070272 0q-8.5327872 0-14.0181504-5.4853632t-5.4853632-14.0181504l0-351.0632448q0-8.5327872 5.4853632-14.0181504t14.0181504-5.4853632l39.0070272 0q8.5327872 0 14.0181504 5.4853632t5.4853632 14.0181504z m78.0140544 441.2669952l0-577.7915904-546.0983808 0 0 577.7915904q0 13.4086656 4.2663936 24.6841344t8.8375296 16.4560896 6.3995904 5.1806208l507.0913536 0q1.8284544 0 6.3995904-5.1806208t8.8375296-16.4560896 4.2663936-24.6841344z m-409.5737856-655.8056448l273.0491904 0-29.2552704-71.3097216q-4.2663936-5.4853632-10.3612416-6.7043328l-193.2066816 0q-6.094848 1.2189696-10.3612416 6.7043328z m565.6018944 19.5035136l0 39.0070272q0 8.5327872-5.4853632 14.0181504t-14.0181504 5.4853632l-58.5105408 0 0 577.7915904q0 50.5872384-28.6457856 87.4610688t-68.8717824 36.8738304l-507.0913536 0q-40.2259968 0-68.8717824-35.6548608t-28.6457856-86.2420992l0-580.2295296-58.5105408 0q-8.5327872 0-14.0181504-5.4853632t-5.4853632-14.0181504l0-39.0070272q0-8.5327872 5.4853632-14.0181504t14.0181504-5.4853632l188.3308032 0 42.663936-101.7839616q9.142272-22.5509376 32.9121792-38.3975424t48.1492992-15.8466048l195.035136 0q24.379392 0 48.1492992 15.8466048t32.9121792 38.3975424l42.663936 101.7839616 188.3308032 0q8.5327872 0 14.0181504 5.4853632t5.4853632 14.0181504z"  ></path></symbol><symbol id="icon-ic" viewBox="0 0 1536 1024"><path d="M1187.84 460.8h-327.68c-22.528 0-40.96-18.432-40.96-40.96V92.16c0-22.528 18.432-40.96 40.96-40.96h327.68c22.528 0 40.96 18.432 40.96 40.96v327.68c0 22.528-18.432 40.96-40.96 40.96z"  ></path><path d="M1126.4 512v358.4c0 28.16-23.04 51.2-51.2 51.2H409.6c-28.16 0-51.2-23.04-51.2-51.2V307.2c0-28.16 23.04-51.2 51.2-51.2h358.4V153.6H389.12c-45.056 0-81.92 36.864-81.92 81.92v655.36c0 45.056 36.864 81.92 81.92 81.92h706.56c45.056 0 81.92-36.864 81.92-81.92v-378.88h-51.2z"  ></path></symbol><symbol id="icon-date" viewBox="0 0 1024 1024"><path d="M205 552h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H205c-13.3 0-24 10.7-24 24s10.7 24 24 24zM453 552h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H453c-13.3 0-24 10.7-24 24s10.7 24 24 24zM701 552h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H701c-13.3 0-24 10.7-24 24s10.7 24 24 24zM205 687h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H205c-13.3 0-24 10.7-24 24s10.7 24 24 24zM453 687h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H453c-13.3 0-24 10.7-24 24s10.7 24 24 24zM701 687h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H701c-13.3 0-24 10.7-24 24s10.7 24 24 24zM205 823h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H205c-13.3 0-24 10.7-24 24s10.7 24 24 24zM453 823h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H453c-13.3 0-24 10.7-24 24s10.7 24 24 24zM701 823h120c13.3 0 24-10.7 24-24s-10.7-24-24-24H701c-13.3 0-24 10.7-24 24s10.7 24 24 24z"  ></path><path d="M870 116H745V64c0-13.3-10.7-24-24-24s-24 10.7-24 24v52H327V64c0-13.3-10.7-24-24-24s-24 10.7-24 24v52H154c-51.9 0-94 42.1-94 94v692c0 51.9 42.1 94 94 94h716c51.9 0 94-42.1 94-94V210c0-51.9-42.1-94-94-94z m46 786c0 25.4-20.6 46-46 46H154c-25.4 0-46-20.6-46-46V387h808v515z m0-563H108V210c0-25.4 20.6-46 46-46h125v68c0 13.3 10.7 24 24 24s24-10.7 24-24v-68h370v68c0 13.3 10.7 24 24 24s24-10.7 24-24v-68h125c25.4 0 46 20.6 46 46v129z"  ></path></symbol><symbol id="icon-fuwenbenkuang" viewBox="0 0 1024 1024"><path d="M218.316 307.727h87.886v205.06h-29.297v29.295h117.179v-29.294H364.79V307.727h87.882v29.293h29.294v-87.882H189.022v87.882h29.294v-29.293z m322.242 58.59h292.945v58.588H540.558v-58.588z m0 117.177h292.945v58.588H540.558v-58.588z m-351.536 117.18h644.481v58.588h-644.48v-58.587z m0 117.176h644.481v58.588h-644.48V717.85z m351.536-468.713h292.945v58.589H540.558v-58.589z m420.923 713.13H61.045V63.309h900.436v898.958z m-864.62-35.816h828.804V99.125H96.861V926.45z"  ></path></symbol><symbol id="icon-bars" viewBox="0 0 1024 1024"><path d="M170.666667 490.666667l682.666666 0 0 42.666666-682.666666 0 0-42.666666Z"  ></path><path d="M170.666667 704l682.666666 0 0 42.666667-682.666666 0 0-42.666667Z"  ></path><path d="M170.666667 277.333333l682.666666 0 0 42.666667-682.666666 0 0-42.666667Z"  ></path></symbol><symbol id="icon-slider" viewBox="0 0 1024 1024"><path d="M901.12 122.88h-757.76c-20.48 0-34.133333 13.653333-34.133333 34.133333v6.826667c0 20.48 13.653333 34.133333 34.133333 34.133333h757.76c6.826667 0 13.653333 0 20.48-6.826666s6.826667-13.653333 6.826667-20.48v-6.826667c0-27.306667-13.653333-40.96-27.306667-40.96z"  ></path><path d="M764.586667 88.746667h-68.266667c-20.48 0-34.133333 13.653333-34.133333 34.133333v68.266667c0 20.48 13.653333 34.133333 34.133333 34.133333h68.266667c20.48 0 34.133333-13.653333 34.133333-34.133333v-68.266667c0-20.48-13.653333-34.133333-34.133333-34.133333zM901.12 430.08h-757.76c-20.48 0-34.133333 13.653333-34.133333 34.133333v6.826667c0 20.48 13.653333 34.133333 34.133333 34.133333h757.76c20.48 0 34.133333-13.653333 34.133333-34.133333v-6.826667c-6.826667-20.48-20.48-34.133333-34.133333-34.133333z"  ></path><path d="M552.96 395.946667h-68.266667c-20.48 0-34.133333 13.653333-34.133333 34.133333v68.266667c0 20.48 13.653333 34.133333 34.133333 34.133333h68.266667c20.48 0 34.133333-13.653333 34.133333-34.133333v-68.266667c0-20.48-13.653333-34.133333-34.133333-34.133333zM901.12 737.28h-757.76c-6.826667 0-13.653333 0-20.48 6.826667-6.826667 6.826667-6.826667 13.653333-6.826667 20.48v6.826666c0 20.48 13.653333 34.133333 34.133334 34.133334h757.76c20.48 0 34.133333-13.653333 34.133333-34.133334v-6.826666c-13.653333-13.653333-27.306667-27.306667-40.96-27.306667z"  ></path><path d="M354.986667 703.146667h-68.266667c-20.48 0-34.133333 13.653333-34.133333 34.133333v68.266667c0 20.48 13.653333 34.133333 34.133333 34.133333h68.266667c20.48 0 34.133333-13.653333 34.133333-34.133333v-68.266667c0-20.48-13.653333-34.133333-34.133333-34.133333z"  ></path></symbol><symbol id="icon-color" viewBox="0 0 1024 1024"><path d="M297.78046416 323.45884442c0-38.83614815 31.06891852-69.90506667 66.02145186-69.90506666s66.02145185 31.06891852 66.02145186 69.90506666S402.63806416 389.48029628 363.80191602 389.48029628s-66.02145185-31.06891852-66.02145186-66.02145186zM165.73756046 459.38536294C165.73756046 420.54921479 196.80647899 389.48029628 231.75901232 389.48029628s66.02145185 31.06891852 66.02145184 69.90506666-31.06891852 66.02145185-66.02145184 66.02145185-66.02145185-31.06891852-66.02145186-66.02145185zM476.42674566 276.85546665c0-38.83614815 31.06891852-69.90506667 66.02145184-69.90506667 34.95253333 0 66.02145185 31.06891852 66.02145185 69.90506665s-31.06891852 66.02145185-66.02145185 66.02145186c-34.95253333 0-66.02145185-31.06891852-66.02145184-66.02145184zM476.42674566 661.33333331c0-50.48699259 38.83614815-89.32314075 89.32314073-89.32314076s89.32314075 38.83614815 89.32314074 89.32314076-38.83614815 89.32314075-89.32314074 89.32314075-89.32314075-38.83614815-89.32314073-89.32314075z"  ></path><path d="M519.14650861 164.23063701C297.78046416 164.23063701 119.13418269 315.69161479 119.13418269 505.98874073s178.64628148 337.87448889 400.01232592 337.87448888c62.13783703 0 108.74121482-7.76722963 147.57736297-23.30168888 27.1853037-11.65084445 50.48699259-27.1853037 62.13783703-46.60337779 27.1853037-42.71976297 7.76722963-104.8576-11.65084445-143.69374815-42.71976297-89.32314075-3.88361482-128.15928889 15.53445927-139.81013333 11.65084445-7.76722963 23.30168889-11.65084445 34.95253333-11.65084445 19.41807408 0 50.48699259 7.76722963 81.55591112 54.37060741 15.53445925 27.1853037 34.95253333 34.95253333 42.71976295 34.95253334 15.53445925 0 27.1853037-27.1853037 27.18530371-69.90506667 0-182.5298963-178.64628148-333.99087408-400.01232593-333.99087408z m0 722.35235556c-116.50844445 0-229.13327408-38.83614815-310.68918518-112.62482963-42.71976297-34.95253333-73.78868148-77.6722963-97.09037037-124.27567408-23.30168889-42.71976297-34.95253333-93.20675555-34.95253333-147.57736296S88.06526416 401.13114073 111.36695306 350.64414813c23.30168889-46.60337778 54.37060741-85.43952592 97.09037037-124.27567407C290.01323454 156.46340739 402.63806416 117.62725923 519.14650861 117.62725923s229.13327408 38.83614815 310.68918519 112.62482963c42.71976297 34.95253333 73.78868148 77.6722963 97.09037036 124.27567408 23.30168889 46.60337778 34.95253333 97.09037037 34.95253334 151.46097777 0 85.43952592-34.95253333 112.62482963-69.90506667 112.62482963-27.1853037 0-58.25422222-19.41807408-81.5559111-54.3706074-15.53445925-23.30168889-31.06891852-34.95253333-42.71976297-34.95253333-3.88361482 0-7.76722963 0-11.65084444 3.88361481-23.30168889 15.53445925-11.65084445 58.25422222 0 77.67229629 34.95253333 73.78868148 38.83614815 139.81013333 7.76722962 190.29712592-34.95253333 58.25422222-116.50844445 85.43952592-244.66773333 85.43952592z"  ></path></symbol><symbol id="icon-radio-active" viewBox="0 0 1024 1024"><path d="M512 4.533c-279.803 0-507.467 227.665-507.467 507.467 0 279.839 227.629 507.467 507.467 507.467 279.839 0 507.467-227.629 507.467-507.467 0-279.803-227.629-507.467-507.467-507.467zM512 946.65c-239.68 0-434.65-195.006-434.65-434.65 0-239.68 194.97-434.65 434.65-434.65 239.644 0 434.65 194.97 434.65 434.65 0 239.644-195.006 434.65-434.65 434.65zM512 329.955c-100.38 0-182.045 81.665-182.045 182.045s81.665 182.045 182.045 182.045 182.045-81.665 182.045-182.045-81.665-182.045-182.045-182.045z"  ></path></symbol><symbol id="icon-input" viewBox="0 0 1669 1024"><path d="M1398.66921433 732.06637047c0 70.6134846-45.10390102 127.64034389-100.83679598 127.64034389L366.82504671 859.70671436C311.18457777 859.70671436 265.98825072 802.67985575 265.98825072 732.06637047L265.98825072 292.02605556C265.98825072 221.41257027 311.18457777 164.38571167 366.82504671 164.38571167l931.09979834 0c55.73289429 0 100.836796 57.0268586 100.83679599 127.54791786L1398.76164038 732.06637047zM1362.43821147 286.48049352c0-51.01916714-41.40686012-92.42602727-92.42602726-92.42602726L394.83013288 194.05446626c-51.01916714 0-92.42602727 41.40686012-92.42602726 92.42602726l0 451.13143898c0 51.11159317 41.40686012 92.42602727 92.42602726 92.42602727l875.18205134 0c51.01916714 0 92.42602727-41.3144341 92.42602725-92.42602727L1362.43821147 286.48049352z"  ></path><path d="M447.23569039 723.84045447c0 16.0821286-12.93964383 28.9293464-28.92934643 28.92934639l0 0c-15.89727654 0-28.9293464-12.8472178-28.92934639-28.9293464l0-392.81061538c0-15.89727654 12.93964383-28.9293464 28.92934639-28.92934639l0 0c15.89727654 0 28.9293464 12.93964383 28.92934643 28.92934639L447.23569039 723.84045447z"  ></path><path d="M556.94538452 690.75193637m-34.65976047 0a0.25460031 0.25460031 0 1 0 69.31952028 0 0.25460031 0.25460031 0 1 0-69.31952028 0Z"  ></path><path d="M691.33282806 690.75193637m-34.65976048 0a0.25460031 0.25460031 0 1 0 69.31952028 0 0.25460031 0.25460031 0 1 0-69.31952028 0Z"  ></path><path d="M821.2838225 690.75193637m-34.65976049 0a0.25460031 0.25460031 0 1 0 69.3195203 0 0.25460031 0.25460031 0 1 0-69.3195203 0Z"  ></path></symbol><symbol id="icon-switch" viewBox="0 0 1024 1024"><path d="M729.008 806.496 295.008 806.496C140.912 806.496 16 681.584 16 527.504l0-31.008c0-154.08 124.912-278.992 279.008-278.992l434 0c154.08 0 279.008 124.912 279.008 278.992l0 31.008C1008 681.584 883.088 806.496 729.008 806.496zM946.96 496.768c0-119.696-97.04-216.736-216.736-216.736L294.384 280.032c-119.696 0-216.736 97.04-216.736 216.736l0 31.008c0 119.696 97.04 216.736 216.736 216.736L730.24 744.512c119.696 0 216.736-97.04 216.736-216.736L946.976 496.768zM702.32 672.576c-90.72 0-164.272-73.536-164.272-164.256 0-90.72 73.552-164.272 164.272-164.272 90.72 0 164.272 73.536 164.272 164.272C866.592 599.04 793.04 672.576 702.32 672.576z"  ></path></symbol><symbol id="icon-checkbox" viewBox="0 0 1024 1024"><path d="M797.8 248.4c-11.4-11.6-30.2-11.6-41.6-0.2L409.2 592.4l-146.8-148c-11.4-11.6-30.2-11.6-41.6-0.2l-55.8 55.4c-11.6 11.4-11.6 30.2-0.2 41.6l222.8 224.6c11.4 11.6 30.2 11.6 41.6 0.2l423.6-420.2c11.6-11.4 11.6-30.2 0.2-41.6l-55.2-55.8z"  ></path><path d="M857 59h-696c-55.2 0-100 44.8-100 100v696c0 55.2 44.8 100 100 100h696c55.2 0 100-44.8 100-100v-696c0-55.2-44.8-100-100-100z m53.8 777.8c0 39.8-32.2 72-72 72H179.2c-39.8 0-72-32.2-72-72V177.2c0-39.8 32.2-72 72-72h659.6c39.8 0 72 32.2 72 72v659.6z"  ></path></symbol><symbol id="icon-tooltip" viewBox="0 0 1024 1024"><path d="M511.999488 64.900126c-247.025093 0-447.290209 200.147436-447.290209 447.085548 0 246.909459 200.264093 447.115224 447.290209 447.115224s447.290209-200.205764 447.290209-447.115224C959.288674 265.046538 759.024581 64.900126 511.999488 64.900126L511.999488 64.900126zM511.999488 895.276267c-211.386408 0-383.348921-172.020842-383.348921-383.291616 0-211.299427 171.962513-383.203612 383.348921-383.203612 211.444736 0 383.408273 171.904185 383.408273 383.203612C895.407762 723.255425 723.444225 895.276267 511.999488 895.276267L511.999488 895.276267zM511.999488 256.486582c-88.048335 0-159.734004 71.685669-159.734004 159.647023l0 32.028461 63.881936 0 0-32.028461c0-52.759621 42.976814-95.764064 95.852068-95.764064 52.876278 0 95.852068 43.004443 95.852068 95.764064 0 35.987632-20.73116 56.019875-54.506405 85.835947-32.66905 28.767184-73.257467 64.521502-73.257467 126.716007l0 42.97579 63.881936 0 0-42.97579c0-31.679513 19.624966-50.547233 51.595099-78.848813 33.95023-29.815049 76.168774-67.083861 76.168774-133.703141C671.733493 328.172251 600.106152 256.486582 511.999488 256.486582L511.999488 256.486582zM480.087685 703.57213l63.881936 0 0 63.940265L480.087685 767.512395 480.087685 703.57213 480.087685 703.57213zM480.087685 703.57213"  ></path></symbol><symbol id="icon-tupian" viewBox="0 0 1170 1024"><path d="M1060.432916 0H109.768851A109.768851 109.768851 0 0 0 0 109.768851v804.462298a109.768851 109.768851 0 0 0 109.768851 109.768851h950.664065a109.768851 109.768851 0 0 0 109.768851-109.768851V109.768851A109.768851 109.768851 0 0 0 1060.432916 0zM109.768851 73.218409h950.781591a36.550442 36.550442 0 0 1 36.550442 36.550442v430.731092c-58.762768-48.302996-161.127511-113.529668-283.706646-113.529669-113.059566 0-224.473775 87.556525-332.127166 172.292437-82.267876 64.874096-167.943992 131.981178-227.76449 131.981177-84.030759 0-155.956387-61.818432-180.284173-85.323539V109.768851a36.667967 36.667967 0 0 1 36.550442-36.550442z m950.781591 877.680707H109.768851a36.550442 36.550442 0 0 1-36.550442-36.550442V740.645931c43.837025 31.026742 107.300815 63.698841 180.284173 63.698841 85.206014 0 176.288305-71.690577 273.011822-147.612074s199.793412-156.66154 286.99736-156.66154c157.131642 0 282.061288 138.327557 283.119018 139.737863v274.422128a36.550442 36.550442 0 0 1-36.550442 36.550442z"  ></path><path d="M303.450935 501.716516a147.259497 147.259497 0 1 0-147.259497-147.612074 147.259497 147.259497 0 0 0 147.259497 147.612074z m0-220.948009a73.335935 73.335935 0 1 1-72.748307 73.335935 73.335935 73.335935 0 0 1 73.21841-73.335935z"  ></path></symbol><symbol id="icon-rate" viewBox="0 0 1024 1024"><path d="M512.161682 66.028832c-7.767917 0-23.348778 6.231935-43.649126 46.343491-48.821939 87.162152-125.945457 229.404784-125.945457 229.404784s-140.995221 27.38572-231.952816 44.577265c-44.614104 7.344269-59.193147 47.083341-36.548404 75.05644 63.996546 77.008908 177.216167 204.165959 177.216167 204.165959s-18.48091 139.628084-28.888957 234.942917c-3.384074 36.602639 15.915481 57.597813 42.837644 57.597813 8.772804 0 18.367323-2.248204 28.256554-6.9022 76.339666-37.858236 192.462406-95.745644 218.751143-108.816335 25.840528 13.211906 140.817166 72.034617 216.300324 110.004393 9.775644 4.686742 19.295462 6.934946 27.958772 6.934946 26.621311 0 45.695738-20.957311 42.314735-57.634652-10.261715-95.458095-28.554336-235.31233-28.554336-235.31233s111.922069-127.270639 175.171602-204.391087c22.381753-28.043706 7.990998-67.821665-36.106336-75.197656-89.908706-17.238616-229.310639-44.650943-229.310639-44.650943S603.786473 199.717647 555.523259 112.451118c-17.066701-32.216749-30.122041-42.547025-38.377052-45.388746C516.367471 66.659189 514.695389 66.028832 512.161682 66.028832L512.161682 66.028832 512.161682 66.028832zM512.161682 66.028832"  ></path></symbol><symbol id="icon-time" viewBox="0 0 1024 1024"><path d="M512 64C264.96 64 64 264.96 64 512s200.96 448 448 448 448-200.96 448-448S759.04 64 512 64z m0 831.712c-211.584 0-383.712-172.16-383.712-383.712 0-211.584 172.128-383.712 383.712-383.712 211.552 0 383.712 172.128 383.712 383.712 0 211.552-172.16 383.712-383.712 383.712z"  ></path><path d="M671.968 512H512V288.064c0-17.76-14.24-32.128-32-32.128s-32 14.4-32 32.128V544c0 17.76 14.272 32 32 32h191.968c17.76 0 32.128-14.24 32.128-32s-14.368-32-32.128-32z"  ></path></symbol><symbol id="icon-clone" viewBox="0 0 1024 1024"><path d="M897.71428583 881.64285753l2e-8-546.42857168q0-6.52901748-4.77120499-11.30022335t-11.30022333-4.77120497l-546.42857168 0q-6.52901748 0-11.30022335 4.77120497t-4.77120497 11.30022335l0 546.42857168q0 6.52901748 4.77120497 11.30022333t11.30022335 4.77120499l546.42857168 0q6.52901748 0 11.30022333-4.77120499t4.77120499-11.30022333z m64.28571417-546.42857168l0 546.42857168q0 33.14732167-23.60491084 56.75223251t-56.75223252 23.60491085l-546.42857167 0q-33.14732167 0-56.75223252-23.60491085t-23.60491084-56.75223251l0-546.42857168q0-33.14732167 23.60491084-56.75223252t56.75223252-23.60491084l546.42857167 0q33.14732167 0 56.75223252 23.60491084t23.60491084 56.75223252z m-192.85714247-192.85714249l0 80.35714249-64.28571417 0 0-80.35714249q0-6.52901748-4.77120498-11.30022334t-11.30022335-4.77120498l-546.42857167 0q-6.52901748 0-11.30022334 4.77120498t-4.77120498 11.30022334l0 546.42857168q0 6.52901748 4.77120498 11.30022334t11.30022334 4.77120498l80.35714247 0 0 64.28571417-80.35714247 0q-33.14732167 0-56.75223252-23.60491085t-23.60491084-56.75223251l0-546.42857168q0-33.14732167 23.60491084-56.75223252t56.75223252-23.60491084l546.42857167 0q33.14732167 0 56.75223252 23.60491084t23.60491084 56.75223252z"  ></path></symbol><symbol id="icon-jilianxuanze" viewBox="0 0 1024 1024"><path d="M128 512V224c0-16 12.8-32 32-32h384c19.2 0 32 12.8 32 32v288c0 16-12.8 32-32 32h-32v64h64c35.2 0 64-28.8 64-64V192c0-35.2-28.8-64-64-64H128c-35.2 0-64 28.8-64 64v352c0 35.2 28.8 64 64 64h192v-64H160c-16 0-32-12.8-32-32z"  ></path><path d="M896 416H704v64h160c19.2 0 32 12.8 32 32v288c0 16-12.8 32-32 32H480c-19.2 0-32-12.8-32-32V512c0-16 12.8-32 32-32h32v-64h-64c-35.2 0-64 28.8-64 64v352c0 35.2 28.8 64 64 64h448c35.2 0 64-28.8 64-64V480c0-35.2-28.8-64-64-64z"  ></path></symbol><symbol id="icon-textarea" viewBox="0 0 1024 1024"><path d="M64.60757333 814.92195555h885.46417778V209.07804445h-885.46417778v605.8439111zM18.00419555 162.47466667h978.67093334v699.05066666H18.00419555V162.47466667z m885.46417778 466.03377778l-139.81013333 139.81013333h139.81013333V628.50844445z m-752.64455111-291.27111112v233.01688889c0 13.98101333 9.32067555 23.30168889 23.30168889 23.30168889s23.30168889-9.32067555 23.30168889-23.30168889V337.23733333c0-13.98101333-9.32067555-23.30168889-23.30168889-23.30168888s-23.30168889 9.32067555-23.30168889 23.30168888z"  ></path></symbol><symbol id="icon-clear" viewBox="0 0 1024 1024"><path d="M883.2 403.2l-147.2-44.8 57.6-224c0-6.4 0-19.2-6.4-25.6-6.4-6.4-12.8-12.8-19.2-12.8L627.2 57.6c-6.4 0-19.2 0-25.6 0C595.2 70.4 588.8 76.8 588.8 83.2L524.8 300.8 358.4 256c-6.4 0-19.2 0-25.6 0S320 275.2 320 281.6l-89.6 320C211.2 684.8 128 768 128 768c-6.4 6.4-12.8 19.2-6.4 32 0 12.8 12.8 19.2 25.6 25.6l524.8 140.8c0 0 6.4 0 6.4 0 6.4 0 19.2-6.4 25.6-12.8 6.4-6.4 83.2-89.6 115.2-179.2 32-83.2 89.6-326.4 89.6-332.8C908.8 422.4 896 409.6 883.2 403.2zM755.2 748.8c-25.6 57.6-70.4 115.2-89.6 147.2l-70.4-19.2c32-38.4 70.4-96 89.6-160 6.4-19.2-6.4-32-25.6-38.4-19.2-6.4-32 6.4-38.4 25.6-19.2 70.4-76.8 134.4-96 153.6l-57.6-12.8c32-38.4 70.4-96 83.2-153.6 6.4-19.2-6.4-32-25.6-38.4-19.2-6.4-32 6.4-38.4 25.6-19.2 64-70.4 128-89.6 153.6l-64-19.2c32-38.4 70.4-96 89.6-153.6 6.4-19.2-6.4-32-25.6-38.4C384 608 364.8 620.8 364.8 633.6c-19.2 64-70.4 128-96 153.6l-57.6-19.2c32-38.4 70.4-96 83.2-153.6l76.8-294.4 166.4 44.8c6.4 0 19.2 0 25.6 0C569.6 364.8 576 358.4 582.4 352L640 128l83.2 19.2-57.6 224c-6.4 19.2 6.4 32 19.2 38.4L832 454.4C819.2 524.8 780.8 691.2 755.2 748.8z"  ></path><path d="M364.8 473.6C364.8 492.8 371.2 505.6 390.4 512l339.2 96c0 0 6.4 0 6.4 0 12.8 0 25.6-6.4 32-25.6 6.4-19.2-6.4-32-19.2-38.4L409.6 448C390.4 448 371.2 454.4 364.8 473.6z"  ></path></symbol><symbol id="icon-table" viewBox="0 0 1024 1024"><path d="M928.229 784.149c0 44.024-36.02 80.044-80.044 80.044L175.815 864.193c-44.024 0-80.044-36.02-80.044-80.044L95.771 239.851c0-44.024 36.02-80.044 80.044-80.044l672.369 0c44.024 0 80.044 36.02 80.044 80.044L928.228 784.149zM351.912 303.886c0-9.005-7.004-16.009-16.009-16.009L175.815 287.877c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L351.912 303.886zM351.912 495.991c0-9.005-7.004-16.009-16.009-16.009L175.815 479.982c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L351.912 495.991zM351.912 688.097c0-9.005-7.004-16.009-16.009-16.009L175.815 672.088c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L351.912 688.097zM608.053 303.886c0-9.005-7.004-16.009-16.009-16.009L431.956 287.877c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L608.053 303.886zM608.053 495.991c0-9.005-7.004-16.009-16.009-16.009L431.956 479.982c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L608.053 495.991zM608.053 688.097c0-9.005-7.004-16.009-16.009-16.009L431.956 672.088c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L608.053 688.097zM864.193 303.886c0-9.005-7.004-16.009-16.009-16.009L688.097 287.877c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L864.194 303.886zM864.193 495.991c0-9.005-7.004-16.009-16.009-16.009L688.097 479.982c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L864.194 495.991zM864.193 688.097c0-9.005-7.004-16.009-16.009-16.009L688.097 672.088c-9.005 0-16.009 7.004-16.009 16.009l0 96.053c0 9.005 7.004 16.009 16.009 16.009l160.088 0c9.005 0 16.009-7.004 16.009-16.009L864.194 688.097z"  ></path></symbol><symbol id="icon-depart" viewBox="0 0 1024 1024"><path d="M916.23451733 477.51649173L547.318336 477.51649173 547.318336 255.34498133 696.308 255.34498133 696.308 34.66668053 331.7635616 34.66668053 331.7635616 255.34498133 478.22732907 255.34498133 478.22732907 477.51649173 108.1573568 477.51649173 108.1573568 534.23985493 108.1573568 551.07119467 108.1573568 771.74949653 34.4369952 771.74949653 34.4369952 989.33331947 254.03822507 989.33331947 254.03822507 771.74949653 181.86461973 771.74949653 181.86461973 551.07119467 478.22732907 551.07119467 478.22732907 771.74949653 402.9722176 771.74949653 402.9722176 989.33331947 622.57344747 989.33331947 622.57344747 771.74949653 547.318336 771.74949653 547.318336 551.07119467 842.90712107 551.07119467 842.90712107 771.74949653 769.98797333 771.74949653 769.98797333 989.33331947 989.5619136 989.33331947 989.5619136 771.74949653 916.23451733 771.74949653Z"  ></path></symbol></svg>',function(l){var c=(c=document.getElementsByTagName("script"))[c.length-1],h=c.getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var a,t,o,z,i,v=function(c,h){h.parentNode.insertBefore(c,h)};if(h&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(c){console&&console.log(c)}}a=function(){var c,h=document.createElement("div");h.innerHTML=l._iconfont_svg_string_3814468,(h=h.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",h=h,(c=document.body).firstChild?v(h,c.firstChild):c.appendChild(h))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),a()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(o=a,z=l.document,i=!1,m(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,s())})}function s(){i||(i=!0,o())}function m(){try{z.documentElement.doScroll("left")}catch(c){return void setTimeout(m,50)}s()}}(window);
\ No newline at end of file
diff --git a/src/assets/icons/lock.svg b/src/assets/icons/lock.svg
deleted file mode 100644
index c55da4d..0000000
--- a/src/assets/icons/lock.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1671872759315" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="29438" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M136.005284 399.993557h751.9874c35.198978 0 63.999619 28.79861 63.99962 63.999619v495.992986c0 35.198978-28.79861 63.999619-63.99962 63.999619H136.005284c-35.198978 0-63.999619-28.79861-63.999619-63.999619V463.993176c0-35.198978 28.800641-63.999619 63.999619-63.999619z" fill="#ECC45C" p-id="29439"></path><path d="M136.005284 367.993748h751.9874c35.198978 0 63.999619 28.79861 63.99962 63.999619v31.999809c0 35.198978-28.79861 63.999619-63.99962 63.99962H136.005284c-35.198978 0-63.999619-28.79861-63.999619-63.99962v-31.999809c0-35.198978 28.800641-63.999619 63.999619-63.999619z" fill="#F8D578" p-id="29440"></path><path d="M232.002682 415.993462c-39.998746 0-71.998556 14.399305-71.998556 31.99981s31.99981 31.99981 71.998556 31.999809 71.998556-14.399305 71.998556-31.999809c0.002031-17.600505-31.997778-31.99981-71.998556-31.99981z m559.992605 0c-39.998746 0-71.998556 14.399305-71.998556 31.99981s31.99981 31.99981 71.998556 31.999809 71.998556-14.399305 71.998556-31.999809S831.994033 415.993462 791.995287 415.993462zM512 655.990003c66.398488 0 119.99827 53.599783 119.99827 119.99827s-53.599783 119.99827-119.99827 119.99827-119.99827-53.599783-119.99827-119.99827 53.597751-119.99827 119.99827-119.99827z" fill="#D4B053" p-id="29441"></path><path d="M512 687.989812c48.800014 0 87.998461 39.198446 87.998461 87.998461s-39.198446 87.998461-87.998461 87.998461-87.998461-39.198446-87.998461-87.998461a87.742527 87.742527 0 0 1 87.998461-87.998461z" fill="#E4E7E7" p-id="29442"></path><path d="M512 735.987495c8.799237 0 15.999905 7.200668 15.999905 15.999905v47.999714c0 8.799237-7.200668 15.999905-15.999905 15.999905s-15.999905-7.200668-15.999905-15.999905v-47.999714c0-8.799237 7.198637-15.999905 15.999905-15.999905z" fill="#324D5B" p-id="29443"></path><path d="M512 0C326.401511 0 176.004031 150.39748 176.004031 335.993938v95.999429c0 17.600505 24.799141 31.99981 55.998651 31.999809s55.998651-14.399305 55.998651-31.999809v-95.999429c0-123.997739 99.998897-223.996636 223.996636-223.996636s223.996636 99.998897 223.996636 223.996636v95.999429c0 17.600505 24.799141 31.99981 55.998651 31.999809s55.998651-14.399305 55.998651-31.999809v-95.999429C847.993938 150.39748 697.596458 0 512 0z" fill="#E4E7E7" p-id="29444"></path><path d="M512 63.999619c-150.39748 0-271.99635 121.59887-271.99635 271.99635v127.997207c27.200041-2.4009 47.999714-15.199605 47.999714-31.999809v-95.999429c0-123.997739 99.998897-223.996636 223.996636-223.996636s223.996636 99.998897 223.996636 223.996636v95.999429c0 15.999905 20.799673 29.59891 47.999714 31.999809v-127.997207c-0.002031-150.399511-121.59887-271.99635-271.99635-271.99635z" fill="#CDCFCF" p-id="29445"></path></svg>
\ No newline at end of file
diff --git a/src/assets/icons/moon.svg b/src/assets/icons/moon.svg
deleted file mode 100644
index e6667f0..0000000
--- a/src/assets/icons/moon.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 499.712 499.712" style="enable-background: new 0 0 499.712 499.712;" xml:space="preserve">
-<path style="fill: #FFD93B;" d="M146.88,375.528c126.272,0,228.624-102.368,228.624-228.64c0-55.952-20.16-107.136-53.52-146.88
-	C425.056,33.096,499.696,129.64,499.696,243.704c0,141.392-114.608,256-256,256c-114.064,0-210.608-74.64-243.696-177.712
-	C39.744,355.368,90.944,375.528,146.88,375.528z"/>
-<path style="fill: #F4C534;" d="M401.92,42.776c34.24,43.504,54.816,98.272,54.816,157.952c0,141.392-114.608,256-256,256
-	c-59.68,0-114.448-20.576-157.952-54.816c46.848,59.472,119.344,97.792,200.928,97.792c141.392,0,256-114.608,256-256
-	C499.712,162.12,461.392,89.64,401.92,42.776z"/>
-<g>
-	<polygon style="fill: #FFD83B;" points="128.128,99.944 154.496,153.4 213.472,161.96 170.8,203.56 180.864,262.296
-		128.128,234.568 75.376,262.296 85.44,203.56 42.768,161.96 101.744,153.4"/>
-	<polygon style="fill: #FFD83B;" points="276.864,82.84 290.528,110.552 321.104,114.984 298.976,136.552 304.208,166.984
-		276.864,152.616 249.52,166.984 254.752,136.552 232.624,114.984 263.2,110.552"/>
-</g>
-</svg>
diff --git a/src/assets/icons/sun.svg b/src/assets/icons/sun.svg
deleted file mode 100644
index a3997cb..0000000
--- a/src/assets/icons/sun.svg
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 60 60" style="enable-background: new 0 0 60 60;" xml:space="preserve">
-<g>
-	<path style="fill: #F0C419;" d="M30,0c-0.552,0-1,0.448-1,1v6c0,0.552,0.448,1,1,1s1-0.448,1-1V1C31,0.448,30.552,0,30,0z"/>
-	<path style="fill: #F0C419;" d="M30,52c-0.552,0-1,0.448-1,1v6c0,0.552,0.448,1,1,1s1-0.448,1-1v-6C31,52.448,30.552,52,30,52z"/>
-	<path style="fill: #F0C419;" d="M59,29h-6c-0.552,0-1,0.448-1,1s0.448,1,1,1h6c0.552,0,1-0.448,1-1S59.552,29,59,29z"/>
-	<path style="fill: #F0C419;" d="M8,30c0-0.552-0.448-1-1-1H1c-0.552,0-1,0.448-1,1s0.448,1,1,1h6C7.552,31,8,30.552,8,30z"/>
-	<path style="fill: #F0C419;" d="M46.264,14.736c0.256,0,0.512-0.098,0.707-0.293l5.736-5.736c0.391-0.391,0.391-1.023,0-1.414
-		s-1.023-0.391-1.414,0l-5.736,5.736c-0.391,0.391-0.391,1.023,0,1.414C45.752,14.639,46.008,14.736,46.264,14.736z"/>
-	<path style="fill: #F0C419;" d="M13.029,45.557l-5.736,5.736c-0.391,0.391-0.391,1.023,0,1.414C7.488,52.902,7.744,53,8,53
-		s0.512-0.098,0.707-0.293l5.736-5.736c0.391-0.391,0.391-1.023,0-1.414S13.42,45.166,13.029,45.557z"/>
-	<path style="fill: #F0C419;" d="M46.971,45.557c-0.391-0.391-1.023-0.391-1.414,0s-0.391,1.023,0,1.414l5.736,5.736
-		C51.488,52.902,51.744,53,52,53s0.512-0.098,0.707-0.293c0.391-0.391,0.391-1.023,0-1.414L46.971,45.557z"/>
-	<path style="fill: #F0C419;" d="M8.707,7.293c-0.391-0.391-1.023-0.391-1.414,0s-0.391,1.023,0,1.414l5.736,5.736
-		c0.195,0.195,0.451,0.293,0.707,0.293s0.512-0.098,0.707-0.293c0.391-0.391,0.391-1.023,0-1.414L8.707,7.293z"/>
-	<path style="fill: #F0C419;" d="M50.251,21.404c0.162,0.381,0.532,0.61,0.921,0.61c0.13,0,0.263-0.026,0.39-0.08l2.762-1.172
-		c0.508-0.216,0.746-0.803,0.53-1.311s-0.804-0.746-1.311-0.53l-2.762,1.172C50.272,20.309,50.035,20.896,50.251,21.404z"/>
-	<path style="fill: #F0C419;" d="M9.749,38.596c-0.216-0.508-0.803-0.746-1.311-0.53l-2.762,1.172
-		c-0.508,0.216-0.746,0.803-0.53,1.311c0.162,0.381,0.532,0.61,0.921,0.61c0.13,0,0.263-0.026,0.39-0.08l2.762-1.172
-		C9.728,39.691,9.965,39.104,9.749,38.596z"/>
-	<path style="fill: #F0C419;" d="M54.481,38.813L51.7,37.688c-0.511-0.207-1.095,0.041-1.302,0.553
-		c-0.207,0.512,0.041,1.095,0.553,1.302l2.782,1.124c0.123,0.049,0.25,0.073,0.374,0.073c0.396,0,0.771-0.236,0.928-0.626
-		C55.241,39.603,54.994,39.02,54.481,38.813z"/>
-	<path style="fill: #F0C419;" d="M5.519,21.188L8.3,22.312c0.123,0.049,0.25,0.073,0.374,0.073c0.396,0,0.771-0.236,0.928-0.626
-		c0.207-0.512-0.041-1.095-0.553-1.302l-2.782-1.124c-0.513-0.207-1.095,0.04-1.302,0.553C4.759,20.397,5.006,20.98,5.519,21.188z"
-		/>
-	<path style="fill: #F0C419;" d="M39.907,50.781c-0.216-0.508-0.803-0.745-1.311-0.53c-0.508,0.216-0.746,0.803-0.53,1.311
-		l1.172,2.762c0.162,0.381,0.532,0.61,0.921,0.61c0.13,0,0.263-0.026,0.39-0.08c0.508-0.216,0.746-0.803,0.53-1.311L39.907,50.781z"
-		/>
-	<path style="fill: #F0C419;" d="M21.014,9.829c0.13,0,0.263-0.026,0.39-0.08c0.508-0.216,0.746-0.803,0.53-1.311l-1.172-2.762
-		c-0.215-0.509-0.802-0.747-1.311-0.53c-0.508,0.216-0.746,0.803-0.53,1.311l1.172,2.762C20.254,9.6,20.625,9.829,21.014,9.829z"/>
-	<path style="fill: #F0C419;" d="M21.759,50.398c-0.511-0.205-1.095,0.04-1.302,0.553l-1.124,2.782
-		c-0.207,0.512,0.041,1.095,0.553,1.302c0.123,0.049,0.25,0.073,0.374,0.073c0.396,0,0.771-0.236,0.928-0.626l1.124-2.782
-		C22.519,51.188,22.271,50.605,21.759,50.398z"/>
-	<path style="fill: #F0C419;" d="M38.615,9.675c0.396,0,0.771-0.236,0.928-0.626l1.124-2.782c0.207-0.512-0.041-1.095-0.553-1.302
-		c-0.511-0.207-1.095,0.041-1.302,0.553L37.688,8.3c-0.207,0.512,0.041,1.095,0.553,1.302C38.364,9.651,38.491,9.675,38.615,9.675z"
-		/>
-</g>
-<circle style="fill: #F0C419;" cx="30" cy="30" r="20"/>
-<circle style="fill: #EDE21B;" cx="30" cy="30" r="15"/>
-</svg>
diff --git a/src/assets/icons/test.svg b/src/assets/icons/test.svg
deleted file mode 100644
index 244252d..0000000
--- a/src/assets/icons/test.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="60px" height="60px" viewBox="0 0 60 60" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <!-- Generator: Sketch 61 (89581) - https://sketch.com -->
-    <title>Icon1@3x</title>
-    <desc>Created with Sketch.</desc>
-    <g id="椤甸潰-2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="绯荤粺棣栭〉" transform="translate(-419.000000, -136.000000)" fill="#0593FF">
-            <g id="1" transform="translate(234.000000, 120.000000)">
-                <g id="Total-Users">
-                    <g id="Icon1" transform="translate(185.000000, 16.000000)">
-                        <path d="M23,60 C10.2974508,60 1.55561363e-15,49.7025492 0,37 L0,23 C-1.55561363e-15,10.2974508 10.2974508,2.33342044e-15 23,0 L37,0 C49.7025492,-2.33342044e-15 60,10.2974508 60,23 L60,37 C60,49.7025492 49.7025492,60 37,60 L23,60 Z" id="Circle-2" opacity="0.209999993"></path>
-                        <g id="Group" transform="translate(14.000000, 18.000000)" fill-rule="nonzero">
-                            <path d="M24,6.66666667 C26.209139,6.66666667 28,8.45752767 28,10.6666667 C28,12.8758057 26.209139,14.6666667 24,14.6666667 C21.790861,14.6666667 20,12.8758057 20,10.6666667 C20,8.45752767 21.790861,6.66666667 24,6.66666667 Z M12,0 C14.9455187,0 17.3333333,2.38781467 17.3333333,5.33333333 C17.3333333,8.278852 14.9455187,10.6666667 12,10.6666667 C9.05448133,10.6666667 6.66666667,8.278852 6.66666667,5.33333333 C6.66666667,2.38781467 9.05448133,0 12,0 Z" id="Combined-Shape" opacity="0.587820871"></path>
-                            <path d="M23.4686027,16.0012776 L23.3172917,16 C27.927838,16 31.7158139,18.2931929 31.9979916,23.2 C32.0092328,23.3954741 31.9979916,24 31.2745999,24 L26.1333333,24 L26.1333333,24 C26.1333333,20.9989578 25.1418595,18.2294867 23.4686027,16.0012776 Z M11.9777884,13.3333333 C18.3616218,13.3333333 23.6065116,16.3909238 23.9972191,22.9333333 C24.0127839,23.1939654 23.9972191,24 22.9955999,24 L0.97000297,24 L0.97000297,24 C0.635616207,24 -0.027282334,23.2789066 0.000868912387,22.932274 C0.517678033,16.5686878 5.6825498,13.3333333 11.9777884,13.3333333 Z" id="Combined-Shape"></path>
-                        </g>
-                    </g>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/src/assets/icons/total-sales.svg b/src/assets/icons/total-sales.svg
deleted file mode 100644
index eff7964..0000000
--- a/src/assets/icons/total-sales.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 445 271.8"><defs><style>.cls-1{fill:#32caf8;}.cls-2{fill:#00aaf8;opacity:0.5;}.cls-3{fill:#fff;}.cls-4{fill:#426572;}</style></defs><title>Asset 500</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><rect class="cls-1" x="6" y="8.17" width="433" height="259.8" rx="12" ry="12"/><path class="cls-2" d="M439,21.16V255a13,13,0,0,1-13,13H28.72l381-259.8H426A13,13,0,0,1,439,21.16Z"/><path class="cls-3" d="M328,33.24h88.92c3.86,0,3.87-6,0-6H328c-3.86,0-3.87,6,0,6Z"/><path class="cls-3" d="M283.49,33.24H312.6c3.86,0,3.87-6,0-6H283.49c-3.86,0-3.87,6,0,6Z"/><path class="cls-4" d="M427,271.8H18a18,18,0,0,1-18-18V18A18,18,0,0,1,18,0H427a18,18,0,0,1,18,18V253.8A18,18,0,0,1,427,271.8ZM18,12a6,6,0,0,0-6,6V253.8a6,6,0,0,0,6,6H427a6,6,0,0,0,6-6V18a6,6,0,0,0-6-6Z"/><rect class="cls-4" x="37.89" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="55.93" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="73.97" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="92.01" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="118.71" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="136.76" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="154.8" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="172.84" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="199.54" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="217.58" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="235.63" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="253.67" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="280.37" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="298.41" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="316.45" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="334.49" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="43.89" y="177.53" width="161.29" height="12"/><rect class="cls-4" x="43.89" y="204.59" width="68.2" height="12"/><circle class="cls-3" cx="379.46" cy="207.35" r="23.82"/><rect class="cls-3" x="43.89" y="36.31" width="72.53" height="47.63" rx="12" ry="12"/><path class="cls-4" d="M104.42,88.86H55.89a18,18,0,0,1-18-18V47.23a18,18,0,0,1,18-18h48.53a18,18,0,0,1,18,18V70.86A18,18,0,0,1,104.42,88.86ZM55.89,41.23a6,6,0,0,0-6,6V70.86a6,6,0,0,0,6,6h48.53a6,6,0,0,0,6-6V47.23a6,6,0,0,0-6-6Z"/><path class="cls-4" d="M379.46,241.49a29.81,29.81,0,1,1,29.82-29.82A29.85,29.85,0,0,1,379.46,241.49Zm0-47.63a17.81,17.81,0,1,0,17.82,17.81A17.84,17.84,0,0,0,379.46,193.86Z"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/icons/transaction.svg b/src/assets/icons/transaction.svg
deleted file mode 100644
index 7ba9e2f..0000000
--- a/src/assets/icons/transaction.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 392.49 390.69"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#f3aa9f;}.cls-3{fill:#e1978f;}.cls-4,.cls-6{fill:#426572;}.cls-5{fill:#e1d2d5;}.cls-6{font-size:100.43px;font-family:Dosis-ExtraBold, Dosis;font-weight:700;}</style></defs><title>Asset 480</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M383.9,162H199.69V2.19q4-.19,8.16-.19A176.87,176.87,0,0,1,383.9,162Z"/><path class="cls-2" d="M355.38,210a176.83,176.83,0,0,1-95.72,157.18l-.15.07A176.88,176.88,0,1,1,101.72,50.67l.15-.07a175.93,175.93,0,0,1,72.82-17.4V191H354.37A177.9,177.9,0,0,1,355.38,210Z"/><path class="cls-3" d="M357.53,212.16a176,176,0,0,1-17.44,76.66,1,1,0,0,1-.07.15A176.89,176.89,0,0,1,73.47,352.79l1.23.38q6,1.86,12.26,3.29A177,177,0,0,0,303.49,191h52.78A178.15,178.15,0,0,1,357.53,212.16Z"/><path class="cls-4" d="M182.85,390.69a182.87,182.87,0,0,1-84-345.31l.41-.2a180.59,180.59,0,0,1,75.13-20l6.27-.28V185H364.36l.51,5.44c.54,5.77.82,11.62.82,17.4a180.72,180.72,0,0,1-20.18,83.56c-.06.12-.12.26-.2.41a184.39,184.39,0,0,1-83,80.77l-.18.08,0,0A181.06,181.06,0,0,1,182.85,390.69ZM104.33,56.08A170.88,170.88,0,0,0,256.9,361.85l.17-.08,0,0a172.34,172.34,0,0,0,77.5-75.38l.15-.29a168.84,168.84,0,0,0,18.93-78.23c0-3.6-.11-7.23-.34-10.84H168.69V37.58a168.41,168.41,0,0,0-64.07,18.35Z"/><path class="cls-5" d="M382.9,158H309.11c-2.89-46.4-18.43-98.49-36.89-144.29l1.33.51a177.49,177.49,0,0,1,92.51,83.56A175.63,175.63,0,0,1,382.9,158Z"/><path class="cls-4" d="M392.49,172H195.69V.47L201.4.2C204.11.07,207,0,209.85,0a182.87,182.87,0,0,1,182,165.44Zm-184.8-12H379.18A170.89,170.89,0,0,0,209.85,12h-2.16Z"/><text class="cls-6" transform="translate(232.67 133.93)">%</text><path class="cls-1" d="M101.22,81.14a166.34,166.34,0,0,1,34.83-18c3.58-1.34,2-7.14-1.6-5.79A172.89,172.89,0,0,0,98.19,76c-3.18,2.15-.18,7.35,3,5.18Z"/><path class="cls-1" d="M36.28,166.34c2.62-8.63,6.74-16.94,11.05-24.83A180.58,180.58,0,0,1,87.86,91.34c2.93-2.52-1.33-6.75-4.24-4.24-23.3,20.06-44.07,47.84-53.12,77.65-1.12,3.7,4.67,5.29,5.79,1.6Z"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/icons/visit-count.svg b/src/assets/icons/visit-count.svg
deleted file mode 100644
index ba2a306..0000000
--- a/src/assets/icons/visit-count.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 419.23 419.23"><defs><style>.cls-1{fill:#fbc907;}.cls-2{fill:#f3a70f;}.cls-3{fill:#426572;}.cls-4,.cls-9{fill:#fff;}.cls-5{fill:#e8e8e8;}.cls-6{fill:#dadada;}.cls-7{opacity:0.1;}.cls-8{fill:#55e0ff;}.cls-9{opacity:0.4;}</style></defs><title>Asset 510</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><circle class="cls-1" cx="210.66" cy="209.62" r="203.61"/><path class="cls-2" d="M27.21,209.62A203.61,203.61,0,0,1,220.72,6.26q-5-.25-10.08-.25C98.19,4.86,6.11,95.09,5,207.54S94.05,412.07,206.5,413.21q2.07,0,4.13,0,5.06,0,10.08-.25A203.61,203.61,0,0,1,27.21,209.62Z"/><path class="cls-3" d="M209.61,419.23C94,419.23,0,325.19,0,209.61S94,0,209.61,0,419.23,94,419.23,209.61,325.19,419.23,209.61,419.23Zm0-407.23C100.65,12,12,100.65,12,209.61s88.65,197.61,197.61,197.61,197.61-88.65,197.61-197.61S318.58,12,209.61,12Z"/><path class="cls-4" d="M111.69,60.1a195,195,0,0,1,41.08-21.2c3.59-1.34,2-7.14-1.6-5.79a201.47,201.47,0,0,0-42.51,21.8c-3.18,2.15-.18,7.35,3,5.18Z"/><path class="cls-4" d="M35.09,160.61c3.09-10.2,8-20,13.05-29.32A212.37,212.37,0,0,1,95.87,72.18c2.93-2.52-1.33-6.75-4.24-4.24A217.08,217.08,0,0,0,43,128.26C37.63,138,32.54,148.34,29.31,159c-1.12,3.7,4.67,5.29,5.79,1.6Z"/><circle class="cls-5" cx="211.45" cy="212.12" r="156.89"/><path class="cls-6" d="M67.05,232.07a156.89,156.89,0,0,1,283.33-92.82A156.91,156.91,0,1,0,85,304.92,156.19,156.19,0,0,1,67.05,232.07Z"/><path class="cls-5" d="M211.32,152.25h0a9.16,9.16,0,0,1,9.16,9.16V210.5a9.16,9.16,0,0,1-9.16,9.16h0a9.16,9.16,0,0,1-9.16-9.16V161.41A9.16,9.16,0,0,1,211.32,152.25Z"/><circle class="cls-5" cx="211.14" cy="221.32" r="15.94"/><path class="cls-3" d="M210.48,92.62c6.29,0,6.29-9.77,0-9.77S204.19,92.62,210.48,92.62Z"/><path class="cls-3" d="M210.48,343.89c6.29,0,6.29-9.77,0-9.77S204.19,343.89,210.48,343.89Z"/><path class="cls-3" d="M339.84,218.25c6.29,0,6.29-9.77,0-9.77S333.55,218.25,339.84,218.25Z"/><path class="cls-3" d="M81.13,218.25c6.29,0,6.29-9.77,0-9.77S74.84,218.25,81.13,218.25Z"/><path class="cls-3" d="M205.56,153.32h0a9.16,9.16,0,0,1,9.16,9.16v49.09a9.16,9.16,0,0,1-9.16,9.16h0a9.16,9.16,0,0,1-9.16-9.16V162.49A9.16,9.16,0,0,1,205.56,153.32Z"/><circle class="cls-3" cx="205.38" cy="221.15" r="15.94"/><path class="cls-3" d="M135.78,272.58l135.16-89.89L290.11,170c5.22-3.46.33-11.94-4.92-8.44L150,251.4l-19.17,12.74C125.64,267.6,130.52,276.08,135.78,272.58Z"/><g class="cls-7"><ellipse class="cls-8" cx="210.2" cy="211.21" rx="156.89" ry="154.23"/></g><path class="cls-9" d="M243.13,60.17,84.37,301.88a162.18,162.18,0,0,1-18.58-47.29L193.5,60.21a153.88,153.88,0,0,1,49.67,0Z"/><path class="cls-9" d="M289.69,72.6,115.93,325.78a155.09,155.09,0,0,1-14.77-15L270,64.76A155.38,155.38,0,0,1,289.69,72.6Z"/><path class="cls-9" d="M362.16,171.75h0L232.51,360.68h0a160.93,160.93,0,0,1-42.54.43L346.63,132.84A151.63,151.63,0,0,1,362.16,171.75Z"/><path class="cls-3" d="M210.12,369.75c-89.82,0-162.89-71.88-162.89-160.23S120.31,49.29,210.12,49.29,373,121.17,373,209.52,299.94,369.75,210.12,369.75Zm0-308.46c-83.2,0-150.89,66.5-150.89,148.23s67.69,148.23,150.89,148.23S361,291.25,361,209.52,293.32,61.29,210.12,61.29Z"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/images/checkcode.png b/src/assets/images/checkcode.png
deleted file mode 100644
index 844fa70..0000000
--- a/src/assets/images/checkcode.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/cms_bpm.png b/src/assets/images/cms_bpm.png
deleted file mode 100644
index afac2cf..0000000
--- a/src/assets/images/cms_bpm.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/cms_oa.png b/src/assets/images/cms_oa.png
deleted file mode 100644
index 727d0c0..0000000
--- a/src/assets/images/cms_oa.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/daiban.png b/src/assets/images/daiban.png
deleted file mode 100644
index 19002c1..0000000
--- a/src/assets/images/daiban.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/demo.png b/src/assets/images/demo.png
deleted file mode 100644
index 1a45c98..0000000
--- a/src/assets/images/demo.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/2.png b/src/assets/images/dry/2.png
deleted file mode 100644
index 09af2d6..0000000
--- a/src/assets/images/dry/2.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg.png b/src/assets/images/dry/bg.png
deleted file mode 100644
index 54aa045..0000000
--- a/src/assets/images/dry/bg.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg/bg5.png b/src/assets/images/dry/bg/bg5.png
deleted file mode 100644
index 53d0186..0000000
--- a/src/assets/images/dry/bg/bg5.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg/wkshop.png b/src/assets/images/dry/bg/wkshop.png
deleted file mode 100644
index 969676a..0000000
--- a/src/assets/images/dry/bg/wkshop.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg/wkshopp.png b/src/assets/images/dry/bg/wkshopp.png
deleted file mode 100644
index 9aeeb45..0000000
--- a/src/assets/images/dry/bg/wkshopp.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg/wksp.png b/src/assets/images/dry/bg/wksp.png
deleted file mode 100644
index ec3742d..0000000
--- a/src/assets/images/dry/bg/wksp.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg/wksp1.png b/src/assets/images/dry/bg/wksp1.png
deleted file mode 100644
index d630927..0000000
--- a/src/assets/images/dry/bg/wksp1.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg/wksp2.png b/src/assets/images/dry/bg/wksp2.png
deleted file mode 100644
index 77b679e..0000000
--- a/src/assets/images/dry/bg/wksp2.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg/wkspbg.png b/src/assets/images/dry/bg/wkspbg.png
deleted file mode 100644
index c0109e6..0000000
--- a/src/assets/images/dry/bg/wkspbg.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg/wkspbg1.png b/src/assets/images/dry/bg/wkspbg1.png
deleted file mode 100644
index a38cee9..0000000
--- a/src/assets/images/dry/bg/wkspbg1.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg/wkspbg2.png b/src/assets/images/dry/bg/wkspbg2.png
deleted file mode 100644
index 01ca8a6..0000000
--- a/src/assets/images/dry/bg/wkspbg2.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg/wkspbg3.png b/src/assets/images/dry/bg/wkspbg3.png
deleted file mode 100644
index d47f748..0000000
--- a/src/assets/images/dry/bg/wkspbg3.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/bg/workshop.png b/src/assets/images/dry/bg/workshop.png
deleted file mode 100644
index 55210bb..0000000
--- a/src/assets/images/dry/bg/workshop.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/chaiwangban-1.gif b/src/assets/images/dry/chaiwangban-1.gif
deleted file mode 100644
index c9a3377..0000000
--- a/src/assets/images/dry/chaiwangban-1.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/chaiwangban-N.gif b/src/assets/images/dry/chaiwangban-N.gif
deleted file mode 100644
index 4ac03ae..0000000
--- a/src/assets/images/dry/chaiwangban-N.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/chaiwangban.gif b/src/assets/images/dry/chaiwangban.gif
deleted file mode 100644
index 65a6368..0000000
--- a/src/assets/images/dry/chaiwangban.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/chuliao-N.gif b/src/assets/images/dry/chuliao-N.gif
deleted file mode 100644
index 5266397..0000000
--- a/src/assets/images/dry/chuliao-N.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/chuliao.gif b/src/assets/images/dry/chuliao.gif
deleted file mode 100644
index f14834f..0000000
--- a/src/assets/images/dry/chuliao.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/chuliao1.gif b/src/assets/images/dry/chuliao1.gif
deleted file mode 100644
index 9a145ce..0000000
--- a/src/assets/images/dry/chuliao1.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/control/cam-close.png b/src/assets/images/dry/control/cam-close.png
deleted file mode 100644
index 0218b87..0000000
--- a/src/assets/images/dry/control/cam-close.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/control/cam.png b/src/assets/images/dry/control/cam.png
deleted file mode 100644
index bb963f1..0000000
--- a/src/assets/images/dry/control/cam.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/control/cam0.png b/src/assets/images/dry/control/cam0.png
deleted file mode 100644
index 1f285b9..0000000
--- a/src/assets/images/dry/control/cam0.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/control/cam1.png b/src/assets/images/dry/control/cam1.png
deleted file mode 100644
index c3a2695..0000000
--- a/src/assets/images/dry/control/cam1.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/control/light-close.png b/src/assets/images/dry/control/light-close.png
deleted file mode 100644
index 9c64966..0000000
--- a/src/assets/images/dry/control/light-close.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/control/light.png b/src/assets/images/dry/control/light.png
deleted file mode 100644
index 057ead2..0000000
--- a/src/assets/images/dry/control/light.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/fanliao-N.gif b/src/assets/images/dry/fanliao-N.gif
deleted file mode 100644
index b12eea8..0000000
--- a/src/assets/images/dry/fanliao-N.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/fanliao.gif b/src/assets/images/dry/fanliao.gif
deleted file mode 100644
index 5e5017f..0000000
--- a/src/assets/images/dry/fanliao.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/fengji.png b/src/assets/images/dry/fengji.png
deleted file mode 100644
index fa3bbc0..0000000
--- a/src/assets/images/dry/fengji.png
+++ /dev/null
Binary files differ
diff --git "a/src/assets/images/dry/fengjixuanzhuan - \345\211\257\346\234\254.psd" "b/src/assets/images/dry/fengjixuanzhuan - \345\211\257\346\234\254.psd"
deleted file mode 100644
index eb1fa81..0000000
--- "a/src/assets/images/dry/fengjixuanzhuan - \345\211\257\346\234\254.psd"
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/fengjixuanzhuan.gif b/src/assets/images/dry/fengjixuanzhuan.gif
deleted file mode 100644
index d1b1a25..0000000
--- a/src/assets/images/dry/fengjixuanzhuan.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/fengjixuanzhuan.psd b/src/assets/images/dry/fengjixuanzhuan.psd
deleted file mode 100644
index 0f4b5ed..0000000
--- a/src/assets/images/dry/fengjixuanzhuan.psd
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/fengjixz.gif b/src/assets/images/dry/fengjixz.gif
deleted file mode 100644
index 02cfa55..0000000
--- a/src/assets/images/dry/fengjixz.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/fengxiangsheng-1.gif b/src/assets/images/dry/fengxiangsheng-1.gif
deleted file mode 100644
index e04c675..0000000
--- a/src/assets/images/dry/fengxiangsheng-1.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/fengxiangsheng.gif b/src/assets/images/dry/fengxiangsheng.gif
deleted file mode 100644
index fdb7b14..0000000
--- a/src/assets/images/dry/fengxiangsheng.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/ganzaoji-x.png b/src/assets/images/dry/ganzaoji-x.png
deleted file mode 100644
index 3e91f09..0000000
--- a/src/assets/images/dry/ganzaoji-x.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/ganzaoji-z.png b/src/assets/images/dry/ganzaoji-z.png
deleted file mode 100644
index 03b23a8..0000000
--- a/src/assets/images/dry/ganzaoji-z.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/ganzaoji.gif b/src/assets/images/dry/ganzaoji.gif
deleted file mode 100644
index 19a834d..0000000
--- a/src/assets/images/dry/ganzaoji.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/ganzaoji.png b/src/assets/images/dry/ganzaoji.png
deleted file mode 100644
index 9af20d6..0000000
--- a/src/assets/images/dry/ganzaoji.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/gif.gif b/src/assets/images/dry/gif.gif
deleted file mode 100644
index 2942c05..0000000
--- a/src/assets/images/dry/gif.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/gif2.gif b/src/assets/images/dry/gif2.gif
deleted file mode 100644
index c587f9b..0000000
--- a/src/assets/images/dry/gif2.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/guanmen.gif b/src/assets/images/dry/guanmen.gif
deleted file mode 100644
index 6bd04b0..0000000
--- a/src/assets/images/dry/guanmen.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/guanmen1.gif b/src/assets/images/dry/guanmen1.gif
deleted file mode 100644
index e6214b4..0000000
--- a/src/assets/images/dry/guanmen1.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/kaimen-n.gif b/src/assets/images/dry/kaimen-n.gif
deleted file mode 100644
index 52ef015..0000000
--- a/src/assets/images/dry/kaimen-n.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/kaimen.gif b/src/assets/images/dry/kaimen.gif
deleted file mode 100644
index 2e9890c..0000000
--- a/src/assets/images/dry/kaimen.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/kaimen1.gif b/src/assets/images/dry/kaimen1.gif
deleted file mode 100644
index 2dfcfbc..0000000
--- a/src/assets/images/dry/kaimen1.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/liuliangji.png b/src/assets/images/dry/liuliangji.png
deleted file mode 100644
index 8b44d89..0000000
--- a/src/assets/images/dry/liuliangji.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/refeng.gif b/src/assets/images/dry/refeng.gif
deleted file mode 100644
index c7654c1..0000000
--- a/src/assets/images/dry/refeng.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/refeng2.gif b/src/assets/images/dry/refeng2.gif
deleted file mode 100644
index b0be798..0000000
--- a/src/assets/images/dry/refeng2.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/shangjiantou.gif b/src/assets/images/dry/shangjiantou.gif
deleted file mode 100644
index 75e8458..0000000
--- a/src/assets/images/dry/shangjiantou.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/shangjiantoutou.gif b/src/assets/images/dry/shangjiantoutou.gif
deleted file mode 100644
index 03871b3..0000000
--- a/src/assets/images/dry/shangjiantoutou.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/shangliao-1.gif b/src/assets/images/dry/shangliao-1.gif
deleted file mode 100644
index 105f046..0000000
--- a/src/assets/images/dry/shangliao-1.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/shangliao-N.gif b/src/assets/images/dry/shangliao-N.gif
deleted file mode 100644
index 45005f8..0000000
--- a/src/assets/images/dry/shangliao-N.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/shangliao.gif b/src/assets/images/dry/shangliao.gif
deleted file mode 100644
index e7b6585..0000000
--- a/src/assets/images/dry/shangliao.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/shebei1.png b/src/assets/images/dry/shebei1.png
deleted file mode 100644
index 442bc2a..0000000
--- a/src/assets/images/dry/shebei1.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/tmchaiwangban.gif b/src/assets/images/dry/tmchaiwangban.gif
deleted file mode 100644
index 4ac03ae..0000000
--- a/src/assets/images/dry/tmchaiwangban.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/tmchuliao1.gif b/src/assets/images/dry/tmchuliao1.gif
deleted file mode 100644
index e904d8f..0000000
--- a/src/assets/images/dry/tmchuliao1.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/tmfanliao.gif b/src/assets/images/dry/tmfanliao.gif
deleted file mode 100644
index b12eea8..0000000
--- a/src/assets/images/dry/tmfanliao.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/tmfengxiangsheng.gif b/src/assets/images/dry/tmfengxiangsheng.gif
deleted file mode 100644
index e04c675..0000000
--- a/src/assets/images/dry/tmfengxiangsheng.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/tmrefeng2.gif b/src/assets/images/dry/tmrefeng2.gif
deleted file mode 100644
index b6e9fa0..0000000
--- a/src/assets/images/dry/tmrefeng2.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/yaocai.jpg b/src/assets/images/dry/yaocai.jpg
deleted file mode 100644
index 8e95bf7..0000000
--- a/src/assets/images/dry/yaocai.jpg
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/yaocai/baihuasheshecao.png b/src/assets/images/dry/yaocai/baihuasheshecao.png
deleted file mode 100644
index 494e0be..0000000
--- a/src/assets/images/dry/yaocai/baihuasheshecao.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/yaocai/machixian.png b/src/assets/images/dry/yaocai/machixian.png
deleted file mode 100644
index 5b79945..0000000
--- a/src/assets/images/dry/yaocai/machixian.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/yaocai/mohanlian.png b/src/assets/images/dry/yaocai/mohanlian.png
deleted file mode 100644
index e76a9e1..0000000
--- a/src/assets/images/dry/yaocai/mohanlian.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/yaocai/mohanlian1.png b/src/assets/images/dry/yaocai/mohanlian1.png
deleted file mode 100644
index 2abfa03..0000000
--- a/src/assets/images/dry/yaocai/mohanlian1.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/yaocai/sangbaipi.png b/src/assets/images/dry/yaocai/sangbaipi.png
deleted file mode 100644
index 188f673..0000000
--- a/src/assets/images/dry/yaocai/sangbaipi.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/yaocai/sangbaipi1.png b/src/assets/images/dry/yaocai/sangbaipi1.png
deleted file mode 100644
index 748e829..0000000
--- a/src/assets/images/dry/yaocai/sangbaipi1.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/yaocai/yaocai1.png b/src/assets/images/dry/yaocai/yaocai1.png
deleted file mode 100644
index b969740..0000000
--- a/src/assets/images/dry/yaocai/yaocai1.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/yaocai/yinyanghuo.png b/src/assets/images/dry/yaocai/yinyanghuo.png
deleted file mode 100644
index bd88ed9..0000000
--- a/src/assets/images/dry/yaocai/yinyanghuo.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/yaocai/yinyanghuo1.png b/src/assets/images/dry/yaocai/yinyanghuo1.png
deleted file mode 100644
index 19fad9c..0000000
--- a/src/assets/images/dry/yaocai/yinyanghuo1.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/yaocai1.png b/src/assets/images/dry/yaocai1.png
deleted file mode 100644
index b969740..0000000
--- a/src/assets/images/dry/yaocai1.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/zanting.png b/src/assets/images/dry/zanting.png
deleted file mode 100644
index 6d9b552..0000000
--- a/src/assets/images/dry/zanting.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/zhuangwangban-1.gif b/src/assets/images/dry/zhuangwangban-1.gif
deleted file mode 100644
index b54a403..0000000
--- a/src/assets/images/dry/zhuangwangban-1.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/zhuangwangban-N.gif b/src/assets/images/dry/zhuangwangban-N.gif
deleted file mode 100644
index 8992c07..0000000
--- a/src/assets/images/dry/zhuangwangban-N.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/zhuangwangban.gif b/src/assets/images/dry/zhuangwangban.gif
deleted file mode 100644
index 1fd022b..0000000
--- a/src/assets/images/dry/zhuangwangban.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/dry/zuojiantou.gif b/src/assets/images/dry/zuojiantou.gif
deleted file mode 100644
index 0b5091b..0000000
--- a/src/assets/images/dry/zuojiantou.gif
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/duban.png b/src/assets/images/duban.png
deleted file mode 100644
index 1597486..0000000
--- a/src/assets/images/duban.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/guaz.png b/src/assets/images/guaz.png
deleted file mode 100644
index 7ba480f..0000000
--- a/src/assets/images/guaz.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/header.jpg b/src/assets/images/header.jpg
deleted file mode 100644
index 977584b..0000000
--- a/src/assets/images/header.jpg
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/lanpu.png b/src/assets/images/lanpu.png
deleted file mode 100644
index 81a1e13..0000000
--- a/src/assets/images/lanpu.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/link.png b/src/assets/images/link.png
deleted file mode 100644
index 4a0319c..0000000
--- a/src/assets/images/link.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png
deleted file mode 100644
index 81a1e13..0000000
--- a/src/assets/images/logo.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/nodata.png b/src/assets/images/nodata.png
deleted file mode 100644
index 2cebdb3..0000000
--- a/src/assets/images/nodata.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/panel_cover.png b/src/assets/images/panel_cover.png
deleted file mode 100644
index faf0065..0000000
--- a/src/assets/images/panel_cover.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/pdf4.jpg b/src/assets/images/pdf4.jpg
deleted file mode 100644
index 10166e0..0000000
--- a/src/assets/images/pdf4.jpg
+++ /dev/null
Binary files differ
diff --git a/src/assets/images/zaiban.png b/src/assets/images/zaiban.png
deleted file mode 100644
index 46b1f6e..0000000
--- a/src/assets/images/zaiban.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/less/JAreaLinkage.less b/src/assets/less/JAreaLinkage.less
deleted file mode 100644
index 4fea722..0000000
--- a/src/assets/less/JAreaLinkage.less
+++ /dev/null
@@ -1,258 +0,0 @@
-.area-zoom-in-top-enter-active,
-.area-zoom-in-top-leave-active {
-  opacity: 1;
-  transform: scaleY(1);
-}
-
-.area-zoom-in-top-enter,
-.area-zoom-in-top-leave-active {
-  opacity: 0;
-  transform: scaleY(0);
-}
-
-.area-select {
-  box-sizing: border-box;
-  margin: 0;
-  padding: 0;
-  color: rgba(0, 0, 0, 0.65);
-  font-size: 14px;
-  font-variant: tabular-nums;
-  line-height: 1.5;
-  list-style: none;
-  font-feature-settings: 'tnum';
-  position: relative;
-  outline: 0;
-  display: block;
-  background-color: #fff;
-  border: 1px solid #d9d9d9;
-  border-top-width: 1.02px;
-  border-radius: 4px;
-  outline: none;
-  transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
-  -webkit-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-
-.area-select-wrap .area-select {
-  display: inline-block;
-}
-
-.area-select * {
-  box-sizing: border-box;
-}
-
-.area-select:hover {
-  border-color: #40a9ff;
-  border-right-width: 1px !important;
-  outline: 0;
-}
-
-.area-select:active {
-  box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
-}
-
-.area-select.small {
-  width: 126px;
-}
-
-.area-select.medium {
-  width: 160px;
-}
-
-.area-select.large {
-  width: 194px;
-}
-
-.area-select.is-disabled {
-  background: #eceff5;
-  cursor: not-allowed;
-}
-
-.area-select.is-disabled:hover {
-  border-color: #e1e2e6;
-}
-
-.area-select.is-disabled .area-selected-trigger {
-  cursor: not-allowed;
-}
-
-.area-select .area-selected-trigger {
-  position: relative;
-  display: block;
-  font-size: 14px;
-  cursor: pointer;
-  margin: 0;
-  overflow: hidden;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  height: 100%;
-  padding: 8px 20px 7px 12px;
-}
-
-.area-select .area-select-icon {
-  position: absolute;
-  top: 50%;
-  margin-top: -2px;
-  right: 6px;
-  content: '';
-  width: 0;
-  height: 0;
-  border: 6px solid transparent;
-  border-top-color: rgba(0, 0, 0, 0.25);
-  transition: all 0.3s linear;
-  transform-origin: center;
-}
-
-.area-select .area-select-icon.active {
-  margin-top: -8px;
-  transform: rotate(180deg);
-}
-
-.area-selectable-list-wrap {
-  position: absolute;
-  width: 100%;
-  max-height: 275px;
-  z-index: 15000;
-  background-color: #fff;
-  box-sizing: border-box;
-  overflow-x: auto;
-  margin: 2px 0;
-  border-radius: 4px;
-  outline: none;
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
-
-  transition: opacity 0.15s, transform 0.3s !important;
-  transform-origin: center top !important;
-}
-
-.area-selectable-list {
-  position: relative;
-  margin: 0;
-  padding: 6px 0;
-  width: 100%;
-  font-size: 14px;
-  color: #565656;
-  list-style: none;
-}
-
-.area-selectable-list .area-select-option {
-  position: relative;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  cursor: pointer;
-  padding: 0 15px 0 10px;
-  height: 32px;
-  line-height: 32px;
-}
-
-.area-selectable-list .area-select-option.hover {
-  background-color: #e6f7ff;
-}
-
-.area-selectable-list .area-select-option.selected {
-  color: rgba(0, 0, 0, 0.65);
-  font-weight: 600;
-  background-color: #efefef;
-}
-
-.cascader-menu-list-wrap {
-  position: absolute;
-  white-space: nowrap;
-  z-index: 15000;
-  background-color: #fff;
-  box-sizing: border-box;
-  overflow: hidden;
-  font-size: 0;
-  margin: 2px 0;
-  border-radius: 4px;
-  outline: none;
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
-
-  transition: opacity 0.15s, transform 0.3s !important;
-  transform-origin: center top !important;
-}
-
-.cascader-menu-list {
-  position: relative;
-  margin: 0;
-  font-size: 14px;
-  color: #565656;
-  padding: 6px 0;
-  list-style: none;
-  display: inline-block;
-  height: 204px;
-  overflow-x: hidden;
-  overflow-y: auto;
-  min-width: 160px;
-  vertical-align: top;
-  background-color: #fff;
-  border-right: 1px solid #e4e7ed;
-}
-
-.cascader-menu-list:last-child {
-  border-right: none;
-}
-
-.cascader-menu-list .cascader-menu-option {
-  position: relative;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  cursor: pointer;
-  padding: 0 15px 0 10px;
-  height: 32px;
-  line-height: 32px;
-}
-
-.cascader-menu-list .cascader-menu-option.hover,
-.cascader-menu-list .cascader-menu-option:hover {
-  background-color: #e6f7ff;
-}
-
-.cascader-menu-list .cascader-menu-option.selected {
-  color: rgba(0, 0, 0, 0.65);
-  font-weight: 600;
-  background-color: #efefef;
-}
-
-.cascader-menu-list .cascader-menu-option.cascader-menu-extensible:after {
-  position: absolute;
-  top: 50%;
-  margin-top: -4px;
-  right: 5px;
-  content: '';
-  width: 0;
-  height: 0;
-  border: 4px solid transparent;
-  border-left-color: #a1a4ad;
-}
-
-.cascader-menu-list::-webkit-scrollbar,
-.area-selectable-list-wrap::-webkit-scrollbar {
-  width: 8px;
-  background: transparent;
-}
-
-.area-selectable-list-wrap::-webkit-scrollbar-button:vertical:decremen,
-.area-selectable-list-wrap::-webkit-scrollbar-button:vertical:end:decrement,
-.area-selectable-list-wrap::-webkit-scrollbar-button:vertical:increment,
-.area-selectable-list-wrap::-webkit-scrollbar-button:vertical:start:increment,
-.cascader-menu-list::-webkit-scrollbar-button:vertical:decremen,
-.cascader-menu-list::-webkit-scrollbar-button:vertical:end:decrement,
-.cascader-menu-list::-webkit-scrollbar-button:vertical:increment,
-.cascader-menu-list::-webkit-scrollbar-button:vertical:start:increment {
-  display: none;
-}
-
-.cascader-menu-list::-webkit-scrollbar-thumb:vertical,
-.area-selectable-list-wrap::-webkit-scrollbar-thumb:vertical {
-  background-color: #b8b8b8;
-  border-radius: 4px;
-}
-
-.cascader-menu-list::-webkit-scrollbar-thumb:vertical:hover,
-.area-selectable-list-wrap::-webkit-scrollbar-thumb:vertical:hover {
-  background-color: #777;
-}
diff --git a/src/assets/loginmini/icon/dryer-front.png b/src/assets/loginmini/icon/dryer-front.png
deleted file mode 100644
index b0fef26..0000000
--- a/src/assets/loginmini/icon/dryer-front.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/dryer.png b/src/assets/loginmini/icon/dryer.png
deleted file mode 100644
index 1e15935..0000000
--- a/src/assets/loginmini/icon/dryer.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/icon-code.png b/src/assets/loginmini/icon/icon-code.png
deleted file mode 100644
index 142d3ab..0000000
--- a/src/assets/loginmini/icon/icon-code.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/icon-eye-g.png b/src/assets/loginmini/icon/icon-eye-g.png
deleted file mode 100644
index 8cf83d6..0000000
--- a/src/assets/loginmini/icon/icon-eye-g.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/icon-eye-k.png b/src/assets/loginmini/icon/icon-eye-k.png
deleted file mode 100644
index e1cacb0..0000000
--- a/src/assets/loginmini/icon/icon-eye-k.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/icon-line-msg.png b/src/assets/loginmini/icon/icon-line-msg.png
deleted file mode 100644
index 08e7bea..0000000
--- a/src/assets/loginmini/icon/icon-line-msg.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/icon-line-pad.png b/src/assets/loginmini/icon/icon-line-pad.png
deleted file mode 100644
index 2aaccec..0000000
--- a/src/assets/loginmini/icon/icon-line-pad.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/icon-line-tel.png b/src/assets/loginmini/icon/icon-line-tel.png
deleted file mode 100644
index c3efe1c..0000000
--- a/src/assets/loginmini/icon/icon-line-tel.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/icon-line-user.png b/src/assets/loginmini/icon/icon-line-user.png
deleted file mode 100644
index 30a280c..0000000
--- a/src/assets/loginmini/icon/icon-line-user.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/icon-password.png b/src/assets/loginmini/icon/icon-password.png
deleted file mode 100644
index edf6d31..0000000
--- a/src/assets/loginmini/icon/icon-password.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/icon-success.png b/src/assets/loginmini/icon/icon-success.png
deleted file mode 100644
index aa3a233..0000000
--- a/src/assets/loginmini/icon/icon-success.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/icon-user.png b/src/assets/loginmini/icon/icon-user.png
deleted file mode 100644
index 968fc1a..0000000
--- a/src/assets/loginmini/icon/icon-user.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/icon_dow.png b/src/assets/loginmini/icon/icon_dow.png
deleted file mode 100644
index 03d928d..0000000
--- a/src/assets/loginmini/icon/icon_dow.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/jeecg_ad.png b/src/assets/loginmini/icon/jeecg_ad.png
deleted file mode 100644
index 19a2583..0000000
--- a/src/assets/loginmini/icon/jeecg_ad.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/jeecg_ad_text.png b/src/assets/loginmini/icon/jeecg_ad_text.png
deleted file mode 100644
index 8725482..0000000
--- a/src/assets/loginmini/icon/jeecg_ad_text.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/jeecg_bg.png b/src/assets/loginmini/icon/jeecg_bg.png
deleted file mode 100644
index b1bb62f..0000000
--- a/src/assets/loginmini/icon/jeecg_bg.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/jeecg_logo.png b/src/assets/loginmini/icon/jeecg_logo.png
deleted file mode 100644
index 109687f..0000000
--- a/src/assets/loginmini/icon/jeecg_logo.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/lanpu_logo.png b/src/assets/loginmini/icon/lanpu_logo.png
deleted file mode 100644
index b0dc752..0000000
--- a/src/assets/loginmini/icon/lanpu_logo.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/icon/logo.png b/src/assets/loginmini/icon/logo.png
deleted file mode 100644
index ad1cb65..0000000
--- a/src/assets/loginmini/icon/logo.png
+++ /dev/null
Binary files differ
diff --git a/src/assets/loginmini/style/base.less b/src/assets/loginmini/style/base.less
deleted file mode 100644
index c6777c7..0000000
--- a/src/assets/loginmini/style/base.less
+++ /dev/null
@@ -1,365 +0,0 @@
-::-webkit-input-placeholder {
-  /* WebKit browsers */
-  color: #868686;
-  font-size: 15px;
-}
-
-::-moz-placeholder {
-  /* Mozilla Firefox 19+ */
-  color: #868686;
-  font-size: 15px;
-}
-
-:-ms-input-placeholder {
-  /* Internet Explorer 10+ */
-  color: #868686;
-  font-size: 15px;
-}
-
-input:-webkit-autofill {
-  transition: background-color 5000s ease-in-out 0s;
-}
-
-html {
-  scroll-behavior: smooth;
-}
-
-html,
-body {
-  color: #333;
-  margin: 0;
-  height: 100%;
-  font-family: 'Myriad Set Pro', 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  font-weight: normal;
-}
-
-* {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-
-a {
-  text-decoration: none;
-  color: #000;
-}
-
-a,
-label,
-button,
-input,
-select {
-  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-
-img {
-  max-width: 100%;
-  height: auto;
-  display: block;
-  border: 0;
-}
-
-body {
-  background: #e3f0ff;
-  color: #666;
-}
-
-html,
-body,
-div,
-dl,
-dt,
-dd,
-ol,
-ul,
-li,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-p,
-blockquote,
-pre,
-button,
-fieldset,
-form,
-input,
-legend,
-textarea,
-th,
-td {
-  margin: 0;
-  padding: 0;
-}
-
-a {
-  text-decoration: none;
-  color: #08acee;
-}
-
-button {
-  outline: 0;
-}
-
-button,
-input,
-optgroup,
-select,
-textarea {
-  margin: 0;
-  font: inherit;
-  color: inherit;
-  outline: none;
-}
-
-li {
-  list-style: none;
-}
-
-a {
-  color: #666;
-}
-
-.clearfix::after {
-  clear: both;
-  content: '.';
-  display: block;
-  height: 0;
-  visibility: hidden;
-}
-
-.clearfix {
-}
-
-.divHeight {
-  width: 100%;
-  height: 10px;
-  background: #f5f5f5;
-  position: relative;
-  overflow: hidden;
-}
-
-.r-line {
-  position: relative;
-}
-
-.r-line:after {
-  content: '';
-  position: absolute;
-  z-index: 0;
-  top: 0;
-  right: 0;
-  height: 100%;
-  border-right: 1px solid #d9d9d9;
-  -webkit-transform: scaleX(0.5);
-  transform: scaleX(0.5);
-  -webkit-transform-origin: 100% 0;
-  transform-origin: 100% 0;
-}
-
-.b-line {
-  position: relative;
-}
-
-.b-line:after {
-  content: '';
-  position: absolute;
-  z-index: 2;
-  bottom: 0;
-  left: 0;
-  width: 100%;
-  height: 1px;
-  border-bottom: 1px solid #dedede;
-  -webkit-transform: scaleY(0.5);
-  transform: scaleY(0.5);
-  -webkit-transform-origin: 0 100%;
-  transform-origin: 0 100%;
-}
-
-.aui-arrow {
-  position: relative;
-  padding-right: 0.8rem;
-}
-
-.aui-arrow span {
-  font-size: 0.8rem;
-  color: #9b9b9b;
-}
-
-.aui-arrow:after {
-  content: ' ';
-  display: inline-block;
-  height: 6px;
-  width: 6px;
-  border-width: 2px 2px 0 0;
-  border-color: #848484;
-  border-style: solid;
-  -webkit-transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0);
-  transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0);
-  position: relative;
-  position: absolute;
-  top: 50%;
-  margin-top: -4px;
-  right: 2px;
-  border-radius: 1px;
-}
-
-.aui-flex {
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: flex;
-  -webkit-box-align: center;
-  -webkit-align-items: center;
-  align-items: center;
-  position: relative;
-}
-
-.aui-flex-box {
-  -webkit-box-flex: 1;
-  -webkit-flex: 1;
-  flex: 1;
-  min-width: 0;
-  font-size: 14px;
-  color: #333;
-}
-
-/* 蹇呰甯冨眬鏍峰紡css */
-.aui-flexView {
-  width: 100%;
-  height: 100%;
-  margin: 0 auto;
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-  -webkit-flex-direction: column;
-  -ms-flex-direction: column;
-  flex-direction: column;
-}
-
-.aui-scrollView {
-  width: 100%;
-  height: 100%;
-  -webkit-box-flex: 1;
-  -webkit-flex: 1;
-  -ms-flex: 1;
-  flex: 1;
-  overflow-y: auto;
-  overflow-x: hidden;
-  -webkit-overflow-scrolling: touch;
-  position: relative;
-  padding-bottom: 53px;
-}
-
-.aui-navBar {
-  height: 44px;
-  position: relative;
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  z-index: 102;
-  background-color: #5064eb;
-}
-
-.aui-navBar-item {
-  height: 44px;
-  min-width: 15%;
-  -webkit-box-flex: 0;
-  -webkit-flex: 0 0 15%;
-  -ms-flex: 0 0 15%;
-  flex: 0 0 15%;
-  padding: 0 0.9rem;
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-align: center;
-  -webkit-align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  font-size: 0.7rem;
-  white-space: nowrap;
-  overflow: hidden;
-  color: #808080;
-  position: relative;
-}
-
-.aui-navBar-item:first-child {
-  -webkit-box-ordinal-group: 2;
-  -webkit-order: 1;
-  -ms-flex-order: 1;
-  order: 1;
-  margin-right: -25%;
-  font-size: 0.9rem;
-  font-weight: bold;
-}
-
-.aui-navBar-item:last-child {
-  -webkit-box-ordinal-group: 4;
-  -webkit-order: 3;
-  -ms-flex-order: 3;
-  order: 3;
-  -webkit-box-pack: end;
-  -webkit-justify-content: flex-end;
-  -ms-flex-pack: end;
-  justify-content: flex-end;
-}
-
-.aui-center {
-  -webkit-box-ordinal-group: 3;
-  -webkit-order: 2;
-  -ms-flex-order: 2;
-  order: 2;
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-pack: center;
-  -webkit-justify-content: center;
-  -ms-flex-pack: center;
-  justify-content: center;
-  -webkit-box-align: center;
-  -webkit-align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  height: 44px;
-  width: 80%;
-  margin-left: 22%;
-}
-
-.aui-center-title {
-  text-align: center;
-  width: 100%;
-  white-space: nowrap;
-  overflow: hidden;
-  display: block;
-  text-overflow: ellipsis;
-  font-size: 0.95rem;
-  color: #fff;
-  font-weight: 500;
-}
-
-.icon {
-  width: 20px;
-  height: 20px;
-  display: block;
-  border: none;
-  float: left;
-  background-size: 20px;
-  background-repeat: no-repeat;
-  position: relative;
-}
-
-.login-background-img {
-  background-image: url(../icon/jeecg_bg.png);
-  background-size: cover;
-  background-position: top center;
-  background-repeat: no-repeat;
-}
diff --git a/src/assets/loginmini/style/home.less b/src/assets/loginmini/style/home.less
deleted file mode 100644
index b7e6fc1..0000000
--- a/src/assets/loginmini/style/home.less
+++ /dev/null
@@ -1,617 +0,0 @@
-.aui-content {
-  padding: 40px 60px;
-  min-height: 100vh;
-}
-
-.aui-container {
-  max-width: 1000px;
-  margin: 0 auto;
-  box-shadow: 0 4px 8px 1px rgba(0, 0, 0, 0.2);
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  width: 92%;
-  height: auto;
-  -webkit-transform: translateX(-50%) translateY(-50%);
-  -moz-transform: translateX(-50%) translateY(-50%);
-  -ms-transform: translateX(-50%) translateY(-50%);
-  transform: translateX(-50%) translateY(-50%);
-  -webkit-transform: translateX(-50%) translateY(-50%);
-}
-
-.aui-form {
-  width: 100%;
-  background: #eee;
-  display: -webkit-box;
-  display: -moz-box;
-  display: -ms-flexbox;
-  display: -webkit-flex;
-  display: flex;
-}
-
-.aui-image {
-  padding: 68px 45px;
-  flex-basis: 60%;
-  -webkit-flex-basis: 60%;
-  background-color: #0198cd;
-  background-image: url(/src/assets/loginmini/icon/dryer.png);
-  background-size: 148%;
-  background-position-x: -166px;
-  background-position-y: 30px;
-  background-repeat: no-repeat;
-  color: white;
-  font-size: 26px;
-}
-
-.aui-image-text {
-  top: 50%;
-  left: 50%;
-  width: 100%;
-}
-
-.aui-formBox {
-  flex-basis: 40%;
-  -webkit-flex-basis: 40%;
-  box-sizing: border-box;
-  padding: 30px 20px;
-  background: #fff;
-  box-shadow: 2px 9px 49px -17px rgba(0, 0, 0, 0.1);
-}
-
-.aui-logo {
-  width: 180px;
-  height: 80px;
-  position: absolute;
-  top: 2%;
-  left: 8%;
-  z-index: 4;
-}
-
-.aui-account-line {
-  padding-top: 20px;
-  padding-bottom: 40px;
-}
-
-.aui-code-line {
-  position: absolute;
-  right: 0;
-  top: 0;
-  border-left: 3px solid #fff;
-  height: 42px;
-  padding: 0 15px;
-  line-height: 40px;
-  font-size: 14px;
-  cursor: pointer;
-}
-
-.aui-eye {
-  position: absolute;
-  right: 20px;
-  top: 10px;
-  width: 20px;
-  cursor: pointer;
-}
-
-.aui-input-line {
-  background: #f5f5f9;
-  border-radius: 2px;
-  position: relative;
-  margin: 12px 0;
-}
-
-.aui-input-line input {
-  width: 100%;
-  padding: 12px 10px;
-  border: none;
-  color: #333333;
-  font-size: 14px;
-  background: unset;
-  padding-left: 40px;
-}
-
-.aui-input-line .icon {
-  position: absolute;
-  top: 10px;
-  left: 10px;
-}
-
-.icon-line-user {
-  background-image: url(../icon/icon-line-user.png);
-}
-
-.icon-line-tel {
-  background-image: url(../icon/icon-line-tel.png);
-}
-
-.icon-line-msg {
-  background-image: url(../icon/icon-line-msg.png);
-}
-
-.icon-line-pad {
-  background-image: url(../icon/icon-line-pad.png);
-}
-
-.aui-forgot .aui-input-line input {
-  padding-left: 20px;
-}
-
-.aui-forgot .aui-input-line {
-  background: none;
-  border: 1px solid #dbdbdb;
-  border-radius: 2px;
-}
-
-.aui-forgot .aui-input-line:focus {
-  border-color: #1b90ff;
-}
-
-.aui-forgot .aui-input-line:hover {
-  border-color: #1b90ff;
-}
-
-.aui-forgot .aui-input-line .aui-code-line {
-  border-left: 1px solid #dbdbdb;
-  height: 40px;
-  color: #1b90ff;
-}
-
-.aui-step-box {
-  width: 100%;
-  height: auto;
-  position: relative;
-  overflow: hidden;
-  margin-top: 50px;
-  margin-bottom: 20px;
-}
-
-.aui-step-box::after {
-  position: absolute;
-  top: 20px;
-  left: 50%;
-  width: 76%;
-  margin-left: -38%;
-  height: 1px;
-  background: #bcbcbc;
-  content: '';
-}
-
-.aui-step-item {
-  width: 33.333%;
-  float: left;
-  text-align: center;
-  position: relative;
-  z-index: 2;
-}
-
-.aui-step-tags em {
-  width: 40px;
-  height: 40px;
-  border: 8px solid #fff;
-  line-height: 1.3;
-  border-radius: 100px;
-  background: #bcbcbc;
-  display: block;
-  margin: 0 auto;
-  font-style: normal;
-  color: #fff;
-  font-size: 19px;
-  font-weight: 500;
-}
-
-.aui-step-tags p {
-  font-size: 14px;
-  color: #bcbcbc;
-}
-
-.activeStep .aui-step-tags em {
-  background: #1b90ff;
-}
-
-.activeStep .aui-step-tags p {
-  color: #1b90ff;
-}
-
-.aui-success {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  height: 80px;
-  width: 100%;
-  margin-top: -40px;
-  margin-left: -50%;
-}
-
-.aui-success-icon {
-  width: 40px;
-  margin: 0 auto;
-}
-
-.aui-success h3 {
-  width: 100%;
-  text-align: center;
-  color: #515151;
-  font-size: 18px;
-  padding-top: 20px;
-}
-
-.aui-form-nav {
-  text-align: center;
-  padding-bottom: 20px;
-}
-
-.aui-form-nav .aui-flex-box {
-  color: #040404;
-  font-size: 18px;
-  font-weight: 500;
-  cursor: pointer;
-}
-
-.aui-clear-left {
-  text-align: left;
-}
-
-.aui-clear-left .activeNav::after {
-  left: 18px;
-}
-
-.activeNav {
-  position: relative;
-}
-
-.activeNav::after {
-  content: '';
-  position: absolute;
-  z-index: 0;
-  bottom: -10px;
-  left: 50%;
-  margin-left: -15px;
-  width: 30px;
-  height: 4px;
-  background: #1b90ff;
-  border-radius: 100px;
-}
-
-.phone .aui-inputClear {
-  padding-left: 0;
-}
-
-.phone .aui-inputClear input {
-  //padding-left: 1px;
-}
-
-.phone .aui-inputClear .aui-code {
-  text-align: right;
-  width: auto;
-  bottom: 10px;
-}
-
-.phone .aui-inputClear .aui-code a {
-  color: #1b90ff;
-  font-size: 14px;
-}
-
-.phoneChina {
-  position: absolute;
-  bottom: 10px;
-  left: 0;
-  font-size: 14px;
-  color: #040404;
-}
-
-.phoneChina::after {
-  position: absolute;
-  right: -25px;
-  bottom: 0;
-  content: '';
-  background-image: url(../icon/icon_dow.png);
-  background-size: 18px;
-  width: 18px;
-  height: 18px;
-}
-
-.phoneChina:before {
-  position: absolute;
-  right: -42px;
-  bottom: -15px;
-  content: ' ';
-  background: #fff;
-  width: 18px;
-  height: 18px;
-}
-
-.aui-ewm {
-  width: 280px;
-  margin: 0 auto;
-}
-
-.aui-formEwm {
-  padding: 50px 40px 55px 40px;
-}
-
-.aui-inputClear {
-  width: 100%;
-  border-bottom: 1px solid #cccccc;
-  position: relative;
-  padding-left: 20px;
-  background: #fff;
-  margin-bottom: 8px;
-  margin-top: 20px;
-}
-
-.aui-inputClear .icon {
-  position: absolute;
-  top: 10px;
-  left: 0;
-}
-
-.aui-inputClear input {
-  width: 100%;
-  padding: 10px;
-  border: none;
-  color: #333333;
-  font-size: 14px;
-  background: none;
-}
-
-.aui-code {
-  position: absolute;
-  right: 8px;
-  bottom: 0;
-  width: 115px;
-  cursor: pointer;
-}
-
-.icon-code {
-  background-image: url(../icon/icon-user.png);
-}
-
-.icon-password {
-  background-image: url(../icon/icon-password.png);
-}
-
-.icon-code {
-  background-image: url(../icon/icon-code.png);
-}
-
-.aui-inputClear:focus {
-  border-bottom: 1px solid #1b90ff;
-}
-
-.aui-inputClear:hover {
-  border-bottom: 1px solid #1b90ff;
-}
-
-.aui-choice {
-  position: relative;
-  font-size: 12px;
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: flex;
-  -webkit-box-align: center;
-  -webkit-align-items: center;
-  align-items: center;
-  position: relative;
-  color: #040404;
-}
-
-.aui-choice input {
-  width: 14px;
-  height: 14px;
-  cursor: pointer;
-}
-
-.aui-forget a {
-  color: #1b90ff;
-  font-size: 12px;
-}
-
-.aui-forget a:hover {
-  text-decoration: underline;
-}
-
-.aui-formButton {
-  padding-top: 10px;
-}
-
-.aui-formButton a {
-  height: 42px;
-  padding: 10px 15px;
-  font-size: 14px;
-  border-radius: 8px;
-  border-color: #67b5ff;
-  background: #1b90ff;
-  width: 100%;
-  cursor: pointer;
-  border: none;
-  color: #fff;
-  margin: 8px 0;
-  display: block;
-  text-align: center;
-}
-
-.aui-formButton a:focus {
-  opacity: 0.9;
-}
-
-.aui-formButton a:hover {
-  opacity: 0.9;
-}
-
-.aui-formButton .aui-linek-code {
-  background: #fff;
-  color: #3c3c3c;
-  border: 1px solid #dbdbdb;
-}
-
-.aui-formButton .aui-linek-code:hover {
-  color: #1b90ff;
-  border: 1px solid #1b90ff;
-}
-
-.aui-third-text {
-  font-size: 12px;
-  color: #3c3c3c;
-  margin-top: 25px;
-  margin-bottom: 25px;
-}
-
-.aui-third-text span {
-  color: #afafaf;
-  display: block;
-  width: 38%;
-  margin: 0 auto;
-  text-align: center;
-  position: relative;
-  background: #fff;
-  z-index: 100;
-  font-size: 12px;
-}
-
-.aui-third-border {
-  position: relative;
-}
-
-.aui-third-border::after {
-  content: '';
-  position: absolute;
-  z-index: 0;
-  top: 8px;
-  left: 0;
-  width: 100%;
-  height: 1px;
-  border-top: 1px solid #d9d9d9;
-  -webkit-transform: scaleY(0.5);
-  transform: scaleY(0.5);
-  -webkit-transform-origin: 0 100%;
-  transform-origin: 0 100%;
-}
-
-.aui-third-login {
-  width: 30px;
-  height: 30px;
-  margin: 0 auto;
-  border-radius: 100px;
-}
-
-.aui-third-login a {
-  font-size: 22px;
-  margin: 0 auto;
-  border-radius: 100px;
-  display: inline-block;
-  color: #888;
-}
-
-.aui-third-login a:hover {
-  color: #1b90ff;
-  cursor: pointer;
-}
-
-.aui-third-login:hover {
-  cursor: pointer;
-}
-
-@media (max-width: 320px) {
-  .aui-form {
-    flex-direction: column;
-  }
-
-  .aui-image {
-    order: 2;
-    display: none;
-  }
-
-  .aui-container {
-    width: 100%;
-    max-width: 550px;
-    margin-top: 10px;
-  }
-
-  .aui-content {
-    justify-content: initial;
-    width: 100%;
-    padding: 20px;
-  }
-}
-
-@media (min-width: 321px) and (max-width: 375px) {
-  .aui-form {
-    flex-direction: column;
-  }
-
-  .aui-image {
-    order: 2;
-    display: none;
-  }
-
-  .aui-container {
-    width: 90%;
-    max-width: 550px;
-  }
-
-  .aui-content {
-    justify-content: initial;
-    width: 100%;
-    padding: 20px;
-  }
-}
-
-@media (min-width: 375px) and (max-width: 425px) {
-  .aui-form {
-    flex-direction: column;
-  }
-
-  .aui-image {
-    order: 2;
-    display: none;
-  }
-
-  .aui-container {
-    width: 90%;
-    max-width: 550px;
-  }
-
-  .aui-content {
-    justify-content: initial;
-    width: 100%;
-    padding: 40px;
-  }
-}
-
-@media (min-width: 425px) and (max-width: 768px) {
-  .aui-form {
-    flex-direction: column;
-  }
-
-  .aui-image {
-    order: 2;
-    display: none;
-  }
-
-  .aui-container {
-    width: 90%;
-    max-width: 550px;
-  }
-
-  .aui-content {
-    justify-content: initial;
-    width: 100%;
-    padding: 40px;
-  }
-
-  .aui-step-box::after {
-    width: 70%;
-    margin-left: -35%;
-  }
-}
-
-@media only screen and (max-width: 767px) {
-  .aui-logo {
-    top: 3%;
-  }
-}
-
-@media screen and (max-width: 300px) {
-  .aui-logo {
-    top: 3%;
-  }
-}
diff --git a/src/assets/svg/fileType/excel.svg b/src/assets/svg/fileType/excel.svg
deleted file mode 100644
index debdb36..0000000
--- a/src/assets/svg/fileType/excel.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="175" height="200"><path fill="#448AFF" d="M-59.667 49.583v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.333c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-195.708 66.622h13.228l13.436 56.874h.208l15.002-56.874h13.334l14.584 56.874h.208l13.854-56.874h13.228l-20.52 74.376h-13.232l-14.892-56.876h-.212l-15.206 56.876h-13.44z"/><path fill="#62BB37" d="M175 49.584v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0 191.668V8.334C0 3.75 3.708 0 8.334 0h117.124L175 49.584z"/><path fill="#FFF" d="M55.206 66.625H70.73l16.874 26.25 17.602-26.25h14.584l-24.582 35.833L121.562 141h-15.836l-18.538-28.438L68.332 141H53.436l26.354-38.542z"/><path fill="#F57C00" d="M396.989 49.581v142.084c0 4.624-3.75 8.332-8.334 8.332H230.323a8.304 8.304 0 0 1-8.334-8.332V8.331c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M280.429 66.622h32.812c5.274 0 9.582.766 12.914 2.292 3.334 1.53 5.9 3.438 7.708 5.728 1.806 2.292 3.038 4.794 3.698 7.5.66 2.71.988 5.208.988 7.5 0 2.294-.328 4.776-.988 7.45-.66 2.672-1.892 5.156-3.698 7.446-1.808 2.29-4.374 4.186-7.708 5.676-3.332 1.498-7.64 2.242-12.914 2.242h-19.792v28.54h-13.02V66.622zm13.02 35.21h19.06c1.46 0 2.954-.212 4.48-.626a12.867 12.867 0 0 0 4.218-2.032c1.286-.94 2.328-2.188 3.126-3.75.798-1.564 1.196-3.524 1.196-5.884 0-2.43-.346-4.444-1.042-6.042-.692-1.596-1.632-2.866-2.812-3.802-1.18-.94-2.534-1.578-4.06-1.928-1.53-.346-3.162-.52-4.896-.52h-19.27v24.584z"/><path fill="#448AFF" d="M842.467 49.581v142.084c0 4.624-3.75 8.332-8.334 8.332H675.801a8.304 8.304 0 0 1-8.334-8.332V8.331c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M720.811 64.727h14.3l19.69 62.15h.22l20.13-62.15h13.97l-26.84 78.54h-15.288z"/><path fill="#29D3B2" d="M617.477 49.582v142.082c0 4.625-3.751 8.334-8.334 8.334H450.811a8.306 8.306 0 0 1-8.334-8.334V8.333c0-4.584 3.709-8.334 8.334-8.334h117.125l49.541 49.583z"/><path fill="#FFF" d="M494.866 56.625h70.225v13.121H537.51v73.626h-15.186V69.746h-27.458z"/><path fill="#F57C00" d="M-58.667 316.034v143.708c0 4.677-3.793 8.427-8.429 8.427h-160.141a8.398 8.398 0 0 1-8.429-8.427v-185.43c0-4.636 3.75-8.429 8.429-8.429h118.462l50.108 50.151z"/><path fill="#FFF" d="M-104.807 339.919l-33.729 33.73 3.75 4.19 28.869-28.868zM-166.156 363.755c-23.634 23.634-31.372 45.44-31.372 45.44s21.806-7.738 45.44-31.372l4.072-4.074-14.068-14.066-4.072 4.072zM-143.229 368.96l-14.068-14.068 38.406-38.406 14.068 14.068zM-197.528 413.402h92.707v6.274h-92.707z"/><path fill="#62BB37" d="M175 316.611v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0 458.695V275.361c0-4.584 3.708-8.334 8.334-8.334h117.124L175 316.611z"/><path fill="#FFF" d="M39.498 359.393h22.914v41.894H39.498zM76.042 319.735h22.914v81.552H76.042zM112.586 343.699H135.5v57.588h-22.914zM39.498 412.525H135.5v6.2H39.498z"/><path fill="#448AFF" d="M408.38 316.609v142.084c0 4.624-3.75 8.332-8.334 8.332H241.714a8.304 8.304 0 0 1-8.334-8.332V275.359c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M275.515 372.827v-41.732c0-4.466 3.654-8.12 8.12-8.12h74.49c4.466 0 8.12 3.654 8.12 8.12v41.732M275.514 380.21h90.73v8.12h-90.73zM299.194 413.564h43.368v8.12h-43.368z"/><path fill="#FFF" d="M316.818 383.077h8.12v34.55h-8.12z"/><path fill="#718BC8" d="M629.721 316.609v142.084c0 4.624-3.75 8.332-8.334 8.332H463.055a8.304 8.304 0 0 1-8.334-8.332V275.359c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M542.221 303.026c-27.614 0-50 22.386-50 50s22.386 50 50 50 50-22.386 50-50-22.386-50-50-50zm0 64.584c-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584 0 8.054-6.53 14.584-14.584 14.584zM519.154 445.239h-4.702v-3.046h-.086c-.668 1.306-1.64 2.242-2.916 2.806a9.85 9.85 0 0 1-4.048.85c-1.77 0-3.316-.312-4.634-.936-1.322-.624-2.418-1.472-3.288-2.546-.872-1.072-1.524-2.342-1.958-3.808-.436-1.466-.654-3.04-.654-4.724 0-2.028.276-3.786.828-5.264.55-1.482 1.284-2.7 2.198-3.658.914-.958 1.958-1.66 3.134-2.11a9.96 9.96 0 0 1 3.59-.676c.698 0 1.406.066 2.134.196a9.66 9.66 0 0 1 2.09.63 8.33 8.33 0 0 1 1.848 1.112 6.16 6.16 0 0 1 1.416 1.588h.086v-11.49h4.962v31.076zm-17.324-11.012c0 .958.124 1.902.37 2.83a7.78 7.78 0 0 0 1.132 2.482 5.727 5.727 0 0 0 1.938 1.74c.782.434 1.71.652 2.784.652 1.104 0 2.054-.23 2.852-.696a5.892 5.892 0 0 0 1.958-1.828 8.278 8.278 0 0 0 1.132-2.546c.246-.942.37-1.908.37-2.894 0-2.496-.558-4.44-1.676-5.834-1.116-1.392-2.632-2.088-4.548-2.088-1.162 0-2.14.24-2.938.718a5.983 5.983 0 0 0-1.958 1.872 7.755 7.755 0 0 0-1.088 2.612 13.58 13.58 0 0 0-.328 2.98M526.727 422.737h4.702v3.132h.128c.378-.55.784-1.058 1.22-1.522.434-.464.92-.856 1.458-1.176a7.466 7.466 0 0 1 1.85-.762c.698-.188 1.494-.282 2.394-.282 1.364 0 2.634.306 3.808.914 1.176.608 2.01 1.554 2.504 2.828.84-1.158 1.812-2.074 2.916-2.74 1.102-.668 2.482-1.002 4.136-1.002 2.378 0 4.228.58 5.55 1.74 1.318 1.162 1.978 3.106 1.978 5.834v15.538h-4.962v-13.146c0-.898-.03-1.718-.086-2.458-.06-.74-.226-1.378-.502-1.916a2.836 2.836 0 0 0-1.24-1.24c-.55-.29-1.306-.434-2.264-.434-1.68 0-2.9.522-3.654 1.566-.756 1.046-1.132 2.524-1.132 4.44v13.188h-4.962v-14.45c0-1.568-.282-2.75-.85-3.548-.566-.796-1.602-1.196-3.112-1.196a4.54 4.54 0 0 0-1.85.392 4.595 4.595 0 0 0-1.566 1.13c-.45.494-.812 1.104-1.088 1.828-.278.728-.414 1.554-.414 2.482v13.362h-4.962v-22.502zM587.574 444.064c0 3.396-.95 5.928-2.85 7.596-1.9 1.67-4.636 2.502-8.204 2.502-1.134 0-2.272-.116-3.418-.346a10.209 10.209 0 0 1-3.134-1.176 7.541 7.541 0 0 1-2.37-2.178c-.64-.9-1.018-2-1.134-3.308h4.962c.146.698.392 1.262.742 1.7.346.434.76.776 1.24 1.02a4.658 4.658 0 0 0 1.586.48c.582.072 1.192.108 1.83.108 2.002 0 3.468-.492 4.396-1.48.928-.984 1.392-2.408 1.392-4.266v-3.436h-.086c-.696 1.246-1.646 2.22-2.852 2.916a7.647 7.647 0 0 1-3.896 1.044c-1.798 0-3.328-.312-4.59-.936a8.733 8.733 0 0 1-3.134-2.568c-.828-1.088-1.43-2.344-1.808-3.764-.376-1.422-.566-2.946-.566-4.57 0-1.508.234-2.946.698-4.31s1.132-2.56 2.002-3.592a9.628 9.628 0 0 1 3.2-2.46c1.262-.608 2.69-.912 4.286-.912 1.422 0 2.728.298 3.918.892 1.19.596 2.102 1.53 2.742 2.808h.086v-3.09h4.962v21.326zm-11.012-2.742c1.104 0 2.038-.224 2.808-.674a5.532 5.532 0 0 0 1.872-1.784 7.844 7.844 0 0 0 1.044-2.524c.218-.942.326-1.894.326-2.852s-.116-1.886-.346-2.786c-.234-.9-.588-1.698-1.068-2.394a5.142 5.142 0 0 0-1.872-1.654c-.768-.404-1.69-.608-2.764-.608-1.104 0-2.032.23-2.786.694a5.575 5.575 0 0 0-1.826 1.808 7.74 7.74 0 0 0-1.002 2.524 13.25 13.25 0 0 0-.306 2.808c0 .93.118 1.834.35 2.72.23.886.588 1.676 1.066 2.374a5.669 5.669 0 0 0 1.828 1.696c.74.436 1.632.652 2.676.652"/><path fill="#D32F2F" d="M842.467 604.638v142.084c0 4.624-3.75 8.332-8.334 8.332H675.801a8.304 8.304 0 0 1-8.334-8.332V563.388c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F6F4F4" d="M753.453 632.684c.758 0 .758 0 0 0 .758-3.03 1.516-4.544 1.516-6.816v-1.514c.756-3.786.756-6.816 0-7.572v-.758l-.758-.758s0 .758-.758.758c-1.514 4.544-1.514 9.844 0 16.66m-22.716 52.25c-1.516.756-3.03 1.514-3.786 2.27-5.302 4.544-9.088 9.846-9.844 12.118 4.542-.758 9.086-5.302 13.63-14.388.756 0 .756 0 0 0 .756 0 0 0 0 0m69.666-11.36c-.756-.756-3.786-3.028-14.388-3.028h-1.514v.758c5.3 2.27 10.602 3.786 14.388 3.786H801.161v-.758s-.758 0-.758-.758m3.03 6.058c-1.516.758-3.786 1.516-6.816 1.516-6.058 0-15.146-1.516-22.718-5.302-12.872 1.514-22.716 3.03-30.29 6.058-.756 0-.756 0-1.514.758-9.086 15.902-16.66 23.474-22.718 23.474-1.514 0-2.27 0-3.028-.756l-3.786-2.272v-.758c-.758-1.514-.758-2.272-.758-3.786.758-3.786 5.302-10.602 14.388-15.902 1.514-.758 3.786-2.272 6.816-3.786 2.27-3.786 4.542-8.33 7.572-13.63 3.786-7.574 6.058-15.146 8.328-21.96-3.028-9.088-4.542-14.388-1.512-24.99.756-3.03 3.028-6.058 6.056-6.058h1.516c1.514 0 3.028.758 4.542 1.514 5.302 5.302 3.03 17.416 0 27.26v.758c3.03 8.33 7.574 15.146 12.116 19.688 2.272 1.516 3.786 3.03 6.816 4.544 3.786 0 6.816-.756 9.844-.756 9.088 0 15.146 1.514 17.416 5.3.758 1.514.758 3.028.758 4.544-.758.756-1.514 3.028-3.028 4.542M754.211 650.1c-1.514 5.3-4.544 11.358-7.572 18.174-1.514 3.03-3.03 5.3-4.544 8.33h1.514c9.844-3.786 18.932-6.058 24.99-6.816-1.514-.756-2.272-1.514-3.03-2.272-3.786-4.542-8.328-10.6-11.358-17.416"/><path fill="#5465FC" d="M-59.671 604.639v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V563.389c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-185.922 623.326c4.224-.768 10.081-1.344 18.047-1.344 8.641 0 14.977 1.824 19.107 5.28 3.84 3.168 6.336 8.256 6.336 14.305 0 6.144-1.92 11.231-5.57 14.687-4.704 4.704-12.096 6.914-20.447 6.914-2.21 0-4.224-.096-5.762-.386v24.387h-11.712v-63.843zm11.711 30.144c1.44.384 3.362.48 5.762.48 8.832 0 14.207-4.32 14.207-11.903 0-7.202-4.992-11.041-13.153-11.041-3.264 0-5.568.288-6.816.576v21.888zM-135.334 676.319c2.69 1.632 7.777 3.362 12.001 3.362 5.184 0 7.488-2.114 7.488-5.186 0-3.168-1.92-4.799-7.68-6.816-9.119-3.168-12.959-8.159-12.863-13.633 0-8.255 6.816-14.687 17.663-14.687 5.184 0 9.696 1.344 12.385 2.784l-2.304 8.352c-2.016-1.152-5.762-2.688-9.89-2.688-4.224 0-6.527 2.016-6.527 4.896 0 2.978 2.208 4.416 8.159 6.53 8.448 3.072 12.385 7.392 12.481 14.303 0 8.45-6.623 14.593-19.009 14.593-5.664 0-10.753-1.346-14.207-3.266l2.303-8.544z"/><path fill="#F57C00" d="M156.35 604.638v142.084c0 4.624-3.75 8.332-8.334 8.332H-10.316a8.304 8.304 0 0 1-8.334-8.332V563.388c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M47.875 669.839l-5.568 18.337H30.114l20.739-64.707h15.073l21.023 64.707H74.277l-5.856-18.337H47.875zm18.529-8.928l-5.088-15.937c-1.248-3.936-2.304-8.354-3.264-12.097h-.192c-.96 3.744-1.92 8.258-3.074 12.097l-4.992 15.937h16.61zM107.586 628.366c0 3.552-2.592 6.336-6.72 6.336-3.938 0-6.53-2.784-6.53-6.336 0-3.648 2.69-6.434 6.624-6.434 4.034 0 6.53 2.786 6.626 6.434m-12.578 13.057h11.905v46.754H95.008v-46.754z"/><path fill="#C11187" d="M629.717 604.638v142.084c0 4.624-3.75 8.332-8.334 8.332H463.051a8.304 8.304 0 0 1-8.334-8.332V563.388c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M508.042 623.901h11.807v64.707h-11.807zM576.007 620.445v55.011c0 4.798.194 9.983.386 13.151h-10.561l-.48-7.392h-.192c-2.784 5.182-8.448 8.448-15.263 8.448-11.137 0-19.971-9.505-19.971-23.905-.096-15.649 9.698-24.961 20.931-24.961 6.432 0 11.042 2.688 13.151 6.144h.192v-26.497h11.807zM564.2 661.343c0-.96-.096-2.114-.288-3.074-1.056-4.608-4.8-8.351-10.175-8.351-7.584 0-11.809 6.719-11.809 15.457 0 8.544 4.226 14.783 11.714 14.783 4.8 0 9.023-3.264 10.177-8.352.286-1.056.382-2.208.382-3.456v-7.007z"/><path fill="#F57C00" d="M408.375 604.638v142.084c0 4.624-3.75 8.332-8.334 8.332H241.709a8.304 8.304 0 0 1-8.334-8.332V563.388c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F57C00" d="M310.073 619.961h21.999v21.999h-21.999z"/><path fill="#FFF" d="M367.873 648.46v-5.5h-23.791c7.5 5.298 14.101 13.349 19.571 24.041 7.678 15.011 10.454 29.8 10.566 30.422l-7.866 1.448c-.09-.484-8.178-42.534-33.412-53.021v4.978h-23.735v-4.978c-25.237 10.49-33.324 52.537-33.412 53.021l-7.868-1.448c.114-.622 2.888-15.411 10.568-30.422 5.47-10.691 12.071-18.743 19.571-24.041h-24.187v5.5h-18.999v-18.999h18.999v5.5h35.328v-7.867h23.735v7.867h34.932v-5.5h18.999v18.999h-18.999zm-39.8-16.499h-13.999v13.999h13.999v-13.999z"/><path fill="#C11187" d="M842.467 862.664v142.084c0 4.624-3.75 8.332-8.334 8.332H675.801a8.304 8.304 0 0 1-8.334-8.332V821.414c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><g fill="#FFF"><path d="M743.257 945.443l-6.76-12.408c-2.686-4.816-4.444-8.15-6.204-11.76h-.278c-1.482 3.61-3.148 6.944-5.648 11.76l-6.206 12.408h-13.056l18.52-31.576-17.78-30.836H718.9l6.762 12.872c2.036 3.888 3.518 6.944 5.186 10.464h.184c1.668-3.89 2.964-6.668 4.908-10.464l6.666-12.872h13.056l-18.24 30.466 18.982 31.946h-13.147zM804.459 879.698v53.06c0 4.628.186 9.63.37 12.686h-10.186l-.462-7.13h-.184c-2.688 4.998-8.15 8.148-14.724 8.148-10.742 0-19.262-9.168-19.262-23.056-.092-15.094 9.352-24.078 20.188-24.078 6.204 0 10.65 2.594 12.686 5.928h.184v-25.558h11.39zm-11.39 39.448c0-.926-.092-2.038-.276-2.964-1.02-4.444-4.632-8.056-9.818-8.056-7.314 0-11.388 6.482-11.388 14.908 0 8.242 4.074 14.26 11.296 14.26 4.63 0 8.706-3.148 9.816-8.054.278-1.02.37-2.132.37-3.336v-6.758z"/></g><path fill="#A0F" d="M156.355 862.665v142.084c0 4.624-3.75 8.332-8.334 8.332H-10.311a8.304 8.304 0 0 1-8.334-8.332V821.415c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M110.343 874.917H29.495l-14.14 31.298 54.564 62.868 54.562-62.868-14.138-31.298zm-3.72 6.926l8.282 20.65h-14.884l6.602-20.65zm-7.058-.33l-6.042 19.378-15.102-19.378h21.144zm-14.072 20.98h-31.15l15.576-19.814 15.574 19.814zm-24.078-20.98l-15.1 19.378-6.044-19.378h21.144zm-28.202.33l6.602 20.65H24.931l8.282-20.65zm-6.632 27.244h16.126l16.454 37.538-32.58-37.538zm23.326 0H89.929l-20.01 45.652-20.012-45.652zm30.768 37.54l16.454-37.538h16.126l-32.58 37.538z"/><path fill="#D32F2F" d="M407.859 862.664v142.084c0 4.634-3.724 8.332-8.282 8.332H242.181c-4.608 0-8.28-3.698-8.28-8.332V821.414c0-4.584 3.698-8.334 8.28-8.334h116.408l49.27 49.584z"/><path fill="#FFF" d="M370.345 887.701c.579.149 1.173.25 1.734.453 1.728.628 2.294 2.07 2.253 3.887-.056 2.523-.229 5.022-.935 7.483-1.308 4.549-4.119 7.567-8.195 9.358-2.871 1.261-5.893 1.72-8.935 2.076-2.098.243-4.193.535-6.287.821-.28.038-.561.149-.823.272-1.119.519-1.41 1.537-.582 2.444a21.79 21.79 0 0 0 2.803 2.557c3.754 2.883 7.615 5.62 11.301 8.595 4.167 3.362 7.819 7.291 10.595 12.06 2.726 4.684 4.108 9.789 3.925 15.378-.048 1.475-.722 2.326-2.111 2.396-2.159.107-4.32.122-6.479.143-2.682.024-5.362.014-8.044.02-2.732.004-5.466.002-8.201.012-1.952.006-3.905.032-5.857.034a18.846 18.846 0 0 1-1.714-.072c-2.436-.213-3.34-1.159-3.585-3.744-.35-3.664-.907-7.263-2.306-10.649-2.35-5.696-6.167-9.981-11.098-13.207-4.259-2.785-8.891-4.531-13.923-4.972-4.961-.436-9.579.553-13.287 4.575-2.241 2.43-3.477 5.428-4.342 8.621-.392 1.445-.734 2.905-1.165 4.336-.491 1.626-1.811 1.96-3.147 2.006-2.916.099-5.831.099-8.746.125-2.682.024-5.362.028-8.044.042-2.473.014-4.947.052-7.418.03-.646-.006-1.294-.153-1.924-.308-.936-.227-1.314-.779-1.261-1.781.328-6.092 2.74-11.054 7.364-14.82 3.811-3.102 8.145-5.034 12.694-6.352 4.315-1.251 8.696-2.227 13.042-3.356 1.219-.316 2.443-.656 3.614-1.135 1.873-.766 2.179-2.022.7-3.4-1.419-1.326-3.006-2.479-4.623-3.529-4.352-2.825-8.839-5.428-12.798-8.873-4.062-3.535-7.462-7.615-9.315-12.969-.974-2.817-1.38-5.744-1.374-8.754 0-1.155.557-2.05 1.783-2.34a21.883 21.883 0 0 1 4.406-.573c3.332-.09 6.664-.052 9.996-.058 2.682-.004 5.364.01 8.044.008 1.98 0 3.958-.02 5.937-.016.909.002 1.819.046 2.73.066 1.533.034 2.197.543 2.491 2.141.348 1.889.584 3.803.885 5.704 1.078 6.814 3.632 12.766 8.76 17.178 3.527 3.036 7.639 4.449 12.194 4.646 2.382.102 4.744.068 7.046-.751 3.547-1.261 5.269-4.096 4.937-8.018-.151-1.813-.272-3.63-.382-5.446-.074-1.235.312-1.982 1.469-2.207 1.451-.284 2.946-.38 4.418-.403 2.942-.042 5.883.03 8.825.044 2.68.01 5.362-.01 8.042.012 1.638.012 3.273.074 4.911.114l.002.096"/><path fill="#D32F2F" d="M629.721 862.664v142.084c0 4.624-3.75 8.332-8.334 8.332H463.055a8.304 8.304 0 0 1-8.334-8.332V821.414c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><g fill="#FFF"><path d="M552.337 992.754s-.022-23.724 0-30.064c0-.318-.008-.636 0-.952.07-3.12 1.69-4.742 4.84-4.752 6.614-.02 13.226 0 19.84 0 5.562 0 8.37-2.794 8.372-8.35.002-22.692-.008-45.384.008-68.078.002-3.048-1.018-5.546-3.796-6.986-1.046-.542-2.326-.878-3.502-.88a23363.06 23363.06 0 0 0-72.018-.05c-3.896.002-6.908 3.018-7.108 6.962-.046.904-.01 1.812-.01 2.718v66.582c0 5.096 3.012 8.082 8.12 8.08 11.776-.006 35.328-.002 35.328-.002v9.812s-23.946-.008-36.04.008c-2.722.002-5.344-.46-7.734-1.76-5.898-3.212-9.34-8.042-9.346-14.932-.024-23.372.092-46.744-.07-70.114-.05-7.154 5.04-15.584 14.712-17.022a18.82 18.82 0 0 1 2.704-.2c23.916-.024 47.83-.042 71.746-.05 9-.004 16.8 7.706 16.812 16.718.034 23.462.034 46.924.006 70.388-.012 9.346-7.282 17.056-16.64 17.254-4.708.098-9.422.056-14.13.014-1.088-.01-2.122 1.36-2.122 1.36l-9.972 24.296z"/><path d="M525.976 902.34v2.236c.002 11.594.006 23.186.006 34.778 0 1.808-.004 1.814-1.772 1.814-3.432.004-6.864.002-10.436.002-.036-.67-.09-1.194-.09-1.716-.004-16.03.014-32.062-.03-48.092-.004-1.318.376-1.672 1.672-1.656 5.432.068 10.868.076 16.302-.008 1.324-.02 1.76.446 2.066 1.66 2.618 10.354 5.304 20.69 7.972 31.032.12.466.272.922.734 1.436.158-.416.358-.824.47-1.252 2.75-10.552 5.506-21.1 8.212-31.664.244-.948.66-1.198 1.582-1.194 5.616.016 11.23.01 16.844-.068 1.212-.016 1.53.366 1.528 1.544-.034 16.168-.034 32.334.002 48.5.004 1.182-.31 1.582-1.52 1.548-3.214-.092-6.43-.056-9.644-.082-.398-.004-.792-.07-1.36-.124V902.49l-.38-.072c-.148.432-.32.86-.442 1.3-3.336 12.034-6.678 24.068-9.978 36.114-.276 1.008-.706 1.394-1.766 1.36-2.398-.074-4.802-.08-7.2-.002-1.094.036-1.586-.296-1.884-1.388-3.3-12.09-6.654-24.168-9.996-36.246-.116-.42-.266-.832-.4-1.248-.164.012-.328.022-.492.032"/></g><path fill="#A0F" d="M-59.667 862.664v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V821.414c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-194.223 883.831c4.416-.768 11.04-1.344 17.856-1.344 9.314 0 15.65 1.536 19.972 5.184 3.55 2.976 5.568 7.488 5.568 12.962 0 8.352-5.666 14.016-11.714 16.224v.29c4.608 1.726 7.394 6.238 9.024 12.48 2.018 8.064 3.744 15.554 5.09 18.05h-12.194c-.96-1.92-2.496-7.202-4.32-15.266-1.824-8.45-4.896-11.136-11.616-11.328h-5.954v26.594h-11.712v-63.846zm11.712 28.61h7.01c7.968 0 12.96-4.224 12.96-10.656 0-7.104-4.992-10.37-12.674-10.37-3.744 0-6.144.288-7.296.576v20.45zM-139.6 883.831c4.224-.768 10.08-1.344 18.048-1.344 8.642 0 14.978 1.824 19.108 5.28 3.84 3.168 6.336 8.256 6.336 14.306 0 6.144-1.92 11.232-5.57 14.688-4.704 4.704-12.096 6.914-20.448 6.914-2.21 0-4.224-.096-5.762-.386v24.388H-139.6v-63.846zm11.712 30.146c1.442.384 3.362.48 5.762.48 8.832 0 14.208-4.32 14.208-11.904 0-7.202-4.992-11.042-13.154-11.042-3.264 0-5.568.288-6.816.576v21.89z"/><path fill="#7757BC" d="M-59.667 1120.689v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-180.499 1184.253l-5.408 17.81h-11.842l20.142-62.846h14.64l20.42 62.846h-12.31l-5.686-17.81h-19.956zm17.996-8.671l-4.942-15.48c-1.212-3.822-2.238-8.112-3.17-11.748h-.186c-.932 3.636-1.866 8.02-2.984 11.748l-4.85 15.48h16.132zM-127.355 1182.574c.28 8.206 6.714 11.75 13.986 11.75 5.316 0 9.14-.746 12.588-2.052l1.678 7.926c-3.914 1.586-9.322 2.798-15.85 2.798-14.732 0-23.404-9.046-23.404-22.94 0-12.586 7.646-24.428 22.192-24.428 14.732 0 19.58 12.122 19.58 22.098 0 2.146-.186 3.824-.372 4.848h-30.398zm19.954-8.018c.096-4.196-1.772-11.096-9.416-11.096-7.086 0-10.07 6.434-10.538 11.096h19.954z"/><path fill="#009497" d="M156.355 1120.691v142.084c0 4.624-3.75 8.332-8.334 8.332H-10.311a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M68.855 1121.709l32.85 40.88v57.67h21.9v-69.35zM14.105 1220.259h21.9v-57.67l32.85-40.88-54.75 29.2z"/><path fill="#FFF" d="M68.855 1217.339l22.63-24.554-22.63-71.076-23.36 71.076z"/><path fill="#D32F2F" d="M-59.667 1378.716V1520.8c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-126.028 1453.022h-42.28v-42.278h42.28v42.278zm8-50.278h-58.28v58.278h58.28v-58.278z"/><path fill="#FFF" d="M-154.742 1424.308h15.15v15.15h-15.15zM-152.096 1375.392h9.856v29.25h-9.856zM-152.096 1458.974h9.856v29.4h-9.856zM-120.834 1426.954h30.158v9.856h-30.158zM-203.658 1426.954h29.492v9.856h-29.492z"/><path fill="#03A9F4" d="M629.721 1378.715v142.084c0 4.624-3.75 8.332-8.334 8.332H463.055a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M542.221 1485.524l-49.5-27.692v-54.016l49.5-23.076 49.5 23.076v54.016l-49.5 27.692zm-40.5-32.97l40.5 22.658 40.5-22.658v-43.004l-40.5-18.88-40.5 18.88v43.004z"/><path fill="#FFF" d="M542.2 1436.505l-47.176-26.392 4.394-7.856 42.824 23.958 42.816-23.478 4.327 7.892z"/><path fill="#FFF" d="M542.221 1484.868a4.502 4.502 0 0 1-4.5-4.5v-49.008c0-2.484 2.016-4.5 4.5-4.5s4.5 2.016 4.5 4.5v49.008c0 2.484-2.016 4.5-4.5 4.5"/><path fill="#546E7A" d="M396.989 1378.715v142.084c0 4.624-3.75 8.332-8.334 8.332H230.323a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M366.012 1436.93c-.66-7.46-2.24-13.22-5-18.12-2.88-5.12-6.56-8.7-11.22-11-4.46-2.18-9.44-3.54-16.18-4.4-6.22-.8-12.78-1.02-20.98-.66-3.18.14-6.9.34-10.48.92-3.74.58-6.44 1.26-8.8 2.22-5 2.06-8.96 5.96-12.12 11.96-1.84 3.48-2.92 7.62-3.32 12.64-.58 7.4-.22 12.98 1.14 18.1.76 2.82 1.86 5.02 3.36 6.72 3.62 4.08 8.42 6.76 15.54 8.7 2.48.68 5.06 1.04 7.28 1.3 6.22.76 11.32.46 16.12-.96 5.34-1.58 10.2-3.9 14.48-6.92 2.18-1.54 4.24-3.42 6.12-5.22.62-.6.74-.76-.04-1.78-2.24-2.94-5.3-5.4-9.34-7.58-2.72-1.44-5.42-2.08-8.36-1.94-4.04.18-7.8.24-11.52.14-2.64-.06-5.18-.12-7.52-.9-3.14-1.04-6.12-2.64-8.98-4.2-1.84-.98-3.28-2.24-4.48-3.36-.48-.44-1.1-1.14-1.06-2.04.04-.92.74-1.58 1.34-2.04 1.06-.82 2.16-1.58 3.26-2.3l1.94-1.28c2.44-1.58 4.94-3.2 7.5-4.72l.66-.38c2.14-1.28 4.36-2.6 6.78-3.34 3.52-1.08 7.18-1.22 9.98-1.22.7 0 1.38 0 2.08.02 4.78.1 9.08.9 13.1 2.44 3.44 1.32 6.36 3.18 8.68 5.52 4.54 4.56 7.1 10.58 7.8 18.46.5 5.4.26 10.76-.7 15.88-.4 2.12-1.14 4.22-1.88 6.2-1.08 2.94-3.36 4.9-5.42 6.52-1.54 1.22-3.04 2.08-4.48 2.6-2.94 1.04-5.6 1.76-8.16 2.24l-.66.12c-4.16.78-8.46 1.58-12.76 1.88-4.16.26-8.6.38-14.34.38-1.44 0-2.86 0-4.3-.02-7.74-.06-13.9-1.06-19.36-3.16-3.74-1.42-6.76-3.68-9.02-6.72-2.62-3.54-4.36-7.84-5.16-12.8-1.16-7.24-1.84-12.82-2.24-18.1-.62-8.08.14-15.64 2.28-22.44.74-2.4 1.86-4.8 3.3-7.12 1.68-2.68 4.08-4.98 7.18-6.82 3.38-2.02 7.22-3.32 12.44-4.2 1.5-.26 3.02-.44 4.54-.62.92-.12 1.84-.22 2.76-.36 1.84-.24 3.68-.52 5.52-.78 3.3-.48 6.6-.96 9.9-1.38 5.14-.64 10.2-.72 14.04-.72 2.2 0 4.4.02 6.62.06l1.04.02c3.28.04 6.6.2 9.82.34 1.58.08 3.18.16 4.76.22h.4c0-.08 0-.18-.02-.32l-.76-6.14-.96-7.92-.16-.16c-.34 0-.66.06-.98.1-1.36.24-2.74.48-4.1.72-2.92.5-5.92 1.04-8.92 1.44-7.28.96-13.34 1.74-19.7 2.28l-3.96.32c-7.5.58-15.26 1.2-22.72 2.74-2.62.54-5.66 1.2-8.58 2.12-2.94.92-5.8 2.1-8.22 3.14-2.96 1.28-5.52 3.1-7.62 5.42-3.94 4.36-6.66 9.78-8.58 17.06-1.36 5.22-2.02 10.96-2.12 18.58-.08 8.3.94 16.68 3.14 25.58 1.82 7.34 4.02 13.02 6.92 17.94 2.08 3.5 4.48 6.08 7.32 7.88 3.72 2.38 7.02 3.8 10.38 4.5l2.3.5c2.96.64 6.02 1.32 9.02 1.6 4.24.38 8.58.56 12.78.72l4.4.18.02-.3h.96c1.2 0 2.4.02 3.6.04 2.6.02 5.2.06 7.8-.08 7.2-.4 14.8-1.02 21.92-3.64 2.36-.88 4.84-1.88 6.86-3.3 2.58-1.84 4.98-4.08 7.3-6.24l.56-.54c4.8-4.48 7.56-10.12 8.16-16.72.72-7.88.74-15.78.08-23.5m-55.48 20.6c.04-.44.1-.88.2-1.3.58-2.4 1.16-4.82 1.8-7.2.2-.76.54-2.04 1.98-2.04.3 0 .62.06 1.16.18 4.3 1.06 8.62 2.12 12.94 3.22.36.08.68.24.96.38l.96.44-.14 1.7-5.04 1.8c-3.94 1.38-7.86 2.74-11.8 4.1-.48.16-.96.22-1.4.28l-.52.06-1.32.22.22-1.84z"/><path fill="#FFF" d="M319.944 1419.89c-.42 1.08-.86 2.16-1.28 3.24-.62 1.54-1.24 3.1-1.84 4.66-.08.2-.1.22-.7.32-.06.02-.14.04-.22.04l-1.84-.38c-1.64-.34-3.26-.68-4.88-1.08-1.04-.24-2.06-.58-3.02-.92.76-.3 1.52-.6 2.28-.92 1.6-.64 3.18-1.28 4.78-1.96 1.34-.58 2.68-1.18 4.02-1.8.88-.4 1.76-.8 2.7-1.2"/><path fill="#009497" d="M156.355 1378.715v142.084c0 4.624-3.75 8.332-8.334 8.332H-10.311a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M115.398 1479.674H22.312v-93.086h93.086v93.086zm-89.086-4h85.086v-85.086H26.312v85.086z"/><path fill="#FFF" d="M63.494 1388.588h49.904v49.904H63.494z"/><path fill="#62BB37" d="M384.378 1672.262v142.935c0 4.661-3.746 8.382-8.332 8.382H217.707c-4.636 0-8.329-3.72-8.329-8.382v-184.432c0-4.611 3.72-8.384 8.329-8.384h117.105l49.566 49.881z"/><path fill="#FFF" d="M269.727 1750.487c0 2.76 1.793 4.609 4.523 4.609h4.523v16.094c0 3.67 3.171 6.901 6.783 6.901 3.613 0 6.784-3.201 6.784-6.901v-16.094h9.074v16.094c0 3.67 3.173 6.901 6.785 6.901 3.611 0 6.785-3.201 6.785-6.901v-16.094h4.523c2.731 0 4.521-1.849 4.521-4.609v-45.99h-54.299v45.99zm-11.335-45.99c-3.641 0-6.784 3.201-6.784 6.901v32.188c0 3.67 3.173 6.901 6.784 6.901 3.612 0 6.785-3.201 6.785-6.901v-32.188c-.001-3.669-3.173-6.901-6.785-6.901m76.97 0c-3.611 0-6.783 3.201-6.783 6.901v32.188c0 3.67 3.171 6.901 6.783 6.901 3.613 0 6.785-3.201 6.785-6.901v-32.188c.03-3.669-3.143-6.901-6.785-6.901m-22.612-26.664l5.903-5.961c.911-.911.911-2.32 0-3.201-.91-.911-2.232-.911-3.171 0l-6.784 6.901c-3.171-2.292-7.253-3.201-11.776-3.201s-8.575.909-12.245 2.761l-6.344-6.931c-.881-.441-2.732-.441-3.614 0-.441.911-.441 2.76 0 3.672l5.903 5.961c-6.344 5.05-10.865 12.863-10.865 22.053h54.299c.001-9.164-4.55-17.445-11.306-22.054m-24.903 12.89h-4.523v-4.611h4.523v4.611zm22.613 0h-4.523v-4.611h4.523v4.611z"/><path fill="#ACACAC" d="M1091.525 1927.589v142.084c0 4.624-3.75 8.332-8.334 8.332H924.859a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F6F4F4" d="M959.994 1945.886h88.062v12.848h-88.062zM959.994 1975.748h88.062v12.848h-88.062zM959.994 2005.61h61.644v12.846h-61.644z"/><path fill="#03A9F4" d="M856.502 1927.859v141.33c0 4.598-3.717 8.29-8.242 8.29H691.744c-4.573 0-8.242-3.693-8.242-8.29v-182.366c0-4.548 3.669-8.29 8.242-8.29h115.773l48.985 49.326z"/><path fill="#FFF" d="M822.322 1980.084c-.135 6.281-2.731 12.037-6.867 16.172-4.146 4.134-9.756 6.671-15.977 6.671H788.43a34.074 34.074 0 0 0 5.939-9.161h5.11c7.404 0 13.513-6.098 13.685-13.818.159-7.513-5.953-13.439-13.685-13.671h-21.634c-3.049 0-5.891 1.036-8.209 2.793a13.78 13.78 0 0 0-3.292 3.536 14.142 14.142 0 0 0-2.318 7.476l-9.159-.135c.014-.817.074-1.634.183-2.427.817-6.462 4.281-12.145 9.245-15.866 3.806-2.854 8.501-4.548 13.55-4.548h21.634c12.476.27 23.11 10.27 22.843 22.978"/><path fill="#FFF" d="M717.683 1979.95c.135-6.281 2.731-12.036 6.866-16.172 4.146-4.134 9.756-6.671 15.977-6.671h11.048a34.05 34.05 0 0 0-5.939 9.161h-5.11c-7.404 0-13.513 6.098-13.685 13.818-.159 7.513 5.953 13.439 13.685 13.671h21.634c3.049 0 5.891-1.036 8.209-2.793a13.748 13.748 0 0 0 3.292-3.536 14.142 14.142 0 0 0 2.318-7.476l9.159.135a20.059 20.059 0 0 1-.183 2.427c-.817 6.462-4.281 12.145-9.245 15.866-3.806 2.854-8.501 4.548-13.55 4.548h-21.634c-12.476-.269-23.11-10.269-22.842-22.978"/><path fill="#7757BC" d="M397.165 1927.79v142.084c0 4.634-3.754 8.332-8.349 8.332H230.159c-4.645 0-8.346-3.698-8.346-8.332V1886.54c0-4.584 3.727-8.334 8.346-8.334H347.5l49.665 49.584z"/><path fill="#FFF" d="M337.965 1973.393v-17.866c0-3.066-2.28-5.109-5.71-5.109h-68.351c-3.405 0-5.71 2.042-5.71 5.109v51.006c0 3.066 2.278 5.108 5.71 5.108h68.377c3.405 0 5.71-2.042 5.71-5.108v-17.84l22.791 20.408v-56.114l-22.817 20.406z"/><path fill="#FF5722" d="M-59.667 1927.59v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V1886.34c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-178.718 1983.242l24.53 27.062 33.552-46.552 38.612 62.062H-208.31zM-156.542 1952.334c0 8.444-6.844 15.288-15.288 15.288-8.442 0-15.288-6.844-15.288-15.288 0-8.444 6.846-15.288 15.288-15.288 8.444 0 15.288 6.844 15.288 15.288"/><path fill="#FDCA07" d="M617.478 1928.276v142.084c0 4.624-3.75 8.332-8.334 8.332H450.812a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M517.715 1877.318h12.262v12.262h-12.262zM517.715 1901.844h12.262v12.262h-12.262zM517.715 1925.364h12.262v12.262h-12.262zM517.715 1949.592h12.262v27.04h-12.262zM529.979 1889.582h12.262v12.262h-12.262zM529.979 1914.106h12.262v12.262h-12.262zM529.979 1937.54h12.262v12.262h-12.262z"/><path fill="#FFF" d="M523.847 1964.37h18.394v12.262h-18.394zM544.713 2021.066l-4.324-33.834-21.932-.198-3.466 34.032c-.484 3.656 1.572 6.864 6.52 6.864h16.682c4.736 0 7.034-3.328 6.52-6.864zm-7.154-.326h-15.414v-6.292h15.414v6.292z"/><path fill="#FFED18" d="M1328.8 1921.909h-78.974l-17.276-17.5h-61.24a8.76 8.76 0 0 0-8.76 8.76v129.683c0 4.812 3.938 8.75 8.75 8.75h157.5c4.812 0 8.75-3.938 8.75-8.75v-112.193c0-4.813-3.938-8.75-8.75-8.75"/><path fill="#FDCA07" d="M1337.55 2042.851c0 4.812-3.938 8.75-8.75 8.75h-157.5c-4.812 0-8.75-3.938-8.75-8.75v-93.984c0-4.812 3.938-8.75 8.75-8.75h157.5c4.812 0 8.75 3.938 8.75 8.75v93.984z"/><g font-family="'MicrosoftYaHei'" font-size="40"><text transform="translate(-400.696 354.195)">M</text><text transform="translate(-361.615 354.195)">A</text><text transform="translate(-334.015 354.195)">C</text></g><text transform="translate(-385.815 103.49)" font-family="'MicrosoftYaHei'" font-size="40">WIN</text><text transform="translate(-509.616 632.053)" font-family="'MicrosoftYaHei'" font-size="40">鍥惧舰锛忓嵃鍒�</text><text transform="translate(-589.616 922.57)" font-family="'MicrosoftYaHei'" font-size="40">浜у搧锛忔�濈淮瀵煎浘</text><text transform="translate(-509.616 1180.597)" font-family="'MicrosoftYaHei'" font-size="40">褰辫锛忓箍鍛�</text><text transform="translate(-389.616 1714.65)" font-family="'MicrosoftYaHei'" font-size="40">浠g爜</text><text transform="translate(-389.616 2011.68)" font-family="'MicrosoftYaHei'" font-size="40">閫氱敤</text><text transform="translate(-509.616 1406.13)" font-family="'MicrosoftYaHei'" font-size="40">宸ヤ笟锛忓缓绛�</text><path fill="#FF40B6" d="M156.355 1927.289v142.935c0 4.662-3.746 8.382-8.332 8.382H-10.316c-4.636 0-8.329-3.72-8.329-8.382v-184.432c0-4.611 3.72-8.384 8.329-8.384H106.79l49.565 49.881z"/><path fill="#FFF" d="M39.817 1937.935a2.611 2.611 0 0 0-2.62 2.62v67.198a15.833 15.833 0 0 0-7.911-2.096c-8.724 0-15.772 7.046-15.772 15.744s7.048 15.746 15.772 15.746 15.77-7.048 15.77-15.746c0-.627-.026-1.283-.105-1.859.079-.235.105-.497.105-.761v-55.277l55.251-9.744v38.247a15.854 15.854 0 0 0-7.911-2.096c-8.724 0-15.772 7.048-15.772 15.746s7.048 15.744 15.772 15.744 15.77-7.046 15.77-15.744c0-.63-.027-1.283-.105-1.861a2.43 2.43 0 0 0 .105-.758v-73.512c0-1.284 0-2.881-2.173-2.567-.447.051-66.176 10.976-66.176 10.976"/><path fill="#29D3B2" d="M-59.667 1672.563v142.083c0 4.625-3.75 8.333-8.333 8.333h-158.333a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125l49.541 49.583z"/><g fill="#FFF"><path d="M-168.208 1683.135h1.562v7.812h-1.562c-5.836-.205-8.545 1.772-8.125 5.938v16.562c0 4.17-1.67 7.397-5 9.688 3.33 2.295 5 5.522 5 9.688v16.562c-.42 3.955 2.289 5.83 8.125 5.625h1.562v7.812h-1.562c-11.875.415-17.607-3.75-17.188-12.5v-16.875c.205-4.165-2.188-6.25-7.188-6.25h-.938v-7.812h.938c5 0 7.393-2.08 7.188-6.25v-16.562c-.42-9.375 5.313-13.853 17.188-13.438zM-128 1683.135h1.562c11.875-.415 17.602 4.062 17.188 13.438v16.562c0 4.17 2.393 6.25 7.188 6.25h1.25v7.812h-1.25c-4.795 0-7.188 2.085-7.188 6.25v16.875c.414 8.54-5.313 12.705-17.188 12.5H-128v-7.812h1.562c5.83.205 8.539-1.67 8.125-5.625v-16.562c0-4.165 1.664-7.393 5-9.688-3.336-2.29-5-5.518-5-9.688v-16.562c.414-4.165-2.295-6.143-8.125-5.938H-128v-7.812z"/></g><path fill="#29D3B2" d="M156.355 1672.563v142.083c0 4.625-3.75 8.333-8.333 8.333H-10.312a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125l49.542 49.583z"/><ellipse fill="#FFF" cx="68.855" cy="1687.042" rx="42.548" ry="12.063"/><path fill="#FFF" d="M68.855 1723.112c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.888 12.899 43.5 12.899z"/><path fill="#FFF" d="M68.855 1747.046c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.888 12.899 43.5 12.899z"/><path fill="#FFF" d="M68.855 1770.98c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.888 12.899 43.5 12.899z"/><path fill="#03A9F4" d="M617.478 1672.563v142.083c0 4.625-3.75 8.333-8.333 8.333H450.811a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125l49.542 49.583z"/><path fill="#FFF" d="M504.68 1725.821c.344 20.488 16.447 28.926 31.6 28.926 12.601 0 20-2.805 26.25-6.055l2.582 10.848c-5.332 3.402-11.332 6.916-29.916 6.916-29.999 0-44.979-18.43-44.979-42.014 0-25.137 18.807-44.938 43.084-44.938 27.205 0 36.437 23.932 36.437 39.256 0 3.1-.346 5.51-.518 7.061h-64.54zm50.422-10.848c.174-9.643-5.959-24.621-23.006-24.621-15.324 0-26.039 14.117-27.244 24.621h50.25z"/><path fill="#3F7AD9" d="M-59.667 49.583l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V0"/><path fill="#D46B1C" d="M396.989 49.583l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V0"/><path fill="#58A138" d="M175 49.387l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V-.196"/><path fill="#2FB69A" d="M617.478 49.583l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V0"/><path fill="#3F7AD9" d="M842.467 49.388l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V-.194"/><path fill="#718BC8" d="M1314.455 49.582v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.332c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M1276.955 99.998c0 27.614-22.386 50-50 50s-50-22.386-50-50 22.386-50 50-50 50 22.386 50 50"/><path fill="#718BC8" d="M1241.539 99.998c0 8.054-6.53 14.584-14.584 14.584-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584"/><path fill="#6479AB" d="M1314.455 49.583l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V0"/><path fill="#D46B1C" d="M-59.591 316.411l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#4A5BD7" d="M-59.591 604.922l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V555.34"/><path fill="#58A138" d="M175 316.411l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#3F7AD9" d="M408.38 316.419l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#6479AB" d="M629.721 316.419l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M156.438 604.445l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#8C1DCD" d="M156.436 862.473l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V812.89M-59.676 862.473l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V812.89"/><path fill="#624A97" d="M-59.676 1120.492l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M397.165 1927.788l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DCAE29" d="M617.478 1928.275l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#0F797A" d="M156.355 1120.69l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M156.438 1378.524l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#475A63" d="M396.979 1378.523l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#1993D0" d="M629.721 1378.715l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M617.478 1672.562l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#5BA23A" d="M384.378 1672.562l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#2FB69A" d="M156.438 1672.562l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-59.667 1672.562l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DC4C29" d="M-59.667 1927.589l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DC3F9D" d="M156.438 1928.078l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#1993D0" d="M857.502 1927.397l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#969594" d="M1091.525 1927.275l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M408.376 604.647l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#9E176D" d="M629.721 604.922l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V555.34"/><path fill="#AD282B" d="M842.546 604.922l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V555.34"/><path fill="#9E176D" d="M842.546 862.473l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V812.89"/><path fill="#AD282B" d="M629.721 862.473l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V812.89M408.376 862.473l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V812.89M-59.667 1378.715l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><g><path fill="#718BC8" d="M1067.455 49.656V191.74c0 4.624-3.75 8.332-8.334 8.332H900.789a8.304 8.304 0 0 1-8.334-8.332V8.406c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M1029.955 86.073c0 27.614-22.386 50-50 50s-50-22.386-50-50 22.386-50 50-50 50 22.386 50 50"/><path fill="#718BC8" d="M994.539 86.073c0 8.054-6.53 14.584-14.584 14.584-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584"/><path opacity=".2" fill="#231815" d="M1017.914 41.322V.072l49.542 49.583h-41.208c-4.584.001-8.334-3.749-8.334-8.333z"/><g fill="#FFF"><path d="M945.718 167.253c.172 5.043 4.127 7.221 8.597 7.221 3.266 0 5.617-.459 7.738-1.26l1.031 4.871c-2.407.973-5.731 1.719-9.743 1.719-9.055 0-14.385-5.559-14.385-14.098 0-7.738 4.7-15.016 13.64-15.016 9.055 0 12.036 7.451 12.036 13.582 0 1.32-.115 2.35-.229 2.982h-18.685zm12.265-4.931c.057-2.578-1.089-6.82-5.789-6.82-4.356 0-6.19 3.955-6.476 6.82h12.265zM974.539 151.318l3.324 5.275c.917 1.49 1.719 2.865 2.521 4.297h.172c.802-1.547 1.605-2.98 2.408-4.412l3.094-5.16h7.68l-9.342 13.412 9.514 14.5h-7.967l-3.439-5.559c-.917-1.49-1.719-2.98-2.521-4.527h-.115c-.802 1.605-1.604 2.98-2.521 4.527l-3.21 5.559h-7.794l9.685-14.213-9.342-13.699h7.853zM1002.041 167.253c.172 5.043 4.127 7.221 8.597 7.221 3.266 0 5.617-.459 7.738-1.26l1.031 4.871c-2.407.973-5.731 1.719-9.743 1.719-9.055 0-14.385-5.559-14.385-14.098 0-7.738 4.7-15.016 13.64-15.016 9.055 0 12.036 7.451 12.036 13.582 0 1.32-.115 2.35-.23 2.982h-18.684zm12.266-4.931c.057-2.578-1.089-6.82-5.789-6.82-4.356 0-6.19 3.955-6.476 6.82h12.265z"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/svg/fileType/other.svg b/src/assets/svg/fileType/other.svg
deleted file mode 100644
index 59b0c41..0000000
--- a/src/assets/svg/fileType/other.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="175" height="200"><path fill="#448AFF" d="M-502.145-1828.423v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-638.186-1811.383h13.228l13.436 56.874h.208l15.002-56.874h13.334l14.584 56.874h.208l13.854-56.874h13.228l-20.52 74.376h-13.232l-14.892-56.876h-.212l-15.206 56.876h-13.44z"/><path fill="#62BB37" d="M-267.478-1828.421v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-387.272-1811.38h15.524l16.874 26.25 17.602-26.25h14.584l-24.582 35.832 26.354 38.542h-15.836l-18.538-28.438-18.856 28.438h-14.896l26.354-38.542z"/><path fill="#F57C00" d="M-45.489-1828.424v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-162.049-1811.384h32.812c5.274 0 9.582.766 12.914 2.292 3.334 1.53 5.9 3.438 7.708 5.728 1.806 2.292 3.038 4.794 3.698 7.5.66 2.71.988 5.208.988 7.5 0 2.294-.328 4.776-.988 7.45-.66 2.672-1.892 5.156-3.698 7.446-1.808 2.29-4.374 4.186-7.708 5.676-3.332 1.498-7.64 2.242-12.914 2.242h-19.792v28.54h-13.02v-74.374zm13.02 35.21h19.06c1.46 0 2.954-.212 4.48-.626a12.867 12.867 0 0 0 4.218-2.032c1.286-.94 2.328-2.188 3.126-3.75.798-1.564 1.196-3.524 1.196-5.884 0-2.43-.346-4.444-1.042-6.042-.692-1.596-1.632-2.866-2.812-3.802-1.18-.94-2.534-1.578-4.06-1.928-1.53-.346-3.162-.52-4.896-.52h-19.27v24.584z"/><path fill="#448AFF" d="M399.989-1828.424v142.084c0 4.624-3.75 8.332-8.334 8.332H233.323a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M278.333-1813.278h14.3l19.69 62.15h.22l20.13-62.15h13.97l-26.84 78.54h-15.288z"/><path fill="#29D3B2" d="M175-1828.423v142.082c0 4.625-3.751 8.333-8.334 8.333H8.334A8.305 8.305 0 0 1 0-1686.341v-183.331c0-4.584 3.709-8.334 8.334-8.334h117.125L175-1828.423z"/><path fill="#FFF" d="M52.388-1821.38h70.225v13.121H95.032v73.626H79.846v-73.626H52.388z"/><path fill="#F57C00" d="M-501.145-1561.972v143.708c0 4.677-3.793 8.427-8.429 8.427h-160.141a8.398 8.398 0 0 1-8.429-8.427v-185.429c0-4.636 3.75-8.429 8.429-8.429h118.462l50.108 50.15z"/><path fill="#FFF" d="M-547.284-1538.087l-33.73 33.73 3.75 4.19 28.869-28.868zM-608.634-1514.251c-23.634 23.634-31.372 45.44-31.372 45.44s21.806-7.738 45.44-31.372l4.072-4.074-14.068-14.066-4.072 4.072zM-585.69-1509.057l-14.067-14.068 38.405-38.405 14.068 14.067zM-640.006-1464.603h92.707v6.274h-92.707z"/><path fill="#62BB37" d="M-267.478-1561.395v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-402.98-1518.612h22.914v41.894h-22.914zM-366.436-1558.27h22.914v81.552h-22.914zM-329.892-1534.306h22.914v57.588h-22.914zM-402.98-1465.48h96.002v6.2h-96.002z"/><path fill="#448AFF" d="M-34.098-1561.396v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334H-83.64l49.542 49.584z"/><path fill="#FFF" d="M-166.963-1505.178v-41.732c0-4.466 3.654-8.12 8.12-8.12h74.49c4.466 0 8.12 3.654 8.12 8.12v41.732M-166.964-1497.795h90.73v8.12h-90.73zM-143.284-1464.441h43.368v8.12h-43.368z"/><path fill="#FFF" d="M-125.66-1494.929h8.12v34.55h-8.12z"/><path fill="#718BC8" d="M187.243-1561.396v142.084c0 4.624-3.75 8.332-8.334 8.332H20.578a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.541 49.584z"/><path fill="#FFF" d="M99.743-1574.979c-27.614 0-50 22.386-50 50s22.386 50 50 50 50-22.386 50-50-22.386-50-50-50zm0 64.584c-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584 0 8.054-6.53 14.584-14.584 14.584zM76.676-1432.766h-4.702v-3.046h-.086c-.668 1.306-1.64 2.242-2.916 2.806a9.85 9.85 0 0 1-4.048.85c-1.77 0-3.316-.312-4.634-.936-1.322-.624-2.418-1.472-3.288-2.546-.872-1.072-1.524-2.342-1.958-3.808-.436-1.466-.654-3.04-.654-4.724 0-2.028.276-3.786.828-5.264.55-1.482 1.284-2.7 2.198-3.658.914-.958 1.958-1.66 3.134-2.11a9.96 9.96 0 0 1 3.59-.676c.698 0 1.406.066 2.134.196a9.66 9.66 0 0 1 2.09.63 8.33 8.33 0 0 1 1.848 1.112 6.16 6.16 0 0 1 1.416 1.588h.086v-11.49h4.962v31.076zm-17.324-11.012c0 .958.124 1.902.37 2.83a7.78 7.78 0 0 0 1.132 2.482 5.727 5.727 0 0 0 1.938 1.74c.782.434 1.71.652 2.784.652 1.104 0 2.054-.23 2.852-.696a5.892 5.892 0 0 0 1.958-1.828 8.278 8.278 0 0 0 1.132-2.546c.246-.942.37-1.908.37-2.894 0-2.496-.558-4.44-1.676-5.834-1.116-1.392-2.632-2.088-4.548-2.088-1.162 0-2.14.24-2.938.718a5.983 5.983 0 0 0-1.958 1.872 7.755 7.755 0 0 0-1.088 2.612 13.58 13.58 0 0 0-.328 2.98M84.249-1455.268h4.702v3.132h.128c.378-.55.784-1.058 1.22-1.522.434-.464.92-.856 1.458-1.176a7.466 7.466 0 0 1 1.85-.762c.698-.188 1.494-.282 2.394-.282 1.364 0 2.634.306 3.808.914 1.176.608 2.01 1.554 2.504 2.828.84-1.158 1.812-2.074 2.916-2.74 1.102-.668 2.482-1.002 4.136-1.002 2.378 0 4.228.58 5.55 1.74 1.318 1.162 1.978 3.106 1.978 5.834v15.538h-4.962v-13.146c0-.898-.03-1.718-.086-2.458-.06-.74-.226-1.378-.502-1.916a2.836 2.836 0 0 0-1.24-1.24c-.55-.29-1.306-.434-2.264-.434-1.68 0-2.9.522-3.654 1.566-.756 1.046-1.132 2.524-1.132 4.44v13.188h-4.962v-14.45c0-1.568-.282-2.75-.85-3.548-.566-.796-1.602-1.196-3.112-1.196a4.54 4.54 0 0 0-1.85.392 4.595 4.595 0 0 0-1.566 1.13c-.45.494-.812 1.104-1.088 1.828-.278.728-.414 1.554-.414 2.482v13.362h-4.962v-22.502zM145.097-1433.941c0 3.396-.95 5.928-2.85 7.596-1.9 1.67-4.636 2.502-8.204 2.502-1.134 0-2.272-.116-3.418-.346a10.209 10.209 0 0 1-3.134-1.176 7.541 7.541 0 0 1-2.37-2.178c-.64-.9-1.018-2-1.134-3.308h4.962c.146.698.392 1.262.742 1.7.346.434.76.776 1.24 1.02a4.658 4.658 0 0 0 1.586.48c.582.072 1.192.108 1.83.108 2.002 0 3.468-.492 4.396-1.48.928-.984 1.392-2.408 1.392-4.266v-3.436h-.086c-.696 1.246-1.646 2.22-2.852 2.916a7.647 7.647 0 0 1-3.896 1.044c-1.798 0-3.328-.312-4.59-.936a8.733 8.733 0 0 1-3.134-2.568c-.828-1.088-1.43-2.344-1.808-3.764-.376-1.422-.566-2.946-.566-4.57 0-1.508.234-2.946.698-4.31s1.132-2.56 2.002-3.592a9.628 9.628 0 0 1 3.2-2.46c1.262-.608 2.69-.912 4.286-.912 1.422 0 2.728.298 3.918.892 1.19.596 2.102 1.53 2.742 2.808h.086v-3.09h4.962v21.326zm-11.012-2.742c1.104 0 2.038-.224 2.808-.674a5.532 5.532 0 0 0 1.872-1.784 7.844 7.844 0 0 0 1.044-2.524c.218-.942.326-1.894.326-2.852s-.116-1.886-.346-2.786c-.234-.9-.588-1.698-1.068-2.394a5.142 5.142 0 0 0-1.872-1.654c-.768-.404-1.69-.608-2.764-.608-1.104 0-2.032.23-2.786.694a5.575 5.575 0 0 0-1.826 1.808 7.74 7.74 0 0 0-1.002 2.524 13.25 13.25 0 0 0-.306 2.808c0 .93.118 1.834.35 2.72.23.886.588 1.676 1.066 2.374a5.669 5.669 0 0 0 1.828 1.696c.74.436 1.631.652 2.676.652"/><path fill="#D32F2F" d="M399.989-1273.367v142.084c0 4.624-3.75 8.332-8.334 8.332H233.323a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F6F4F4" d="M310.975-1245.321c.758 0 .758 0 0 0 .758-3.03 1.516-4.544 1.516-6.816v-1.514c.756-3.786.756-6.816 0-7.572v-.758l-.758-.758s0 .758-.758.758c-1.514 4.544-1.514 9.844 0 16.66m-22.716 52.25c-1.516.756-3.03 1.514-3.786 2.27-5.302 4.544-9.088 9.846-9.844 12.118 4.542-.758 9.086-5.302 13.63-14.388.756 0 .756 0 0 0 .756 0 0 0 0 0m69.666-11.36c-.756-.756-3.786-3.028-14.388-3.028h-1.514v.758c5.3 2.27 10.602 3.786 14.388 3.786H358.683v-.758s-.758 0-.758-.758m3.03 6.058c-1.516.758-3.786 1.516-6.816 1.516-6.058 0-15.146-1.516-22.718-5.302-12.872 1.514-22.716 3.03-30.29 6.058-.756 0-.756 0-1.514.758-9.086 15.902-16.66 23.474-22.718 23.474-1.514 0-2.27 0-3.028-.756l-3.786-2.272v-.758c-.758-1.514-.758-2.272-.758-3.786.758-3.786 5.302-10.602 14.388-15.902 1.514-.758 3.786-2.272 6.816-3.786 2.27-3.786 4.542-8.33 7.572-13.63 3.786-7.574 6.058-15.146 8.328-21.96-3.028-9.088-4.542-14.388-1.512-24.99.756-3.03 3.028-6.058 6.056-6.058h1.516c1.514 0 3.028.758 4.542 1.514 5.302 5.302 3.03 17.416 0 27.26v.758c3.03 8.33 7.574 15.146 12.116 19.688 2.272 1.516 3.786 3.03 6.816 4.544 3.786 0 6.816-.756 9.844-.756 9.088 0 15.146 1.514 17.416 5.3.758 1.514.758 3.028.758 4.544-.758.756-1.514 3.028-3.028 4.542m-49.222-29.532c-1.514 5.3-4.544 11.358-7.572 18.174-1.514 3.03-3.03 5.3-4.544 8.33h1.514c9.844-3.786 18.932-6.058 24.99-6.816-1.514-.756-2.272-1.514-3.03-2.272-3.786-4.542-8.328-10.6-11.358-17.416"/><path fill="#5465FC" d="M-502.149-1273.366v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-628.4-1254.679c4.224-.768 10.082-1.344 18.047-1.344 8.641 0 14.977 1.824 19.107 5.28 3.84 3.168 6.336 8.256 6.336 14.305 0 6.144-1.92 11.231-5.57 14.687-4.704 4.704-12.096 6.914-20.447 6.914-2.21 0-4.224-.096-5.762-.386v24.387H-628.4v-63.843zm11.711 30.144c1.44.384 3.362.48 5.762.48 8.832 0 14.207-4.32 14.207-11.903 0-7.202-4.992-11.041-13.153-11.041-3.264 0-5.568.288-6.816.576v21.888zM-577.812-1201.686c2.69 1.632 7.777 3.362 12.001 3.362 5.184 0 7.488-2.114 7.488-5.186 0-3.168-1.92-4.8-7.68-6.816-9.119-3.168-12.959-8.16-12.863-13.633 0-8.255 6.816-14.687 17.663-14.687 5.184 0 9.696 1.344 12.385 2.784l-2.304 8.352c-2.016-1.152-5.762-2.688-9.89-2.688-4.224 0-6.527 2.016-6.527 4.896 0 2.978 2.208 4.416 8.159 6.53 8.448 3.072 12.385 7.392 12.481 14.303 0 8.449-6.623 14.593-19.009 14.593-5.664 0-10.753-1.346-14.207-3.266l2.303-8.544z"/><path fill="#F57C00" d="M-286.128-1273.367v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-394.603-1208.166l-5.568 18.337h-12.193l20.739-64.707h15.073l21.023 64.707H-368.2l-5.856-18.337h-20.547zm18.529-8.928l-5.088-15.937c-1.248-3.936-2.304-8.354-3.264-12.097h-.192c-.96 3.744-1.92 8.258-3.074 12.097l-4.992 15.937h16.61zM-334.892-1249.639c0 3.552-2.592 6.336-6.72 6.336-3.938 0-6.53-2.784-6.53-6.336 0-3.648 2.69-6.434 6.624-6.434 4.034 0 6.53 2.786 6.626 6.434m-12.578 13.057h11.905v46.754h-11.905v-46.754z"/><path fill="#C11187" d="M187.239-1273.367v142.084c0 4.624-3.75 8.332-8.334 8.332H20.573a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M65.564-1254.104h11.807v64.707H65.564zM133.529-1257.56v55.011c0 4.798.194 9.984.386 13.151h-10.561l-.48-7.392h-.192c-2.784 5.182-8.448 8.448-15.263 8.448-11.137 0-19.971-9.505-19.971-23.905-.096-15.649 9.697-24.961 20.931-24.961 6.432 0 11.042 2.688 13.151 6.144h.192v-26.497h11.807zm-11.807 40.898c0-.96-.096-2.114-.288-3.074-1.056-4.608-4.8-8.351-10.175-8.351-7.584 0-11.809 6.719-11.809 15.457 0 8.543 4.226 14.783 11.713 14.783 4.8 0 9.023-3.264 10.177-8.351.286-1.056.382-2.208.382-3.456v-7.008z"/><path fill="#F57C00" d="M-34.102-1273.367v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F57C00" d="M-132.405-1258.044h21.999v21.999h-21.999z"/><path fill="#FFF" d="M-74.605-1229.546v-5.5h-23.791c7.5 5.298 14.101 13.349 19.571 24.041 7.678 15.011 10.454 29.8 10.566 30.422l-7.866 1.448c-.09-.484-8.178-42.534-33.412-53.021v4.978h-23.735v-4.978c-25.237 10.49-33.324 52.537-33.412 53.021l-7.867-1.448c.114-.622 2.888-15.411 10.568-30.422 5.47-10.691 12.071-18.743 19.571-24.041H-168.6v5.5h-18.999v-18.999h18.999v5.5h35.328v-7.868h23.735v7.868h34.932v-5.5h18.999v18.999h-18.999zm-39.8-16.499h-13.999v13.999h13.999v-13.999z"/><path fill="#C11187" d="M399.989-1015.342v142.084c0 4.624-3.75 8.332-8.334 8.332H233.323a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><g fill="#FFF"><path d="M300.779-932.562l-6.76-12.408c-2.686-4.816-4.444-8.15-6.204-11.76h-.278c-1.482 3.61-3.148 6.944-5.648 11.76l-6.206 12.408h-13.056l18.52-31.576-17.78-30.836h13.056l6.762 12.872c2.036 3.888 3.518 6.944 5.186 10.464h.184c1.668-3.89 2.964-6.668 4.908-10.464l6.666-12.872h13.056l-18.24 30.466 18.982 31.946h-13.148zM361.981-998.308v53.06c0 4.628.186 9.63.37 12.686h-10.186l-.462-7.13h-.184c-2.688 4.998-8.15 8.148-14.724 8.148-10.742 0-19.262-9.168-19.262-23.056-.092-15.094 9.352-24.078 20.188-24.078 6.204 0 10.65 2.594 12.686 5.928h.184v-25.558h11.39zm-11.39 39.448c0-.926-.092-2.038-.276-2.964-1.02-4.444-4.632-8.056-9.818-8.056-7.314 0-11.388 6.482-11.388 14.908 0 8.242 4.074 14.26 11.296 14.26 4.63 0 8.706-3.148 9.816-8.054.278-1.02.37-2.132.37-3.336v-6.758z"/></g><path fill="#A0F" d="M-286.123-1015.34v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-332.135-1003.088h-80.848l-14.14 31.298 54.564 62.868 54.562-62.868-14.138-31.298zm-3.72 6.926l8.282 20.65h-14.884l6.602-20.65zm-7.058-.33l-6.042 19.378-15.102-19.378h21.144zm-14.072 20.98h-31.15l15.576-19.814 15.574 19.814zm-24.078-20.98l-15.1 19.378-6.044-19.378h21.144zm-28.202.33l6.602 20.65h-14.884l8.282-20.65zm-6.632 27.244h16.126l16.454 37.538-32.58-37.538zm23.326 0H-352.549l-20.01 45.652-20.012-45.652zm30.768 37.54l16.454-37.538h16.126l-32.58 37.538z"/><path fill="#D32F2F" d="M-34.619-1015.342v142.084c0 4.634-3.724 8.332-8.282 8.332h-157.396c-4.608 0-8.28-3.698-8.28-8.332v-183.334c0-4.584 3.698-8.334 8.28-8.334h116.408l49.27 49.584z"/><path fill="#FFF" d="M-72.133-990.304c.579.149 1.173.25 1.734.453 1.728.628 2.294 2.07 2.253 3.887-.056 2.523-.229 5.022-.936 7.483-1.308 4.549-4.119 7.567-8.195 9.358-2.871 1.261-5.893 1.72-8.935 2.076-2.098.243-4.193.535-6.287.821-.28.038-.561.149-.823.272-1.119.519-1.41 1.537-.582 2.444a21.79 21.79 0 0 0 2.803 2.557c3.754 2.883 7.615 5.62 11.301 8.595 4.167 3.362 7.819 7.291 10.595 12.06 2.726 4.684 4.108 9.789 3.925 15.378-.048 1.475-.722 2.326-2.111 2.396-2.159.107-4.32.122-6.479.143-2.682.024-5.362.014-8.044.02-2.732.004-5.466.002-8.201.012-1.952.006-3.905.032-5.857.034a18.846 18.846 0 0 1-1.714-.072c-2.436-.213-3.34-1.159-3.585-3.744-.35-3.664-.907-7.263-2.306-10.649-2.35-5.696-6.167-9.981-11.098-13.207-4.259-2.785-8.891-4.531-13.923-4.972-4.961-.436-9.579.553-13.287 4.575-2.241 2.43-3.477 5.428-4.342 8.621-.392 1.445-.734 2.905-1.165 4.336-.491 1.626-1.811 1.96-3.147 2.006-2.916.099-5.831.099-8.746.125-2.682.024-5.362.028-8.044.042-2.473.014-4.947.052-7.418.03-.646-.006-1.294-.153-1.924-.308-.936-.227-1.314-.779-1.261-1.781.328-6.092 2.74-11.054 7.364-14.82 3.811-3.102 8.145-5.034 12.694-6.352 4.315-1.251 8.696-2.227 13.042-3.356 1.219-.316 2.443-.656 3.614-1.135 1.873-.766 2.179-2.022.7-3.4-1.419-1.326-3.006-2.479-4.623-3.529-4.352-2.825-8.839-5.428-12.798-8.873-4.062-3.535-7.462-7.615-9.315-12.969-.974-2.817-1.38-5.744-1.374-8.754 0-1.155.557-2.05 1.783-2.34a21.873 21.873 0 0 1 4.406-.573c3.332-.09 6.664-.052 9.996-.058 2.682-.004 5.364.01 8.044.008 1.98 0 3.958-.02 5.937-.016.909.002 1.819.046 2.73.066 1.533.034 2.197.543 2.491 2.141.348 1.889.584 3.803.885 5.704 1.078 6.814 3.631 12.766 8.76 17.178 3.527 3.036 7.639 4.449 12.194 4.646 2.382.102 4.744.068 7.046-.751 3.547-1.261 5.269-4.096 4.937-8.018-.151-1.813-.272-3.63-.382-5.446-.074-1.235.312-1.982 1.469-2.207 1.451-.284 2.946-.38 4.418-.403 2.942-.042 5.883.03 8.825.044 2.68.01 5.362-.01 8.042.012 1.638.012 3.273.074 4.911.114l.003.096"/><path fill="#D32F2F" d="M187.244-1015.342v142.084c0 4.624-3.75 8.332-8.334 8.332H20.578a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><g fill="#FFF"><path d="M109.86-885.251s-.022-23.724 0-30.064c0-.318-.008-.636 0-.952.07-3.12 1.69-4.742 4.84-4.752 6.614-.02 13.226 0 19.84 0 5.562 0 8.37-2.794 8.372-8.35.002-22.692-.008-45.384.008-68.078.002-3.048-1.018-5.546-3.796-6.986-1.046-.542-2.326-.878-3.502-.88a23363.06 23363.06 0 0 0-72.018-.05c-3.896.002-6.908 3.018-7.108 6.962-.046.904-.01 1.812-.01 2.718v66.582c0 5.096 3.012 8.082 8.12 8.08 11.776-.006 35.328-.002 35.328-.002v9.812s-23.946-.008-36.04.008c-2.722.002-5.344-.46-7.734-1.76-5.898-3.212-9.34-8.042-9.346-14.932-.024-23.372.092-46.744-.07-70.114-.05-7.154 5.04-15.584 14.712-17.022a18.82 18.82 0 0 1 2.704-.2c23.916-.024 47.83-.042 71.746-.05 9-.004 16.8 7.706 16.812 16.718.034 23.462.034 46.924.006 70.388-.012 9.346-7.282 17.056-16.64 17.254-4.708.098-9.422.056-14.13.014-1.088-.01-2.122 1.36-2.122 1.36l-9.972 24.296z"/><path d="M83.498-975.665v2.236c.002 11.594.006 23.186.006 34.778 0 1.808-.004 1.814-1.772 1.814-3.432.004-6.864.002-10.436.002-.036-.67-.09-1.194-.09-1.716-.004-16.03.014-32.062-.03-48.092-.004-1.318.376-1.672 1.672-1.656 5.432.068 10.868.076 16.302-.008 1.324-.02 1.76.446 2.066 1.66 2.618 10.354 5.304 20.69 7.972 31.032.12.466.272.922.734 1.436.158-.416.358-.824.47-1.252 2.75-10.552 5.506-21.1 8.212-31.664.244-.948.66-1.198 1.582-1.194 5.616.016 11.23.01 16.844-.068 1.212-.016 1.53.366 1.528 1.544-.034 16.168-.034 32.334.002 48.5.004 1.182-.31 1.582-1.52 1.548-3.214-.092-6.43-.056-9.644-.082-.398-.004-.792-.07-1.36-.124v-38.544l-.38-.072c-.148.432-.32.86-.442 1.3-3.336 12.034-6.678 24.068-9.978 36.114-.276 1.008-.706 1.394-1.766 1.36-2.398-.074-4.802-.08-7.2-.002-1.094.036-1.586-.296-1.884-1.388-3.3-12.09-6.654-24.168-9.996-36.246-.116-.42-.266-.832-.4-1.248a40.6 40.6 0 0 1-.492.032"/></g><path fill="#A0F" d="M-502.144-1015.341v142.084c0 4.624-3.75 8.332-8.334 8.332H-668.81a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-636.701-994.174c4.416-.768 11.04-1.344 17.856-1.344 9.314 0 15.65 1.536 19.972 5.184 3.55 2.976 5.568 7.488 5.568 12.962 0 8.352-5.666 14.016-11.714 16.224v.29c4.608 1.726 7.394 6.238 9.024 12.48 2.018 8.064 3.744 15.554 5.09 18.05h-12.194c-.96-1.92-2.496-7.202-4.32-15.266-1.824-8.45-4.896-11.136-11.616-11.328h-5.954v26.594h-11.712v-63.846zm11.712 28.609h7.01c7.968 0 12.96-4.224 12.96-10.656 0-7.104-4.992-10.37-12.674-10.37-3.744 0-6.144.288-7.296.576v20.45zM-582.078-994.174c4.224-.768 10.08-1.344 18.048-1.344 8.642 0 14.978 1.824 19.108 5.28 3.84 3.168 6.336 8.256 6.336 14.306 0 6.144-1.92 11.232-5.57 14.688-4.704 4.704-12.096 6.914-20.448 6.914-2.21 0-4.224-.096-5.762-.386v24.388h-11.712v-63.846zm11.712 30.145c1.442.384 3.362.48 5.762.48 8.832 0 14.208-4.32 14.208-11.904 0-7.202-4.992-11.042-13.154-11.042-3.264 0-5.568.288-6.816.576v21.89z"/><path fill="#7757BC" d="M-502.145-757.316v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-622.977-693.753l-5.408 17.81h-11.842l20.142-62.846h14.64l20.42 62.846h-12.31l-5.686-17.81h-19.956zm17.997-8.67l-4.942-15.48c-1.212-3.822-2.238-8.112-3.17-11.748h-.186c-.932 3.636-1.866 8.02-2.984 11.748l-4.85 15.48h16.132zM-569.833-695.431c.28 8.206 6.714 11.75 13.986 11.75 5.316 0 9.14-.746 12.588-2.052l1.678 7.926c-3.914 1.586-9.322 2.798-15.85 2.798-14.732 0-23.404-9.046-23.404-22.94 0-12.586 7.646-24.428 22.192-24.428 14.732 0 19.58 12.122 19.58 22.098 0 2.146-.186 3.824-.372 4.848h-30.398zm19.955-8.018c.096-4.196-1.772-11.096-9.416-11.096-7.086 0-10.07 6.434-10.538 11.096h19.954z"/><path fill="#009497" d="M-286.123-757.314v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-373.623-756.296l32.85 40.88v57.67h21.9v-69.35zM-428.373-657.746h21.9v-57.67l32.85-40.88-54.75 29.2z"/><path fill="#FFF" d="M-373.623-660.666l22.63-24.554-22.63-71.076-23.36 71.076z"/><path fill="#D32F2F" d="M-502.145-499.289v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-568.506-424.983h-42.28v-42.278h42.28v42.278zm8-50.278h-58.28v58.278h58.28v-58.278z"/><path fill="#FFF" d="M-597.22-453.697h15.15v15.15h-15.15zM-594.574-502.613h9.856v29.25h-9.856zM-594.574-419.031h9.856v29.4h-9.856zM-563.312-451.051h30.158v9.856h-30.158zM-646.136-451.051h29.492v9.856h-29.492z"/><path fill="#03A9F4" d="M187.244-499.29v142.084c0 4.624-3.75 8.332-8.334 8.332H20.578a8.304 8.304 0 0 1-8.334-8.332V-540.54c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M99.744-392.482l-49.5-27.692v-54.016l49.5-23.076 49.5 23.076v54.016l-49.5 27.692zm-40.5-32.97l40.5 22.658 40.5-22.658v-43.004l-40.5-18.88-40.5 18.88v43.004z"/><path fill="#FFF" d="M99.722-441.5l-47.176-26.392 4.394-7.856 42.824 23.958 42.816-23.478 4.328 7.892z"/><path fill="#FFF" d="M99.744-393.137a4.502 4.502 0 0 1-4.5-4.5v-49.008c0-2.484 2.016-4.5 4.5-4.5s4.5 2.016 4.5 4.5v49.008c0 2.484-2.017 4.5-4.5 4.5"/><path fill="#546E7A" d="M-45.489-499.29v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V-540.54c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-76.466-441.075c-.66-7.46-2.24-13.22-5-18.12-2.88-5.12-6.56-8.7-11.22-11-4.46-2.18-9.44-3.54-16.18-4.4-6.22-.8-12.78-1.02-20.98-.66-3.18.14-6.9.34-10.48.92-3.74.58-6.44 1.26-8.8 2.22-5 2.06-8.96 5.96-12.12 11.96-1.84 3.48-2.92 7.62-3.32 12.64-.58 7.4-.22 12.98 1.14 18.1.76 2.82 1.86 5.02 3.36 6.72 3.62 4.08 8.42 6.76 15.54 8.7 2.48.68 5.06 1.04 7.28 1.3 6.22.76 11.32.46 16.12-.96 5.34-1.58 10.2-3.9 14.48-6.92 2.18-1.54 4.24-3.42 6.12-5.22.62-.6.74-.76-.04-1.78-2.24-2.94-5.3-5.4-9.34-7.58-2.72-1.44-5.42-2.08-8.36-1.94-4.04.18-7.8.24-11.52.14-2.64-.06-5.18-.12-7.52-.9-3.14-1.04-6.12-2.64-8.98-4.2-1.84-.98-3.28-2.24-4.48-3.36-.48-.44-1.1-1.14-1.06-2.04.04-.92.74-1.58 1.34-2.04 1.06-.82 2.16-1.58 3.26-2.3l1.94-1.28c2.44-1.58 4.94-3.2 7.5-4.72l.66-.38c2.14-1.28 4.36-2.6 6.78-3.34 3.52-1.08 7.18-1.22 9.98-1.22.7 0 1.38 0 2.08.02 4.78.1 9.08.9 13.1 2.44 3.44 1.32 6.36 3.18 8.68 5.52 4.54 4.56 7.1 10.58 7.8 18.46.5 5.4.26 10.76-.7 15.88-.4 2.12-1.14 4.22-1.88 6.2-1.08 2.94-3.36 4.9-5.42 6.52-1.54 1.22-3.04 2.08-4.48 2.6-2.94 1.04-5.6 1.76-8.16 2.24l-.66.12c-4.16.78-8.46 1.58-12.76 1.88-4.16.26-8.6.38-14.34.38-1.44 0-2.86 0-4.3-.02-7.74-.06-13.9-1.06-19.36-3.16-3.74-1.42-6.76-3.68-9.02-6.72-2.62-3.54-4.36-7.84-5.16-12.8-1.16-7.24-1.84-12.82-2.24-18.1-.62-8.08.14-15.64 2.28-22.44.74-2.4 1.86-4.8 3.3-7.12 1.68-2.68 4.08-4.98 7.18-6.82 3.38-2.02 7.22-3.32 12.44-4.2 1.5-.26 3.02-.44 4.54-.62.92-.12 1.84-.22 2.76-.36 1.84-.24 3.68-.52 5.52-.78 3.3-.48 6.6-.96 9.9-1.38 5.14-.64 10.2-.72 14.04-.72 2.2 0 4.4.02 6.62.06l1.04.02c3.28.04 6.6.2 9.82.34 1.58.08 3.18.16 4.76.22h.4c0-.08 0-.18-.02-.32l-.76-6.14-.96-7.92-.16-.16c-.34 0-.66.06-.98.1-1.36.24-2.74.48-4.1.72-2.92.5-5.92 1.04-8.92 1.44-7.28.96-13.34 1.74-19.7 2.28l-3.96.32c-7.5.58-15.26 1.2-22.72 2.74-2.62.54-5.66 1.2-8.58 2.12-2.94.92-5.8 2.1-8.22 3.14-2.96 1.28-5.52 3.1-7.62 5.42-3.94 4.36-6.66 9.78-8.58 17.06-1.36 5.22-2.02 10.96-2.12 18.58-.08 8.3.94 16.68 3.14 25.58 1.82 7.34 4.02 13.02 6.92 17.94 2.08 3.5 4.48 6.08 7.32 7.88 3.72 2.38 7.02 3.8 10.38 4.5l2.3.5c2.96.64 6.02 1.32 9.02 1.6 4.24.38 8.58.56 12.78.72l4.4.18.02-.3h.96c1.2 0 2.4.02 3.6.04 2.6.02 5.2.06 7.8-.08 7.2-.4 14.8-1.02 21.92-3.64 2.36-.88 4.84-1.88 6.86-3.3 2.58-1.84 4.98-4.08 7.3-6.24l.56-.54c4.8-4.48 7.56-10.12 8.16-16.72.72-7.88.74-15.78.08-23.5m-55.48 20.6c.04-.44.1-.88.2-1.3.58-2.4 1.16-4.82 1.8-7.2.2-.76.54-2.04 1.98-2.04.3 0 .62.06 1.16.18 4.3 1.06 8.62 2.12 12.94 3.22.36.08.68.24.96.38l.96.44-.14 1.7-5.04 1.8c-3.94 1.38-7.86 2.74-11.8 4.1-.48.16-.96.22-1.4.28l-.52.06-1.32.22.22-1.84z"/><path fill="#FFF" d="M-122.533-458.116c-.42 1.08-.86 2.16-1.28 3.24-.62 1.54-1.24 3.1-1.84 4.66-.08.2-.1.22-.7.32-.06.02-.14.04-.22.04l-1.84-.38c-1.64-.34-3.26-.68-4.88-1.08-1.04-.24-2.06-.58-3.02-.92.76-.3 1.52-.6 2.28-.92 1.6-.64 3.18-1.28 4.78-1.96 1.34-.58 2.68-1.18 4.02-1.8.879-.4 1.759-.8 2.7-1.2"/><path fill="#009497" d="M-286.123-499.29v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V-540.54c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-327.08-398.331h-93.086v-93.086h93.086v93.086zm-89.086-4h85.086v-85.086h-85.086v85.086z"/><path fill="#FFF" d="M-378.984-489.417h49.904v49.904h-49.904z"/><path fill="#62BB37" d="M-58.1-205.743v142.935c0 4.662-3.746 8.382-8.332 8.382h-158.339c-4.636 0-8.329-3.72-8.329-8.382V-247.24c0-4.611 3.72-8.384 8.329-8.384h117.105l49.566 49.881z"/><path fill="#FFF" d="M-172.751-127.518c0 2.76 1.793 4.609 4.523 4.609h4.523v16.094c0 3.67 3.171 6.901 6.783 6.901 3.613 0 6.784-3.201 6.784-6.901v-16.094h9.074v16.094c0 3.67 3.173 6.901 6.785 6.901s6.785-3.201 6.785-6.901v-16.094h4.523c2.731 0 4.521-1.849 4.521-4.609v-45.99h-54.299v45.99zm-11.335-45.99c-3.641 0-6.784 3.201-6.784 6.901v32.188c0 3.67 3.173 6.901 6.784 6.901 3.612 0 6.785-3.201 6.785-6.901v-32.188c-.001-3.669-3.173-6.901-6.785-6.901m76.97 0c-3.611 0-6.783 3.201-6.783 6.901v32.188c0 3.67 3.171 6.901 6.783 6.901 3.613 0 6.785-3.201 6.785-6.901v-32.188c.03-3.669-3.143-6.901-6.785-6.901m-22.612-26.664l5.903-5.962c.911-.911.911-2.32 0-3.201-.91-.911-2.232-.911-3.171 0l-6.784 6.901c-3.171-2.292-7.253-3.201-11.776-3.201s-8.575.909-12.245 2.761l-6.344-6.931c-.881-.441-2.732-.441-3.614 0-.441.911-.441 2.761 0 3.672l5.903 5.962c-6.344 5.05-10.864 12.862-10.864 22.053h54.299c0-9.164-4.551-17.445-11.307-22.054m-24.902 12.89h-4.523v-4.611h4.523v4.611zm22.612 0h-4.523v-4.611h4.523v4.611z"/><path fill="#ACACAC" d="M649.047 49.584v142.084c0 4.624-3.75 8.332-8.334 8.332H482.381a8.304 8.304 0 0 1-8.334-8.332V8.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F6F4F4" d="M517.517 67.881h88.062v12.848h-88.062zM517.517 97.743h88.062v12.848h-88.062zM517.517 127.605h61.644v12.846h-61.644z"/><path fill="#03A9F4" d="M414.024 49.853v141.33c0 4.598-3.717 8.29-8.242 8.29H249.266c-4.573 0-8.242-3.692-8.242-8.29V8.817c0-4.548 3.669-8.29 8.242-8.29h115.773l48.985 49.326z"/><path fill="#FFF" d="M379.844 102.079c-.135 6.281-2.731 12.037-6.867 16.172-4.146 4.134-9.756 6.671-15.977 6.671h-11.048a34.074 34.074 0 0 0 5.939-9.161H357c7.404 0 13.513-6.098 13.685-13.818.159-7.513-5.953-13.439-13.685-13.671h-21.634c-3.049 0-5.89 1.036-8.209 2.793a13.78 13.78 0 0 0-3.292 3.536 14.142 14.142 0 0 0-2.318 7.476l-9.159-.135c.014-.817.074-1.634.183-2.427.817-6.462 4.281-12.145 9.245-15.866 3.806-2.854 8.501-4.548 13.55-4.548H357c12.477.27 23.111 10.27 22.844 22.978"/><path fill="#FFF" d="M275.205 101.945c.135-6.281 2.731-12.036 6.866-16.172 4.146-4.134 9.756-6.671 15.977-6.671h11.048a34.074 34.074 0 0 0-5.939 9.161h-5.11c-7.404 0-13.513 6.098-13.685 13.818-.159 7.513 5.953 13.439 13.685 13.671h21.634c3.049 0 5.891-1.036 8.209-2.793a13.748 13.748 0 0 0 3.292-3.536 14.142 14.142 0 0 0 2.318-7.476l9.159.135a20.059 20.059 0 0 1-.183 2.427c-.817 6.462-4.281 12.145-9.245 15.866-3.806 2.854-8.501 4.548-13.55 4.548h-21.634c-12.476-.269-23.109-10.269-22.842-22.978"/><path fill="#7757BC" d="M-45.313 49.785v142.084c0 4.634-3.754 8.332-8.349 8.332h-158.657c-4.645 0-8.346-3.698-8.346-8.332V8.535c0-4.584 3.727-8.334 8.346-8.334h117.341l49.665 49.584z"/><path fill="#FFF" d="M-104.513 95.388V77.522c0-3.066-2.28-5.109-5.71-5.109h-68.351c-3.405 0-5.71 2.042-5.71 5.109v51.006c0 3.066 2.278 5.108 5.71 5.108h68.377c3.405 0 5.71-2.042 5.71-5.108v-17.84l22.791 20.408V74.981l-22.817 20.407z"/><path fill="#FF5722" d="M-502.145 49.585v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.335c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-621.196 105.237l24.53 27.062 33.552-46.552 38.612 62.062h-126.286zM-599.02 74.329c0 8.444-6.844 15.288-15.288 15.288-8.442 0-15.288-6.844-15.288-15.288 0-8.444 6.846-15.288 15.288-15.288 8.444 0 15.288 6.844 15.288 15.288"/><path fill="#FDCA07" d="M175 50.271v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0 192.355V9.021C0 4.437 3.708.687 8.334.687h117.124L175 50.271z"/><path fill="#FFF" d="M75.237-.687h12.262v12.262H75.237zM75.237 23.839h12.262v12.262H75.237zM75.237 47.359h12.262v12.262H75.237zM75.237 71.587h12.262v27.04H75.237zM87.501 11.577h12.262v12.262H87.501zM87.501 36.101h12.262v12.262H87.501zM87.501 59.535h12.262v12.262H87.501z"/><path fill="#FFF" d="M81.369 86.365h18.394v12.262H81.369zM102.235 143.06l-4.324-33.834-21.932-.198-3.466 34.032c-.484 3.656 1.572 6.864 6.52 6.864h16.682c4.736 0 7.034-3.327 6.52-6.864zm-7.153-.325H79.667v-6.292h15.414v6.292z"/><path fill="#FFED18" d="M886.322 43.904h-78.974l-17.276-17.5h-61.24a8.76 8.76 0 0 0-8.76 8.761V164.847c0 4.812 3.938 8.75 8.75 8.75h157.5c4.812 0 8.75-3.938 8.75-8.75V52.654c0-4.813-3.937-8.75-8.75-8.75"/><path fill="#FDCA07" d="M895.072 164.846c0 4.812-3.938 8.75-8.75 8.75h-157.5c-4.812 0-8.75-3.938-8.75-8.75V70.862c0-4.812 3.938-8.75 8.75-8.75h157.5c4.812 0 8.75 3.938 8.75 8.75v93.984z"/><g font-family="'MicrosoftYaHei'" font-size="40"><text transform="translate(-843.173 -1523.81)">M</text><text transform="translate(-804.093 -1523.81)">A</text><text transform="translate(-776.493 -1523.81)">C</text></g><text transform="translate(-828.293 -1774.516)" font-family="'MicrosoftYaHei'" font-size="40">WIN</text><text transform="translate(-952.094 -1245.953)" font-family="'MicrosoftYaHei'" font-size="40">鍥惧舰锛忓嵃鍒�</text><text transform="translate(-1032.094 -955.434)" font-family="'MicrosoftYaHei'" font-size="40">浜у搧锛忔�濈淮瀵煎浘</text><text transform="translate(-952.094 -697.409)" font-family="'MicrosoftYaHei'" font-size="40">褰辫锛忓箍鍛�</text><text transform="translate(-832.094 -163.355)" font-family="'MicrosoftYaHei'" font-size="40">浠g爜</text><text transform="translate(-832.094 133.675)" font-family="'MicrosoftYaHei'" font-size="40">閫氱敤</text><text transform="translate(-952.094 -471.875)" font-family="'MicrosoftYaHei'" font-size="40">宸ヤ笟锛忓缓绛�</text><path fill="#FF40B6" d="M-286.123 49.284v142.935c0 4.662-3.746 8.382-8.332 8.382h-158.339c-4.636 0-8.329-3.72-8.329-8.382V7.787c0-4.611 3.72-8.384 8.329-8.384h117.105l49.566 49.881z"/><path fill="#FFF" d="M-402.661 59.929a2.611 2.611 0 0 0-2.62 2.62v67.198a15.833 15.833 0 0 0-7.911-2.096c-8.724 0-15.772 7.046-15.772 15.744s7.048 15.746 15.772 15.746 15.77-7.048 15.77-15.746c0-.628-.026-1.284-.105-1.859.079-.235.105-.497.105-.761V85.498l55.251-9.744v38.248a15.854 15.854 0 0 0-7.911-2.096c-8.724 0-15.772 7.048-15.772 15.746s7.048 15.744 15.772 15.744 15.77-7.046 15.77-15.744c0-.63-.027-1.284-.105-1.861a2.43 2.43 0 0 0 .105-.758V51.519c0-1.284 0-2.881-2.173-2.567-.447.052-66.176 10.977-66.176 10.977"/><path fill="#29D3B2" d="M-502.145-205.442v142.083c0 4.625-3.75 8.333-8.333 8.333h-158.333a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125l49.541 49.583z"/><g fill="#FFF"><path d="M-610.686-194.87h1.562v7.813h-1.562c-5.836-.205-8.545 1.772-8.125 5.938v16.562c0 4.17-1.67 7.397-5 9.688 3.33 2.295 5 5.522 5 9.688v16.562c-.42 3.955 2.289 5.83 8.125 5.625h1.562v7.813h-1.562c-11.875.415-17.607-3.75-17.188-12.5v-16.875c.205-4.165-2.188-6.25-7.188-6.25H-636v-7.812h.938c5 0 7.393-2.08 7.188-6.25v-16.562c-.42-9.378 5.313-13.855 17.188-13.44zM-570.478-194.87h1.562c11.875-.415 17.602 4.063 17.188 13.438v16.562c0 4.17 2.393 6.25 7.188 6.25h1.25v7.812h-1.25c-4.795 0-7.188 2.085-7.188 6.25v16.875c.414 8.54-5.312 12.705-17.188 12.5h-1.562v-7.813h1.562c5.83.205 8.539-1.67 8.125-5.625v-16.562c0-4.165 1.664-7.393 5-9.688-3.336-2.29-5-5.518-5-9.688v-16.562c.414-4.165-2.295-6.143-8.125-5.938h-1.562v-7.811z"/></g><path fill="#29D3B2" d="M-286.123-205.442v142.083c0 4.625-3.75 8.333-8.333 8.333H-452.79a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125l49.542 49.583z"/><ellipse fill="#FFF" cx="-373.623" cy="-190.963" rx="42.548" ry="12.063"/><path fill="#FFF" d="M-373.623-154.893c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.888 12.899 43.5 12.899z"/><path fill="#FFF" d="M-373.623-130.959c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.888 12.899 43.5 12.899z"/><path fill="#FFF" d="M-373.623-107.025c36.612 0 43.5-12.899 43.5-12.899V-137.6s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.888 12.899 43.5 12.899z"/><path fill="#03A9F4" d="M175-205.442v142.083c0 4.625-3.75 8.333-8.333 8.333H8.333A8.304 8.304 0 0 1 0-63.359v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125L175-205.442z"/><path fill="#FFF" d="M62.202-152.185c.344 20.488 16.447 28.926 31.6 28.926 12.601 0 20-2.805 26.25-6.055l2.582 10.848c-5.332 3.402-11.332 6.916-29.916 6.916-29.999 0-44.978-18.43-44.978-42.014 0-25.137 18.807-44.937 43.084-44.937 27.205 0 36.437 23.932 36.437 39.256 0 3.1-.346 5.51-.518 7.061H62.202zm50.422-10.847c.174-9.643-5.959-24.621-23.006-24.621-15.324 0-26.039 14.117-27.244 24.621h50.25z"/><path fill="#3F7AD9" d="M-502.145-1828.423l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M-45.489-1828.423l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#58A138" d="M-267.478-1828.619l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#2FB69A" d="M175-1828.423l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#3F7AD9" d="M399.989-1828.617l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#718BC8" d="M871.977-1828.423v142.084c0 4.624-3.75 8.332-8.334 8.332H705.311a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M834.477-1778.007c0 27.614-22.386 50-50 50s-50-22.386-50-50 22.386-50 50-50 50 22.386 50 50"/><path fill="#718BC8" d="M799.061-1778.007c0 8.054-6.53 14.584-14.584 14.584-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584"/><path fill="#6479AB" d="M871.977-1828.423l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M-502.069-1561.594l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#4A5BD7" d="M-502.069-1273.083l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#58A138" d="M-267.478-1561.594l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#3F7AD9" d="M-34.098-1561.587l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#6479AB" d="M187.243-1561.587l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M-286.04-1273.56l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#8C1DCD" d="M-286.042-1015.532l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-502.154-1015.532l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#624A97" d="M-502.154-757.513l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-45.313 49.783l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.201"/><path fill="#DCAE29" d="M175 50.27l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.687"/><path fill="#0F797A" d="M-286.123-757.315l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-286.039-499.481l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#475A63" d="M-45.499-499.483l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#1993D0" d="M187.244-499.29l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M175-205.443l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#5BA23A" d="M-58.1-205.443l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#2FB69A" d="M-286.039-205.443l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-502.145-205.443l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DC4C29" d="M-502.145 49.584l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.001"/><path fill="#DC3F9D" d="M-286.039 50.073l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.49"/><path fill="#1993D0" d="M415.024 49.391l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V-.191"/><path fill="#969594" d="M649.047 49.27l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V-.313"/><path fill="#D46B1C" d="M-34.101-1273.358l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#9E176D" d="M187.243-1273.083l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#AD282B" d="M400.068-1273.083l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#9E176D" d="M400.068-1015.532l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#AD282B" d="M187.243-1015.532l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-34.101-1015.532l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-502.145-499.29l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><g><path fill="#718BC8" d="M624.977-1828.349v142.084c0 4.624-3.75 8.332-8.334 8.332H458.311a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M587.477-1791.932c0 27.614-22.386 50-50 50s-50-22.386-50-50 22.386-50 50-50 50 22.386 50 50"/><path fill="#718BC8" d="M552.061-1791.932c0 8.054-6.53 14.584-14.584 14.584-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584"/><path opacity=".2" fill="#231815" d="M575.436-1836.683v-41.25l49.542 49.583H583.77c-4.584.001-8.334-3.749-8.334-8.333z"/><g fill="#FFF"><path d="M503.24-1710.753c.172 5.043 4.127 7.221 8.597 7.221 3.266 0 5.617-.459 7.738-1.26l1.031 4.871c-2.407.973-5.731 1.719-9.743 1.719-9.055 0-14.385-5.559-14.385-14.098 0-7.738 4.7-15.016 13.64-15.016 9.055 0 12.036 7.451 12.036 13.582 0 1.32-.115 2.35-.229 2.982H503.24zm12.265-4.93c.057-2.578-1.089-6.82-5.789-6.82-4.356 0-6.19 3.955-6.476 6.82h12.265zM532.062-1726.687l3.324 5.275a119.98 119.98 0 0 1 2.522 4.297h.172a149.373 149.373 0 0 1 2.408-4.412l3.094-5.16h7.68l-9.342 13.412 9.514 14.5h-7.967l-3.438-5.559c-.917-1.49-1.719-2.979-2.522-4.527h-.115c-.802 1.604-1.604 2.979-2.522 4.527l-3.21 5.559h-7.794l9.685-14.213-9.342-13.699h7.853zM559.564-1710.753c.172 5.043 4.127 7.221 8.597 7.221 3.266 0 5.617-.459 7.738-1.26l1.031 4.871c-2.407.973-5.731 1.719-9.743 1.719-9.055 0-14.385-5.559-14.385-14.098 0-7.738 4.7-15.016 13.64-15.016 9.055 0 12.036 7.451 12.036 13.582 0 1.32-.115 2.35-.229 2.982h-18.685zm12.265-4.93c.057-2.578-1.089-6.82-5.789-6.82-4.356 0-6.19 3.955-6.476 6.82h12.265z"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/svg/fileType/pdf.svg b/src/assets/svg/fileType/pdf.svg
deleted file mode 100644
index 67c0f10..0000000
--- a/src/assets/svg/fileType/pdf.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="175" height="200"><path fill="#448AFF" d="M-727.133-505.471v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-863.174-488.432h13.227l13.436 56.874h.208l15.002-56.874h13.334l14.584 56.874h.209l13.853-56.874h13.228l-20.52 74.377h-13.232l-14.892-56.877h-.212l-15.206 56.877h-13.44z"/><path fill="#62BB37" d="M-492.467-505.47v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V-546.72c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-612.26-488.428h15.524l16.874 26.25 17.602-26.25h14.584l-24.582 35.832 26.354 38.542h-15.836l-18.538-28.438-18.856 28.438h-14.896l26.354-38.542z"/><path fill="#F57C00" d="M-270.478-505.473v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-387.038-488.432h32.812c5.274 0 9.582.766 12.914 2.292 3.334 1.53 5.9 3.438 7.708 5.728 1.806 2.292 3.038 4.794 3.698 7.5.66 2.71.988 5.208.988 7.5 0 2.294-.328 4.776-.988 7.45-.66 2.672-1.892 5.156-3.698 7.446-1.808 2.29-4.374 4.186-7.708 5.676-3.332 1.498-7.64 2.242-12.914 2.242h-19.792v28.54h-13.02v-74.374zm13.02 35.21h19.06c1.46 0 2.954-.212 4.48-.626a12.867 12.867 0 0 0 4.218-2.032c1.286-.94 2.328-2.188 3.126-3.75.798-1.564 1.196-3.524 1.196-5.884 0-2.43-.346-4.444-1.042-6.042-.692-1.596-1.632-2.866-2.812-3.802-1.18-.94-2.534-1.578-4.06-1.928-1.53-.346-3.162-.52-4.896-.52h-19.27v24.584z"/><path fill="#448AFF" d="M175-505.473v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0-363.389v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124L175-505.473z"/><path fill="#FFF" d="M53.345-490.326h14.3l19.69 62.15h.22l20.13-62.15h13.97l-26.84 78.54H79.527z"/><path fill="#29D3B2" d="M-49.989-505.472v142.082c0 4.625-3.751 8.334-8.334 8.334h-158.332a8.306 8.306 0 0 1-8.334-8.334v-183.331c0-4.584 3.709-8.334 8.334-8.334H-99.53l49.541 49.583z"/><path fill="#FFF" d="M-172.601-498.429h70.225v13.121h-27.581v73.626h-15.186v-73.626h-27.458z"/><path fill="#F57C00" d="M-726.134-239.02v143.708c0 4.677-3.793 8.427-8.429 8.427h-160.141a8.398 8.398 0 0 1-8.429-8.427v-185.429c0-4.636 3.75-8.429 8.429-8.429h118.462l50.108 50.15z"/><path fill="#FFF" d="M-772.273-215.135l-33.73 33.73 3.75 4.19 28.87-28.868zM-833.623-191.299c-23.634 23.634-31.372 45.44-31.372 45.44s21.806-7.738 45.44-31.372l4.072-4.074-14.068-14.066-4.072 4.072zM-810.692-186.103l-14.068-14.067 38.405-38.406 14.068 14.068zM-864.994-141.652h92.707v6.274h-92.707z"/><path fill="#62BB37" d="M-492.467-238.443v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-627.969-195.661h22.914v41.894h-22.914zM-591.424-235.319h22.914v81.552h-22.914zM-554.881-211.354h22.914v57.588h-22.914zM-627.969-142.529h96.002v6.2h-96.002z"/><path fill="#448AFF" d="M-259.087-238.445v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-391.952-182.227v-41.732c0-4.466 3.654-8.12 8.12-8.12h74.49c4.466 0 8.12 3.654 8.12 8.12v41.732M-391.952-174.843h90.73v8.12h-90.73zM-368.272-141.49h43.368v8.12h-43.368z"/><path fill="#FFF" d="M-350.648-171.977h8.12v34.55h-8.12z"/><path fill="#718BC8" d="M-37.745-238.445v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-125.245-252.028c-27.614 0-50 22.386-50 50s22.386 50 50 50 50-22.386 50-50-22.387-50-50-50zm-.001 64.584c-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584 0 8.054-6.53 14.584-14.584 14.584zM-148.313-109.815h-4.702v-3.046h-.086c-.668 1.306-1.64 2.242-2.916 2.806a9.85 9.85 0 0 1-4.048.85c-1.77 0-3.316-.312-4.634-.936-1.322-.624-2.418-1.472-3.288-2.546-.872-1.072-1.524-2.342-1.958-3.808-.436-1.466-.654-3.04-.654-4.724 0-2.028.276-3.786.828-5.264.55-1.482 1.284-2.7 2.198-3.658.914-.958 1.958-1.66 3.134-2.11a9.96 9.96 0 0 1 3.59-.676c.698 0 1.406.066 2.134.196a9.66 9.66 0 0 1 2.09.63 8.33 8.33 0 0 1 1.848 1.112 6.16 6.16 0 0 1 1.416 1.588h.086v-11.49h4.962v31.076zm-17.324-11.012c0 .958.124 1.902.37 2.83a7.78 7.78 0 0 0 1.132 2.482 5.727 5.727 0 0 0 1.938 1.74c.782.434 1.71.652 2.784.652 1.104 0 2.054-.23 2.852-.696a5.892 5.892 0 0 0 1.958-1.828 8.278 8.278 0 0 0 1.132-2.546c.246-.942.37-1.908.37-2.894 0-2.496-.558-4.44-1.676-5.834-1.116-1.392-2.632-2.088-4.548-2.088-1.162 0-2.14.24-2.938.718a5.983 5.983 0 0 0-1.958 1.872 7.755 7.755 0 0 0-1.088 2.612 13.58 13.58 0 0 0-.328 2.98M-140.739-132.316h4.702v3.132h.128c.378-.55.784-1.058 1.22-1.522.434-.464.92-.856 1.458-1.176a7.466 7.466 0 0 1 1.85-.762c.698-.188 1.494-.282 2.394-.282 1.364 0 2.634.306 3.808.914 1.176.608 2.01 1.554 2.504 2.828.84-1.158 1.812-2.074 2.916-2.74 1.102-.668 2.482-1.002 4.136-1.002 2.378 0 4.228.58 5.55 1.74 1.318 1.162 1.978 3.106 1.978 5.834v15.538h-4.962v-13.146c0-.898-.03-1.718-.086-2.458-.06-.74-.226-1.378-.502-1.916a2.836 2.836 0 0 0-1.24-1.24c-.55-.29-1.306-.434-2.264-.434-1.68 0-2.9.522-3.654 1.566-.756 1.046-1.132 2.524-1.132 4.44v13.188h-4.962v-14.45c0-1.568-.282-2.75-.85-3.548-.566-.796-1.602-1.196-3.112-1.196a4.54 4.54 0 0 0-1.85.392 4.595 4.595 0 0 0-1.566 1.13c-.45.494-.812 1.104-1.088 1.828-.278.728-.414 1.554-.414 2.482v13.362h-4.962v-22.502zM-79.892-110.99c0 3.396-.95 5.928-2.85 7.596-1.9 1.67-4.636 2.502-8.204 2.502-1.134 0-2.272-.116-3.418-.346a10.209 10.209 0 0 1-3.134-1.176 7.541 7.541 0 0 1-2.37-2.178c-.64-.9-1.018-2-1.134-3.308h4.962c.146.698.392 1.262.742 1.7.346.434.76.776 1.24 1.02a4.658 4.658 0 0 0 1.586.48c.582.072 1.192.108 1.83.108 2.002 0 3.468-.492 4.396-1.48.928-.984 1.392-2.408 1.392-4.266v-3.436h-.086c-.696 1.246-1.646 2.22-2.852 2.916a7.647 7.647 0 0 1-3.896 1.044c-1.798 0-3.328-.312-4.59-.936a8.733 8.733 0 0 1-3.134-2.568c-.828-1.088-1.43-2.344-1.808-3.764-.376-1.422-.566-2.946-.566-4.57 0-1.508.234-2.946.698-4.31.464-1.364 1.132-2.56 2.002-3.592a9.628 9.628 0 0 1 3.2-2.46c1.262-.608 2.69-.912 4.286-.912 1.422 0 2.728.298 3.918.892 1.19.596 2.102 1.53 2.742 2.808h.086v-3.09h4.962v21.326zm-11.012-2.742c1.104 0 2.038-.224 2.808-.674a5.532 5.532 0 0 0 1.872-1.784 7.844 7.844 0 0 0 1.044-2.524c.218-.942.326-1.894.326-2.852s-.116-1.886-.346-2.786c-.234-.9-.588-1.698-1.068-2.394a5.142 5.142 0 0 0-1.872-1.654c-.768-.404-1.69-.608-2.764-.608-1.104 0-2.032.23-2.786.694a5.575 5.575 0 0 0-1.826 1.808 7.74 7.74 0 0 0-1.002 2.524 13.25 13.25 0 0 0-.306 2.808c0 .93.118 1.834.35 2.72.23.886.588 1.676 1.066 2.374a5.669 5.669 0 0 0 1.828 1.696c.74.436 1.632.652 2.676.652"/><path fill="#D32F2F" d="M175 49.584v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0 191.668V8.334C0 3.75 3.708 0 8.334 0h117.124L175 49.584z"/><path fill="#F6F4F4" d="M85.987 77.631c.758 0 .758 0 0 0 .758-3.03 1.516-4.544 1.516-6.816v-1.514c.756-3.786.756-6.816 0-7.572v-.758l-.758-.758s0 .758-.758.758c-1.515 4.544-1.515 9.844 0 16.66m-22.716 52.25c-1.516.756-3.03 1.514-3.786 2.27-5.302 4.544-9.088 9.846-9.844 12.118 4.542-.758 9.086-5.302 13.63-14.388.756 0 .756 0 0 0 .756 0 0 0 0 0m69.666-11.36c-.756-.756-3.786-3.028-14.388-3.028h-1.514v.758c5.3 2.27 10.602 3.786 14.388 3.786H133.695v-.758s-.758 0-.758-.758m3.03 6.058c-1.516.758-3.786 1.516-6.816 1.516-6.058 0-15.146-1.516-22.718-5.302-12.872 1.514-22.716 3.03-30.29 6.058-.756 0-.756 0-1.514.758-9.086 15.902-16.66 23.474-22.718 23.474-1.514 0-2.27 0-3.028-.756l-3.786-2.272v-.758c-.758-1.514-.758-2.272-.758-3.786.758-3.786 5.302-10.602 14.388-15.902 1.514-.758 3.786-2.272 6.816-3.786 2.27-3.786 4.542-8.33 7.572-13.63 3.786-7.574 6.058-15.146 8.328-21.96-3.028-9.088-4.542-14.388-1.512-24.99.756-3.03 3.028-6.058 6.056-6.058h1.516c1.514 0 3.028.758 4.542 1.514 5.302 5.302 3.03 17.416 0 27.26v.758c3.03 8.33 7.574 15.146 12.116 19.688 2.272 1.516 3.786 3.03 6.816 4.544 3.786 0 6.816-.756 9.844-.756 9.088 0 15.146 1.514 17.416 5.3.758 1.514.758 3.028.758 4.544-.758.756-1.515 3.028-3.028 4.542M86.745 95.047c-1.514 5.3-4.544 11.358-7.572 18.174-1.514 3.03-3.03 5.3-4.544 8.33h1.514c9.844-3.786 18.932-6.058 24.99-6.816-1.514-.756-2.272-1.514-3.03-2.272-3.787-4.542-8.329-10.6-11.358-17.416"/><path fill="#5465FC" d="M-727.138 49.585v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.335c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-853.389 68.272c4.224-.768 10.081-1.344 18.047-1.344 8.641 0 14.977 1.824 19.107 5.28 3.84 3.168 6.336 8.256 6.336 14.305 0 6.144-1.92 11.231-5.57 14.687-4.704 4.704-12.096 6.914-20.447 6.914-2.21 0-4.224-.096-5.762-.386v24.387h-11.712V68.272zm11.712 30.145c1.44.384 3.362.48 5.762.48 8.832 0 14.207-4.32 14.207-11.903 0-7.202-4.992-11.041-13.153-11.041-3.264 0-5.568.288-6.816.576v21.888zM-802.801 121.265c2.69 1.632 7.777 3.362 12.001 3.362 5.184 0 7.488-2.114 7.488-5.186 0-3.168-1.92-4.8-7.68-6.816-9.119-3.168-12.959-8.159-12.863-13.633 0-8.255 6.816-14.687 17.663-14.687 5.184 0 9.696 1.344 12.385 2.784l-2.304 8.352c-2.016-1.152-5.762-2.688-9.89-2.688-4.224 0-6.527 2.016-6.527 4.896 0 2.978 2.208 4.416 8.159 6.53 8.448 3.072 12.385 7.392 12.481 14.303 0 8.45-6.623 14.593-19.009 14.593-5.664 0-10.753-1.346-14.207-3.266l2.303-8.544z"/><path fill="#F57C00" d="M-511.116 49.584v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-619.592 114.785l-5.568 18.337h-12.193l20.739-64.707h15.073l21.023 64.707h-12.671l-5.856-18.337h-20.547zm18.53-8.927l-5.088-15.937c-1.248-3.936-2.304-8.354-3.264-12.097h-.192c-.96 3.744-1.92 8.258-3.074 12.097l-4.992 15.937h16.61zM-559.881 73.312c0 3.552-2.592 6.336-6.72 6.336-3.938 0-6.53-2.784-6.53-6.336 0-3.648 2.69-6.434 6.624-6.434 4.034 0 6.53 2.786 6.626 6.434m-12.577 13.057h11.905v46.754h-11.905V86.369z"/><path fill="#C11187" d="M-37.75 49.584v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-159.425 68.847h11.807v64.707h-11.807zM-91.459 65.392v55.011c0 4.798.194 9.983.386 13.151h-10.561l-.48-7.392h-.192c-2.784 5.182-8.448 8.448-15.263 8.448-11.137 0-19.971-9.505-19.971-23.905-.096-15.649 9.697-24.961 20.931-24.961 6.432 0 11.042 2.688 13.151 6.144h.192V65.392h11.807zm-11.808 40.897c0-.96-.096-2.114-.288-3.074-1.056-4.608-4.8-8.351-10.175-8.351-7.584 0-11.809 6.719-11.809 15.457 0 8.543 4.226 14.783 11.713 14.783 4.8 0 9.023-3.264 10.177-8.351.286-1.056.382-2.208.382-3.456v-7.008z"/><path fill="#F57C00" d="M-259.091 49.584v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F57C00" d="M-357.393 64.907h21.999v21.999h-21.999z"/><path fill="#FFF" d="M-299.594 93.406v-5.5h-23.791c7.5 5.298 14.101 13.349 19.571 24.041 7.678 15.011 10.454 29.8 10.566 30.422l-7.866 1.448c-.09-.484-8.178-42.534-33.412-53.021v4.978h-23.735v-4.978c-25.237 10.49-33.324 52.537-33.412 53.021l-7.867-1.448c.114-.622 2.888-15.411 10.568-30.422 5.47-10.691 12.071-18.743 19.571-24.041h-24.187v5.5h-18.999V74.407h18.999v5.5h35.328v-7.868h23.735v7.868h34.932v-5.5h18.999v18.999h-19zm-39.8-16.499h-13.999v13.999h13.999V76.907z"/><path fill="#C11187" d="M175 307.61v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0 449.694V266.36c0-4.584 3.708-8.334 8.334-8.334h117.124L175 307.61z"/><g fill="#FFF"><path d="M75.79 390.389l-6.76-12.408c-2.686-4.816-4.444-8.15-6.204-11.76h-.278c-1.482 3.61-3.148 6.944-5.648 11.76l-6.206 12.408H37.638l18.52-31.576-17.78-30.836h13.056l6.762 12.872c2.036 3.888 3.518 6.944 5.186 10.464h.184c1.668-3.89 2.964-6.668 4.908-10.464l6.666-12.872h13.056l-18.24 30.466 18.982 31.946H75.79zM136.992 324.644v53.06c0 4.628.186 9.63.37 12.686h-10.186l-.462-7.13h-.184c-2.688 4.998-8.15 8.148-14.724 8.148-10.742 0-19.262-9.168-19.262-23.056-.092-15.094 9.352-24.078 20.188-24.078 6.204 0 10.65 2.594 12.686 5.928h.184v-25.558h11.39zm-11.39 39.448c0-.926-.092-2.038-.276-2.964-1.02-4.444-4.632-8.056-9.818-8.056-7.314 0-11.388 6.482-11.388 14.908 0 8.242 4.074 14.26 11.296 14.26 4.63 0 8.706-3.148 9.816-8.054.278-1.02.37-2.132.37-3.336v-6.758z"/></g><path fill="#A0F" d="M-511.112 307.611v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V266.361c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-557.124 319.863h-80.848l-14.14 31.298 54.564 62.868 54.562-62.868-14.138-31.298zm-3.72 6.926l8.282 20.65h-14.884l6.602-20.65zm-7.058-.33l-6.042 19.378-15.102-19.378h21.144zm-14.072 20.98h-31.15l15.576-19.814 15.574 19.814zm-24.078-20.98l-15.1 19.378-6.044-19.378h21.144zm-28.202.33l6.602 20.65h-14.884l8.282-20.65zm-6.632 27.244h16.126l16.454 37.538-32.58-37.538zm23.326 0H-577.538l-20.01 45.652-20.012-45.652zm30.768 37.54l16.454-37.538h16.126l-32.58 37.538z"/><path fill="#D32F2F" d="M-259.607 307.61v142.084c0 4.634-3.724 8.332-8.282 8.332h-157.396c-4.608 0-8.28-3.698-8.28-8.332V266.36c0-4.584 3.698-8.334 8.28-8.334h116.408l49.27 49.584z"/><path fill="#FFF" d="M-297.122 332.647c.579.149 1.173.25 1.734.453 1.728.628 2.294 2.07 2.253 3.887-.056 2.523-.229 5.022-.936 7.483-1.308 4.549-4.118 7.567-8.195 9.358-2.871 1.261-5.893 1.72-8.935 2.076-2.098.243-4.193.535-6.287.821-.28.038-.561.149-.823.272-1.119.519-1.41 1.537-.582 2.444a21.79 21.79 0 0 0 2.803 2.557c3.754 2.883 7.615 5.62 11.301 8.595 4.167 3.362 7.819 7.291 10.595 12.06 2.726 4.684 4.108 9.788 3.925 15.378-.048 1.475-.722 2.326-2.111 2.396-2.159.107-4.32.123-6.479.143-2.682.024-5.362.014-8.044.02-2.732.004-5.466.002-8.201.012-1.952.006-3.905.032-5.857.034a18.846 18.846 0 0 1-1.714-.072c-2.436-.213-3.34-1.159-3.585-3.744-.35-3.664-.907-7.263-2.306-10.649-2.35-5.696-6.167-9.981-11.098-13.207-4.259-2.785-8.891-4.531-13.923-4.972-4.961-.436-9.579.553-13.287 4.575-2.241 2.43-3.477 5.428-4.342 8.621-.392 1.445-.734 2.905-1.165 4.336-.491 1.626-1.811 1.96-3.147 2.006-2.916.098-5.831.098-8.746.125-2.682.024-5.362.028-8.044.042-2.473.014-4.947.052-7.418.03-.646-.006-1.294-.153-1.924-.308-.935-.227-1.314-.779-1.261-1.781.328-6.092 2.74-11.054 7.364-14.82 3.811-3.102 8.145-5.034 12.694-6.352 4.315-1.251 8.696-2.227 13.042-3.356 1.219-.316 2.443-.656 3.614-1.135 1.873-.767 2.179-2.022.7-3.4-1.419-1.326-3.006-2.479-4.623-3.529-4.352-2.825-8.839-5.428-12.798-8.873-4.062-3.535-7.462-7.615-9.315-12.969-.974-2.817-1.38-5.744-1.374-8.754 0-1.155.557-2.05 1.783-2.34a21.873 21.873 0 0 1 4.406-.573c3.332-.09 6.664-.052 9.996-.058 2.682-.004 5.364.01 8.044.008 1.98 0 3.958-.02 5.937-.016.909.002 1.819.046 2.73.066 1.533.034 2.197.543 2.491 2.141.348 1.889.584 3.803.885 5.704 1.078 6.814 3.632 12.766 8.76 17.178 3.527 3.036 7.639 4.449 12.194 4.646 2.382.102 4.744.068 7.046-.751 3.547-1.261 5.269-4.096 4.937-8.018-.151-1.813-.272-3.63-.382-5.447-.074-1.235.312-1.982 1.469-2.207 1.451-.284 2.946-.38 4.418-.403 2.942-.042 5.883.03 8.824.044 2.68.01 5.362-.01 8.042.012 1.638.012 3.273.074 4.911.114.002.033.004.065.004.097"/><path fill="#D32F2F" d="M-37.745 307.61v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V266.36c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><g fill="#FFF"><path d="M-115.129 437.7s-.022-23.724 0-30.064c0-.318-.008-.636 0-.952.07-3.12 1.69-4.742 4.84-4.752 6.614-.02 13.226 0 19.84 0 5.562 0 8.37-2.794 8.372-8.35.002-22.692-.008-45.384.008-68.078.002-3.048-1.018-5.546-3.796-6.986-1.046-.542-2.326-.878-3.502-.88a23363.06 23363.06 0 0 0-72.018-.05c-3.896.002-6.908 3.018-7.108 6.962-.046.904-.01 1.812-.01 2.718v66.582c0 5.096 3.012 8.082 8.12 8.08 11.776-.006 35.328-.002 35.328-.002v9.812s-23.946-.008-36.04.008c-2.722.002-5.344-.46-7.734-1.76-5.898-3.212-9.34-8.042-9.346-14.932-.024-23.372.092-46.744-.07-70.114-.05-7.154 5.04-15.584 14.712-17.022a18.82 18.82 0 0 1 2.704-.2c23.916-.024 47.83-.042 71.746-.05 9-.004 16.8 7.706 16.812 16.718.034 23.462.034 46.924.006 70.388-.012 9.346-7.282 17.056-16.64 17.254-4.708.098-9.422.056-14.13.014-1.088-.01-2.122 1.36-2.122 1.36l-9.972 24.296z"/><path d="M-141.491 347.286v2.236c.002 11.594.006 23.186.006 34.778 0 1.808-.004 1.814-1.772 1.814-3.432.004-6.864.002-10.436.002-.036-.67-.09-1.194-.09-1.716-.004-16.03.014-32.062-.03-48.092-.004-1.318.376-1.672 1.672-1.656 5.432.068 10.868.076 16.302-.008 1.324-.02 1.76.446 2.066 1.66 2.618 10.354 5.304 20.69 7.972 31.032.12.466.272.922.734 1.436.158-.416.358-.824.47-1.252 2.75-10.552 5.506-21.1 8.212-31.664.244-.948.66-1.198 1.582-1.194 5.616.016 11.23.01 16.844-.068 1.212-.016 1.53.366 1.528 1.544-.034 16.168-.034 32.334.002 48.5.004 1.182-.31 1.582-1.52 1.548-3.214-.092-6.43-.056-9.644-.082-.398-.004-.792-.07-1.36-.124v-38.544l-.38-.072c-.148.432-.32.86-.442 1.3-3.336 12.034-6.678 24.068-9.978 36.114-.276 1.008-.706 1.394-1.766 1.36-2.398-.074-4.802-.08-7.2-.002-1.094.036-1.586-.296-1.884-1.388-3.3-12.09-6.654-24.168-9.996-36.246-.116-.42-.266-.832-.4-1.248a20.3 20.3 0 0 1-.492.032"/></g><path fill="#A0F" d="M-727.133 307.611v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V266.361c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-861.69 328.777c4.416-.768 11.04-1.344 17.856-1.344 9.314 0 15.65 1.536 19.972 5.184 3.55 2.976 5.568 7.488 5.568 12.962 0 8.352-5.666 14.016-11.714 16.224v.29c4.608 1.726 7.394 6.238 9.024 12.48 2.018 8.064 3.744 15.554 5.09 18.05h-12.194c-.96-1.92-2.496-7.202-4.32-15.266-1.824-8.45-4.896-11.136-11.616-11.328h-5.954v26.594h-11.712v-63.846zm11.712 28.61h7.01c7.968 0 12.96-4.224 12.96-10.656 0-7.104-4.992-10.37-12.674-10.37-3.744 0-6.144.288-7.296.576v20.45zM-807.067 328.777c4.224-.768 10.08-1.344 18.048-1.344 8.642 0 14.978 1.824 19.108 5.28 3.84 3.168 6.336 8.256 6.336 14.306 0 6.144-1.92 11.232-5.57 14.688-4.704 4.704-12.096 6.914-20.448 6.914-2.21 0-4.224-.096-5.762-.386v24.388h-11.712v-63.846zm11.712 30.146c1.442.384 3.362.48 5.762.48 8.832 0 14.208-4.32 14.208-11.904 0-7.202-4.992-11.042-13.154-11.042-3.264 0-5.568.288-6.816.576v21.89z"/><path fill="#7757BC" d="M-727.133 565.636V707.72c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V524.386c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-847.965 629.199l-5.408 17.81h-11.842l20.142-62.846h14.64l20.42 62.846h-12.31l-5.686-17.81h-19.956zm17.996-8.67l-4.942-15.48c-1.212-3.822-2.238-8.112-3.17-11.748h-.186c-.932 3.636-1.866 8.02-2.984 11.748l-4.85 15.48h16.132zM-794.821 627.52c.28 8.206 6.714 11.75 13.986 11.75 5.316 0 9.14-.746 12.588-2.052l1.678 7.926c-3.914 1.586-9.322 2.798-15.85 2.798-14.732 0-23.404-9.046-23.404-22.94 0-12.586 7.646-24.428 22.192-24.428 14.732 0 19.58 12.122 19.58 22.098 0 2.146-.186 3.824-.372 4.848h-30.398zm19.954-8.018c.096-4.196-1.772-11.096-9.416-11.096-7.086 0-10.07 6.434-10.538 11.096h19.954z"/><path fill="#009497" d="M-511.112 565.637v142.084c0 4.624-3.75 8.332-8.335 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V524.387c0-4.584 3.708-8.334 8.334-8.334h117.124l49.543 49.584z"/><path fill="#FFF" d="M-598.611 566.655l32.849 40.88v57.67h21.9v-69.35zM-653.361 665.205h21.899v-57.67l32.851-40.88-54.75 29.2z"/><path fill="#FFF" d="M-598.611 662.285l22.629-24.554-22.629-71.076-23.361 71.076z"/><path fill="#D32F2F" d="M-727.133 823.662v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V782.412c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-793.495 897.968h-42.28V855.69h42.28v42.278zm8-50.278h-58.28v58.278h58.28V847.69z"/><path fill="#FFF" d="M-822.208 869.254h15.15v15.15h-15.15zM-819.562 820.338h9.856v29.25h-9.856zM-819.562 903.92h9.856v29.4h-9.856zM-788.301 871.9h30.158v9.856h-30.158zM-871.125 871.9h29.492v9.856h-29.492z"/><path fill="#03A9F4" d="M-37.745 823.661v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V782.411c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-125.245 930.47l-49.5-27.692v-54.016l49.5-23.076 49.5 23.076v54.016l-49.5 27.692zm-40.5-32.97l40.5 22.658 40.5-22.658v-43.004l-40.5-18.88-40.5 18.88V897.5z"/><path fill="#FFF" d="M-125.267 881.451l-47.176-26.392 4.394-7.856 42.824 23.958 42.816-23.478 4.328 7.892z"/><path fill="#FFF" d="M-125.245 929.814a4.502 4.502 0 0 1-4.5-4.5v-49.008c0-2.484 2.016-4.5 4.5-4.5s4.5 2.016 4.5 4.5v49.008c0 2.484-2.016 4.5-4.5 4.5"/><path fill="#546E7A" d="M-270.478 823.661v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V782.411c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-301.454 881.876c-.66-7.46-2.24-13.22-5-18.12-2.88-5.12-6.56-8.7-11.22-11-4.46-2.18-9.44-3.54-16.18-4.4-6.22-.8-12.78-1.02-20.98-.66-3.18.14-6.9.34-10.48.92-3.74.58-6.44 1.26-8.8 2.22-5 2.06-8.96 5.96-12.12 11.96-1.84 3.48-2.92 7.62-3.32 12.64-.58 7.4-.22 12.98 1.14 18.1.76 2.82 1.86 5.02 3.36 6.72 3.62 4.08 8.42 6.76 15.54 8.7 2.48.68 5.06 1.04 7.28 1.3 6.22.76 11.32.46 16.12-.96 5.34-1.58 10.2-3.9 14.48-6.92 2.18-1.54 4.24-3.42 6.12-5.22.62-.6.74-.76-.04-1.78-2.24-2.94-5.3-5.4-9.34-7.58-2.72-1.44-5.42-2.08-8.36-1.94-4.04.18-7.8.24-11.52.14-2.64-.06-5.18-.12-7.52-.9-3.14-1.04-6.12-2.64-8.98-4.2-1.84-.98-3.28-2.24-4.48-3.36-.48-.44-1.1-1.14-1.06-2.04.04-.92.74-1.58 1.34-2.04 1.06-.82 2.16-1.58 3.26-2.3l1.94-1.28c2.44-1.58 4.94-3.2 7.5-4.72l.66-.38c2.14-1.28 4.36-2.6 6.78-3.34 3.52-1.08 7.18-1.22 9.98-1.22.7 0 1.38 0 2.08.02 4.78.1 9.08.9 13.1 2.44 3.44 1.32 6.36 3.18 8.68 5.52 4.54 4.56 7.1 10.58 7.8 18.46.5 5.4.26 10.76-.7 15.88-.4 2.12-1.14 4.22-1.88 6.2-1.08 2.94-3.36 4.9-5.42 6.52-1.54 1.22-3.04 2.08-4.48 2.6-2.94 1.04-5.6 1.76-8.16 2.24l-.66.12c-4.16.78-8.46 1.58-12.76 1.88-4.16.26-8.6.38-14.34.38-1.44 0-2.86 0-4.3-.02-7.74-.06-13.9-1.06-19.36-3.16-3.74-1.42-6.76-3.68-9.02-6.72-2.62-3.54-4.36-7.84-5.16-12.8-1.16-7.24-1.84-12.82-2.24-18.1-.62-8.08.14-15.64 2.28-22.44.74-2.4 1.86-4.8 3.3-7.12 1.68-2.68 4.08-4.98 7.18-6.82 3.38-2.02 7.22-3.32 12.44-4.2 1.5-.26 3.02-.44 4.54-.62.92-.12 1.84-.22 2.76-.36 1.84-.24 3.68-.52 5.52-.78 3.3-.48 6.6-.96 9.9-1.38 5.14-.64 10.2-.72 14.04-.72 2.2 0 4.4.02 6.62.06l1.04.02c3.28.04 6.6.2 9.82.34 1.58.08 3.18.16 4.76.22h.4c0-.08 0-.18-.02-.32l-.76-6.14-.96-7.92-.16-.16c-.34 0-.66.06-.98.1-1.36.24-2.74.48-4.1.72-2.92.5-5.92 1.04-8.92 1.44-7.28.96-13.34 1.74-19.7 2.28l-3.96.32c-7.5.58-15.26 1.2-22.72 2.74-2.62.54-5.66 1.2-8.58 2.12-2.94.92-5.8 2.1-8.22 3.14-2.96 1.28-5.52 3.1-7.62 5.42-3.94 4.36-6.66 9.78-8.58 17.06-1.36 5.22-2.02 10.96-2.12 18.58-.08 8.3.94 16.68 3.14 25.58 1.82 7.34 4.02 13.02 6.92 17.94 2.08 3.5 4.48 6.08 7.32 7.88 3.72 2.38 7.02 3.8 10.38 4.5l2.3.5c2.96.64 6.02 1.32 9.02 1.6 4.24.38 8.58.56 12.78.72l4.4.18.02-.3h.96c1.2 0 2.4.02 3.6.04 2.6.02 5.2.06 7.8-.08 7.2-.4 14.8-1.02 21.92-3.64 2.36-.88 4.84-1.88 6.86-3.3 2.58-1.84 4.98-4.08 7.3-6.24l.56-.54c4.8-4.48 7.56-10.12 8.16-16.72.719-7.88.739-15.78.08-23.5m-55.48 20.6c.04-.44.1-.88.2-1.3.58-2.4 1.16-4.82 1.8-7.2.2-.76.54-2.04 1.98-2.04.3 0 .62.06 1.16.18 4.3 1.06 8.62 2.12 12.94 3.22.36.08.68.24.96.38l.96.44-.14 1.7-5.04 1.8c-3.94 1.38-7.86 2.74-11.8 4.1-.48.16-.96.22-1.4.28l-.52.06-1.32.22.22-1.84z"/><path fill="#FFF" d="M-347.522 864.836c-.42 1.08-.86 2.16-1.28 3.24-.62 1.54-1.24 3.1-1.84 4.66-.08.2-.1.22-.7.32-.06.02-.14.04-.22.04l-1.84-.38c-1.64-.34-3.26-.68-4.88-1.08-1.04-.24-2.06-.58-3.02-.92.76-.3 1.52-.6 2.28-.92 1.6-.64 3.18-1.28 4.78-1.96 1.34-.58 2.68-1.18 4.02-1.8.88-.4 1.759-.8 2.7-1.2"/><path fill="#009497" d="M-511.112 823.661v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V782.411c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-552.069 924.62h-93.086v-93.086h93.086v93.086zm-89.086-4h85.086v-85.086h-85.086v85.086z"/><path fill="#FFF" d="M-603.973 833.534h49.904v49.904h-49.904z"/><path fill="#62BB37" d="M-283.089 1117.208v142.935c0 4.661-3.746 8.382-8.332 8.382H-449.76c-4.635 0-8.329-3.72-8.329-8.382v-184.432c0-4.611 3.72-8.384 8.329-8.384h117.105l49.566 49.881z"/><path fill="#FFF" d="M-397.739 1195.433c0 2.76 1.793 4.609 4.523 4.609h4.523v16.094c0 3.67 3.171 6.901 6.783 6.901 3.613 0 6.784-3.201 6.784-6.901v-16.094h9.074v16.094c0 3.67 3.173 6.901 6.785 6.901s6.785-3.201 6.785-6.901v-16.094h4.523c2.731 0 4.521-1.849 4.521-4.609v-45.99h-54.299v45.99zm-11.336-45.99c-3.641 0-6.784 3.201-6.784 6.901v32.188c0 3.67 3.173 6.901 6.784 6.901 3.612 0 6.785-3.201 6.785-6.901v-32.188c0-3.669-3.173-6.901-6.785-6.901m76.971 0c-3.611 0-6.783 3.201-6.783 6.901v32.188c0 3.67 3.171 6.901 6.783 6.901 3.613 0 6.785-3.201 6.785-6.901v-32.188c.029-3.669-3.144-6.901-6.785-6.901m-22.613-26.664l5.903-5.962c.911-.911.911-2.32 0-3.201-.91-.911-2.232-.911-3.171 0l-6.784 6.901c-3.171-2.292-7.253-3.201-11.776-3.201s-8.575.91-12.245 2.761l-6.344-6.931c-.881-.441-2.732-.441-3.614 0-.441.911-.441 2.761 0 3.672l5.903 5.962c-6.344 5.05-10.865 12.862-10.865 22.053h54.299c.002-9.163-4.55-17.445-11.306-22.054m-24.902 12.891h-4.523v-4.611h4.523v4.611zm22.612 0h-4.523v-4.611h4.523v4.611z"/><path fill="#ACACAC" d="M424.059 1372.535v142.084c0 4.624-3.75 8.332-8.334 8.332H257.393a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F6F4F4" d="M292.528 1390.832h88.062v12.848h-88.062zM292.528 1420.694h88.062v12.848h-88.062zM292.528 1450.557h61.644v12.846h-61.644z"/><path fill="#03A9F4" d="M189.035 1372.805v141.33c0 4.598-3.717 8.29-8.242 8.29H24.277c-4.573 0-8.242-3.693-8.242-8.29v-182.366c0-4.548 3.669-8.29 8.242-8.29H140.05l48.985 49.326z"/><path fill="#FFF" d="M154.855 1425.031c-.135 6.281-2.731 12.037-6.867 16.172-4.146 4.134-9.756 6.671-15.977 6.671h-11.048a34.074 34.074 0 0 0 5.939-9.161h5.11c7.404 0 13.513-6.098 13.685-13.818.159-7.513-5.953-13.439-13.685-13.671h-21.634c-3.049 0-5.89 1.036-8.209 2.793a13.78 13.78 0 0 0-3.292 3.536 14.142 14.142 0 0 0-2.318 7.476l-9.159-.135c.014-.817.074-1.634.183-2.427.817-6.462 4.281-12.145 9.245-15.866 3.806-2.854 8.501-4.548 13.55-4.548h21.634c12.476.269 23.11 10.269 22.843 22.978"/><path fill="#FFF" d="M50.217 1424.897c.135-6.281 2.731-12.036 6.866-16.172 4.146-4.134 9.756-6.671 15.977-6.671h11.048a34.074 34.074 0 0 0-5.939 9.161h-5.11c-7.404 0-13.513 6.098-13.685 13.818-.159 7.513 5.953 13.439 13.685 13.671h21.634c3.049 0 5.89-1.036 8.209-2.793a13.748 13.748 0 0 0 3.292-3.536 14.142 14.142 0 0 0 2.318-7.476l9.159.135a20.059 20.059 0 0 1-.183 2.427c-.817 6.462-4.281 12.145-9.245 15.866-3.806 2.854-8.501 4.548-13.55 4.548H73.06c-12.477-.27-23.111-10.27-22.843-22.978"/><path fill="#7757BC" d="M-270.302 1372.736v142.084c0 4.634-3.754 8.332-8.349 8.332h-158.657c-4.645 0-8.346-3.698-8.346-8.332v-183.334c0-4.584 3.727-8.334 8.346-8.334h117.341l49.665 49.584z"/><path fill="#FFF" d="M-329.502 1418.339v-17.866c0-3.066-2.28-5.109-5.71-5.109h-68.351c-3.405 0-5.71 2.042-5.71 5.109v51.006c0 3.066 2.278 5.108 5.71 5.108h68.377c3.405 0 5.71-2.042 5.71-5.108v-17.84l22.791 20.408v-56.114l-22.817 20.406z"/><path fill="#FF5722" d="M-727.133 1372.536v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-846.185 1428.188l24.53 27.062 33.552-46.552 38.612 62.062h-126.286zM-824.009 1397.281c0 8.444-6.844 15.288-15.288 15.288-8.442 0-15.288-6.844-15.288-15.288 0-8.444 6.846-15.288 15.288-15.288 8.444 0 15.288 6.844 15.288 15.288"/><path fill="#FDCA07" d="M-49.989 1373.223v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-149.751 1322.264h12.262v12.262h-12.262zM-149.751 1346.79h12.262v12.262h-12.262zM-149.751 1370.31h12.262v12.262h-12.262zM-149.751 1394.538h12.262v27.04h-12.262zM-137.488 1334.528h12.262v12.262h-12.262zM-137.488 1359.052h12.262v12.262h-12.262zM-137.488 1382.486h12.262v12.262h-12.262z"/><path fill="#FFF" d="M-143.62 1409.316h18.394v12.262h-18.394zM-122.754 1466.012l-4.324-33.834-21.932-.198-3.466 34.032c-.484 3.656 1.572 6.864 6.52 6.864h16.682c4.736 0 7.034-3.328 6.52-6.864zm-7.153-.326h-15.414v-6.292h15.414v6.292z"/><path fill="#FFED18" d="M661.333 1366.855h-78.974l-17.276-17.5h-61.24a8.76 8.76 0 0 0-8.76 8.761V1487.798c0 4.812 3.938 8.75 8.75 8.75h157.5c4.812 0 8.75-3.938 8.75-8.75v-112.193c0-4.812-3.937-8.75-8.75-8.75"/><path fill="#FDCA07" d="M670.083 1487.797c0 4.812-3.938 8.75-8.75 8.75h-157.5c-4.812 0-8.75-3.938-8.75-8.75v-93.984c0-4.812 3.938-8.75 8.75-8.75h157.5c4.812 0 8.75 3.938 8.75 8.75v93.984z"/><g font-family="'MicrosoftYaHei'" font-size="40"><text transform="translate(-1068.162 -200.859)">M</text><text transform="translate(-1029.082 -200.859)">A</text><text transform="translate(-1001.482 -200.859)">C</text></g><text transform="translate(-1053.282 -451.565)" font-family="'MicrosoftYaHei'" font-size="40">WIN</text><text transform="translate(-1177.083 76.999)" font-family="'MicrosoftYaHei'" font-size="40">鍥惧舰锛忓嵃鍒�</text><text transform="translate(-1257.083 367.517)" font-family="'MicrosoftYaHei'" font-size="40">浜у搧锛忔�濈淮瀵煎浘</text><text transform="translate(-1177.083 625.543)" font-family="'MicrosoftYaHei'" font-size="40">褰辫锛忓箍鍛�</text><text transform="translate(-1057.082 1159.597)" font-family="'MicrosoftYaHei'" font-size="40">浠g爜</text><text transform="translate(-1057.082 1456.626)" font-family="'MicrosoftYaHei'" font-size="40">閫氱敤</text><text transform="translate(-1177.083 851.076)" font-family="'MicrosoftYaHei'" font-size="40">宸ヤ笟锛忓缓绛�</text><path fill="#FF40B6" d="M-511.112 1372.235v142.935c0 4.661-3.746 8.382-8.332 8.382h-158.339c-4.636 0-8.329-3.72-8.329-8.382v-184.432c0-4.611 3.72-8.384 8.329-8.384h117.105l49.566 49.881z"/><path fill="#FFF" d="M-627.65 1382.881a2.611 2.611 0 0 0-2.62 2.62v67.198a15.833 15.833 0 0 0-7.911-2.096c-8.724 0-15.772 7.046-15.772 15.744s7.048 15.746 15.772 15.746 15.77-7.048 15.77-15.746c0-.627-.026-1.283-.105-1.859.079-.235.105-.497.105-.761v-55.277l55.251-9.744v38.248a15.854 15.854 0 0 0-7.911-2.096c-8.724 0-15.772 7.048-15.772 15.746s7.048 15.744 15.772 15.744 15.77-7.046 15.77-15.744c0-.63-.027-1.284-.105-1.861a2.43 2.43 0 0 0 .105-.758v-73.512c0-1.284 0-2.881-2.173-2.567-.447.05-66.176 10.975-66.176 10.975"/><path fill="#29D3B2" d="M-727.133 1117.509v142.083c0 4.625-3.75 8.333-8.333 8.333H-893.8a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125l49.542 49.583z"/><g fill="#FFF"><path d="M-835.675 1128.081h1.562v7.812h-1.562c-5.836-.205-8.545 1.772-8.125 5.938v16.562c0 4.17-1.67 7.397-5 9.688 3.33 2.295 5 5.522 5 9.688v16.562c-.42 3.955 2.289 5.83 8.125 5.625h1.562v7.812h-1.562c-11.875.415-17.607-3.75-17.188-12.5v-16.875c.205-4.165-2.188-6.25-7.188-6.25h-.938v-7.812h.938c5 0 7.393-2.08 7.188-6.25v-16.562c-.419-9.375 5.313-13.853 17.188-13.438zM-795.467 1128.081h1.562c11.875-.415 17.602 4.062 17.188 13.438v16.562c0 4.17 2.393 6.25 7.188 6.25h1.25v7.812h-1.25c-4.795 0-7.188 2.085-7.188 6.25v16.875c.414 8.54-5.312 12.705-17.188 12.5h-1.562v-7.812h1.562c5.83.205 8.539-1.67 8.125-5.625v-16.562c0-4.165 1.664-7.393 5-9.688-3.336-2.29-5-5.518-5-9.688v-16.562c.414-4.165-2.295-6.143-8.125-5.938h-1.562v-7.812z"/></g><path fill="#29D3B2" d="M-511.112 1117.509v142.083c0 4.625-3.75 8.333-8.333 8.333h-158.333a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125l49.541 49.583z"/><ellipse fill="#FFF" cx="-598.612" cy="1131.989" rx="42.548" ry="12.063"/><path fill="#FFF" d="M-598.612 1168.058c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.888 12.899 43.5 12.899z"/><path fill="#FFF" d="M-598.612 1191.992c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.888 12.899 43.5 12.899z"/><path fill="#FFF" d="M-598.612 1215.926c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.888 12.899 43.5 12.899z"/><path fill="#03A9F4" d="M-49.989 1117.509v142.083c0 4.625-3.75 8.333-8.333 8.333h-158.333a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333H-99.53l49.541 49.583z"/><path fill="#FFF" d="M-162.787 1170.767c.344 20.488 16.447 28.926 31.6 28.926 12.601 0 20-2.805 26.25-6.055l2.582 10.848c-5.332 3.402-11.332 6.916-29.916 6.916-29.999 0-44.979-18.43-44.979-42.014 0-25.137 18.807-44.938 43.084-44.938 27.205 0 36.437 23.932 36.437 39.256 0 3.1-.346 5.51-.518 7.061h-64.54zm50.422-10.848c.174-9.643-5.959-24.621-23.006-24.621-15.324 0-26.039 14.117-27.244 24.621h50.25z"/><path fill="#3F7AD9" d="M-727.133-505.471l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M-270.478-505.471l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#58A138" d="M-492.467-505.667l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#2FB69A" d="M-49.989-505.471l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#3F7AD9" d="M175-505.666l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#718BC8" d="M646.989-505.472v142.084c0 4.624-3.75 8.332-8.334 8.332H480.323a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M609.489-455.056c0 27.614-22.386 50-50 50s-50-22.386-50-50 22.386-50 50-50 50 22.387 50 50"/><path fill="#718BC8" d="M574.072-455.056c0 8.054-6.53 14.584-14.584 14.584-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054.001 14.584 6.531 14.584 14.584"/><path fill="#6479AB" d="M646.989-505.471l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M-727.058-238.642l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#4A5BD7" d="M-727.058 49.869l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.286"/><path fill="#58A138" d="M-492.467-238.642l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#3F7AD9" d="M-259.087-238.635l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#6479AB" d="M-37.745-238.635l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M-511.029 49.392l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V-.191"/><path fill="#8C1DCD" d="M-511.031 307.419l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-727.143 307.419l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#624A97" d="M-727.143 565.438l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-270.302 1372.735l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DCAE29" d="M-49.989 1373.221l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#0F797A" d="M-511.112 565.636l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-511.028 823.471l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#475A63" d="M-270.487 823.469l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#1993D0" d="M-37.745 823.661l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-49.989 1117.509l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#5BA23A" d="M-283.089 1117.509l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#2FB69A" d="M-511.028 1117.509l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-727.133 1117.509l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DC4C29" d="M-727.133 1372.535l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DC3F9D" d="M-511.028 1373.024l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#1993D0" d="M190.035 1372.343l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#969594" d="M424.059 1372.221l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M-259.09 49.593l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.01"/><path fill="#9E176D" d="M-37.745 49.869l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.286"/><path fill="#AD282B" d="M175.079 49.869l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.286"/><path fill="#9E176D" d="M175.079 307.419l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#AD282B" d="M-37.745 307.419l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-259.09 307.419l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-727.133 823.661l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><g><path fill="#718BC8" d="M399.989-505.397v142.084c0 4.624-3.75 8.332-8.334 8.332H233.323a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M362.489-468.981c0 27.614-22.386 50-50 50s-50-22.386-50-50 22.386-50 50-50 50 22.387 50 50"/><path fill="#718BC8" d="M327.072-468.981c0 8.054-6.53 14.584-14.584 14.584-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584"/><path opacity=".2" fill="#231815" d="M350.447-513.731v-41.25l49.542 49.583H358.78c-4.583 0-8.333-3.75-8.333-8.333z"/><g fill="#FFF"><path d="M278.251-387.801c.172 5.043 4.127 7.221 8.597 7.221 3.266 0 5.617-.459 7.738-1.26l1.031 4.871c-2.407.973-5.731 1.719-9.743 1.719-9.055 0-14.385-5.559-14.385-14.098 0-7.738 4.7-15.016 13.64-15.016 9.055 0 12.036 7.451 12.036 13.582 0 1.32-.115 2.35-.229 2.982h-18.685zm12.265-4.931c.057-2.578-1.089-6.82-5.789-6.82-4.356 0-6.19 3.955-6.476 6.82h12.265zM307.073-403.736l3.324 5.275a119.98 119.98 0 0 1 2.522 4.297h.172c.802-1.547 1.605-2.98 2.408-4.412l3.094-5.16h7.68l-9.342 13.412 9.514 14.5h-7.967l-3.439-5.559c-.917-1.49-1.719-2.98-2.522-4.527h-.115c-.802 1.605-1.604 2.98-2.522 4.527l-3.21 5.559h-7.794l9.685-14.213-9.342-13.699h7.854zM334.575-387.801c.172 5.043 4.127 7.221 8.597 7.221 3.266 0 5.617-.459 7.738-1.26l1.031 4.871c-2.407.973-5.731 1.719-9.743 1.719-9.055 0-14.385-5.559-14.385-14.098 0-7.738 4.7-15.016 13.64-15.016 9.055 0 12.036 7.451 12.036 13.582 0 1.32-.115 2.35-.23 2.982h-18.684zm12.265-4.931c.057-2.578-1.089-6.82-5.789-6.82-4.356 0-6.19 3.955-6.476 6.82h12.265z"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/svg/fileType/txt.svg b/src/assets/svg/fileType/txt.svg
deleted file mode 100644
index 602c3b9..0000000
--- a/src/assets/svg/fileType/txt.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="175" height="200"><path fill="#448AFF" d="M-502.145 49.584v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-638.186 66.624h13.228l13.436 56.874h.208l15.002-56.874h13.334l14.584 56.874h.208l13.854-56.874h13.228L-561.624 141h-13.232l-14.892-56.876h-.212L-605.166 141h-13.44z"/><path fill="#62BB37" d="M-267.478 49.586V191.67c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.336c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-387.272 66.627h15.524l16.874 26.25 17.602-26.25h14.584l-24.582 35.832 26.354 38.542h-15.836l-18.538-28.438-18.856 28.438h-14.896l26.354-38.542z"/><path fill="#F57C00" d="M-45.489 49.582v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.332c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-162.049 66.623h32.812c5.274 0 9.582.766 12.914 2.292 3.334 1.53 5.9 3.438 7.708 5.728 1.806 2.292 3.038 4.794 3.698 7.5.66 2.71.988 5.208.988 7.5 0 2.294-.328 4.776-.988 7.45-.66 2.672-1.892 5.156-3.698 7.446-1.808 2.29-4.374 4.186-7.708 5.676-3.332 1.498-7.64 2.242-12.914 2.242h-19.792v28.54h-13.02V66.623zm13.02 35.21h19.06c1.46 0 2.954-.212 4.48-.626a12.867 12.867 0 0 0 4.218-2.032c1.286-.94 2.328-2.188 3.126-3.75.798-1.564 1.196-3.524 1.196-5.884 0-2.43-.346-4.444-1.042-6.042-.692-1.596-1.632-2.866-2.812-3.802-1.18-.94-2.534-1.578-4.06-1.928-1.53-.346-3.162-.52-4.896-.52h-19.27v24.584z"/><path fill="#448AFF" d="M399.989 49.582v142.084c0 4.624-3.75 8.332-8.334 8.332H233.323a8.304 8.304 0 0 1-8.334-8.332V8.332c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M278.333 64.729h14.3l19.69 62.15h.22l20.13-62.15h13.97l-26.84 78.54h-15.288z"/><path fill="#29D3B2" d="M175 49.584v142.082c0 4.625-3.751 8.334-8.334 8.334H8.334A8.306 8.306 0 0 1 0 191.666V8.334C0 3.75 3.709.001 8.334.001h117.125L175 49.584z"/><path fill="#FFF" d="M52.388 56.627h70.225v13.121H95.032v73.626H79.846V69.748H52.388z"/><path fill="#F57C00" d="M-501.145 316.035v143.708c0 4.677-3.793 8.427-8.429 8.427h-160.141a8.398 8.398 0 0 1-8.429-8.427V274.314c0-4.636 3.75-8.429 8.429-8.429h118.462l50.108 50.15z"/><path fill="#FFF" d="M-547.284 339.92l-33.73 33.73 3.75 4.19 28.869-28.868zM-608.634 363.756c-23.634 23.634-31.372 45.44-31.372 45.44s21.806-7.738 45.44-31.372l4.072-4.074-14.068-14.066-4.072 4.072zM-585.708 368.957l-14.068-14.068 38.406-38.406 14.067 14.068zM-640.006 413.403h92.707v6.274h-92.707z"/><path fill="#62BB37" d="M-267.478 316.612v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V275.362c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-402.98 359.395h22.914v41.894h-22.914zM-366.436 319.737h22.914v81.552h-22.914zM-329.892 343.701h22.914v57.588h-22.914zM-402.98 412.527h96.002v6.2h-96.002z"/><path fill="#448AFF" d="M-34.098 316.611v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V275.361c0-4.584 3.708-8.334 8.334-8.334H-83.64l49.542 49.584z"/><path fill="#FFF" d="M-166.963 372.829v-41.732c0-4.466 3.654-8.12 8.12-8.12h74.49c4.466 0 8.12 3.654 8.12 8.12v41.732M-166.964 380.212h90.73v8.12h-90.73zM-143.284 413.566h43.368v8.12h-43.368z"/><path fill="#FFF" d="M-125.66 383.078h8.12v34.55h-8.12z"/><path fill="#718BC8" d="M187.243 316.611v142.084c0 4.624-3.75 8.332-8.334 8.332H20.578a8.304 8.304 0 0 1-8.334-8.332V275.361c0-4.584 3.708-8.334 8.334-8.334h117.124l49.541 49.584z"/><path fill="#FFF" d="M99.743 303.027c-27.614 0-50 22.386-50 50s22.386 50 50 50 50-22.386 50-50c0-27.613-22.386-50-50-50zm0 64.584c-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584 0 8.055-6.53 14.584-14.584 14.584zM76.676 445.241h-4.702v-3.046h-.086c-.668 1.306-1.64 2.242-2.916 2.806a9.85 9.85 0 0 1-4.048.85c-1.77 0-3.316-.312-4.634-.936-1.322-.624-2.418-1.472-3.288-2.546-.872-1.072-1.524-2.342-1.958-3.808-.436-1.466-.654-3.04-.654-4.724 0-2.028.276-3.786.828-5.264.55-1.482 1.284-2.7 2.198-3.658.914-.958 1.958-1.66 3.134-2.11a9.96 9.96 0 0 1 3.59-.676c.698 0 1.406.066 2.134.196a9.66 9.66 0 0 1 2.09.63 8.33 8.33 0 0 1 1.848 1.112 6.16 6.16 0 0 1 1.416 1.588h.086v-11.49h4.962v31.076zm-17.324-11.013c0 .958.124 1.902.37 2.83a7.78 7.78 0 0 0 1.132 2.482 5.727 5.727 0 0 0 1.938 1.74c.782.434 1.71.652 2.784.652 1.104 0 2.054-.23 2.852-.696a5.892 5.892 0 0 0 1.958-1.828 8.278 8.278 0 0 0 1.132-2.546c.246-.942.37-1.908.37-2.894 0-2.496-.558-4.44-1.676-5.834-1.116-1.392-2.632-2.088-4.548-2.088-1.162 0-2.14.24-2.938.718a5.983 5.983 0 0 0-1.958 1.872 7.755 7.755 0 0 0-1.088 2.612 13.594 13.594 0 0 0-.328 2.98M84.249 422.739h4.702v3.132h.128c.378-.55.784-1.058 1.22-1.522.434-.464.92-.856 1.458-1.176a7.466 7.466 0 0 1 1.85-.762c.698-.188 1.494-.282 2.394-.282 1.364 0 2.634.306 3.808.914 1.176.608 2.01 1.554 2.504 2.828.84-1.158 1.812-2.074 2.916-2.74 1.102-.668 2.482-1.002 4.136-1.002 2.378 0 4.228.58 5.55 1.74 1.318 1.162 1.978 3.106 1.978 5.834v15.538h-4.962v-13.146c0-.898-.03-1.718-.086-2.458-.06-.74-.226-1.378-.502-1.916a2.836 2.836 0 0 0-1.24-1.24c-.55-.29-1.306-.434-2.264-.434-1.68 0-2.9.522-3.654 1.566-.756 1.046-1.132 2.524-1.132 4.44v13.188h-4.962v-14.45c0-1.568-.282-2.75-.85-3.548-.566-.796-1.602-1.196-3.112-1.196a4.54 4.54 0 0 0-1.85.392 4.595 4.595 0 0 0-1.566 1.13c-.45.494-.812 1.104-1.088 1.828-.278.728-.414 1.554-.414 2.482v13.362h-4.962v-22.502zM145.097 444.066c0 3.396-.95 5.928-2.85 7.596-1.9 1.67-4.636 2.502-8.204 2.502-1.134 0-2.272-.116-3.418-.346a10.209 10.209 0 0 1-3.134-1.176 7.541 7.541 0 0 1-2.37-2.178c-.64-.9-1.018-2-1.134-3.308h4.962c.146.698.392 1.262.742 1.7.346.434.76.776 1.24 1.02a4.658 4.658 0 0 0 1.586.48c.582.072 1.192.108 1.83.108 2.002 0 3.468-.492 4.396-1.48.928-.984 1.392-2.408 1.392-4.266v-3.436h-.086c-.696 1.246-1.646 2.22-2.852 2.916a7.647 7.647 0 0 1-3.896 1.044c-1.798 0-3.328-.312-4.59-.936a8.733 8.733 0 0 1-3.134-2.568c-.828-1.088-1.43-2.344-1.808-3.764-.376-1.422-.566-2.946-.566-4.57 0-1.508.234-2.946.698-4.31s1.132-2.56 2.002-3.592a9.628 9.628 0 0 1 3.2-2.46c1.262-.608 2.69-.912 4.286-.912 1.422 0 2.728.298 3.918.892 1.19.596 2.102 1.53 2.742 2.808h.086v-3.09h4.962v21.326zm-11.012-2.742c1.104 0 2.038-.224 2.808-.674a5.532 5.532 0 0 0 1.872-1.784 7.844 7.844 0 0 0 1.044-2.524c.218-.942.326-1.894.326-2.852s-.116-1.886-.346-2.786c-.234-.9-.588-1.698-1.068-2.394a5.142 5.142 0 0 0-1.872-1.654c-.768-.404-1.69-.608-2.764-.608-1.104 0-2.032.23-2.786.694a5.575 5.575 0 0 0-1.826 1.808 7.74 7.74 0 0 0-1.002 2.524 13.25 13.25 0 0 0-.306 2.808c0 .93.118 1.834.35 2.72.23.886.588 1.676 1.066 2.374a5.669 5.669 0 0 0 1.828 1.696c.74.436 1.631.652 2.676.652"/><path fill="#D32F2F" d="M399.989 604.639v142.084c0 4.624-3.75 8.332-8.334 8.332H233.323a8.304 8.304 0 0 1-8.334-8.332V563.389c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F6F4F4" d="M310.975 632.686c.758 0 .758 0 0 0 .758-3.03 1.516-4.544 1.516-6.816v-1.514c.756-3.786.756-6.816 0-7.572v-.758l-.758-.758s0 .758-.758.758c-1.514 4.544-1.514 9.844 0 16.66m-22.716 52.25c-1.516.756-3.03 1.514-3.786 2.27-5.302 4.544-9.088 9.846-9.844 12.118 4.542-.758 9.086-5.302 13.63-14.388.756 0 .756 0 0 0 .756 0 0 0 0 0m69.666-11.36c-.756-.756-3.786-3.028-14.388-3.028h-1.514v.758c5.3 2.27 10.602 3.786 14.388 3.786H358.683v-.758s-.758 0-.758-.758m3.03 6.058c-1.516.758-3.786 1.516-6.816 1.516-6.058 0-15.146-1.516-22.718-5.302-12.872 1.514-22.716 3.03-30.29 6.058-.756 0-.756 0-1.514.758-9.086 15.902-16.66 23.474-22.718 23.474-1.514 0-2.27 0-3.028-.756l-3.786-2.272v-.758c-.758-1.514-.758-2.272-.758-3.786.758-3.786 5.302-10.602 14.388-15.902 1.514-.758 3.786-2.272 6.816-3.786 2.27-3.786 4.542-8.33 7.572-13.63 3.786-7.574 6.058-15.146 8.328-21.96-3.028-9.088-4.542-14.388-1.512-24.99.756-3.03 3.028-6.058 6.056-6.058h1.516c1.514 0 3.028.758 4.542 1.514 5.302 5.302 3.03 17.416 0 27.26v.758c3.03 8.33 7.574 15.146 12.116 19.688 2.272 1.516 3.786 3.03 6.816 4.544 3.786 0 6.816-.756 9.844-.756 9.088 0 15.146 1.514 17.416 5.3.758 1.514.758 3.028.758 4.544-.758.756-1.514 3.028-3.028 4.542m-49.222-29.532c-1.514 5.3-4.544 11.358-7.572 18.174-1.514 3.03-3.03 5.3-4.544 8.33h1.514c9.844-3.786 18.932-6.058 24.99-6.816-1.514-.756-2.272-1.514-3.03-2.272-3.786-4.542-8.328-10.6-11.358-17.416"/><path fill="#5465FC" d="M-502.149 604.64v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V563.39c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-628.4 623.328c4.224-.768 10.082-1.344 18.047-1.344 8.641 0 14.977 1.824 19.107 5.28 3.84 3.168 6.336 8.256 6.336 14.305 0 6.144-1.92 11.231-5.57 14.687-4.704 4.704-12.096 6.914-20.447 6.914-2.21 0-4.224-.096-5.762-.386v24.387H-628.4v-63.843zm11.711 30.144c1.44.384 3.362.48 5.762.48 8.832 0 14.207-4.32 14.207-11.903 0-7.202-4.992-11.041-13.153-11.041-3.264 0-5.568.288-6.816.576v21.888zM-577.812 676.32c2.69 1.632 7.777 3.362 12.001 3.362 5.184 0 7.488-2.114 7.488-5.186 0-3.168-1.92-4.8-7.68-6.816-9.119-3.168-12.959-8.159-12.863-13.633 0-8.255 6.816-14.687 17.663-14.687 5.184 0 9.696 1.344 12.385 2.784l-2.304 8.352c-2.016-1.152-5.762-2.688-9.89-2.688-4.224 0-6.527 2.016-6.527 4.896 0 2.978 2.208 4.416 8.159 6.53 8.448 3.072 12.385 7.392 12.481 14.303 0 8.45-6.623 14.593-19.009 14.593-5.664 0-10.753-1.346-14.207-3.266l2.303-8.544z"/><path fill="#F57C00" d="M-286.128 604.639v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V563.389c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-394.603 669.841l-5.568 18.337h-12.193l20.739-64.707h15.073l21.023 64.707H-368.2l-5.856-18.337h-20.547zm18.529-8.928l-5.088-15.937c-1.248-3.936-2.304-8.354-3.264-12.097h-.192c-.96 3.744-1.92 8.258-3.074 12.097l-4.992 15.937h16.61zM-334.892 628.367c0 3.552-2.592 6.336-6.72 6.336-3.938 0-6.53-2.784-6.53-6.336 0-3.648 2.69-6.434 6.624-6.434 4.034.001 6.53 2.787 6.626 6.434m-12.578 13.058h11.905v46.754h-11.905v-46.754z"/><path fill="#C11187" d="M187.239 604.639v142.084c0 4.624-3.75 8.332-8.334 8.332H20.573a8.304 8.304 0 0 1-8.334-8.332V563.389c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M65.564 623.902h11.807v64.707H65.564zM133.529 620.447v55.011c0 4.798.194 9.983.386 13.151h-10.561l-.48-7.392h-.192c-2.784 5.182-8.448 8.448-15.263 8.448-11.137 0-19.971-9.505-19.971-23.905-.096-15.649 9.697-24.961 20.931-24.961 6.432 0 11.042 2.688 13.151 6.144h.192v-26.497h11.807zm-11.807 40.898c0-.96-.096-2.114-.288-3.074-1.056-4.608-4.8-8.351-10.175-8.351-7.584 0-11.809 6.719-11.809 15.457 0 8.544 4.226 14.783 11.713 14.783 4.8 0 9.023-3.264 10.177-8.352.286-1.056.382-2.208.382-3.456v-7.007z"/><path fill="#F57C00" d="M-34.102 604.639v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V563.389c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F57C00" d="M-132.405 619.963h21.999v21.999h-21.999z"/><path fill="#FFF" d="M-74.605 648.461v-5.5h-23.791c7.5 5.298 14.101 13.349 19.571 24.041 7.678 15.011 10.454 29.8 10.566 30.422l-7.866 1.448c-.09-.484-8.178-42.534-33.412-53.021v4.978h-23.735v-4.978c-25.237 10.49-33.324 52.537-33.412 53.021l-7.867-1.448c.114-.622 2.888-15.411 10.568-30.422 5.47-10.691 12.071-18.743 19.571-24.041H-168.6v5.5h-18.999v-18.999h18.999v5.5h35.328v-7.867h23.735v7.867h34.932v-5.5h18.999v18.999h-18.999zm-39.8-16.499h-13.999v13.999h13.999v-13.999z"/><path fill="#C11187" d="M399.989 862.665v142.084c0 4.624-3.75 8.332-8.334 8.332H233.323a8.304 8.304 0 0 1-8.334-8.332V821.415c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><g fill="#FFF"><path d="M300.779 945.445l-6.76-12.408c-2.686-4.816-4.444-8.15-6.204-11.76h-.278c-1.482 3.61-3.148 6.944-5.648 11.76l-6.206 12.408h-13.056l18.52-31.576-17.78-30.836h13.056l6.762 12.872c2.036 3.888 3.518 6.944 5.186 10.464h.184c1.668-3.89 2.964-6.668 4.908-10.464l6.666-12.872h13.056l-18.24 30.466 18.982 31.946h-13.148zM361.981 879.699v53.06c0 4.628.186 9.63.37 12.686h-10.186l-.462-7.13h-.184c-2.688 4.998-8.15 8.148-14.724 8.148-10.742 0-19.262-9.168-19.262-23.056-.092-15.094 9.352-24.078 20.188-24.078 6.204 0 10.65 2.594 12.686 5.928h.184v-25.558h11.39zm-11.39 39.448c0-.926-.092-2.038-.276-2.964-1.02-4.444-4.632-8.056-9.818-8.056-7.314 0-11.388 6.482-11.388 14.908 0 8.242 4.074 14.26 11.296 14.26 4.63 0 8.706-3.148 9.816-8.054.278-1.02.37-2.132.37-3.336v-6.758z"/></g><path fill="#A0F" d="M-286.123 862.667v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V821.417c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-332.135 874.919h-80.848l-14.14 31.298 54.564 62.868 54.562-62.868-14.138-31.298zm-3.72 6.926l8.282 20.65h-14.884l6.602-20.65zm-7.058-.33l-6.042 19.378-15.102-19.378h21.144zm-14.072 20.98h-31.15l15.576-19.814 15.574 19.814zm-24.078-20.98l-15.1 19.378-6.044-19.378h21.144zm-28.202.33l6.602 20.65h-14.884l8.282-20.65zm-6.632 27.244h16.126l16.454 37.538-32.58-37.538zm23.326 0H-352.549l-20.01 45.652-20.012-45.652zm30.768 37.54l16.454-37.538h16.126l-32.58 37.538z"/><path fill="#D32F2F" d="M-34.619 862.665v142.084c0 4.634-3.724 8.332-8.282 8.332h-157.396c-4.608 0-8.28-3.698-8.28-8.332V821.415c0-4.584 3.698-8.334 8.28-8.334h116.408l49.27 49.584z"/><path fill="#FFF" d="M-72.133 887.703c.579.149 1.173.25 1.734.453 1.728.628 2.294 2.07 2.253 3.887-.056 2.523-.229 5.022-.936 7.483-1.308 4.549-4.119 7.567-8.195 9.358-2.871 1.261-5.893 1.72-8.935 2.076-2.098.243-4.193.535-6.287.821-.28.038-.561.149-.823.272-1.119.519-1.41 1.537-.582 2.444a21.79 21.79 0 0 0 2.803 2.557c3.754 2.883 7.615 5.62 11.301 8.595 4.167 3.362 7.819 7.291 10.595 12.06 2.726 4.684 4.108 9.789 3.925 15.378-.048 1.475-.722 2.326-2.111 2.396-2.159.107-4.32.123-6.479.143-2.682.024-5.362.014-8.044.02-2.732.004-5.466.002-8.201.012-1.952.006-3.905.032-5.857.034a18.846 18.846 0 0 1-1.714-.072c-2.436-.213-3.34-1.159-3.585-3.744-.35-3.664-.907-7.263-2.306-10.649-2.35-5.696-6.167-9.981-11.098-13.207-4.259-2.785-8.891-4.531-13.923-4.972-4.961-.436-9.579.553-13.287 4.575-2.241 2.43-3.477 5.428-4.342 8.621-.392 1.445-.734 2.905-1.165 4.336-.491 1.626-1.811 1.96-3.147 2.006-2.916.099-5.831.099-8.746.125-2.682.024-5.362.028-8.044.042-2.473.014-4.947.052-7.418.03-.646-.006-1.294-.153-1.924-.308-.936-.227-1.314-.779-1.261-1.781.328-6.092 2.74-11.054 7.364-14.82 3.811-3.102 8.145-5.034 12.694-6.352 4.315-1.251 8.696-2.227 13.042-3.356 1.219-.316 2.443-.656 3.614-1.135 1.873-.766 2.179-2.022.7-3.4-1.419-1.326-3.006-2.479-4.623-3.529-4.352-2.825-8.839-5.428-12.798-8.873-4.062-3.535-7.462-7.615-9.315-12.969-.974-2.817-1.38-5.744-1.374-8.754 0-1.155.557-2.05 1.783-2.34a21.873 21.873 0 0 1 4.406-.573c3.332-.09 6.664-.052 9.996-.058 2.682-.004 5.364.01 8.044.008 1.98 0 3.958-.02 5.937-.016.909.002 1.819.046 2.73.066 1.533.034 2.197.543 2.491 2.141.348 1.889.584 3.803.885 5.704 1.078 6.815 3.631 12.766 8.76 17.178 3.527 3.036 7.639 4.449 12.194 4.646 2.382.102 4.744.068 7.046-.751 3.547-1.261 5.269-4.096 4.937-8.018-.151-1.813-.272-3.63-.382-5.446-.074-1.235.312-1.982 1.469-2.207 1.451-.284 2.946-.38 4.418-.403 2.942-.042 5.883.03 8.825.044 2.68.01 5.362-.01 8.042.012 1.638.012 3.273.074 4.911.114l.003.096"/><path fill="#D32F2F" d="M187.244 862.665v142.084c0 4.624-3.75 8.332-8.334 8.332H20.578a8.304 8.304 0 0 1-8.334-8.332V821.415c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><g fill="#FFF"><path d="M109.86 992.755s-.022-23.724 0-30.064c0-.318-.008-.636 0-.952.07-3.12 1.69-4.742 4.84-4.752 6.614-.02 13.226 0 19.84 0 5.562 0 8.37-2.794 8.372-8.35.002-22.692-.008-45.384.008-68.078.002-3.048-1.018-5.546-3.796-6.986-1.046-.542-2.326-.878-3.502-.88a23363.06 23363.06 0 0 0-72.018-.05c-3.896.002-6.908 3.018-7.108 6.962-.046.904-.01 1.812-.01 2.718v66.582c0 5.096 3.012 8.082 8.12 8.08 11.776-.006 35.328-.002 35.328-.002v9.812s-23.946-.008-36.04.008c-2.722.002-5.344-.46-7.734-1.76-5.898-3.212-9.34-8.042-9.346-14.932-.024-23.372.092-46.744-.07-70.114-.05-7.154 5.04-15.584 14.712-17.022a18.82 18.82 0 0 1 2.704-.2c23.916-.024 47.83-.042 71.746-.05 9-.004 16.8 7.706 16.812 16.718.034 23.462.034 46.924.006 70.388-.012 9.346-7.282 17.056-16.64 17.254-4.708.098-9.422.056-14.13.014-1.088-.01-2.122 1.36-2.122 1.36l-9.972 24.296z"/><path d="M83.498 902.342v2.236c.002 11.594.006 23.186.006 34.778 0 1.808-.004 1.814-1.772 1.814-3.432.004-6.864.002-10.436.002-.036-.67-.09-1.194-.09-1.716-.004-16.03.014-32.062-.03-48.092-.004-1.318.376-1.672 1.672-1.656 5.432.068 10.868.076 16.302-.008 1.324-.02 1.76.446 2.066 1.66 2.618 10.354 5.304 20.69 7.972 31.032.12.466.272.922.734 1.436.158-.416.358-.824.47-1.252 2.75-10.552 5.506-21.1 8.212-31.664.244-.948.66-1.198 1.582-1.194 5.616.016 11.23.01 16.844-.068 1.212-.016 1.53.366 1.528 1.544-.034 16.168-.034 32.334.002 48.5.004 1.182-.31 1.582-1.52 1.548-3.214-.092-6.43-.056-9.644-.082-.398-.004-.792-.07-1.36-.124v-38.544l-.38-.072c-.148.432-.32.86-.442 1.3-3.336 12.034-6.678 24.068-9.978 36.114-.276 1.008-.706 1.394-1.766 1.36-2.398-.074-4.802-.08-7.2-.002-1.094.036-1.586-.296-1.884-1.388-3.3-12.09-6.654-24.168-9.996-36.246-.116-.42-.266-.832-.4-1.248a40.6 40.6 0 0 1-.492.032"/></g><path fill="#A0F" d="M-502.144 862.666v142.084c0 4.624-3.75 8.332-8.334 8.332H-668.81a8.304 8.304 0 0 1-8.334-8.332V821.416c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-636.701 883.832c4.416-.768 11.04-1.344 17.856-1.344 9.314 0 15.65 1.536 19.972 5.184 3.55 2.976 5.568 7.488 5.568 12.962 0 8.352-5.666 14.016-11.714 16.224v.29c4.608 1.726 7.394 6.238 9.024 12.48 2.018 8.064 3.744 15.554 5.09 18.05h-12.194c-.96-1.92-2.496-7.202-4.32-15.266-1.824-8.45-4.896-11.136-11.616-11.328h-5.954v26.594h-11.712v-63.846zm11.712 28.61h7.01c7.968 0 12.96-4.224 12.96-10.656 0-7.104-4.992-10.37-12.674-10.37-3.744 0-6.144.288-7.296.576v20.45zM-582.078 883.832c4.224-.768 10.08-1.344 18.048-1.344 8.642 0 14.978 1.824 19.108 5.28 3.84 3.168 6.336 8.256 6.336 14.306 0 6.144-1.92 11.232-5.57 14.688-4.704 4.704-12.096 6.914-20.448 6.914-2.21 0-4.224-.096-5.762-.386v24.388h-11.712v-63.846zm11.712 30.146c1.442.384 3.362.48 5.762.48 8.832 0 14.208-4.32 14.208-11.904 0-7.202-4.992-11.042-13.154-11.042-3.264 0-5.568.288-6.816.576v21.89z"/><path fill="#7757BC" d="M-502.145 1120.691v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-622.977 1184.254l-5.408 17.81h-11.842l20.142-62.846h14.64l20.42 62.846h-12.31l-5.686-17.81h-19.956zm17.997-8.67l-4.942-15.48c-1.212-3.822-2.238-8.112-3.17-11.748h-.186c-.932 3.636-1.866 8.02-2.984 11.748l-4.85 15.48h16.132zM-569.833 1182.576c.28 8.206 6.714 11.75 13.986 11.75 5.316 0 9.14-.746 12.588-2.052l1.678 7.926c-3.914 1.586-9.322 2.798-15.85 2.798-14.732 0-23.404-9.046-23.404-22.94 0-12.586 7.646-24.428 22.192-24.428 14.732 0 19.58 12.122 19.58 22.098 0 2.146-.186 3.824-.372 4.848h-30.398zm19.955-8.018c.096-4.196-1.772-11.096-9.416-11.096-7.086 0-10.07 6.434-10.538 11.096h19.954z"/><path fill="#009497" d="M-286.123 1120.693v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-373.623 1121.711l32.85 40.88v57.67h21.9v-69.35zM-428.373 1220.261h21.9v-57.67l32.85-40.88-54.75 29.2z"/><path fill="#FFF" d="M-373.623 1217.341l22.63-24.554-22.63-71.076-23.36 71.076z"/><path fill="#D32F2F" d="M-502.145 1378.718v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-568.506 1453.024h-42.28v-42.278h42.28v42.278zm8-50.278h-58.28v58.278h58.28v-58.278z"/><path fill="#FFF" d="M-597.22 1424.31h15.15v15.15h-15.15zM-594.574 1375.394h9.856v29.25h-9.856zM-594.574 1458.976h9.856v29.4h-9.856zM-563.312 1426.956h30.158v9.856h-30.158zM-646.136 1426.956h29.492v9.856h-29.492z"/><path fill="#03A9F4" d="M187.244 1378.717v142.084c0 4.624-3.75 8.332-8.334 8.332H20.578a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M99.744 1485.525l-49.5-27.692v-54.016l49.5-23.076 49.5 23.076v54.016l-49.5 27.692zm-40.5-32.97l40.5 22.658 40.5-22.658v-43.004l-40.5-18.88-40.5 18.88v43.004z"/><path fill="#FFF" d="M99.722 1436.507l-47.176-26.392 4.394-7.856 42.824 23.958 42.816-23.478 4.328 7.892z"/><path fill="#FFF" d="M99.744 1484.87a4.502 4.502 0 0 1-4.5-4.5v-49.008c0-2.484 2.016-4.5 4.5-4.5s4.5 2.016 4.5 4.5v49.008c0 2.484-2.017 4.5-4.5 4.5"/><path fill="#546E7A" d="M-45.489 1378.717v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-76.466 1436.932c-.66-7.46-2.24-13.22-5-18.12-2.88-5.12-6.56-8.7-11.22-11-4.46-2.18-9.44-3.54-16.18-4.4-6.22-.8-12.78-1.02-20.98-.66-3.18.14-6.9.34-10.48.92-3.74.58-6.44 1.26-8.8 2.22-5 2.06-8.96 5.96-12.12 11.96-1.84 3.48-2.92 7.62-3.32 12.64-.58 7.4-.22 12.98 1.14 18.1.76 2.82 1.86 5.02 3.36 6.72 3.62 4.08 8.42 6.76 15.54 8.7 2.48.68 5.06 1.04 7.28 1.3 6.22.76 11.32.46 16.12-.96 5.34-1.58 10.2-3.9 14.48-6.92 2.18-1.54 4.24-3.42 6.12-5.22.62-.6.74-.76-.04-1.78-2.24-2.94-5.3-5.4-9.34-7.58-2.72-1.44-5.42-2.08-8.36-1.94-4.04.18-7.8.24-11.52.14-2.64-.06-5.18-.12-7.52-.9-3.14-1.04-6.12-2.64-8.98-4.2-1.84-.98-3.28-2.24-4.48-3.36-.48-.44-1.1-1.14-1.06-2.04.04-.92.74-1.58 1.34-2.04 1.06-.82 2.16-1.58 3.26-2.3l1.94-1.28c2.44-1.58 4.94-3.2 7.5-4.72l.66-.38c2.14-1.28 4.36-2.6 6.78-3.34 3.52-1.08 7.18-1.22 9.98-1.22.7 0 1.38 0 2.08.02 4.78.1 9.08.9 13.1 2.44 3.44 1.32 6.36 3.18 8.68 5.52 4.54 4.56 7.1 10.58 7.8 18.46.5 5.4.26 10.76-.7 15.88-.4 2.12-1.14 4.22-1.88 6.2-1.08 2.94-3.36 4.9-5.42 6.52-1.54 1.22-3.04 2.08-4.48 2.6-2.94 1.04-5.6 1.76-8.16 2.24l-.66.12c-4.16.78-8.46 1.58-12.76 1.88-4.16.26-8.6.38-14.34.38-1.44 0-2.86 0-4.3-.02-7.74-.06-13.9-1.06-19.36-3.16-3.74-1.42-6.76-3.68-9.02-6.72-2.62-3.54-4.36-7.84-5.16-12.8-1.16-7.24-1.84-12.82-2.24-18.1-.62-8.08.14-15.64 2.28-22.44.74-2.4 1.86-4.8 3.3-7.12 1.68-2.68 4.08-4.98 7.18-6.82 3.38-2.02 7.22-3.32 12.44-4.2 1.5-.26 3.02-.44 4.54-.62.92-.12 1.84-.22 2.76-.36 1.84-.24 3.68-.52 5.52-.78 3.3-.48 6.6-.96 9.9-1.38 5.14-.64 10.2-.72 14.04-.72 2.2 0 4.4.02 6.62.06l1.04.02c3.28.04 6.6.2 9.82.34 1.58.08 3.18.16 4.76.22h.4c0-.08 0-.18-.02-.32l-.76-6.14-.96-7.92-.16-.16c-.34 0-.66.06-.98.1-1.36.24-2.74.48-4.1.72-2.92.5-5.92 1.04-8.92 1.44-7.28.96-13.34 1.74-19.7 2.28l-3.96.32c-7.5.58-15.26 1.2-22.72 2.74-2.62.54-5.66 1.2-8.58 2.12-2.94.92-5.8 2.1-8.22 3.14-2.96 1.28-5.52 3.1-7.62 5.42-3.94 4.36-6.66 9.78-8.58 17.06-1.36 5.22-2.02 10.96-2.12 18.58-.08 8.3.94 16.68 3.14 25.58 1.82 7.34 4.02 13.02 6.92 17.94 2.08 3.5 4.48 6.08 7.32 7.88 3.72 2.38 7.02 3.8 10.38 4.5l2.3.5c2.96.64 6.02 1.32 9.02 1.6 4.24.38 8.58.56 12.78.72l4.4.18.02-.3h.96c1.2 0 2.4.02 3.6.04 2.6.02 5.2.06 7.8-.08 7.2-.4 14.8-1.02 21.92-3.64 2.36-.88 4.84-1.88 6.86-3.3 2.58-1.84 4.98-4.08 7.3-6.24l.56-.54c4.8-4.48 7.56-10.12 8.16-16.72.72-7.88.74-15.78.08-23.5m-55.48 20.6c.04-.44.1-.88.2-1.3.58-2.4 1.16-4.82 1.8-7.2.2-.76.54-2.04 1.98-2.04.3 0 .62.06 1.16.18 4.3 1.06 8.62 2.12 12.94 3.22.36.08.68.24.96.38l.96.44-.14 1.7-5.04 1.8c-3.94 1.38-7.86 2.74-11.8 4.1-.48.16-.96.22-1.4.28l-.52.06-1.32.22.22-1.84z"/><path fill="#FFF" d="M-122.533 1419.891c-.42 1.08-.86 2.16-1.28 3.24-.62 1.54-1.24 3.1-1.84 4.66-.08.2-.1.22-.7.32-.06.02-.14.04-.22.04l-1.84-.38c-1.64-.34-3.26-.68-4.88-1.08-1.04-.24-2.06-.58-3.02-.92.76-.3 1.52-.6 2.28-.92 1.6-.64 3.18-1.28 4.78-1.96 1.34-.58 2.68-1.18 4.02-1.8.879-.4 1.759-.8 2.7-1.2"/><path fill="#009497" d="M-286.123 1378.717v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-327.08 1479.676h-93.086v-93.086h93.086v93.086zm-89.086-4h85.086v-85.086h-85.086v85.086z"/><path fill="#FFF" d="M-378.984 1388.59h49.904v49.904h-49.904z"/><path fill="#62BB37" d="M-58.1 1672.263v142.935c0 4.661-3.746 8.382-8.332 8.382h-158.339c-4.636 0-8.329-3.72-8.329-8.382v-184.432c0-4.611 3.72-8.384 8.329-8.384h117.105l49.566 49.881z"/><path fill="#FFF" d="M-172.751 1750.489c0 2.76 1.793 4.609 4.523 4.609h4.523v16.094c0 3.67 3.171 6.901 6.783 6.901 3.613 0 6.784-3.201 6.784-6.901v-16.094h9.074v16.094c0 3.67 3.173 6.901 6.785 6.901s6.785-3.201 6.785-6.901v-16.094h4.523c2.731 0 4.521-1.849 4.521-4.609v-45.99h-54.299v45.99zm-11.335-45.99c-3.641 0-6.784 3.201-6.784 6.901v32.188c0 3.67 3.173 6.901 6.784 6.901 3.612 0 6.785-3.201 6.785-6.901V1711.4c-.001-3.67-3.173-6.901-6.785-6.901m76.97 0c-3.611 0-6.783 3.201-6.783 6.901v32.188c0 3.67 3.171 6.901 6.783 6.901 3.613 0 6.785-3.201 6.785-6.901V1711.4c.03-3.67-3.143-6.901-6.785-6.901m-22.612-26.665l5.903-5.961c.911-.911.911-2.32 0-3.201-.91-.911-2.232-.911-3.171 0l-6.784 6.901c-3.171-2.292-7.253-3.201-11.776-3.201s-8.575.909-12.245 2.761l-6.344-6.931c-.881-.441-2.732-.441-3.614 0-.441.911-.441 2.76 0 3.672l5.903 5.961c-6.344 5.05-10.864 12.863-10.864 22.053h54.299c0-9.163-4.551-17.444-11.307-22.054m-24.902 12.891h-4.523v-4.611h4.523v4.611zm22.612 0h-4.523v-4.611h4.523v4.611z"/><path fill="#ACACAC" d="M649.047 1927.591v142.084c0 4.624-3.75 8.332-8.334 8.332H482.381a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F6F4F4" d="M517.517 1945.888h88.062v12.848h-88.062zM517.517 1975.75h88.062v12.848h-88.062zM517.517 2005.612h61.644v12.846h-61.644z"/><path fill="#03A9F4" d="M414.024 1927.86v141.33c0 4.598-3.717 8.29-8.242 8.29H249.266c-4.573 0-8.242-3.693-8.242-8.29v-182.366c0-4.548 3.669-8.29 8.242-8.29h115.773l48.985 49.326z"/><path fill="#FFF" d="M379.844 1980.086c-.135 6.281-2.731 12.037-6.867 16.172-4.146 4.134-9.756 6.671-15.977 6.671h-11.048a34.074 34.074 0 0 0 5.939-9.161H357c7.404 0 13.513-6.098 13.685-13.818.159-7.513-5.953-13.439-13.685-13.671h-21.634c-3.049 0-5.89 1.036-8.209 2.793a13.78 13.78 0 0 0-3.292 3.536 14.142 14.142 0 0 0-2.318 7.476l-9.159-.135c.014-.817.074-1.634.183-2.427.817-6.462 4.281-12.145 9.245-15.866 3.806-2.854 8.501-4.548 13.55-4.548H357c12.477.269 23.111 10.269 22.844 22.978"/><path fill="#FFF" d="M275.205 1979.952c.135-6.281 2.731-12.036 6.866-16.172 4.146-4.134 9.756-6.671 15.977-6.671h11.048a34.074 34.074 0 0 0-5.939 9.161h-5.11c-7.404 0-13.513 6.098-13.685 13.818-.159 7.513 5.953 13.439 13.685 13.671h21.634c3.049 0 5.891-1.036 8.209-2.793a13.748 13.748 0 0 0 3.292-3.536 14.142 14.142 0 0 0 2.318-7.476l9.159.135a20.059 20.059 0 0 1-.183 2.427c-.817 6.462-4.281 12.145-9.245 15.866-3.806 2.854-8.501 4.548-13.55 4.548h-21.634c-12.476-.269-23.109-10.269-22.842-22.978"/><path fill="#7757BC" d="M-45.313 1927.791v142.084c0 4.634-3.754 8.332-8.349 8.332h-158.657c-4.645 0-8.346-3.698-8.346-8.332v-183.334c0-4.584 3.727-8.334 8.346-8.334h117.341l49.665 49.584z"/><path fill="#FFF" d="M-104.513 1973.395v-17.866c0-3.066-2.28-5.109-5.71-5.109h-68.351c-3.405 0-5.71 2.042-5.71 5.109v51.006c0 3.066 2.278 5.108 5.71 5.108h68.377c3.405 0 5.71-2.042 5.71-5.108v-17.84l22.791 20.408v-56.114l-22.817 20.406z"/><path fill="#FF5722" d="M-502.145 1927.592v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M-621.196 1983.244l24.53 27.062 33.552-46.552 38.612 62.062h-126.286zM-599.02 1952.336c0 8.444-6.844 15.288-15.288 15.288-8.442 0-15.288-6.844-15.288-15.288 0-8.444 6.846-15.288 15.288-15.288 8.444 0 15.288 6.844 15.288 15.288"/><path fill="#FDCA07" d="M175 1928.278v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0 2070.362v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124L175 1928.278z"/><path fill="#FFF" d="M75.237 1877.32h12.262v12.262H75.237zM75.237 1901.846h12.262v12.262H75.237zM75.237 1925.366h12.262v12.262H75.237zM75.237 1949.594h12.262v27.04H75.237zM87.501 1889.584h12.262v12.262H87.501zM87.501 1914.108h12.262v12.262H87.501zM87.501 1937.542h12.262v12.262H87.501z"/><path fill="#FFF" d="M81.369 1964.372h18.394v12.262H81.369zM102.235 2021.067l-4.324-33.834-21.932-.198-3.466 34.032c-.484 3.656 1.572 6.864 6.52 6.864h16.682c4.736 0 7.034-3.328 6.52-6.864zm-7.153-.325H79.667v-6.292h15.414v6.292z"/><path fill="#FFED18" d="M886.322 1921.911h-78.974l-17.276-17.5h-61.24a8.76 8.76 0 0 0-8.76 8.76v129.683c0 4.812 3.938 8.75 8.75 8.75h157.5c4.812 0 8.75-3.938 8.75-8.75v-112.193c0-4.813-3.937-8.75-8.75-8.75"/><path fill="#FDCA07" d="M895.072 2042.852c0 4.812-3.938 8.75-8.75 8.75h-157.5c-4.812 0-8.75-3.938-8.75-8.75v-93.984c0-4.812 3.938-8.75 8.75-8.75h157.5c4.812 0 8.75 3.938 8.75 8.75v93.984z"/><g font-family="'MicrosoftYaHei'" font-size="40"><text transform="translate(-843.173 354.197)">M</text><text transform="translate(-804.093 354.197)">A</text><text transform="translate(-776.493 354.197)">C</text></g><text transform="translate(-828.293 103.49)" font-family="'MicrosoftYaHei'" font-size="40">WIN</text><text transform="translate(-952.094 632.054)" font-family="'MicrosoftYaHei'" font-size="40">鍥惧舰锛忓嵃鍒�</text><text transform="translate(-1032.094 922.573)" font-family="'MicrosoftYaHei'" font-size="40">浜у搧锛忔�濈淮瀵煎浘</text><text transform="translate(-952.094 1180.598)" font-family="'MicrosoftYaHei'" font-size="40">褰辫锛忓箍鍛�</text><text transform="translate(-832.094 1714.652)" font-family="'MicrosoftYaHei'" font-size="40">浠g爜</text><text transform="translate(-832.094 2011.682)" font-family="'MicrosoftYaHei'" font-size="40">閫氱敤</text><text transform="translate(-952.094 1406.132)" font-family="'MicrosoftYaHei'" font-size="40">宸ヤ笟锛忓缓绛�</text><path fill="#FF40B6" d="M-286.123 1927.291v142.935c0 4.662-3.746 8.382-8.332 8.382h-158.339c-4.636 0-8.329-3.72-8.329-8.382v-184.432c0-4.611 3.72-8.384 8.329-8.384h117.105l49.566 49.881z"/><path fill="#FFF" d="M-402.661 1937.936a2.611 2.611 0 0 0-2.62 2.62v67.198a15.834 15.834 0 0 0-7.911-2.097c-8.724 0-15.772 7.046-15.772 15.744s7.048 15.746 15.772 15.746 15.77-7.048 15.77-15.746c0-.627-.026-1.283-.105-1.859.079-.235.105-.497.105-.761v-55.277l55.251-9.744v38.247a15.854 15.854 0 0 0-7.911-2.096c-8.724 0-15.772 7.048-15.772 15.746s7.048 15.744 15.772 15.744 15.77-7.046 15.77-15.744c0-.63-.027-1.283-.105-1.861a2.43 2.43 0 0 0 .105-.758v-73.512c0-1.284 0-2.881-2.173-2.567-.447.052-66.176 10.977-66.176 10.977"/><path fill="#29D3B2" d="M-502.145 1672.565v142.083c0 4.625-3.75 8.333-8.333 8.333h-158.333a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125l49.541 49.583z"/><g fill="#FFF"><path d="M-610.686 1683.137h1.562v7.812h-1.562c-5.836-.205-8.545 1.772-8.125 5.938v16.562c0 4.17-1.67 7.397-5 9.688 3.33 2.295 5 5.522 5 9.688v16.562c-.42 3.955 2.289 5.83 8.125 5.625h1.562v7.812h-1.562c-11.875.415-17.607-3.75-17.188-12.5v-16.875c.205-4.165-2.188-6.25-7.188-6.25H-636v-7.812h.938c5 0 7.393-2.08 7.188-6.25v-16.562c-.42-9.376 5.313-13.853 17.188-13.438zM-570.478 1683.137h1.562c11.875-.415 17.602 4.062 17.188 13.438v16.562c0 4.17 2.393 6.25 7.188 6.25h1.25v7.812h-1.25c-4.795 0-7.188 2.085-7.188 6.25v16.875c.414 8.54-5.312 12.705-17.188 12.5h-1.562v-7.812h1.562c5.83.205 8.539-1.67 8.125-5.625v-16.562c0-4.165 1.664-7.393 5-9.688-3.336-2.29-5-5.518-5-9.688v-16.562c.414-4.165-2.295-6.143-8.125-5.938h-1.562v-7.812z"/></g><path fill="#29D3B2" d="M-286.123 1672.565v142.083c0 4.625-3.75 8.333-8.333 8.333H-452.79a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125l49.542 49.583z"/><ellipse fill="#FFF" cx="-373.623" cy="1687.044" rx="42.548" ry="12.063"/><path fill="#FFF" d="M-373.623 1723.114c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.888 12.899 43.5 12.899z"/><path fill="#FFF" d="M-373.623 1747.048c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.888 12.899 43.5 12.899z"/><path fill="#FFF" d="M-373.623 1770.981c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676c0 .001 6.888 12.899 43.5 12.899z"/><path fill="#03A9F4" d="M175 1672.565v142.083c0 4.625-3.75 8.333-8.333 8.333H8.333A8.304 8.304 0 0 1 0 1814.648v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125L175 1672.565z"/><path fill="#FFF" d="M62.202 1725.822c.344 20.488 16.447 28.926 31.6 28.926 12.601 0 20-2.805 26.25-6.055l2.582 10.848c-5.332 3.402-11.332 6.916-29.916 6.916-29.999 0-44.978-18.43-44.978-42.014 0-25.137 18.807-44.938 43.084-44.938 27.205 0 36.437 23.932 36.437 39.256 0 3.1-.346 5.51-.518 7.061H62.202zm50.422-10.847c.174-9.643-5.959-24.621-23.006-24.621-15.324 0-26.039 14.117-27.244 24.621h50.25z"/><path fill="#3F7AD9" d="M-502.145 49.584l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.002"/><path fill="#D46B1C" d="M-45.489 49.584l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.002"/><path fill="#58A138" d="M-267.478 49.388l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V-.194"/><path fill="#2FB69A" d="M175 49.584l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.002"/><path fill="#3F7AD9" d="M399.989 49.39l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V-.193"/><path fill="#718BC8" d="M871.977 49.584v142.084c0 4.624-3.75 8.332-8.334 8.332H705.311a8.304 8.304 0 0 1-8.334-8.332V8.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M834.477 100c0 27.614-22.386 50-50 50s-50-22.386-50-50 22.386-50 50-50 50 22.386 50 50"/><path fill="#718BC8" d="M799.061 100c0 8.054-6.53 14.584-14.584 14.584-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584"/><path fill="#6479AB" d="M871.977 49.584l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.002"/><path fill="#D46B1C" d="M-502.069 316.413l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V266.83"/><path fill="#4A5BD7" d="M-502.069 604.924l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#58A138" d="M-267.478 316.413l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V266.83"/><path fill="#3F7AD9" d="M-34.098 316.42l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#6479AB" d="M187.243 316.42l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M-286.04 604.447l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#8C1DCD" d="M-286.042 862.475l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-502.154 862.475l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#624A97" d="M-502.154 1120.494l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-45.313 1927.79l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DCAE29" d="M175 1928.277l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#0F797A" d="M-286.123 1120.691l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-286.039 1378.526l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#475A63" d="M-45.499 1378.524l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#1993D0" d="M187.244 1378.717l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M175 1672.564l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#5BA23A" d="M-58.1 1672.564l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#2FB69A" d="M-286.039 1672.564l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-502.145 1672.564l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DC4C29" d="M-502.145 1927.59l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DC3F9D" d="M-286.039 1928.08l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#1993D0" d="M415.024 1927.398l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#969594" d="M649.047 1927.276l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M-34.101 604.649l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#9E176D" d="M187.243 604.924l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#AD282B" d="M400.068 604.924l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#9E176D" d="M400.068 862.475l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#AD282B" d="M187.243 862.475l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-34.101 862.475l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M-502.145 1378.717l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><g><path fill="#718BC8" d="M624.977 49.658v142.084c0 4.624-3.75 8.332-8.334 8.332H458.311a8.304 8.304 0 0 1-8.334-8.332V8.408c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M587.477 86.075c0 27.614-22.386 50-50 50s-50-22.386-50-50 22.386-50 50-50 50 22.386 50 50"/><path fill="#718BC8" d="M552.061 86.075c0 8.054-6.53 14.584-14.584 14.584-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584"/><path opacity=".2" fill="#231815" d="M575.436 41.324V.074l49.542 49.583H583.77c-4.584 0-8.334-3.75-8.334-8.333z"/><g fill="#FFF"><path d="M503.24 167.254c.172 5.043 4.127 7.221 8.597 7.221 3.266 0 5.617-.459 7.738-1.26l1.031 4.871c-2.407.973-5.731 1.719-9.743 1.719-9.055 0-14.385-5.559-14.385-14.098 0-7.738 4.7-15.016 13.64-15.016 9.055 0 12.036 7.451 12.036 13.582 0 1.32-.115 2.35-.229 2.982H503.24zm12.265-4.93c.057-2.578-1.089-6.82-5.789-6.82-4.356 0-6.19 3.955-6.476 6.82h12.265zM532.062 151.32l3.324 5.275a119.98 119.98 0 0 1 2.522 4.297h.172c.802-1.547 1.604-2.98 2.408-4.412l3.094-5.16h7.68l-9.342 13.412 9.514 14.5h-7.967l-3.438-5.559c-.917-1.49-1.719-2.98-2.522-4.527h-.115c-.802 1.605-1.604 2.98-2.522 4.527l-3.21 5.559h-7.794l9.685-14.213-9.342-13.699h7.853zM559.564 167.254c.172 5.043 4.127 7.221 8.597 7.221 3.266 0 5.617-.459 7.738-1.26l1.031 4.871c-2.407.973-5.731 1.719-9.743 1.719-9.055 0-14.385-5.559-14.385-14.098 0-7.738 4.7-15.016 13.64-15.016 9.055 0 12.036 7.451 12.036 13.582 0 1.32-.115 2.35-.229 2.982h-18.685zm12.265-4.93c.057-2.578-1.089-6.82-5.789-6.82-4.356 0-6.19 3.955-6.476 6.82h12.265z"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/svg/fileType/word.svg b/src/assets/svg/fileType/word.svg
deleted file mode 100644
index 16aa1a4..0000000
--- a/src/assets/svg/fileType/word.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="175" height="200"><path fill="#448AFF" d="M175 49.584v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0 191.669V8.334C0 3.75 3.708 0 8.334 0h117.124L175 49.584z"/><path fill="#FFF" d="M38.959 66.624h13.228l13.436 56.874h.208l15.002-56.874h13.334l14.584 56.874h.208l13.854-56.874h13.228L115.521 141h-13.232L87.397 84.124h-.212L71.979 141h-13.44z"/><path fill="#62BB37" d="M409.667 49.586V191.67c0 4.624-3.75 8.332-8.334 8.332H243.001a8.304 8.304 0 0 1-8.334-8.332V8.336c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M289.873 66.627h15.524l16.874 26.25 17.602-26.25h14.584l-24.582 35.832 26.354 38.542h-15.836l-18.538-28.438-18.856 28.438h-14.896l26.354-38.542z"/><path fill="#F57C00" d="M631.656 49.582v142.084c0 4.624-3.75 8.332-8.334 8.332H464.99a8.304 8.304 0 0 1-8.334-8.332V8.332c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M515.096 66.623h32.812c5.274 0 9.582.766 12.914 2.292 3.334 1.53 5.9 3.438 7.708 5.728 1.806 2.292 3.038 4.794 3.698 7.5.66 2.71.988 5.208.988 7.5 0 2.294-.328 4.776-.988 7.45-.66 2.672-1.892 5.156-3.698 7.446-1.808 2.29-4.374 4.186-7.708 5.676-3.332 1.498-7.64 2.242-12.914 2.242h-19.792v28.54h-13.02V66.623zm13.02 35.21h19.06c1.46 0 2.954-.212 4.48-.626a12.867 12.867 0 0 0 4.218-2.032c1.286-.94 2.328-2.188 3.126-3.75.798-1.564 1.196-3.524 1.196-5.884 0-2.43-.346-4.444-1.042-6.042-.692-1.596-1.632-2.866-2.812-3.802-1.18-.94-2.534-1.578-4.06-1.928-1.53-.346-3.162-.52-4.896-.52h-19.27v24.584z"/><path fill="#448AFF" d="M1077.133 49.582v142.084c0 4.624-3.75 8.332-8.334 8.332H910.467a8.304 8.304 0 0 1-8.334-8.332V8.332c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M955.478 64.729h14.3l19.69 62.15h.22l20.13-62.15h13.97l-26.84 78.54H981.66z"/><path fill="#29D3B2" d="M852.144 49.584v142.082c0 4.625-3.751 8.334-8.334 8.334H685.478a8.306 8.306 0 0 1-8.334-8.334V8.334c0-4.584 3.709-8.334 8.334-8.334h117.125l49.541 49.584z"/><path fill="#FFF" d="M729.533 56.627h70.225v13.121h-27.581v73.626h-15.186V69.748h-27.458z"/><path fill="#F57C00" d="M175.999 316.035v143.708c0 4.677-3.793 8.427-8.429 8.427H7.429A8.398 8.398 0 0 1-1 459.743V274.314c0-4.636 3.75-8.429 8.429-8.429h118.462l50.108 50.15z"/><path fill="#FFF" d="M129.86 339.92l-33.73 33.73 3.75 4.19 28.87-28.868zM68.511 363.756c-23.634 23.634-31.372 45.44-31.372 45.44s21.806-7.738 45.44-31.372l4.072-4.074-14.068-14.066-4.072 4.072zM91.439 368.963L77.37 354.895l38.405-38.405 14.068 14.067zM37.139 413.403h92.707v6.274H37.139z"/><path fill="#62BB37" d="M409.667 316.612v142.084c0 4.624-3.75 8.332-8.334 8.332H243.001a8.304 8.304 0 0 1-8.334-8.332V275.362c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M274.165 359.395h22.914v41.894h-22.914zM310.709 319.737h22.914v81.552h-22.914zM347.253 343.701h22.914v57.588h-22.914zM274.165 412.527h96.002v6.2h-96.002z"/><path fill="#448AFF" d="M643.047 316.611v142.084c0 4.624-3.75 8.332-8.334 8.332H476.381a8.304 8.304 0 0 1-8.334-8.332V275.361c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M510.181 372.829v-41.732c0-4.466 3.654-8.12 8.12-8.12h74.49c4.466 0 8.12 3.654 8.12 8.12v41.732M510.181 380.212h90.73v8.12h-90.73zM533.861 413.566h43.368v8.12h-43.368z"/><path fill="#FFF" d="M551.485 383.078h8.12v34.55h-8.12z"/><path fill="#718BC8" d="M864.388 316.611v142.084c0 4.624-3.75 8.332-8.334 8.332H697.722a8.304 8.304 0 0 1-8.334-8.332V275.361c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M776.888 303.027c-27.614 0-50 22.386-50 50s22.386 50 50 50 50-22.386 50-50c0-27.613-22.386-50-50-50zm-.001 64.584c-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584 0 8.055-6.53 14.584-14.584 14.584zM753.82 445.241h-4.702v-3.046h-.086c-.668 1.306-1.64 2.242-2.916 2.806a9.85 9.85 0 0 1-4.048.85c-1.77 0-3.316-.312-4.634-.936-1.322-.624-2.418-1.472-3.288-2.546-.872-1.072-1.524-2.342-1.958-3.808-.436-1.466-.654-3.04-.654-4.724 0-2.028.276-3.786.828-5.264.55-1.482 1.284-2.7 2.198-3.658.914-.958 1.958-1.66 3.134-2.11a9.96 9.96 0 0 1 3.59-.676c.698 0 1.406.066 2.134.196a9.66 9.66 0 0 1 2.09.63 8.33 8.33 0 0 1 1.848 1.112 6.16 6.16 0 0 1 1.416 1.588h.086v-11.49h4.962v31.076zm-17.324-11.013c0 .958.124 1.902.37 2.83a7.78 7.78 0 0 0 1.132 2.482 5.727 5.727 0 0 0 1.938 1.74c.782.434 1.71.652 2.784.652 1.104 0 2.054-.23 2.852-.696a5.892 5.892 0 0 0 1.958-1.828 8.278 8.278 0 0 0 1.132-2.546c.246-.942.37-1.908.37-2.894 0-2.496-.558-4.44-1.676-5.834-1.116-1.392-2.632-2.088-4.548-2.088-1.162 0-2.14.24-2.938.718a5.983 5.983 0 0 0-1.958 1.872 7.755 7.755 0 0 0-1.088 2.612 13.594 13.594 0 0 0-.328 2.98M761.394 422.739h4.702v3.132h.128c.378-.55.784-1.058 1.22-1.522.434-.464.92-.856 1.458-1.176a7.466 7.466 0 0 1 1.85-.762c.698-.188 1.494-.282 2.394-.282 1.364 0 2.634.306 3.808.914 1.176.608 2.01 1.554 2.504 2.828.84-1.158 1.812-2.074 2.916-2.74 1.102-.668 2.482-1.002 4.136-1.002 2.378 0 4.228.58 5.55 1.74 1.318 1.162 1.978 3.106 1.978 5.834v15.538h-4.962v-13.146c0-.898-.03-1.718-.086-2.458-.06-.74-.226-1.378-.502-1.916a2.836 2.836 0 0 0-1.24-1.24c-.55-.29-1.306-.434-2.264-.434-1.68 0-2.9.522-3.654 1.566-.756 1.046-1.132 2.524-1.132 4.44v13.188h-4.962v-14.45c0-1.568-.282-2.75-.85-3.548-.566-.796-1.602-1.196-3.112-1.196a4.54 4.54 0 0 0-1.85.392 4.595 4.595 0 0 0-1.566 1.13c-.45.494-.812 1.104-1.088 1.828-.278.728-.414 1.554-.414 2.482v13.362h-4.962v-22.502zM822.241 444.066c0 3.396-.95 5.928-2.85 7.596-1.9 1.67-4.636 2.502-8.204 2.502-1.134 0-2.272-.116-3.418-.346a10.209 10.209 0 0 1-3.134-1.176 7.541 7.541 0 0 1-2.37-2.178c-.64-.9-1.018-2-1.134-3.308h4.962c.146.698.392 1.262.742 1.7.346.434.76.776 1.24 1.02a4.658 4.658 0 0 0 1.586.48c.582.072 1.192.108 1.83.108 2.002 0 3.468-.492 4.396-1.48.928-.984 1.392-2.408 1.392-4.266v-3.436h-.086c-.696 1.246-1.646 2.22-2.852 2.916a7.647 7.647 0 0 1-3.896 1.044c-1.798 0-3.328-.312-4.59-.936a8.733 8.733 0 0 1-3.134-2.568c-.828-1.088-1.43-2.344-1.808-3.764-.376-1.422-.566-2.946-.566-4.57 0-1.508.234-2.946.698-4.31s1.132-2.56 2.002-3.592a9.628 9.628 0 0 1 3.2-2.46c1.262-.608 2.69-.912 4.286-.912 1.422 0 2.728.298 3.918.892 1.19.596 2.102 1.53 2.742 2.808h.086v-3.09h4.962v21.326zm-11.012-2.742c1.104 0 2.038-.224 2.808-.674a5.532 5.532 0 0 0 1.872-1.784 7.844 7.844 0 0 0 1.044-2.524c.218-.942.326-1.894.326-2.852s-.116-1.886-.346-2.786c-.234-.9-.588-1.698-1.068-2.394a5.142 5.142 0 0 0-1.872-1.654c-.768-.404-1.69-.608-2.764-.608-1.104 0-2.032.23-2.786.694a5.575 5.575 0 0 0-1.826 1.808 7.74 7.74 0 0 0-1.002 2.524 13.25 13.25 0 0 0-.306 2.808c0 .93.118 1.834.35 2.72.23.886.588 1.676 1.066 2.374a5.669 5.669 0 0 0 1.828 1.696c.74.436 1.632.652 2.676.652"/><path fill="#D32F2F" d="M1077.133 604.639v142.084c0 4.624-3.75 8.332-8.334 8.332H910.467a8.304 8.304 0 0 1-8.334-8.332V563.389c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F6F4F4" d="M988.12 632.686c.758 0 .758 0 0 0 .758-3.03 1.516-4.544 1.516-6.816v-1.514c.756-3.786.756-6.816 0-7.572v-.758l-.758-.758s0 .758-.758.758c-1.514 4.544-1.514 9.844 0 16.66m-22.716 52.25c-1.516.756-3.03 1.514-3.786 2.27-5.302 4.544-9.088 9.846-9.844 12.118 4.542-.758 9.086-5.302 13.63-14.388.756 0 .756 0 0 0 .756 0 0 0 0 0m69.666-11.36c-.756-.756-3.786-3.028-14.388-3.028h-1.514v.758c5.3 2.27 10.602 3.786 14.388 3.786H1035.828v-.758s-.758 0-.758-.758m3.03 6.058c-1.516.758-3.786 1.516-6.816 1.516-6.058 0-15.146-1.516-22.718-5.302-12.872 1.514-22.716 3.03-30.29 6.058-.756 0-.756 0-1.514.758-9.086 15.902-16.66 23.474-22.718 23.474-1.514 0-2.27 0-3.028-.756l-3.786-2.272v-.758c-.758-1.514-.758-2.272-.758-3.786.758-3.786 5.302-10.602 14.388-15.902 1.514-.758 3.786-2.272 6.816-3.786 2.27-3.786 4.542-8.33 7.572-13.63 3.786-7.574 6.058-15.146 8.328-21.96-3.028-9.088-4.542-14.388-1.512-24.99.756-3.03 3.028-6.058 6.056-6.058h1.516c1.514 0 3.028.758 4.542 1.514 5.302 5.302 3.03 17.416 0 27.26v.758c3.03 8.33 7.574 15.146 12.116 19.688 2.272 1.516 3.786 3.03 6.816 4.544 3.786 0 6.816-.756 9.844-.756 9.088 0 15.146 1.514 17.416 5.3.758 1.514.758 3.028.758 4.544-.758.756-1.514 3.028-3.028 4.542m-49.222-29.532c-1.514 5.3-4.544 11.358-7.572 18.174-1.514 3.03-3.03 5.3-4.544 8.33h1.514c9.844-3.786 18.932-6.058 24.99-6.816-1.514-.756-2.272-1.514-3.03-2.272-3.786-4.542-8.328-10.6-11.358-17.416"/><path fill="#5465FC" d="M174.995 604.64v142.084c0 4.624-3.75 8.332-8.334 8.332H8.329a8.304 8.304 0 0 1-8.334-8.332V563.39c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M48.744 623.328c4.224-.768 10.081-1.344 18.047-1.344 8.641 0 14.977 1.824 19.107 5.28 3.84 3.168 6.336 8.256 6.336 14.305 0 6.144-1.92 11.231-5.57 14.687-4.704 4.704-12.096 6.914-20.447 6.914-2.21 0-4.224-.096-5.762-.386v24.387H48.744v-63.843zm11.712 30.144c1.44.384 3.362.48 5.762.48 8.832 0 14.207-4.32 14.207-11.903 0-7.202-4.992-11.041-13.153-11.041-3.264 0-5.568.288-6.816.576v21.888zM99.333 676.32c2.69 1.632 7.777 3.362 12.001 3.362 5.184 0 7.488-2.114 7.488-5.186 0-3.168-1.92-4.8-7.68-6.816-9.119-3.168-12.959-8.159-12.863-13.633 0-8.255 6.816-14.687 17.663-14.687 5.184 0 9.696 1.344 12.385 2.784l-2.304 8.352c-2.016-1.152-5.762-2.688-9.89-2.688-4.224 0-6.527 2.016-6.527 4.896 0 2.978 2.208 4.416 8.159 6.53 8.448 3.072 12.385 7.392 12.481 14.303 0 8.45-6.623 14.593-19.009 14.593-5.664 0-10.753-1.346-14.207-3.266l2.303-8.544z"/><path fill="#F57C00" d="M391.017 604.639v142.084c0 4.624-3.75 8.332-8.334 8.332H224.351a8.304 8.304 0 0 1-8.334-8.332V563.389c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M282.542 669.841l-5.568 18.337H264.78l20.739-64.707h15.073l21.023 64.707h-12.671l-5.856-18.337h-20.546zm18.529-8.928l-5.088-15.937c-1.248-3.936-2.304-8.354-3.264-12.097h-.192c-.96 3.744-1.92 8.258-3.074 12.097l-4.992 15.937h16.61zM342.252 628.367c0 3.552-2.592 6.336-6.72 6.336-3.938 0-6.53-2.784-6.53-6.336 0-3.648 2.69-6.434 6.624-6.434 4.034.001 6.53 2.787 6.626 6.434m-12.577 13.058h11.905v46.754h-11.905v-46.754z"/><path fill="#C11187" d="M864.383 604.639v142.084c0 4.624-3.75 8.332-8.334 8.332H697.717a8.304 8.304 0 0 1-8.334-8.332V563.389c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M742.708 623.902h11.807v64.707h-11.807zM810.674 620.447v55.011c0 4.798.194 9.983.386 13.151h-10.561l-.48-7.392h-.192c-2.784 5.182-8.448 8.448-15.263 8.448-11.137 0-19.971-9.505-19.971-23.905-.096-15.649 9.698-24.961 20.931-24.961 6.432 0 11.042 2.688 13.151 6.144h.192v-26.497h11.807zm-11.807 40.898c0-.96-.096-2.114-.288-3.074-1.056-4.608-4.8-8.351-10.176-8.351-7.584 0-11.809 6.719-11.809 15.457 0 8.544 4.226 14.783 11.714 14.783 4.8 0 9.023-3.264 10.177-8.352.286-1.056.382-2.208.382-3.456v-7.007z"/><path fill="#F57C00" d="M643.042 604.639v142.084c0 4.624-3.75 8.332-8.334 8.332H476.376a8.304 8.304 0 0 1-8.334-8.332V563.389c0-4.584 3.708-8.334 8.334-8.334H593.5l49.542 49.584z"/><path fill="#F57C00" d="M544.74 619.963h21.999v21.999H544.74z"/><path fill="#FFF" d="M602.54 648.461v-5.5h-23.791c7.5 5.298 14.101 13.349 19.571 24.041 7.678 15.011 10.454 29.8 10.566 30.422l-7.866 1.448c-.09-.484-8.178-42.534-33.412-53.021v4.978h-23.735v-4.978c-25.237 10.49-33.324 52.537-33.412 53.021l-7.867-1.448c.114-.622 2.888-15.411 10.568-30.422 5.47-10.691 12.071-18.743 19.571-24.041h-24.187v5.5h-18.999v-18.999h18.999v5.5h35.328v-7.867h23.735v7.867h34.932v-5.5h18.999v18.999h-19zm-39.8-16.499h-13.999v13.999h13.999v-13.999z"/><path fill="#C11187" d="M1077.133 862.665v142.084c0 4.624-3.75 8.332-8.334 8.332H910.467a8.304 8.304 0 0 1-8.334-8.332V821.415c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><g fill="#FFF"><path d="M977.923 945.445l-6.76-12.408c-2.686-4.816-4.444-8.15-6.204-11.76h-.278c-1.482 3.61-3.148 6.944-5.648 11.76l-6.206 12.408h-13.056l18.52-31.576-17.78-30.836h13.056l6.762 12.872c2.036 3.888 3.518 6.944 5.186 10.464h.184c1.668-3.89 2.964-6.668 4.908-10.464l6.666-12.872h13.056l-18.24 30.466 18.982 31.946h-13.148zM1039.125 879.699v53.06c0 4.628.186 9.63.37 12.686h-10.186l-.462-7.13h-.184c-2.688 4.998-8.15 8.148-14.724 8.148-10.742 0-19.262-9.168-19.262-23.056-.092-15.094 9.352-24.078 20.188-24.078 6.204 0 10.65 2.594 12.686 5.928h.184v-25.558h11.39zm-11.389 39.448c0-.926-.092-2.038-.276-2.964-1.02-4.444-4.632-8.056-9.818-8.056-7.314 0-11.388 6.482-11.388 14.908 0 8.242 4.074 14.26 11.296 14.26 4.63 0 8.706-3.148 9.816-8.054.278-1.02.37-2.132.37-3.336v-6.758z"/></g><path fill="#A0F" d="M391.022 862.667v142.084c0 4.624-3.75 8.332-8.334 8.332H224.356a8.304 8.304 0 0 1-8.334-8.332V821.417c0-4.584 3.708-8.334 8.334-8.334H341.48l49.542 49.584z"/><path fill="#FFF" d="M345.01 874.919h-80.848l-14.14 31.298 54.564 62.868 54.562-62.868-14.138-31.298zm-3.72 6.926l8.282 20.65h-14.884l6.602-20.65zm-7.058-.33l-6.042 19.378-15.102-19.378h21.144zm-14.072 20.98h-31.15l15.576-19.814 15.574 19.814zm-24.078-20.98l-15.1 19.378-6.044-19.378h21.144zm-28.202.33l6.602 20.65h-14.884l8.282-20.65zm-6.633 27.244h16.126l16.454 37.538-32.58-37.538zm23.327 0H324.596l-20.01 45.652-20.012-45.652zm30.768 37.54l16.454-37.538h16.126l-32.58 37.538z"/><path fill="#D32F2F" d="M642.526 862.665v142.084c0 4.634-3.724 8.332-8.282 8.332H476.848c-4.608 0-8.28-3.698-8.28-8.332V821.415c0-4.584 3.698-8.334 8.28-8.334h116.408l49.27 49.584z"/><path fill="#FFF" d="M605.012 887.703c.579.149 1.173.25 1.734.453 1.728.628 2.294 2.07 2.253 3.887-.056 2.523-.229 5.022-.935 7.483-1.308 4.549-4.119 7.567-8.195 9.358-2.871 1.261-5.893 1.72-8.935 2.076-2.098.243-4.193.535-6.287.821-.28.038-.561.149-.823.272-1.119.519-1.41 1.537-.582 2.444a21.79 21.79 0 0 0 2.803 2.557c3.754 2.883 7.615 5.62 11.301 8.595 4.167 3.362 7.818 7.291 10.595 12.06 2.726 4.684 4.108 9.789 3.925 15.378-.048 1.475-.722 2.326-2.111 2.396-2.159.107-4.32.123-6.479.143-2.682.024-5.362.014-8.044.02-2.732.004-5.466.002-8.201.012-1.952.006-3.905.032-5.857.034a18.846 18.846 0 0 1-1.714-.072c-2.436-.213-3.34-1.159-3.585-3.744-.35-3.664-.907-7.263-2.306-10.649-2.35-5.696-6.167-9.981-11.098-13.207-4.259-2.785-8.891-4.531-13.923-4.972-4.961-.436-9.579.553-13.287 4.575-2.241 2.43-3.477 5.428-4.342 8.621-.392 1.445-.734 2.905-1.165 4.336-.491 1.626-1.811 1.96-3.147 2.006-2.916.099-5.831.099-8.746.125-2.682.024-5.362.028-8.044.042-2.473.014-4.947.052-7.418.03-.646-.006-1.294-.153-1.924-.308-.935-.227-1.314-.779-1.261-1.781.328-6.092 2.74-11.054 7.364-14.82 3.811-3.102 8.145-5.034 12.694-6.352 4.315-1.251 8.696-2.227 13.042-3.356 1.219-.316 2.443-.656 3.614-1.135 1.873-.766 2.179-2.022.7-3.4-1.419-1.326-3.006-2.479-4.623-3.529-4.352-2.825-8.839-5.428-12.798-8.873-4.062-3.535-7.462-7.615-9.315-12.969-.974-2.817-1.38-5.744-1.374-8.754 0-1.155.557-2.05 1.783-2.34a21.873 21.873 0 0 1 4.406-.573c3.332-.09 6.664-.052 9.996-.058 2.682-.004 5.364.01 8.044.008 1.98 0 3.958-.02 5.938-.016.909.002 1.819.046 2.73.066 1.533.034 2.197.543 2.491 2.141.348 1.889.584 3.803.885 5.704 1.078 6.815 3.632 12.766 8.76 17.178 3.527 3.036 7.639 4.449 12.194 4.646 2.382.102 4.744.068 7.046-.751 3.547-1.261 5.269-4.096 4.937-8.018-.151-1.813-.272-3.63-.382-5.446-.074-1.235.312-1.982 1.469-2.207 1.451-.284 2.946-.38 4.418-.403 2.942-.042 5.883.03 8.825.044 2.68.01 5.362-.01 8.042.012 1.638.012 3.273.074 4.911.114-.001.032.001.064.001.096"/><path fill="#D32F2F" d="M864.388 862.665v142.084c0 4.624-3.75 8.332-8.334 8.332H697.722a8.304 8.304 0 0 1-8.334-8.332V821.415c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><g fill="#FFF"><path d="M787.004 992.755s-.022-23.724 0-30.064c0-.318-.008-.636 0-.952.07-3.12 1.69-4.742 4.84-4.752 6.614-.02 13.226 0 19.84 0 5.562 0 8.37-2.794 8.372-8.35.002-22.692-.008-45.384.008-68.078.002-3.048-1.018-5.546-3.796-6.986-1.046-.542-2.326-.878-3.502-.88a23363.06 23363.06 0 0 0-72.018-.05c-3.896.002-6.908 3.018-7.108 6.962-.046.904-.01 1.812-.01 2.718v66.582c0 5.096 3.012 8.082 8.12 8.08 11.776-.006 35.328-.002 35.328-.002v9.812s-23.946-.008-36.04.008c-2.722.002-5.344-.46-7.734-1.76-5.898-3.212-9.34-8.042-9.346-14.932-.024-23.372.092-46.744-.07-70.114-.05-7.154 5.04-15.584 14.712-17.022a18.82 18.82 0 0 1 2.704-.2c23.916-.024 47.83-.042 71.746-.05 9-.004 16.8 7.706 16.812 16.718.034 23.462.034 46.924.006 70.388-.012 9.346-7.282 17.056-16.64 17.254-4.708.098-9.422.056-14.13.014-1.088-.01-2.122 1.36-2.122 1.36l-9.972 24.296z"/><path d="M760.643 902.342v2.236c.002 11.594.006 23.186.006 34.778 0 1.808-.004 1.814-1.772 1.814-3.432.004-6.864.002-10.436.002-.036-.67-.09-1.194-.09-1.716-.004-16.03.014-32.062-.03-48.092-.004-1.318.376-1.672 1.672-1.656 5.432.068 10.868.076 16.302-.008 1.324-.02 1.76.446 2.066 1.66 2.618 10.354 5.304 20.69 7.972 31.032.12.466.272.922.734 1.436.158-.416.358-.824.47-1.252 2.75-10.552 5.506-21.1 8.212-31.664.244-.948.66-1.198 1.582-1.194 5.616.016 11.23.01 16.844-.068 1.212-.016 1.53.366 1.528 1.544-.034 16.168-.034 32.334.002 48.5.004 1.182-.31 1.582-1.52 1.548-3.214-.092-6.43-.056-9.644-.082-.398-.004-.792-.07-1.36-.124v-38.544l-.38-.072c-.148.432-.32.86-.442 1.3-3.336 12.034-6.678 24.068-9.978 36.114-.276 1.008-.706 1.394-1.766 1.36-2.398-.074-4.802-.08-7.2-.002-1.094.036-1.586-.296-1.884-1.388-3.3-12.09-6.654-24.168-9.996-36.246-.116-.42-.266-.832-.4-1.248-.164.012-.328.022-.492.032"/></g><path fill="#A0F" d="M175 862.666v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0 1004.75V821.416c0-4.584 3.708-8.334 8.334-8.334h117.124L175 862.666z"/><path fill="#FFF" d="M40.443 883.832c4.416-.768 11.04-1.344 17.856-1.344 9.314 0 15.65 1.536 19.972 5.184 3.55 2.976 5.568 7.488 5.568 12.962 0 8.352-5.666 14.016-11.714 16.224v.29c4.608 1.726 7.394 6.238 9.024 12.48 2.018 8.064 3.744 15.554 5.09 18.05H74.045c-.96-1.92-2.496-7.202-4.32-15.266-1.824-8.45-4.896-11.136-11.616-11.328h-5.954v26.594H40.443v-63.846zm11.712 28.61h7.01c7.968 0 12.96-4.224 12.96-10.656 0-7.104-4.992-10.37-12.674-10.37-3.744 0-6.144.288-7.296.576v20.45zM95.066 883.832c4.224-.768 10.08-1.344 18.048-1.344 8.642 0 14.978 1.824 19.108 5.28 3.84 3.168 6.336 8.256 6.336 14.306 0 6.144-1.92 11.232-5.57 14.688-4.704 4.704-12.096 6.914-20.448 6.914-2.21 0-4.224-.096-5.762-.386v24.388H95.066v-63.846zm11.712 30.146c1.442.384 3.362.48 5.762.48 8.832 0 14.208-4.32 14.208-11.904 0-7.202-4.992-11.042-13.154-11.042-3.264 0-5.568.288-6.816.576v21.89z"/><path fill="#7757BC" d="M175 1120.691v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0 1262.775v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124L175 1120.691z"/><path fill="#FFF" d="M54.168 1184.254l-5.408 17.81H36.918l20.142-62.846H71.7l20.42 62.846H79.81l-5.686-17.81H54.168zm17.996-8.67l-4.942-15.48c-1.212-3.822-2.238-8.112-3.17-11.748h-.186c-.932 3.636-1.866 8.02-2.984 11.748l-4.85 15.48h16.132zM107.312 1182.576c.28 8.206 6.714 11.75 13.986 11.75 5.316 0 9.14-.746 12.588-2.052l1.678 7.926c-3.914 1.586-9.322 2.798-15.85 2.798-14.732 0-23.404-9.046-23.404-22.94 0-12.586 7.646-24.428 22.192-24.428 14.732 0 19.58 12.122 19.58 22.098 0 2.146-.186 3.824-.372 4.848h-30.398zm19.954-8.018c.096-4.196-1.772-11.096-9.416-11.096-7.086 0-10.07 6.434-10.538 11.096h19.954z"/><path fill="#009497" d="M391.022 1120.693v142.084c0 4.624-3.75 8.332-8.334 8.332H224.356a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334H341.48l49.542 49.584z"/><path fill="#FFF" d="M303.522 1121.711l32.85 40.88v57.67h21.9v-69.35zM248.772 1220.261h21.9v-57.67l32.85-40.88-54.75 29.2z"/><path fill="#FFF" d="M303.522 1217.341l22.63-24.554-22.63-71.076-23.36 71.076z"/><path fill="#D32F2F" d="M175 1378.718v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0 1520.802v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124L175 1378.718z"/><path fill="#FFF" d="M108.639 1453.024h-42.28v-42.278h42.28v42.278zm8-50.278h-58.28v58.278h58.28v-58.278z"/><path fill="#FFF" d="M79.925 1424.31h15.15v15.15h-15.15zM82.571 1375.394h9.856v29.25h-9.856zM82.571 1458.976h9.856v29.4h-9.856zM113.833 1426.956h30.158v9.856h-30.158zM31.009 1426.956h29.492v9.856H31.009z"/><path fill="#03A9F4" d="M864.388 1378.717v142.084c0 4.624-3.75 8.332-8.334 8.332H697.722a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M776.888 1485.525l-49.5-27.692v-54.016l49.5-23.076 49.5 23.076v54.016l-49.5 27.692zm-40.5-32.97l40.5 22.658 40.5-22.658v-43.004l-40.5-18.88-40.5 18.88v43.004z"/><path fill="#FFF" d="M776.867 1436.507l-47.177-26.392 4.394-7.856 42.825 23.958 42.815-23.478 4.328 7.892z"/><path fill="#FFF" d="M776.888 1484.87a4.502 4.502 0 0 1-4.5-4.5v-49.008c0-2.484 2.016-4.5 4.5-4.5s4.5 2.016 4.5 4.5v49.008c0 2.484-2.016 4.5-4.5 4.5"/><path fill="#546E7A" d="M631.656 1378.717v142.084c0 4.624-3.75 8.332-8.334 8.332H464.99a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M600.679 1436.932c-.66-7.46-2.24-13.22-5-18.12-2.88-5.12-6.56-8.7-11.22-11-4.46-2.18-9.44-3.54-16.18-4.4-6.22-.8-12.78-1.02-20.98-.66-3.18.14-6.9.34-10.48.92-3.74.58-6.44 1.26-8.8 2.22-5 2.06-8.96 5.96-12.12 11.96-1.84 3.48-2.92 7.62-3.32 12.64-.58 7.4-.22 12.98 1.14 18.1.76 2.82 1.86 5.02 3.36 6.72 3.62 4.08 8.42 6.76 15.54 8.7 2.48.68 5.06 1.04 7.28 1.3 6.22.76 11.32.46 16.12-.96 5.34-1.58 10.2-3.9 14.48-6.92 2.18-1.54 4.24-3.42 6.12-5.22.62-.6.74-.76-.04-1.78-2.24-2.94-5.3-5.4-9.34-7.58-2.72-1.44-5.42-2.08-8.36-1.94-4.04.18-7.8.24-11.52.14-2.64-.06-5.18-.12-7.52-.9-3.14-1.04-6.12-2.64-8.98-4.2-1.84-.98-3.28-2.24-4.48-3.36-.48-.44-1.1-1.14-1.06-2.04.04-.92.74-1.58 1.34-2.04 1.06-.82 2.16-1.58 3.26-2.3l1.94-1.28c2.44-1.58 4.94-3.2 7.5-4.72l.66-.38c2.14-1.28 4.36-2.6 6.78-3.34 3.52-1.08 7.18-1.22 9.98-1.22.7 0 1.38 0 2.08.02 4.78.1 9.08.9 13.1 2.44 3.44 1.32 6.36 3.18 8.68 5.52 4.54 4.56 7.1 10.58 7.8 18.46.5 5.4.26 10.76-.7 15.88-.4 2.12-1.14 4.22-1.88 6.2-1.08 2.94-3.36 4.9-5.42 6.52-1.54 1.22-3.04 2.08-4.48 2.6-2.94 1.04-5.6 1.76-8.16 2.24l-.66.12c-4.16.78-8.46 1.58-12.76 1.88-4.16.26-8.6.38-14.34.38-1.44 0-2.86 0-4.3-.02-7.74-.06-13.9-1.06-19.36-3.16-3.74-1.42-6.76-3.68-9.02-6.72-2.62-3.54-4.36-7.84-5.16-12.8-1.16-7.24-1.84-12.82-2.24-18.1-.62-8.08.14-15.64 2.28-22.44.74-2.4 1.86-4.8 3.3-7.12 1.68-2.68 4.08-4.98 7.18-6.82 3.38-2.02 7.22-3.32 12.44-4.2 1.5-.26 3.02-.44 4.54-.62.92-.12 1.84-.22 2.76-.36 1.84-.24 3.68-.52 5.52-.78 3.3-.48 6.6-.96 9.9-1.38 5.14-.64 10.2-.72 14.04-.72 2.2 0 4.4.02 6.62.06l1.04.02c3.28.04 6.6.2 9.82.34 1.58.08 3.18.16 4.76.22h.4c0-.08 0-.18-.02-.32l-.76-6.14-.96-7.92-.16-.16c-.34 0-.66.06-.98.1-1.36.24-2.74.48-4.1.72-2.92.5-5.92 1.04-8.92 1.44-7.28.96-13.34 1.74-19.7 2.28l-3.96.32c-7.5.58-15.26 1.2-22.72 2.74-2.62.54-5.66 1.2-8.58 2.12-2.94.92-5.8 2.1-8.22 3.14-2.96 1.28-5.52 3.1-7.62 5.42-3.94 4.36-6.66 9.78-8.58 17.06-1.36 5.22-2.02 10.96-2.12 18.58-.08 8.3.94 16.68 3.14 25.58 1.82 7.34 4.02 13.02 6.92 17.94 2.08 3.5 4.48 6.08 7.32 7.88 3.72 2.38 7.02 3.8 10.38 4.5l2.3.5c2.96.64 6.02 1.32 9.02 1.6 4.24.38 8.58.56 12.78.72l4.4.18.02-.3h.96c1.2 0 2.4.02 3.6.04 2.6.02 5.2.06 7.8-.08 7.2-.4 14.8-1.02 21.92-3.64 2.36-.88 4.84-1.88 6.86-3.3 2.58-1.84 4.98-4.08 7.3-6.24l.56-.54c4.8-4.48 7.56-10.12 8.16-16.72.719-7.88.74-15.78.08-23.5m-55.48 20.6c.04-.44.1-.88.2-1.3.58-2.4 1.16-4.82 1.8-7.2.2-.76.54-2.04 1.98-2.04.3 0 .62.06 1.16.18 4.3 1.06 8.62 2.12 12.94 3.22.36.08.68.24.96.38l.96.44-.14 1.7-5.04 1.8c-3.94 1.38-7.86 2.74-11.8 4.1-.48.16-.96.22-1.4.28l-.52.06-1.32.22.22-1.84z"/><path fill="#FFF" d="M554.611 1419.891c-.42 1.08-.86 2.16-1.28 3.24-.62 1.54-1.24 3.1-1.84 4.66-.08.2-.1.22-.7.32-.06.02-.14.04-.22.04l-1.84-.38c-1.64-.34-3.26-.68-4.88-1.08-1.04-.24-2.06-.58-3.02-.92.76-.3 1.52-.6 2.28-.92 1.6-.64 3.18-1.28 4.78-1.96 1.34-.58 2.68-1.18 4.02-1.8.88-.4 1.76-.8 2.7-1.2"/><path fill="#009497" d="M391.022 1378.717v142.084c0 4.624-3.75 8.332-8.334 8.332H224.356a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334H341.48l49.542 49.584z"/><path fill="#FFF" d="M350.064 1479.676h-93.086v-93.086h93.086v93.086zm-89.085-4h85.086v-85.086h-85.086v85.086z"/><path fill="#FFF" d="M298.161 1388.59h49.904v49.904h-49.904z"/><path fill="#62BB37" d="M619.044 1672.263v142.935c0 4.661-3.746 8.382-8.332 8.382H452.374c-4.635 0-8.329-3.72-8.329-8.382v-184.432c0-4.611 3.72-8.384 8.329-8.384h117.105l49.565 49.881z"/><path fill="#FFF" d="M504.394 1750.489c0 2.76 1.793 4.609 4.523 4.609h4.523v16.094c0 3.67 3.171 6.901 6.783 6.901 3.613 0 6.784-3.201 6.784-6.901v-16.094h9.074v16.094c0 3.67 3.173 6.901 6.785 6.901s6.785-3.201 6.785-6.901v-16.094h4.523c2.731 0 4.521-1.849 4.521-4.609v-45.99h-54.299v45.99zm-11.336-45.99c-3.641 0-6.784 3.201-6.784 6.901v32.188c0 3.67 3.173 6.901 6.784 6.901 3.612 0 6.785-3.201 6.785-6.901V1711.4c0-3.67-3.173-6.901-6.785-6.901m76.971 0c-3.611 0-6.783 3.201-6.783 6.901v32.188c0 3.67 3.171 6.901 6.783 6.901 3.613 0 6.785-3.201 6.785-6.901V1711.4c.029-3.67-3.143-6.901-6.785-6.901m-22.613-26.665l5.903-5.961c.911-.911.911-2.32 0-3.201-.91-.911-2.232-.911-3.171 0l-6.784 6.901c-3.171-2.292-7.253-3.201-11.776-3.201s-8.575.909-12.245 2.761l-6.344-6.931c-.881-.441-2.732-.441-3.614 0-.441.911-.441 2.76 0 3.672l5.903 5.961c-6.344 5.05-10.865 12.863-10.865 22.053h54.299c.002-9.163-4.55-17.444-11.306-22.054m-24.902 12.891h-4.523v-4.611h4.523v4.611zm22.613 0h-4.523v-4.611h4.523v4.611z"/><path fill="#ACACAC" d="M1326.192 1927.591v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#F6F4F4" d="M1194.661 1945.888h88.062v12.848h-88.062zM1194.661 1975.75h88.062v12.848h-88.062zM1194.661 2005.612h61.644v12.846h-61.644z"/><path fill="#03A9F4" d="M1091.169 1927.86v141.33c0 4.598-3.717 8.29-8.243 8.29H926.411c-4.573 0-8.242-3.693-8.242-8.29v-182.366c0-4.548 3.669-8.29 8.242-8.29h115.773l48.985 49.326z"/><path fill="#FFF" d="M1056.988 1980.086c-.135 6.281-2.731 12.037-6.867 16.172-4.146 4.134-9.756 6.671-15.977 6.671h-11.048a34.074 34.074 0 0 0 5.939-9.161h5.11c7.404 0 13.513-6.098 13.685-13.818.159-7.513-5.953-13.439-13.685-13.671h-21.634c-3.049 0-5.891 1.036-8.209 2.793a13.78 13.78 0 0 0-3.292 3.536 14.142 14.142 0 0 0-2.318 7.476l-9.159-.135c.014-.817.074-1.634.183-2.427.817-6.462 4.281-12.145 9.245-15.866 3.806-2.854 8.501-4.548 13.55-4.548h21.634c12.477.269 23.11 10.269 22.843 22.978"/><path fill="#FFF" d="M952.35 1979.952c.135-6.281 2.731-12.036 6.866-16.172 4.146-4.134 9.756-6.671 15.977-6.671h11.048a34.074 34.074 0 0 0-5.939 9.161h-5.11c-7.404 0-13.513 6.098-13.685 13.818-.159 7.513 5.953 13.439 13.685 13.671h21.634c3.049 0 5.89-1.036 8.209-2.793a13.748 13.748 0 0 0 3.292-3.536 14.142 14.142 0 0 0 2.318-7.476l9.159.135a20.059 20.059 0 0 1-.183 2.427c-.817 6.462-4.281 12.145-9.245 15.866-3.806 2.854-8.501 4.548-13.55 4.548h-21.634c-12.476-.269-23.11-10.269-22.842-22.978"/><path fill="#7757BC" d="M631.831 1927.791v142.084c0 4.634-3.754 8.332-8.349 8.332H464.826c-4.645 0-8.346-3.698-8.346-8.332v-183.334c0-4.584 3.727-8.334 8.346-8.334h117.341l49.664 49.584z"/><path fill="#FFF" d="M572.632 1973.395v-17.866c0-3.066-2.28-5.109-5.71-5.109h-68.351c-3.405 0-5.71 2.042-5.71 5.109v51.006c0 3.066 2.278 5.108 5.71 5.108h68.377c3.405 0 5.71-2.042 5.71-5.108v-17.84l22.792 20.408v-56.114l-22.818 20.406z"/><path fill="#FF5722" d="M175 1927.592v142.084c0 4.624-3.75 8.332-8.334 8.332H8.334A8.304 8.304 0 0 1 0 2069.676v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124L175 1927.592z"/><path fill="#FFF" d="M55.949 1983.244l24.53 27.062 33.551-46.552 38.613 62.062H26.356zM78.125 1952.336c0 8.444-6.844 15.288-15.288 15.288-8.442 0-15.288-6.844-15.288-15.288 0-8.444 6.846-15.288 15.288-15.288 8.443 0 15.288 6.844 15.288 15.288"/><path fill="#FDCA07" d="M852.145 1928.278v142.084c0 4.624-3.75 8.332-8.334 8.332H685.479a8.304 8.304 0 0 1-8.334-8.332v-183.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M752.382 1877.32h12.262v12.262h-12.262zM752.382 1901.846h12.262v12.262h-12.262zM752.382 1925.366h12.262v12.262h-12.262zM752.382 1949.594h12.262v27.04h-12.262zM764.646 1889.584h12.262v12.262h-12.262zM764.646 1914.108h12.262v12.262h-12.262zM764.646 1937.542h12.262v12.262h-12.262z"/><path fill="#FFF" d="M758.514 1964.372h18.394v12.262h-18.394zM779.379 2021.067l-4.324-33.834-21.932-.198-3.466 34.032c-.484 3.656 1.572 6.864 6.52 6.864h16.682c4.736 0 7.035-3.328 6.52-6.864zm-7.153-.325h-15.414v-6.292h15.414v6.292z"/><path fill="#FFED18" d="M1563.467 1921.911h-78.974l-17.276-17.5h-61.24a8.76 8.76 0 0 0-8.76 8.76v129.683c0 4.812 3.938 8.75 8.75 8.75h157.5c4.812 0 8.75-3.938 8.75-8.75v-112.193c0-4.813-3.938-8.75-8.75-8.75"/><path fill="#FDCA07" d="M1572.217 2042.852c0 4.812-3.938 8.75-8.75 8.75h-157.5c-4.812 0-8.75-3.938-8.75-8.75v-93.984c0-4.812 3.938-8.75 8.75-8.75h157.5c4.812 0 8.75 3.938 8.75 8.75v93.984z"/><g font-family="'MicrosoftYaHei'" font-size="40"><text transform="translate(-166.029 354.197)">M</text><text transform="translate(-126.949 354.197)">A</text><text transform="translate(-99.349 354.197)">C</text></g><text transform="translate(-151.149 103.49)" font-family="'MicrosoftYaHei'" font-size="40">WIN</text><text transform="translate(-274.95 632.054)" font-family="'MicrosoftYaHei'" font-size="40">鍥惧舰锛忓嵃鍒�</text><text transform="translate(-354.95 922.573)" font-family="'MicrosoftYaHei'" font-size="40">浜у搧锛忔�濈淮瀵煎浘</text><text transform="translate(-274.95 1180.598)" font-family="'MicrosoftYaHei'" font-size="40">褰辫锛忓箍鍛�</text><text transform="translate(-154.95 1714.652)" font-family="'MicrosoftYaHei'" font-size="40">浠g爜</text><text transform="translate(-154.95 2011.682)" font-family="'MicrosoftYaHei'" font-size="40">閫氱敤</text><text transform="translate(-274.95 1406.132)" font-family="'MicrosoftYaHei'" font-size="40">宸ヤ笟锛忓缓绛�</text><path fill="#FF40B6" d="M391.022 1927.291v142.935c0 4.662-3.746 8.382-8.332 8.382H224.351c-4.636 0-8.329-3.72-8.329-8.382v-184.432c0-4.611 3.72-8.384 8.329-8.384h117.105l49.566 49.881z"/><path fill="#FFF" d="M274.483 1937.936a2.611 2.611 0 0 0-2.62 2.62v67.198a15.834 15.834 0 0 0-7.911-2.097c-8.724 0-15.772 7.046-15.772 15.744s7.048 15.746 15.772 15.746 15.77-7.048 15.77-15.746c0-.627-.026-1.283-.105-1.859.079-.235.105-.497.105-.761v-55.277l55.251-9.744v38.247a15.854 15.854 0 0 0-7.911-2.096c-8.724 0-15.772 7.048-15.772 15.746s7.048 15.744 15.772 15.744 15.77-7.046 15.77-15.744c0-.63-.027-1.283-.105-1.861a2.43 2.43 0 0 0 .105-.758v-73.512c0-1.284 0-2.881-2.173-2.567-.446.052-66.176 10.977-66.176 10.977"/><path fill="#29D3B2" d="M175 1672.565v142.083c0 4.625-3.75 8.333-8.333 8.333H8.333A8.304 8.304 0 0 1 0 1814.648v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125L175 1672.565z"/><g fill="#FFF"><path d="M66.458 1683.137h1.562v7.812h-1.562c-5.836-.205-8.545 1.772-8.125 5.938v16.562c0 4.17-1.67 7.397-5 9.688 3.33 2.295 5 5.522 5 9.688v16.562c-.42 3.955 2.289 5.83 8.125 5.625h1.562v7.812h-1.562c-11.875.415-17.607-3.75-17.188-12.5v-16.875c.205-4.165-2.188-6.25-7.188-6.25h-.938v-7.812h.938c5 0 7.393-2.08 7.188-6.25v-16.562c-.419-9.376 5.313-13.853 17.188-13.438zM106.667 1683.137h1.562c11.875-.415 17.602 4.062 17.188 13.438v16.562c0 4.17 2.393 6.25 7.187 6.25h1.25v7.812h-1.25c-4.795 0-7.187 2.085-7.187 6.25v16.875c.414 8.54-5.312 12.705-17.188 12.5h-1.562v-7.812h1.562c5.83.205 8.539-1.67 8.125-5.625v-16.562c0-4.165 1.664-7.393 5-9.688-3.336-2.29-5-5.518-5-9.688v-16.562c.414-4.165-2.295-6.143-8.125-5.938h-1.562v-7.812z"/></g><path fill="#29D3B2" d="M391.022 1672.565v142.083c0 4.625-3.75 8.333-8.333 8.333H224.355a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333H341.48l49.542 49.583z"/><ellipse fill="#FFF" cx="303.522" cy="1687.044" rx="42.548" ry="12.063"/><path fill="#FFF" d="M303.522 1723.114c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.887 12.899 43.5 12.899z"/><path fill="#FFF" d="M303.522 1747.048c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676s6.887 12.899 43.5 12.899z"/><path fill="#FFF" d="M303.522 1770.981c36.612 0 43.5-12.899 43.5-12.899v-17.676s-5.167 12.11-43.5 12.11-43.5-12.11-43.5-12.11v17.676c0 .001 6.887 12.899 43.5 12.899z"/><path fill="#03A9F4" d="M852.144 1672.565v142.083c0 4.625-3.75 8.333-8.333 8.333H685.478a8.304 8.304 0 0 1-8.333-8.333v-183.333c0-4.583 3.708-8.333 8.333-8.333h117.125l49.541 49.583z"/><path fill="#FFF" d="M739.347 1725.822c.344 20.488 16.447 28.926 31.6 28.926 12.601 0 20-2.805 26.25-6.055l2.582 10.848c-5.332 3.402-11.332 6.916-29.916 6.916-29.999 0-44.978-18.43-44.978-42.014 0-25.137 18.807-44.938 43.084-44.938 27.205 0 36.438 23.932 36.438 39.256 0 3.1-.346 5.51-.518 7.061h-64.542zm50.421-10.847c.174-9.643-5.959-24.621-23.006-24.621-15.324 0-26.039 14.117-27.244 24.621h50.25z"/><path fill="#3F7AD9" d="M175 49.584l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.002"/><path fill="#D46B1C" d="M631.656 49.584l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.002"/><path fill="#58A138" d="M409.667 49.388l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V-.194"/><path fill="#2FB69A" d="M852.145 49.584l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.002"/><path fill="#3F7AD9" d="M1077.133 49.39l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V-.193"/><path fill="#718BC8" d="M1549.122 49.584v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.334c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M1511.622 100c0 27.614-22.386 50-50 50s-50-22.386-50-50 22.386-50 50-50 50 22.386 50 50"/><path fill="#718BC8" d="M1476.205 100c0 8.054-6.53 14.584-14.584 14.584s-14.582-6.53-14.582-14.584c0-8.054 6.528-14.584 14.582-14.584s14.584 6.53 14.584 14.584"/><path fill="#6479AB" d="M1549.122 49.584l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V.002"/><path fill="#D46B1C" d="M175.076 316.413l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V266.83"/><path fill="#4A5BD7" d="M175.076 604.924l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#58A138" d="M409.667 316.413l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552V266.83"/><path fill="#3F7AD9" d="M643.047 316.42l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#6479AB" d="M864.388 316.42l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M391.104 604.447l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#8C1DCD" d="M391.103 862.475l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M174.991 862.475l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#624A97" d="M174.991 1120.494l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M631.831 1927.79l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DCAE29" d="M852.144 1928.277l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#0F797A" d="M391.022 1120.691l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M391.105 1378.526l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#475A63" d="M631.646 1378.524l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#1993D0" d="M864.388 1378.717l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M852.145 1672.564l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#5BA23A" d="M619.044 1672.564l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#2FB69A" d="M391.105 1672.564l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M175 1672.564l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DC4C29" d="M175 1927.59l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#DC3F9D" d="M391.105 1928.08l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#1993D0" d="M1092.169 1927.398l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#969594" d="M1326.192 1927.276l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#D46B1C" d="M643.043 604.649l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#9E176D" d="M864.388 604.924l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#AD282B" d="M1077.213 604.924l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#9E176D" d="M1077.213 862.475l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><path fill="#AD282B" d="M864.388 862.475l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M643.043 862.475l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417M175 1378.717l-42.456.386c-4.005 0-7.252-3.829-7.252-8.552v-41.417"/><g><path fill="#718BC8" d="M1302.122 49.658v142.084c0 4.624-3.75 8.332-8.334 8.332h-158.332a8.304 8.304 0 0 1-8.334-8.332V8.408c0-4.584 3.708-8.334 8.334-8.334h117.124l49.542 49.584z"/><path fill="#FFF" d="M1264.622 86.075c0 27.614-22.386 50-50 50s-50-22.386-50-50 22.386-50 50-50 50 22.386 50 50"/><path fill="#718BC8" d="M1229.205 86.075c0 8.054-6.53 14.584-14.584 14.584-8.054 0-14.582-6.53-14.582-14.584 0-8.054 6.528-14.584 14.582-14.584 8.054 0 14.584 6.53 14.584 14.584"/><path opacity=".2" fill="#231815" d="M1252.58 41.324V.074l49.542 49.583h-41.208c-4.584 0-8.334-3.75-8.334-8.333z"/><g fill="#FFF"><path d="M1180.384 167.254c.172 5.043 4.127 7.221 8.597 7.221 3.266 0 5.617-.459 7.738-1.26l1.031 4.871c-2.407.973-5.731 1.719-9.743 1.719-9.055 0-14.385-5.559-14.385-14.098 0-7.738 4.7-15.016 13.64-15.016 9.055 0 12.036 7.451 12.036 13.582 0 1.32-.115 2.35-.229 2.982h-18.685zm12.266-4.93c.057-2.578-1.089-6.82-5.789-6.82-4.355 0-6.19 3.955-6.476 6.82h12.265zM1209.206 151.32l3.324 5.275c.917 1.49 1.719 2.865 2.521 4.297h.172c.802-1.547 1.604-2.98 2.408-4.412l3.094-5.16h7.68l-9.342 13.412 9.514 14.5h-7.967l-3.438-5.559c-.917-1.49-1.719-2.98-2.521-4.527h-.115c-.802 1.605-1.605 2.98-2.522 4.527l-3.21 5.559h-7.794l9.685-14.213-9.342-13.699h7.853zM1236.708 167.254c.172 5.043 4.127 7.221 8.597 7.221 3.266 0 5.617-.459 7.738-1.26l1.031 4.871c-2.407.973-5.73 1.719-9.743 1.719-9.055 0-14.385-5.559-14.385-14.098 0-7.738 4.7-15.016 13.64-15.016 9.055 0 12.036 7.451 12.036 13.582 0 1.32-.115 2.35-.23 2.982h-18.684zm12.266-4.93c.057-2.578-1.089-6.82-5.789-6.82-4.356 0-6.19 3.955-6.476 6.82h12.265z"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/svg/illustration.svg b/src/assets/svg/illustration.svg
deleted file mode 100644
index b45215b..0000000
--- a/src/assets/svg/illustration.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 676.99 384.01"><defs><style>.cls-1{fill:#f7bd3d;}.cls-19,.cls-2{fill:#181828;}.cls-10,.cls-13,.cls-3,.cls-42,.cls-5,.cls-6,.cls-64{fill:#fff;}.cls-3{opacity:0.48;}.cls-4{fill:#d39021;}.cls-6{opacity:0.61;}.cls-10,.cls-7{opacity:0.2;}.cls-8{fill:#113c47;}.cls-9{fill:#df8a3a;}.cls-10,.cls-41,.cls-42,.cls-43,.cls-46,.cls-56,.cls-57{isolation:isolate;}.cls-11{fill:#c0dbe2;}.cls-12{fill:#f7b14b;}.cls-13{opacity:0.7;}.cls-14{fill:#91dcdc;}.cls-15{fill:#5ba3ba;}.cls-16{fill:#d17e1c;}.cls-17{fill:#6f6372;}.cls-18{fill:#63456b;}.cls-19{opacity:0.5;}.cls-20{fill:#f04d6a;}.cls-21{fill:#928f93;}.cls-22{fill:#83c3db;}.cls-23{fill:#c0f3ff;}.cls-24,.cls-30,.cls-41,.cls-43{fill:#e89176;}.cls-25{fill:#ce7057;}.cls-26{fill:#ffbb59;}.cls-27{fill:#ffdbab;}.cls-28{fill:#f4a031;}.cls-29{fill:#fdc6a2;}.cls-30{opacity:0.62;}.cls-31{fill:#ffdbc7;}.cls-32{fill:#ffe8dc;}.cls-33{fill:#b4e4f9;}.cls-34{fill:#73c7e5;}.cls-35{fill:#eefbff;}.cls-36{opacity:0.15;}.cls-37{fill:#1b3c47;}.cls-38{fill:#e59328;}.cls-39{fill:#ffd097;}.cls-40{fill:#1b1b2b;}.cls-41{opacity:0.49;}.cls-42{opacity:0.55;}.cls-43{opacity:0.62;}.cls-44{fill:#ffc1b3;}.cls-45,.cls-64{opacity:0.25;}.cls-46{fill:#dff5f7;}.cls-46,.cls-56{opacity:0.8;}.cls-47{fill:#f1665d;}.cls-48{fill:#f7bd3b;}.cls-49{fill:#56c643;}.cls-50{fill:none;}.cls-51{fill:#8c7f93;}.cls-52{fill:#5ffd9f;}.cls-53{fill:#aeffcf;}.cls-54{fill:#7dc4ff;}.cls-55{fill:#12dd65;}.cls-56{fill:#b5e5e8;}.cls-57{fill:#c08976;opacity:0.39;}.cls-58{fill:#af143b;}.cls-59{fill:#91052d;}.cls-60{fill:#ffdede;}.cls-61{fill:#ea3d90;}.cls-62{fill:#c60c6e;}.cls-63{fill:#ff7dc7;}</style></defs><title>Asset 336</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M603.5,207.07h30.4a0,0,0,0,1,0,0v32.48a15.2,15.2,0,0,1-15.2,15.2h0a15.2,15.2,0,0,1-15.2-15.2V207.07A0,0,0,0,1,603.5,207.07Z"/><path class="cls-2" d="M618.86,256.08a16.43,16.43,0,0,1-16.42-16.42V207.19a1.21,1.21,0,0,1,1.22-1.22h30.4a1.22,1.22,0,0,1,1.22,1.22v32.47A16.44,16.44,0,0,1,618.86,256.08Zm-14-47.68v31.26a14,14,0,0,0,14,14h0a14,14,0,0,0,14-14V208.4Z"/><path class="cls-1" d="M585.23,168.9a61.1,61.1,0,0,0-12-21.92c11-4.5,23.31-3.22,32.37,4.56"/><path class="cls-3" d="M601.05,157.52c-2.43-8.05-19.31-10.2-28.95-9.36,11-4.5,23.31-3.22,32.37,4.56"/><path class="cls-4" d="M574.58,146.18c.44.51-1.37,1.19-.94,1.73,10.1-3.5,21.09-2.45,29.51,4.11l1.56-1.14C595.7,143.14,585.66,141.67,574.58,146.18Z"/><path class="cls-2" d="M590.78,164.39,585,169a61.12,61.12,0,0,0-11.2-22.31h0A60.89,60.89,0,0,1,590.78,164.39Z"/><path class="cls-2" d="M586.21,159a1,1,0,0,1-.8-.44c-4.91-8.05-11.82-9.68-11.93-9.68a.93.93,0,0,1-.71-1.07,1,1,0,0,1,1.08-.71c.31.07,7.79,1.84,13.11,10.54a.92.92,0,0,1-.3,1.27h0A1,1,0,0,1,586.21,159Z"/><path class="cls-5" d="M588.78,149.94a7.18,7.18,0,0,0-2.63-.62.3.3,0,0,1-.29-.31.31.31,0,0,1,.31-.29,8,8,0,0,1,2.86.65.31.31,0,0,1,.16.41.31.31,0,0,1-.41.16Z"/><ellipse class="cls-6" cx="581.68" cy="148.43" rx="1.08" ry="1.35" transform="translate(422.05 727.14) rotate(-88.89)"/><path class="cls-2" d="M584.67,170.12a1.21,1.21,0,0,1-1.16-.87,59.48,59.48,0,0,0-11.72-21.48,1.22,1.22,0,0,1-.25-1.07,1.2,1.2,0,0,1,.72-.84c11.92-4.87,24.49-3.09,33.63,4.76a1.21,1.21,0,0,1,.13,1.71,1.22,1.22,0,0,1-1.72.13c-8-6.89-19-8.69-29.56-4.94a61.72,61.72,0,0,1,11.1,21,1.21,1.21,0,0,1-.82,1.51A1,1,0,0,1,584.67,170.12Z"/><g class="cls-7"><path class="cls-8" d="M645.38,180.89a2.69,2.69,0,0,1-2.69-2.68V163a2.69,2.69,0,0,1,5.38,0v15.22a2.68,2.68,0,0,1-2.68,2.7Z"/><path class="cls-8" d="M645.38,158.72a2.69,2.69,0,0,1-2.69-2.69v-5.69a2.69,2.69,0,0,1,5.38,0V156A2.68,2.68,0,0,1,645.38,158.72Z"/></g><path class="cls-1" d="M650.18,160.47a60.69,60.69,0,0,1,11.94-21.92c-11-4.5-23.32-3.23-32.38,4.56"/><path class="cls-3" d="M631.27,154.46c2.42-8.05,18.52-16.64,30.85-15.91-11-4.5-23.32-3.23-32.38,4.56"/><path class="cls-5" d="M630.12,149.4c2.42-8.05,22.41-14.4,32.37-10.48-11-4.49-23.31-3.22-32.37,4.57"/><path class="cls-2" d="M646.3,151.07l5.14,7.34c2.15-8.13,5.86-14,11.09-20.56l.1-1.75C655.85,140.78,650.66,144.09,646.3,151.07Z"/><path class="cls-1" d="M615.4,142.72h6.12A35.47,35.47,0,0,1,657,178.19h0a35.47,35.47,0,0,1-35.48,35.48H615.4a35.47,35.47,0,0,1-35.48-35.48h0A35.47,35.47,0,0,1,615.4,142.72Z"/><path class="cls-5" d="M615.4,142.72h6.12A35.47,35.47,0,0,1,657,178.19h0c-4.23-15.44-15.3-31.14-34.89-31.14H616c-19.59,0-29.82,13.42-36.06,31.14h0A35.47,35.47,0,0,1,615.4,142.72Z"/><path class="cls-9" d="M657.57,177.76a35.47,35.47,0,0,1-35.47,35.47H616a35.47,35.47,0,0,1-35.47-35.47c0-.76,0-1.52.07-2.27a35.47,35.47,0,0,0,35.47,33.21h6.13a35.46,35.46,0,0,0,35.4-33.21C657.55,176.24,657.57,177,657.57,177.76Z"/><path class="cls-2" d="M652.77,197.23c-7.41-1.75-6.87-.88-13.6-8.53,0,0-2,9.61,5.58,15.2Z"/><path class="cls-2" d="M646.41,202.39s-5.81-.82-11.32-6.66c0,0-1.25,7.92,4.41,12.09Z"/><path class="cls-2" d="M666.3,186.94a1,1,0,0,1-.77-.42c-1.77-2.68-3.45-2.93-6.26-3.32a33.71,33.71,0,0,1-3.74-.69,33.62,33.62,0,0,0-5.37-.89,1,1,0,0,1-.84-1,.91.91,0,0,1,1-.84h0a35.1,35.1,0,0,1,5.67.93,30.78,30.78,0,0,0,3.55.66c2.85.41,5.31.75,7.52,4.12a.93.93,0,0,1-.26,1.3,1,1,0,0,1-.51.16Z"/><path class="cls-2" d="M676.05,196.14a.93.93,0,0,1-.78-.42c-1.75-2.66-8.95-5.77-19.74-8.6a35,35,0,0,0-5.37-.88.94.94,0,0,1,.17-1.86,36.26,36.26,0,0,1,5.67.94c8.06,2.09,18.27,5.38,20.83,9.34a.92.92,0,0,1-.25,1.29h0A.89.89,0,0,1,676.05,196.14Z"/><path class="cls-2" d="M664.45,198.15h-.16a13.49,13.49,0,0,1-8-4.15,16,16,0,0,0-3.85-2.88,34.55,34.55,0,0,0-5.07-2,.92.92,0,0,1-.6-1.16v0a.94.94,0,0,1,1.16-.6,38.43,38.43,0,0,1,5.38,2.15,19.06,19.06,0,0,1,4.29,3.17c1.86,1.71,3.47,3.23,7,3.68a.94.94,0,0,1-.14,1.86Z"/><path class="cls-2" d="M570.92,186.94a1,1,0,0,0,.78-.42c1.76-2.68,3.45-2.93,6.25-3.32a33.71,33.71,0,0,0,3.74-.69,33.8,33.8,0,0,1,5.37-.89,1,1,0,0,0,.84-1,.91.91,0,0,0-1-.84h0a35.1,35.1,0,0,0-5.67.93,30.78,30.78,0,0,1-3.55.66c-2.85.41-5.31.75-7.52,4.12a.93.93,0,0,0,.26,1.3,1,1,0,0,0,.51.16Z"/><path class="cls-2" d="M561.17,196.14a.93.93,0,0,0,.78-.42c1.75-2.66,8.95-5.77,19.74-8.6a35,35,0,0,1,5.37-.88.94.94,0,0,0-.17-1.86,36.26,36.26,0,0,0-5.67.94c-8.06,2.09-18.27,5.38-20.83,9.34a.92.92,0,0,0,.25,1.29h0A.89.89,0,0,0,561.17,196.14Z"/><path class="cls-2" d="M572.77,198.15h.16a13.49,13.49,0,0,0,8-4.15,16.2,16.2,0,0,1,3.86-2.88,34,34,0,0,1,5.06-2,.92.92,0,0,0,.6-1.16v0a.94.94,0,0,0-1.16-.6,38.43,38.43,0,0,0-5.38,2.15,19.06,19.06,0,0,0-4.29,3.17c-1.86,1.71-3.46,3.23-7,3.68a.94.94,0,0,0,.14,1.86Z"/><rect class="cls-5" x="591.72" y="158.31" width="23.8" height="28.97" rx="11.89"/><circle class="cls-2" cx="603.35" cy="173.72" r="8.79"/><circle class="cls-10" cx="605.84" cy="177.47" r="2.22"/><ellipse class="cls-5" cx="601.53" cy="170.34" rx="4.45" ry="3.39"/><rect class="cls-5" x="622.82" y="158.31" width="23.8" height="28.97" rx="11.89"/><circle class="cls-2" cx="634.45" cy="173.72" r="8.79"/><circle class="cls-10" cx="636.94" cy="177.47" r="2.22"/><ellipse class="cls-5" cx="632.62" cy="170.34" rx="4.45" ry="3.39"/><path class="cls-5" d="M602.74,152.19a26.51,26.51,0,0,1,5.66-1.95,29.63,29.63,0,0,1,5.93-.69.64.64,0,0,1,.64.62.63.63,0,0,1-.59.63,29.54,29.54,0,0,0-5.61,1,32.59,32.59,0,0,0-5.33,1.92.83.83,0,0,1-1.09-.42A.82.82,0,0,1,602.74,152.19Z"/><ellipse class="cls-5" cx="618.54" cy="150.08" rx="1.08" ry="1.35" transform="translate(456.54 765.61) rotate(-88.89)"/><path class="cls-2" d="M621.52,214.89H615.4a36.7,36.7,0,1,1,0-73.39h6.12a36.7,36.7,0,1,1,0,73.39Zm-6.12-71a34.26,34.26,0,0,0,0,68.52h6.12a34.26,34.26,0,0,0,0-68.52Z"/><path class="cls-2" d="M652.35,160.22a1.33,1.33,0,0,1-.28,0,1.21,1.21,0,0,1-.91-1.46,57.79,57.79,0,0,1,8.94-20.92c-10.81-3.06-21.62-.57-29.18,6.83a1.22,1.22,0,1,1-1.71-1.74c8.61-8.41,21-11,33.26-6.91a1.24,1.24,0,0,1,.59,1.89c-4.57,6.11-7.51,12.71-9.53,21.4A1.22,1.22,0,0,1,652.35,160.22Z"/><ellipse class="cls-9" cx="624.94" cy="205.15" rx="2.59" ry="0.97"/><circle class="cls-9" cx="620.04" cy="205.36" r="1"/><ellipse class="cls-5" cx="644.21" cy="145.01" rx="1.82" ry="0.89" transform="translate(13.8 341.53) rotate(-30)"/><circle class="cls-5" cx="646.3" cy="146.64" r="0.41"/><path class="cls-2" d="M617.76,185.47a1.74,1.74,0,0,0-1.32,2.89c.79.87,1.93,1.91,3.2,1.91s2.41-1,3.19-1.91a1.74,1.74,0,0,0-.16-2.46,1.8,1.8,0,0,0-1.1-.43Z"/><rect class="cls-11" x="376.08" y="323.79" width="23.87" height="2.17"/><polygon class="cls-11" points="402.27 298.71 402.06 301.15 372.83 301.15 372.62 298.71 402.27 298.71"/><path class="cls-2" d="M396.56,346.71H378.87a3.2,3.2,0,0,1-3.17-2.92l-3.81-46.08a1,1,0,0,1,1-1.09h29.65a1,1,0,0,1,.74.32,1,1,0,0,1,.27.77L401,328.07a1,1,0,1,1-2-.16l2.42-29.28H374l3.73,45a1.17,1.17,0,0,0,1.16,1.07h17.69a1.17,1.17,0,0,0,1.16-1.07l.93-11.2a1,1,0,0,1,1.09-.92,1,1,0,0,1,.92,1.09l-.93,11.19A3.2,3.2,0,0,1,396.56,346.71Z"/><rect class="cls-5" x="368.19" y="293.28" width="39.06" height="4.7"/><path class="cls-2" d="M404.89,299.16H370.54a3.32,3.32,0,1,1,0-6.64h34.35a3.32,3.32,0,0,1,0,6.64Zm-34.35-4.7a1.38,1.38,0,1,0,0,2.76h34.35a1.38,1.38,0,1,0,0-2.76Z"/><path class="cls-2" d="M373.8,294.18h0a.72.72,0,0,1-.68-.76c0-.22.36-5.38,4.8-7.07a.73.73,0,0,1,1,.68v6a.72.72,0,0,1-1.44,0v-4.84c-2.67,1.7-2.9,5.28-2.91,5.32A.71.71,0,0,1,373.8,294.18Z"/><circle class="cls-5" cx="392.19" cy="305.08" r="0.2"/><circle class="cls-11" cx="394.3" cy="301.76" r="1.56"/><circle class="cls-11" cx="397.38" cy="304.44" r="0.44"/><circle class="cls-11" cx="398.57" cy="301.89" r="0.41"/><circle class="cls-11" cx="391.41" cy="301.11" r="0.98"/><circle class="cls-11" cx="394.6" cy="307.28" r="0.37"/><polygon class="cls-12" points="370.95 305.89 372.22 322.52 403.63 322.52 405.08 305.89 370.95 305.89"/><path class="cls-2" d="M403.45,324.07H372a1,1,0,0,1-1-.93l-1.26-16.63a1,1,0,0,1,1-1.08h34.12a1,1,0,0,1,.75.32,1,1,0,0,1,.26.77l-1.45,16.63A1,1,0,0,1,403.45,324.07Zm-30.48-2h29.56l1.27-14.62H371.86Z"/><path class="cls-2" d="M381.05,311.24h-9a.47.47,0,0,1,0-.93h9a.47.47,0,1,1,0,.93Z"/><ellipse class="cls-13" cx="378.25" cy="316.8" rx="3.68" ry="2.89" transform="translate(-113.22 360.25) rotate(-45)"/><ellipse class="cls-13" cx="384.01" cy="314.43" rx="1.44" ry="1.14" transform="translate(-109.86 363.63) rotate(-45)"/><rect class="cls-14" x="210.13" y="327.96" width="112.38" height="17.46"/><rect class="cls-15" x="210.13" y="327.96" width="112.38" height="4.12"/><path class="cls-2" d="M322.52,346.88H210.13a1.45,1.45,0,0,1-1.45-1.46V328a1.45,1.45,0,0,1,1.45-1.45H322.52A1.45,1.45,0,0,1,324,328v17.46A1.45,1.45,0,0,1,322.52,346.88ZM211.59,344H321.06V329.42H211.59Z"/><path class="cls-12" d="M115.69,353.62h516.7a0,0,0,0,1,0,0v0a30.24,30.24,0,0,1-30.24,30.24H145.94a30.24,30.24,0,0,1-30.24-30.24v0a0,0,0,0,1,0,0Z"/><path class="cls-16" d="M631.59,360.3a28.37,28.37,0,0,1-1.23,4H117.73a28.37,28.37,0,0,1-1.23-4Z"/><path class="cls-2" d="M602.15,384H145.94a31.44,31.44,0,0,1-31.4-31.4,1.16,1.16,0,0,1,2.31,0,29.12,29.12,0,0,0,29.09,29.09H602.15a29.12,29.12,0,0,0,29.09-29.09,1.15,1.15,0,1,1,2.3,0A31.43,31.43,0,0,1,602.15,384Z"/><rect class="cls-17" x="568.49" y="220.97" width="95.09" height="124.14" rx="16.2"/><path class="cls-18" d="M595.82,344.38H584.68a16.19,16.19,0,0,1-16.19-16.19V236.45a16.19,16.19,0,0,1,16.19-16.2h11.14a16.2,16.2,0,0,0-16.2,16.2v91.74A16.19,16.19,0,0,0,595.82,344.38Z"/><circle class="cls-19" cx="616.03" cy="254.16" r="10.16"/><circle class="cls-19" cx="616.03" cy="254.16" r="7.19"/><path class="cls-2" d="M616,265.54a11.38,11.38,0,1,1,11.38-11.38A11.4,11.4,0,0,1,616,265.54Zm0-20.33a8.95,8.95,0,1,0,9,8.95A9,9,0,0,0,616,245.21Z"/><circle class="cls-19" cx="616.03" cy="297.71" r="22.14"/><circle class="cls-19" cx="616.03" cy="297.71" r="15.65"/><path class="cls-2" d="M616,321.4a23.69,23.69,0,1,1,23.69-23.69A23.72,23.72,0,0,1,616,321.4Zm0-44.28a20.59,20.59,0,1,0,20.59,20.59A20.61,20.61,0,0,0,616,277.12Z"/><path class="cls-2" d="M590.23,236.47a3.73,3.73,0,1,1,3.72-3.72A3.73,3.73,0,0,1,590.23,236.47Zm0-5.59a1.87,1.87,0,1,0,1.86,1.87A1.87,1.87,0,0,0,590.23,230.88Z"/><path class="cls-2" d="M641.84,236.47a3.73,3.73,0,1,1,3.72-3.72A3.73,3.73,0,0,1,641.84,236.47Zm0-5.59a1.87,1.87,0,1,0,1.86,1.87A1.87,1.87,0,0,0,641.84,230.88Z"/><circle class="cls-20" cx="616.03" cy="229.95" r="3.54"/><path class="cls-2" d="M616,234.42a4.47,4.47,0,1,1,4.48-4.47A4.47,4.47,0,0,1,616,234.42Zm0-7.08a2.61,2.61,0,1,0,2.61,2.61A2.61,2.61,0,0,0,616,227.34Z"/><path class="cls-2" d="M590.23,337.61a3.72,3.72,0,1,1,3.72-3.72A3.73,3.73,0,0,1,590.23,337.61Zm0-5.58a1.86,1.86,0,1,0,1.86,1.86A1.86,1.86,0,0,0,590.23,332Z"/><path class="cls-2" d="M641.84,337.61a3.72,3.72,0,1,1,3.72-3.72A3.73,3.73,0,0,1,641.84,337.61Zm0-5.58a1.86,1.86,0,1,0,1.86,1.86A1.86,1.86,0,0,0,641.84,332Z"/><rect class="cls-18" x="577.8" y="271.47" width="4.36" height="19.09" rx="2.18"/><rect class="cls-21" x="657.91" y="248.02" width="4.36" height="19.09" rx="2.18"/><rect class="cls-21" x="657.91" y="308.2" width="4.36" height="19.09" rx="1.62"/><path class="cls-2" d="M647.38,346.66H584.69a17.77,17.77,0,0,1-17.75-17.75V237.17a17.77,17.77,0,0,1,17.75-17.75h62.69a17.77,17.77,0,0,1,17.75,17.75v91.74A17.77,17.77,0,0,1,647.38,346.66ZM584.69,222.53A14.66,14.66,0,0,0,570,237.17v91.74a14.66,14.66,0,0,0,14.65,14.65h62.69A14.66,14.66,0,0,0,662,328.91V237.17a14.66,14.66,0,0,0-14.64-14.64Z"/><rect class="cls-17" x="93.02" y="220.97" width="95.09" height="124.14" rx="16.2"/><path class="cls-18" d="M120.35,344.38H109.22A16.19,16.19,0,0,1,93,328.19V236.45a16.2,16.2,0,0,1,16.2-16.2h11.13a16.2,16.2,0,0,0-16.2,16.2v91.74A16.19,16.19,0,0,0,120.35,344.38Z"/><circle class="cls-19" cx="140.57" cy="254.16" r="10.16"/><circle class="cls-19" cx="140.57" cy="254.16" r="7.19"/><path class="cls-2" d="M140.57,265.54A11.38,11.38,0,1,1,152,254.16,11.39,11.39,0,0,1,140.57,265.54Zm0-20.33a8.95,8.95,0,1,0,8.94,8.95A9,9,0,0,0,140.57,245.21Z"/><circle class="cls-19" cx="140.57" cy="297.71" r="22.14"/><circle class="cls-19" cx="140.57" cy="297.71" r="15.65"/><path class="cls-2" d="M140.57,321.4a23.69,23.69,0,1,1,23.69-23.69A23.72,23.72,0,0,1,140.57,321.4Zm0-44.28a20.59,20.59,0,1,0,20.58,20.59A20.61,20.61,0,0,0,140.57,277.12Z"/><path class="cls-2" d="M114.76,236.47a3.73,3.73,0,1,1,3.72-3.72A3.73,3.73,0,0,1,114.76,236.47Zm0-5.59a1.87,1.87,0,1,0,1.86,1.87A1.87,1.87,0,0,0,114.76,230.88Z"/><path class="cls-2" d="M166.37,236.47a3.73,3.73,0,1,1,3.73-3.72A3.73,3.73,0,0,1,166.37,236.47Zm0-5.59a1.87,1.87,0,1,0,1.86,1.87A1.87,1.87,0,0,0,166.37,230.88Z"/><path class="cls-2" d="M114.76,337.61a3.72,3.72,0,1,1,3.72-3.72A3.73,3.73,0,0,1,114.76,337.61Zm0-5.58a1.86,1.86,0,1,0,1.86,1.86A1.86,1.86,0,0,0,114.76,332Z"/><path class="cls-2" d="M166.37,337.61a3.72,3.72,0,1,1,3.73-3.72A3.73,3.73,0,0,1,166.37,337.61Zm0-5.58a1.86,1.86,0,1,0,1.86,1.86A1.86,1.86,0,0,0,166.37,332Z"/><rect class="cls-18" x="102.33" y="271.47" width="4.36" height="19.09" rx="2.18"/><rect class="cls-21" x="182.44" y="248.02" width="4.36" height="19.09" rx="1.62"/><rect class="cls-21" x="182.44" y="308.2" width="4.36" height="19.09" rx="1.62"/><path class="cls-2" d="M171.91,346.66H109.22a17.77,17.77,0,0,1-17.75-17.75V237.17a17.77,17.77,0,0,1,17.75-17.75h62.69a17.77,17.77,0,0,1,17.75,17.75v91.74A17.77,17.77,0,0,1,171.91,346.66ZM109.22,222.53a14.66,14.66,0,0,0-14.64,14.64v91.74a14.66,14.66,0,0,0,14.64,14.65h62.69a14.66,14.66,0,0,0,14.65-14.65V237.17a14.66,14.66,0,0,0-14.65-14.64Z"/><path class="cls-22" d="M331.21,343.91a18,18,0,1,1,35.92,0"/><path class="cls-23" d="M352.41,326.07a18,18,0,0,0-15.82,17.84H332.3a18,18,0,0,1,18-18A16.89,16.89,0,0,1,352.41,326.07Z"/><path class="cls-2" d="M367.13,345.15a1.24,1.24,0,0,1-1.23-1.24,16.63,16.63,0,0,0-2.71-9.12,1.24,1.24,0,0,1,2.08-1.36,19.16,19.16,0,0,1,3.1,10.48A1.24,1.24,0,0,1,367.13,345.15Z"/><path class="cls-2" d="M331.21,345.15a1.24,1.24,0,0,1-1.24-1.24,19.2,19.2,0,0,1,31.21-15,1.24,1.24,0,1,1-1.55,1.93,16.57,16.57,0,0,0-10.46-3.67,16.75,16.75,0,0,0-16.73,16.73A1.24,1.24,0,0,1,331.21,345.15Z"/><path class="cls-24" d="M488.94,54.37a25.94,25.94,0,0,1-51.87,0c0-14.33,11.61-27.18,25.93-27.18S488.94,40,488.94,54.37Z"/><path class="cls-25" d="M487.66,55.17a25.69,25.69,0,0,1-.75,5.57h-1.16a51.46,51.46,0,0,1-36.52-15.13,52.23,52.23,0,0,1-6.82-8.42,25.09,25.09,0,0,1,2.32-2.29,51.1,51.1,0,0,0,4.5,5.14,51.46,51.46,0,0,0,36.52,15.13Z"/><path class="cls-2" d="M463,81.67a27.29,27.29,0,0,1-24-14.35,1.36,1.36,0,1,1,2.4-1.29,24.58,24.58,0,0,0,46.21-11.66c0-14-11.26-25.82-24.58-25.82s-24.57,11.82-24.57,25.82a24.8,24.8,0,0,0,.83,6.37,1.36,1.36,0,1,1-2.63.7,27.06,27.06,0,0,1-.93-7.07c0-15.48,12.5-28.55,27.3-28.55s27.31,13.07,27.31,28.55A27.34,27.34,0,0,1,463,81.67Z"/><path class="cls-24" d="M521.88,72.42a25.94,25.94,0,0,0,51.88,0c0-14.33-11.61-27.18-25.94-27.18S521.88,58.09,521.88,72.42Z"/><path class="cls-25" d="M523.16,73.22a25.69,25.69,0,0,0,.76,5.57h1.16a51.7,51.7,0,0,0,43.33-23.55A26.28,26.28,0,0,0,566.1,53c-1.39,1.81-4.91.48-6.52,2.09-9.34,9.35-20.24,18.18-34.5,18.18Z"/><path class="cls-2" d="M547.82,99.72a27.34,27.34,0,0,1-27.3-27.3c0-15.48,12.5-28.55,27.3-28.55s27.3,13.07,27.3,28.55a27.62,27.62,0,0,1-.92,7.08,1.37,1.37,0,0,1-2.64-.71,24.38,24.38,0,0,0,.84-6.37c0-14-11.26-25.82-24.58-25.82s-24.57,11.82-24.57,25.82a24.58,24.58,0,0,0,46.21,11.66,1.36,1.36,0,1,1,2.4,1.29A27.3,27.3,0,0,1,547.82,99.72Z"/><path class="cls-26" d="M450.17,338.66l-52.1,11.16v-95a26.05,26.05,0,0,1,26.05-26.06h0a26.05,26.05,0,0,1,26.05,26.06Z"/><path class="cls-27" d="M426.66,228.91a26,26,0,0,0-23,25.87v93.73l-6.15,1.31v-95a26.05,26.05,0,0,1,26.06-26.05A23.88,23.88,0,0,1,426.66,228.91Z"/><path class="cls-2" d="M398.07,351a1.21,1.21,0,0,1-.77-.27,1.24,1.24,0,0,1-.45-.95v-95a27.27,27.27,0,1,1,54.54,0v83.88a1.22,1.22,0,0,1-1,1.19L398.32,351A1.07,1.07,0,0,1,398.07,351Zm26.05-121.1a24.86,24.86,0,0,0-24.83,24.84v93.54L449,337.68v-82.9A24.86,24.86,0,0,0,424.12,229.94Zm26.05,108.72h0Z"/><path class="cls-26" d="M512.58,199h0a42.11,42.11,0,0,1,42.11,42.11V352.61a0,0,0,0,1,0,0H412.1a0,0,0,0,1,0,0V299.48A100.48,100.48,0,0,1,512.58,199Z"/><path class="cls-28" d="M554.55,241.9h0a0,0,0,0,1,0,0V348.38a0,0,0,0,1,0,0H544a0,0,0,0,1,0,0v-96A10.53,10.53,0,0,1,554.55,241.9Z"/><path class="cls-27" d="M517.36,199.22a100.51,100.51,0,0,0-93.67,100.26v53.13h-11.2V299.48A100.49,100.49,0,0,1,513,199,42.29,42.29,0,0,1,517.36,199.22Z"/><path class="cls-2" d="M554.69,353.83H412.1a1.21,1.21,0,0,1-1.22-1.22V299.48a101.81,101.81,0,0,1,101.7-101.7,43.37,43.37,0,0,1,43.33,43.32V352.61A1.22,1.22,0,0,1,554.69,353.83Zm-141.37-2.44H553.47V241.1a40.94,40.94,0,0,0-40.89-40.89,99.38,99.38,0,0,0-99.26,99.27Z"/><rect class="cls-26" x="531.05" y="226.8" width="41.81" height="115.09" rx="20.9"/><path class="cls-27" d="M555.56,341.78c-.72.07-1.44.11-2.18.11A20.91,20.91,0,0,1,532.48,321V247.7a20.9,20.9,0,0,1,20.9-20.9c.74,0,1.46,0,2.18.11a20.91,20.91,0,0,0-18.73,20.79V321A20.92,20.92,0,0,0,555.56,341.78Z"/><path class="cls-2" d="M552,343.11A22.15,22.15,0,0,1,529.84,321V247.7a22.12,22.12,0,0,1,44.24,0V321A22.15,22.15,0,0,1,552,343.11ZM552,228a19.71,19.71,0,0,0-19.69,19.68V321a19.69,19.69,0,1,0,39.38,0V247.7A19.71,19.71,0,0,0,552,228Z"/><rect class="cls-26" x="502.84" y="271.92" width="35.41" height="115.09" rx="17.71" transform="translate(850.01 -191.08) rotate(90)"/><path class="cls-2" d="M560.38,348.39H480.71a18.93,18.93,0,0,1,0-37.85h79.67a18.93,18.93,0,1,1,0,37.85ZM480.71,313a16.49,16.49,0,1,0,0,33h79.67a16.49,16.49,0,1,0,0-33Z"/><ellipse class="cls-29" cx="457.99" cy="329.89" rx="22.56" ry="17.62"/><path class="cls-30" d="M460.53,347a1.53,1.53,0,0,1-.23-3h0a27.23,27.23,0,0,0,7.8-2.68c4.95-2.66,7.59-6.4,7.84-11.11a1.51,1.51,0,0,1,1.61-1.45,1.54,1.54,0,0,1,1.45,1.61c-.31,5.8-3.6,10.54-9.53,13.69a30.37,30.37,0,0,1-8.72,3Z"/><path class="cls-2" d="M458,348.63c-6.56,0-13.09-2.12-17.75-6.26-4.15-3.7-6.27-8.47-5.95-13.42.32-5.17,3.22-9.87,8.15-13.25a1.15,1.15,0,1,1,1.3,1.9c-4.33,3-6.88,7-7.16,11.49-.27,4.24,1.58,8.34,5.19,11.56,7.84,7,21.49,7.66,30.43,1.53,4.33-3,6.87-7.05,7.16-11.49.26-4.24-1.58-8.34-5.2-11.56a1.15,1.15,0,0,1,1.53-1.72c4.16,3.7,6.27,8.47,6,13.42-.33,5.17-3.22,9.87-8.15,13.25A27.61,27.61,0,0,1,458,348.63Z"/><ellipse class="cls-31" cx="454.12" cy="325.7" rx="10.47" ry="6.34"/><rect class="cls-32" x="426.41" y="310.9" width="3.64" height="19.62" rx="1.82"/><rect class="cls-32" x="540.6" y="253.08" width="3.64" height="19.62" rx="1.82"/><rect class="cls-32" x="407.4" y="251.12" width="3.64" height="19.62" rx="1.82"/><rect class="cls-15" x="148.16" y="298.4" width="58.16" height="54.73" transform="translate(354.48 651.53) rotate(-180)"/><path class="cls-2" d="M206.32,354.37H148.16a1.25,1.25,0,0,1-1.24-1.24V298.4a1.24,1.24,0,0,1,1.24-1.24h58.16a1.24,1.24,0,0,1,1.24,1.24v54.73A1.25,1.25,0,0,1,206.32,354.37Zm-56.92-2.48h55.68V299.64H149.4Z"/><rect class="cls-14" x="160.05" y="298.4" width="58.16" height="54.73" transform="translate(378.26 651.53) rotate(-180)"/><path class="cls-2" d="M218.21,354.37H160.05a1.24,1.24,0,0,1-1.24-1.24V298.4a1.23,1.23,0,0,1,1.24-1.24h58.16a1.24,1.24,0,0,1,1.24,1.24v54.73A1.25,1.25,0,0,1,218.21,354.37Zm-56.92-2.48H217V299.64H161.29Z"/><path class="cls-15" d="M165.79,316.48H203a0,0,0,0,1,0,0v8.68a0,0,0,0,1,0,0H165.79a4.34,4.34,0,0,1-4.34-4.34v0A4.34,4.34,0,0,1,165.79,316.48Z" transform="translate(364.4 641.64) rotate(-180)"/><rect class="cls-15" x="47.73" y="129.98" width="259.84" height="185.06" rx="11.92" transform="translate(355.3 445.02) rotate(-180)"/><path class="cls-2" d="M295.65,316.28h-236a13.18,13.18,0,0,1-13.16-13.16V141.9a13.18,13.18,0,0,1,13.16-13.16h117a1.24,1.24,0,1,1,0,2.48h-117A10.69,10.69,0,0,0,49,141.9V303.12A10.69,10.69,0,0,0,59.65,313.8h236a10.69,10.69,0,0,0,10.68-10.68V141.9a10.69,10.69,0,0,0-10.68-10.68H251.48a1.24,1.24,0,1,1,0-2.48h44.17a13.18,13.18,0,0,1,13.16,13.16V303.12A13.18,13.18,0,0,1,295.65,316.28Z"/><rect class="cls-14" x="59.02" y="129.98" width="259.84" height="185.06" rx="11.92" transform="translate(377.88 445.02) rotate(-180)"/><rect class="cls-33" x="70.43" y="139.79" width="240.91" height="167.83" rx="7.94" transform="translate(381.77 447.41) rotate(-180)"/><ellipse class="cls-15" cx="188.68" cy="325.28" rx="1.54" ry="0.66"/><circle class="cls-15" cx="185.3" cy="327.96" r="0.9"/><circle class="cls-15" cx="191.39" cy="327.51" r="0.9"/><circle class="cls-15" cx="172.02" cy="324.46" r="2.11"/><circle class="cls-15" cx="194.17" cy="324.46" r="2.11"/><circle class="cls-15" cx="177.29" cy="327.53" r="0.95"/><circle class="cls-15" cx="172.11" cy="329.98" r="0.94"/><circle class="cls-15" cx="167.73" cy="327.96" r="0.43"/><circle class="cls-15" cx="169.45" cy="327.53" r="0.95"/><rect class="cls-34" x="303.75" y="200.35" width="6.76" height="94.24" rx="3.38" transform="translate(614.25 494.94) rotate(180)"/><rect class="cls-34" x="303.75" y="154.37" width="6.76" height="29.8" rx="3.38"/><rect class="cls-35" x="71.77" y="192.66" width="6.76" height="44.67" rx="3.38" transform="translate(150.3 429.98) rotate(-180)"/><rect class="cls-35" x="71.77" y="147.07" width="6.76" height="29.8" rx="3.38" transform="translate(150.3 323.94) rotate(180)"/><rect class="cls-35" x="71.77" y="259.42" width="6.76" height="13.27" rx="3.38" transform="translate(150.3 532.12) rotate(-180)"/><path class="cls-2" d="M70.43,170.51a1.25,1.25,0,0,1-1.24-1.24V147.73a9.19,9.19,0,0,1,9.18-9.18H245.21a1.24,1.24,0,1,1,0,2.48H78.37a6.71,6.71,0,0,0-6.7,6.7v21.54A1.25,1.25,0,0,1,70.43,170.51Z"/><path class="cls-2" d="M303.4,308.86H125.51a1.24,1.24,0,1,1,0-2.48H303.4a6.71,6.71,0,0,0,6.7-6.7v-152a6.71,6.71,0,0,0-6.7-6.7H256.07a1.24,1.24,0,1,1,0-2.48H303.4a9.19,9.19,0,0,1,9.18,9.18v152A9.19,9.19,0,0,1,303.4,308.86Z"/><path class="cls-2" d="M115.61,308.86H78.37a9.19,9.19,0,0,1-9.18-9.18v-48a1.24,1.24,0,0,1,2.48,0v48a6.71,6.71,0,0,0,6.7,6.7h37.24a1.24,1.24,0,0,1,0,2.48Z"/><path class="cls-2" d="M70.43,242.72a1.25,1.25,0,0,1-1.24-1.24V179.22a1.24,1.24,0,1,1,2.48,0v62.26A1.25,1.25,0,0,1,70.43,242.72Z"/><rect class="cls-15" x="56.94" y="149.8" width="10.21" height="5.59" rx="2.79" transform="translate(214.64 90.54) rotate(90)"/><rect class="cls-15" x="54.88" y="252.11" width="14.34" height="5.59" rx="2.79" transform="translate(316.95 192.86) rotate(90)"/><rect class="cls-15" x="56.94" y="186.47" width="10.21" height="5.59" rx="2.79" transform="translate(251.31 127.22) rotate(90)"/><path class="cls-2" d="M306.94,316.28h-236a13.18,13.18,0,0,1-13.16-13.16V141.9a13.18,13.18,0,0,1,13.16-13.16H225.66a1.24,1.24,0,1,1,0,2.48H70.94A10.69,10.69,0,0,0,60.26,141.9V303.12A10.69,10.69,0,0,0,70.94,313.8h236a10.69,10.69,0,0,0,10.68-10.68V141.9a10.69,10.69,0,0,0-10.68-10.68H235.07a1.24,1.24,0,1,1,0-2.48h71.87A13.18,13.18,0,0,1,320.1,141.9V303.12A13.18,13.18,0,0,1,306.94,316.28Z"/><g class="cls-36"><path class="cls-37" d="M392.13,192.34H379V170.15h39.07a1.58,1.58,0,1,1,0,3.16H382.17v15.87h10a1.58,1.58,0,1,1,0,3.16Z"/><path class="cls-37" d="M402.47,192.34h-5.69a1.58,1.58,0,1,1,0-3.16h5.69a1.58,1.58,0,1,1,0,3.16Z"/><path class="cls-37" d="M406.86,192.34h-.12a1.58,1.58,0,1,1,0-3.16h.12a1.58,1.58,0,0,1,0,3.16Z"/><path class="cls-37" d="M434.51,192.34H411.28a1.58,1.58,0,0,1,0-3.16h20.08V173.31h-7a1.58,1.58,0,1,1,0-3.16h10.18Z"/><path class="cls-37" d="M407.91,173.31H352.42V151.17h55.49Zm-52.35-3.16h49.19V154.32H355.57Z"/></g><g class="cls-36"><path class="cls-37" d="M110.6,112H97.45V89.83h39.08a1.58,1.58,0,0,1,0,3.15H100.64v15.88h10a1.58,1.58,0,1,1,0,3.15Z"/><path class="cls-37" d="M121,112h-5.7a1.58,1.58,0,0,1,0-3.15H121a1.58,1.58,0,0,1,0,3.15Z"/><path class="cls-37" d="M125.33,112h-.11a1.58,1.58,0,1,1,0-3.15h.11a1.58,1.58,0,1,1,0,3.15Z"/><path class="cls-37" d="M153,112H129.76a1.58,1.58,0,1,1,0-3.15h20.07V93h-7a1.58,1.58,0,1,1,0-3.15H153Z"/><path class="cls-37" d="M126.38,93H70.89V70.84h55.49ZM74,89.83h49.19V74H74.05Z"/></g><g class="cls-36"><path class="cls-37" d="M625.65,103.13H612.5V80.94h39.07a1.58,1.58,0,0,1,0,3.16H615.69V100h10a1.58,1.58,0,1,1,0,3.16Z"/><path class="cls-37" d="M636,103.13H630.3a1.58,1.58,0,1,1,0-3.16H636a1.58,1.58,0,1,1,0,3.16Z"/><path class="cls-37" d="M640.38,103.13h-.12a1.58,1.58,0,0,1,0-3.16h.12a1.58,1.58,0,0,1,0,3.16Z"/><path class="cls-37" d="M668,103.13H644.8a1.58,1.58,0,0,1,0-3.16h20.08V84.1h-7a1.58,1.58,0,1,1,0-3.16h10.17Z"/><path class="cls-37" d="M641.43,84.1H585.94V62h55.49Zm-52.35-3.16h49.19V65.11H589.09Z"/></g><path class="cls-2" d="M295.59,345.9H283.86a.93.93,0,1,1,0-1.86h11.73a.93.93,0,0,1,0,1.86Z"/><path class="cls-2" d="M295.59,350.71H283.86a.94.94,0,1,1,0-1.87h11.73a.94.94,0,0,1,0,1.87Z"/><ellipse class="cls-5" cx="262.75" cy="354.03" rx="1.4" ry="2.12"/><circle class="cls-5" cx="262.34" cy="359.31" r="0.99"/><circle class="cls-2" cx="298.2" cy="358.11" r="1.02"/><rect class="cls-12" x="96.1" y="344.59" width="553.37" height="14.95" rx="7.48"/><rect class="cls-12" x="96.1" y="344.59" width="553.37" height="14.95" rx="7.48"/><path class="cls-38" d="M649.46,351.72A7.48,7.48,0,0,1,642,359.2H103.57a7.48,7.48,0,0,1-7.48-7.48,7.27,7.27,0,0,1,.61-2.92,7.46,7.46,0,0,0,6.87,4.54H642a7.49,7.49,0,0,0,5.28-2.18,7.33,7.33,0,0,0,1.59-2.36A7.26,7.26,0,0,1,649.46,351.72Z"/><path class="cls-2" d="M547.49,345.48h-20a1.15,1.15,0,1,1,0-2.3h20a1.15,1.15,0,1,1,0,2.3Z"/><path class="cls-2" d="M117.9,350.63H96.74a.89.89,0,0,1,0-1.77H117.9a.89.89,0,1,1,0,1.77Z"/><path class="cls-2" d="M125.91,350.63h-3.49a.89.89,0,0,1,0-1.77h3.49a.89.89,0,0,1,0,1.77Z"/><rect class="cls-39" x="276.5" y="345.23" width="61.99" height="4.29" rx="2.15"/><rect class="cls-39" x="233.27" y="345.23" width="34.64" height="4.29" rx="2.15"/><rect class="cls-39" x="160.62" y="345.23" width="34.64" height="4.29" rx="2.15"/><path class="cls-2" d="M642,360.43H103.57a8.63,8.63,0,0,1,0-17.25H515.86a1.15,1.15,0,1,1,0,2.3H103.57a6.33,6.33,0,0,0,0,12.65H642a6.33,6.33,0,0,0,0-12.65H560.24a1.15,1.15,0,1,1,0-2.3H642a8.63,8.63,0,1,1,0,17.25Z"/><path class="cls-29" d="M446.88,100.57l6.66.13a15.76,15.76,0,0,1,15.4,16h0A15.68,15.68,0,0,1,453,132.15h0l-6.66-.13a15.76,15.76,0,0,1-15.42-16h0a15.68,15.68,0,0,1,15.95-15.41Z"/><path class="cls-2" d="M430.4,117.12h0a1.36,1.36,0,0,1-1.35-1.38,16.8,16.8,0,0,1,3.32-9.82,1.36,1.36,0,1,1,2.19,1.62,14.06,14.06,0,0,0-2.78,8.24A1.36,1.36,0,0,1,430.4,117.12Z"/><path class="cls-2" d="M452.75,133.31h-.3l-6.68-.13a17.08,17.08,0,0,1-15.65-11,1.37,1.37,0,0,1,.79-1.76,1.36,1.36,0,0,1,1.76.79,14.33,14.33,0,0,0,13.16,9.27l6.64.14a14.38,14.38,0,0,0,.55-28.75l-6.65-.14a14.28,14.28,0,0,0-7.47,1.91,1.36,1.36,0,0,1-1.86-.49,1.37,1.37,0,0,1,.49-1.87,17,17,0,0,1,8.9-2.27l6.65.13a17.11,17.11,0,0,1-.33,34.21Z"/><path class="cls-24" d="M449.18,113.44l3.46.06a8.19,8.19,0,0,1,8,8.34h0a8.18,8.18,0,0,1-8.32,8l-3.46-.07a8.19,8.19,0,0,1-8-8.33h0A8.17,8.17,0,0,1,449.18,113.44Z"/><path class="cls-5" d="M437.52,110.88a5.8,5.8,0,0,1,2.91-3.17c1.16-.45.69-2.34-.51-1.88a7.7,7.7,0,0,0-4.1,4.09c-.48,1.14,1.19,2.13,1.68,1Z"/><ellipse class="cls-5" cx="435.31" cy="114.5" rx="1.55" ry="1.24" transform="matrix(0.15, -0.99, 0.99, 0.15, 258.45, 528.41)"/><path class="cls-29" d="M557,100.57l6.66.13a15.76,15.76,0,0,1,15.42,16h0a15.68,15.68,0,0,1-15.95,15.41h0l-6.65-.13A15.76,15.76,0,0,1,541,116h0a15.68,15.68,0,0,1,16-15.41Z"/><path class="cls-2" d="M563.36,133.33h-.29l-6.69-.14a17.16,17.16,0,0,1-16.76-17.43,17.05,17.05,0,0,1,17-16.75H557l6.65.13a17.09,17.09,0,0,1-.28,34.18Zm-6.69-31.59a14.32,14.32,0,0,0-14.32,14.07,14.43,14.43,0,0,0,14.09,14.66l6.65.13a14.36,14.36,0,0,0,.5-28.72l-6.65-.14h-.27Z"/><path class="cls-24" d="M559.79,113.44l3.47.06a8.2,8.2,0,0,1,8,8.33v0h0a8.19,8.19,0,0,1-8.33,8l-3.45-.07a8.19,8.19,0,0,1-8-8.33h0A8.18,8.18,0,0,1,559.79,113.44Z"/><path class="cls-40" d="M440.47,118.54a1,1,0,0,1-.79-1.67,13.55,13.55,0,0,1,7.79-4.71,1,1,0,0,1,.41,2,11.43,11.43,0,0,0-6.61,4A1,1,0,0,1,440.47,118.54Z"/><path class="cls-40" d="M572.07,118.54a1,1,0,0,1-.8-.38,11.46,11.46,0,0,0-6.61-4,1,1,0,0,1,.41-2,13.55,13.55,0,0,1,7.79,4.71,1,1,0,0,1-.15,1.44A1,1,0,0,1,572.07,118.54Z"/><path class="cls-29" d="M545.17,34.62c.69.59,1.29,1.21,1.91,1.83a58.21,58.21,0,0,1,17.11,41.29V130a58.4,58.4,0,1,1-116.8,1.27c0-.42,0-.84,0-1.27V77.74a58.25,58.25,0,0,1,19-43.13C487.62,15.24,523.88,15.37,545.17,34.62Z"/><path class="cls-24" d="M547.4,36.72c-.62-.62-1.26-1.23-1.91-1.82a57.94,57.94,0,0,1-6,3.18c.28.28.53.58.79.88l2.11,2.47A62,62,0,0,1,550.29,54h-70a6.29,6.29,0,0,0,6.29,6.28h66.17a52.7,52.7,0,0,1,2.48,16.29V130.3a58.4,58.4,0,0,1-53.77,58.22c1.52.12,3.07.18,4.62.18a58.39,58.39,0,0,0,58.4-58.4V78A58.21,58.21,0,0,0,547.4,36.72Z"/><path class="cls-29" d="M518.28,199.55c0,2.51.71,5.34-.47,7.3-2.34,3.91-8.07,5.9-13.06,5.81h0a13.65,13.65,0,0,1-13.35-13.85l.68-10.89v-.68l27,.13"/><path class="cls-41" d="M520,188.4l-1.7,14.13a15.92,15.92,0,0,1-9.25-.74,75.12,75.12,0,0,0-16.28-5.19h-.13l.14-8.18a77.57,77.57,0,0,0,27.22,0Z"/><circle class="cls-42" cx="482.74" cy="182.33" r="0.72"/><circle class="cls-42" cx="492.76" cy="185.81" r="0.95"/><path class="cls-5" d="M511,187.58c-1.49.11-3,.17-4.53.17-32.25,0-61.86-25.73-58.4-58.4V77.06a58.24,58.24,0,0,1,19-43.12c1.85,1.12,1.45,2.17,3.53,3.13-9.83,10.44-17.44,24.54-17.44,40v52.29C453.22,160.09,476.9,186.57,511,187.58Z"/><circle class="cls-29" cx="538.87" cy="96.14" r="4.28"/><path class="cls-2" d="M452.37,154.8a1.37,1.37,0,0,1-1.23-.78,21.42,21.42,0,0,1-1.46-4,1.37,1.37,0,1,1,2.65-.66,18.26,18.26,0,0,0,1.27,3.52,1.36,1.36,0,0,1-.64,1.82A1.38,1.38,0,0,1,452.37,154.8Z"/><ellipse class="cls-43" cx="486.67" cy="111.98" rx="7.51" ry="9.5"/><ellipse class="cls-2" cx="486.33" cy="109.92" rx="7.4" ry="9.38"/><ellipse class="cls-5" cx="483.69" cy="106.51" rx="2.73" ry="2.98"/><ellipse class="cls-43" cx="525.69" cy="111.98" rx="7.51" ry="9.5"/><ellipse class="cls-2" cx="525.36" cy="109.92" rx="7.4" ry="9.38"/><ellipse class="cls-5" cx="522.71" cy="106.51" rx="2.73" ry="2.98"/><path class="cls-2" d="M505.75,189.86A60,60,0,0,1,454.3,160.5a1.37,1.37,0,1,1,2.35-1.39,57.25,57.25,0,0,0,49.1,28h.07a57.11,57.11,0,0,0,57-57.11V77.74a57.23,57.23,0,0,0-16.7-40.33L546,37.3c-.58-.58-1.13-1.13-1.74-1.66-9.94-9-24-14.13-38.52-14.15h-.09c-14.75,0-28.36,5-38.33,14.13a57,57,0,0,0-18.59,42.12V130a58.27,58.27,0,0,0,.92,10.3,1.37,1.37,0,0,1-2.69.48A60.86,60.86,0,0,1,446,130V77.74A59.79,59.79,0,0,1,465.46,33.6c21.71-19.84,58.61-19.85,80.59,0,.66.57,1.27,1.18,1.86,1.77l.1.11a60,60,0,0,1,17.51,42.26V130a59.84,59.84,0,0,1-59.7,59.84Z"/><path class="cls-2" d="M505.3,213.89a14.28,14.28,0,0,1-9.67-3.79A15.06,15.06,0,0,1,490.72,199V188.42a1.36,1.36,0,1,1,2.72,0V199a12.35,12.35,0,0,0,4,9.11,11.58,11.58,0,0,0,9,3l.82-.1a12.11,12.11,0,0,0,10.11-12V188.4a1.37,1.37,0,1,1,2.73,0V199a14.84,14.84,0,0,1-12.43,14.68c-.33.05-.65.09-1,.12A12.75,12.75,0,0,1,505.3,213.89Z"/><rect class="cls-32" x="456.56" y="88.86" width="4.25" height="22.93" rx="2.12"/><path class="cls-2" d="M508.12,130.22a1.37,1.37,0,0,1-1.27-.88,37,37,0,0,1-2.33-10.85V102.54a1.36,1.36,0,0,1,2.72,0v15.83a34.27,34.27,0,0,0,2.16,10,1.36,1.36,0,0,1-.79,1.76A1.41,1.41,0,0,1,508.12,130.22Z"/><path class="cls-24" d="M531.07,17.71H502.38A39.35,39.35,0,0,0,471.06,2.16H435.38c0,28.52,22.88,52.88,51.1,52.88h80.3C566.78,35.11,550.79,17.71,531.07,17.71Z"/><path class="cls-25" d="M550.67,23.51c9.25,6.54,15.3,18.55,15.3,30.74H484.8A51.54,51.54,0,0,1,444.2,34.5a51.41,51.41,0,0,0,31.9,11h65.65c10.45,0,16.37-13.63,9.45-21.46l-.53-.57"/><rect class="cls-44" x="453.54" y="-5.07" width="4.25" height="22.93" rx="2.12" transform="translate(462.07 -449.27) rotate(90)"/><ellipse class="cls-23" cx="337.53" cy="339.19" rx="0.96" ry="1.51"/><circle class="cls-23" cx="339.35" cy="336.6" r="0.52"/><circle class="cls-23" cx="339.01" cy="334.92" r="0.52"/><circle class="cls-23" cx="340.89" cy="334.74" r="0.43"/><circle class="cls-23" cx="340.19" cy="338.89" r="0.32"/><circle class="cls-23" cx="338.49" cy="338.89" r="0.77"/><circle class="cls-23" cx="337.05" cy="340.91" r="0.48"/><circle class="cls-23" cx="339.35" cy="340.43" r="0.34"/><circle class="cls-23" cx="340.67" cy="336.81" r="0.22"/><circle class="cls-23" cx="338.27" cy="341.39" r="0.22"/><circle class="cls-23" cx="339.69" cy="337.68" r="0.22"/><ellipse class="cls-16" cx="162.43" cy="364.29" rx="8.96" ry="3.08"/><circle class="cls-16" cx="179.44" cy="364.45" r="2.15"/><circle class="cls-16" cx="178.34" cy="372.11" r="1.1"/><circle class="cls-16" cx="171.18" cy="369.18" r="1.1"/><circle class="cls-16" cx="162.43" cy="372.11" r="1.07"/><circle class="cls-16" cx="161.69" cy="367.73" r="1.07"/><circle class="cls-16" cx="146.4" cy="363.99" r="2.61"/><circle class="cls-16" cx="153.47" cy="373.03" r="2.75"/><circle class="cls-16" cx="145.37" cy="368.06" r="2.75"/><ellipse class="cls-16" cx="555.88" cy="364.98" rx="8.96" ry="3.08"/><circle class="cls-16" cx="572.89" cy="365.14" r="2.15"/><circle class="cls-16" cx="571.79" cy="372.8" r="1.1"/><circle class="cls-16" cx="564.63" cy="369.87" r="1.1"/><circle class="cls-16" cx="561.82" cy="373.87" r="1.07"/><circle class="cls-16" cx="555.88" cy="372.8" r="1.07"/><circle class="cls-16" cx="555.14" cy="368.42" r="1.07"/><circle class="cls-16" cx="539.86" cy="364.68" r="2.61"/><circle class="cls-16" cx="546.92" cy="373.72" r="2.75"/><circle class="cls-16" cx="538.82" cy="368.74" r="2.75"/><ellipse class="cls-18" cx="579.86" cy="250.5" rx="1.69" ry="4.9"/><circle class="cls-18" cx="579.94" cy="241.19" r="1.18"/><circle class="cls-18" cx="584.13" cy="241.79" r="0.6"/><circle class="cls-18" cx="582.53" cy="245.71" r="0.6"/><circle class="cls-18" cx="584.72" cy="247.25" r="0.59"/><circle class="cls-18" cx="584.13" cy="250.5" r="0.59"/><circle class="cls-18" cx="581.74" cy="250.91" r="0.59"/><circle class="cls-18" cx="579.69" cy="259.27" r="1.43"/><circle class="cls-18" cx="584.64" cy="255.4" r="1.5"/><circle class="cls-18" cx="581.92" cy="259.84" r="1.5"/><ellipse class="cls-44" cx="444.36" cy="22.97" rx="1.23" ry="3.58" transform="translate(43.04 215.13) rotate(-28.54)"/><circle class="cls-44" cx="441.16" cy="16.96" r="0.86"/><circle class="cls-44" cx="444.06" cy="15.89" r="0.44"/><circle class="cls-44" cx="444.4" cy="18.96" r="0.44"/><circle class="cls-44" cx="446.34" cy="19.18" r="0.43"/><circle class="cls-44" cx="447.1" cy="21.47" r="0.43"/><circle class="cls-44" cx="445.71" cy="22.57" r="0.43"/><path class="cls-44" d="M446.82,27.74a1,1,0,0,1,1.41.41c.28.51.09,2.38-.42,2.66a1,1,0,0,1-1.41-.42C446.13,29.89,446.31,28,446.82,27.74Z"/><circle class="cls-44" cx="449.14" cy="24.44" r="1.1"/><path class="cls-44" d="M448.41,27.28a1.09,1.09,0,0,1,1.49.44c.29.53.1,2.44-.44,2.73s-1.2-1.15-1.48-1.69A1.08,1.08,0,0,1,448.41,27.28Z"/><ellipse class="cls-18" cx="580.23" cy="306.8" rx="1.69" ry="4.9"/><circle class="cls-18" cx="580.32" cy="297.49" r="1.18"/><circle class="cls-18" cx="584.51" cy="298.09" r="0.6"/><circle class="cls-18" cx="582.91" cy="302.01" r="0.6"/><circle class="cls-18" cx="585.1" cy="303.55" r="0.59"/><circle class="cls-18" cx="584.51" cy="306.8" r="0.59"/><circle class="cls-18" cx="582.12" cy="307.21" r="0.59"/><circle class="cls-18" cx="580.07" cy="315.57" r="1.43"/><circle class="cls-18" cx="585.01" cy="311.7" r="1.5"/><circle class="cls-18" cx="582.29" cy="316.14" r="1.5"/><path class="cls-2" d="M616,320.4a.62.62,0,0,1-.62-.62V274.65A.62.62,0,0,1,616,274a.62.62,0,0,1,.62.62v45.13A.62.62,0,0,1,616,320.4Z"/><path class="cls-2" d="M612.49,319.16a.62.62,0,0,1-.62-.62V275.89a.62.62,0,0,1,.62-.62.62.62,0,0,1,.62.62v42.65A.62.62,0,0,1,612.49,319.16Z"/><path class="cls-2" d="M608.89,319.16a.62.62,0,0,1-.62-.62V275.89a.62.62,0,0,1,.62-.62.62.62,0,0,1,.62.62v42.65A.62.62,0,0,1,608.89,319.16Z"/><path class="cls-2" d="M605.3,316.67a.62.62,0,0,1-.63-.62V279a.63.63,0,0,1,1.25,0v37.05A.62.62,0,0,1,605.3,316.67Z"/><path class="cls-2" d="M601.7,315.43a.62.62,0,0,1-.62-.62V280.86a.62.62,0,0,1,.62-.62.62.62,0,0,1,.62.62v33.95A.62.62,0,0,1,601.7,315.43Z"/><path class="cls-2" d="M598.1,312.32a.61.61,0,0,1-.62-.62V284a.61.61,0,0,1,.62-.62.62.62,0,0,1,.62.62V311.7A.62.62,0,0,1,598.1,312.32Z"/><path class="cls-2" d="M619.66,319.78a.62.62,0,0,1-.62-.62V276.51a.63.63,0,0,1,1.25,0v42.65A.63.63,0,0,1,619.66,319.78Z"/><path class="cls-2" d="M623.26,319.78a.62.62,0,0,1-.62-.62V276.51a.62.62,0,0,1,.62-.62.62.62,0,0,1,.62.62v42.65A.62.62,0,0,1,623.26,319.78Z"/><path class="cls-2" d="M626.86,317.29a.62.62,0,0,1-.62-.62V279.62a.62.62,0,0,1,.62-.62.62.62,0,0,1,.62.62v37.05A.61.61,0,0,1,626.86,317.29Z"/><path class="cls-2" d="M630.46,316.05a.62.62,0,0,1-.62-.62V281.48a.62.62,0,0,1,1.24,0v33.95A.62.62,0,0,1,630.46,316.05Z"/><path class="cls-2" d="M634.06,311.7a.62.62,0,0,1-.62-.62V284.59a.62.62,0,1,1,1.24,0v26.49A.62.62,0,0,1,634.06,311.7Z"/><g class="cls-45"><path class="cls-2" d="M615,320.4a.62.62,0,0,1-.62-.62V274.65a.62.62,0,1,1,1.24,0v45.13A.62.62,0,0,1,615,320.4Z"/><path class="cls-2" d="M611.44,319.16a.62.62,0,0,1-.62-.62V275.89a.62.62,0,0,1,.62-.62.62.62,0,0,1,.62.62v42.65A.62.62,0,0,1,611.44,319.16Z"/><path class="cls-2" d="M607.84,319.16a.62.62,0,0,1-.62-.62V275.89a.62.62,0,0,1,1.24,0v42.65A.62.62,0,0,1,607.84,319.16Z"/><path class="cls-2" d="M604.24,316.67a.62.62,0,0,1-.62-.62V279a.62.62,0,0,1,1.24,0v37.05A.62.62,0,0,1,604.24,316.67Z"/><path class="cls-2" d="M600.64,315.43a.62.62,0,0,1-.62-.62V280.86a.62.62,0,0,1,.62-.62.62.62,0,0,1,.62.62v33.95A.62.62,0,0,1,600.64,315.43Z"/><path class="cls-2" d="M597,310.46a.62.62,0,0,1-.62-.62V285.21a.62.62,0,0,1,.62-.62.62.62,0,0,1,.62.62v24.63A.62.62,0,0,1,597,310.46Z"/><path class="cls-2" d="M618.61,319.78a.62.62,0,0,1-.62-.62V276.51a.62.62,0,0,1,1.24,0v42.65A.62.62,0,0,1,618.61,319.78Z"/><path class="cls-2" d="M622.21,319.78a.62.62,0,0,1-.62-.62V276.51a.62.62,0,0,1,1.24,0v42.65A.62.62,0,0,1,622.21,319.78Z"/><path class="cls-2" d="M625.81,317.29a.61.61,0,0,1-.62-.62V279.62a.62.62,0,0,1,.62-.62.62.62,0,0,1,.62.62v37.05A.62.62,0,0,1,625.81,317.29Z"/><path class="cls-2" d="M629.41,316.05a.63.63,0,0,1-.63-.62V281.48a.63.63,0,0,1,1.25,0v33.95A.62.62,0,0,1,629.41,316.05Z"/><path class="cls-2" d="M633,313a.63.63,0,0,1-.62-.63V284.59a.63.63,0,0,1,1.25,0v27.73A.63.63,0,0,1,633,313Z"/></g><path class="cls-2" d="M332.3,337.92H261.69a21.89,21.89,0,0,1-21.87-21.87,1.24,1.24,0,0,1,2.48,0,19.41,19.41,0,0,0,19.39,19.39H332.3a1.24,1.24,0,0,1,0,2.48Z"/><path class="cls-44" d="M487.69,9.36a2.27,2.27,0,0,1-.72-.12l-6.62-2.32a31.93,31.93,0,0,0-10.57-1.79H440.87a2.18,2.18,0,1,1,0-4.35h28.91a36.12,36.12,0,0,1,12,2l6.61,2.31a2.18,2.18,0,0,1-.71,4.23Z"/><path class="cls-44" d="M447.38,35.83a2.19,2.19,0,0,1-1.63-.73c-7.95-9-9.87-21.16-9.95-21.67a2.18,2.18,0,1,1,4.3-.66h0c0,.11,1.82,11.42,8.91,19.45a2.17,2.17,0,0,1-1.63,3.61Z"/><path class="cls-2" d="M523.49,18.28h-6.17a1.37,1.37,0,0,1,0-2.73h6.17a1.37,1.37,0,1,1,0,2.73Z"/><path class="cls-2" d="M566.78,55.61H485.61a51.89,51.89,0,0,1-37.49-16.16A54.5,54.5,0,0,1,432.61,1.36,1.36,1.36,0,0,1,434,0H470a41.13,41.13,0,0,1,32.32,15.55h9a1.37,1.37,0,0,1,0,2.73h-9.69a1.32,1.32,0,0,1-1.07-.53A38.4,38.4,0,0,0,470,2.73H435.35a51.86,51.86,0,0,0,14.72,34.82,49.19,49.19,0,0,0,35.54,15.33h79.78c-.72-18.89-16.32-34.6-34.7-34.6h-1.44a1.37,1.37,0,1,1,0-2.73h1.44c20.3,0,37.45,17.72,37.45,38.7A1.36,1.36,0,0,1,566.78,55.61Z"/><path class="cls-34" d="M217,257.27h88.39a0,0,0,0,1,0,0v24.27a0,0,0,0,1,0,0H227.6A10.63,10.63,0,0,1,217,270.91V257.27A0,0,0,0,1,217,257.27Z"/><rect class="cls-5" x="216.97" y="180.49" width="139.42" height="92.63" rx="7.36"/><path class="cls-46" d="M356.39,253.49v9.11a9.7,9.7,0,0,1-9.69,9.7h-120a9.7,9.7,0,0,1-9.69-9.7v-9.11a9.69,9.69,0,0,0,9.69,9.69h120A9.69,9.69,0,0,0,356.39,253.49Z"/><line class="cls-5" x1="216.97" y1="195.71" x2="350.96" y2="195.71"/><path class="cls-2" d="M348.89,274.35H224.47a8.75,8.75,0,0,1-8.74-8.73V188a8.75,8.75,0,0,1,8.74-8.73H348.89a8.75,8.75,0,0,1,8.74,8.73v77.64A8.75,8.75,0,0,1,348.89,274.35ZM224.47,181.73a6.26,6.26,0,0,0-6.26,6.25v77.64a6.27,6.27,0,0,0,6.26,6.26H348.89a6.27,6.27,0,0,0,6.26-6.26V188a6.26,6.26,0,0,0-6.26-6.25Z"/><path class="cls-2" d="M344.75,196.64H217a.93.93,0,1,1,0-1.86H344.75a.93.93,0,1,1,0,1.86Z"/><circle class="cls-47" cx="228.01" cy="188.79" r="2.28"/><circle class="cls-48" cx="236.44" cy="188.72" r="2.28"/><circle class="cls-49" cx="244.86" cy="188.64" r="2.28"/><path class="cls-2" d="M227.65,191.49h-.31a2.82,2.82,0,0,1-2.48-3.1,2.73,2.73,0,0,1,1-1.88,2.8,2.8,0,1,1,1.75,5Zm0-4.56a1.77,1.77,0,0,0-1.75,1.56,1.76,1.76,0,1,0,1.95-1.55Z"/><path class="cls-2" d="M236.08,191.42h-.32a2.81,2.81,0,0,1,.63-5.58,2.8,2.8,0,0,1,2.47,3.1A2.81,2.81,0,0,1,236.08,191.42Zm0-4.56a1.76,1.76,0,1,0,1.75,1.95,1.77,1.77,0,0,0-.37-1.29,1.74,1.74,0,0,0-1.18-.65h-.2Z"/><path class="cls-2" d="M244.5,191.35a1.62,1.62,0,0,1-.31,0,2.76,2.76,0,0,1-1.88-1,2.81,2.81,0,0,1-.6-2.07,2.77,2.77,0,0,1,1-1.88,2.82,2.82,0,0,1,2.06-.59,2.82,2.82,0,0,1,2.48,3.1,2.86,2.86,0,0,1-1,1.88A2.78,2.78,0,0,1,244.5,191.35Zm0-4.56a1.75,1.75,0,0,0-1.74,1.56,1.77,1.77,0,0,0,1.55,1.94,1.75,1.75,0,0,0,1.29-.37,1.76,1.76,0,0,0-.9-3.12Z"/><line class="cls-50" x1="264.05" y1="229.89" x2="264.06" y2="223.98"/><path class="cls-2" d="M273.69,217.59a.71.71,0,0,1,0-1.42l54-.48h0a.71.71,0,0,1,.71.7.72.72,0,0,1-.71.72l-54,.48Z"/><path class="cls-2" d="M273.69,222.38a.72.72,0,0,1-.71-.7.7.7,0,0,1,.7-.71l38.51-.48h0a.71.71,0,1,1,0,1.41l-38.51.48Z"/><path class="cls-2" d="M273.69,227.18a.71.71,0,0,1,0-1.42l21.11-.48a.73.73,0,0,1,.72.7.7.7,0,0,1-.69.72l-21.11.48Z"/><path class="cls-2" d="M273.69,235.35a.71.71,0,0,1,0-1.42l54-.48h0a.71.71,0,0,1,.71.7.72.72,0,0,1-.71.72l-54,.48Z"/><path class="cls-2" d="M273.69,240.14a.72.72,0,0,1-.71-.7.7.7,0,0,1,.7-.71l38.51-.48h0a.71.71,0,1,1,0,1.41l-38.51.48Z"/><path class="cls-2" d="M273.69,244.94a.71.71,0,0,1,0-1.42l21.11-.48a.73.73,0,0,1,.72.7.7.7,0,0,1-.69.72l-21.11.48Z"/><rect class="cls-51" x="257.48" y="212.17" width="8.09" height="1.55" rx="0.77" transform="translate(17.78 446.02) rotate(-82.87)"/><rect class="cls-51" x="260.13" y="216.69" width="8.09" height="1.55" rx="0.77" transform="translate(15.61 452.61) rotate(-82.87)"/><rect class="cls-51" x="255.62" y="241.14" width="4.64" height="0.89" rx="0.44" transform="translate(-13.78 467.56) rotate(-82.87)"/><line class="cls-50" x1="267.43" y1="233.8" x2="267.44" y2="227.89"/><path class="cls-52" d="M267.46,221.23l0-8.57a4.25,4.25,0,0,0-4.23-4.27h0l-29.82-.06a4.26,4.26,0,0,0-4.28,4.23v0l-.07,36.07a4.26,4.26,0,0,0,4.23,4.28h0l29.82.06a4.26,4.26,0,0,0,4.28-4.23v-7.59"/><path class="cls-53" d="M230.14,229.91a.94.94,0,0,1-.95-.92l-.11-16.73c-.07-4.25,3.15-4.42,7.4-4.5a.94.94,0,1,1,.27,1.87h-.23a5.85,5.85,0,0,0-5.72,6l.26,13.36A1,1,0,0,1,230.14,229.91Z"/><ellipse class="cls-53" cx="231.23" cy="226.12" rx="1.13" ry="1.42" transform="translate(-4.31 4.49) rotate(-1.1)"/><circle class="cls-53" cx="232.51" cy="224.11" r="0.3"/><circle class="cls-54" cx="232.1" cy="228.38" r="0.36"/><circle class="cls-53" cx="233.33" cy="226.37" r="0.56"/><circle class="cls-53" cx="231" cy="219.97" r="0.53"/><circle class="cls-53" cx="231.44" cy="222.62" r="0.15"/><circle class="cls-53" cx="232.51" cy="217.27" r="0.47"/><circle class="cls-53" cx="232.33" cy="214.58" r="0.3"/><circle class="cls-53" cx="232.76" cy="211.34" r="0.79"/><path class="cls-2" d="M262.79,253.07h0L232.94,253a5,5,0,0,1-3.57-1.49,5,5,0,0,1-1.44-3.55l.07-36.08a5,5,0,0,1,5-5h0l29.83.06a5,5,0,0,1,5,5v8.57h0l-.06,27.54a5,5,0,0,1-1.49,3.56A4.94,4.94,0,0,1,262.79,253.07ZM233,208.39a3.5,3.5,0,0,0-3.49,3.47L229.45,248a3.47,3.47,0,0,0,3.47,3.51l29.85.06a3.53,3.53,0,0,0,2.48-1,3.44,3.44,0,0,0,1-2.46l.08-36.13a3.51,3.51,0,0,0-3.49-3.5L233,208.39Zm34.09,12.13h0Z"/><path class="cls-55" d="M262.75,236h0a1.19,1.19,0,0,1,1.2,1.19l.05,9.2a1.2,1.2,0,0,1-1.19,1.2h0a1.19,1.19,0,0,1-1.2-1.19l-.05-9.2A1.19,1.19,0,0,1,262.75,236Z"/><path class="cls-5" d="M231.74,226.78h0a.92.92,0,0,1,.92.92l0,7.07a.92.92,0,0,1-.91.92h0a.92.92,0,0,1-.93-.91l0-7.07A.93.93,0,0,1,231.74,226.78Z"/><path class="cls-34" d="M71.77,275.23v8.18l15.11,5.29s3.39,13,16.45,13,15.27-17.42,15.27-17.42Z"/><rect class="cls-5" x="55.12" y="233.44" width="9.07" height="72.78" transform="translate(-215.16 240.76) rotate(-71.49)"/><path class="cls-2" d="M92.73,286.79a1,1,0,0,1-.35-.06l-69-23.1a1.07,1.07,0,0,1-.63-.55,1.09,1.09,0,0,1-.06-.85l2.88-8.6a1.09,1.09,0,0,1,1.39-.69L96,276a1.1,1.1,0,0,1,.63.55,1.11,1.11,0,0,1,.06.84L93.77,286A1.09,1.09,0,0,1,92.73,286.79Zm-67.62-24.9L92,284.29l2.18-6.51-66.92-22.4Z"/><circle class="cls-5" cx="15.54" cy="255.17" r="14.43"/><path class="cls-2" d="M15.57,270.7a15.52,15.52,0,1,1,7.49-1.93A15.53,15.53,0,0,1,15.57,270.7Zm-.05-28.87a13.35,13.35,0,0,0-12.79,9.65A13.33,13.33,0,0,0,22,266.84a13.33,13.33,0,0,0-2.76-24.48A13.47,13.47,0,0,0,15.52,241.83Z"/><circle class="cls-20" cx="15.54" cy="255.17" r="7.98"/><path class="cls-2" d="M15.56,264.25a9.09,9.09,0,1,1,4.37-1.13A9,9,0,0,1,15.56,264.25Zm0-16a6.81,6.81,0,0,0-3.31.86,6.9,6.9,0,0,0-2.7,9.35,6.88,6.88,0,1,0,7.93-9.94A7,7,0,0,0,15.53,248.29Z"/><circle class="cls-34" cx="123.54" cy="210.16" r="12.18"/><rect class="cls-5" x="108.02" y="204.21" width="9.07" height="72.78" transform="translate(165.2 500.96) rotate(-166.36)"/><path class="cls-56" d="M122.67,217.83l-1.1,4.52a14.42,14.42,0,0,1-8.65-2.82l.93-3.85A14.45,14.45,0,0,0,122.67,217.83Z"/><path class="cls-2" d="M108.38,278.14a.82.82,0,0,1-.26,0L99.31,276a1.09,1.09,0,0,1-.81-1.33l17.16-70.73a1.08,1.08,0,0,1,.5-.68,1.1,1.1,0,0,1,.83-.13l8.82,2.14a1.1,1.1,0,0,1,.81,1.33l-17.17,70.72a1.11,1.11,0,0,1-1.07.85Zm-7.48-4.06,6.67,1.62,16.65-68.58-6.68-1.62Z"/><circle class="cls-5" cx="121.67" cy="203.06" r="14.43"/><path class="cls-2" d="M121.69,218.59a15.52,15.52,0,1,1,7.49-1.93A15.53,15.53,0,0,1,121.69,218.59Zm0-28.86A13.32,13.32,0,0,0,110,209.51a13.33,13.33,0,1,0,11.64-19.78Z"/><circle class="cls-20" cx="121.67" cy="203.06" r="7.98"/><path class="cls-2" d="M121.68,212.14a9.08,9.08,0,1,1,7.93-13.47h0a9.07,9.07,0,0,1-7.93,13.47Zm0-16a6.88,6.88,0,1,0,6,3.55h0A6.91,6.91,0,0,0,121.65,196.18Z"/><circle class="cls-5" cx="104.16" cy="283.21" r="14.43"/><path class="cls-2" d="M104.19,298.74a15.53,15.53,0,1,1,13.57-23.05h0a15.53,15.53,0,0,1-13.57,23.05Zm0-28.87a13.21,13.21,0,0,0-6.43,1.67,13.33,13.33,0,1,0,18.12,5.22,13.4,13.4,0,0,0-11.69-6.89Z"/><circle class="cls-20" cx="104.16" cy="283.21" r="7.98"/><path class="cls-2" d="M104.17,292.29a9.08,9.08,0,1,1,7.94-13.47h0a9.08,9.08,0,0,1-7.94,13.47Zm0-16a6.88,6.88,0,1,0,6,3.55h0a6.83,6.83,0,0,0-4.12-3.28A6.94,6.94,0,0,0,104.15,276.33Z"/><path class="cls-2" d="M520.55,311.3a1.17,1.17,0,0,1-1.17-1.17V279.48a1.17,1.17,0,0,1,2.34,0v30.65A1.17,1.17,0,0,1,520.55,311.3Z"/><path class="cls-2" d="M520.55,273.51a1.17,1.17,0,0,1-1.17-1.17v-5.8a1.17,1.17,0,0,1,2.34,0v5.8A1.17,1.17,0,0,1,520.55,273.51Z"/><path class="cls-57" d="M538.86,152.62c0,19.29-14.61,34.93-32.68,35h-1.33c-17.68-.07-32.1-15.12-32.65-34l-.31-14.83c1.42-5.57,5.44-6.1,10.47-7.16h46c5,1.05,9.05.09,10.48,5.7Z"/><path class="cls-58" d="M482,139.28h47.82v10.57a23.91,23.91,0,0,1-23.91,23.91h0A23.91,23.91,0,0,1,482,149.85V139.28Z"/><path class="cls-59" d="M510.83,173.21a23.91,23.91,0,0,1-28.34-18.45,23.3,23.3,0,0,1-.52-4.92V139.28h9.93v10.56A23.9,23.9,0,0,0,510.83,173.21Z"/><rect class="cls-5" x="490.11" y="139.28" width="39.66" height="14.51"/><rect class="cls-60" x="490.11" y="139.28" width="39.66" height="6.05"/><path class="cls-61" d="M527.58,155.37v2.78c0,8.41-6.81,14-15.22,14-2.65,0-5.15,1.84-7.32.63l-.11-.92a16.81,16.81,0,0,1-.28-2.93,15.48,15.48,0,0,1,22.84-13.59Z"/><path class="cls-62" d="M515.17,172.05a15.06,15.06,0,0,1-2.76.24c-2.66,0-5.15,1.85-7.32.63L505,172a16.06,16.06,0,0,1-.28-2.93,15.65,15.65,0,0,1,.27-2.9C506.9,170.34,510.64,171,515.17,172.05Z"/><path class="cls-2" d="M505,173.25a.8.8,0,0,1-.79-.66,16.28,16.28,0,0,1,23.75-17.36.81.81,0,0,1-.77,1.42,14.67,14.67,0,0,0-21.4,15.64.79.79,0,0,1-.64.94Z"/><path class="cls-63" d="M508.67,161.49a.34.34,0,0,1-.23-.08.4.4,0,0,1-.09-.56A15,15,0,0,1,519,154.91a.4.4,0,1,1,.07.79A14.19,14.19,0,0,0,509,161.33.36.36,0,0,1,508.67,161.49Z"/><ellipse class="cls-63" cx="510.25" cy="160.57" rx="1.52" ry="0.97" transform="translate(86.51 487.04) rotate(-55.08)"/><circle class="cls-63" cx="512.9" cy="159.8" r="0.49"/><circle class="cls-63" cx="511.91" cy="162.43" r="0.49"/><path class="cls-2" d="M528.5,155.06H490.11a1.27,1.27,0,0,1-1.27-1.27V139.9a1.27,1.27,0,0,1,2.53,0v12.62H528.5a1.27,1.27,0,0,1,0,2.54Z"/><path class="cls-2" d="M506.93,174.94h-2.12a24.08,24.08,0,0,1-24.05-24v-9.42a3.41,3.41,0,0,1,3.41-3.41h43.39a3.41,3.41,0,0,1,3.41,3.4v9.41a24.05,24.05,0,0,1-24.05,24.06Zm-22.76-34.45a1,1,0,0,0-.7.29,1,1,0,0,0-.29.7v9.42a21.64,21.64,0,0,0,21.62,21.61h2.12a21.59,21.59,0,0,0,21.62-21.63v-9.4a1,1,0,0,0-1-1Z"/><path class="cls-5" d="M545.93,133.71h-2.72a2,2,0,0,1-2-1.63L533,89.3a2,2,0,0,1,2-2.39h2.72a2,2,0,0,1,2,1.63l8.26,42.78A2,2,0,0,1,545.93,133.71Z"/><path class="cls-64" d="M535,132.44h0a2,2,0,0,1-2-1.63L524.73,88a2,2,0,0,1,2-2.39h0a2,2,0,0,1,2,1.63l8.26,42.78A2,2,0,0,1,535,132.44Z"/><path class="cls-17" d="M535.58,82.54a27.59,27.59,0,1,0,27.58,27.58A27.58,27.58,0,0,0,535.58,82.54Zm0,47.7a20.13,20.13,0,1,1,20.12-20.12A20.12,20.12,0,0,1,535.58,130.24Z"/><path class="cls-21" d="M563.16,110.12c0,.53,0,1.07,0,1.6a27.58,27.58,0,0,0-55.07,0c0-.53-.06-1.07-.06-1.6a27.59,27.59,0,1,1,55.18,0Z"/><path class="cls-2" d="M535.81,138.56a28.84,28.84,0,1,1,28.84-28.84A28.87,28.87,0,0,1,535.81,138.56Zm0-55.18a26.34,26.34,0,1,0,26.33,26.34A26.37,26.37,0,0,0,535.81,83.38Z"/><path class="cls-2" d="M535.81,131.09a21.38,21.38,0,1,1,21.37-21.37A21.4,21.4,0,0,1,535.81,131.09Zm0-40.24a18.87,18.87,0,1,0,18.87,18.87A18.88,18.88,0,0,0,535.81,90.85Z"/><path class="cls-5" d="M485.85,133.71h-2.72a2,2,0,0,1-2-1.63L472.9,89.3a2,2,0,0,1,2-2.39h2.71a2,2,0,0,1,2,1.63l8.25,42.78A2,2,0,0,1,485.85,133.71Z"/><path class="cls-64" d="M474.88,132.44h0a2,2,0,0,1-2-1.63L464.65,88a2,2,0,0,1,2-2.39h0a2,2,0,0,1,2,1.63l8.25,42.78A2,2,0,0,1,474.88,132.44Z"/><path class="cls-17" d="M475.49,82.54a27.59,27.59,0,1,0,27.59,27.58A27.58,27.58,0,0,0,475.49,82.54Zm0,47.7a20.13,20.13,0,1,1,20.12-20.12A20.12,20.12,0,0,1,475.49,130.24Z"/><path class="cls-21" d="M503.08,110.12c0,.53,0,1.07-.06,1.6a27.58,27.58,0,0,0-55.06,0c0-.53-.06-1.07-.06-1.6a27.59,27.59,0,1,1,55.18,0Z"/><path class="cls-2" d="M475.72,138.56a28.84,28.84,0,1,1,28.84-28.84A28.88,28.88,0,0,1,475.72,138.56Zm0-55.18a26.34,26.34,0,1,0,26.34,26.34A26.37,26.37,0,0,0,475.72,83.38Z"/><path class="cls-2" d="M475.72,131.09a21.38,21.38,0,1,1,21.38-21.37A21.4,21.4,0,0,1,475.72,131.09Zm0-40.24a18.87,18.87,0,1,0,18.87,18.87A18.89,18.89,0,0,0,475.72,90.85Z"/><ellipse class="cls-5" cx="481.22" cy="176.24" rx="2.89" ry="1.66" transform="translate(162.51 577.56) rotate(-71.66)"/><circle class="cls-42" cx="486.45" cy="177.86" r="0.93"/><path class="cls-42" d="M483.61,178.8a.72.72,0,1,1,0,1.44.72.72,0,0,1,0-1.44Z"/><circle class="cls-42" cx="484.56" cy="172.87" r="0.95"/><path class="cls-2" d="M543.44,180.22a1.16,1.16,0,0,1-.87-.39L538,174.78a1.17,1.17,0,0,1,1.74-1.56l4.53,5.05a1.17,1.17,0,0,1-.09,1.65A1.19,1.19,0,0,1,543.44,180.22Z"/><path class="cls-2" d="M556,166.12a1.16,1.16,0,0,1-.87-.39l-4.53-5a1.17,1.17,0,0,1,1.74-1.56l4.53,5a1.17,1.17,0,0,1-.09,1.65A1.16,1.16,0,0,1,556,166.12Z"/><path class="cls-2" d="M525.26,189.2a1.17,1.17,0,0,1-1.1-.78L521.9,182a1.17,1.17,0,1,1,2.2-.77l2.26,6.39a1.16,1.16,0,0,1-.71,1.49A1.07,1.07,0,0,1,525.26,189.2Z"/><path class="cls-2" d="M533.49,187.45a1.17,1.17,0,0,1-1.1-.78l-1.46-4.14a1.17,1.17,0,0,1,2.21-.77l1.46,4.13a1.17,1.17,0,0,1-.72,1.49A1.07,1.07,0,0,1,533.49,187.45Z"/><path class="cls-2" d="M534.13,169.55a1.15,1.15,0,0,1-1-.62l-1.66-3.08a1.17,1.17,0,1,1,2-1.11l1.66,3.09a1.16,1.16,0,0,1-.47,1.58A1.25,1.25,0,0,1,534.13,169.55Z"/><path class="cls-2" d="M545.37,166.94a1.16,1.16,0,0,1-1-.48l-2.08-2.89a1.17,1.17,0,0,1,1.89-1.37l2.09,2.9a1.17,1.17,0,0,1-.27,1.62A1.15,1.15,0,0,1,545.37,166.94Z"/><path class="cls-2" d="M467.31,180.22a1.19,1.19,0,0,1-.78-.3,1.17,1.17,0,0,1-.09-1.65l4.53-5.05a1.17,1.17,0,1,1,1.74,1.56l-4.53,5.05A1.16,1.16,0,0,1,467.31,180.22Z"/><path class="cls-2" d="M454.75,166.12a1.16,1.16,0,0,1-.78-.3,1.17,1.17,0,0,1-.09-1.65l4.53-5a1.17,1.17,0,1,1,1.74,1.56l-4.53,5A1.16,1.16,0,0,1,454.75,166.12Z"/><path class="cls-2" d="M485.49,189.2a1.07,1.07,0,0,1-.39-.07,1.16,1.16,0,0,1-.71-1.49l2.26-6.39a1.17,1.17,0,1,1,2.2.77l-2.26,6.4A1.17,1.17,0,0,1,485.49,189.2Z"/><path class="cls-2" d="M477.26,187.45a1,1,0,0,1-.39-.07,1.17,1.17,0,0,1-.72-1.49l1.46-4.13a1.17,1.17,0,0,1,2.21.77l-1.46,4.14A1.17,1.17,0,0,1,477.26,187.45Z"/><path class="cls-2" d="M476.62,169.55a1.25,1.25,0,0,1-.55-.14,1.16,1.16,0,0,1-.47-1.58l1.66-3.09a1.17,1.17,0,1,1,2.05,1.11l-1.66,3.08A1.15,1.15,0,0,1,476.62,169.55Z"/><path class="cls-2" d="M465.38,166.94a1.15,1.15,0,0,1-.68-.22,1.17,1.17,0,0,1-.27-1.62l2.08-2.9a1.17,1.17,0,0,1,1.9,1.37l-2.08,2.89A1.16,1.16,0,0,1,465.38,166.94Z"/><path class="cls-2" d="M473.22,156.66a1.17,1.17,0,0,1-1-1.72l1.66-3.09a1.17,1.17,0,0,1,2.06,1.11l-1.66,3.09A1.16,1.16,0,0,1,473.22,156.66Z"/><path class="cls-2" d="M462,154.06a1.2,1.2,0,0,1-.68-.22,1.16,1.16,0,0,1-.27-1.63l2.08-2.89a1.16,1.16,0,0,1,1.63-.27,1.18,1.18,0,0,1,.27,1.63l-2.08,2.89A1.17,1.17,0,0,1,462,154.06Z"/><path class="cls-2" d="M542.11,155.08a1.16,1.16,0,0,1-1-.61l-1.66-3.09a1.17,1.17,0,1,1,2.05-1.11l1.67,3.09a1.17,1.17,0,0,1-1,1.72Z"/><path class="cls-2" d="M553.35,152.48a1.17,1.17,0,0,1-1-.49l-2.08-2.89a1.17,1.17,0,1,1,1.9-1.36l2.08,2.89a1.17,1.17,0,0,1-.27,1.63A1.13,1.13,0,0,1,553.35,152.48Z"/><circle class="cls-1" cx="638.68" cy="220.25" r="8.47"/><path class="cls-5" d="M647.15,220.25a8.47,8.47,0,0,1-16.94,0c0-4.68,3.79,1.05,8.47,1.05S647.15,215.57,647.15,220.25Z"/><path class="cls-2" d="M638.68,229.93a9.69,9.69,0,1,1,9.69-9.68A9.69,9.69,0,0,1,638.68,229.93Zm0-16.93a7.25,7.25,0,1,0,7.25,7.25A7.26,7.26,0,0,0,638.68,213Z"/><circle class="cls-1" cx="598.1" cy="220.25" r="8.47"/><path class="cls-5" d="M606.57,220.25a8.47,8.47,0,0,1-16.94,0c0-4.68,3.79,1.05,8.47,1.05S606.57,215.57,606.57,220.25Z"/><path class="cls-2" d="M598.1,229.93a9.69,9.69,0,1,1,9.68-9.68A9.7,9.7,0,0,1,598.1,229.93Zm0-16.93a7.25,7.25,0,1,0,7.25,7.25A7.26,7.26,0,0,0,598.1,213Z"/></g></g></svg>
\ No newline at end of file
diff --git a/src/assets/svg/login-bg-dark.svg b/src/assets/svg/login-bg-dark.svg
deleted file mode 100644
index 888da7a..0000000
--- a/src/assets/svg/login-bg-dark.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="6395" height="1080" viewBox="0 0 6395 1080">
-  <defs>
-    <clipPath id="clip-path">
-      <rect id="Rectangle_73" data-name="Rectangle 73" width="6395" height="1079" transform="translate(-5391)" fill="#fff"/>
-    </clipPath>
-    <linearGradient id="linear-gradient" x1="0.631" y1="0.5" x2="0.958" y2="0.488" gradientUnits="objectBoundingBox">
-      <stop offset="0" stop-color="#2e364a"/>
-      <stop offset="1" stop-color="#2c344a"/>
-    </linearGradient>
-  </defs>
-  <g id="Web_1920_1" data-name="Web 1920 鈥� 1" clip-path="url(#clip-Web_1920_1)">
-    <g id="Mask_Group_1" data-name="Mask Group 1" transform="translate(5391)" clip-path="url(#clip-path)">
-      <g id="Group_118" data-name="Group 118" transform="translate(-419.333 -1.126)">
-        <path id="Path_142" data-name="Path 142" d="M6271.734-6.176s-222.478,187.809-55.349,583.254c44.957,106.375,81.514,205.964,84.521,277,8.164,192.764-156.046,268.564-156.046,268.564l-653.53-26.8L5475.065-21.625Z" transform="translate(-4876.383)" fill="#2d3750"/>
-        <path id="Union_6" data-name="Union 6" d="M-2631.1,1081.8v-1.6H-8230.9V.022h5599.8V0h759.7s-187.845,197.448-91.626,488.844c49.167,148.9,96.309,256.289,104.683,362.118,7.979,100.852-57.98,201.711-168.644,254.286-65.858,31.29-144.552,42.382-223.028,42.383C-2441.2,1147.632-2631.1,1081.8-2631.1,1081.8Z" transform="translate(3259.524 0.803)" fill="url(#linear-gradient)"/>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/src/assets/svg/login-bg.svg b/src/assets/svg/login-bg.svg
deleted file mode 100644
index 7b66baf..0000000
--- a/src/assets/svg/login-bg.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="6395" height="1079" viewBox="0 0 6395 1079">
-  <defs>
-    <clipPath id="clip-path">
-      <rect  width="6395" height="1079" transform="translate(-5391)" fill="#fff"/>
-    </clipPath>
-    <linearGradient id="linear-gradient" x1="0.747" y1="0.222" x2="0.973" y2="0.807" gradientUnits="objectBoundingBox">
-      <stop offset="0" stop-color="#2c41b4"/>
-      <stop offset="1" stop-color="#1b4fab"/>
-    </linearGradient>
-  </defs>
-  <g id="Mask_Group_1" data-name="Mask Group 1" transform="translate(5391)" clip-path="url(#clip-path)">
-    <g id="Group_118" data-name="Group 118" transform="translate(-419.333 -1.126)">
-      <path id="Path_142" data-name="Path 142" d="M6271.734-6.176s-222.478,187.809-55.349,583.254c44.957,106.375,81.514,205.964,84.521,277,8.164,192.764-156.046,268.564-156.046,268.564l-653.53-26.8L5475.065-21.625Z" transform="translate(-4876.383 0)" fill="#f1f5f8"/>
-      <path id="Union_6" data-name="Union 6" d="M-2631.1,1081.8v-1.6H-8230.9V.022H-2631.1V0H-1871.4s-187.845,197.448-91.626,488.844c49.167,148.9,96.309,256.289,104.683,362.118,7.979,100.852-57.98,201.711-168.644,254.286-65.858,31.29-144.552,42.382-223.028,42.383C-2441.2,1147.632-2631.1,1081.8-2631.1,1081.8Z" transform="translate(3259.524 0.803)" fill="url(#linear-gradient)"/>
-    </g>
-  </g>
-</svg>
diff --git a/src/assets/svg/login-box-bg.svg b/src/assets/svg/login-box-bg.svg
deleted file mode 100644
index ee7dbdc..0000000
--- a/src/assets/svg/login-box-bg.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="a622e68e-7a65-46e9-94a9-d455de519afc" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="971.44" height="502" viewBox="0 0 971.44 502"><defs><linearGradient id="341b0e5e-a21f-44db-b85f-76180f33f0d3" x1="599.5" y1="668.05" x2="599.5" y2="199" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient><linearGradient id="9c19d1ba-0c1d-4cca-8c15-e6f3831a5e67" x1="485.72" y1="258.88" x2="485.72" y2="71.12" xlink:href="#341b0e5e-a21f-44db-b85f-76180f33f0d3"/><linearGradient id="fe76f7c7-2126-4e48-920d-21143a22d340" x1="132" y1="515" x2="303" y2="515" xlink:href="#341b0e5e-a21f-44db-b85f-76180f33f0d3"/><linearGradient id="2cf89a04-5a05-413b-983a-d2bc296cbb5e" x1="933" y1="568.28" x2="1031" y2="568.28" xlink:href="#341b0e5e-a21f-44db-b85f-76180f33f0d3"/></defs><title>responsive</title><g opacity="0.7"><path d="M852.69,199H346.31A16.37,16.37,0,0,0,330,215.42V563.94a16.37,16.37,0,0,0,16.31,16.42H520.47v60.16h-7.94a8.3,8.3,0,0,0-8.27,8.33v12.07h16.21v7.14H678.53v-7.14h16.21V648.85a8.3,8.3,0,0,0-8.27-8.33H679V640h-.51V580.36H852.69A16.37,16.37,0,0,0,869,563.94V215.42A16.37,16.37,0,0,0,852.69,199Z" transform="translate(-114.28 -199)" fill="url(#341b0e5e-a21f-44db-b85f-76180f33f0d3)"/></g><rect x="407.72" y="371" width="156" height="92" fill="#bdbdbd"/><g opacity="0.1"><path d="M525.07,579H675.24c1.81-7.87,3.26-13,3.26-13h-157S523.11,571.11,525.07,579Z" transform="translate(-114.28 -199)"/></g><path d="M235.82,3h499.8a16.1,16.1,0,0,1,16.1,16.1V327a0,0,0,0,1,0,0h-532a0,0,0,0,1,0,0V19.1A16.1,16.1,0,0,1,235.82,3Z" fill="#535461"/><path d="M849.9,576H350.1A16.1,16.1,0,0,1,334,559.9V526H866v33.9A16.1,16.1,0,0,1,849.9,576Z" transform="translate(-114.28 -199)" fill="#bdbdbd"/><circle cx="485.72" cy="352" r="9" fill="#535461"/><path d="M399.89,436H571.55a8.17,8.17,0,0,1,8.17,8.17V456a0,0,0,0,1,0,0h-188a0,0,0,0,1,0,0V444.17A8.17,8.17,0,0,1,399.89,436Z" fill="#bdbdbd"/><g opacity="0.5"><rect x="320.72" y="71.12" width="330" height="187.76" rx="4.5" ry="4.5" fill="url(#9c19d1ba-0c1d-4cca-8c15-e6f3831a5e67)"/></g><rect x="324.95" y="72.5" width="321.54" height="183.96" rx="4.5" ry="4.5" fill="#fff"/><g opacity="0.5"><rect x="414.52" y="98.91" width="35.44" height="31.9" rx="4.5" ry="4.5" fill="#0960bd"/></g><rect x="460.59" y="98.91" width="95.69" height="3.54" rx="1.77" ry="1.77" fill="#e0e0e0"/><rect x="460.59" y="109.55" width="79.54" height="3.54" rx="1.77" ry="1.77" fill="#e0e0e0"/><g opacity="0.5"><rect x="414.52" y="148.53" width="35.44" height="31.9" rx="4.5" ry="4.5" fill="#0960bd"/></g><rect x="460.59" y="148.53" width="95.69" height="3.54" rx="1.77" ry="1.77" fill="#e0e0e0"/><rect x="460.59" y="159.16" width="95.69" height="3.54" rx="1.77" ry="1.77" fill="#e0e0e0"/><g opacity="0.5"><rect x="414.52" y="198.15" width="35.44" height="31.9" rx="4.5" ry="4.5" fill="#0960bd"/></g><rect x="460.59" y="198.15" width="95.69" height="3.54" rx="1.77" ry="1.77" fill="#e0e0e0"/><rect x="460.59" y="208.78" width="96.33" height="3.54" rx="1.59" ry="1.59" fill="#e0e0e0"/><line x1="485.72" y1="42" x2="485.72" y2="20" stroke="#0960bd" stroke-miterlimit="10" stroke-width="2"/><line x1="485.72" y1="79" x2="485.72" y2="50.13" stroke="#0960bd" stroke-miterlimit="10" stroke-width="2"/><circle cx="485.72" cy="79" r="4" fill="#0960bd"/><circle cx="485.72" cy="46" r="4" fill="none" stroke="#fff" stroke-miterlimit="10"/><line x1="485.72" y1="42" x2="485.72" y2="20" stroke="#0960bd" stroke-miterlimit="10" stroke-width="2"/><line x1="485.72" y1="79" x2="485.72" y2="50.13" stroke="#0960bd" stroke-miterlimit="10" stroke-width="2"/><circle cx="485.72" cy="79" r="4" fill="#0960bd"/><circle cx="485.72" cy="46" r="4" fill="none" stroke="#fff" stroke-miterlimit="10"/><line x1="485.72" y1="279" x2="485.72" y2="310" stroke="#0960bd" stroke-miterlimit="10" stroke-width="2"/><line x1="485.72" y1="251" x2="485.72" y2="279.87" stroke="#0960bd" stroke-miterlimit="10" stroke-width="2"/><circle cx="485.72" cy="251" r="4" fill="#0960bd"/><line x1="305.72" y1="168.5" x2="274.22" y2="168.5" stroke="#0960bd" stroke-miterlimit="10" stroke-width="2"/><line x1="333.22" y1="168.5" x2="304.35" y2="168.5" stroke="#0960bd" stroke-miterlimit="10" stroke-width="2"/><circle cx="333.22" cy="168.5" r="4" fill="#0960bd"/><g opacity="0.1"><rect x="408.22" y="435.5" width="156" height="3"/></g><g opacity="0.7"><path d="M293.48,566.06H221.08l1-8.14c20.46-18.37,33.69-67.31,33.69-67.31a6.78,6.78,0,0,0-.87.18c-12,2.42-20.54,7.35-26.51,13.28l2.54-21.66c37.8-8.14,52.79-58.14,52.79-58.14-24.12,5.35-39.16,13.63-48.5,21.49l3.72-31.82c25.56,8.77,52-37.82,52-37.82l-1-.21.5-.32-.76.27c-28.25-6.09-43.35,10.06-48.25,16.77l.37-3.12q-1.12,3-2.18,5.88h0l0,.08q-3,8.13-5.49,16.06l0,0h0q-2.17,6.77-4.06,13.4l0-.06s-1.17-28.46-31.18-35.95c0,0,3.15,62.07,26.93,51.91h0c-2.2,9-4,17.66-5.56,26.07h0q-1.49,8.21-2.6,16l-.14.16.14-.12-.06.41v0h0q-1,7.07-1.7,13.78c.46-8.62-1.11-33.52-30.45-56.92,0,0-39,68.54,27.5,82,.15.13.3.26.44.38l-.1-.31.6.13.27-3.52a369.39,369.39,0,0,0,.23,44.1h0c.07,1,.14,2,.21,2.95H141.37c-27.94,57.79,15.52,89.46,15.52,89.46h120C323.49,596.66,293.48,566.06,293.48,566.06Zm-78-65.68h0v0Z" transform="translate(-114.28 -199)" fill="url(#fe76f7c7-2126-4e48-920d-21143a22d340)"/></g><path d="M217,588s-19-83,23-190" transform="translate(-114.28 -199)" fill="none" stroke="#535461" stroke-miterlimit="10" stroke-width="3" opacity="0.6"/><path d="M143,563H290s29,37-16,92H158S116,617,143,563Z" transform="translate(-114.28 -199)" fill="#0960bd"/><path d="M237.89,403.5s14.61-26,49.61-18c0,0-28.93,49.26-55,33.13Z" transform="translate(-114.28 -199)" fill="#4db6ac"/><path d="M228.63,431.09S227.5,404.5,198.5,397.5c0,0,3,58,26,48.5Z" transform="translate(-114.28 -199)" fill="#4db6ac"/><path d="M219.15,470.36s5.35-27.86,61.35-39.86c0,0-17.86,57.62-63.93,55.31Z" transform="translate(-114.28 -199)" fill="#4db6ac"/><path d="M214.61,501.63s5.89-29.13-29.11-56.13c0,0-38,64.67,27.48,76.83Z" transform="translate(-114.28 -199)" fill="#4db6ac"/><path d="M213.56,541.67S209.5,500.5,253.5,492.5c0,0-16.07,57.49-40,67.74Z" transform="translate(-114.28 -199)" fill="#4db6ac"/><path d="M233,419s38-29,54-34" transform="translate(-114.28 -199)" fill="none" stroke="#535461" stroke-miterlimit="10" opacity="0.3"/><path d="M216.5,485.5s46-49,64-55" transform="translate(-114.28 -199)" fill="none" stroke="#535461" stroke-miterlimit="10" opacity="0.3"/><path d="M198.5,397.5s28,38,26,48" transform="translate(-114.28 -199)" fill="none" stroke="#535461" stroke-miterlimit="10" opacity="0.3"/><path d="M185.5,445.5s15,68,27,77" transform="translate(-114.28 -199)" fill="none" stroke="#535461" stroke-miterlimit="10" opacity="0.3"/><path d="M213.5,560.5s24-66,40-68" transform="translate(-114.28 -199)" fill="none" stroke="#535461" stroke-miterlimit="10" opacity="0.3"/><g opacity="0.1"><path d="M290,563H143c-.33.67-.65,1.34-1,2H285s28.29,36.11-14.4,90H274C319,600,290,563,290,563Z" transform="translate(-114.28 -199)"/></g><rect y="455.6" width="971.44" height="32.93" fill="#e0e0e0"/><rect x="41.16" y="488.53" width="889.11" height="13.47" fill="#e0e0e0"/><rect x="41.16" y="488.53" width="889.11" height="4.49" opacity="0.1"/><line x1="690.22" y1="168.5" x2="696.22" y2="168.5" stroke="#0960bd" stroke-miterlimit="10" stroke-width="2"/><line x1="637.22" y1="168.5" x2="682.1" y2="168.5" stroke="#0960bd" stroke-miterlimit="10" stroke-width="2"/><circle cx="637.22" cy="168.5" r="4" fill="#0960bd"/><circle cx="686.22" cy="168.5" r="4" fill="none" stroke="#fff" stroke-miterlimit="10"/><g opacity="0.7"><path d="M1027,643.88l.1-.15q.31-.48.61-1l.11-.19q.29-.49.55-1l.09-.17c.2-.39.39-.78.56-1.19h0a23.79,23.79,0,0,0,.94-2.51l.1-.33c.09-.31.18-.62.26-.93l.1-.44q.1-.42.18-.85c0-.16.06-.32.09-.48s.09-.56.13-.85,0-.33.06-.49.06-.61.08-.92c0-.14,0-.29,0-.43,0-.45,0-.91,0-1.36V548h-13.85V507.52h-17V548H988.39V489.86h-17V548H965V481.55h-17V548H933V630.6c0,13.48,11.21,24.4,25,24.4H1006a25.19,25.19,0,0,0,20.24-10.06l0,0Q1026.61,644.41,1027,643.88Z" transform="translate(-114.28 -199)" fill="url(#2cf89a04-5a05-413b-983a-d2bc296cbb5e)"/></g><rect x="835.72" y="321" width="16" height="100" fill="#535461"/><rect x="835.72" y="288" width="16" height="33" fill="#3ad29f"/><rect x="857.72" y="329" width="16" height="100" fill="#535461"/><rect x="857.72" y="296" width="16" height="33" fill="#4d8af0"/><rect x="884.72" y="346" width="16" height="100" fill="#535461"/><rect x="884.72" y="313" width="16" height="33" fill="#f55f44"/><path d="M821.72,352h92a0,0,0,0,1,0,0v79.5a23.5,23.5,0,0,1-23.5,23.5h-45a23.5,23.5,0,0,1-23.5-23.5V352A0,0,0,0,1,821.72,352Z" fill="#0960bd"/><g opacity="0.1"><path d="M936,551v4h88v79.5a23.39,23.39,0,0,1-5,14.49,23.45,23.45,0,0,0,9-18.49V551Z" transform="translate(-114.28 -199)"/></g></svg>
\ No newline at end of file
diff --git a/src/assets/svg/net-error.svg b/src/assets/svg/net-error.svg
deleted file mode 100644
index 81f2004..0000000
--- a/src/assets/svg/net-error.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="ac370e99-250f-4203-ae2c-c306a69114f3" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1144" height="697.99" viewBox="0 0 1144 697.99"><defs><linearGradient id="b5f20e7f-16f1-44c3-85ac-2c33fb8e67f8" x1="2612.03" y1="795.18" x2="2612.03" y2="399.52" gradientTransform="matrix(-1, 0, 0, 1, 3436, 0)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient></defs><title>personal settings</title><path d="M1172,516.31a180.56,180.56,0,0,1-26.12,93.88c0,34.62-16.14,66-42.32,88.87a144.74,144.74,0,0,1-21.08,15.28c-.3.19-.61.37-.92.55-.56.33-1.12.66-1.69,1l-.53.31h0A164.61,164.61,0,0,1,998.24,737H245.17q-9,0-17.84-.72a211.15,211.15,0,0,1-61.06-14.14q-5.72-2.26-11.22-4.86-2.62-1.23-5.19-2.53c-1.07-.54-2.14-1.1-3.2-1.66A187.42,187.42,0,0,1,112.2,689.7c-34-29.23-55.08-69.61-55.08-114.21A180.5,180.5,0,0,1,28,476.82c0-99.14,79.24-179.51,177-179.51,3,0,6,.09,9,.25.43,0,.85,0,1.28.06,16.48-28.09,38.51-53.9,65-76.62,72.24-61.9,177.82-100.92,295.43-100.92,98.82,0,189.15,27.55,258.34,73.07A174.18,174.18,0,0,1,920,170.6c97.74,0,177,80.37,177,179.51a184.9,184.9,0,0,1-1,18.78A180,180,0,0,1,1172,516.31Z" transform="translate(-28 -101)" fill="#0960bd" opacity="0.1"/><g opacity="0.2"><path d="M166.37,720.79c0,.46-.05.91-.1,1.35q-5.72-2.26-11.22-4.86a9.1,9.1,0,0,1-5.19-2.53c-1.07-.54-2.14-1.1-3.2-1.66a13.68,13.68,0,0,1,.81-1.46c2.06-3.26,5.19-5.3,8.64-5.19s6.44,2.34,8.29,5.71A16.87,16.87,0,0,1,166.37,720.79Z" transform="translate(-28 -101)" fill="#3f3d56"/><path d="M166.91,703.67a16.88,16.88,0,0,1-2.51,8.48c-2.06,3.25-5.19,5.29-8.64,5.18l-.71-.05a9.1,9.1,0,0,1-5.19-2.53,12.53,12.53,0,0,1-2.39-3.12,17.55,17.55,0,0,1,.54-17.12c2.06-3.26,5.19-5.3,8.64-5.19s6.44,2.34,8.29,5.71A16.87,16.87,0,0,1,166.91,703.67Z" transform="translate(-28 -101)" fill="#3f3d56"/><ellipse cx="156.75" cy="686.21" rx="14.01" ry="10.7" transform="translate(-562.06 720.24) rotate(-88.19)" fill="#3f3d56"/><ellipse cx="157.29" cy="669.09" rx="14.01" ry="10.7" transform="translate(-544.43 704.2) rotate(-88.19)" fill="#3f3d56"/><ellipse cx="157.83" cy="651.97" rx="14.01" ry="10.7" transform="matrix(0.03, -1, 1, 0.03, -526.79, 688.16)" fill="#3f3d56"/><path d="M121.47,533.55a49.66,49.66,0,0,1-3.8-6l28.26-3.73-30.42-.73a51.38,51.38,0,0,1,.31-40.64l40.12,22.45-36.75-28.85a51.28,51.28,0,1,1,82.84,60,51.12,51.12,0,0,1,5.55,9.53l-37.09,17.81,39.33-11.83A51.34,51.34,0,0,1,200,599.47a51.28,51.28,0,1,1-80.56-2.54,51.28,51.28,0,0,1,2-63.38Z" transform="translate(-28 -101)" fill="#0960bd"/><path d="M212,568.13a51.06,51.06,0,0,1-12,31.34,51.28,51.28,0,1,1-80.56-2.54C112.87,588,212.18,562.37,212,568.13Z" transform="translate(-28 -101)" opacity="0.1"/></g><path d="M986,239.41V718.59A18.41,18.41,0,0,1,967.59,737H232.41a18.13,18.13,0,0,1-5.08-.72A18.38,18.38,0,0,1,214,718.59V504.75c0-1.09,0-2.17,0-3.25V297.56c.43,0,.85,0,1.28.06,16.48-28.09,38.51-53.9,65-76.62H967.59A18.41,18.41,0,0,1,986,239.41Z" transform="translate(-28 -101)" fill="#fff"/><rect x="712.17" y="182.23" width="137.83" height="35.96" rx="17.98" fill="#3f3d56"/><rect x="721.15" y="188.24" width="119.86" height="23.93" rx="11.97" opacity="0.1"/><rect x="794.73" y="189.55" width="43.28" height="21.31" rx="10.65" fill="#0960bd"/><circle cx="816.04" cy="200.21" r="6.66" fill="#fff"/><rect x="712.17" y="419.28" width="137.83" height="35.96" rx="17.98" fill="#3f3d56"/><rect x="721.15" y="425.29" width="119.86" height="23.93" rx="11.97" opacity="0.1"/><rect x="794.73" y="426.6" width="43.28" height="21.31" rx="10.65" fill="#0960bd"/><circle cx="816.04" cy="437.26" r="6.66" fill="#fff"/><rect x="712.17" y="537.8" width="137.83" height="35.96" rx="17.98" fill="#3f3d56"/><rect x="721.15" y="543.82" width="119.86" height="23.93" rx="11.97" opacity="0.1"/><rect x="794.73" y="545.13" width="43.28" height="21.31" rx="10.65" fill="#0960bd"/><circle cx="816.04" cy="555.78" r="6.66" fill="#fff"/><rect x="294" y="159.59" width="80.57" height="21.31" rx="10.65" fill="#0960bd"/><rect x="294" y="189.55" width="223.73" height="21.31" rx="10.65" fill="#0960bd"/><rect x="294" y="219.52" width="223.73" height="21.31" rx="10.65" fill="#0960bd"/><g opacity="0.5"><rect x="294" y="278.11" width="80.57" height="21.31" rx="10.65" fill="#0960bd"/><rect x="294" y="308.08" width="167" height="21.31" rx="10.65" fill="#0960bd"/><rect x="294" y="338.04" width="223.73" height="21.31" rx="10.65" fill="#0960bd"/></g><rect x="294" y="396.64" width="80.57" height="21.31" rx="10.65" fill="#0960bd"/><rect x="294" y="426.6" width="223.73" height="21.31" rx="10.65" fill="#0960bd"/><rect x="294" y="456.57" width="139" height="21.31" rx="10.65" fill="#0960bd"/><rect x="294" y="515.16" width="80.57" height="21.31" rx="10.65" fill="#0960bd"/><rect x="294" y="545.13" width="223.73" height="21.31" rx="10.65" fill="#0960bd"/><rect x="294" y="575.09" width="180" height="21.31" rx="10.65" fill="#0960bd"/><line x1="260" y1="259.99" x2="912" y2="259.99" fill="none" stroke="#3f3d56" stroke-linecap="round" stroke-miterlimit="10" opacity="0.7"/><line x1="260" y1="380.49" x2="912" y2="380.49" fill="none" stroke="#3f3d56" stroke-linecap="round" stroke-miterlimit="10" opacity="0.7"/><line x1="260" y1="500.99" x2="912" y2="500.99" fill="none" stroke="#3f3d56" stroke-linecap="round" stroke-miterlimit="10" opacity="0.7"/><line x1="260" y1="624.49" x2="912" y2="624.49" fill="none" stroke="#3f3d56" stroke-linecap="round" stroke-miterlimit="10" opacity="0.7"/><ellipse cx="795" cy="687.49" rx="147.68" ry="10.5" fill="#0960bd" opacity="0.1"/><circle cx="70.52" cy="141.18" r="21.63" fill="#0960bd" opacity="0.1"/><circle cx="160.67" cy="21.63" r="21.63" fill="#0960bd" opacity="0.1"/><circle cx="153.34" cy="103.76" r="36.25" fill="#0960bd" opacity="0.1"/><rect x="712.17" y="300.75" width="137.83" height="35.96" rx="17.98" fill="#3f3d56"/><rect x="721.15" y="306.77" width="119.86" height="23.93" rx="11.97" opacity="0.1"/><path d="M753.17,762c1.57-.23,3.14-.55,4.68-.91a14.62,14.62,0,0,1-1.32,4.44c-1.53,2.9-4.52,4.65-7.27,6.43a2.25,2.25,0,0,0-2.84-.19c-3.31,2-5.95,4.82-9.46,6.54-1.23.6-2.51,1.08-3.71,1.75a20,20,0,0,0-7,7.23c-1,1.55-1.81,3.59-.83,5.13a4.44,4.44,0,0,0,1.42,1.27,8.08,8.08,0,0,0,4.87,1.45c1-.09,2-.47,3.09-.64,1.37-.24,2.77-.12,4.15-.24a24.26,24.26,0,0,0,5.84-1.51l6.87-2.4a39.68,39.68,0,0,0,5.65-2.32c1.09-.59,2.12-1.28,3.23-1.82a26,26,0,0,1,3.86-1.36l3.9-1.14a3.8,3.8,0,0,1,1.76-.23c.54.1,1,.44,1.55.58a4.68,4.68,0,0,0,2.5-.24l4.52-1.28a8.52,8.52,0,0,0,2.69-1.12c2.07-1.47,2.44-4.39,2.43-6.94A52.57,52.57,0,0,0,782.45,763a3.57,3.57,0,0,0-1.47,1.11,21.44,21.44,0,0,0-1.49-1.87,22.31,22.31,0,0,1-4.51-8.33,14.66,14.66,0,0,0,4-4.52c-2.39-9.11-4.84-18.36-9.7-26.4-1.59-2.62-3.41-5.08-5-7.66-4.73-7.5-5.7-17-11.11-24a4.16,4.16,0,0,1,0-4.88c.62-.82,1.62-1.59,1.43-2.61-.14-.73-.9-1.4-.61-2.08.14-.33.48-.51.74-.75.92-.86.8-2.31.89-3.57.2-3.18,2.09-6,3.91-8.56a5.26,5.26,0,0,1,1.44-1.56c.49-.3,1.07-.44,1.56-.74,1.72-1.09,1.6-3.62,2.42-5.5,1.08-2.48,3.8-3.73,5.58-5.74,2.27-2.56,2.85-6.12,5.24-8.35a6.13,6.13,0,0,1,.79-.64A40.24,40.24,0,0,0,775.15,658c-.23,13.53,3.13,27.53,1.56,41-1.24,10.66,5.27,21.29,14.5,26.62a69.31,69.31,0,0,0,11.29,4.79c5.78,2.07,11.54,4.2,17.21,6.58q6,2.52,11.84,5.41a147.35,147.35,0,0,1,14,7.81c5.56,3.57,11.13,7.19,15.08,12.52a11.94,11.94,0,0,0,6.66-2.45c1.52,1.2,3.36,2.11,4.79,3.44a14.46,14.46,0,0,1,3.8,7.46l-.6,0c.07,1.33.13,2.66.2,4a1.7,1.7,0,0,1-.15,1,1.81,1.81,0,0,1-.54.49l-3.08,2.09c-2.24,1.51-4.71,3.42-4.83,6.13a3.12,3.12,0,0,0,.67,2.19,4.72,4.72,0,0,0,2.74,1.24c5.36,1.13,10.85,2.23,16.28,1.5,2.58-.35,5.25-1.2,6.93-3.2,1.54-1.82,2-4.29,2.42-6.64.67-4,1.23-8.09,1.67-12.15a26.86,26.86,0,0,1,1.66-8.07,1,1,0,0,1,.43-.54c.23-.1.5,0,.74-.1s.4-.47.48-.77a47.71,47.71,0,0,0,1.43-12.08,8.14,8.14,0,0,0-.47-3.11,6.28,6.28,0,0,0-4.28-3.3,34.09,34.09,0,0,0-5.53-.66,27.46,27.46,0,0,1-4.59-.84,4.2,4.2,0,0,0-1.91-.25,1.34,1.34,0,0,0-1.16,1.33,1.71,1.71,0,0,0,.24.65l-1.56-.31c-1.26-.23-3-.78-4.89-1.24q0-.48.06-1a1.89,1.89,0,0,0-1.06-1.72l-26.42-14.12-4.94-2.64c-10.82-5.79-22-11.14-32.85-16.93-.72.22-1.32-.61-1.53-1.35s-.36-1.62-1.05-1.95c-.34-.16-.79-.15-1-.44a1.19,1.19,0,0,1-.19-.89c.35-5.27,4.12-10.13,3.37-15.35-.32-2.23-1.47-4.43-1-6.62.35-1.51,1.43-2.74,2-4.18,1.3-3.22,0-7.09,1.42-10.24a23.71,23.71,0,0,0,1.91-6.52,44.79,44.79,0,0,1,4-12.94,23.35,23.35,0,0,1,3.72-5.67c.79-.86,1.68-1.63,2.44-2.52,2.3-2.75,3.15-6.41,3.8-10,1.18-6.41,2-13.06.52-19.42-.5-2.16-1.26-4.31-1.23-6.53,0-2.66,1.07-5.71-.22-7.84a6.9,6.9,0,0,0,2.49-4.27,5.52,5.52,0,0,1,.35-1.77,5.14,5.14,0,0,1,1.67-1.5,6.91,6.91,0,0,0,2.58-6.87c1.37.62,2.81-.77,3.46-2.14s1.14-3,2.53-3.62c.94-.4,2-.16,3-.42,1.59-.41,2.56-2,3.68-3.17,2.28-2.46,5.51-3.73,8.5-5.24,8.86-4.51,16.08-11.64,23.15-18.66a78.38,78.38,0,0,0,10-11.26c.79-1.17,1.51-2.38,2.19-3.62l.18-.09.06.22c.11.44.24.88.37,1.31.32,1,.68,2.07,1,3.09,1.08,3,2.25,6.2,4.45,8.47a10.48,10.48,0,0,0,2.28,1.77,15.3,15.3,0,0,0,5.87,1.76c.78.1,1.57.16,2.36.2s1.58.07,2.36.09l16.18.43c-5.56-8.06-6-18.54-5.63-28.35.93-25.2,5.84-50.63,1.28-75.43-.55-3-1.28-6-3.11-8.41-2.4-3.15-6.34-4.67-10.18-5.56s-7.83-1.32-11.42-2.93c-3-1.37-5.76-3.57-9-4.29a19.82,19.82,0,0,0-7.2.12q-4.38.65-8.71,1.54l-.7.15H874l-.48.11-.13,0-.43.1-.16,0-.4.11-.18.05-.37.12-.21.07-.34.11-.22.09-.32.12-.24.1-.29.13-.24.12-.27.13-.24.14-.25.14-.24.16-.23.15-.24.17-.2.16-.23.2-.19.17a2.39,2.39,0,0,0-.22.23l-.17.17a3,3,0,0,0-.22.28c0,.05-.09.1-.13.16s-.18.26-.27.41l0,.06a6.09,6.09,0,0,0-.55,1.19c-.07.21-.14.42-.19.63a9.54,9.54,0,0,0-.22,1.3c0,.22,0,.45-.05.67,0,.44,0,.89,0,1.33a19.62,19.62,0,0,0,.25,2.24,24.37,24.37,0,0,0-1.16,41.23,10.94,10.94,0,0,1,.08,1.19v.26a33,33,0,0,1-.44,4.22,58.66,58.66,0,0,0-12-1.07c-2.4,0-4.82.22-7.24.41a109.13,109.13,0,0,1-7.24-9.8l-5.34-7.83a74.58,74.58,0,0,1-5-8c-1.31-2.54-2.33-5.24-3.79-7.7-3-5.07-7.9-9.38-8.51-15.25l-1.41.29c-.77-1.26-1.74-2.59-2.1-3.32a65.55,65.55,0,0,1-4.44-13c-.49-2.32-.86-4.74-2.13-6.74a15.19,15.19,0,0,0-3.11-3.3,20.57,20.57,0,0,0-6.66-4.2,8.61,8.61,0,0,0-6.81.4,10,10,0,0,0-1-.4,8.25,8.25,0,0,0-7.56.88c-2.1,1.61-3,4.37-3.32,7a17.28,17.28,0,0,0,1.78,10.62c2,3.58,5.58,6,8.54,8.84a34.59,34.59,0,0,1,5.37,6.68,73.16,73.16,0,0,1-.41,16.21c-.38,2.3-1,4.56-1.18,6.88-.73,8.38,3.63,16.76,2.07,25a6.1,6.1,0,0,0,2.83,6.47c2.24,1.21,4.86,1.37,7.32,2,4.83,1.24,9,4.33,13.88,5.48,2.25.54,4.59.64,6.83,1.24l.35.11a16.27,16.27,0,0,0-3.59,6.82c-1,4.2-.06,8.69-1.06,12.89-.82,3.46-2.88,6.48-4.91,9.41q-5.86,8.48-11.74,17a104.13,104.13,0,0,1-8.65,11.37c-5.39,5.89-14.69,10.56-17.43,17.64-.06-.17-.14-.34-.2-.51-3.88,2.85-5.33,8.16-8.42,11.85-1.51,1.79-3.37,3.24-5,4.9a56.54,56.54,0,0,0-5.53,6.87c-4.6,6.38-9.23,12.79-12.52,19.94-1.72,3.72-3.05,7.59-4.42,11.44-5.38,15.17-14.16,29.56-17.81,45.25-.89,3.83-3.22,7.29-3.57,11.21-.39,4.18,1.52,8.2,3.5,11.89,3,5.64,6.34,11.12,9,16.92,1.57,3.38,2.93,6.87,4.68,10.17,1.91,3.6,4.25,6.94,6.25,10.49C747.78,742,750.58,752.07,753.17,762Zm66.16-286.55-.48-.24A16.57,16.57,0,0,1,814,472c-4.31-4.6-6.16-11.53-7.51-17.72-.16-.74-.3-1.47-.43-2.21C811.29,459.5,816.23,467.18,819.33,475.47Z" transform="translate(-28 -101)" fill="url(#b5f20e7f-16f1-44c3-85ac-2c33fb8e67f8)"/><path d="M799.68,415.4c-.49-2.31-.85-4.71-2.12-6.69a15.16,15.16,0,0,0-3.12-3.28,20.74,20.74,0,0,0-6.68-4.17,8.34,8.34,0,0,0-7.56.87c-2.11,1.6-3,4.34-3.33,7a17.07,17.07,0,0,0,1.78,10.55c2.05,3.56,5.59,5.94,8.56,8.78a34.39,34.39,0,0,1,5.58,7,20.21,20.21,0,0,0,2.54,3.72,4.84,4.84,0,0,0,4,1.61,7,7,0,0,0,3.27-1.93c1.22-1.07,4.5-3,4.6-4.67.08-1.37-2.48-4.47-3.11-5.76A65.41,65.41,0,0,1,799.68,415.4Z" transform="translate(-28 -101)" fill="#fbbebe"/><path d="M799.68,415.4c-.49-2.31-.85-4.71-2.12-6.69a15.16,15.16,0,0,0-3.12-3.28,20.74,20.74,0,0,0-6.68-4.17,8.34,8.34,0,0,0-7.56.87c-2.11,1.6-3,4.34-3.33,7a17.07,17.07,0,0,0,1.78,10.55c2.05,3.56,5.59,5.94,8.56,8.78a34.39,34.39,0,0,1,5.58,7,20.21,20.21,0,0,0,2.54,3.72,4.84,4.84,0,0,0,4,1.61,7,7,0,0,0,3.27-1.93c1.22-1.07,4.5-3,4.6-4.67.08-1.37-2.48-4.47-3.11-5.76A65.41,65.41,0,0,1,799.68,415.4Z" transform="translate(-28 -101)" opacity="0.1"/><path d="M868.85,481.23a58.88,58.88,0,0,0-16.18-2c-9.11.13-18.49,2.34-27.17-.46A47.4,47.4,0,0,1,819,476a16.58,16.58,0,0,1-4.86-3.19c-4.32-4.57-6.18-11.46-7.52-17.6a117.44,117.44,0,0,1-2.05-18.73c-2.25,1.05-4.63,2.08-7.1,1.87s-5-2.11-5-4.59c.37,5.82.64,11.71-.33,17.45-.38,2.28-1,4.53-1.17,6.83-.74,8.33,3.63,16.65,2.07,24.86a6,6,0,0,0,2.83,6.42c2.24,1.21,4.87,1.36,7.33,2,4.83,1.23,9,4.3,13.9,5.45,2.25.53,4.6.63,6.84,1.23,3.19.85,6.1,2.68,9.36,3.25,2.44.44,5,.14,7.43.35,2.15.18,4.25.74,6.41.8,5.28.13,10.26-2.85,13.76-6.81S866.63,486,868.85,481.23Z" transform="translate(-28 -101)" fill="#f86d70"/><path d="M868.85,481.23a58.88,58.88,0,0,0-16.18-2c-9.11.13-18.49,2.34-27.17-.46A47.4,47.4,0,0,1,819,476a16.58,16.58,0,0,1-4.86-3.19c-4.32-4.57-6.18-11.46-7.52-17.6a117.44,117.44,0,0,1-2.05-18.73c-2.25,1.05-4.63,2.08-7.1,1.87s-5-2.11-5-4.59c.37,5.82.64,11.71-.33,17.45-.38,2.28-1,4.53-1.17,6.83-.74,8.33,3.63,16.65,2.07,24.86a6,6,0,0,0,2.83,6.42c2.24,1.21,4.87,1.36,7.33,2,4.83,1.23,9,4.3,13.9,5.45,2.25.53,4.6.63,6.84,1.23,3.19.85,6.1,2.68,9.36,3.25,2.44.44,5,.14,7.43.35,2.15.18,4.25.74,6.41.8,5.28.13,10.26-2.85,13.76-6.81S866.63,486,868.85,481.23Z" transform="translate(-28 -101)" opacity="0.1"/><path d="M883.31,738.67a13.69,13.69,0,0,1,4.67,1.46,11,11,0,0,1,4.06,5.48c2.18,5.38,2.63,11.3,2.73,17.11.08,4.69-.08,9.49-1.76,13.87a8.83,8.83,0,0,1-2.31,3.63,8.33,8.33,0,0,1-3.18,1.54c-2.51.69-5.41.68-7.46-.92-2.28-1.78-2.85-4.93-3.33-7.78-.65-3.84-1.57-7.93-4.43-10.58-2.12-2-5.16-3-6.7-5.42-1.84-2.91-.87-6.71.3-9.95,1-2.81,2.51-8.5,5.45-9.94S880.26,738.12,883.31,738.67Z" transform="translate(-28 -101)" fill="#fbbebe"/><path d="M775,752.47a22.15,22.15,0,0,0,4.58,8.51c1.3,1.5,2.93,3.32,2.25,5.18a4.82,4.82,0,0,1-1.23,1.65c-9.66,9.44-23.17,14-36.57,15.72a1.29,1.29,0,0,1-.65,0c-.39-.17-.49-.67-.53-1.1a13.51,13.51,0,0,1,0-4.21c.65-3.27,3.52-5.58,6.33-7.39s5.88-3.55,7.44-6.5c1.95-3.66,1.13-8.43,3.45-11.86,1.88-2.79,5.38-4,8.71-4.5,1.15-.18,3.6-1.44,4.58-.86S774.66,751.32,775,752.47Z" transform="translate(-28 -101)" fill="#fbbebe"/><path d="M884.63,738.33a1.33,1.33,0,0,1,1.16-1.32,4.35,4.35,0,0,1,1.91.24,26.5,26.5,0,0,0,4.59.85,34.07,34.07,0,0,1,5.54.65,6.27,6.27,0,0,1,4.29,3.27,8.12,8.12,0,0,1,.47,3.1,47.06,47.06,0,0,1-1.43,12c-.08.3-.2.65-.49.76s-.5,0-.73.11a.9.9,0,0,0-.43.54,26.42,26.42,0,0,0-1.67,8c-.44,4-1,8.06-1.67,12.06-.39,2.34-.88,4.8-2.42,6.6-1.69,2-4.36,2.83-6.94,3.18-5.44.72-10.93-.37-16.3-1.49a4.77,4.77,0,0,1-2.75-1.23,3.09,3.09,0,0,1-.67-2.18c.12-2.69,2.6-4.59,4.83-6.09l3.09-2.07a1.6,1.6,0,0,0,.54-.49,1.67,1.67,0,0,0,.15-1l-.2-4a11.33,11.33,0,0,1,9.87,6.14c.42.85.83,1.84,1.71,2.17a2.26,2.26,0,0,0,2.69-1.63,6.93,6.93,0,0,0-.09-3.47c-1.81-9.67-1.38-19.61-2.48-29.38a6.63,6.63,0,0,0-1-3.1C885.73,739.88,884.74,739.23,884.63,738.33Z" transform="translate(-28 -101)" fill="#f86d70"/><rect x="752.15" y="409.08" width="43.28" height="21.31" rx="10.65" transform="translate(1519.58 738.47) rotate(180)" fill="#0960bd"/><circle cx="746.12" cy="318.73" r="6.66" fill="#fff"/><path d="M750.11,775.82c-.45.75-1.16,1.33-1.58,2.1a1.8,1.8,0,0,0,.34,2.35,2.32,2.32,0,0,0,1.43.14,48.11,48.11,0,0,0,26-11.78,18.21,18.21,0,0,0,3.19-3.49c.85-1.29,1.57-2.87,3-3.41a51.92,51.92,0,0,1,1.34,11.45c0,2.54-.36,5.43-2.43,6.9a8.63,8.63,0,0,1-2.7,1.1l-4.52,1.28a4.81,4.81,0,0,1-2.51.24c-.53-.14-1-.48-1.55-.58a3.8,3.8,0,0,0-1.76.23l-3.91,1.14a24.86,24.86,0,0,0-3.86,1.35c-1.12.53-2.15,1.21-3.24,1.8a38.78,38.78,0,0,1-5.66,2.3l-6.87,2.39a24.91,24.91,0,0,1-5.85,1.5c-1.38.12-2.79,0-4.16.23-1,.18-2,.56-3.1.64a8.11,8.11,0,0,1-4.87-1.44,4.53,4.53,0,0,1-1.42-1.26c-1-1.53-.13-3.55.83-5.1a20.16,20.16,0,0,1,7-7.18c1.2-.66,2.49-1.14,3.72-1.74,3.51-1.7,6.16-4.54,9.47-6.48C749.57,768.67,751.58,773.4,750.11,775.82Z" transform="translate(-28 -101)" fill="#f86d70"/><path d="M846.69,498.94a28.57,28.57,0,0,0,12.16,4.73,49.5,49.5,0,0,0,6.88.37,174.85,174.85,0,0,0,28.63-2.39c-3.76-4.15-7.57-8.59-9-14a23.11,23.11,0,0,1-.44-8.77,66,66,0,0,1,2.68-11,77.63,77.63,0,0,1-12.1-.31c-2.29-.24-7.91-2.32-9.9-.74s-.46,6.67-.43,9.06a2.26,2.26,0,0,1,0,.26,28.93,28.93,0,0,1-2.31,10.58C860,493.19,853.8,498.51,846.69,498.94Z" transform="translate(-28 -101)" fill="#fbbebe"/><path d="M865.18,475.84a24.06,24.06,0,0,0,19.75,3,66,66,0,0,1,2.68-11,77.63,77.63,0,0,1-12.1-.31c-2.29-.24-7.91-2.32-9.9-.74S865.15,473.45,865.18,475.84Z" transform="translate(-28 -101)" opacity="0.1"/><circle cx="850.38" cy="353.54" r="24.11" fill="#fbbebe"/><path d="M776.09,576.53a11.23,11.23,0,0,0,5.44,9.67,21.69,21.69,0,0,0,5.9,2.08c11,2.66,22.32,4.8,33.65,4.15a18.49,18.49,0,0,0,7.14-1.5,7.66,7.66,0,0,0,4.41-5.51,5.18,5.18,0,0,1,.34-1.75,5.11,5.11,0,0,1,1.67-1.49,6.84,6.84,0,0,0,2.59-6.82c1.37.62,2.81-.77,3.46-2.13s1.15-3,2.53-3.59c.94-.4,2-.16,3-.42,1.59-.41,2.56-2,3.68-3.15,2.28-2.44,5.53-3.7,8.51-5.21,8.88-4.47,16.11-11.56,23.2-18.53a77.76,77.76,0,0,0,10-11.18,41.2,41.2,0,0,0,2.2-3.6,101.82,101.82,0,0,0,5.55-12.71c.9-2.34,1.81-4.8,1.44-7.28,0-.22-.08-.44-.13-.67a14,14,0,0,0-2.19-4.42c-2.45-3.6-5.66-7-9.88-8.12s-8.42.23-12.71,1.14a31.85,31.85,0,0,1-4.31.66c-4.54.32-9-.9-13.42-2.11l-4.78-1.32c-2.39-.66-3.59-3.55-6-4.06a8.12,8.12,0,0,0-3.25.17c-4.91.93-9.87,2.14-14.2,4.64a21.32,21.32,0,0,0-2.76,1.88,17.47,17.47,0,0,0-6.42,9.47c-1,4.17-.06,8.63-1.06,12.8-.82,3.44-2.89,6.44-4.91,9.34L803,543.83a104.13,104.13,0,0,1-8.66,11.28C788,562,776.26,567.18,776.09,576.53Z" transform="translate(-28 -101)" fill="#f86d70"/><path d="M807.53,415.4c-.49-2.31-.85-4.71-2.12-6.69a15.16,15.16,0,0,0-3.12-3.28,20.74,20.74,0,0,0-6.68-4.17,8.34,8.34,0,0,0-7.56.87c-2.11,1.6-3,4.34-3.33,7a17.07,17.07,0,0,0,1.78,10.55c2,3.56,5.59,5.94,8.56,8.78a34.39,34.39,0,0,1,5.58,7,20.21,20.21,0,0,0,2.54,3.72,4.84,4.84,0,0,0,4,1.61,7,7,0,0,0,3.27-1.93c1.22-1.07,4.5-3,4.6-4.67.08-1.37-2.48-4.47-3.11-5.76A65.41,65.41,0,0,1,807.53,415.4Z" transform="translate(-28 -101)" fill="#fbbebe"/><path d="M722.81,694.64c3,5.6,6.34,11,9.05,16.8,1.57,3.37,2.93,6.83,4.68,10.11,1.91,3.57,4.26,6.89,6.26,10.41,5,8.9,7.83,18.94,10.42,28.83a57.39,57.39,0,0,0,20.52-7.22,12.9,12.9,0,0,0,1.23-.79,14.52,14.52,0,0,0,4.14-4.57c-2.39-9-4.84-18.23-9.71-26.22-1.59-2.6-3.41-5-5-7.61-4.73-7.45-5.71-16.84-11.12-23.81a4.08,4.08,0,0,1,0-4.84c.62-.81,1.62-1.58,1.43-2.59-.14-.73-.9-1.39-.61-2.07.14-.33.48-.51.74-.75.92-.84.8-2.29.89-3.53.2-3.16,2.09-5.93,3.92-8.51a5.34,5.34,0,0,1,1.44-1.55c.49-.3,1.07-.44,1.56-.74,1.72-1.07,1.6-3.59,2.43-5.46,1.08-2.46,3.8-3.71,5.59-5.7,2.27-2.54,2.84-6.07,5.24-8.29a7.11,7.11,0,0,1,.79-.64,39.7,39.7,0,0,0-1.41,11.61c-.23,13.44,3.13,27.34,1.56,40.69-1.24,10.58,5.28,21.14,14.52,26.44a70.28,70.28,0,0,0,11.31,4.76c5.78,2.05,11.56,4.16,17.23,6.53,4,1.66,8,3.46,11.86,5.37a146,146,0,0,1,14,7.76c5.57,3.54,11.15,7.14,15.1,12.43,3.83-.1,7.34-2.4,9.76-5.37s3.93-6.56,5.34-10.11c1.23-3.07,2.45-6.22,2.54-9.53a1.9,1.9,0,0,0-1.06-1.71l-26.46-14-5-2.62c-10.83-5.75-22-11.07-32.89-16.81-.73.21-1.33-.62-1.54-1.34s-.36-1.62-1.05-1.94c-.35-.16-.79-.16-1-.44a1.2,1.2,0,0,1-.18-.88c.35-5.24,4.13-10.06,3.37-15.25-.32-2.22-1.47-4.4-1-6.57.35-1.51,1.43-2.73,2-4.16,1.29-3.2,0-7,1.42-10.17a23.34,23.34,0,0,0,1.91-6.48,43.88,43.88,0,0,1,4.05-12.84,23.18,23.18,0,0,1,3.72-5.64c.8-.85,1.69-1.62,2.44-2.5,2.31-2.73,3.15-6.37,3.81-9.88,1.18-6.37,2-13,.52-19.29-.5-2.15-1.26-4.28-1.23-6.49,0-2.91,1.31-6.32-.71-8.43a6.6,6.6,0,0,0-3-1.52,90.43,90.43,0,0,0-14.35-2.65L790.22,582a20.28,20.28,0,0,1-7.35-1.91c-3-1.65-5-4.72-6.2-7.92-3.88,2.83-5.34,8.1-8.43,11.76-1.51,1.79-3.37,3.23-5,4.87a55.11,55.11,0,0,0-5.54,6.83c-4.61,6.33-9.25,12.71-12.55,19.8-1.71,3.69-3,7.54-4.42,11.36-5.39,15.07-14.18,29.37-17.83,44.94-.9,3.81-3.23,7.24-3.58,11.14C718.91,687,720.82,691,722.81,694.64Z" transform="translate(-28 -101)" fill="#434175"/><path d="M838.53,569.54a6.85,6.85,0,0,1,.81,3.26c-.49-2.44-3.85-3.79-4.06-6.2-.1-1.11.1-1.06.79-.47C837.12,567,837.57,568.58,838.53,569.54Z" transform="translate(-28 -101)" opacity="0.1"/><path d="M828.32,576.94a5.15,5.15,0,0,1,1.53,2.26,5.75,5.75,0,0,1,.3,3.93c-.49-.23-.66-.83-.81-1.36a9.38,9.38,0,0,0-1-2.33c-.4-.63-2.23-2.13-2.21-2.82C826.1,575.58,827.83,576.57,828.32,576.94Z" transform="translate(-28 -101)" opacity="0.1"/><path d="M827.14,495.35a25.23,25.23,0,0,0,5.08,3.38c4.78,2.42,10.07,3.69,14.88,6a72.17,72.17,0,0,1,6.9,4c4.77,3,9.53,6,14.29,9.05a15.75,15.75,0,0,1,3.15,2.39c1.72,1.84,1.71,5,3.28,7a9.4,9.4,0,0,0,6.93,3.2,22.5,22.5,0,0,0,7.73-1.3,38.24,38.24,0,0,0,4.42-1.61,20.47,20.47,0,0,0,4.24-2.42,12.19,12.19,0,0,0,5-7.89,15.58,15.58,0,0,0-.85-6.44,25.11,25.11,0,0,0-1.52-3.91,15.17,15.17,0,0,0-1.22-2.05c-3.28-4.65-9.06-6.84-14.65-7.93-2.95-.57-5.95-.92-8.91-1.42a31.85,31.85,0,0,1-4.31.66c-4.54.32-9-.9-13.42-2.11l-4.78-1.32c-2.39-.66-3.59-3.55-6-4.06a8.12,8.12,0,0,0-3.25.17c-4.91.93-9.87,2.14-14.2,4.64A21.32,21.32,0,0,0,827.14,495.35Z" transform="translate(-28 -101)" opacity="0.1"/><path d="M815.49,431.36c.61,5.83,5.53,10.11,8.53,15.14,1.46,2.45,2.48,5.13,3.79,7.66a75,75,0,0,0,5,8l5.35,7.77c3.15,4.57,6.33,9.18,10.35,13,7,1.19,12.9,6.4,19.55,8.93,5.33,2,11.13,2.3,16.72,3.39s11.37,3.27,14.65,7.93a20.83,20.83,0,0,1,2.74,6,15.54,15.54,0,0,1,.85,6.43,12.19,12.19,0,0,1-5,7.9,27.71,27.71,0,0,1-8.65,4,22.74,22.74,0,0,1-7.73,1.3,9.44,9.44,0,0,1-6.94-3.2c-1.56-2-1.55-5.19-3.27-7a15.75,15.75,0,0,0-3.15-2.39l-14.29-9a72.17,72.17,0,0,0-6.9-4c-4.81-2.35-10.1-3.62-14.88-6s-9.23-6.41-10.17-11.68c-2.91-16.19-14.12-29.84-23.7-43.21.31-.06.22-.78.33-1.08a14,14,0,0,1,7-7.08C808.75,432.5,812.17,432.07,815.49,431.36Z" transform="translate(-28 -101)" fill="#f86d70"/><path d="M866,431.48a8.87,8.87,0,0,1,1-5.08c1.59-2.64,4.91-3.57,7.93-4.19s5.8-1.1,8.72-1.52a20.1,20.1,0,0,1,7.21-.13c3.26.72,6,2.91,9,4.26,3.6,1.61,7.6,2,11.44,2.92s7.79,2.39,10.2,5.52c1.83,2.37,2.56,5.4,3.11,8.35,4.57,24.63-.35,49.89-1.28,74.92-.37,9.74.07,20.15,5.64,28.16l-16.21-.43c-4.15-.11-8.61-.33-11.87-2.89-2.88-2.25-4.24-5.88-5.46-9.31a29,29,0,0,1-2.08-8.35c-.25-5.88,3.09-11.65,2-17.44-.81-4.32-4-7.82-7.32-10.65s-7.1-5.3-9.83-8.75c-4.85-6.15-5.78-14.54-5.18-22.35.36-4.64,1.2-9.29.79-13.93a17.53,17.53,0,0,0-3.67-9.76C867.59,437.75,866.24,435.83,866,431.48Z" transform="translate(-28 -101)" fill="#434175"/><path d="M867,426.4c1.56-2.6,4.8-3.54,7.77-4.15a7.67,7.67,0,0,0-3.85,3,9,9,0,0,0-1,5.09c.22,4.35,1.57,6.27,4.15,9.35a17.44,17.44,0,0,1,3.68,9.76c.4,4.64-.43,9.28-.79,13.93-.61,7.8.32,16.2,5.18,22.35,2.72,3.45,6.47,5.91,9.83,8.75s6.51,6.33,7.32,10.65c1.08,5.78-2.26,11.56-2,17.44a28.51,28.51,0,0,0,2.07,8.34c1.23,3.44,2.59,7.07,5.46,9.32,3.26,2.56,7.73,2.78,11.88,2.89l11.48.3c.25.42.52.84.8,1.25l-16.21-.43c-4.15-.11-8.61-.33-11.87-2.89-2.88-2.25-4.24-5.88-5.46-9.31a29,29,0,0,1-2.08-8.35c-.25-5.88,3.09-11.65,2-17.44-.81-4.32-4-7.82-7.32-10.65s-7.1-5.3-9.83-8.75c-4.85-6.15-5.78-14.54-5.18-22.35.36-4.64,1.2-9.29.79-13.93a17.53,17.53,0,0,0-3.67-9.76c-2.58-3.08-3.93-5-4.16-9.35A8.87,8.87,0,0,1,867,426.4Z" transform="translate(-28 -101)" opacity="0.1"/><path d="M745.22,680.23,775,752.78a14.52,14.52,0,0,0,4.14-4.57c-2.39-9-4.84-18.23-9.71-26.22-1.59-2.6-3.41-5-5-7.61-4.73-7.45-5.71-16.84-11.12-23.81a4.08,4.08,0,0,1,0-4.84c.62-.81,1.62-1.58,1.43-2.59-.14-.73-.9-1.39-.61-2.07.14-.33.48-.51.74-.75.92-.84.8-2.29.89-3.53.2-3.16,2.09-5.93,3.92-8.51a5.34,5.34,0,0,1,1.44-1.55c.49-.3,1.07-.44,1.56-.74,1.72-1.07,1.6-3.59,2.43-5.46,1.08-2.46,3.8-3.71,5.59-5.7,2.27-2.54,2.84-6.07,5.24-8.29l.21-.52-2.25-14Z" transform="translate(-28 -101)" opacity="0.1"/><ellipse cx="977.05" cy="659.35" rx="33.95" ry="6.53" fill="#0960bd"/><ellipse cx="977.62" cy="656.57" rx="3.95" ry="5.17" fill="#3f3d56"/><ellipse cx="977.62" cy="650.25" rx="3.95" ry="5.17" fill="#3f3d56"/><ellipse cx="977.62" cy="643.92" rx="3.95" ry="5.17" fill="#3f3d56"/><ellipse cx="977.62" cy="637.6" rx="3.95" ry="5.17" fill="#3f3d56"/><ellipse cx="977.62" cy="631.27" rx="3.95" ry="5.17" fill="#3f3d56"/><ellipse cx="977.62" cy="624.95" rx="3.95" ry="5.17" fill="#3f3d56"/><ellipse cx="977.62" cy="618.63" rx="3.95" ry="5.17" fill="#3f3d56"/><path d="M990.82,676.35a18.78,18.78,0,0,1-1.47-2.17l10.38-1.71-11.23.09a19,19,0,0,1-.36-15l15.07,7.81-13.9-10.21a18.94,18.94,0,1,1,31.27,21.19,18.34,18.34,0,0,1,2.16,3.45l-13.48,7,14.38-4.82a19.07,19.07,0,0,1,1,6.07,18.85,18.85,0,0,1-4.06,11.71,18.93,18.93,0,1,1-29.76,0,18.94,18.94,0,0,1,0-23.41Z" transform="translate(-28 -101)" fill="#0960bd"/><path d="M1024.64,688.05a18.85,18.85,0,0,1-4.06,11.71,18.93,18.93,0,1,1-29.76,0C988.28,696.54,1024.64,685.93,1024.64,688.05Z" transform="translate(-28 -101)" opacity="0.1"/><ellipse cx="1043.17" cy="586.83" rx="22.83" ry="4.39" fill="#0960bd"/><ellipse cx="1043.56" cy="584.97" rx="2.66" ry="3.48" fill="#3f3d56"/><ellipse cx="1043.56" cy="580.72" rx="2.66" ry="3.48" fill="#3f3d56"/><ellipse cx="1043.56" cy="576.46" rx="2.66" ry="3.48" fill="#3f3d56"/><ellipse cx="1043.56" cy="572.21" rx="2.66" ry="3.48" fill="#3f3d56"/><ellipse cx="1043.56" cy="567.96" rx="2.66" ry="3.48" fill="#3f3d56"/><ellipse cx="1043.56" cy="563.71" rx="2.66" ry="3.48" fill="#3f3d56"/><ellipse cx="1043.56" cy="559.45" rx="2.66" ry="3.48" fill="#3f3d56"/><path d="M1061.61,631.36a11,11,0,0,1-1-1.46l7-1.15-7.55.06a12.62,12.62,0,0,1-1.17-5.32,12.78,12.78,0,0,1,.92-4.77l10.14,5.26-9.35-6.87a12.73,12.73,0,1,1,21,14.25,12.56,12.56,0,0,1,1.45,2.32l-9.06,4.71,9.66-3.25a12.77,12.77,0,0,1-2.05,12,12.74,12.74,0,1,1-20,0,12.71,12.71,0,0,1,0-15.74Z" transform="translate(-28 -101)" fill="#0960bd"/><path d="M1084.34,639.23a12.72,12.72,0,0,1-2.72,7.87,12.74,12.74,0,1,1-20,0C1059.9,644.93,1084.34,637.8,1084.34,639.23Z" transform="translate(-28 -101)" opacity="0.1"/></svg>
\ No newline at end of file
diff --git a/src/assets/svg/no-data.svg b/src/assets/svg/no-data.svg
deleted file mode 100644
index 2b9f257..0000000
--- a/src/assets/svg/no-data.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="e4fde902-34f0-42ac-83bb-70aac2088463" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="855.41839" height="610.77534" viewBox="0 0 855.41839 610.77534"><circle cx="39.53587" cy="110.72662" r="13.63057" fill="#e6e6e6"/><circle cx="80.42757" cy="110.72662" r="13.63057" fill="#e6e6e6"/><circle cx="121.31927" cy="110.72662" r="13.63057" fill="#e6e6e6"/><circle cx="162.21097" cy="110.72662" r="13.63057" fill="#e6e6e6"/><circle cx="203.10267" cy="110.72662" r="13.63057" fill="#e6e6e6"/><circle cx="243.99437" cy="110.72662" r="13.63057" fill="#e6e6e6"/><circle cx="284.88607" cy="110.72662" r="13.63057" fill="#e6e6e6"/><path d="M488.67447,271.93783H180.32909a5.55346,5.55346,0,0,1-5.54693-5.54693V244.28714a5.55345,5.55345,0,0,1,5.54693-5.54693H488.67447a5.55346,5.55346,0,0,1,5.54693,5.54693V266.3909A5.55347,5.55347,0,0,1,488.67447,271.93783ZM180.32909,240.959a3.3318,3.3318,0,0,0-3.32816,3.32816V266.3909a3.3318,3.3318,0,0,0,3.32816,3.32815H488.67447a3.33179,3.33179,0,0,0,3.32815-3.32815V244.28714a3.33179,3.33179,0,0,0-3.32815-3.32816Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M246.31694,147.79938a3.19065,3.19065,0,0,1,3.187,3.187V220.049a3.19065,3.19065,0,0,1-3.187,3.187h-67.652a3.19065,3.19065,0,0,1-3.187-3.187V150.98643a3.19065,3.19065,0,0,1,3.187-3.187h67.652m0-3.18705h-67.652a6.3741,6.3741,0,0,0-6.3741,6.3741V220.049a6.3741,6.3741,0,0,0,6.3741,6.3741h67.652a6.37411,6.37411,0,0,0,6.3741-6.3741V150.98643a6.37411,6.37411,0,0,0-6.3741-6.3741Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M235.76469,165.95293H190.62778a1.59353,1.59353,0,1,1,0-3.187h45.13691a1.59353,1.59353,0,1,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M235.76469,177.23755H190.62778a1.59353,1.59353,0,1,1,0-3.187h45.13691a1.59353,1.59353,0,1,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M235.76469,188.52139H190.62778a1.59353,1.59353,0,1,1,0-3.187h45.13691a1.59353,1.59353,0,1,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M235.76469,199.806H190.62778a1.59353,1.59353,0,1,1,0-3.187h45.13691a1.59353,1.59353,0,1,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M235.76469,211.09063H190.62778a1.59353,1.59353,0,1,1,0-3.18706h45.13691a1.59353,1.59353,0,0,1,0,3.18706Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M477.37812,147.79938a3.19065,3.19065,0,0,1,3.187,3.187V220.049a3.19065,3.19065,0,0,1-3.187,3.187h-67.652a3.19065,3.19065,0,0,1-3.187-3.187V150.98643a3.19065,3.19065,0,0,1,3.187-3.187h67.652m0-3.18705h-67.652a6.3741,6.3741,0,0,0-6.3741,6.3741V220.049a6.3741,6.3741,0,0,0,6.3741,6.3741h67.652a6.3741,6.3741,0,0,0,6.3741-6.3741V150.98643a6.3741,6.3741,0,0,0-6.3741-6.3741Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M466.82588,165.95293H421.689a1.59353,1.59353,0,1,1,0-3.187h45.13692a1.59353,1.59353,0,0,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M466.82588,177.23755H421.689a1.59353,1.59353,0,1,1,0-3.187h45.13692a1.59353,1.59353,0,0,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M466.82588,188.52139H421.689a1.59353,1.59353,0,1,1,0-3.187h45.13692a1.59353,1.59353,0,0,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M466.82588,199.806H421.689a1.59353,1.59353,0,1,1,0-3.187h45.13692a1.59353,1.59353,0,0,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M466.82588,211.09063H421.689a1.59353,1.59353,0,1,1,0-3.18706h45.13692a1.59353,1.59353,0,0,1,0,3.18706Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M707.317,280.59077a3.19065,3.19065,0,0,1,3.187,3.187v69.06255a3.19066,3.19066,0,0,1-3.187,3.187H639.665a3.19066,3.19066,0,0,1-3.187-3.187V283.77782a3.19065,3.19065,0,0,1,3.187-3.187h67.652m0-3.187H639.665a6.3741,6.3741,0,0,0-6.3741,6.3741v69.06255a6.3741,6.3741,0,0,0,6.3741,6.3741h67.652a6.37411,6.37411,0,0,0,6.3741-6.3741V283.77782a6.3741,6.3741,0,0,0-6.3741-6.3741Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M696.76476,298.74432H651.62784a1.59353,1.59353,0,1,1,0-3.187h45.13692a1.59353,1.59353,0,0,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M696.76476,310.02894H651.62784a1.59353,1.59353,0,0,1,0-3.18706h45.13692a1.59353,1.59353,0,0,1,0,3.18706Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M696.76476,321.31278H651.62784a1.59352,1.59352,0,1,1,0-3.187h45.13692a1.59353,1.59353,0,0,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M696.76476,332.59739H651.62784a1.59353,1.59353,0,1,1,0-3.187h45.13692a1.59353,1.59353,0,0,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M696.76476,343.882H651.62784a1.59353,1.59353,0,1,1,0-3.187h45.13692a1.59353,1.59353,0,0,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M362.73282,226.42308H293.30943a7.08972,7.08972,0,0,1-7.08139-7.08138V169.66541a7.08988,7.08988,0,0,1,7.08139-7.08216h69.42339a7.09,7.09,0,0,1,7.08217,7.08216V219.3417A7.08988,7.08988,0,0,1,362.73282,226.42308ZM293.30943,165.7703a3.89917,3.89917,0,0,0-3.89434,3.89511V219.3417a3.89851,3.89851,0,0,0,3.89434,3.89433h69.42339a3.89917,3.89917,0,0,0,3.89511-3.89433V169.66541a3.89983,3.89983,0,0,0-3.89511-3.89511Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M350.59,184.81246H305.45305a1.59353,1.59353,0,0,1,0-3.187H350.59a1.59353,1.59353,0,1,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M350.59,196.09708H305.45305a1.59353,1.59353,0,0,1,0-3.187H350.59a1.59353,1.59353,0,1,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M350.59,207.38092H305.45305a1.59353,1.59353,0,0,1,0-3.187H350.59a1.59353,1.59353,0,1,1,0,3.187Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M593.09111,253.95025,526.41486,234.6141a7.08971,7.08971,0,0,1-4.82882-8.77351l13.83608-47.71054a7.08988,7.08988,0,0,1,8.77372-4.82958l66.67625,19.33615a7.09,7.09,0,0,1,4.82935,8.77447l-13.83608,47.71055A7.08988,7.08988,0,0,1,593.09111,253.95025Zm-49.78294-77.58884a3.89916,3.89916,0,0,0-4.82511,2.65631L524.647,226.72827a3.89851,3.89851,0,0,0,2.65557,4.8249l66.67624,19.33614a3.89918,3.89918,0,0,0,4.82565-2.65535l13.83608-47.71054a3.89985,3.89985,0,0,0-2.65609-4.82587Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M593.01835,210.60411l-43.3508-12.57175a1.59353,1.59353,0,0,1,.88767-3.06094L593.906,207.54318a1.59352,1.59352,0,1,1-.88768,3.06093Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M589.87531,221.44219,546.5245,208.87043a1.59352,1.59352,0,1,1,.88767-3.06093L590.763,218.38125a1.59353,1.59353,0,0,1-.88767,3.06094Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M586.73248,232.27951l-43.35081-12.57175a1.59353,1.59353,0,0,1,.88767-3.06094l43.35081,12.57176a1.59352,1.59352,0,0,1-.88767,3.06093Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><rect x="156.10589" y="607.77534" width="699.3125" height="3" fill="#e6e6e6"/><polygon points="562.14 603.085 448.421 603.085 452.276 552.973 558.285 552.973 562.14 603.085" fill="#e6e6e6"/><rect x="442.63878" y="597.3034" width="127.21043" height="11.5646" fill="#e6e6e6"/><path d="M895.37073,374.74021H460.73514a11.56458,11.56458,0,0,0-11.56458,11.56458h0V651.3265H906.93533V386.30479a11.56457,11.56457,0,0,0-11.56456-11.56458Z" transform="translate(-172.29081 -144.61233)" fill="#3f3d56"/><path d="M449.17056,651.3265v43.36719a11.56457,11.56457,0,0,0,11.56458,11.56457H895.37073a11.56459,11.56459,0,0,0,11.5646-11.56457h0V651.3265Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><rect x="300.00891" y="254.22076" width="412.47016" height="231.29169" fill="#e6e6e6"/><circle cx="506.244" cy="533.69821" r="11.56459" fill="#3f3d56"/><circle cx="312.86987" cy="261.79534" r="2.19466" fill="#fff"/><circle cx="321.20026" cy="261.79534" r="2.19466" fill="#fff"/><circle cx="329.53064" cy="261.79534" r="2.19466" fill="#fff"/><rect x="310.6752" y="269.25275" width="389.91608" height="194.24707" fill="#fff"/><path d="M508.885,443.41111a1.37973,1.37973,0,0,0-1.37842,1.37842v69.67578a1.37973,1.37973,0,0,0,1.37842,1.37841H589.3493a1.37973,1.37973,0,0,0,1.37842-1.37841V444.78953a1.37973,1.37973,0,0,0-1.37842-1.37842Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M638.08075,443.63523a1.37984,1.37984,0,0,0-1.37891,1.37842v69.45166a1.37984,1.37984,0,0,0,1.37891,1.37841h80.208a1.37963,1.37963,0,0,0,1.37793-1.37841V445.01365a1.37963,1.37963,0,0,0-1.37793-1.37842Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M765.92157,442.9072a1.37963,1.37963,0,0,0-1.37793,1.37842v70.17969a1.37962,1.37962,0,0,0,1.37793,1.37841h81.042a1.37962,1.37962,0,0,0,1.37793-1.37841V444.28562a1.37963,1.37963,0,0,0-1.37793-1.37842Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M510.35614,550.333a2.84986,2.84986,0,0,0,0,5.69971h75.65234a2.84986,2.84986,0,0,0,0-5.69971Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M510.35614,563.88865a2.8501,2.8501,0,0,0,0,5.70019h34.062a2.8501,2.8501,0,0,0,0-5.70019Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M640.94012,550.333a2.84986,2.84986,0,0,0,0,5.69971h75.65235a2.84986,2.84986,0,0,0,0-5.69971Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M640.94012,563.88865a2.8501,2.8501,0,0,0,0,5.70019h34.0625a2.8501,2.8501,0,0,0,0-5.70019Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/><path d="M768.26044,550.333a2.84986,2.84986,0,0,0,0,5.69971h75.65234a2.84986,2.84986,0,0,0,0-5.69971Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M510.35614,536.333a2.84986,2.84986,0,0,0,0,5.69971h75.65234a2.84986,2.84986,0,0,0,0-5.69971Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M640.94012,536.333a2.84986,2.84986,0,0,0,0,5.69971h75.65235a2.84986,2.84986,0,0,0,0-5.69971Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M768.26044,536.333a2.84986,2.84986,0,0,0,0,5.69971h75.65234a2.84986,2.84986,0,0,0,0-5.69971Z" transform="translate(-172.29081 -144.61233)" fill="#e6e6e6"/><path d="M768.26044,563.88865a2.8501,2.8501,0,0,0,0,5.70019H802.322a2.8501,2.8501,0,0,0,0-5.70019Z" transform="translate(-172.29081 -144.61233)" fill="#0960bd"/></svg>
\ No newline at end of file
diff --git a/src/assets/svg/preview/p-rotate.svg b/src/assets/svg/preview/p-rotate.svg
deleted file mode 100644
index 5153a81..0000000
--- a/src/assets/svg/preview/p-rotate.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1595306944988" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1820" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><defs><style type="text/css"></style></defs><path d="M1464.3 279.7" p-id="1821" fill="#ffffff"></path><path d="M512 960c-60.5 0-119.1-11.9-174.4-35.2-53.4-22.6-101.3-54.9-142.4-96s-73.4-89-96-142.4C75.9 631.1 64 572.5 64 512s11.9-119.1 35.2-174.4c22.6-53.4 54.9-101.3 96-142.4s89-73.4 142.4-96C392.9 75.9 451.5 64 512 64s119.1 11.9 174.4 35.2c53.4 22.6 101.3 54.9 142.4 96s73.4 89 96 142.4C948.1 392.9 960 451.5 960 512c0 19.1-15.5 34.6-34.6 34.6s-34.6-15.5-34.6-34.6c0-51.2-10-100.8-29.8-147.4-19.1-45.1-46.4-85.6-81.2-120.4C745 209.4 704.5 182 659.4 163c-46.7-19.7-96.3-29.8-147.4-29.8-51.2 0-100.8 10-147.4 29.8-45.1 19.1-85.6 46.4-120.4 81.2S182 319.5 163 364.6c-19.7 46.7-29.8 96.3-29.8 147.4 0 51.2 10 100.8 29.8 147.4 19.1 45.1 46.4 85.6 81.2 120.4C279 814.6 319.5 842 364.6 861c46.7 19.7 96.3 29.8 147.4 29.8 64.6 0 128.4-16.5 184.4-47.8 54.4-30.4 100.9-74.1 134.6-126.6 10.3-16.1 31.7-20.8 47.8-10.4 16.1 10.3 20.8 31.7 10.4 47.8-39.8 62-94.8 113.7-159.1 149.6-66.2 37-141.7 56.6-218.1 56.6z" p-id="1822" fill="#ffffff"></path><path d="M924 552c-19.8 0-36-16.2-36-36V228c0-19.8 16.2-36 36-36s36 16.2 36 36v288c0 19.8-16.2 36-36 36zM275.4 575.5c9.5-2.5 19.1 2.9 22.3 12.2 3.5 10.2 9.9 17.7 19.1 22.6 7.1 3.9 15.1 5.8 24 5.8 16.6 0 30.8-6.9 42.5-20.8 11.7-13.8 20-32.7 24.9-75.1-7.7 12.2-17.3 20.8-28.7 25.8-11.4 5-23.7 7.4-36.8 7.4-26.7 0-47.7-8.3-63.3-24.9-15.5-16.6-23.3-37.9-23.3-64.1 0-25.1 7.7-47.1 23-66.2 15.3-19 37.9-28.6 67.8-28.6 40.3 0 68.1 18.1 83.4 54.4 8.5 19.9 12.7 44.9 12.7 74.9 0 33.8-5.1 63.8-15.3 89.9-16.9 43.5-45.5 65.2-85.8 65.2-27 0-47.6-7.1-61.6-21.2-10-10.1-16.4-22-19.3-35.8-2-9.6 4-19.1 13.5-21.6l0.9 0.1z m103-74.4c9.4-7.5 14.1-20.6 14.1-39.3 0-16.8-4.2-29.3-12.7-37.5S360.6 412 347.5 412c-14 0-25.2 4.7-33.4 14.1-8.2 9.4-12.4 22-12.4 37.7 0 14.9 3.6 26.7 10.9 35.5 7.2 8.8 18.8 13.1 34.6 13.1 11.4 0 21.8-3.8 31.2-11.3zM646.6 414.4c12.4 22.8 18.5 54 18.5 93.7 0 37.6-5.6 68.7-16.8 93.3-16.2 35.3-42.8 52.9-79.6 52.9-33.2 0-57.9-14.4-74.2-43.3-13.5-24.1-20.3-56.4-20.3-97 0-31.4 4.1-58.4 12.2-80.9 15.2-42 42.7-63 82.5-63 35.9 0 61.8 14.8 77.7 44.3z m-40.2 173.3c9.4-13.9 14-39.9 14-78 0-27.4-3.4-50-10.1-67.7-6.8-17.7-19.9-26.6-39.4-26.6-17.9 0-31 8.4-39.3 25.2-8.3 16.8-12.4 41.6-12.4 74.3 0 24.6 2.6 44.4 7.9 59.4 8.1 22.8 22 34.3 41.6 34.3 15.7 0 28.3-7 37.7-20.9zM803.3 387.2c11.2 11.3 16.8 25 16.8 41.2 0 16.7-5.8 30.7-17.5 41.8C791 481.4 777.4 487 762 487c-17.1 0-31.2-5.8-42.1-17.4-10.9-11.6-16.4-25.1-16.4-40.6 0-16.5 5.8-30.4 17.3-41.7 11.5-11.3 25.3-17 41.2-17 16.3 0 30.1 5.7 41.3 16.9zM739.5 451c6.2 6.2 13.7 9.3 22.5 9.3 8.4 0 15.8-3.1 22.1-9.3 6.3-6.2 9.4-13.7 9.4-22.6 0-8.5-3.1-15.9-9.3-22.1-6.2-6.2-13.6-9.3-22.2-9.3s-16.1 3.1-22.4 9.3c-6.3 6.2-9.4 13.7-9.4 22.6-0.1 8.4 3 15.8 9.3 22.1z" p-id="1823" fill="#ffffff"></path></svg>
diff --git a/src/assets/svg/preview/resume.svg b/src/assets/svg/preview/resume.svg
deleted file mode 100644
index 0e86c5f..0000000
--- a/src/assets/svg/preview/resume.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1595307154239" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7317" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><defs><style type="text/css"></style></defs><path d="M316 672h60c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8zM512 622c22.1 0 40-17.9 40-39 0-23.1-17.9-41-40-41s-40 17.9-40 41c0 21.1 17.9 39 40 39zM512 482c22.1 0 40-17.9 40-39 0-23.1-17.9-41-40-41s-40 17.9-40 41c0 21.1 17.9 39 40 39z" p-id="7318" fill="#ffffff"></path><path d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32z m-40 728H184V184h656v656z" p-id="7319" fill="#ffffff"></path><path d="M648 672h60c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8z" p-id="7320" fill="#ffffff"></path></svg>
diff --git a/src/assets/svg/preview/scale.svg b/src/assets/svg/preview/scale.svg
deleted file mode 100644
index 1f7adae..0000000
--- a/src/assets/svg/preview/scale.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1595307195033" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8116" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><defs><style type="text/css"></style></defs><path d="M887.081 904.791a25.8 25.8 0 0 1-18.376-7.619L705.618 734.075l-4.163 3.369c-58.255 47.18-131.522 73.16-206.32 73.16-181.07 0-328.377-147.308-328.377-328.367 0-181.068 147.308-328.376 328.377-328.376 181.063 0 328.376 147.308 328.376 328.376 0 77.072-27.412 152.07-77.169 211.17l-3.522 4.173 162.719 162.744a25.846 25.846 0 0 1 7.639 18.432 26.081 26.081 0 0 1-26.051 26.045l-0.046-0.01zM495.13 205.957c-152.336 0-276.27 123.935-276.27 276.27 0 152.33 123.934 276.27 276.27 276.27 152.34 0 276.275-123.94 276.275-276.27 0-152.335-123.935-276.27-276.275-276.27z" fill="#ffffff" p-id="8117"></path><path d="M626.545 508.355h-262.83a26.127 26.127 0 0 1 0-52.255h262.83a26.127 26.127 0 0 1 0 52.255z" fill="#ffffff" p-id="8118"></path><path d="M495.13 639.77a26.127 26.127 0 0 1-26.128-26.128v-262.83a26.127 26.127 0 0 1 52.255 0v262.835a26.127 26.127 0 0 1-26.127 26.123z" fill="#ffffff" p-id="8119"></path></svg>
diff --git a/src/assets/svg/preview/unrotate.svg b/src/assets/svg/preview/unrotate.svg
deleted file mode 100644
index e4708be..0000000
--- a/src/assets/svg/preview/unrotate.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1595306911635" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1352" width="48" height="48" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M924.8 337.6c-22.6-53.4-54.9-101.3-96-142.4s-89-73.4-142.4-96C631.1 75.9 572.5 64 512 64S392.9 75.9 337.6 99.2c-53.4 22.6-101.3 54.9-142.4 96-22.4 22.4-42.2 46.8-59.2 73.1V228c0-19.8-16.2-36-36-36s-36 16.2-36 36v288c0 19.8 16.2 36 36 36s36-16.2 36-36v-50.2c4.2-34.8 13.2-68.7 27-101.2 19.1-45.1 46.4-85.6 81.2-120.4C279 209.4 319.5 182 364.6 163c46.7-19.7 96.3-29.8 147.4-29.8 51.2 0 100.8 10 147.4 29.8 45.1 19.1 85.6 46.4 120.4 81.2C814.6 279 842 319.5 861 364.6c19.7 46.7 29.8 96.3 29.8 147.4 0 51.2-10 100.8-29.8 147.4-19.1 45.1-46.4 85.6-81.2 120.4C745 814.6 704.5 842 659.4 861c-46.7 19.7-96.3 29.8-147.4 29.8-64.6 0-128.4-16.5-184.4-47.8-54.4-30.4-100.9-74.1-134.6-126.6-10.3-16.1-31.7-20.8-47.8-10.4-16.1 10.3-20.8 31.7-10.4 47.8 39.8 62 94.8 113.7 159.1 149.6 66.2 37 141.7 56.6 218.1 56.6 60.5 0 119.1-11.9 174.4-35.2 53.4-22.6 101.3-54.9 142.4-96 41.1-41.1 73.4-89 96-142.4C948.1 631.1 960 572.5 960 512s-11.9-119.1-35.2-174.4z" p-id="1353" fill="#ffffff"></path><path d="M275.4 575.5c9.5-2.5 19.1 2.9 22.3 12.2 3.5 10.2 9.9 17.7 19.1 22.6 7.1 3.9 15.1 5.8 24 5.8 16.6 0 30.8-6.9 42.5-20.8 11.7-13.8 20-32.7 24.9-75.1-7.7 12.2-17.3 20.8-28.7 25.8-11.4 5-23.7 7.4-36.8 7.4-26.7 0-47.7-8.3-63.3-24.9-15.5-16.6-23.3-37.9-23.3-64.1 0-25.1 7.7-47.1 23-66.2 15.3-19 37.9-28.6 67.8-28.6 40.3 0 68.1 18.1 83.4 54.4 8.5 19.9 12.7 44.9 12.7 74.9 0 33.8-5.1 63.8-15.3 89.9-16.9 43.5-45.5 65.2-85.8 65.2-27 0-47.6-7.1-61.6-21.2-10-10.1-16.4-22-19.3-35.8-2-9.6 4-19.1 13.5-21.6l0.9 0.1z m103-74.4c9.4-7.5 14.1-20.6 14.1-39.3 0-16.8-4.2-29.3-12.7-37.5S360.6 412 347.5 412c-14 0-25.2 4.7-33.4 14.1-8.2 9.4-12.4 22-12.4 37.7 0 14.9 3.6 26.7 10.9 35.5 7.2 8.8 18.8 13.1 34.6 13.1 11.4 0 21.8-3.8 31.2-11.3zM646.6 414.4c12.4 22.8 18.5 54 18.5 93.7 0 37.6-5.6 68.7-16.8 93.3-16.2 35.3-42.8 52.9-79.6 52.9-33.2 0-57.9-14.4-74.2-43.3-13.5-24.1-20.3-56.4-20.3-97 0-31.4 4.1-58.4 12.2-80.9 15.2-42 42.7-63 82.5-63 35.9 0 61.8 14.8 77.7 44.3z m-40.2 173.3c9.4-13.9 14-39.9 14-78 0-27.4-3.4-50-10.1-67.7-6.8-17.7-19.9-26.6-39.4-26.6-17.9 0-31 8.4-39.3 25.2-8.3 16.8-12.4 41.6-12.4 74.3 0 24.6 2.6 44.4 7.9 59.4 8.1 22.8 22 34.3 41.6 34.3 15.7 0 28.3-7 37.7-20.9zM803.3 387.2c11.2 11.3 16.8 25 16.8 41.2 0 16.7-5.8 30.7-17.5 41.8C791 481.4 777.4 487 762 487c-17.1 0-31.2-5.8-42.1-17.4-10.9-11.6-16.4-25.1-16.4-40.6 0-16.5 5.8-30.4 17.3-41.7 11.5-11.3 25.3-17 41.2-17 16.3 0 30.1 5.7 41.3 16.9zM739.5 451c6.2 6.2 13.7 9.3 22.5 9.3 8.4 0 15.8-3.1 22.1-9.3 6.3-6.2 9.4-13.7 9.4-22.6 0-8.5-3.1-15.9-9.3-22.1-6.2-6.2-13.6-9.3-22.2-9.3s-16.1 3.1-22.4 9.3c-6.3 6.2-9.4 13.7-9.4 22.6-0.1 8.4 3 15.8 9.3 22.1z" p-id="1354" fill="#ffffff"></path></svg>
diff --git a/src/assets/svg/preview/unscale.svg b/src/assets/svg/preview/unscale.svg
deleted file mode 100644
index 1359b34..0000000
--- a/src/assets/svg/preview/unscale.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1595308005241" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9878" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><defs><style type="text/css"></style></defs><path d="M750.3 198.7C598 46.4 351.1 46.4 198.7 198.7s-152.3 399.2 0 551.5C345.1 896.6 578.8 902.3 732 767.3l172.1 172.1 35.4-35.4-172.1-171.9c135-153.2 129.3-387-17.1-533.4z m39.3 403.8c-17.1 42.1-42.2 80-74.7 112.4-32.5 32.5-70.3 57.6-112.4 74.7-40.7 16.5-83.8 24.9-128 24.9s-87.2-8.4-128-24.9c-42.1-17.1-80-42.2-112.4-74.7s-57.6-70.3-74.7-112.4c-16.5-40.7-24.9-83.8-24.9-128s8.4-87.2 24.9-128c17.1-42.1 42.2-80 74.7-112.4s70.3-57.6 112.4-74.7c40.7-16.5 83.8-24.9 128-24.9s87.2 8.4 128 24.9c42.1 17.1 80 42.2 112.4 74.7 32.5 32.5 57.6 70.3 74.7 112.4 16.5 40.7 24.9 83.8 24.9 128s-8.4 87.3-24.9 128zM671 502H271v-50h400v50z" fill="#ffffff" p-id="9879"></path></svg>
diff --git a/src/components/Application/index.ts b/src/components/Application/index.ts
deleted file mode 100644
index d7c5133..0000000
--- a/src/components/Application/index.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { withInstall } from '/@/utils';
-
-import appLogo from './src/AppLogo.vue';
-import appProvider from './src/AppProvider.vue';
-import appSearch from './src/search/AppSearch.vue';
-import appLocalePicker from './src/AppLocalePicker.vue';
-import appDarkModeToggle from './src/AppDarkModeToggle.vue';
-
-export { useAppProviderContext } from './src/useAppContext';
-
-export const AppLogo = withInstall(appLogo);
-export const AppProvider = withInstall(appProvider);
-export const AppSearch = withInstall(appSearch);
-export const AppLocalePicker = withInstall(appLocalePicker);
-export const AppDarkModeToggle = withInstall(appDarkModeToggle);
diff --git a/src/components/Application/src/AppDarkModeToggle.vue b/src/components/Application/src/AppDarkModeToggle.vue
deleted file mode 100644
index 6b07d92..0000000
--- a/src/components/Application/src/AppDarkModeToggle.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-<template>
-  <div v-if="getShowDarkModeToggle" :class="getClass" @click="toggleDarkMode">
-    <div :class="`${prefixCls}-inner`"> </div>
-    <SvgIcon size="14" name="sun" />
-    <SvgIcon size="14" name="moon" />
-  </div>
-</template>
-<script lang="ts" setup>
-  import { computed, unref } from 'vue';
-  import { SvgIcon } from '/@/components/Icon';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-  import { updateHeaderBgColor, updateSidebarBgColor } from '/@/logics/theme/updateBackground';
-  import { updateDarkTheme } from '/@/logics/theme/dark';
-  import { ThemeEnum } from '/@/enums/appEnum';
-
-  const { prefixCls } = useDesign('dark-switch');
-  const { getDarkMode, setDarkMode, getShowDarkModeToggle } = useRootSetting();
-
-  const isDark = computed(() => getDarkMode.value === ThemeEnum.DARK);
-
-  const getClass = computed(() => [
-    prefixCls,
-    {
-      [`${prefixCls}--dark`]: unref(isDark),
-    },
-  ]);
-
-  function toggleDarkMode() {
-    const darkMode = getDarkMode.value === ThemeEnum.DARK ? ThemeEnum.LIGHT : ThemeEnum.DARK;
-    setDarkMode(darkMode);
-    updateDarkTheme(darkMode);
-    updateHeaderBgColor();
-    updateSidebarBgColor();
-  }
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-dark-switch';
-
-  html[data-theme='dark'] {
-    .@{prefix-cls} {
-      border: 1px solid rgb(196, 188, 188);
-    }
-  }
-
-  .@{prefix-cls} {
-    position: relative;
-    display: flex;
-    width: 50px;
-    height: 26px;
-    padding: 0 6px;
-    margin-left: auto;
-    cursor: pointer;
-    background-color: #151515;
-    border-radius: 30px;
-    justify-content: space-between;
-    align-items: center;
-
-    &-inner {
-      position: absolute;
-      z-index: 1;
-      width: 18px;
-      height: 18px;
-      background-color: #fff;
-      border-radius: 50%;
-      transition: transform 0.5s, background-color 0.5s;
-      will-change: transform;
-    }
-
-    &--dark {
-      .@{prefix-cls}-inner {
-        transform: translateX(calc(100% + 2px));
-      }
-    }
-  }
-</style>
diff --git a/src/components/Application/src/AppLocalePicker.vue b/src/components/Application/src/AppLocalePicker.vue
deleted file mode 100644
index d600bba..0000000
--- a/src/components/Application/src/AppLocalePicker.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--
- * @Author: Vben
- * @Description: Multi-language switching component
--->
-<template>
-  <Dropdown
-    placement="bottom"
-    :trigger="['click']"
-    :dropMenuList="localeList"
-    :selectedKeys="selectedKeys"
-    @menuEvent="handleMenuEvent"
-    overlayClassName="app-locale-picker-overlay"
-  >
-    <span class="cursor-pointer flex items-center">
-      <Icon icon="ion:language" />
-      <span v-if="showText" class="ml-1">{{ getLocaleText }}</span>
-    </span>
-  </Dropdown>
-</template>
-<script lang="ts" setup>
-  import type { LocaleType } from '/#/config';
-  import type { DropMenu } from '/@/components/Dropdown';
-  import { ref, watchEffect, unref, computed } from 'vue';
-  import { Dropdown } from '/@/components/Dropdown';
-  import { Icon } from '/@/components/Icon';
-  import { useLocale } from '/@/locales/useLocale';
-  import { localeList } from '/@/settings/localeSetting';
-
-  const props = defineProps({
-    /**
-     * Whether to display text
-     */
-    showText: { type: Boolean, default: true },
-    /**
-     * Whether to refresh the interface when changing
-     */
-    reload: { type: Boolean },
-  });
-
-  const selectedKeys = ref<string[]>([]);
-
-  const { changeLocale, getLocale } = useLocale();
-
-  const getLocaleText = computed(() => {
-    const key = selectedKeys.value[0];
-    if (!key) {
-      return '';
-    }
-    return localeList.find((item) => item.event === key)?.text;
-  });
-
-  watchEffect(() => {
-    selectedKeys.value = [unref(getLocale)];
-  });
-
-  async function toggleLocale(lang: LocaleType | string) {
-    await changeLocale(lang as LocaleType);
-    selectedKeys.value = [lang as string];
-    props.reload && location.reload();
-  }
-
-  function handleMenuEvent(menu: DropMenu) {
-    if (unref(getLocale) === menu.event) {
-      return;
-    }
-    toggleLocale(menu.event as string);
-  }
-</script>
-
-<style lang="less">
-  .app-locale-picker-overlay {
-    .ant-dropdown-menu-item {
-      min-width: 160px;
-    }
-  }
-</style>
diff --git a/src/components/Application/src/AppLogo.vue b/src/components/Application/src/AppLogo.vue
deleted file mode 100644
index 221b688..0000000
--- a/src/components/Application/src/AppLogo.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-<!--
- * @Author: Jeecg
- * @Description: logo component
--->
-<template>
-  <div class="anticon" :class="getAppLogoClass" @click="goHome">
-    <img src="../../../assets/images/lanpu.png" />
-    <div class="ml-2 truncate md:opacity-100" :class="getTitleClass" v-show="showTitle">
-      {{ title }}
-    </div>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { computed, unref } from 'vue';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { useGo } from '/@/hooks/web/usePage';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { PageEnum } from '/@/enums/pageEnum';
-  import { useUserStore } from '/@/store/modules/user';
-
-  const props = defineProps({
-    /**
-     * The theme of the current parent component
-     */
-    theme: { type: String, validator: (v: string) => ['light', 'dark'].includes(v) },
-    /**
-     * Whether to show title
-     */
-    showTitle: { type: Boolean, default: true },
-    /**
-     * The title is also displayed when the menu is collapsed
-     */
-    alwaysShowTitle: { type: Boolean },
-  });
-
-  const { prefixCls } = useDesign('app-logo');
-  const { getCollapsedShowTitle } = useMenuSetting();
-  const userStore = useUserStore();
-  const { title } = useGlobSetting();
-  const go = useGo();
-
-  const getAppLogoClass = computed(() => [prefixCls, props.theme, { 'collapsed-show-title': unref(getCollapsedShowTitle) }]);
-
-  const getTitleClass = computed(() => [
-    `${prefixCls}__title`,
-    {
-      'xs:opacity-0': !props.alwaysShowTitle,
-    },
-  ]);
-
-  function goHome() {
-    go(userStore.getUserInfo.homePath || PageEnum.BASE_HOME);
-  }
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-app-logo';
-
-  .@{prefix-cls} {
-    display: flex;
-    align-items: center;
-    padding-left: 7px;
-    cursor: pointer;
-    transition: all 0.2s ease;
-
-    &.light {
-      border-bottom: 1px solid @border-color-base;
-    }
-
-    &.collapsed-show-title {
-      padding-left: 20px;
-    }
-
-    &.light &__title {
-      color: @primary-color;
-    }
-
-    &.dark &__title {
-      color: @white;
-    }
-
-    &__title {
-      font-size: 16px;
-      font-weight: 700;
-      transition: all 0.5s;
-      line-height: normal;
-    }
-  }
-</style>
diff --git a/src/components/Application/src/AppProvider.vue b/src/components/Application/src/AppProvider.vue
deleted file mode 100644
index 4c277bd..0000000
--- a/src/components/Application/src/AppProvider.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-<script lang="ts">
-  import { defineComponent, toRefs, ref, unref } from 'vue';
-  import { createAppProviderContext } from './useAppContext';
-  import { createBreakpointListen } from '/@/hooks/event/useBreakpoint';
-  import { prefixCls } from '/@/settings/designSetting';
-  import { useAppStore } from '/@/store/modules/app';
-  import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum';
-
-  const props = {
-    /**
-     * class style prefix
-     */
-    prefixCls: { type: String, default: prefixCls },
-  };
-
-  export default defineComponent({
-    name: 'AppProvider',
-    inheritAttrs: false,
-    props,
-    setup(props, { slots }) {
-      const isMobile = ref(false);
-      const isSetState = ref(false);
-
-      const appStore = useAppStore();
-
-      // Monitor screen breakpoint information changes
-      createBreakpointListen(({ screenMap, sizeEnum, width }) => {
-        const lgWidth = screenMap.get(sizeEnum.LG);
-        if (lgWidth) {
-          isMobile.value = width.value - 1 < lgWidth;
-        }
-        handleRestoreState();
-      });
-
-      const { prefixCls } = toRefs(props);
-
-      // Inject variables into the global
-      createAppProviderContext({ prefixCls, isMobile });
-
-      /**
-       * Used to maintain the state before the window changes
-       */
-      function handleRestoreState() {
-        if (unref(isMobile)) {
-          if (!unref(isSetState)) {
-            isSetState.value = true;
-            const {
-              menuSetting: { type: menuType, mode: menuMode, collapsed: menuCollapsed, split: menuSplit },
-            } = appStore.getProjectConfig;
-            appStore.setProjectConfig({
-              menuSetting: {
-                type: MenuTypeEnum.SIDEBAR,
-                mode: MenuModeEnum.INLINE,
-                split: false,
-              },
-            });
-            appStore.setBeforeMiniInfo({ menuMode, menuCollapsed, menuType, menuSplit });
-          }
-        } else {
-          if (unref(isSetState)) {
-            isSetState.value = false;
-            const { menuMode, menuCollapsed, menuType, menuSplit } = appStore.getBeforeMiniInfo;
-            appStore.setProjectConfig({
-              menuSetting: {
-                type: menuType,
-                mode: menuMode,
-                collapsed: menuCollapsed,
-                split: menuSplit,
-              },
-            });
-          }
-        }
-      }
-      return () => slots.default?.();
-    },
-  });
-</script>
diff --git a/src/components/Application/src/search/AppSearch.vue b/src/components/Application/src/search/AppSearch.vue
deleted file mode 100644
index 63d346e..0000000
--- a/src/components/Application/src/search/AppSearch.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-<script lang="tsx">
-  import { defineComponent, ref, unref } from 'vue';
-  import { Tooltip } from 'ant-design-vue';
-  import { SearchOutlined } from '@ant-design/icons-vue';
-  import AppSearchModal from './AppSearchModal.vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  export default defineComponent({
-    name: 'AppSearch',
-    setup() {
-      const showModal = ref(false);
-      const { t } = useI18n();
-
-      function changeModal(show: boolean) {
-        showModal.value = show;
-      }
-
-      return () => {
-        return (
-          <div class="p-1" onClick={changeModal.bind(null, true)}>
-            <Tooltip>
-              {{
-                title: () => t('common.searchText'),
-                default: () => <SearchOutlined />,
-              }}
-            </Tooltip>
-            <AppSearchModal onClose={changeModal.bind(null, false)} visible={unref(showModal)} />
-          </div>
-        );
-      };
-    },
-  });
-</script>
diff --git a/src/components/Application/src/search/AppSearchFooter.vue b/src/components/Application/src/search/AppSearchFooter.vue
deleted file mode 100644
index 06e1372..0000000
--- a/src/components/Application/src/search/AppSearchFooter.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-<template>
-  <div :class="`${prefixCls}`">
-    <AppSearchKeyItem :class="`${prefixCls}-item`" icon="ant-design:enter-outlined" />
-    <span>{{ t('component.app.toSearch') }}</span>
-    <AppSearchKeyItem :class="`${prefixCls}-item`" icon="ion:arrow-up-outline" />
-    <AppSearchKeyItem :class="`${prefixCls}-item`" icon="ion:arrow-down-outline" />
-    <span>{{ t('component.app.toNavigate') }}</span>
-    <AppSearchKeyItem :class="`${prefixCls}-item`" icon="mdi:keyboard-esc" />
-    <span>{{ t('common.closeText') }}</span>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import AppSearchKeyItem from './AppSearchKeyItem.vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  const { prefixCls } = useDesign('app-search-footer');
-  const { t } = useI18n();
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-app-search-footer';
-
-  .@{prefix-cls} {
-    position: relative;
-    display: flex;
-    height: 44px;
-    padding: 0 16px;
-    font-size: 12px;
-    color: #666;
-    background-color: @component-background;
-    border-top: 1px solid @border-color-base;
-    border-radius: 0 0 16px 16px;
-    align-items: center;
-    flex-shrink: 0;
-
-    &-item {
-      display: flex;
-      width: 20px;
-      height: 18px;
-      padding-bottom: 2px;
-      margin-right: 0.4em;
-      background-color: linear-gradient(-225deg, #d5dbe4, #f8f8f8);
-      border-radius: 2px;
-      box-shadow: inset 0 -2px 0 0 #cdcde6, inset 0 0 1px 1px #fff, 0 1px 2px 1px rgba(30, 35, 90, 0.4);
-      align-items: center;
-      justify-content: center;
-
-      &:nth-child(2),
-      &:nth-child(3),
-      &:nth-child(6) {
-        margin-left: 14px;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Application/src/search/AppSearchKeyItem.vue b/src/components/Application/src/search/AppSearchKeyItem.vue
deleted file mode 100644
index aba36a5..0000000
--- a/src/components/Application/src/search/AppSearchKeyItem.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-<template>
-  <span :class="$attrs.class">
-    <Icon :icon="icon" />
-  </span>
-</template>
-<script lang="ts" setup>
-  import { Icon } from '/@/components/Icon';
-  defineProps({
-    icon: String,
-  });
-</script>
diff --git a/src/components/Application/src/search/AppSearchModal.vue b/src/components/Application/src/search/AppSearchModal.vue
deleted file mode 100644
index b1e7a63..0000000
--- a/src/components/Application/src/search/AppSearchModal.vue
+++ /dev/null
@@ -1,260 +0,0 @@
-<template>
-  <Teleport to="body">
-    <transition name="zoom-fade" mode="out-in">
-      <div :class="getClass" @click.stop v-if="visible">
-        <div :class="`${prefixCls}-content`" v-click-outside="handleClose">
-          <div :class="`${prefixCls}-input__wrapper`">
-            <a-input :class="`${prefixCls}-input`" :placeholder="t('common.searchText')" ref="inputRef" allow-clear @change="handleSearch">
-              <template #prefix>
-                <SearchOutlined />
-              </template>
-            </a-input>
-            <span :class="`${prefixCls}-cancel`" @click="handleClose">
-              {{ t('common.cancelText') }}
-            </span>
-          </div>
-
-          <div :class="`${prefixCls}-not-data`" v-show="getIsNotData">
-            {{ t('component.app.searchNotData') }}
-          </div>
-
-          <ul :class="`${prefixCls}-list`" v-show="!getIsNotData" ref="scrollWrap">
-            <li
-              :ref="setRefs(index)"
-              v-for="(item, index) in searchResult"
-              :key="item.path"
-              :data-index="index"
-              @mouseenter="handleMouseenter"
-              @click="handleEnter"
-              :class="[
-                `${prefixCls}-list__item`,
-                {
-                  [`${prefixCls}-list__item--active`]: activeIndex === index,
-                },
-              ]"
-            >
-              <div :class="`${prefixCls}-list__item-icon`">
-                <Icon :icon="item.icon || 'mdi:form-select'" :size="20" />
-              </div>
-              <div :class="`${prefixCls}-list__item-text`">
-                {{ item.name }}
-              </div>
-              <div :class="`${prefixCls}-list__item-enter`">
-                <Icon icon="ant-design:enter-outlined" :size="20" />
-              </div>
-            </li>
-          </ul>
-          <AppSearchFooter />
-        </div>
-      </div>
-    </transition>
-  </Teleport>
-</template>
-
-<script lang="ts" setup>
-  import { computed, unref, ref, watch, nextTick } from 'vue';
-  import { SearchOutlined } from '@ant-design/icons-vue';
-  import AppSearchFooter from './AppSearchFooter.vue';
-  import Icon from '/@/components/Icon';
-  // @ts-ignore
-  import vClickOutside from '/@/directives/clickOutside';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useRefs } from '/@/hooks/core/useRefs';
-  import { useMenuSearch } from './useMenuSearch';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useAppInject } from '/@/hooks/web/useAppInject';
-
-  const props = defineProps({
-    visible: { type: Boolean },
-  });
-
-  const emit = defineEmits(['close']);
-
-  const scrollWrap = ref(null);
-  const inputRef = ref<Nullable<HTMLElement>>(null);
-
-  const { t } = useI18n();
-  const { prefixCls } = useDesign('app-search-modal');
-  const [refs, setRefs] = useRefs();
-  const { getIsMobile } = useAppInject();
-
-  const { handleSearch, searchResult, keyword, activeIndex, handleEnter, handleMouseenter } = useMenuSearch(refs, scrollWrap, emit);
-
-  const getIsNotData = computed(() => !keyword || unref(searchResult).length === 0);
-
-  const getClass = computed(() => {
-    return [
-      prefixCls,
-      {
-        [`${prefixCls}--mobile`]: unref(getIsMobile),
-      },
-    ];
-  });
-
-  watch(
-    () => props.visible,
-    (visible: boolean) => {
-      visible &&
-        nextTick(() => {
-          unref(inputRef)?.focus();
-        });
-    }
-  );
-
-  function handleClose() {
-    searchResult.value = [];
-    emit('close');
-  }
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-app-search-modal';
-  @footer-prefix-cls: ~'@{namespace}-app-search-footer';
-  .@{prefix-cls} {
-    position: fixed;
-    top: 0;
-    left: 0;
-    z-index: 800;
-    display: flex;
-    width: 100%;
-    height: 100%;
-    padding-top: 50px;
-    background-color: rgba(0, 0, 0, 0.25);
-    justify-content: center;
-
-    &--mobile {
-      padding: 0;
-
-      > div {
-        width: 100%;
-      }
-
-      .@{prefix-cls}-input {
-        width: calc(100% - 38px);
-      }
-
-      .@{prefix-cls}-cancel {
-        display: inline-block;
-      }
-
-      .@{prefix-cls}-content {
-        width: 100%;
-        height: 100%;
-        border-radius: 0;
-      }
-
-      .@{footer-prefix-cls} {
-        display: none;
-      }
-
-      .@{prefix-cls}-list {
-        height: calc(100% - 80px);
-        max-height: unset;
-
-        &__item {
-          &-enter {
-            opacity: 0 !important;
-          }
-        }
-      }
-    }
-
-    &-content {
-      position: relative;
-      width: 632px;
-      margin: 0 auto auto auto;
-      background-color: @component-background;
-      border-radius: 16px;
-      box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
-      flex-direction: column;
-    }
-
-    &-input__wrapper {
-      display: flex;
-      padding: 14px 14px 0 14px;
-      justify-content: space-between;
-      align-items: center;
-    }
-
-    &-input {
-      width: 100%;
-      height: 48px;
-      font-size: 1.5em;
-      color: #1c1e21;
-      border-radius: 6px;
-
-      span[role='img'] {
-        color: #999;
-      }
-    }
-
-    &-cancel {
-      display: none;
-      font-size: 1em;
-      color: #666;
-    }
-
-    &-not-data {
-      display: flex;
-      width: 100%;
-      height: 100px;
-      font-size: 0.9;
-      color: rgb(150 159 175);
-      align-items: center;
-      justify-content: center;
-    }
-
-    &-list {
-      max-height: 472px;
-      padding: 0 14px;
-      padding-bottom: 20px;
-      margin: 0 auto;
-      margin-top: 14px;
-      overflow: auto;
-
-      &__item {
-        position: relative;
-        display: flex;
-        width: 100%;
-        height: 56px;
-        padding-bottom: 4px;
-        padding-left: 14px;
-        margin-top: 8px;
-        font-size: 14px;
-        color: @text-color-base;
-        cursor: pointer;
-        background-color: @component-background;
-        border-radius: 4px;
-        box-shadow: 0 1px 3px 0 #d4d9e1;
-        align-items: center;
-
-        > div:first-child,
-        > div:last-child {
-          display: flex;
-          align-items: center;
-        }
-
-        &--active {
-          color: #fff;
-          background-color: @primary-color;
-
-          .@{prefix-cls}-list__item-enter {
-            opacity: 1;
-          }
-        }
-
-        &-icon {
-          width: 30px;
-        }
-
-        &-text {
-          flex: 1;
-        }
-
-        &-enter {
-          width: 30px;
-          opacity: 0;
-        }
-      }
-    }
-  }
-</style>
diff --git a/src/components/Application/src/search/useMenuSearch.ts b/src/components/Application/src/search/useMenuSearch.ts
deleted file mode 100644
index d5c5282..0000000
--- a/src/components/Application/src/search/useMenuSearch.ts
+++ /dev/null
@@ -1,170 +0,0 @@
-import type { Menu } from '/@/router/types';
-import { ref, onBeforeMount, unref, Ref, nextTick } from 'vue';
-import { getMenus } from '/@/router/menus';
-import { cloneDeep } from 'lodash-es';
-import { filter, forEach } from '/@/utils/helper/treeHelper';
-import { useGo } from '/@/hooks/web/usePage';
-import { useScrollTo } from '/@/hooks/event/useScrollTo';
-import { onKeyStroke, useDebounceFn } from '@vueuse/core';
-import { useI18n } from '/@/hooks/web/useI18n';
-
-export interface SearchResult {
-  name: string;
-  path: string;
-  icon?: string;
-}
-
-// Translate special characters
-function transform(c: string) {
-  const code: string[] = ['$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|'];
-  return code.includes(c) ? `\\${c}` : c;
-}
-
-function createSearchReg(key: string) {
-  const keys = [...key].map((item) => transform(item));
-  const str = ['', ...keys, ''].join('.*');
-  return new RegExp(str);
-}
-
-export function useMenuSearch(refs: Ref<HTMLElement[]>, scrollWrap: Ref<ElRef>, emit: EmitType) {
-  const searchResult = ref<SearchResult[]>([]);
-  const keyword = ref('');
-  const activeIndex = ref(-1);
-
-  let menuList: Menu[] = [];
-
-  const { t } = useI18n();
-  const go = useGo();
-  const handleSearch = useDebounceFn(search, 200);
-
-  onBeforeMount(async () => {
-    const list = await getMenus();
-    menuList = cloneDeep(list);
-    forEach(menuList, (item) => {
-      item.name = t(item.name);
-    });
-  });
-
-  function search(e: ChangeEvent) {
-    e?.stopPropagation();
-    const key = e.target.value;
-    keyword.value = key.trim();
-    if (!key) {
-      searchResult.value = [];
-      return;
-    }
-    const reg = createSearchReg(unref(keyword));
-    const filterMenu = filter(menuList, (item) => {
-      // 銆恑ssues/33銆戝寘鍚瓙鑿滃崟鏃讹紝涓嶆坊鍔犲埌鎼滅储闃熷垪
-      if (Array.isArray(item.children)) {
-        return false;
-      }
-      return reg.test(item.name) && !item.hideMenu;
-    });
-    searchResult.value = handlerSearchResult(filterMenu, reg);
-    activeIndex.value = 0;
-  }
-
-  function handlerSearchResult(filterMenu: Menu[], reg: RegExp, parent?: Menu) {
-    const ret: SearchResult[] = [];
-    filterMenu.forEach((item) => {
-      const { name, path, icon, children, hideMenu, meta } = item;
-      if (!hideMenu && reg.test(name) && (!children?.length || meta?.hideChildrenInMenu)) {
-        ret.push({
-          name: parent?.name ? `${parent.name} > ${name}` : name,
-          path,
-          icon,
-        });
-      }
-      if (!meta?.hideChildrenInMenu && Array.isArray(children) && children.length) {
-        ret.push(...handlerSearchResult(children, reg, item));
-      }
-    });
-    return ret;
-  }
-
-  // Activate when the mouse moves to a certain line
-  function handleMouseenter(e: any) {
-    const index = e.target.dataset.index;
-    activeIndex.value = Number(index);
-  }
-
-  // Arrow key up
-  function handleUp() {
-    if (!searchResult.value.length) return;
-    activeIndex.value--;
-    if (activeIndex.value < 0) {
-      activeIndex.value = searchResult.value.length - 1;
-    }
-    handleScroll();
-  }
-
-  // Arrow key down
-  function handleDown() {
-    if (!searchResult.value.length) return;
-    activeIndex.value++;
-    if (activeIndex.value > searchResult.value.length - 1) {
-      activeIndex.value = 0;
-    }
-    handleScroll();
-  }
-
-  // When the keyboard up and down keys move to an invisible place
-  // the scroll bar needs to scroll automatically
-  function handleScroll() {
-    const refList = unref(refs);
-    if (!refList || !Array.isArray(refList) || refList.length === 0 || !unref(scrollWrap)) {
-      return;
-    }
-
-    const index = unref(activeIndex);
-    const currentRef = refList[index];
-    if (!currentRef) {
-      return;
-    }
-    const wrapEl = unref(scrollWrap);
-    if (!wrapEl) {
-      return;
-    }
-    const scrollHeight = currentRef.offsetTop + currentRef.offsetHeight;
-    const wrapHeight = wrapEl.offsetHeight;
-    const { start } = useScrollTo({
-      el: wrapEl,
-      duration: 100,
-      to: scrollHeight - wrapHeight,
-    });
-    start();
-  }
-
-  // enter keyboard event
-  async function handleEnter() {
-    if (!searchResult.value.length) {
-      return;
-    }
-    const result = unref(searchResult);
-    const index = unref(activeIndex);
-    if (result.length === 0 || index < 0) {
-      return;
-    }
-    const to = result[index];
-    handleClose();
-    await nextTick();
-    go(to.path);
-  }
-
-  // close search modal
-  function handleClose() {
-    searchResult.value = [];
-    emit('close');
-  }
-
-  // enter search
-  onKeyStroke('Enter', handleEnter);
-  // Monitor keyboard arrow keys
-  onKeyStroke('ArrowUp', handleUp);
-  onKeyStroke('ArrowDown', handleDown);
-  // esc close
-  onKeyStroke('Escape', handleClose);
-
-  return { handleSearch, searchResult, keyword, activeIndex, handleMouseenter, handleEnter };
-}
diff --git a/src/components/Application/src/useAppContext.ts b/src/components/Application/src/useAppContext.ts
deleted file mode 100644
index 8bdfb4f..0000000
--- a/src/components/Application/src/useAppContext.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { InjectionKey, Ref } from 'vue';
-import { createContext, useContext } from '/@/hooks/core/useContext';
-
-export interface AppProviderContextProps {
-  prefixCls: Ref<string>;
-  isMobile: Ref<boolean>;
-}
-
-const key: InjectionKey<AppProviderContextProps> = Symbol();
-
-export function createAppProviderContext(context: AppProviderContextProps) {
-  return createContext<AppProviderContextProps>(context, key);
-}
-
-export function useAppProviderContext() {
-  return useContext<AppProviderContextProps>(key);
-}
diff --git a/src/components/Authority/index.ts b/src/components/Authority/index.ts
deleted file mode 100644
index 2f0eab7..0000000
--- a/src/components/Authority/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { withInstall } from '/@/utils';
-import authority from './src/Authority.vue';
-
-export const Authority = withInstall(authority);
diff --git a/src/components/Authority/src/Authority.vue b/src/components/Authority/src/Authority.vue
deleted file mode 100644
index 0d35938..0000000
--- a/src/components/Authority/src/Authority.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<!--
- Access control component for fine-grained access control.
--->
-<script lang="ts">
-  import type { PropType } from 'vue';
-  import { defineComponent } from 'vue';
-  import { RoleEnum } from '/@/enums/roleEnum';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  import { getSlot } from '/@/utils/helper/tsxHelper';
-
-  export default defineComponent({
-    name: 'Authority',
-    props: {
-      /**
-       * Specified role is visible
-       * When the permission mode is the role mode, the value value can pass the role value.
-       * When the permission mode is background, the value value can pass the code permission value
-       * @default ''
-       */
-      value: {
-        type: [Number, Array, String] as PropType<RoleEnum | RoleEnum[] | string | string[]>,
-        default: '',
-      },
-    },
-    setup(props, { slots }) {
-      const { hasPermission } = usePermission();
-
-      /**
-       * Render role button
-       */
-      function renderAuth() {
-        const { value } = props;
-        if (!value) {
-          return getSlot(slots);
-        }
-        return hasPermission(value) ? getSlot(slots) : null;
-      }
-
-      return () => {
-        // Role-based value control
-        return renderAuth();
-      };
-    },
-  });
-</script>
diff --git a/src/components/Basic/index.ts b/src/components/Basic/index.ts
deleted file mode 100644
index 97a53a1..0000000
--- a/src/components/Basic/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { withInstall } from '/@/utils';
-import basicArrow from './src/BasicArrow.vue';
-import basicTitle from './src/BasicTitle.vue';
-import basicHelp from './src/BasicHelp.vue';
-
-export const BasicArrow = withInstall(basicArrow);
-export const BasicTitle = withInstall(basicTitle);
-export const BasicHelp = withInstall(basicHelp);
diff --git a/src/components/Basic/src/BasicArrow.vue b/src/components/Basic/src/BasicArrow.vue
deleted file mode 100644
index 6a4cd01..0000000
--- a/src/components/Basic/src/BasicArrow.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-<!--
- * @Author: Vben
- * @Description: Arrow component with animation
--->
-<template>
-  <span :class="getClass">
-    <Icon icon="ion:chevron-forward" :style="$attrs.iconStyle" />
-  </span>
-</template>
-<script lang="ts" setup>
-  import { computed } from 'vue';
-  import { Icon } from '/@/components/Icon';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  const props = defineProps({
-    /**
-     * Arrow expand state
-     */
-    expand: { type: Boolean },
-    /**
-     * Arrow up by default
-     */
-    up: { type: Boolean },
-    /**
-     * Arrow down by default
-     */
-    down: { type: Boolean },
-    /**
-     * Cancel padding/margin for inline
-     */
-    inset: { type: Boolean },
-  });
-
-  const { prefixCls } = useDesign('basic-arrow');
-
-  // get component class
-  const getClass = computed(() => {
-    const { expand, up, down, inset } = props;
-    return [
-      prefixCls,
-      {
-        [`${prefixCls}--active`]: expand,
-        up,
-        inset,
-        down,
-      },
-    ];
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-basic-arrow';
-
-  .@{prefix-cls} {
-    display: inline-block;
-    cursor: pointer;
-    transform: rotate(0deg);
-    transition: all 0.3s ease 0.1s;
-    transform-origin: center center;
-
-    &--active {
-      transform: rotate(90deg);
-    }
-
-    &.inset {
-      line-height: 0px;
-    }
-
-    &.up {
-      transform: rotate(-90deg);
-    }
-
-    &.down {
-      transform: rotate(90deg);
-    }
-
-    &.up.@{prefix-cls}--active {
-      transform: rotate(90deg);
-    }
-
-    &.down.@{prefix-cls}--active {
-      transform: rotate(-90deg);
-    }
-  }
-</style>
diff --git a/src/components/Basic/src/BasicHelp.vue b/src/components/Basic/src/BasicHelp.vue
deleted file mode 100644
index 396bd75..0000000
--- a/src/components/Basic/src/BasicHelp.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-<script lang="tsx">
-  import type { CSSProperties, PropType } from 'vue';
-  import { defineComponent, computed, unref } from 'vue';
-  import { Tooltip } from 'ant-design-vue';
-  import { InfoCircleOutlined } from '@ant-design/icons-vue';
-  import { getPopupContainer } from '/@/utils';
-  import { isString, isArray } from '/@/utils/is';
-  import { getSlot } from '/@/utils/helper/tsxHelper';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  const props = {
-    /**
-     * Help text max-width
-     * @default: 600px
-     */
-    maxWidth: { type: String, default: '600px' },
-    /**
-     * Whether to display the serial number
-     * @default: false
-     */
-    showIndex: { type: Boolean },
-    /**
-     * Help text font color
-     * @default: #ffffff
-     */
-    color: { type: String, default: '#ffffff' },
-    /**
-     * Help text font size
-     * @default: 14px
-     */
-    fontSize: { type: String, default: '14px' },
-    /**
-     * Help text list
-     */
-    placement: { type: String, default: 'right' },
-    /**
-     * Help text list
-     */
-    text: { type: [Array, String] as PropType<string[] | string> },
-  };
-
-  export default defineComponent({
-    name: 'BasicHelp',
-    components: { Tooltip },
-    props,
-    setup(props, { slots }) {
-      const { prefixCls } = useDesign('basic-help');
-
-      const getTooltipStyle = computed((): CSSProperties => ({ color: props.color, fontSize: props.fontSize }));
-
-      const getOverlayStyle = computed((): CSSProperties => ({ maxWidth: props.maxWidth }));
-
-      function renderTitle() {
-        const textList = props.text;
-
-        if (isString(textList)) {
-          return <p>{textList}</p>;
-        }
-
-        if (isArray(textList)) {
-          return textList.map((text, index) => {
-            return (
-              <p key={text}>
-                <>
-                  {props.showIndex ? `${index + 1}. ` : ''}
-                  {text}
-                </>
-              </p>
-            );
-          });
-        }
-        return null;
-      }
-
-      return () => {
-        return (
-          <Tooltip
-            overlayClassName={`${prefixCls}__wrap`}
-            title={<div style={unref(getTooltipStyle)}>{renderTitle()}</div>}
-            autoAdjustOverflow={true}
-            overlayStyle={unref(getOverlayStyle)}
-            placement={props.placement as 'right'}
-            getPopupContainer={() => getPopupContainer()}
-          >
-            <span class={prefixCls}>{getSlot(slots) || <InfoCircleOutlined />}</span>
-          </Tooltip>
-        );
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-help';
-
-  .@{prefix-cls} {
-    display: inline-block;
-    margin-left: 6px;
-    font-size: 14px;
-    color: @text-color-help-dark;
-    cursor: pointer;
-
-    &:hover {
-      color: @primary-color;
-    }
-
-    &__wrap {
-      p {
-        margin-bottom: 0;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Basic/src/BasicTitle.vue b/src/components/Basic/src/BasicTitle.vue
deleted file mode 100644
index 07d39ce..0000000
--- a/src/components/Basic/src/BasicTitle.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-<template>
-  <span :class="getClass">
-    <slot></slot>
-    <BasicHelp :class="`${prefixCls}-help`" v-if="helpMessage" :text="helpMessage" />
-  </span>
-</template>
-<script lang="ts" setup>
-  import type { PropType } from 'vue';
-  import { useSlots, computed } from 'vue';
-  import BasicHelp from './BasicHelp.vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  const props = defineProps({
-    /**
-     * Help text list or string
-     * @default: ''
-     */
-    helpMessage: {
-      type: [String, Array] as PropType<string | string[]>,
-      default: '',
-    },
-    /**
-     * Whether the color block on the left side of the title
-     * @default: false
-     */
-    span: { type: Boolean },
-    /**
-     * Whether to default the text, that is, not bold
-     * @default: false
-     */
-    normal: { type: Boolean },
-  });
-
-  const { prefixCls } = useDesign('basic-title');
-  const slots = useSlots();
-  const getClass = computed(() => [
-    prefixCls,
-    { [`${prefixCls}-show-span`]: props.span && slots.default },
-    { [`${prefixCls}-normal`]: props.normal },
-  ]);
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-basic-title';
-
-  .@{prefix-cls} {
-    position: relative;
-    display: flex;
-    padding-left: 7px;
-    font-size: 16px;
-    font-weight: 500;
-    line-height: 24px;
-    color: @text-color-base;
-    cursor: move;
-    user-select: none;
-
-    &-normal {
-      font-size: 14px;
-      font-weight: 500;
-    }
-
-    &-show-span::before {
-      position: absolute;
-      top: 4px;
-      left: 0;
-      width: 3px;
-      height: 16px;
-      margin-right: 4px;
-      background-color: @primary-color;
-      content: '';
-    }
-
-    &-help {
-      margin-left: 10px;
-    }
-  }
-</style>
diff --git a/src/components/Button/index.ts b/src/components/Button/index.ts
deleted file mode 100644
index 71bd2e4..0000000
--- a/src/components/Button/index.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { withInstall } from '/@/utils';
-import type { ExtractPropTypes } from 'vue';
-import button from './src/BasicButton.vue';
-import jUploadButton from './src/JUploadButton.vue';
-import popConfirmButton from './src/PopConfirmButton.vue';
-import { buttonProps } from './src/props';
-
-export const Button = withInstall(button);
-export const JUploadButton = withInstall(jUploadButton);
-export const PopConfirmButton = withInstall(popConfirmButton);
-export declare type ButtonProps = Partial<ExtractPropTypes<typeof buttonProps>>;
diff --git a/src/components/Button/src/BasicButton.vue b/src/components/Button/src/BasicButton.vue
deleted file mode 100644
index c112f5d..0000000
--- a/src/components/Button/src/BasicButton.vue
+++ /dev/null
@@ -1,41 +0,0 @@
-<template>
-	<Button v-bind="getBindValue" :class="getButtonClass" @click="onClick">
-		<template v-if="preIcon" #icon>
-			<Icon :icon="preIcon" :size="iconSize" />
-		</template>
-		<template #default="data">
-			<slot v-bind="data || {}"></slot>
-			<Icon :icon="postIcon" v-if="postIcon" :size="iconSize" />
-		</template>
-	</Button>
-</template>
-
-<script lang="ts">
-	import { defineComponent } from 'vue'
-	export default defineComponent({
-		name: 'AButton',
-		inheritAttrs: false,
-	})
-</script>
-<script lang="ts" setup>
-	import { computed, unref } from 'vue'
-	import { Button } from 'ant-design-vue'
-	import Icon from '/@/components/Icon/src/Icon.vue'
-	import { buttonProps } from './props'
-	import { useAttrs } from '/@/hooks/core/useAttrs'
-	const props = defineProps(buttonProps)
-	// get component class
-	const attrs = useAttrs({ excludeDefaultKeys: false })
-	const getButtonClass = computed(() => {
-		const { color, disabled } = props
-		return [
-			{
-				[`ant-btn-${color}`]: !!color,
-				[`is-disabled`]: disabled,
-			},
-		]
-	})
-
-	// get inherit binding value
-	const getBindValue = computed(() => ({ ...unref(attrs), ...props }))
-</script>
diff --git a/src/components/Button/src/JUploadButton.vue b/src/components/Button/src/JUploadButton.vue
deleted file mode 100644
index ec0df2c..0000000
--- a/src/components/Button/src/JUploadButton.vue
+++ /dev/null
@@ -1,41 +0,0 @@
-<template>
-  <a-upload name="file" :showUploadList="false" :customRequest="(file) => onClick(file)">
-    <Button :type="type" :class="getButtonClass">
-      <template #default="data">
-        <Icon :icon="preIcon" v-if="preIcon" :size="iconSize" />
-        <slot v-bind="data || {}"></slot>
-        <Icon :icon="postIcon" v-if="postIcon" :size="iconSize" />
-      </template>
-    </Button>
-  </a-upload>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  export default defineComponent({
-    name: 'JUploadButton',
-    inheritAttrs: false,
-  });
-</script>
-<script lang="ts" setup>
-  import { computed, unref } from 'vue';
-  import { Button } from 'ant-design-vue';
-  import Icon from '/@/components/Icon/src/Icon.vue';
-  import { buttonProps } from './props';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  const props = defineProps(buttonProps);
-  // get component class
-  const attrs = useAttrs({ excludeDefaultKeys: false });
-  const getButtonClass = computed(() => {
-    const { color, disabled } = props;
-    return [
-      {
-        [`ant-btn-${color}`]: !!color,
-        [`is-disabled`]: disabled,
-      },
-    ];
-  });
-
-  // get inherit binding value
-  const getBindValue = computed(() => ({ ...unref(attrs), ...props }));
-</script>
diff --git a/src/components/Button/src/PopConfirmButton.vue b/src/components/Button/src/PopConfirmButton.vue
deleted file mode 100644
index 05d0f9a..0000000
--- a/src/components/Button/src/PopConfirmButton.vue
+++ /dev/null
@@ -1,56 +0,0 @@
-<script lang="ts">
-  import { computed, defineComponent, h, unref } from 'vue';
-  import BasicButton from './BasicButton.vue';
-  import { Popconfirm } from 'ant-design-vue';
-  import { extendSlots } from '/@/utils/helper/tsxHelper';
-  import { omit } from 'lodash-es';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { propTypes } from '/@/utils/propTypes';
-
-  const props = {
-    class: propTypes.any,
-    /**
-     * Whether to enable the drop-down menu
-     * @default: true
-     */
-    enable: {
-      type: Boolean,
-      default: true,
-    },
-  };
-
-  export default defineComponent({
-    name: 'PopButton',
-    inheritAttrs: false,
-    props,
-    setup(props, { slots }) {
-      const { t } = useI18n();
-      const attrs = useAttrs();
-
-      // get inherit binding value
-      const getBindValues = computed(() => {
-        return Object.assign(
-          {
-            okText: t('common.okText'),
-            cancelText: t('common.cancelText'),
-          },
-          { ...props, ...unref(attrs) }
-        );
-      });
-
-      return () => {
-        const bindValues = omit(unref(getBindValues), 'icon');
-        const btnBind = omit(bindValues, 'title') as Recordable;
-        if (btnBind.disabled) btnBind.color = '';
-        const Button = h(BasicButton, btnBind, extendSlots(slots));
-
-        // If it is not enabled, it is a normal button
-        if (!props.enable) {
-          return Button;
-        }
-        return h(Popconfirm, bindValues, { default: () => Button });
-      };
-    },
-  });
-</script>
diff --git a/src/components/Button/src/props.ts b/src/components/Button/src/props.ts
deleted file mode 100644
index b5026d6..0000000
--- a/src/components/Button/src/props.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-export const buttonProps = {
-  color: { type: String, validator: (v) => ['error', 'warning', 'success', ''].includes(v) },
-  loading: { type: Boolean },
-  disabled: { type: Boolean },
-  /**
-   * Text before icon.
-   */
-  preIcon: { type: String },
-  /**
-   * Text after icon.
-   */
-  postIcon: { type: String },
-  type: { type: String },
-  /**
-   * preIcon and postIcon icon size.
-   * @default: 15
-   */
-  iconSize: { type: Number, default: 15 },
-  isUpload: { type: Boolean, default: false },
-  onClick: { type: Function as PropType<(...args) => any>, default: null },
-};
diff --git a/src/components/CardList/index.ts b/src/components/CardList/index.ts
deleted file mode 100644
index b977c1b..0000000
--- a/src/components/CardList/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { withInstall } from '/@/utils';
-import cardList from './src/CardList.vue';
-
-export const CardList = withInstall(cardList);
diff --git a/src/components/CardList/src/CardList.vue b/src/components/CardList/src/CardList.vue
deleted file mode 100644
index e2d369c..0000000
--- a/src/components/CardList/src/CardList.vue
+++ /dev/null
@@ -1,164 +0,0 @@
-<template>
-  <div class="p-2">
-    <div class="bg-white mb-2 p-4">
-      <BasicForm @register="registerForm" />
-    </div>
-    {{ sliderProp.width }}
-    <div class="bg-white p-2">
-      <List :grid="{ gutter: 5, xs: 1, sm: 2, md: 4, lg: 4, xl: 6, xxl: grid }" :data-source="data" :pagination="paginationProp">
-        <template #header>
-          <div class="flex justify-end space-x-2"
-            ><slot name="header"></slot>
-            <Tooltip>
-              <template #title>
-                <div class="w-50">姣忚鏄剧ず鏁伴噺</div><Slider id="slider" v-bind="sliderProp" v-model:value="grid" @change="sliderChange"
-              /></template>
-              <Button><TableOutlined /></Button>
-            </Tooltip>
-            <Tooltip @click="fetch">
-              <template #title>鍒锋柊</template>
-              <Button><RedoOutlined /></Button>
-            </Tooltip>
-          </div>
-        </template>
-        <template #renderItem="{ item }">
-          <ListItem>
-            <Card>
-              <template #title></template>
-              <template #cover>
-                <div :class="height">
-                  <Image :src="item.imgs[0]" />
-                </div>
-              </template>
-              <template class="ant-card-actions" #actions>
-                <!--              <SettingOutlined key="setting" />-->
-                <EditOutlined key="edit" />
-                <Dropdown
-                  :trigger="['hover']"
-                  :dropMenuList="[
-                    {
-                      text: '鍒犻櫎',
-                      event: '1',
-                      popConfirm: {
-                        title: '鏄惁纭鍒犻櫎',
-                        confirm: handleDelete.bind(null, item.id),
-                      },
-                    },
-                  ]"
-                  popconfirm
-                >
-                  <EllipsisOutlined key="ellipsis" />
-                </Dropdown>
-              </template>
-
-              <CardMeta>
-                <template #title>
-                  <TypographyText :content="item.name" :ellipsis="{ tooltip: item.address }" />
-                </template>
-                <template #avatar>
-                  <Avatar :src="item.avatar" />
-                </template>
-                <template #description>{{ item.time }}</template>
-              </CardMeta>
-            </Card>
-          </ListItem>
-        </template>
-      </List>
-    </div>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { computed, onMounted, ref } from 'vue';
-  import { EditOutlined, EllipsisOutlined, RedoOutlined, TableOutlined } from '@ant-design/icons-vue';
-  import { List, Card, Image, Typography, Tooltip, Slider, Avatar } from 'ant-design-vue';
-  import { Dropdown } from '/@/components/Dropdown';
-  import { BasicForm, useForm } from '/@/components/Form';
-  import { propTypes } from '/@/utils/propTypes';
-  import { Button } from '/@/components/Button';
-  import { isFunction } from '/@/utils/is';
-  import { useSlider, grid } from './data';
-  const ListItem = List.Item;
-  const CardMeta = Card.Meta;
-  const TypographyText = Typography.Text;
-  // 鑾峰彇slider灞炴��
-  const sliderProp = computed(() => useSlider(4));
-  // 缁勪欢鎺ユ敹鍙傛暟
-  const props = defineProps({
-    // 璇锋眰API鐨勫弬鏁�
-    params: propTypes.object.def({}),
-    //api
-    api: propTypes.func,
-  });
-  //鏆撮湶鍐呴儴鏂规硶
-  const emit = defineEmits(['getMethod', 'delete']);
-  //鏁版嵁
-  const data = ref([]);
-  // 鍒囨崲姣忚涓暟
-  // cover鍥剧墖鑷�傚簲楂樺害
-  //淇敼pageSize骞堕噸鏂拌姹傛暟鎹�
-
-  const height = computed(() => {
-    return `h-${120 - grid.value * 6}`;
-  });
-  //琛ㄥ崟
-  const [registerForm, { validate }] = useForm({
-    schemas: [{ field: 'type', component: 'Input', label: '绫诲瀷' }],
-    labelWidth: 80,
-    baseColProps: { span: 6 },
-    actionColOptions: { span: 24 },
-    autoSubmitOnEnter: true,
-    submitFunc: handleSubmit,
-  });
-  //琛ㄥ崟鎻愪氦
-  async function handleSubmit() {
-    const data = await validate();
-    await fetch(data);
-  }
-  function sliderChange(n) {
-    pageSize.value = n * 4;
-    fetch();
-  }
-
-  // 鑷姩璇锋眰骞舵毚闇插唴閮ㄦ柟娉�
-  onMounted(() => {
-    fetch();
-    emit('getMethod', fetch);
-  });
-
-  async function fetch(p = {}) {
-    const { api, params } = props;
-    if (api && isFunction(api)) {
-      const res = await api({ ...params, page: page.value, pageSize: pageSize.value, ...p });
-      data.value = res.items;
-      total.value = res.total;
-    }
-  }
-  //鍒嗛〉鐩稿叧
-  const page = ref(1);
-  const pageSize = ref(36);
-  const total = ref(0);
-  const paginationProp = ref({
-    showSizeChanger: false,
-    showQuickJumper: true,
-    pageSize,
-    current: page,
-    total,
-    showTotal: (total) => `鎬� ${total} 鏉,
-    onChange: pageChange,
-    onShowSizeChange: pageSizeChange,
-  });
-
-  function pageChange(p, pz) {
-    page.value = p;
-    pageSize.value = pz;
-    fetch();
-  }
-  function pageSizeChange(current, size) {
-    pageSize.value = size;
-    fetch();
-  }
-
-  async function handleDelete(id) {
-    emit('delete', id);
-  }
-</script>
diff --git a/src/components/CardList/src/data.ts b/src/components/CardList/src/data.ts
deleted file mode 100644
index ac56cad..0000000
--- a/src/components/CardList/src/data.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { ref } from 'vue';
-//姣忚涓暟
-export const grid = ref(12);
-// slider灞炴��
-export const useSlider = (min = 6, max = 12) => {
-  // 姣忚鏄剧ず涓暟婊戝姩鏉�
-  const getMarks = () => {
-    const l = {};
-    for (let i = min; i < max + 1; i++) {
-      l[i] = {
-        style: {
-          color: '#fff',
-        },
-        label: i,
-      };
-    }
-    return l;
-  };
-  return {
-    min,
-    max,
-    marks: getMarks(),
-    step: 1,
-  };
-};
diff --git a/src/components/ClickOutSide/index.ts b/src/components/ClickOutSide/index.ts
deleted file mode 100644
index 5e7dd2d..0000000
--- a/src/components/ClickOutSide/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { withInstall } from '/@/utils';
-import clickOutSide from './src/ClickOutSide.vue';
-
-export const ClickOutSide = withInstall(clickOutSide);
diff --git a/src/components/ClickOutSide/src/ClickOutSide.vue b/src/components/ClickOutSide/src/ClickOutSide.vue
deleted file mode 100644
index c043cc1..0000000
--- a/src/components/ClickOutSide/src/ClickOutSide.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-<template>
-  <div ref="wrap">
-    <slot></slot>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref, onMounted } from 'vue';
-  import { onClickOutside } from '@vueuse/core';
-  const emit = defineEmits(['mounted', 'clickOutside']);
-  const wrap = ref<ElRef>(null);
-
-  onClickOutside(wrap, () => {
-    emit('clickOutside');
-  });
-
-  onMounted(() => {
-    emit('mounted');
-  });
-</script>
diff --git a/src/components/CodeEditor/index.ts b/src/components/CodeEditor/index.ts
deleted file mode 100644
index a9b0c30..0000000
--- a/src/components/CodeEditor/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { withInstall } from '/@/utils';
-import codeEditor from './src/CodeEditor.vue';
-import jsonPreview from './src/json-preview/JsonPreview.vue';
-
-export const CodeEditor = withInstall(codeEditor);
-export const JsonPreview = withInstall(jsonPreview);
diff --git a/src/components/CodeEditor/src/CodeEditor.vue b/src/components/CodeEditor/src/CodeEditor.vue
deleted file mode 100644
index 660ab63..0000000
--- a/src/components/CodeEditor/src/CodeEditor.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-<template>
-  <div class="h-full">
-    <CodeMirrorEditor :value="getValue" @change="handleValueChange" :mode="mode" :readonly="readonly" />
-  </div>
-</template>
-
-<script lang="ts">
-  const MODE = {
-    JSON: 'application/json',
-    html: 'htmlmixed',
-    js: 'javascript',
-  };
-</script>
-<script lang="ts" setup>
-  import { computed } from 'vue';
-  import CodeMirrorEditor from './codemirror/CodeMirror.vue';
-  import { isString } from '/@/utils/is';
-
-  const props = defineProps({
-    value: { type: [Object, String] as PropType<Record<string, any> | string> },
-    mode: { type: String, default: MODE.JSON },
-    readonly: { type: Boolean },
-    autoFormat: { type: Boolean, default: true },
-  });
-
-  const emit = defineEmits(['change', 'update:value', 'format-error']);
-
-  const getValue = computed(() => {
-    const { value, mode, autoFormat } = props;
-    if (!autoFormat || mode !== MODE.JSON) {
-      return value as string;
-    }
-    let result = value;
-    if (isString(value)) {
-      try {
-        result = JSON.parse(value);
-      } catch (e) {
-        emit('format-error', value);
-        return value as string;
-      }
-    }
-    return JSON.stringify(result, null, 2);
-  });
-
-  function handleValueChange(v) {
-    emit('update:value', v);
-    emit('change', v);
-  }
-</script>
diff --git a/src/components/CodeEditor/src/codemirror/CodeMirror.vue b/src/components/CodeEditor/src/codemirror/CodeMirror.vue
deleted file mode 100644
index 2d3bca1..0000000
--- a/src/components/CodeEditor/src/codemirror/CodeMirror.vue
+++ /dev/null
@@ -1,102 +0,0 @@
-<template>
-  <div class="relative !h-full w-full overflow-hidden" ref="el"> </div>
-</template>
-
-<script lang="ts" setup>
-  import { ref, onMounted, onUnmounted, watchEffect, watch, unref, nextTick } from 'vue';
-  import { useDebounceFn } from '@vueuse/core';
-  import { useAppStore } from '/@/store/modules/app';
-  import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
-  import CodeMirror from 'codemirror';
-  // css
-  import './codemirror.css';
-  import 'codemirror/theme/idea.css';
-  import 'codemirror/theme/material-palenight.css';
-  // modes
-  import 'codemirror/mode/javascript/javascript';
-  import 'codemirror/mode/css/css';
-  import 'codemirror/mode/htmlmixed/htmlmixed';
-
-  const props = defineProps({
-    mode: { type: String, default: 'application/json' },
-    value: { type: String, default: '' },
-    readonly: { type: Boolean, default: false },
-  });
-
-  const emit = defineEmits(['change']);
-
-  const el = ref();
-  let editor: Nullable<CodeMirror.Editor>;
-
-  const debounceRefresh = useDebounceFn(refresh, 100);
-  const appStore = useAppStore();
-
-  watch(
-    () => props.value,
-    async (value) => {
-      await nextTick();
-      const oldValue = editor?.getValue();
-      if (value !== oldValue) {
-        editor?.setValue(value ? value : '');
-      }
-    },
-    { flush: 'post' }
-  );
-
-  watchEffect(() => {
-    editor?.setOption('mode', props.mode);
-  });
-
-  watch(
-    () => appStore.getDarkMode,
-    async () => {
-      setTheme();
-    },
-    {
-      immediate: true,
-    }
-  );
-
-  function setTheme() {
-    unref(editor)?.setOption('theme', appStore.getDarkMode === 'light' ? 'idea' : 'material-palenight');
-  }
-
-  function refresh() {
-    editor?.refresh();
-  }
-
-  async function init() {
-    const addonOptions = {
-      autoCloseBrackets: true,
-      autoCloseTags: true,
-      foldGutter: true,
-      gutters: ['CodeMirror-linenumbers'],
-    };
-
-    editor = CodeMirror(el.value!, {
-      value: '',
-      mode: props.mode,
-      readOnly: props.readonly,
-      tabSize: 2,
-      theme: 'material-palenight',
-      lineWrapping: true,
-      lineNumbers: true,
-      ...addonOptions,
-    });
-    editor?.setValue(props.value);
-    setTheme();
-    editor?.on('change', () => {
-      emit('change', editor?.getValue());
-    });
-  }
-
-  onMounted(async () => {
-    await nextTick();
-    init();
-    useWindowSizeFn(debounceRefresh);
-  });
-
-  onUnmounted(() => {
-    editor = null;
-  });
-</script>
diff --git a/src/components/CodeEditor/src/codemirror/codeMirror.ts b/src/components/CodeEditor/src/codemirror/codeMirror.ts
deleted file mode 100644
index e04f51b..0000000
--- a/src/components/CodeEditor/src/codemirror/codeMirror.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import CodeMirror from 'codemirror';
-import './codemirror.css';
-import 'codemirror/theme/idea.css';
-import 'codemirror/theme/material-palenight.css';
-// import 'codemirror/addon/lint/lint.css';
-
-// modes
-import 'codemirror/mode/javascript/javascript';
-import 'codemirror/mode/css/css';
-import 'codemirror/mode/htmlmixed/htmlmixed';
-// addons
-// import 'codemirror/addon/edit/closebrackets';
-// import 'codemirror/addon/edit/closetag';
-// import 'codemirror/addon/comment/comment';
-// import 'codemirror/addon/fold/foldcode';
-// import 'codemirror/addon/fold/foldgutter';
-// import 'codemirror/addon/fold/brace-fold';
-// import 'codemirror/addon/fold/indent-fold';
-// import 'codemirror/addon/lint/json-lint';
-// import 'codemirror/addon/fold/comment-fold';
-export { CodeMirror };
diff --git a/src/components/CodeEditor/src/codemirror/codemirror.css b/src/components/CodeEditor/src/codemirror/codemirror.css
deleted file mode 100644
index dc7c681..0000000
--- a/src/components/CodeEditor/src/codemirror/codemirror.css
+++ /dev/null
@@ -1,539 +0,0 @@
-/* BASICS */
-
-.CodeMirror {
-  --base: #545281;
-  --comment: hsl(210, 25%, 60%);
-  --keyword: #af4ab1;
-  --variable: #0055d1;
-  --function: #c25205;
-  --string: #2ba46d;
-  --number: #c25205;
-  --tags: #d00;
-  --qualifier: #ff6032;
-  --important: var(--string);
-
-  position: relative;
-  height: auto;
-  height: 100%;
-  overflow: hidden;
-  font-family: var(--font-code);
-  background: white;
-  direction: ltr;
-}
-
-/* PADDING */
-
-.CodeMirror-lines {
-  min-height: 1px; /* prevents collapsing before first draw */
-  padding: 4px 0; /* Vertical padding around content */
-  cursor: text;
-}
-
-.CodeMirror-scrollbar-filler,
-.CodeMirror-gutter-filler {
-  background-color: white; /* The little square between H and V scrollbars */
-}
-
-/* GUTTER */
-
-.CodeMirror-gutters {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: 3;
-  min-height: 100%;
-  white-space: nowrap;
-  background-color: transparent;
-  border-right: 1px solid #ddd;
-}
-
-.CodeMirror-linenumber {
-  min-width: 20px;
-  padding: 0 3px 0 5px;
-  color: var(--comment);
-  text-align: right;
-  white-space: nowrap;
-  opacity: 0.6;
-}
-
-.CodeMirror-guttermarker {
-  color: black;
-}
-
-.CodeMirror-guttermarker-subtle {
-  color: #999;
-}
-
-/* FOLD GUTTER */
-
-.CodeMirror-foldmarker {
-  font-family: arial;
-  line-height: 0.3;
-  color: #414141;
-  text-shadow: #f96 1px 1px 2px, #f96 -1px -1px 2px, #f96 1px -1px 2px, #f96 -1px 1px 2px;
-  cursor: pointer;
-}
-
-.CodeMirror-foldgutter {
-  width: 0.7em;
-}
-
-.CodeMirror-foldgutter-open,
-.CodeMirror-foldgutter-folded {
-  cursor: pointer;
-}
-
-.CodeMirror-foldgutter-open::after,
-.CodeMirror-foldgutter-folded::after {
-  position: relative;
-  top: -0.1em;
-  display: inline-block;
-  font-size: 0.8em;
-  content: '>';
-  opacity: 0.8;
-  transform: rotate(90deg);
-  transition: transform 0.2s;
-}
-
-.CodeMirror-foldgutter-folded::after {
-  transform: none;
-}
-
-/* CURSOR */
-
-.CodeMirror-cursor {
-  position: absolute;
-  width: 0;
-  pointer-events: none;
-  border-right: none;
-  border-left: 1px solid black;
-}
-
-/* Shown when moving in bi-directional text */
-.CodeMirror div.CodeMirror-secondarycursor {
-  border-left: 1px solid silver;
-}
-
-.cm-fat-cursor .CodeMirror-cursor {
-  width: auto;
-  background: #7e7;
-  border: 0 !important;
-}
-
-.cm-fat-cursor div.CodeMirror-cursors {
-  z-index: 1;
-}
-
-.cm-fat-cursor-mark {
-  background-color: rgba(20, 255, 20, 0.5);
-  -webkit-animation: blink 1.06s steps(1) infinite;
-  -moz-animation: blink 1.06s steps(1) infinite;
-  animation: blink 1.06s steps(1) infinite;
-}
-
-.cm-animate-fat-cursor {
-  width: auto;
-  background-color: #7e7;
-  border: 0;
-  -webkit-animation: blink 1.06s steps(1) infinite;
-  -moz-animation: blink 1.06s steps(1) infinite;
-  animation: blink 1.06s steps(1) infinite;
-}
-@-moz-keyframes blink {
-  50% {
-    background-color: transparent;
-  }
-}
-@-webkit-keyframes blink {
-  50% {
-    background-color: transparent;
-  }
-}
-@keyframes blink {
-  50% {
-    background-color: transparent;
-  }
-}
-
-.cm-tab {
-  display: inline-block;
-  text-decoration: inherit;
-}
-
-.CodeMirror-rulers {
-  position: absolute;
-  top: -50px;
-  right: 0;
-  bottom: -20px;
-  left: 0;
-  overflow: hidden;
-}
-
-.CodeMirror-ruler {
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  border-left: 1px solid #ccc;
-}
-
-/* DEFAULT THEME */
-.cm-s-default.CodeMirror {
-  background-color: transparent;
-}
-
-.cm-s-default .cm-header {
-  color: blue;
-}
-
-.cm-s-default .cm-quote {
-  color: #090;
-}
-
-.cm-negative {
-  color: #d44;
-}
-
-.cm-positive {
-  color: #292;
-}
-
-.cm-header,
-.cm-strong {
-  font-weight: bold;
-}
-
-.cm-em {
-  font-style: italic;
-}
-
-.cm-link {
-  text-decoration: underline;
-}
-
-.cm-strikethrough {
-  text-decoration: line-through;
-}
-
-.cm-s-default .cm-atom,
-.cm-s-default .cm-def,
-.cm-s-default .cm-property,
-.cm-s-default .cm-variable-2,
-.cm-s-default .cm-variable-3,
-.cm-s-default .cm-punctuation {
-  color: var(--base);
-}
-
-.cm-s-default .cm-hr,
-.cm-s-default .cm-comment {
-  color: var(--comment);
-}
-
-.cm-s-default .cm-attribute,
-.cm-s-default .cm-keyword {
-  color: var(--keyword);
-}
-
-.cm-s-default .cm-variable {
-  color: var(--variable);
-}
-
-.cm-s-default .cm-bracket,
-.cm-s-default .cm-tag {
-  color: var(--tags);
-}
-
-.cm-s-default .cm-number {
-  color: var(--number);
-}
-
-.cm-s-default .cm-string,
-.cm-s-default .cm-string-2 {
-  color: var(--string);
-}
-
-.cm-s-default .cm-type {
-  color: #085;
-}
-
-.cm-s-default .cm-meta {
-  color: #555;
-}
-
-.cm-s-default .cm-qualifier {
-  color: var(--qualifier);
-}
-
-.cm-s-default .cm-builtin {
-  color: #7539ff;
-}
-
-.cm-s-default .cm-link {
-  color: var(--flash);
-}
-
-.cm-s-default .cm-error {
-  color: #ff008c;
-}
-
-.cm-invalidchar {
-  color: #ff008c;
-}
-
-.CodeMirror-composing {
-  border-bottom: 2px solid;
-}
-
-/* Default styles for common addons */
-
-div.CodeMirror span.CodeMirror-matchingbracket {
-  color: #0b0;
-}
-
-div.CodeMirror span.CodeMirror-nonmatchingbracket {
-  color: #a22;
-}
-
-.CodeMirror-matchingtag {
-  background: rgba(255, 150, 0, 0.3);
-}
-
-.CodeMirror-activeline-background {
-  background: #e8f2ff;
-}
-
-/* STOP */
-
-/* The rest of this file contains styles related to the mechanics of
-   the editor. You probably shouldn't touch them. */
-
-.CodeMirror-scroll {
-  position: relative;
-  height: 100%;
-  padding-bottom: 30px;
-  margin-right: -30px;
-
-  /* 30px is the magic margin used to hide the element's real scrollbars */
-
-  /* See overflow: hidden in .CodeMirror */
-  margin-bottom: -30px;
-  overflow: scroll !important; /* Things will break if this is overridden */
-  outline: none; /* Prevent dragging from highlighting the element */
-}
-
-.CodeMirror-sizer {
-  position: relative;
-  margin-bottom: 20px !important;
-  border-right: 30px solid transparent;
-}
-
-/* The fake, visible scrollbars. Used to force redraw during scrolling
-   before actual scrolling happens, thus preventing shaking and
-   flickering artifacts. */
-.CodeMirror-vscrollbar,
-.CodeMirror-hscrollbar,
-.CodeMirror-scrollbar-filler,
-.CodeMirror-gutter-filler {
-  position: absolute;
-  z-index: 6;
-  display: none;
-}
-
-.CodeMirror-vscrollbar {
-  top: 0;
-  right: 0;
-  overflow-x: hidden;
-  overflow-y: scroll;
-}
-
-.CodeMirror-hscrollbar {
-  bottom: 0;
-  left: 0;
-  overflow-x: scroll;
-  overflow-y: hidden;
-}
-
-.CodeMirror-scrollbar-filler {
-  right: 0;
-  bottom: 0;
-}
-
-.CodeMirror-gutter-filler {
-  bottom: 0;
-  left: 0;
-}
-
-.CodeMirror-gutter {
-  display: inline-block;
-  height: 100%;
-  margin-bottom: -30px;
-  white-space: normal;
-  vertical-align: top;
-}
-
-.CodeMirror-gutter-wrapper {
-  position: absolute;
-  z-index: 4;
-  background: none !important;
-  border: none !important;
-}
-
-.CodeMirror-gutter-background {
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  z-index: 4;
-}
-
-.CodeMirror-gutter-elt {
-  position: absolute;
-  z-index: 4;
-  cursor: default;
-}
-
-.CodeMirror-gutter-wrapper ::selection {
-  background-color: transparent;
-}
-
-.CodeMirror-gutter-wrapper ::-moz-selection {
-  background-color: transparent;
-}
-
-.CodeMirror pre {
-  position: relative;
-  z-index: 2;
-  padding: 0 4px; /* Horizontal padding of content */
-  margin: 0;
-  overflow: visible;
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-  color: inherit;
-  word-wrap: normal;
-  white-space: pre;
-  background: transparent;
-  border-width: 0;
-
-  /* Reset some styles that the rest of the page might have set */
-  -moz-border-radius: 0;
-  -webkit-border-radius: 0;
-  border-radius: 0;
-  -webkit-tap-highlight-color: transparent;
-  -webkit-font-variant-ligatures: contextual;
-  font-variant-ligatures: contextual;
-}
-
-.CodeMirror-wrap pre {
-  word-break: normal;
-  word-wrap: break-word;
-  white-space: pre-wrap;
-}
-
-.CodeMirror-linebackground {
-  position: absolute;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 0;
-}
-
-.CodeMirror-linewidget {
-  position: relative;
-  z-index: 2;
-  padding: 0.1px; /* Force widget margins to stay inside of the container */
-}
-
-.CodeMirror-rtl pre {
-  direction: rtl;
-}
-
-.CodeMirror-code {
-  outline: none;
-}
-
-/* Force content-box sizing for the elements where we expect it */
-.CodeMirror-scroll,
-.CodeMirror-sizer,
-.CodeMirror-gutter,
-.CodeMirror-gutters,
-.CodeMirror-linenumber {
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-}
-
-.CodeMirror-measure {
-  position: absolute;
-  width: 100%;
-  height: 0;
-  overflow: hidden;
-  visibility: hidden;
-}
-
-.CodeMirror-measure pre {
-  position: static;
-}
-
-div.CodeMirror-cursors {
-  position: relative;
-  z-index: 3;
-  visibility: hidden;
-}
-
-div.CodeMirror-dragcursors {
-  visibility: visible;
-}
-
-.CodeMirror-focused div.CodeMirror-cursors {
-  visibility: visible;
-}
-
-.CodeMirror-selected {
-  background: #d9d9d9;
-}
-
-.CodeMirror-focused .CodeMirror-selected {
-  background: #d7d4f0;
-}
-
-.CodeMirror-crosshair {
-  cursor: crosshair;
-}
-
-.CodeMirror-line::selection,
-.CodeMirror-line > span::selection,
-.CodeMirror-line > span > span::selection {
-  background: #d7d4f0;
-}
-
-.CodeMirror-line::-moz-selection,
-.CodeMirror-line > span::-moz-selection,
-.CodeMirror-line > span > span::-moz-selection {
-  background: #d7d4f0;
-}
-
-.cm-searching {
-  background-color: #ffa;
-  background-color: rgba(255, 255, 0, 0.4);
-}
-
-/* Used to force a border model for a node */
-.cm-force-border {
-  padding-right: 0.1px;
-}
-
-@media print {
-  /* Hide the cursor when printing */
-  .CodeMirror div.CodeMirror-cursors {
-    visibility: hidden;
-  }
-}
-
-/* See issue #2901 */
-.cm-tab-wrap-hack::after {
-  content: '';
-}
-
-/* Help users use markselection to safely style text background */
-span.CodeMirror-selectedtext {
-  background: none;
-}
diff --git a/src/components/CodeEditor/src/json-preview/JsonPreview.vue b/src/components/CodeEditor/src/json-preview/JsonPreview.vue
deleted file mode 100644
index 75890c3..0000000
--- a/src/components/CodeEditor/src/json-preview/JsonPreview.vue
+++ /dev/null
@@ -1,12 +0,0 @@
-<template>
-  <vue-json-pretty :path="'res'" :deep="3" :showLength="true" :data="data" />
-</template>
-
-<script lang="ts" setup>
-  import VueJsonPretty from 'vue-json-pretty';
-  import 'vue-json-pretty/lib/styles.css';
-
-  defineProps({
-    data: Object,
-  });
-</script>
diff --git a/src/components/CodeEditor/src/typing.ts b/src/components/CodeEditor/src/typing.ts
deleted file mode 100644
index 34b5ed1..0000000
--- a/src/components/CodeEditor/src/typing.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export enum MODE {
-  JSON = 'application/json',
-  HTML = 'htmlmixed',
-  JS = 'javascript',
-}
diff --git a/src/components/Container/index.ts b/src/components/Container/index.ts
deleted file mode 100644
index e1230a0..0000000
--- a/src/components/Container/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { withInstall } from '/@/utils';
-import collapseContainer from './src/collapse/CollapseContainer.vue';
-import scrollContainer from './src/ScrollContainer.vue';
-import lazyContainer from './src/LazyContainer.vue';
-
-export const CollapseContainer = withInstall(collapseContainer);
-export const ScrollContainer = withInstall(scrollContainer);
-export const LazyContainer = withInstall(lazyContainer);
-
-export * from './src/typing';
diff --git a/src/components/Container/src/LazyContainer.vue b/src/components/Container/src/LazyContainer.vue
deleted file mode 100644
index 4e26242..0000000
--- a/src/components/Container/src/LazyContainer.vue
+++ /dev/null
@@ -1,138 +0,0 @@
-<template>
-  <transition-group class="h-full w-full" v-bind="$attrs" ref="elRef" :name="transitionName" :tag="tag" mode="out-in">
-    <div key="component" v-if="isInit">
-      <slot :loading="loading"></slot>
-    </div>
-    <div key="skeleton" v-else>
-      <slot name="skeleton" v-if="$slots.skeleton"></slot>
-      <Skeleton v-else />
-    </div>
-  </transition-group>
-</template>
-<script lang="ts">
-  import type { PropType } from 'vue';
-  import { defineComponent, reactive, onMounted, ref, toRef, toRefs } from 'vue';
-  import { Skeleton } from 'ant-design-vue';
-  import { useTimeoutFn } from '/@/hooks/core/useTimeout';
-  import { useIntersectionObserver } from '/@/hooks/event/useIntersectionObserver';
-
-  interface State {
-    isInit: boolean;
-    loading: boolean;
-    intersectionObserverInstance: IntersectionObserver | null;
-  }
-
-  const props = {
-    /**
-     * Waiting time, if the time is specified, whether visible or not, it will be automatically loaded after the specified time
-     */
-    timeout: { type: Number },
-    /**
-     * The viewport where the component is located.
-     * If the component is scrolling in the page container, the viewport is the container
-     */
-    viewport: {
-      type: (typeof window !== 'undefined' ? window.HTMLElement : Object) as PropType<HTMLElement>,
-      default: () => null,
-    },
-    /**
-     * Preload threshold, css unit
-     */
-    threshold: { type: String, default: '0px' },
-    /**
-     * The scroll direction of the viewport, vertical represents the vertical direction, horizontal represents the horizontal direction
-     */
-    direction: {
-      type: String,
-      default: 'vertical',
-      validator: (v) => ['vertical', 'horizontal'].includes(v),
-    },
-    /**
-     * The label name of the outer container that wraps the component
-     */
-    tag: { type: String, default: 'div' },
-    maxWaitingTime: { type: Number, default: 80 },
-    /**
-     * transition name
-     */
-    transitionName: { type: String, default: 'lazy-container' },
-  };
-
-  export default defineComponent({
-    name: 'LazyContainer',
-    components: { Skeleton },
-    inheritAttrs: false,
-    props,
-    emits: ['init'],
-    setup(props, { emit }) {
-      const elRef = ref();
-      const state = reactive<State>({
-        isInit: false,
-        loading: false,
-        intersectionObserverInstance: null,
-      });
-
-      onMounted(() => {
-        immediateInit();
-        initIntersectionObserver();
-      });
-
-      // If there is a set delay time, it will be executed immediately
-      function immediateInit() {
-        const { timeout } = props;
-        timeout &&
-          useTimeoutFn(() => {
-            init();
-          }, timeout);
-      }
-
-      function init() {
-        state.loading = true;
-
-        useTimeoutFn(() => {
-          if (state.isInit) return;
-          state.isInit = true;
-          emit('init');
-        }, props.maxWaitingTime || 80);
-      }
-
-      function initIntersectionObserver() {
-        const { timeout, direction, threshold } = props;
-        if (timeout) return;
-        // According to the scrolling direction to construct the viewport margin, used to load in advance
-        let rootMargin = '0px';
-        switch (direction) {
-          case 'vertical':
-            rootMargin = `${threshold} 0px`;
-            break;
-          case 'horizontal':
-            rootMargin = `0px ${threshold}`;
-            break;
-        }
-
-        try {
-          const { stop, observer } = useIntersectionObserver({
-            rootMargin,
-            target: toRef(elRef.value, '$el'),
-            onIntersect: (entries: any[]) => {
-              const isIntersecting = entries[0].isIntersecting || entries[0].intersectionRatio;
-              if (isIntersecting) {
-                init();
-                if (observer) {
-                  stop();
-                }
-              }
-            },
-            root: toRef(props, 'viewport'),
-          });
-        } catch (e) {
-          init();
-        }
-      }
-      return {
-        elRef,
-        ...toRefs(state),
-      };
-    },
-  });
-</script>
diff --git a/src/components/Container/src/ScrollContainer.vue b/src/components/Container/src/ScrollContainer.vue
deleted file mode 100644
index 65c71ed..0000000
--- a/src/components/Container/src/ScrollContainer.vue
+++ /dev/null
@@ -1,93 +0,0 @@
-<template>
-  <Scrollbar ref="scrollbarRef" class="scroll-container" v-bind="$attrs">
-    <slot></slot>
-  </Scrollbar>
-</template>
-
-<script lang="ts">
-  import { defineComponent, ref, unref, nextTick } from 'vue';
-  import { Scrollbar, ScrollbarType } from '/@/components/Scrollbar';
-  import { useScrollTo } from '/@/hooks/event/useScrollTo';
-
-  export default defineComponent({
-    name: 'ScrollContainer',
-    components: { Scrollbar },
-    setup() {
-      const scrollbarRef = ref<Nullable<ScrollbarType>>(null);
-
-      /**
-       * Scroll to the specified position
-       */
-      function scrollTo(to: number, duration = 500) {
-        const scrollbar = unref(scrollbarRef);
-        if (!scrollbar) {
-          return;
-        }
-        nextTick(() => {
-          const wrap = unref(scrollbar.wrap);
-          if (!wrap) {
-            return;
-          }
-          const { start } = useScrollTo({
-            el: wrap,
-            to,
-            duration,
-          });
-          start();
-        });
-      }
-
-      function getScrollWrap() {
-        const scrollbar = unref(scrollbarRef);
-        if (!scrollbar) {
-          return null;
-        }
-        return scrollbar.wrap;
-      }
-
-      /**
-       * Scroll to the bottom
-       */
-      function scrollBottom() {
-        const scrollbar = unref(scrollbarRef);
-        if (!scrollbar) {
-          return;
-        }
-        nextTick(() => {
-          const wrap = unref(scrollbar.wrap) as any;
-          if (!wrap) {
-            return;
-          }
-          const scrollHeight = wrap.scrollHeight as number;
-          const { start } = useScrollTo({
-            el: wrap,
-            to: scrollHeight,
-          });
-          start();
-        });
-      }
-
-      return {
-        scrollbarRef,
-        scrollTo,
-        scrollBottom,
-        getScrollWrap,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  .scroll-container {
-    width: 100%;
-    height: 100%;
-
-    .scrollbar__wrap {
-      margin-bottom: 18px !important;
-      overflow-x: hidden;
-    }
-
-    .scrollbar__view {
-      box-sizing: border-box;
-    }
-  }
-</style>
diff --git a/src/components/Container/src/collapse/CollapseContainer.vue b/src/components/Container/src/collapse/CollapseContainer.vue
deleted file mode 100644
index 4b629f2..0000000
--- a/src/components/Container/src/collapse/CollapseContainer.vue
+++ /dev/null
@@ -1,105 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <CollapseHeader v-bind="$props" :prefixCls="prefixCls" :show="show" @expand="handleExpand">
-      <template #title>
-        <slot name="title"></slot>
-      </template>
-      <template #action>
-        <slot name="action"></slot>
-      </template>
-    </CollapseHeader>
-
-    <div class="p-2">
-      <CollapseTransition :enable="canExpan">
-        <Skeleton v-if="loading" :active="loading" />
-        <div :class="`${prefixCls}__body`" v-else v-show="show">
-          <slot></slot>
-        </div>
-      </CollapseTransition>
-    </div>
-    <div :class="`${prefixCls}__footer`" v-if="$slots.footer">
-      <slot name="footer"></slot>
-    </div>
-  </div>
-</template>
-<script lang="ts" setup>
-  import type { PropType } from 'vue';
-  import { ref } from 'vue';
-  // component
-  import { Skeleton } from 'ant-design-vue';
-  import { CollapseTransition } from '/@/components/Transition';
-  import CollapseHeader from './CollapseHeader.vue';
-  import { triggerWindowResize } from '/@/utils/event';
-  // hook
-  import { useTimeoutFn } from '/@/hooks/core/useTimeout';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  const props = defineProps({
-    title: { type: String, default: '' },
-    loading: { type: Boolean },
-    /**
-     *  Can it be expanded
-     */
-    canExpan: { type: Boolean, default: true },
-    /**
-     * Warm reminder on the right side of the title
-     */
-    helpMessage: {
-      type: [Array, String] as PropType<string[] | string>,
-      default: '',
-    },
-    /**
-     * Whether to trigger window.resize when expanding and contracting,
-     * Can adapt to tables and forms, when the form shrinks, the form triggers resize to adapt to the height
-     */
-    triggerWindowResize: { type: Boolean },
-    /**
-     * Delayed loading time
-     */
-    lazyTime: { type: Number, default: 0 },
-  });
-
-  const show = ref(true);
-
-  const { prefixCls } = useDesign('collapse-container');
-
-  /**
-   * @description: Handling development events
-   */
-  function handleExpand() {
-    show.value = !show.value;
-    if (props.triggerWindowResize) {
-      // 200 milliseconds here is because the expansion has animation,
-      useTimeoutFn(triggerWindowResize, 200);
-    }
-  }
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-collapse-container';
-
-  .@{prefix-cls} {
-    background-color: @component-background;
-    border-radius: 2px;
-    transition: all 0.3s ease-in-out;
-
-    &__header {
-      display: flex;
-      height: 32px;
-      justify-content: space-between;
-      align-items: center;
-      border-bottom: 1px solid @border-color-light;
-    }
-
-    &__footer {
-      border-top: 1px solid @border-color-light;
-    }
-
-    &__action {
-      display: flex;
-      text-align: right;
-      flex: 1;
-      align-items: center;
-      justify-content: flex-end;
-    }
-  }
-</style>
diff --git a/src/components/Container/src/collapse/CollapseHeader.vue b/src/components/Container/src/collapse/CollapseHeader.vue
deleted file mode 100644
index 4196c0a..0000000
--- a/src/components/Container/src/collapse/CollapseHeader.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-<template>
-  <div :class="[`${prefixCls}__header px-2 py-5`, $attrs.class]">
-    <BasicTitle :helpMessage="helpMessage" normal>
-      <template v-if="title">
-        {{ title }}
-      </template>
-      <template v-else>
-        <slot name="title"></slot>
-      </template>
-    </BasicTitle>
-    <div :class="`${prefixCls}__action`">
-      <slot name="action"></slot>
-      <BasicArrow v-if="canExpan" up :expand="show" @click="$emit('expand')" />
-    </div>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicArrow, BasicTitle } from '/@/components/Basic';
-
-  const props = {
-    prefixCls: { type: String },
-    helpMessage: {
-      type: [Array, String] as PropType<string[] | string>,
-      default: '',
-    },
-    title: { type: String },
-    show: { type: Boolean },
-    canExpan: { type: Boolean },
-  };
-
-  export default defineComponent({
-    components: { BasicArrow, BasicTitle },
-    inheritAttrs: false,
-    props,
-    emits: ['expand'],
-  });
-</script>
diff --git a/src/components/Container/src/typing.ts b/src/components/Container/src/typing.ts
deleted file mode 100644
index 86c03be..0000000
--- a/src/components/Container/src/typing.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export type ScrollType = 'default' | 'main';
-
-export interface CollapseContainerOptions {
-  canExpand?: boolean;
-  title?: string;
-  helpMessage?: Array<any> | string;
-}
-export interface ScrollContainerOptions {
-  enableScroll?: boolean;
-  type?: ScrollType;
-}
-
-export type ScrollActionType = RefType<{
-  scrollBottom: () => void;
-  getScrollWrap: () => Nullable<HTMLElement>;
-  scrollTo: (top: number) => void;
-}>;
diff --git a/src/components/ContextMenu/index.ts b/src/components/ContextMenu/index.ts
deleted file mode 100644
index ed294d7..0000000
--- a/src/components/ContextMenu/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export { createContextMenu, destroyContextMenu } from './src/createContextMenu';
-
-export * from './src/typing';
diff --git a/src/components/ContextMenu/src/ContextMenu.vue b/src/components/ContextMenu/src/ContextMenu.vue
deleted file mode 100644
index 8f400fb..0000000
--- a/src/components/ContextMenu/src/ContextMenu.vue
+++ /dev/null
@@ -1,196 +0,0 @@
-<script lang="tsx">
-  import type { ContextMenuItem, ItemContentProps, Axis } from './typing';
-  import type { FunctionalComponent, CSSProperties } from 'vue';
-  import { defineComponent, nextTick, onMounted, computed, ref, unref, onUnmounted } from 'vue';
-  import Icon from '/@/components/Icon';
-  import { Menu, Divider } from 'ant-design-vue';
-
-  const prefixCls = 'context-menu';
-
-  const props = {
-    width: { type: Number, default: 156 },
-    customEvent: { type: Object as PropType<Event>, default: null },
-    styles: { type: Object as PropType<CSSProperties> },
-    showIcon: { type: Boolean, default: true },
-    axis: {
-      // The position of the right mouse button click
-      type: Object as PropType<Axis>,
-      default() {
-        return { x: 0, y: 0 };
-      },
-    },
-    items: {
-      // The most important list, if not, will not be displayed
-      type: Array as PropType<ContextMenuItem[]>,
-      default() {
-        return [];
-      },
-    },
-  };
-
-  const ItemContent: FunctionalComponent<ItemContentProps> = (props) => {
-    const { item } = props;
-    return (
-      <span style="display: inline-block; width: 100%; " class="px-4" onClick={props.handler.bind(null, item)}>
-        {props.showIcon && item.icon && <Icon class="mr-2" icon={item.icon} />}
-        <span>{item.label}</span>
-      </span>
-    );
-  };
-
-  export default defineComponent({
-    name: 'ContextMenu',
-    props,
-    setup(props) {
-      const wrapRef = ref(null);
-      const showRef = ref(false);
-
-      const getStyle = computed((): CSSProperties => {
-        const { axis, items, styles, width } = props;
-        const { x, y } = axis || { x: 0, y: 0 };
-        const menuHeight = (items || []).length * 40;
-        const menuWidth = width;
-        const body = document.body;
-
-        const left = body.clientWidth < x + menuWidth ? x - menuWidth : x;
-        const top = body.clientHeight < y + menuHeight ? y - menuHeight : y;
-        return {
-          ...styles,
-          width: `${width}px`,
-          left: `${left + 1}px`,
-          top: `${top + 1}px`,
-        };
-      });
-
-      onMounted(() => {
-        nextTick(() => (showRef.value = true));
-      });
-
-      onUnmounted(() => {
-        const el = unref(wrapRef);
-        el && document.body.removeChild(el);
-      });
-
-      function handleAction(item: ContextMenuItem, e: MouseEvent) {
-        const { handler, disabled } = item;
-        if (disabled) {
-          return;
-        }
-        showRef.value = false;
-        e?.stopPropagation();
-        e?.preventDefault();
-        handler?.();
-      }
-
-      function renderMenuItem(items: ContextMenuItem[]) {
-        return items.map((item) => {
-          const { disabled, label, children, divider = false } = item;
-
-          const contentProps = {
-            item,
-            handler: handleAction,
-            showIcon: props.showIcon,
-          };
-
-          if (!children || children.length === 0) {
-            return (
-              <>
-                <Menu.Item disabled={disabled} class={`${prefixCls}__item`} key={label}>
-                  <ItemContent {...contentProps} />
-                </Menu.Item>
-                {divider ? <Divider key={`d-${label}`} /> : null}
-              </>
-            );
-          }
-          if (!unref(showRef)) return null;
-
-          return (
-            <Menu.SubMenu key={label} disabled={disabled} popupClassName={`${prefixCls}__popup`}>
-              {{
-                title: () => <ItemContent {...contentProps} />,
-                default: () => renderMenuItem(children),
-              }}
-            </Menu.SubMenu>
-          );
-        });
-      }
-      return () => {
-        if (!unref(showRef)) {
-          return null;
-        }
-        const { items } = props;
-        return (
-          <Menu inlineIndent={12} mode="vertical" class={prefixCls} ref={wrapRef} style={unref(getStyle)}>
-            {renderMenuItem(items)}
-          </Menu>
-        );
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @default-height: 42px !important;
-
-  @small-height: 36px !important;
-
-  @large-height: 36px !important;
-
-  .item-style() {
-    li {
-      display: inline-block;
-      width: 100%;
-      height: @default-height;
-      margin: 0 !important;
-      line-height: @default-height;
-
-      span {
-        line-height: @default-height;
-      }
-
-      > div {
-        margin: 0 !important;
-      }
-
-      &:not(.ant-menu-item-disabled):hover {
-        color: @text-color-base;
-        background-color: @item-hover-bg;
-      }
-    }
-  }
-
-  .context-menu {
-    position: fixed;
-    top: 0;
-    left: 0;
-    z-index: 200;
-    display: block;
-    width: 156px;
-    margin: 0;
-    list-style: none;
-    background-color: @component-background;
-    border: 1px solid rgba(0, 0, 0, 0.08);
-    border-radius: 0.25rem;
-    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.1), 0 1px 5px 0 rgba(0, 0, 0, 0.06);
-    background-clip: padding-box;
-    user-select: none;
-
-    .item-style();
-
-    .ant-divider {
-      margin: 0 0;
-    }
-
-    &__popup {
-      .ant-divider {
-        margin: 0 0;
-      }
-
-      .item-style();
-    }
-
-    .ant-menu-submenu-title,
-    .ant-menu-item {
-      padding: 0 !important;
-    }
-  }
-</style>
diff --git a/src/components/ContextMenu/src/createContextMenu.ts b/src/components/ContextMenu/src/createContextMenu.ts
deleted file mode 100644
index 8f7a1c8..0000000
--- a/src/components/ContextMenu/src/createContextMenu.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import contextMenuVue from './ContextMenu.vue';
-import { isClient } from '/@/utils/is';
-import { CreateContextOptions, ContextMenuProps } from './typing';
-import { createVNode, render } from 'vue';
-
-const menuManager: {
-  domList: Element[];
-  resolve: Fn;
-} = {
-  domList: [],
-  resolve: () => {},
-};
-
-export const createContextMenu = function (options: CreateContextOptions) {
-  const { event } = options || {};
-
-  event && event?.preventDefault();
-
-  if (!isClient) {
-    return;
-  }
-  return new Promise((resolve) => {
-    const body = document.body;
-
-    const container = document.createElement('div');
-    const propsData: Partial<ContextMenuProps> = {};
-    if (options.styles) {
-      propsData.styles = options.styles;
-    }
-
-    if (options.items) {
-      propsData.items = options.items;
-    }
-
-    if (options.event) {
-      propsData.customEvent = event;
-      propsData.axis = { x: event.clientX, y: event.clientY };
-    }
-
-    const vm = createVNode(contextMenuVue, propsData);
-    render(vm, container);
-
-    const handleClick = function () {
-      menuManager.resolve('');
-    };
-
-    menuManager.domList.push(container);
-
-    const remove = function () {
-      menuManager.domList.forEach((dom: Element) => {
-        try {
-          dom && body.removeChild(dom);
-        } catch (error) {}
-      });
-      body.removeEventListener('click', handleClick);
-      body.removeEventListener('scroll', handleClick);
-    };
-
-    menuManager.resolve = function (arg) {
-      remove();
-      resolve(arg);
-    };
-    remove();
-    body.appendChild(container);
-    body.addEventListener('click', handleClick);
-    body.addEventListener('scroll', handleClick);
-  });
-};
-
-export const destroyContextMenu = function () {
-  if (menuManager) {
-    menuManager.resolve('');
-    menuManager.domList = [];
-  }
-};
diff --git a/src/components/ContextMenu/src/typing.ts b/src/components/ContextMenu/src/typing.ts
deleted file mode 100644
index 899d36b..0000000
--- a/src/components/ContextMenu/src/typing.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-export interface Axis {
-  x: number;
-  y: number;
-}
-
-export interface ContextMenuItem {
-  label: string;
-  icon?: string;
-  disabled?: boolean;
-  handler?: Fn;
-  divider?: boolean;
-  children?: ContextMenuItem[];
-}
-export interface CreateContextOptions {
-  event: MouseEvent;
-  icon?: string;
-  styles?: any;
-  items?: ContextMenuItem[];
-}
-
-export interface ContextMenuProps {
-  event?: MouseEvent;
-  styles?: any;
-  items: ContextMenuItem[];
-  customEvent?: MouseEvent;
-  axis?: Axis;
-  width?: number;
-  showIcon?: boolean;
-}
-
-export interface ItemContentProps {
-  showIcon: boolean | undefined;
-  item: ContextMenuItem;
-  handler: Fn;
-}
diff --git a/src/components/CountDown/index.ts b/src/components/CountDown/index.ts
deleted file mode 100644
index 9809416..0000000
--- a/src/components/CountDown/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { withInstall } from '/@/utils';
-import countButton from './src/CountButton.vue';
-import countdownInput from './src/CountdownInput.vue';
-
-export const CountdownInput = withInstall(countdownInput);
-export const CountButton = withInstall(countButton);
diff --git a/src/components/CountDown/src/CountButton.vue b/src/components/CountDown/src/CountButton.vue
deleted file mode 100644
index fd14900..0000000
--- a/src/components/CountDown/src/CountButton.vue
+++ /dev/null
@@ -1,60 +0,0 @@
-<template>
-  <Button v-bind="$attrs" :disabled="isStart" @click="handleStart" :loading="loading">
-    {{ getButtonText }}
-  </Button>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, watchEffect, computed, unref } from 'vue';
-  import { Button } from 'ant-design-vue';
-  import { useCountdown } from './useCountdown';
-  import { isFunction } from '/@/utils/is';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  const props = {
-    value: { type: [Object, Number, String, Array] },
-    count: { type: Number, default: 60 },
-    beforeStartFunc: {
-      type: Function as PropType<() => Promise<boolean>>,
-      default: null,
-    },
-  };
-
-  export default defineComponent({
-    name: 'CountButton',
-    components: { Button },
-    props,
-    setup(props) {
-      const loading = ref(false);
-
-      const { currentCount, isStart, start, reset } = useCountdown(props.count);
-      const { t } = useI18n();
-
-      const getButtonText = computed(() => {
-        return !unref(isStart) ? t('component.countdown.normalText') : t('component.countdown.sendText', [unref(currentCount)]);
-      });
-
-      watchEffect(() => {
-        props.value === undefined && reset();
-      });
-
-      /**
-       * @description: Judge whether there is an external function before execution, and decide whether to start after execution
-       */
-      async function handleStart() {
-        const { beforeStartFunc } = props;
-        if (beforeStartFunc && isFunction(beforeStartFunc)) {
-          loading.value = true;
-          try {
-            const canStart = await beforeStartFunc();
-            canStart && start();
-          } finally {
-            loading.value = false;
-          }
-        } else {
-          start();
-        }
-      }
-      return { handleStart, currentCount, loading, getButtonText, isStart };
-    },
-  });
-</script>
diff --git a/src/components/CountDown/src/CountdownInput.vue b/src/components/CountDown/src/CountdownInput.vue
deleted file mode 100644
index 8da89cd..0000000
--- a/src/components/CountDown/src/CountdownInput.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-<template>
-  <a-input v-bind="$attrs" :class="prefixCls" :size="size" :value="state">
-    <template #addonAfter>
-      <CountButton :size="size" :count="count" :value="state" :beforeStartFunc="sendCodeApi" />
-    </template>
-    <template #[item]="data" v-for="item in Object.keys($slots).filter((k) => k !== 'addonAfter')">
-      <slot :name="item" v-bind="data || {}"></slot>
-    </template>
-  </a-input>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType } from 'vue';
-  import CountButton from './CountButton.vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-
-  const props = {
-    value: { type: String },
-    size: { type: String, validator: (v) => ['default', 'large', 'small'].includes(v) },
-    count: { type: Number, default: 60 },
-    sendCodeApi: {
-      type: Function as PropType<() => Promise<boolean>>,
-      default: null,
-    },
-  };
-
-  export default defineComponent({
-    name: 'CountDownInput',
-    components: { CountButton },
-    inheritAttrs: false,
-    props,
-    setup(props) {
-      const { prefixCls } = useDesign('countdown-input');
-      const [state] = useRuleFormItem(props);
-
-      return { prefixCls, state };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-countdown-input';
-
-  .@{prefix-cls} {
-    .ant-input-group-addon {
-      padding-right: 0;
-      background-color: transparent;
-      border: none;
-
-      button {
-        font-size: 14px;
-      }
-    }
-  }
-</style>
diff --git a/src/components/CountDown/src/useCountdown.ts b/src/components/CountDown/src/useCountdown.ts
deleted file mode 100644
index 316d69a..0000000
--- a/src/components/CountDown/src/useCountdown.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { ref, unref } from 'vue';
-import { tryOnUnmounted } from '@vueuse/core';
-
-export function useCountdown(count: number) {
-  const currentCount = ref(count);
-
-  const isStart = ref(false);
-
-  let timerId: ReturnType<typeof setInterval> | null;
-
-  function clear() {
-    timerId && window.clearInterval(timerId);
-  }
-
-  function stop() {
-    isStart.value = false;
-    clear();
-    timerId = null;
-  }
-
-  function start() {
-    if (unref(isStart) || !!timerId) {
-      return;
-    }
-    isStart.value = true;
-    timerId = setInterval(() => {
-      if (unref(currentCount) === 1) {
-        stop();
-        currentCount.value = count;
-      } else {
-        currentCount.value -= 1;
-      }
-    }, 1000);
-  }
-
-  function reset() {
-    currentCount.value = count;
-    stop();
-  }
-
-  function restart() {
-    reset();
-    start();
-  }
-
-  tryOnUnmounted(() => {
-    reset();
-  });
-
-  return { start, reset, restart, clear, stop, currentCount, isStart };
-}
diff --git a/src/components/CountTo/index.ts b/src/components/CountTo/index.ts
deleted file mode 100644
index 36a4e65..0000000
--- a/src/components/CountTo/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { withInstall } from '/@/utils';
-import countTo from './src/CountTo.vue';
-
-export const CountTo = withInstall(countTo);
diff --git a/src/components/CountTo/src/CountTo.vue b/src/components/CountTo/src/CountTo.vue
deleted file mode 100644
index 7de3361..0000000
--- a/src/components/CountTo/src/CountTo.vue
+++ /dev/null
@@ -1,110 +0,0 @@
-<template>
-  <span :style="{ color }">
-    {{ value }}
-  </span>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, computed, watchEffect, unref, onMounted, watch } from 'vue';
-  import { useTransition, TransitionPresets } from '@vueuse/core';
-  import { isNumber } from '/@/utils/is';
-
-  const props = {
-    startVal: { type: Number, default: 0 },
-    endVal: { type: Number, default: 2021 },
-    duration: { type: Number, default: 1500 },
-    autoplay: { type: Boolean, default: true },
-    decimals: {
-      type: Number,
-      default: 0,
-      validator(value: number) {
-        return value >= 0;
-      },
-    },
-    prefix: { type: String, default: '' },
-    suffix: { type: String, default: '' },
-    separator: { type: String, default: ',' },
-    decimal: { type: String, default: '.' },
-    /**
-     * font color
-     */
-    color: { type: String },
-    /**
-     * Turn on digital animation
-     */
-    useEasing: { type: Boolean, default: true },
-    /**
-     * Digital animation
-     */
-    transition: { type: String, default: 'linear' },
-  };
-
-  export default defineComponent({
-    name: 'CountTo',
-    props,
-    emits: ['onStarted', 'onFinished'],
-    setup(props, { emit }) {
-      const source = ref(props.startVal);
-      const disabled = ref(false);
-      let outputValue = useTransition(source);
-
-      const value = computed(() => formatNumber(unref(outputValue)));
-
-      watchEffect(() => {
-        source.value = props.startVal;
-      });
-
-      watch([() => props.startVal, () => props.endVal], () => {
-        if (props.autoplay) {
-          start();
-        }
-      });
-
-      onMounted(() => {
-        props.autoplay && start();
-      });
-
-      function start() {
-        run();
-        source.value = props.endVal;
-      }
-
-      function reset() {
-        source.value = props.startVal;
-        run();
-      }
-
-      function run() {
-        outputValue = useTransition(source, {
-          disabled,
-          duration: props.duration,
-          onFinished: () => emit('onFinished'),
-          onStarted: () => emit('onStarted'),
-          ...(props.useEasing ? { transition: TransitionPresets[props.transition] } : {}),
-        });
-      }
-
-      function formatNumber(num: number | string) {
-        if (!num && num !== 0) {
-          return '';
-        }
-        const { decimals, decimal, separator, suffix, prefix } = props;
-        num = Number(num).toFixed(decimals);
-        num += '';
-
-        const x = num.split('.');
-        let x1 = x[0];
-        const x2 = x.length > 1 ? decimal + x[1] : '';
-
-        const rgx = /(\d+)(\d{3})/;
-        if (separator && !isNumber(separator)) {
-          while (rgx.test(x1)) {
-            x1 = x1.replace(rgx, '$1' + separator + '$2');
-          }
-        }
-        return prefix + x1 + x2 + suffix;
-      }
-
-      return { value, start, reset };
-    },
-  });
-</script>
diff --git a/src/components/Cropper/index.ts b/src/components/Cropper/index.ts
deleted file mode 100644
index 88d6d1d..0000000
--- a/src/components/Cropper/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { withInstall } from '/@/utils';
-import cropperImage from './src/Cropper.vue';
-import avatarCropper from './src/CropperAvatar.vue';
-
-export * from './src/typing';
-export const CropperImage = withInstall(cropperImage);
-export const CropperAvatar = withInstall(avatarCropper);
diff --git a/src/components/Cropper/src/CopperModal.vue b/src/components/Cropper/src/CopperModal.vue
deleted file mode 100644
index 33a6fef..0000000
--- a/src/components/Cropper/src/CopperModal.vue
+++ /dev/null
@@ -1,237 +0,0 @@
-<template>
-  <BasicModal
-    v-bind="$attrs"
-    @register="register"
-    :title="t('component.cropper.modalTitle')"
-    width="800px"
-    :canFullscreen="false"
-    @ok="handleOk"
-    :okText="t('component.cropper.okText')"
-  >
-    <div :class="prefixCls">
-      <div :class="`${prefixCls}-left`">
-        <div :class="`${prefixCls}-cropper`">
-          <CropperImage v-if="src" :src="src" height="300px" :circled="circled" @cropend="handleCropend" @ready="handleReady" />
-        </div>
-
-        <div :class="`${prefixCls}-toolbar`">
-          <Upload :fileList="[]" accept="image/*" :beforeUpload="handleBeforeUpload">
-            <Tooltip :title="t('component.cropper.selectImage')" placement="bottom">
-              <a-button size="small" preIcon="ant-design:upload-outlined" type="primary" />
-            </Tooltip>
-          </Upload>
-          <Space>
-            <Tooltip :title="t('component.cropper.btn_reset')" placement="bottom">
-              <a-button type="primary" preIcon="ant-design:reload-outlined" size="small" :disabled="!src" @click="handlerToolbar('reset')" />
-            </Tooltip>
-            <Tooltip :title="t('component.cropper.btn_rotate_left')" placement="bottom">
-              <a-button
-                type="primary"
-                preIcon="ant-design:rotate-left-outlined"
-                size="small"
-                :disabled="!src"
-                @click="handlerToolbar('rotate', -45)"
-              />
-            </Tooltip>
-            <Tooltip :title="t('component.cropper.btn_rotate_right')" placement="bottom">
-              <a-button
-                type="primary"
-                preIcon="ant-design:rotate-right-outlined"
-                size="small"
-                :disabled="!src"
-                @click="handlerToolbar('rotate', 45)"
-              />
-            </Tooltip>
-            <Tooltip :title="t('component.cropper.btn_scale_x')" placement="bottom">
-              <a-button type="primary" preIcon="vaadin:arrows-long-h" size="small" :disabled="!src" @click="handlerToolbar('scaleX')" />
-            </Tooltip>
-            <Tooltip :title="t('component.cropper.btn_scale_y')" placement="bottom">
-              <a-button type="primary" preIcon="vaadin:arrows-long-v" size="small" :disabled="!src" @click="handlerToolbar('scaleY')" />
-            </Tooltip>
-            <Tooltip :title="t('component.cropper.btn_zoom_in')" placement="bottom">
-              <a-button type="primary" preIcon="ant-design:zoom-in-outlined" size="small" :disabled="!src" @click="handlerToolbar('zoom', 0.1)" />
-            </Tooltip>
-            <Tooltip :title="t('component.cropper.btn_zoom_out')" placement="bottom">
-              <a-button type="primary" preIcon="ant-design:zoom-out-outlined" size="small" :disabled="!src" @click="handlerToolbar('zoom', -0.1)" />
-            </Tooltip>
-          </Space>
-        </div>
-      </div>
-      <div :class="`${prefixCls}-right`">
-        <div :class="`${prefixCls}-preview`">
-          <img :src="previewSource" v-if="previewSource" :alt="t('component.cropper.preview')" />
-        </div>
-        <template v-if="previewSource">
-          <div :class="`${prefixCls}-group`">
-            <Avatar :src="previewSource" size="large" />
-            <Avatar :src="previewSource" :size="48" />
-            <Avatar :src="previewSource" :size="64" />
-            <Avatar :src="previewSource" :size="80" />
-          </div>
-        </template>
-      </div>
-    </div>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import type { CropendResult, Cropper } from './typing';
-
-  import { defineComponent, ref } from 'vue';
-  import CropperImage from './Cropper.vue';
-  import { Space, Upload, Avatar, Tooltip } from 'ant-design-vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { dataURLtoBlob } from '/@/utils/file/base64Conver';
-  import { isFunction } from '/@/utils/is';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  type apiFunParams = { file: Blob; name: string; filename: string };
-
-  const props = {
-    circled: { type: Boolean, default: true },
-    uploadApi: {
-      type: Function as PropType<(params: apiFunParams) => Promise<any>>,
-    },
-  };
-
-  export default defineComponent({
-    name: 'CropperModal',
-    components: { BasicModal, Space, CropperImage, Upload, Avatar, Tooltip },
-    props,
-    emits: ['uploadSuccess', 'register'],
-    setup(props, { emit }) {
-      let filename = '';
-      const src = ref('');
-      const previewSource = ref('');
-      const cropper = ref<Cropper>();
-      let scaleX = 1;
-      let scaleY = 1;
-
-      const { prefixCls } = useDesign('cropper-am');
-      const [register, { closeModal, setModalProps }] = useModalInner();
-      const { t } = useI18n();
-
-      // Block upload
-      function handleBeforeUpload(file: File) {
-        const reader = new FileReader();
-        reader.readAsDataURL(file);
-        src.value = '';
-        previewSource.value = '';
-        reader.onload = function (e) {
-          src.value = (e.target?.result as string) ?? '';
-          filename = file.name;
-        };
-        return false;
-      }
-
-      function handleCropend({ imgBase64 }: CropendResult) {
-        previewSource.value = imgBase64;
-      }
-
-      function handleReady(cropperInstance: Cropper) {
-        cropper.value = cropperInstance;
-      }
-
-      function handlerToolbar(event: string, arg?: number) {
-        if (event === 'scaleX') {
-          scaleX = arg = scaleX === -1 ? 1 : -1;
-        }
-        if (event === 'scaleY') {
-          scaleY = arg = scaleY === -1 ? 1 : -1;
-        }
-        cropper?.value?.[event]?.(arg);
-      }
-
-      async function handleOk() {
-        const uploadApi = props.uploadApi;
-        if (uploadApi && isFunction(uploadApi)) {
-          const blob = dataURLtoBlob(previewSource.value);
-          try {
-            setModalProps({ confirmLoading: true });
-            const result = await uploadApi({ name: 'file', file: blob, filename });
-            emit('uploadSuccess', {
-              source: previewSource.value,
-              data: result.data || result.message,
-            });
-            closeModal();
-          } finally {
-            setModalProps({ confirmLoading: false });
-          }
-        }
-      }
-
-      return {
-        t,
-        prefixCls,
-        src,
-        register,
-        previewSource,
-        handleBeforeUpload,
-        handleCropend,
-        handleReady,
-        handlerToolbar,
-        handleOk,
-      };
-    },
-  });
-</script>
-
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-cropper-am';
-
-  .@{prefix-cls} {
-    display: flex;
-
-    &-left,
-    &-right {
-      height: 340px;
-    }
-
-    &-left {
-      width: 55%;
-    }
-
-    &-right {
-      width: 45%;
-    }
-
-    &-cropper {
-      height: 300px;
-      background: #eee;
-      background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.25) 25%, transparent 0, transparent 75%, rgba(0, 0, 0, 0.25) 0),
-        linear-gradient(45deg, rgba(0, 0, 0, 0.25) 25%, transparent 0, transparent 75%, rgba(0, 0, 0, 0.25) 0);
-      background-position: 0 0, 12px 12px;
-      background-size: 24px 24px;
-    }
-
-    &-toolbar {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      margin-top: 10px;
-    }
-
-    &-preview {
-      width: 220px;
-      height: 220px;
-      margin: 0 auto;
-      overflow: hidden;
-      border: 1px solid @border-color-base;
-      border-radius: 50%;
-
-      img {
-        width: 100%;
-        height: 100%;
-      }
-    }
-
-    &-group {
-      display: flex;
-      padding-top: 8px;
-      margin-top: 8px;
-      border-top: 1px solid @border-color-base;
-      justify-content: space-around;
-      align-items: center;
-    }
-  }
-</style>
diff --git a/src/components/Cropper/src/Cropper.vue b/src/components/Cropper/src/Cropper.vue
deleted file mode 100644
index 6146652..0000000
--- a/src/components/Cropper/src/Cropper.vue
+++ /dev/null
@@ -1,181 +0,0 @@
-<template>
-  <div :class="getClass" :style="getWrapperStyle">
-    <img v-show="isReady" ref="imgElRef" :src="src" :alt="alt" :crossorigin="crossorigin" :style="getImageStyle" />
-  </div>
-</template>
-<script lang="ts">
-  import type { CSSProperties } from 'vue';
-  import { defineComponent, onMounted, ref, unref, computed, onUnmounted } from 'vue';
-  import Cropper from 'cropperjs';
-  import 'cropperjs/dist/cropper.css';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useDebounceFn } from '@vueuse/shared';
-
-  type Options = Cropper.Options;
-
-  const defaultOptions: Options = {
-    aspectRatio: 1,
-    zoomable: true,
-    zoomOnTouch: true,
-    zoomOnWheel: true,
-    cropBoxMovable: true,
-    cropBoxResizable: true,
-    toggleDragModeOnDblclick: true,
-    autoCrop: true,
-    background: true,
-    highlight: true,
-    center: true,
-    responsive: true,
-    restore: true,
-    checkCrossOrigin: true,
-    checkOrientation: true,
-    scalable: true,
-    modal: true,
-    guides: true,
-    movable: true,
-    rotatable: true,
-  };
-
-  const props = {
-    src: { type: String, required: true },
-    alt: { type: String },
-    circled: { type: Boolean, default: false },
-    realTimePreview: { type: Boolean, default: true },
-    height: { type: [String, Number], default: '360px' },
-    crossorigin: {
-      type: String as PropType<'' | 'anonymous' | 'use-credentials' | undefined>,
-      default: undefined,
-    },
-    imageStyle: { type: Object as PropType<CSSProperties>, default: () => ({}) },
-    options: { type: Object as PropType<Options>, default: () => ({}) },
-  };
-
-  export default defineComponent({
-    name: 'CropperImage',
-    props,
-    emits: ['cropend', 'ready', 'cropendError'],
-    setup(props, { attrs, emit }) {
-      const imgElRef = ref<ElRef<HTMLImageElement>>();
-      const cropper = ref<Nullable<Cropper>>();
-      const isReady = ref(false);
-
-      const { prefixCls } = useDesign('cropper-image');
-      const debounceRealTimeCroppered = useDebounceFn(realTimeCroppered, 80);
-
-      const getImageStyle = computed((): CSSProperties => {
-        return {
-          height: props.height,
-          maxWidth: '100%',
-          ...props.imageStyle,
-        };
-      });
-
-      const getClass = computed(() => {
-        return [
-          prefixCls,
-          attrs.class,
-          {
-            [`${prefixCls}--circled`]: props.circled,
-          },
-        ];
-      });
-
-      const getWrapperStyle = computed((): CSSProperties => {
-        return { height: `${props.height}`.replace(/px/, '') + 'px' };
-      });
-
-      onMounted(init);
-
-      onUnmounted(() => {
-        cropper.value?.destroy();
-      });
-
-      async function init() {
-        const imgEl = unref(imgElRef);
-        if (!imgEl) {
-          return;
-        }
-        cropper.value = new Cropper(imgEl, {
-          ...defaultOptions,
-          ready: () => {
-            isReady.value = true;
-            realTimeCroppered();
-            emit('ready', cropper.value);
-          },
-          crop() {
-            debounceRealTimeCroppered();
-          },
-          zoom() {
-            debounceRealTimeCroppered();
-          },
-          cropmove() {
-            debounceRealTimeCroppered();
-          },
-          ...props.options,
-        });
-      }
-
-      // Real-time display preview
-      function realTimeCroppered() {
-        props.realTimePreview && croppered();
-      }
-
-      // event: return base64 and width and height information after cropping
-      function croppered() {
-        if (!cropper.value) {
-          return;
-        }
-        let imgInfo = cropper.value.getData();
-        const canvas = props.circled ? getRoundedCanvas() : cropper.value.getCroppedCanvas();
-        canvas.toBlob((blob) => {
-          if (!blob) {
-            return;
-          }
-          let fileReader: FileReader = new FileReader();
-          fileReader.readAsDataURL(blob);
-          fileReader.onloadend = (e) => {
-            emit('cropend', {
-              imgBase64: e.target?.result ?? '',
-              imgInfo,
-            });
-          };
-          fileReader.onerror = () => {
-            emit('cropendError');
-          };
-        }, 'image/png');
-      }
-
-      // Get a circular picture canvas
-      function getRoundedCanvas() {
-        const sourceCanvas = cropper.value!.getCroppedCanvas();
-        const canvas = document.createElement('canvas');
-        const context = canvas.getContext('2d')!;
-        const width = sourceCanvas.width;
-        const height = sourceCanvas.height;
-        canvas.width = width;
-        canvas.height = height;
-        context.imageSmoothingEnabled = true;
-        context.drawImage(sourceCanvas, 0, 0, width, height);
-        context.globalCompositeOperation = 'destination-in';
-        context.beginPath();
-        context.arc(width / 2, height / 2, Math.min(width, height) / 2, 0, 2 * Math.PI, true);
-        context.fill();
-        return canvas;
-      }
-
-      return { getClass, imgElRef, getWrapperStyle, getImageStyle, isReady, croppered };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-cropper-image';
-
-  .@{prefix-cls} {
-    &--circled {
-      .cropper-view-box,
-      .cropper-face {
-        border-radius: 50%;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Cropper/src/CropperAvatar.vue b/src/components/Cropper/src/CropperAvatar.vue
deleted file mode 100644
index e95329a..0000000
--- a/src/components/Cropper/src/CropperAvatar.vue
+++ /dev/null
@@ -1,136 +0,0 @@
-<template>
-  <div :class="getClass" :style="getStyle">
-    <div :class="`${prefixCls}-image-wrapper`" :style="getImageWrapperStyle" @click="openModal">
-      <div :class="`${prefixCls}-image-mask`" :style="getImageWrapperStyle">
-        <Icon icon="ant-design:cloud-upload-outlined" :size="getIconWidth" :style="getImageWrapperStyle" color="#d6d6d6" />
-      </div>
-      <img :src="sourceValue" v-if="sourceValue" alt="avatar" />
-    </div>
-    <a-button :class="`${prefixCls}-upload-btn`" @click="openModal" v-if="showBtn" v-bind="btnProps">
-      {{ btnText ? btnText : t('component.cropper.selectImage') }}
-    </a-button>
-
-    <CopperModal @register="register" @uploadSuccess="handleUploadSuccess" :uploadApi="uploadApi" :src="sourceValue" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, computed, CSSProperties, unref, ref, watchEffect, watch, PropType } from 'vue';
-  import CopperModal from './CopperModal.vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useModal } from '/@/components/Modal';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import type { ButtonProps } from '/@/components/Button';
-  import Icon from '/@/components/Icon';
-
-  const props = {
-    width: { type: [String, Number], default: '200px' },
-    value: { type: String },
-    showBtn: { type: Boolean, default: true },
-    btnProps: { type: Object as PropType<ButtonProps> },
-    btnText: { type: String, default: '' },
-    uploadApi: { type: Function as PropType<({ file: Blob, name: string }) => Promise<void>> },
-  };
-
-  export default defineComponent({
-    name: 'CropperAvatar',
-    components: { CopperModal, Icon },
-    props,
-    emits: ['update:value', 'change'],
-    setup(props, { emit, expose }) {
-      const sourceValue = ref(props.value || '');
-      const { prefixCls } = useDesign('cropper-avatar');
-      const [register, { openModal, closeModal }] = useModal();
-      const { createMessage } = useMessage();
-      const { t } = useI18n();
-
-      const getClass = computed(() => [prefixCls]);
-
-      const getWidth = computed(() => `${props.width}`.replace(/px/, '') + 'px');
-
-      const getIconWidth = computed(() => parseInt(`${props.width}`.replace(/px/, '')) / 2 + 'px');
-
-      const getStyle = computed((): CSSProperties => ({ width: unref(getWidth) }));
-
-      const getImageWrapperStyle = computed((): CSSProperties => ({ width: unref(getWidth), height: unref(getWidth) }));
-
-      watchEffect(() => {
-        sourceValue.value = props.value || '';
-      });
-
-      watch(
-        () => sourceValue.value,
-        (v: string) => {
-          emit('update:value', v);
-        }
-      );
-
-      function handleUploadSuccess({ source, data }) {
-        sourceValue.value = source;
-        emit('change', source, data);
-        createMessage.success(t('component.cropper.uploadSuccess'));
-      }
-
-      expose({ openModal: openModal.bind(null, true), closeModal });
-
-      return {
-        t,
-        prefixCls,
-        register,
-        openModal: openModal as any,
-        getIconWidth,
-        sourceValue,
-        getClass,
-        getImageWrapperStyle,
-        getStyle,
-        handleUploadSuccess,
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-cropper-avatar';
-
-  .@{prefix-cls} {
-    display: inline-block;
-    text-align: center;
-
-    &-image-wrapper {
-      overflow: hidden;
-      cursor: pointer;
-      background: @component-background;
-      border: 1px solid @border-color-base;
-      border-radius: 50%;
-
-      img {
-        width: 100%;
-      }
-    }
-
-    &-image-mask {
-      opacity: 0;
-      position: absolute;
-      width: inherit;
-      height: inherit;
-      border-radius: inherit;
-      border: inherit;
-      background: rgba(0, 0, 0, 0.4);
-      cursor: pointer;
-      -webkit-transition: opacity 0.4s;
-      transition: opacity 0.4s;
-
-      :deep(svg) {
-        margin: auto;
-      }
-    }
-
-    &-image-mask:hover {
-      opacity: 40;
-    }
-
-    &-upload-btn {
-      margin: 10px auto;
-    }
-  }
-</style>
diff --git a/src/components/Cropper/src/typing.ts b/src/components/Cropper/src/typing.ts
deleted file mode 100644
index e76cc6f..0000000
--- a/src/components/Cropper/src/typing.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import type Cropper from 'cropperjs';
-
-export interface CropendResult {
-  imgBase64: string;
-  imgInfo: Cropper.Data;
-}
-
-export type { Cropper };
diff --git a/src/components/Description/index.ts b/src/components/Description/index.ts
deleted file mode 100644
index 58277d0..0000000
--- a/src/components/Description/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { withInstall } from '/@/utils';
-import description from './src/Description.vue';
-
-export * from './src/typing';
-export { useDescription } from './src/useDescription';
-export const Description = withInstall(description);
diff --git a/src/components/Description/src/Description.vue b/src/components/Description/src/Description.vue
deleted file mode 100644
index 17b8c74..0000000
--- a/src/components/Description/src/Description.vue
+++ /dev/null
@@ -1,181 +0,0 @@
-<script lang="tsx">
-  import type { DescriptionProps, DescInstance, DescItem } from './typing';
-  import type { DescriptionsProps } from 'ant-design-vue/es/descriptions/index';
-  import type { CSSProperties } from 'vue';
-  import type { CollapseContainerOptions } from '/@/components/Container/index';
-  import { defineComponent, computed, ref, unref } from 'vue';
-  import { get } from 'lodash-es';
-  import { Descriptions } from 'ant-design-vue';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { isFunction } from '/@/utils/is';
-  import { getSlot } from '/@/utils/helper/tsxHelper';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-
-  const props = {
-    useCollapse: { type: Boolean, default: true },
-    title: { type: String, default: '' },
-    size: {
-      type: String,
-      validator: (v) => ['small', 'default', 'middle', undefined].includes(v),
-      default: 'small',
-    },
-    bordered: { type: Boolean, default: true },
-    column: {
-      type: [Number, Object] as PropType<number | Recordable>,
-      default: () => {
-        return { xxl: 4, xl: 3, lg: 3, md: 3, sm: 2, xs: 1 };
-      },
-    },
-    collapseOptions: {
-      type: Object as PropType<CollapseContainerOptions>,
-      default: null,
-    },
-    schema: {
-      type: Array as PropType<DescItem[]>,
-      default: () => [],
-    },
-    data: { type: Object },
-  };
-
-  export default defineComponent({
-    name: 'Description',
-    props,
-    emits: ['register'],
-    setup(props, { slots, emit }) {
-      const propsRef = ref<Partial<DescriptionProps> | null>(null);
-
-      const { prefixCls } = useDesign('description');
-      const attrs = useAttrs();
-
-      // Custom title component: get title
-      const getMergeProps = computed(() => {
-        return {
-          ...props,
-          ...(unref(propsRef) as Recordable),
-        } as DescriptionProps;
-      });
-
-      const getProps = computed(() => {
-        const opt = {
-          ...unref(getMergeProps),
-          title: undefined,
-        };
-        return opt as DescriptionProps;
-      });
-
-      /**
-       * @description: Whether to setting title
-       */
-      const useWrapper = computed(() => !!unref(getMergeProps).title);
-
-      /**
-       * @description: Get configuration Collapse
-       */
-      const getCollapseOptions = computed((): CollapseContainerOptions => {
-        return {
-          // Cannot be expanded by default
-          canExpand: false,
-          ...unref(getProps).collapseOptions,
-        };
-      });
-
-      const getDescriptionsProps = computed(() => {
-        return { ...unref(attrs), ...unref(getProps) } as DescriptionsProps;
-      });
-
-      /**
-       * @description:璁剧疆desc
-       */
-      function setDescProps(descProps: Partial<DescriptionProps>): void {
-        // Keep the last setDrawerProps
-        propsRef.value = { ...(unref(propsRef) as Recordable), ...descProps } as Recordable;
-      }
-
-      // Prevent line breaks
-      function renderLabel({ label, labelMinWidth, labelStyle }: DescItem) {
-        if (!labelStyle && !labelMinWidth) {
-          return label;
-        }
-
-        const labelStyles: CSSProperties = {
-          ...labelStyle,
-          minWidth: `${labelMinWidth}px `,
-        };
-        return <div style={labelStyles}>{label}</div>;
-      }
-
-      function renderItem() {
-        const { schema, data } = unref(getProps);
-        return unref(schema)
-          .map((item) => {
-            const { render, field, span, show, contentMinWidth } = item;
-
-            if (show && isFunction(show) && !show(data)) {
-              return null;
-            }
-
-            const getContent = () => {
-              const _data = unref(getProps)?.data;
-              if (!_data) {
-                return null;
-              }
-              const getField = get(_data, field);
-              return isFunction(render) ? render(getField, _data) : getField ?? '';
-            };
-
-            const width = contentMinWidth;
-            return (
-              <Descriptions.Item label={renderLabel(item)} key={field} span={span}>
-                {() => {
-                  if (!contentMinWidth) {
-                    return getContent();
-                  }
-                  const style: CSSProperties = {
-                    minWidth: `${width}px`,
-                  };
-                  return <div style={style}>{getContent()}</div>;
-                }}
-              </Descriptions.Item>
-            );
-          })
-          .filter((item) => !!item);
-      }
-
-      const renderDesc = () => {
-        return (
-          <Descriptions class={`${prefixCls}`} {...(unref(getDescriptionsProps) as any)}>
-            {renderItem()}
-          </Descriptions>
-        );
-      };
-
-      const renderContainer = () => {
-        const content = props.useCollapse ? renderDesc() : <div>{renderDesc()}</div>;
-        // Reduce the dom level
-        if (!props.useCollapse) {
-          return content;
-        }
-
-        const { canExpand, helpMessage } = unref(getCollapseOptions);
-        const { title } = unref(getMergeProps);
-
-        return (
-          <CollapseContainer title={title} canExpan={canExpand} helpMessage={helpMessage}>
-            {{
-              default: () => content,
-              action: () => getSlot(slots, 'action'),
-            }}
-          </CollapseContainer>
-        );
-      };
-
-      const methods: DescInstance = {
-        setDescProps,
-      };
-
-      emit('register', methods);
-      return () => (unref(useWrapper) ? renderContainer() : renderDesc());
-    },
-  });
-</script>
diff --git a/src/components/Description/src/typing.ts b/src/components/Description/src/typing.ts
deleted file mode 100644
index 897b7d2..0000000
--- a/src/components/Description/src/typing.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import type { VNode, CSSProperties } from 'vue';
-import type { CollapseContainerOptions } from '/@/components/Container/index';
-import type { DescriptionsProps } from 'ant-design-vue/es/descriptions/index';
-
-export interface DescItem {
-  labelMinWidth?: number;
-  contentMinWidth?: number;
-  labelStyle?: CSSProperties;
-  field: string;
-  label: string | VNode | JSX.Element;
-  // Merge column
-  span?: number;
-  show?: (...arg: any) => boolean;
-  // render
-  render?: (val: any, data: Recordable) => VNode | undefined | JSX.Element | Element | string | number;
-}
-
-export interface DescriptionProps extends DescriptionsProps {
-  // Whether to include the collapse component
-  useCollapse?: boolean;
-  /**
-   * item configuration
-   * @type DescItem
-   */
-  schema: DescItem[];
-  /**
-   * 鏁版嵁
-   * @type object
-   */
-  data: Recordable;
-  /**
-   * Built-in CollapseContainer component configuration
-   * @type CollapseContainerOptions
-   */
-  collapseOptions?: CollapseContainerOptions;
-}
-
-export interface DescInstance {
-  setDescProps(descProps: Partial<DescriptionProps>): void;
-}
-
-export type Register = (descInstance: DescInstance) => void;
-
-/**
- * @description:
- */
-export type UseDescReturnType = [Register, DescInstance];
diff --git a/src/components/Description/src/useDescription.ts b/src/components/Description/src/useDescription.ts
deleted file mode 100644
index d1037d0..0000000
--- a/src/components/Description/src/useDescription.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import type { DescriptionProps, DescInstance, UseDescReturnType } from './typing';
-import { ref, getCurrentInstance, unref } from 'vue';
-import { isProdMode } from '/@/utils/env';
-
-export function useDescription(props?: Partial<DescriptionProps>): UseDescReturnType {
-  if (!getCurrentInstance()) {
-    throw new Error('useDescription() can only be used inside setup() or functional components!');
-  }
-  const desc = ref<Nullable<DescInstance>>(null);
-  const loaded = ref(false);
-
-  function register(instance: DescInstance) {
-    if (unref(loaded) && isProdMode()) {
-      return;
-    }
-    desc.value = instance;
-    props && instance.setDescProps(props);
-    loaded.value = true;
-  }
-
-  const methods: DescInstance = {
-    setDescProps: (descProps: Partial<DescriptionProps>): void => {
-      unref(desc)?.setDescProps(descProps);
-    },
-  };
-
-  return [register, methods];
-}
diff --git a/src/components/Drawer/index.ts b/src/components/Drawer/index.ts
deleted file mode 100644
index 820ade5..0000000
--- a/src/components/Drawer/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { withInstall } from '/@/utils';
-import basicDrawer from './src/BasicDrawer.vue';
-
-export const BasicDrawer = withInstall(basicDrawer);
-export * from './src/typing';
-export { useDrawer, useDrawerInner } from './src/useDrawer';
diff --git a/src/components/Drawer/src/BasicDrawer.vue b/src/components/Drawer/src/BasicDrawer.vue
deleted file mode 100644
index d3a454b..0000000
--- a/src/components/Drawer/src/BasicDrawer.vue
+++ /dev/null
@@ -1,237 +0,0 @@
-<template>
-  <Drawer :class="prefixCls" @close="onClose" v-bind="getBindValues">
-    <template #title v-if="!$slots.title">
-      <DrawerHeader :title="getMergeProps.title" :isDetail="isDetail" :showDetailBack="showDetailBack" @close="onClose">
-        <template #titleToolbar>
-          <slot name="titleToolbar"></slot>
-        </template>
-      </DrawerHeader>
-    </template>
-    <template v-else #title>
-      <slot name="title"></slot>
-    </template>
-
-    <ScrollContainer :style="getScrollContentStyle" v-loading="getLoading" :loading-tip="loadingText || t('common.loadingText')">
-      <slot></slot>
-    </ScrollContainer>
-    <DrawerFooter v-bind="getProps" @close="onClose" @ok="handleOk" :height="getFooterHeight">
-      <template #[item]="data" v-for="item in Object.keys($slots)">
-        <slot :name="item" v-bind="data || {}"></slot>
-      </template>
-    </DrawerFooter>
-  </Drawer>
-</template>
-<script lang="ts">
-  import type { DrawerInstance, DrawerProps } from './typing';
-  import type { CSSProperties } from 'vue';
-  import { defineComponent, ref, computed, watch, unref, nextTick, toRaw, getCurrentInstance } from 'vue';
-  import { Drawer } from 'ant-design-vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { isFunction, isNumber } from '/@/utils/is';
-  import { deepMerge } from '/@/utils';
-  import DrawerFooter from './components/DrawerFooter.vue';
-  import DrawerHeader from './components/DrawerHeader.vue';
-  import { ScrollContainer } from '/@/components/Container';
-  import { basicProps } from './props';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-
-  export default defineComponent({
-    components: { Drawer, ScrollContainer, DrawerFooter, DrawerHeader },
-    inheritAttrs: false,
-    props: basicProps,
-    emits: ['visible-change', 'ok', 'close', 'register'],
-    setup(props, { emit }) {
-      const visibleRef = ref(false);
-      const attrs = useAttrs();
-      const propsRef = ref<Partial<Nullable<DrawerProps>>>(null);
-
-      const { t } = useI18n();
-      const { prefixVar, prefixCls } = useDesign('basic-drawer');
-
-      const drawerInstance: DrawerInstance = {
-        setDrawerProps: setDrawerProps,
-        emitVisible: undefined,
-      };
-
-      const instance = getCurrentInstance();
-
-      instance && emit('register', drawerInstance, instance.uid);
-
-      const getMergeProps = computed((): DrawerProps => {
-        return deepMerge(toRaw(props), unref(propsRef));
-      });
-
-      const getProps = computed((): DrawerProps => {
-        const opt = {
-          placement: 'right',
-          ...unref(attrs),
-          ...unref(getMergeProps),
-          visible: unref(visibleRef),
-        };
-        opt.title = undefined;
-        let { isDetail, width, wrapClassName, getContainer } = opt;
-        if (isDetail) {
-          if (!width) {
-            opt.width = '100%';
-          }
-          const detailCls = `${prefixCls}__detail`;
-          wrapClassName = opt['class'] ? opt['class'] : wrapClassName;
-          opt.class = wrapClassName ? `${wrapClassName} ${detailCls}` : detailCls;
-
-          if (!getContainer) {
-            // TODO type error?
-            opt.getContainer = `.${prefixVar}-layout-content` as any;
-          }
-        }
-        return opt as DrawerProps;
-      });
-
-      const getBindValues = computed((): DrawerProps => {
-        return {
-          ...attrs,
-          ...unref(getProps),
-        };
-      });
-
-      // Custom implementation of the bottom button,
-      const getFooterHeight = computed(() => {
-        const { footerHeight, showFooter } = unref(getProps);
-        if (showFooter && footerHeight) {
-          return isNumber(footerHeight) ? `${footerHeight}px` : `${footerHeight.replace('px', '')}px`;
-        }
-        return `0px`;
-      });
-
-      const getScrollContentStyle = computed((): CSSProperties => {
-        const footerHeight = unref(getFooterHeight);
-        return {
-          position: 'relative',
-          height: `calc(100% - ${footerHeight})`,
-        };
-      });
-
-      const getLoading = computed(() => {
-        return !!unref(getProps)?.loading;
-      });
-
-      watch(
-        () => props.visible,
-        (newVal, oldVal) => {
-          if (newVal !== oldVal) visibleRef.value = newVal;
-        },
-        { deep: true }
-      );
-
-      watch(
-        () => visibleRef.value,
-        (visible) => {
-          nextTick(() => {
-            emit('visible-change', visible);
-            instance && drawerInstance.emitVisible?.(visible, instance.uid);
-          });
-        }
-      );
-
-      // Cancel event
-      async function onClose(e: Recordable) {
-        const { closeFunc } = unref(getProps);
-        emit('close', e);
-        if (closeFunc && isFunction(closeFunc)) {
-          const res = await closeFunc();
-          visibleRef.value = !res;
-          return;
-        }
-        visibleRef.value = false;
-      }
-
-      function setDrawerProps(props: Partial<DrawerProps>): void {
-        // Keep the last setDrawerProps
-        propsRef.value = deepMerge(unref(propsRef) || ({} as any), props);
-
-        if (Reflect.has(props, 'visible')) {
-          visibleRef.value = !!props.visible;
-        }
-      }
-
-      function handleOk() {
-        emit('ok');
-      }
-
-      return {
-        onClose,
-        t,
-        prefixCls,
-        getMergeProps: getMergeProps as any,
-        getScrollContentStyle,
-        getProps: getProps as any,
-        getLoading,
-        getBindValues,
-        getFooterHeight,
-        handleOk,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @header-height: 60px;
-  @detail-header-height: 40px;
-  @prefix-cls: ~'@{namespace}-basic-drawer';
-  @prefix-cls-detail: ~'@{namespace}-basic-drawer__detail';
-
-  .@{prefix-cls} {
-    .ant-drawer-wrapper-body {
-      overflow: hidden;
-    }
-
-    .ant-drawer-close {
-      &:hover {
-        color: @error-color;
-      }
-    }
-
-    .ant-drawer-body {
-      height: calc(100% - @header-height);
-      padding: 0;
-      background-color: @component-background;
-
-      .scrollbar__wrap {
-        padding: 16px !important;
-        margin-bottom: 0 !important;
-      }
-
-      > .scrollbar > .scrollbar__bar.is-horizontal {
-        display: none;
-      }
-    }
-  }
-
-  .@{prefix-cls-detail} {
-    position: absolute;
-
-    .ant-drawer-header {
-      width: 100%;
-      height: @detail-header-height;
-      padding: 0;
-      border-top: 1px solid @border-color-base;
-      box-sizing: border-box;
-    }
-
-    .ant-drawer-title {
-      height: 100%;
-    }
-
-    .ant-drawer-close {
-      height: @detail-header-height;
-      line-height: @detail-header-height;
-    }
-
-    .scrollbar__wrap {
-      padding: 0 !important;
-    }
-
-    .ant-drawer-body {
-      height: calc(100% - @detail-header-height);
-    }
-  }
-</style>
diff --git a/src/components/Drawer/src/components/DrawerFooter.vue b/src/components/Drawer/src/components/DrawerFooter.vue
deleted file mode 100644
index 9e6d322..0000000
--- a/src/components/Drawer/src/components/DrawerFooter.vue
+++ /dev/null
@@ -1,75 +0,0 @@
-<template>
-  <div :class="prefixCls" :style="getStyle" v-if="showFooter || $slots.footer">
-    <template v-if="!$slots.footer">
-      <slot name="insertFooter"></slot>
-      <a-button v-bind="cancelButtonProps" @click="handleClose" class="mr-2" v-if="showCancelBtn">
-        {{ cancelText }}
-      </a-button>
-      <slot name="centerFooter"></slot>
-      <a-button :type="okType" @click="handleOk" v-bind="okButtonProps" class="mr-2" :loading="confirmLoading" v-if="showOkBtn">
-        {{ okText }}
-      </a-button>
-      <slot name="appendFooter"></slot>
-    </template>
-
-    <template v-else>
-      <slot name="footer"></slot>
-    </template>
-  </div>
-</template>
-<script lang="ts">
-  import type { CSSProperties } from 'vue';
-  import { defineComponent, computed } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  import { footerProps } from '../props';
-  export default defineComponent({
-    name: 'BasicDrawerFooter',
-    props: {
-      ...footerProps,
-      height: {
-        type: String,
-        default: '60px',
-      },
-    },
-    emits: ['ok', 'close'],
-    setup(props, { emit }) {
-      const { prefixCls } = useDesign('basic-drawer-footer');
-
-      const getStyle = computed((): CSSProperties => {
-        const heightStr = `${props.height}`;
-        return {
-          height: heightStr,
-          lineHeight: heightStr,
-        };
-      });
-
-      function handleOk() {
-        emit('ok');
-      }
-
-      function handleClose() {
-        emit('close');
-      }
-      return { handleOk, prefixCls, handleClose, getStyle };
-    },
-  });
-</script>
-
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-drawer-footer';
-  @footer-height: 60px;
-  .@{prefix-cls} {
-    position: absolute;
-    bottom: 0;
-    width: 100%;
-    padding: 0 12px 0 20px;
-    text-align: right;
-    background-color: @component-background;
-    border-top: 1px solid @border-color-base;
-
-    > * {
-      margin-right: 8px;
-    }
-  }
-</style>
diff --git a/src/components/Drawer/src/components/DrawerHeader.vue b/src/components/Drawer/src/components/DrawerHeader.vue
deleted file mode 100644
index 8232128..0000000
--- a/src/components/Drawer/src/components/DrawerHeader.vue
+++ /dev/null
@@ -1,74 +0,0 @@
-<template>
-  <BasicTitle v-if="!isDetail" :class="prefixCls">
-    <slot name="title"></slot>
-    {{ !$slots.title ? title : '' }}
-  </BasicTitle>
-
-  <div :class="[prefixCls, `${prefixCls}--detail`]" v-else>
-    <span :class="`${prefixCls}__twrap`">
-      <span @click="handleClose" v-if="showDetailBack">
-        <ArrowLeftOutlined :class="`${prefixCls}__back`" />
-      </span>
-      <span v-if="title">{{ title }}</span>
-    </span>
-
-    <span :class="`${prefixCls}__toolbar`">
-      <slot name="titleToolbar"></slot>
-    </span>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTitle } from '/@/components/Basic';
-  import { ArrowLeftOutlined } from '@ant-design/icons-vue';
-
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  import { propTypes } from '/@/utils/propTypes';
-  export default defineComponent({
-    name: 'BasicDrawerHeader',
-    components: { BasicTitle, ArrowLeftOutlined },
-    props: {
-      isDetail: propTypes.bool,
-      showDetailBack: propTypes.bool,
-      title: propTypes.string,
-    },
-    emits: ['close'],
-    setup(_, { emit }) {
-      const { prefixCls } = useDesign('basic-drawer-header');
-
-      function handleClose() {
-        emit('close');
-      }
-
-      return { prefixCls, handleClose };
-    },
-  });
-</script>
-
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-drawer-header';
-  @footer-height: 60px;
-  .@{prefix-cls} {
-    display: flex;
-    height: 100%;
-    align-items: center;
-
-    &__back {
-      padding: 0 12px;
-      cursor: pointer;
-
-      &:hover {
-        color: @primary-color;
-      }
-    }
-
-    &__twrap {
-      flex: 1;
-    }
-
-    &__toolbar {
-      padding-right: 50px;
-    }
-  }
-</style>
diff --git a/src/components/Drawer/src/props.ts b/src/components/Drawer/src/props.ts
deleted file mode 100644
index 8d134ee..0000000
--- a/src/components/Drawer/src/props.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import type { PropType } from 'vue';
-
-import { useI18n } from '/@/hooks/web/useI18n';
-const { t } = useI18n();
-
-export const footerProps = {
-  confirmLoading: { type: Boolean },
-  /**
-   * @description: Show close button
-   */
-  showCancelBtn: { type: Boolean, default: true },
-  cancelButtonProps: Object as PropType<Recordable>,
-  cancelText: { type: String, default: t('common.cancelText') },
-  /**
-   * @description: Show confirmation button
-   */
-  showOkBtn: { type: Boolean, default: true },
-  okButtonProps: Object as PropType<Recordable>,
-  okText: { type: String, default: t('common.okText') },
-  okType: { type: String, default: 'primary' },
-  showFooter: { type: Boolean },
-  footerHeight: {
-    type: [String, Number] as PropType<string | number>,
-    default: 60,
-  },
-};
-export const basicProps = {
-  class: {type: [String, Object, Array]},
-  isDetail: { type: Boolean },
-  title: { type: String, default: '' },
-  loadingText: { type: String },
-  showDetailBack: { type: Boolean, default: true },
-  visible: { type: Boolean },
-  loading: { type: Boolean },
-  maskClosable: { type: Boolean, default: true },
-  getContainer: {
-    type: [Object, String] as PropType<any>,
-  },
-  closeFunc: {
-    type: [Function, Object] as PropType<any>,
-    default: null,
-  },
-  destroyOnClose: { type: Boolean },
-  ...footerProps,
-};
diff --git a/src/components/Drawer/src/typing.ts b/src/components/Drawer/src/typing.ts
deleted file mode 100644
index c1ef346..0000000
--- a/src/components/Drawer/src/typing.ts
+++ /dev/null
@@ -1,196 +0,0 @@
-import type { ButtonProps } from 'ant-design-vue/lib/button/buttonTypes';
-import type { CSSProperties, VNodeChild, ComputedRef } from 'vue';
-import type { ScrollContainerOptions } from '/@/components/Container/index';
-
-export interface DrawerInstance {
-  setDrawerProps: (props: Partial<DrawerProps> | boolean) => void;
-  emitVisible?: (visible: boolean, uid: number) => void;
-}
-
-export interface ReturnMethods extends DrawerInstance {
-  openDrawer: <T = any>(visible?: boolean, data?: T, openOnSet?: boolean) => void;
-  closeDrawer: () => void;
-  getVisible?: ComputedRef<boolean>;
-}
-
-export type RegisterFn = (drawerInstance: DrawerInstance, uuid?: string) => void;
-
-export interface ReturnInnerMethods extends DrawerInstance {
-  closeDrawer: () => void;
-  changeLoading: (loading: boolean) => void;
-  changeOkLoading: (loading: boolean) => void;
-  getVisible?: ComputedRef<boolean>;
-}
-
-export type UseDrawerReturnType = [RegisterFn, ReturnMethods];
-
-export type UseDrawerInnerReturnType = [RegisterFn, ReturnInnerMethods];
-
-export interface DrawerFooterProps {
-  showOkBtn: boolean;
-  showCancelBtn: boolean;
-  /**
-   * Text of the Cancel button
-   * @default 'cancel'
-   * @type string
-   */
-  cancelText: string;
-  /**
-   * Text of the OK button
-   * @default 'OK'
-   * @type string
-   */
-  okText: string;
-
-  /**
-   * Button type of the OK button
-   * @default 'primary'
-   * @type string
-   */
-  okType: 'primary' | 'danger' | 'dashed' | 'ghost' | 'default';
-  /**
-   * The ok button props, follow jsx rules
-   * @type object
-   */
-  okButtonProps: { props: ButtonProps; on: {} };
-
-  /**
-   * The cancel button props, follow jsx rules
-   * @type object
-   */
-  cancelButtonProps: { props: ButtonProps; on: {} };
-  /**
-   * Whether to apply loading visual effect for OK button or not
-   * @default false
-   * @type boolean
-   */
-  confirmLoading: boolean;
-
-  showFooter: boolean;
-  footerHeight: string | number;
-}
-export interface DrawerProps extends DrawerFooterProps {
-  isDetail?: boolean;
-  loading?: boolean;
-  showDetailBack?: boolean;
-  visible?: boolean;
-  /**
-   * Built-in ScrollContainer component configuration
-   * @type ScrollContainerOptions
-   */
-  scrollOptions?: ScrollContainerOptions;
-  closeFunc?: () => Promise<any>;
-  triggerWindowResize?: boolean;
-  /**
-   * Whether a close (x) button is visible on top right of the Drawer dialog or not.
-   * @default true
-   * @type boolean
-   */
-  closable?: boolean;
-
-  /**
-   * Whether to unmount child components on closing drawer or not.
-   * @default false
-   * @type boolean
-   */
-  destroyOnClose?: boolean;
-
-  /**
-   * Return the mounted node for Drawer.
-   * @default 'body'
-   * @type any ( HTMLElement| () => HTMLElement | string)
-   */
-  getContainer?: () => HTMLElement | string;
-
-  /**
-   * Whether to show mask or not.
-   * @default true
-   * @type boolean
-   */
-  mask?: boolean;
-
-  /**
-   * Clicking on the mask (area outside the Drawer) to close the Drawer or not.
-   * @default true
-   * @type boolean
-   */
-  maskClosable?: boolean;
-
-  /**
-   * Style for Drawer's mask element.
-   * @default {}
-   * @type object
-   */
-  maskStyle?: CSSProperties;
-
-  /**
-   * The title for Drawer.
-   * @type any (string | slot)
-   */
-  title?: VNodeChild | JSX.Element;
-
-  /**
-   * The class name of the container of the Drawer dialog.
-   * @type string
-   */
-  class?: string;
-  // 鍏煎鑰佺増鏈殑鍐欐硶锛堝悗缁彲鑳戒細鍒犻櫎锛屼紭鍏堝啓class锛�
-  wrapClassName?: string;
-
-  /**
-   * Style of wrapper element which **contains mask** compare to `drawerStyle`
-   * @type object
-   */
-  wrapStyle?: CSSProperties;
-
-  /**
-   * Style of the popup layer element
-   * @type object
-   */
-  drawerStyle?: CSSProperties;
-
-  /**
-   * Style of floating layer, typically used for adjusting its position.
-   * @type object
-   */
-  bodyStyle?: CSSProperties;
-  headerStyle?: CSSProperties;
-
-  /**
-   * Width of the Drawer dialog.
-   * @default 256
-   * @type string | number
-   */
-  width?: string | number;
-
-  /**
-   * placement is top or bottom, height of the Drawer dialog.
-   * @type string | number
-   */
-  height?: string | number;
-
-  /**
-   * The z-index of the Drawer.
-   * @default 1000
-   * @type number
-   */
-  zIndex?: number;
-
-  /**
-   * The placement of the Drawer.
-   * @default 'right'
-   * @type string
-   */
-  placement?: 'top' | 'right' | 'bottom' | 'left';
-  afterVisibleChange?: (visible?: boolean) => void;
-  keyboard?: boolean;
-  /**
-   * Specify a callback that will be called when a user clicks mask, close button or Cancel button.
-   */
-  onClose?: (e?: Event) => void;
-}
-export interface DrawerActionType {
-  scrollBottom: () => void;
-  scrollTo: (to: number) => void;
-  getScrollWrap: () => Element | null;
-}
diff --git a/src/components/Drawer/src/useDrawer.ts b/src/components/Drawer/src/useDrawer.ts
deleted file mode 100644
index 2792463..0000000
--- a/src/components/Drawer/src/useDrawer.ts
+++ /dev/null
@@ -1,146 +0,0 @@
-import type { UseDrawerReturnType, DrawerInstance, ReturnMethods, DrawerProps, UseDrawerInnerReturnType } from './typing';
-import { ref, getCurrentInstance, unref, reactive, watchEffect, nextTick, toRaw, computed } from 'vue';
-import { isProdMode } from '/@/utils/env';
-import { isFunction } from '/@/utils/is';
-import { tryOnUnmounted } from '@vueuse/core';
-import { isEqual } from 'lodash-es';
-import { error } from '/@/utils/log';
-
-const dataTransferRef = reactive<any>({});
-
-const visibleData = reactive<{ [key: number]: boolean }>({});
-
-/**
- * @description: Applicable to separate drawer and call outside
- */
-export function useDrawer(): UseDrawerReturnType {
-  if (!getCurrentInstance()) {
-    throw new Error('useDrawer() can only be used inside setup() or functional components!');
-  }
-  const drawer = ref<DrawerInstance | null>(null);
-  const loaded = ref<Nullable<boolean>>(false);
-  const uid = ref<string>('');
-
-  function register(drawerInstance: DrawerInstance, uuid: string) {
-    isProdMode() &&
-      tryOnUnmounted(() => {
-        drawer.value = null;
-        loaded.value = null;
-        dataTransferRef[unref(uid)] = null;
-      });
-
-    if (unref(loaded) && isProdMode() && drawerInstance === unref(drawer)) {
-      return;
-    }
-    uid.value = uuid;
-    drawer.value = drawerInstance;
-    loaded.value = true;
-
-    drawerInstance.emitVisible = (visible: boolean, uid: number) => {
-      visibleData[uid] = visible;
-    };
-  }
-
-  const getInstance = () => {
-    const instance = unref(drawer);
-    if (!instance) {
-      error('useDrawer instance is undefined!');
-    }
-    return instance;
-  };
-
-  const methods: ReturnMethods = {
-    setDrawerProps: (props: Partial<DrawerProps>): void => {
-      getInstance()?.setDrawerProps(props);
-    },
-
-    getVisible: computed((): boolean => {
-      return visibleData[~~unref(uid)];
-    }),
-
-    openDrawer: <T = any>(visible = true, data?: T, openOnSet = true): void => {
-      getInstance()?.setDrawerProps({
-        visible: visible,
-      });
-      if (!data) return;
-
-      if (openOnSet) {
-        dataTransferRef[unref(uid)] = null;
-        dataTransferRef[unref(uid)] = toRaw(data);
-        return;
-      }
-      const equal = isEqual(toRaw(dataTransferRef[unref(uid)]), toRaw(data));
-      if (!equal) {
-        dataTransferRef[unref(uid)] = toRaw(data);
-      }
-    },
-    closeDrawer: () => {
-      getInstance()?.setDrawerProps({ visible: false });
-    },
-  };
-
-  return [register, methods];
-}
-
-export const useDrawerInner = (callbackFn?: Fn): UseDrawerInnerReturnType => {
-  const drawerInstanceRef = ref<Nullable<DrawerInstance>>(null);
-  const currentInstance = getCurrentInstance();
-  const uidRef = ref<string>('');
-
-  if (!getCurrentInstance()) {
-    throw new Error('useDrawerInner() can only be used inside setup() or functional components!');
-  }
-
-  const getInstance = () => {
-    const instance = unref(drawerInstanceRef);
-    if (!instance) {
-      error('useDrawerInner instance is undefined!');
-      return;
-    }
-    return instance;
-  };
-
-  const register = (modalInstance: DrawerInstance, uuid: string) => {
-    isProdMode() &&
-      tryOnUnmounted(() => {
-        drawerInstanceRef.value = null;
-      });
-
-    uidRef.value = uuid;
-    drawerInstanceRef.value = modalInstance;
-    currentInstance?.emit('register', modalInstance, uuid);
-  };
-
-  watchEffect(() => {
-    const data = dataTransferRef[unref(uidRef)];
-    if (!data) return;
-    if (!callbackFn || !isFunction(callbackFn)) return;
-    nextTick(() => {
-      callbackFn(data);
-    });
-  });
-
-  return [
-    register,
-    {
-      changeLoading: (loading = true) => {
-        getInstance()?.setDrawerProps({ loading });
-      },
-
-      changeOkLoading: (loading = true) => {
-        getInstance()?.setDrawerProps({ confirmLoading: loading });
-      },
-      getVisible: computed((): boolean => {
-        return visibleData[~~unref(uidRef)];
-      }),
-
-      closeDrawer: () => {
-        getInstance()?.setDrawerProps({ visible: false });
-      },
-
-      setDrawerProps: (props: Partial<DrawerProps>) => {
-        getInstance()?.setDrawerProps(props);
-      },
-    },
-  ];
-};
diff --git a/src/components/Dropdown/index.ts b/src/components/Dropdown/index.ts
deleted file mode 100644
index 80439e5..0000000
--- a/src/components/Dropdown/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { withInstall } from '/@/utils';
-import dropdown from './src/Dropdown.vue';
-
-export * from './src/typing';
-export const Dropdown = withInstall(dropdown);
diff --git a/src/components/Dropdown/src/Dropdown.vue b/src/components/Dropdown/src/Dropdown.vue
deleted file mode 100644
index 164d444..0000000
--- a/src/components/Dropdown/src/Dropdown.vue
+++ /dev/null
@@ -1,113 +0,0 @@
-<template>
-  <a-dropdown :class="[prefixCls]" :trigger="trigger" v-bind="$attrs">
-    <span>
-      <slot></slot>
-    </span>
-    <template #overlay>
-      <a-menu :class="[`${prefixCls}-menu`]" :selectedKeys="selectedKeys">
-        <template v-for="item in dropMenuList" :key="`${item.event}`">
-          <a-menu-item
-            v-bind="getAttr(item.event)"
-            @click="handleClickMenu(item)"
-            :disabled="item.disabled"
-            :class="[{ 'is-pop-confirm': item.popConfirm }, (item.class ?? [])]"
-          >
-            <a-popconfirm v-if="popconfirm && item.popConfirm" v-bind="getPopConfirmAttrs(item.popConfirm)">
-              <template #icon v-if="item.popConfirm.icon">
-                <Icon v-if="item.iconColor" :icon="item.popConfirm.icon" :color="item.iconColor"/>
-                <Icon v-else :icon="item.popConfirm.icon"/>
-              </template>
-              <div class="dropdown-event-area">
-                <Icon :icon="item.icon" v-if="item.icon && item.iconColor" :color="item.iconColor"/>
-                <Icon :icon="item.icon" v-else-if="item.icon"/>
-                <span class="ml-1">{{ item.text }}</span>
-              </div>
-            </a-popconfirm>
-            <template v-else>
-              <Icon :icon="item.icon" v-if="item.icon && item.iconColor" :color="item.iconColor"/>
-              <Icon :icon="item.icon" v-else-if="item.icon"/>
-              <span class="ml-1">{{ item.text }}</span>
-            </template>
-          </a-menu-item>
-          <a-menu-divider v-if="item.divider" :key="`d-${item.event}`" />
-        </template>
-      </a-menu>
-    </template>
-  </a-dropdown>
-</template>
-
-<script lang="ts" setup>
-  import { computed, PropType } from 'vue';
-  import type { DropMenu } from './typing';
-  import { Dropdown, Menu, Popconfirm } from 'ant-design-vue';
-  import { Icon } from '/@/components/Icon';
-  import { omit } from 'lodash-es';
-  import { isFunction } from '/@/utils/is';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  const ADropdown = Dropdown;
-  const AMenu = Menu;
-  const AMenuItem = Menu.Item;
-  const AMenuDivider = Menu.Divider;
-  const APopconfirm = Popconfirm;
-
-  const { prefixCls } = useDesign('basic-dropdown');
-  const props = defineProps({
-    popconfirm: Boolean,
-    /**
-     * the trigger mode which executes the drop-down action
-     * @default ['hover']
-     * @type string[]
-     */
-    trigger: {
-      type: [Array] as PropType<('contextmenu' | 'click' | 'hover')[]>,
-      default: () => {
-        return ['contextmenu'];
-      },
-    },
-    dropMenuList: {
-      type: Array as PropType<(DropMenu & Recordable)[]>,
-      default: () => [],
-    },
-    selectedKeys: {
-      type: Array as PropType<string[]>,
-      default: () => [],
-    },
-  });
-
-  const emit = defineEmits(['menuEvent']);
-
-  function handleClickMenu(item: DropMenu) {
-    const { event } = item;
-    const menu = props.dropMenuList.find((item) => `${item.event}` === `${event}`);
-    emit('menuEvent', menu);
-    item.onClick?.();
-  }
-
-  const getPopConfirmAttrs = computed(() => {
-    return (attrs) => {
-      const originAttrs = omit(attrs, ['confirm', 'cancel', 'icon']);
-      if (!attrs.onConfirm && attrs.confirm && isFunction(attrs.confirm)) originAttrs['onConfirm'] = attrs.confirm;
-      if (!attrs.onCancel && attrs.cancel && isFunction(attrs.cancel)) originAttrs['onCancel'] = attrs.cancel;
-      return originAttrs;
-    };
-  });
-
-  const getAttr = (key: string | number) => ({ key });
-</script>
-
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-dropdown';
-
-  .@{prefix-cls} {
-    // update-begin--author:sunjianlei---date:20220322---for: 銆怴UEN-180銆戞洿澶氫笅鎷夎彍鍗曪紝鍙湁鐐瑰埌瀛椾笂鎵嶆湁鏁堬紝鐐瑰埌绌虹櫧澶勪粈涔堥兘涓嶄細鍙戠敓锛屼綋楠屼笉濂�
-    &-menu .ant-dropdown-menu-item.is-pop-confirm {
-      padding: 0;
-
-      .dropdown-event-area {
-        padding: 5px 12px;
-      }
-    }
-    // update-end--author:sunjianlei---date:20220322---for: 銆怴UEN-180銆戞洿澶氫笅鎷夎彍鍗曪紝鍙湁鐐瑰埌瀛椾笂鎵嶆湁鏁堬紝鐐瑰埌绌虹櫧澶勪粈涔堥兘涓嶄細鍙戠敓锛屼綋楠屼笉濂�
-  }
-</style>
diff --git a/src/components/Dropdown/src/typing.ts b/src/components/Dropdown/src/typing.ts
deleted file mode 100644
index 29de8cb..0000000
--- a/src/components/Dropdown/src/typing.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-export interface DropMenu {
-  onClick?: Fn;
-  to?: string;
-  icon?: string;
-  event: string | number;
-  text: string;
-  disabled?: boolean;
-  divider?: boolean;
-}
diff --git a/src/components/Form/index.ts b/src/components/Form/index.ts
deleted file mode 100644
index b18d36d..0000000
--- a/src/components/Form/index.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import BasicForm from './src/BasicForm.vue';
-
-export * from './src/types/form';
-export * from './src/types/formItem';
-
-export { useComponentRegister } from './src/hooks/useComponentRegister';
-export { useForm } from './src/hooks/useForm';
-
-export { default as ApiSelect } from './src/components/ApiSelect.vue';
-export { default as RadioButtonGroup } from './src/components/RadioButtonGroup.vue';
-export { default as ApiTreeSelect } from './src/components/ApiTreeSelect.vue';
-export { default as ApiRadioGroup } from './src/components/ApiRadioGroup.vue';
-//Jeecg鑷畾涔夌粍浠�
-export { default as JAreaLinkage } from './src/jeecg/components/JAreaLinkage.vue';
-export { default as JSelectUser } from './src/jeecg/components/JSelectUser.vue';
-export { default as JSelectDept } from './src/jeecg/components/JSelectDept.vue';
-export { default as JCodeEditor } from './src/jeecg/components/JCodeEditor.vue';
-export { default as JCategorySelect } from './src/jeecg/components/JCategorySelect.vue';
-export { default as JSelectMultiple } from './src/jeecg/components/JSelectMultiple.vue';
-export { default as JPopup } from './src/jeecg/components/JPopup.vue';
-export { default as JAreaSelect } from './src/jeecg/components/JAreaSelect.vue';
-export { JEasyCron, JEasyCronInner, JEasyCronModal } from '/@/components/Form/src/jeecg/components/JEasyCron';
-export { default as JCheckbox } from './src/jeecg/components/JCheckbox.vue';
-export { default as JInput } from './src/jeecg/components/JInput.vue';
-export { default as JEllipsis } from './src/jeecg/components/JEllipsis.vue';
-export { default as JDictSelectTag } from './src/jeecg/components/JDictSelectTag.vue';
-export { default as JTreeSelect } from './src/jeecg/components/JTreeSelect.vue';
-export { default as JSearchSelect } from './src/jeecg/components/JSearchSelect.vue';
-export { default as JSelectUserByDept } from './src/jeecg/components/JSelectUserByDept.vue';
-export { default as JEditor } from './src/jeecg/components/JEditor.vue';
-export { default as JImageUpload } from './src/jeecg/components/JImageUpload.vue';
-// Jeecg鑷畾涔夋牎楠�
-export { JCronValidator } from '/@/components/Form/src/jeecg/components/JEasyCron';
-
-export { BasicForm };
diff --git a/src/components/Form/src/BasicForm.vue b/src/components/Form/src/BasicForm.vue
deleted file mode 100644
index 015a43f..0000000
--- a/src/components/Form/src/BasicForm.vue
+++ /dev/null
@@ -1,373 +0,0 @@
-<template>
-  <Form v-bind="getBindValue" :class="getFormClass" ref="formElRef" :model="formModel" @keypress.enter="handleEnterPress">
-    <Row v-bind="getRow">
-      <slot name="formHeader"></slot>
-      <template v-for="schema in getSchema" :key="schema.field">
-        <FormItem
-          :tableAction="tableAction"
-          :formActionType="formActionType"
-          :schema="schema"
-          :formProps="getProps"
-          :allDefaultValues="defaultValueRef"
-          :formModel="formModel"
-          :setFormModel="setFormModel"
-        >
-          <template #[item]="data" v-for="item in Object.keys($slots)">
-            <slot :name="item" v-bind="data || {}"></slot>
-          </template>
-        </FormItem>
-      </template>
-
-      <FormAction v-bind="getFormActionBindProps" @toggle-advanced="handleToggleAdvanced">
-        <template #[item]="data" v-for="item in ['resetBefore', 'submitBefore', 'advanceBefore', 'advanceAfter']">
-          <slot :name="item" v-bind="data || {}"></slot>
-        </template>
-      </FormAction>
-      <slot name="formFooter"></slot>
-    </Row>
-  </Form>
-</template>
-<script lang="ts">
-  import type { FormActionType, FormProps, FormSchema } from './types/form';
-  import type { AdvanceState } from './types/hooks';
-  import type { Ref } from 'vue';
-
-  import { defineComponent, reactive, ref, computed, unref, onMounted, watch, nextTick } from 'vue';
-  import { Form, Row } from 'ant-design-vue';
-  import FormItem from './components/FormItem.vue';
-  import FormAction from './components/FormAction.vue';
-
-  import { dateItemType } from './helper';
-  import { dateUtil } from '/@/utils/dateUtil';
-
-  // import { cloneDeep } from 'lodash-es';
-  import { deepMerge } from '/@/utils';
-
-  import { useFormValues } from './hooks/useFormValues';
-  import useAdvanced from './hooks/useAdvanced';
-  import { useFormEvents } from './hooks/useFormEvents';
-  import { createFormContext } from './hooks/useFormContext';
-  import { useAutoFocus } from './hooks/useAutoFocus';
-  import { useModalContext } from '/@/components/Modal';
-
-  import { basicProps } from './props';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import dayjs from 'dayjs';
-  import { useDebounceFn } from '@vueuse/core';
-
-  export default defineComponent({
-    name: 'BasicForm',
-    components: { FormItem, Form, Row, FormAction },
-    props: basicProps,
-    emits: ['advanced-change', 'reset', 'submit', 'register'],
-    setup(props, { emit, attrs }) {
-      const formModel = reactive<Recordable>({});
-      const modalFn = useModalContext();
-
-      const advanceState = reactive<AdvanceState>({
-        // 榛樿鏄敹璧风姸鎬�
-        isAdvanced: false,
-        hideAdvanceBtn: true,
-        isLoad: false,
-        actionSpan: 6,
-      });
-
-      const defaultValueRef = ref<Recordable>({});
-      const isInitedDefaultRef = ref(false);
-      const propsRef = ref<Partial<FormProps>>({});
-      const schemaRef = ref<Nullable<FormSchema[]>>(null);
-      const formElRef = ref<Nullable<FormActionType>>(null);
-
-      const { prefixCls } = useDesign('basic-form');
-
-      // Get the basic configuration of the form
-      const getProps = computed((): FormProps => {
-        let mergeProps = { ...props, ...unref(propsRef) } as FormProps;
-        //update-begin-author:sunjianlei date:20220923 for: 濡傛灉鐢ㄦ埛璁剧疆浜唋abelWidth锛屽垯浣縧abelCol澶辨晥锛岃В鍐砽abelWidth璁剧疆鏃犳晥鐨勯棶棰�
-        if (mergeProps.labelWidth) {
-          mergeProps.labelCol = undefined;
-        }
-        //update-end-author:sunjianlei date:20220923 for: 濡傛灉鐢ㄦ埛璁剧疆浜唋abelWidth锛屽垯浣縧abelCol澶辨晥锛岃В鍐砽abelWidth璁剧疆鏃犳晥鐨勯棶棰�
-        return mergeProps;
-      });
-
-      const getFormClass = computed(() => {
-        return [
-          prefixCls,
-          {
-            [`${prefixCls}--compact`]: unref(getProps).compact,
-          },
-        ];
-      });
-
-      // Get uniform row style and Row configuration for the entire form
-      const getRow = computed((): Recordable => {
-        const { baseRowStyle = {}, rowProps } = unref(getProps);
-        return {
-          style: baseRowStyle,
-          ...rowProps,
-        };
-      });
-
-      const getBindValue = computed(() => ({ ...attrs, ...props, ...unref(getProps) } as Recordable));
-
-      const getSchema = computed((): FormSchema[] => {
-        const schemas: FormSchema[] = unref(schemaRef) || (unref(getProps).schemas as any);
-        for (const schema of schemas) {
-          const { defaultValue, component, componentProps } = schema;
-          // handle date type
-          if (defaultValue && dateItemType.includes(component)) {
-            const { valueFormat } = componentProps
-            if (!Array.isArray(defaultValue)) {
-              //update-begin---author:wangshuai ---date:20221124  for锛歔issues/215]鍒楄〃椤垫煡璇㈡锛堟棩鏈熼�夋嫨妗嗭級璁剧疆鍒濆鏃堕棿锛屼竴杩涘叆椤甸潰鏃讹紝鍚庡彴鎶ユ棩鏈熻浆鎹㈢被鍨嬮敊璇殑------------
-              if(valueFormat){
-                schema.defaultValue = dateUtil(defaultValue).format(valueFormat);
-              }else{
-                schema.defaultValue = dateUtil(defaultValue);
-              }
-              //update-end---author:wangshuai ---date:20221124  for锛歔issues/215]鍒楄〃椤垫煡璇㈡锛堟棩鏈熼�夋嫨妗嗭級璁剧疆鍒濆鏃堕棿锛屼竴杩涘叆椤甸潰鏃讹紝鍚庡彴鎶ユ棩鏈熻浆鎹㈢被鍨嬮敊璇殑------------
-            } else {
-              const def: dayjs.Dayjs[] = [];
-              defaultValue.forEach((item) => {
-                //update-begin---author:wangshuai ---date:20221124  for锛歔issues/215]鍒楄〃椤垫煡璇㈡锛堟棩鏈熼�夋嫨妗嗭級璁剧疆鍒濆鏃堕棿锛屼竴杩涘叆椤甸潰鏃讹紝鍚庡彴鎶ユ棩鏈熻浆鎹㈢被鍨嬮敊璇殑------------
-                if(valueFormat){
-                  def.push(dateUtil(item).format(valueFormat));
-                }else{
-                  def.push(dateUtil(item));
-                }
-                //update-end---author:wangshuai ---date:20221124  for锛歔issues/215]鍒楄〃椤垫煡璇㈡锛堟棩鏈熼�夋嫨妗嗭級璁剧疆鍒濆鏃堕棿锛屼竴杩涘叆椤甸潰鏃讹紝鍚庡彴鎶ユ棩鏈熻浆鎹㈢被鍨嬮敊璇殑------------
-              });
-              schema.defaultValue = def;
-            }
-          }
-        }
-        if (unref(getProps).showAdvancedButton) {
-          return schemas.filter((schema) => schema.component !== 'Divider') as FormSchema[];
-        } else {
-          return schemas as FormSchema[];
-        }
-      });
-
-      const { handleToggleAdvanced } = useAdvanced({
-        advanceState,
-        emit,
-        getProps,
-        getSchema,
-        formModel,
-        defaultValueRef,
-      });
-
-      const { handleFormValues, initDefault } = useFormValues({
-        getProps,
-        defaultValueRef,
-        getSchema,
-        formModel,
-      });
-
-      useAutoFocus({
-        getSchema,
-        getProps,
-        isInitedDefault: isInitedDefaultRef,
-        formElRef: formElRef as Ref<FormActionType>,
-      });
-
-      const {
-        handleSubmit,
-        setFieldsValue,
-        clearValidate,
-        validate,
-        validateFields,
-        getFieldsValue,
-        updateSchema,
-        resetSchema,
-        appendSchemaByField,
-        removeSchemaByFiled,
-        resetFields,
-        scrollToField,
-      } = useFormEvents({
-        emit,
-        getProps,
-        formModel,
-        getSchema,
-        defaultValueRef,
-        formElRef: formElRef as Ref<FormActionType>,
-        schemaRef: schemaRef as Ref<FormSchema[]>,
-        handleFormValues,
-      });
-
-      createFormContext({
-        resetAction: resetFields,
-        submitAction: handleSubmit,
-      });
-
-      watch(
-        () => unref(getProps).model,
-        () => {
-          const { model } = unref(getProps);
-          if (!model) return;
-          setFieldsValue(model);
-        },
-        {
-          immediate: true,
-        }
-      );
-
-      watch(
-        () => unref(getProps).schemas,
-        (schemas) => {
-          resetSchema(schemas ?? []);
-        }
-      );
-
-      watch(
-        () => getSchema.value,
-        (schema) => {
-          nextTick(() => {
-            //  Solve the problem of modal adaptive height calculation when the form is placed in the modal
-            modalFn?.redoModalHeight?.();
-          });
-          if (unref(isInitedDefaultRef)) {
-            return;
-          }
-          if (schema?.length) {
-            initDefault();
-            isInitedDefaultRef.value = true;
-          }
-        }
-      );
-
-      async function setProps(formProps: Partial<FormProps>): Promise<void> {
-        propsRef.value = deepMerge(unref(propsRef) || {}, formProps);
-      }
-
-      //update-begin-author:taoyan date:2022-11-28 for: QQYUN-3121 銆愪紭鍖栥�戣〃鍗曡鍥鹃棶棰�#scott娴嬭瘯 8銆佹鍔熻兘鏈疄鐜�
-      const onFormSubmitWhenChange = useDebounceFn(handleSubmit, 300);
-      function setFormModel(key: string, value: any) {
-        formModel[key] = value;
-        const { validateTrigger } = unref(getBindValue);
-        if (!validateTrigger || validateTrigger === 'change') {
-          validateFields([key]).catch((_) => {});
-        }
-        if(props.autoSearch === true){
-          onFormSubmitWhenChange();
-        }
-      }
-      //update-end-author:taoyan date:2022-11-28 for: QQYUN-3121 銆愪紭鍖栥�戣〃鍗曡鍥鹃棶棰�#scott娴嬭瘯 8銆佹鍔熻兘鏈疄鐜�
-
-      function handleEnterPress(e: KeyboardEvent) {
-        const { autoSubmitOnEnter } = unref(getProps);
-        if (!autoSubmitOnEnter) return;
-        if (e.key === 'Enter' && e.target && e.target instanceof HTMLElement) {
-          const target: HTMLElement = e.target as HTMLElement;
-          if (target && target.tagName && target.tagName.toUpperCase() == 'INPUT') {
-            handleSubmit();
-          }
-        }
-      }
-
-      const formActionType: Partial<FormActionType> = {
-        getFieldsValue,
-        setFieldsValue,
-        resetFields,
-        updateSchema,
-        resetSchema,
-        setProps,
-        getProps,
-        removeSchemaByFiled,
-        appendSchemaByField,
-        clearValidate,
-        validateFields,
-        validate,
-        submit: handleSubmit,
-        scrollToField: scrollToField,
-      };
-
-      onMounted(() => {
-        initDefault();
-        emit('register', formActionType);
-      });
-
-      return {
-        getBindValue,
-        handleToggleAdvanced,
-        handleEnterPress,
-        formModel,
-        defaultValueRef,
-        advanceState,
-        getRow,
-        getProps,
-        formElRef,
-        getSchema,
-        formActionType: formActionType as any,
-        setFormModel,
-        getFormClass,
-        getFormActionBindProps: computed((): Recordable => ({ ...getProps.value, ...advanceState })),
-        ...formActionType,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-form';
-
-  .@{prefix-cls} {
-    .ant-form-item {
-      &-label label::after {
-        margin: 0 6px 0 2px;
-      }
-
-      &-with-help {
-        margin-bottom: 0;
-      }
-
-      &:not(.ant-form-item-with-help) {
-        margin-bottom: 20px;
-      }
-
-      &.suffix-item {
-        .ant-form-item-children {
-          display: flex;
-        }
-
-        .ant-form-item-control {
-          margin-top: 4px;
-        }
-
-        .suffix {
-          display: inline-flex;
-          padding-left: 6px;
-          margin-top: 1px;
-          line-height: 1;
-          align-items: center;
-        }
-      }
-    }
-    /*銆愮編鍖栬〃鍗曘�慺orm鐨勫瓧浣撴敼灏忎竴鍙�*/
-    .ant-form-item-label > label{
-      font-size: 13px;
-    }
-    .ant-form-item .ant-select {
-      font-size: 13px;
-    }
-    .ant-select-item-option-selected {
-      font-size: 13px;
-    }
-    .ant-select-item-option-content {
-      font-size: 13px;
-    }
-    .ant-input {
-      font-size: 13px;
-    }
-    /*銆愮編鍖栬〃鍗曘�慺orm鐨勫瓧浣撴敼灏忎竴鍙�*/
-    
-    .ant-form-explain {
-      font-size: 14px;
-    }
-
-    &--compact {
-      .ant-form-item {
-        margin-bottom: 8px !important;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Form/src/componentMap.ts b/src/components/Form/src/componentMap.ts
deleted file mode 100644
index 3878c31..0000000
--- a/src/components/Form/src/componentMap.ts
+++ /dev/null
@@ -1,143 +0,0 @@
-import type { Component } from 'vue';
-import type { ComponentType } from './types/index';
-
-/**
- * Component list, register here to setting it in the form
- */
-import {
-  Input,
-  Select,
-  Radio,
-  Checkbox,
-  AutoComplete,
-  Cascader,
-  DatePicker,
-  InputNumber,
-  Switch,
-  TimePicker,
-  TreeSelect,
-  Slider,
-  Rate,
-  Divider,
-} from 'ant-design-vue';
-import ApiRadioGroup from './components/ApiRadioGroup.vue';
-import RadioButtonGroup from './components/RadioButtonGroup.vue';
-import ApiSelect from './components/ApiSelect.vue';
-import ApiTreeSelect from './components/ApiTreeSelect.vue';
-import { BasicUpload } from '/@/components/Upload';
-import { StrengthMeter } from '/@/components/StrengthMeter';
-import { IconPicker } from '/@/components/Icon';
-import { CountdownInput } from '/@/components/CountDown';
-//鑷畾涔夌粍浠�
-import JAreaLinkage from './jeecg/components/JAreaLinkage.vue';
-import JSelectUser from './jeecg/components/JSelectUser.vue';
-import JSelectPosition from './jeecg/components/JSelectPosition.vue';
-import JSelectRole from './jeecg/components/JSelectRole.vue';
-import JImageUpload from './jeecg/components/JImageUpload.vue';
-import JDictSelectTag from './jeecg/components/JDictSelectTag.vue';
-import JSelectDept from './jeecg/components/JSelectDept.vue';
-import JAreaSelect from './jeecg/components/JAreaSelect.vue';
-import JEditor from './jeecg/components/JEditor.vue';
-import JMarkdownEditor from './jeecg/components/JMarkdownEditor.vue';
-import JSelectInput from './jeecg/components/JSelectInput.vue';
-import JCodeEditor from './jeecg/components/JCodeEditor.vue';
-import JCategorySelect from './jeecg/components/JCategorySelect.vue';
-import JSelectMultiple from './jeecg/components/JSelectMultiple.vue';
-import JPopup from './jeecg/components/JPopup.vue';
-import JSwitch from './jeecg/components/JSwitch.vue';
-import JTreeDict from './jeecg/components/JTreeDict.vue';
-import JInputPop from './jeecg/components/JInputPop.vue';
-import { JEasyCron } from './jeecg/components/JEasyCron';
-import JCheckbox from './jeecg/components/JCheckbox.vue';
-import JInput from './jeecg/components/JInput.vue';
-import JTreeSelect from './jeecg/components/JTreeSelect.vue';
-import JEllipsis from './jeecg/components/JEllipsis.vue';
-import JSelectUserByDept from './jeecg/components/JSelectUserByDept.vue';
-import JUpload from './jeecg/components/JUpload/JUpload.vue';
-import JSearchSelect from './jeecg/components/JSearchSelect.vue';
-import JAddInput from './jeecg/components/JAddInput.vue';
-import { Time } from '/@/components/Time';
-import JRangeNumber from './jeecg/components/JRangeNumber.vue';
-import UserSelect from './jeecg/components/userSelect/index.vue';
-import JRangeDate from './jeecg/components/JRangeDate.vue'
-import JRangeTime from './jeecg/components/JRangeTime.vue'
-
-const componentMap = new Map<ComponentType, Component>();
-
-componentMap.set('Time', Time);
-componentMap.set('Input', Input);
-componentMap.set('InputGroup', Input.Group);
-componentMap.set('InputPassword', Input.Password);
-componentMap.set('InputSearch', Input.Search);
-componentMap.set('InputTextArea', Input.TextArea);
-componentMap.set('InputNumber', InputNumber);
-componentMap.set('AutoComplete', AutoComplete);
-
-componentMap.set('Select', Select);
-componentMap.set('ApiSelect', ApiSelect);
-componentMap.set('TreeSelect', TreeSelect);
-componentMap.set('ApiTreeSelect', ApiTreeSelect);
-componentMap.set('ApiRadioGroup', ApiRadioGroup);
-componentMap.set('Switch', Switch);
-componentMap.set('RadioButtonGroup', RadioButtonGroup);
-componentMap.set('RadioGroup', Radio.Group);
-componentMap.set('Checkbox', Checkbox);
-componentMap.set('CheckboxGroup', Checkbox.Group);
-componentMap.set('Cascader', Cascader);
-componentMap.set('Slider', Slider);
-componentMap.set('Rate', Rate);
-
-componentMap.set('DatePicker', DatePicker);
-componentMap.set('MonthPicker', DatePicker.MonthPicker);
-componentMap.set('RangePicker', DatePicker.RangePicker);
-componentMap.set('WeekPicker', DatePicker.WeekPicker);
-componentMap.set('TimePicker', TimePicker);
-componentMap.set('StrengthMeter', StrengthMeter);
-componentMap.set('IconPicker', IconPicker);
-componentMap.set('InputCountDown', CountdownInput);
-
-componentMap.set('Upload', BasicUpload);
-componentMap.set('Divider', Divider);
-
-//娉ㄥ唽鑷畾涔夌粍浠�
-componentMap.set('JAreaLinkage', JAreaLinkage);
-componentMap.set('JSelectPosition', JSelectPosition);
-componentMap.set('JSelectUser', JSelectUser);
-componentMap.set('JSelectRole', JSelectRole);
-componentMap.set('JImageUpload', JImageUpload);
-componentMap.set('JDictSelectTag', JDictSelectTag);
-componentMap.set('JSelectDept', JSelectDept);
-componentMap.set('JAreaSelect', JAreaSelect);
-componentMap.set('JEditor', JEditor);
-componentMap.set('JMarkdownEditor', JMarkdownEditor);
-componentMap.set('JSelectInput', JSelectInput);
-componentMap.set('JCodeEditor', JCodeEditor);
-componentMap.set('JCategorySelect', JCategorySelect);
-componentMap.set('JSelectMultiple', JSelectMultiple);
-componentMap.set('JPopup', JPopup);
-componentMap.set('JSwitch', JSwitch);
-componentMap.set('JTreeDict', JTreeDict);
-componentMap.set('JInputPop', JInputPop);
-componentMap.set('JEasyCron', JEasyCron);
-componentMap.set('JCheckbox', JCheckbox);
-componentMap.set('JInput', JInput);
-componentMap.set('JTreeSelect', JTreeSelect);
-componentMap.set('JEllipsis', JEllipsis);
-componentMap.set('JSelectUserByDept', JSelectUserByDept);
-componentMap.set('JUpload', JUpload);
-componentMap.set('JSearchSelect', JSearchSelect);
-componentMap.set('JAddInput', JAddInput);
-componentMap.set('JRangeNumber', JRangeNumber);
-componentMap.set('UserSelect', UserSelect);
-componentMap.set('RangeDate', JRangeDate);
-componentMap.set('RangeTime', JRangeTime);
-
-export function add(compName: ComponentType, component: Component) {
-  componentMap.set(compName, component);
-}
-
-export function del(compName: ComponentType) {
-  componentMap.delete(compName);
-}
-
-export { componentMap };
diff --git a/src/components/Form/src/components/ApiRadioGroup.vue b/src/components/Form/src/components/ApiRadioGroup.vue
deleted file mode 100644
index b58b421..0000000
--- a/src/components/Form/src/components/ApiRadioGroup.vue
+++ /dev/null
@@ -1,130 +0,0 @@
-<!--
- * @Description:It is troublesome to implement radio button group in the form. So it is extracted independently as a separate component
--->
-<template>
-  <RadioGroup v-bind="attrs" v-model:value="state" button-style="solid" @change="handleChange">
-    <template v-for="item in getOptions" :key="`${item.value}`">
-      <RadioButton v-if="props.isBtn" :value="item.value" :disabled="item.disabled">
-        {{ item.label }}
-      </RadioButton>
-      <Radio v-else :value="item.value" :disabled="item.disabled">
-        {{ item.label }}
-      </Radio>
-    </template>
-  </RadioGroup>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, watchEffect, computed, unref, watch } from 'vue';
-  import { Radio } from 'ant-design-vue';
-  import { isFunction } from '/@/utils/is';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { propTypes } from '/@/utils/propTypes';
-  import { get, omit } from 'lodash-es';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  type OptionsItem = { label: string; value: string | number | boolean; disabled?: boolean };
-
-  export default defineComponent({
-    name: 'ApiRadioGroup',
-    components: {
-      RadioGroup: Radio.Group,
-      RadioButton: Radio.Button,
-      Radio,
-    },
-    props: {
-      api: {
-        type: Function as PropType<(arg?: Recordable | string) => Promise<OptionsItem[]>>,
-        default: null,
-      },
-      params: {
-        type: [Object, String] as PropType<Recordable | string>,
-        default: () => ({}),
-      },
-      value: {
-        type: [String, Number, Boolean] as PropType<string | number | boolean>,
-      },
-      isBtn: {
-        type: [Boolean] as PropType<boolean>,
-        default: false,
-      },
-      numberToString: propTypes.bool,
-      resultField: propTypes.string.def(''),
-      labelField: propTypes.string.def('label'),
-      valueField: propTypes.string.def('value'),
-      immediate: propTypes.bool.def(true),
-    },
-    emits: ['options-change', 'change'],
-    setup(props, { emit }) {
-      const options = ref<OptionsItem[]>([]);
-      const loading = ref(false);
-      const isFirstLoad = ref(true);
-      const emitData = ref<any[]>([]);
-      const attrs = useAttrs();
-      const { t } = useI18n();
-      // Embedded in the form, just use the hook binding to perform form verification
-      const [state] = useRuleFormItem(props);
-
-      // Processing options value
-      const getOptions = computed(() => {
-        const { labelField, valueField, numberToString } = props;
-
-        return unref(options).reduce((prev, next: Recordable) => {
-          if (next) {
-            const value = next[valueField];
-            prev.push({
-              label: next[labelField],
-              value: numberToString ? `${value}` : value,
-              ...omit(next, [labelField, valueField]),
-            });
-          }
-          return prev;
-        }, [] as OptionsItem[]);
-      });
-
-      watchEffect(() => {
-        props.immediate && fetch();
-      });
-
-      watch(
-        () => props.params,
-        () => {
-          !unref(isFirstLoad) && fetch();
-        },
-        { deep: true }
-      );
-
-      async function fetch() {
-        const api = props.api;
-        if (!api || !isFunction(api)) return;
-        options.value = [];
-        try {
-          loading.value = true;
-          const res = await api(props.params);
-          if (Array.isArray(res)) {
-            options.value = res;
-            emitChange();
-            return;
-          }
-          if (props.resultField) {
-            options.value = get(res, props.resultField) || [];
-          }
-          emitChange();
-        } catch (error) {
-          console.warn(error);
-        } finally {
-          loading.value = false;
-        }
-      }
-
-      function emitChange() {
-        emit('options-change', unref(getOptions));
-      }
-
-      function handleChange(_, ...args) {
-        emitData.value = args;
-      }
-
-      return { state, getOptions, attrs, loading, t, handleChange, props };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/components/ApiSelect.vue b/src/components/Form/src/components/ApiSelect.vue
deleted file mode 100644
index fbfc0b5..0000000
--- a/src/components/Form/src/components/ApiSelect.vue
+++ /dev/null
@@ -1,138 +0,0 @@
-<template>
-  <Select @dropdownVisibleChange="handleFetch" v-bind="$attrs" @change="handleChange" :options="getOptions" v-model:value="state">
-    <template #[item]="data" v-for="item in Object.keys($slots)">
-      <slot :name="item" v-bind="data || {}"></slot>
-    </template>
-    <template #suffixIcon v-if="loading">
-      <LoadingOutlined spin />
-    </template>
-    <template #notFoundContent v-if="loading">
-      <span>
-        <LoadingOutlined spin class="mr-1" />
-        {{ t('component.form.apiSelectNotFound') }}
-      </span>
-    </template>
-  </Select>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, watchEffect, computed, unref, watch } from 'vue';
-  import { Select } from 'ant-design-vue';
-  import { isFunction } from '/@/utils/is';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { get, omit } from 'lodash-es';
-  import { LoadingOutlined } from '@ant-design/icons-vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { propTypes } from '/@/utils/propTypes';
-
-  type OptionsItem = { label: string; value: string; disabled?: boolean };
-
-  export default defineComponent({
-    name: 'ApiSelect',
-    components: {
-      Select,
-      LoadingOutlined,
-    },
-    inheritAttrs: false,
-    props: {
-      value: [Array, Object, String, Number],
-      numberToString: propTypes.bool,
-      api: {
-        type: Function as PropType<(arg?: Recordable) => Promise<OptionsItem[]>>,
-        default: null,
-      },
-      // api params
-      params: {
-        type: Object as PropType<Recordable>,
-        default: () => ({}),
-      },
-      // support xxx.xxx.xx
-      resultField: propTypes.string.def(''),
-      labelField: propTypes.string.def('label'),
-      valueField: propTypes.string.def('value'),
-      immediate: propTypes.bool.def(true),
-    },
-    emits: ['options-change', 'change'],
-    setup(props, { emit }) {
-      const options = ref<OptionsItem[]>([]);
-      const loading = ref(false);
-      const isFirstLoad = ref(true);
-      const emitData = ref<any[]>([]);
-      const attrs = useAttrs();
-      const { t } = useI18n();
-
-      // Embedded in the form, just use the hook binding to perform form verification
-      const [state, setState] = useRuleFormItem(props, 'value', 'change', emitData);
-
-      const getOptions = computed(() => {
-        const { labelField, valueField, numberToString } = props;
-        return unref(options).reduce((prev, next: Recordable) => {
-          if (next) {
-            const value = next[valueField];
-            prev.push({
-              ...omit(next, [labelField, valueField]),
-              label: next[labelField],
-              value: numberToString ? `${value}` : value,
-            });
-          }
-          return prev;
-        }, [] as OptionsItem[]);
-      });
-
-      watchEffect(() => {
-        props.immediate && fetch();
-      });
-
-      watch(
-        () => props.params,
-        () => {
-          !unref(isFirstLoad) && fetch();
-        },
-        { deep: true }
-      );
-
-      async function fetch() {
-        const api = props.api;
-        if (!api || !isFunction(api)) return;
-        options.value = [];
-        try {
-          loading.value = true;
-          const res = await api(props.params);
-          if (Array.isArray(res)) {
-            options.value = res;
-            emitChange();
-            return;
-          }
-          if (props.resultField) {
-            options.value = get(res, props.resultField) || [];
-          }
-          emitChange();
-        } catch (error) {
-          console.warn(error);
-        } finally {
-          loading.value = false;
-          //--@updateBy-begin----author:liusq---date:20210914------for:鍒ゆ柇閫夋嫨妯″紡锛宮ultiple澶氶�夋儏鍐典笅鐨剉alue鍊肩┖鐨勬儏鍐典笅闇�瑕佽缃负鏁扮粍------
-          unref(attrs).mode == 'multiple' && !Array.isArray(unref(state)) && setState([]);
-          //--@updateBy-end----author:liusq---date:20210914------for:鍒ゆ柇閫夋嫨妯″紡锛宮ultiple澶氶�夋儏鍐典笅鐨剉alue鍊肩┖鐨勬儏鍐典笅闇�瑕佽缃负鏁扮粍------
-        }
-      }
-
-      async function handleFetch() {
-        if (!props.immediate && unref(isFirstLoad)) {
-          await fetch();
-          isFirstLoad.value = false;
-        }
-      }
-
-      function emitChange() {
-        emit('options-change', unref(getOptions));
-      }
-
-      function handleChange(_, ...args) {
-        emitData.value = args;
-      }
-
-      return { state, attrs, getOptions, loading, t, handleFetch, handleChange };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/components/ApiTreeSelect.vue b/src/components/Form/src/components/ApiTreeSelect.vue
deleted file mode 100644
index 31a1fbb..0000000
--- a/src/components/Form/src/components/ApiTreeSelect.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-<template>
-  <a-tree-select v-bind="getAttrs" @change="handleChange">
-    <template #[item]="data" v-for="item in Object.keys($slots)">
-      <slot :name="item" v-bind="data || {}"></slot>
-    </template>
-    <template #suffixIcon v-if="loading">
-      <LoadingOutlined spin />
-    </template>
-  </a-tree-select>
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent, watch, ref, onMounted, unref } from 'vue';
-  import { TreeSelect } from 'ant-design-vue';
-  import { isArray, isFunction } from '/@/utils/is';
-  import { get } from 'lodash-es';
-  import { propTypes } from '/@/utils/propTypes';
-  import { LoadingOutlined } from '@ant-design/icons-vue';
-  export default defineComponent({
-    name: 'ApiTreeSelect',
-    components: { ATreeSelect: TreeSelect, LoadingOutlined },
-    props: {
-      api: { type: Function as PropType<(arg?: Recordable) => Promise<Recordable>> },
-      params: { type: Object },
-      immediate: { type: Boolean, default: true },
-      resultField: propTypes.string.def(''),
-    },
-    emits: ['options-change', 'change'],
-    setup(props, { attrs, emit }) {
-      const treeData = ref<Recordable[]>([]);
-      const isFirstLoaded = ref<Boolean>(false);
-      const loading = ref(false);
-      const getAttrs = computed(() => {
-        return {
-          ...(props.api ? { treeData: unref(treeData) } : {}),
-          ...attrs,
-        };
-      });
-
-      function handleChange(...args) {
-        emit('change', ...args);
-      }
-
-      watch(
-        () => props.params,
-        () => {
-          !unref(isFirstLoaded) && fetch();
-        },
-        { deep: true }
-      );
-
-      watch(
-        () => props.immediate,
-        (v) => {
-          v && !isFirstLoaded.value && fetch();
-        }
-      );
-
-      onMounted(() => {
-        props.immediate && fetch();
-      });
-
-      async function fetch() {
-        const { api } = props;
-        if (!api || !isFunction(api)) return;
-        loading.value = true;
-        treeData.value = [];
-        let result;
-        try {
-          result = await api(props.params);
-        } catch (e) {
-          console.error(e);
-        }
-        loading.value = false;
-        if (!result) return;
-        if (!isArray(result)) {
-          result = get(result, props.resultField);
-        }
-        treeData.value = (result as Recordable[]) || [];
-        isFirstLoaded.value = true;
-        emit('options-change', treeData.value);
-      }
-      return { getAttrs, loading, handleChange };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/components/FormAction.vue b/src/components/Form/src/components/FormAction.vue
deleted file mode 100644
index 4f7e721..0000000
--- a/src/components/Form/src/components/FormAction.vue
+++ /dev/null
@@ -1,121 +0,0 @@
-<template>
-  <a-col v-bind="actionColOpt" v-if="showActionButtonGroup">
-    <div style="width: 100%" :style="{ textAlign: actionColOpt.style.textAlign }">
-      <FormItem>
-        <!-- update-begin-author:zyf   Date:20211213  for锛氳皟鎹㈡寜閽墠鍚庝綅缃�-->
-        <slot name="submitBefore"></slot>
-        <Button type="primary" class="mr-2" v-bind="getSubmitBtnOptions" @click="submitAction" v-if="showSubmitButton">
-          {{ getSubmitBtnOptions.text }}
-        </Button>
-
-        <slot name="resetBefore"></slot>
-        <Button type="default" class="mr-2" v-bind="getResetBtnOptions" @click="resetAction" v-if="showResetButton">
-          {{ getResetBtnOptions.text }}
-        </Button>
-        <!-- update-end-author:zyf    Date:20211213  for锛氳皟鎹㈡寜閽墠鍚庝綅缃�-->
-
-        <slot name="advanceBefore"></slot>
-        <Button type="link" size="small" @click="toggleAdvanced" v-if="showAdvancedButton && !hideAdvanceBtn">
-          {{ isAdvanced ? t('component.form.putAway') : t('component.form.unfold') }}
-          <BasicArrow class="ml-1" :expand="!isAdvanced" up />
-        </Button>
-        <slot name="advanceAfter"></slot>
-      </FormItem>
-    </div>
-  </a-col>
-</template>
-<script lang="ts">
-  import type { ColEx } from '../types/index';
-  //import type { ButtonProps } from 'ant-design-vue/es/button/buttonTypes';
-  import { defineComponent, computed, PropType } from 'vue';
-  import { Form, Col } from 'ant-design-vue';
-  import { Button, ButtonProps } from '/@/components/Button';
-  import { BasicArrow } from '/@/components/Basic';
-  import { useFormContext } from '../hooks/useFormContext';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { propTypes } from '/@/utils/propTypes';
-
-  type ButtonOptions = Partial<ButtonProps> & { text: string };
-
-  export default defineComponent({
-    name: 'BasicFormAction',
-    components: {
-      FormItem: Form.Item,
-      Button,
-      BasicArrow,
-      [Col.name]: Col,
-    },
-    props: {
-      showActionButtonGroup: propTypes.bool.def(true),
-      showResetButton: propTypes.bool.def(true),
-      showSubmitButton: propTypes.bool.def(true),
-      showAdvancedButton: propTypes.bool.def(true),
-      resetButtonOptions: {
-        type: Object as PropType<ButtonOptions>,
-        default: () => ({}),
-      },
-      submitButtonOptions: {
-        type: Object as PropType<ButtonOptions>,
-        default: () => ({}),
-      },
-      actionColOptions: {
-        type: Object as PropType<Partial<ColEx>>,
-        default: () => ({}),
-      },
-      actionSpan: propTypes.number.def(6),
-      isAdvanced: propTypes.bool,
-      hideAdvanceBtn: propTypes.bool,
-    },
-    emits: ['toggle-advanced'],
-    setup(props, { emit }) {
-      const { t } = useI18n();
-
-      const actionColOpt = computed(() => {
-        const { showAdvancedButton, actionSpan: span, actionColOptions } = props;
-        const actionSpan = 24 - span;
-        const advancedSpanObj = showAdvancedButton ? { span: actionSpan < 6 ? 24 : actionSpan } : {};
-        const actionColOpt: Partial<ColEx> = {
-          style: { textAlign: 'right' },
-          span: showAdvancedButton ? 6 : 4,
-          ...advancedSpanObj,
-          ...actionColOptions,
-        };
-        return actionColOpt;
-      });
-
-      const getResetBtnOptions = computed((): ButtonOptions => {
-        return Object.assign(
-          {
-            text: t('common.resetText'),
-            preIcon: 'ic:baseline-restart-alt',
-          },
-          props.resetButtonOptions
-        );
-      });
-
-      const getSubmitBtnOptions = computed(() => {
-        return Object.assign(
-          {},
-          {
-            text: t('common.queryText'),
-            preIcon: 'ant-design:search-outlined',
-          },
-          props.submitButtonOptions
-        );
-      });
-
-      function toggleAdvanced() {
-        emit('toggle-advanced');
-      }
-
-      return {
-        t,
-        actionColOpt,
-        getResetBtnOptions,
-        getSubmitBtnOptions,
-        toggleAdvanced,
-        ...useFormContext(),
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/components/FormItem.vue b/src/components/Form/src/components/FormItem.vue
deleted file mode 100644
index 9f0b863..0000000
--- a/src/components/Form/src/components/FormItem.vue
+++ /dev/null
@@ -1,364 +0,0 @@
-<script lang="tsx">
-  import type { PropType, Ref } from 'vue';
-  import type { FormActionType, FormProps } from '../types/form';
-  import type { FormSchema } from '../types/form';
-  import type { ValidationRule } from 'ant-design-vue/lib/form/Form';
-  import type { TableActionType } from '/@/components/Table';
-  import { defineComponent, computed, unref, toRefs } from 'vue';
-  import { Form, Col, Divider } from 'ant-design-vue';
-  import { componentMap } from '../componentMap';
-  import { BasicHelp } from '/@/components/Basic';
-  import { isBoolean, isFunction, isNull } from '/@/utils/is';
-  import { getSlot } from '/@/utils/helper/tsxHelper';
-  import { createPlaceholderMessage, setComponentRuleType } from '../helper';
-  import { upperFirst, cloneDeep } from 'lodash-es';
-  import { useItemLabelWidth } from '../hooks/useLabelWidth';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  export default defineComponent({
-    name: 'BasicFormItem',
-    inheritAttrs: false,
-    props: {
-      schema: {
-        type: Object as PropType<FormSchema>,
-        default: () => ({}),
-      },
-      formProps: {
-        type: Object as PropType<FormProps>,
-        default: () => ({}),
-      },
-      allDefaultValues: {
-        type: Object as PropType<Recordable>,
-        default: () => ({}),
-      },
-      formModel: {
-        type: Object as PropType<Recordable>,
-        default: () => ({}),
-      },
-      setFormModel: {
-        type: Function as PropType<(key: string, value: any) => void>,
-        default: null,
-      },
-      tableAction: {
-        type: Object as PropType<TableActionType>,
-      },
-      formActionType: {
-        type: Object as PropType<FormActionType>,
-      },
-    },
-    setup(props, { slots }) {
-      const { t } = useI18n();
-
-      const { schema, formProps } = toRefs(props) as {
-        schema: Ref<FormSchema>;
-        formProps: Ref<FormProps>;
-      };
-
-      const itemLabelWidthProp = useItemLabelWidth(schema, formProps);
-
-      const getValues = computed(() => {
-        const { allDefaultValues, formModel, schema } = props;
-        const { mergeDynamicData } = props.formProps;
-        return {
-          field: schema.field,
-          model: formModel,
-          values: {
-            ...mergeDynamicData,
-            ...allDefaultValues,
-            ...formModel,
-          } as Recordable,
-          schema: schema,
-        };
-      });
-
-      const getComponentsProps = computed(() => {
-        const { schema, tableAction, formModel, formActionType } = props;
-        let { componentProps = {} } = schema;
-        if (isFunction(componentProps)) {
-          componentProps = componentProps({ schema, tableAction, formModel, formActionType }) ?? {};
-        }
-        if (schema.component === 'Divider') {
-          componentProps = Object.assign({ type: 'horizontal' }, componentProps, {
-            orientation: 'left',
-            plain: true,
-          });
-        }
-        return componentProps as Recordable;
-      });
-
-      const getDisable = computed(() => {
-        const { disabled: globDisabled } = props.formProps;
-        const { dynamicDisabled } = props.schema;
-        const { disabled: itemDisabled = false } = unref(getComponentsProps);
-        let disabled = !!globDisabled || itemDisabled;
-        if (isBoolean(dynamicDisabled)) {
-          disabled = dynamicDisabled;
-        }
-        if (isFunction(dynamicDisabled)) {
-          disabled = dynamicDisabled(unref(getValues));
-        }
-        return disabled;
-      });
-
-      function getShow(): { isShow: boolean; isIfShow: boolean } {
-        const { show, ifShow } = props.schema;
-        const { showAdvancedButton } = props.formProps;
-        const itemIsAdvanced = showAdvancedButton ? (isBoolean(props.schema.isAdvanced) ? props.schema.isAdvanced : true) : true;
-
-        let isShow = true;
-        let isIfShow = true;
-
-        if (isBoolean(show)) {
-          isShow = show;
-        }
-        if (isBoolean(ifShow)) {
-          isIfShow = ifShow;
-        }
-        if (isFunction(show)) {
-          isShow = show(unref(getValues));
-        }
-        if (isFunction(ifShow)) {
-          isIfShow = ifShow(unref(getValues));
-        }
-        isShow = isShow && itemIsAdvanced;
-        return { isShow, isIfShow };
-      }
-
-      function handleRules(): ValidationRule[] {
-        const { rules: defRules = [], component, rulesMessageJoinLabel, label, dynamicRules, required } = props.schema;
-
-        if (isFunction(dynamicRules)) {
-          return dynamicRules(unref(getValues)) as ValidationRule[];
-        }
-
-        let rules: ValidationRule[] = cloneDeep(defRules) as ValidationRule[];
-        const { rulesMessageJoinLabel: globalRulesMessageJoinLabel } = props.formProps;
-
-        const joinLabel = Reflect.has(props.schema, 'rulesMessageJoinLabel') ? rulesMessageJoinLabel : globalRulesMessageJoinLabel;
-        const defaultMsg = createPlaceholderMessage(component) + `${joinLabel ? label : ''}`;
-
-        function validator(rule: any, value: any) {
-          const msg = rule.message || defaultMsg;
-          if (value === undefined || isNull(value)) {
-            // 绌哄��
-            return Promise.reject(msg);
-          } else if (Array.isArray(value) && value.length === 0) {
-            // 鏁扮粍绫诲瀷
-            return Promise.reject(msg);
-          } else if (typeof value === 'string' && value.trim() === '') {
-            // 绌哄瓧绗︿覆
-            return Promise.reject(msg);
-          } else if (
-            typeof value === 'object' &&
-            Reflect.has(value, 'checked') &&
-            Reflect.has(value, 'halfChecked') &&
-            Array.isArray(value.checked) &&
-            Array.isArray(value.halfChecked) &&
-            value.checked.length === 0 &&
-            value.halfChecked.length === 0
-          ) {
-            // 闈炲叧鑱旈�夋嫨鐨則ree缁勪欢
-            return Promise.reject(msg);
-          }
-          return Promise.resolve();
-        }
-
-        const getRequired = isFunction(required) ? required(unref(getValues)) : required;
-
-        if ((!rules || rules.length === 0) && getRequired) {
-          rules = [{ required: getRequired, validator }];
-        }
-
-        const requiredRuleIndex: number = rules.findIndex((rule) => Reflect.has(rule, 'required') && !Reflect.has(rule, 'validator'));
-
-        if (requiredRuleIndex !== -1) {
-          const rule = rules[requiredRuleIndex];
-          const { isShow } = getShow();
-          if (!isShow) {
-            rule.required = false;
-          }
-          if (component) {
-            if (!Reflect.has(rule, 'type')) {
-              rule.type = component === 'InputNumber' ? 'number' : 'string';
-            }
-
-            rule.message = rule.message || defaultMsg;
-
-            if (component.includes('Input') || component.includes('Textarea')) {
-              rule.whitespace = true;
-            }
-            const valueFormat = unref(getComponentsProps)?.valueFormat;
-            setComponentRuleType(rule, component, valueFormat);
-          }
-        }
-
-        // Maximum input length rule check
-        const characterInx = rules.findIndex((val) => val.max);
-        if (characterInx !== -1 && !rules[characterInx].validator) {
-          rules[characterInx].message = rules[characterInx].message || t('component.form.maxTip', [rules[characterInx].max] as Recordable);
-        }
-        return rules;
-      }
-
-      function renderComponent() {
-        const { renderComponentContent, component, field, changeEvent = 'change', valueField } = props.schema;
-
-        const isCheck = component && ['Switch', 'Checkbox'].includes(component);
-
-        const eventKey = `on${upperFirst(changeEvent)}`;
-
-        const on = {
-          [eventKey]: (...args: Nullable<Recordable>[]) => {
-            const [e] = args;
-            if (propsData[eventKey]) {
-              propsData[eventKey](...args);
-            }
-            const target = e ? e.target : null;
-            const value = target ? (isCheck ? target.checked : target.value) : e;
-            props.setFormModel(field, value);
-          },
-        };
-        const Comp = componentMap.get(component) as ReturnType<typeof defineComponent>;
-
-        const { autoSetPlaceHolder, size } = props.formProps;
-        const propsData: Recordable = {
-          allowClear: true,
-          getPopupContainer: (trigger: Element) => trigger.parentNode,
-          size,
-          ...unref(getComponentsProps),
-          disabled: unref(getDisable),
-        };
-
-        const isCreatePlaceholder = !propsData.disabled && autoSetPlaceHolder;
-        // RangePicker place鏄竴涓暟缁�
-        if (isCreatePlaceholder && component !== 'RangePicker' && component) {
-          //鑷姩璁剧疆placeholder
-          propsData.placeholder = unref(getComponentsProps)?.placeholder || createPlaceholderMessage(component) + props.schema.label;
-        }
-        propsData.codeField = field;
-        propsData.formValues = unref(getValues);
-
-        const bindValue: Recordable = {
-          [valueField || (isCheck ? 'checked' : 'value')]: props.formModel[field],
-        };
-
-        const compAttr: Recordable = {
-          ...propsData,
-          ...on,
-          ...bindValue,
-        };
-
-        if (!renderComponentContent) {
-          return <Comp {...compAttr} />;
-        }
-        const compSlot = isFunction(renderComponentContent)
-          ? { ...renderComponentContent(unref(getValues)) }
-          : {
-              default: () => renderComponentContent,
-            };
-        return <Comp {...compAttr}>{compSlot}</Comp>;
-      }
-
-      /**
-       *娓叉煋Label
-       * @updateBy:zyf
-       */
-      function renderLabelHelpMessage() {
-        //update-begin-author:taoyan date:2022-9-7 for: VUEN-2061銆愭牱寮忋�憃nline琛ㄥ崟瓒呭嚭4涓� .. 鐪佺暐鏄剧ず
-        //label瀹藉害鏀寔鑷畾涔�
-        const { label, helpMessage, helpComponentProps, subLabel, labelLength } = props.schema;
-        let showLabel:string = (label+'')
-        if(labelLength && showLabel.length>4){
-          showLabel = showLabel.substr(0, labelLength);
-        }
-        const titleObj = {title: label}
-        const renderLabel = subLabel ? (
-          <span>
-            {label} <span class="text-secondary">{subLabel}</span>
-          </span>
-        ) : (
-          labelLength ? (
-            <label {...titleObj}>{showLabel}</label>
-          ) : (
-            label
-          ) 
-        );
-        //update-end-author:taoyan date:2022-9-7 for: VUEN-2061銆愭牱寮忋�憃nline琛ㄥ崟瓒呭嚭4涓� .. 鐪佺暐鏄剧ず
-        const getHelpMessage = isFunction(helpMessage) ? helpMessage(unref(getValues)) : helpMessage;
-        if (!getHelpMessage || (Array.isArray(getHelpMessage) && getHelpMessage.length === 0)) {
-          return renderLabel;
-        }
-        return (
-          <span>
-            {renderLabel}
-            <BasicHelp placement="top" class="mx-1" text={getHelpMessage} {...helpComponentProps} />
-          </span>
-        );
-      }
-
-      function renderItem() {
-        const { itemProps, slot, render, field, suffix, component } = props.schema;
-        const { labelCol, wrapperCol } = unref(itemLabelWidthProp);
-        const { colon } = props.formProps;
-
-        if (component === 'Divider') {
-          return (
-            <Col span={24}>
-              <Divider {...unref(getComponentsProps)}>{renderLabelHelpMessage()}</Divider>
-            </Col>
-          );
-        } else {
-          const getContent = () => {
-            return slot ? getSlot(slots, slot, unref(getValues)) : render ? render(unref(getValues)) : renderComponent();
-          };
-
-          const showSuffix = !!suffix;
-          const getSuffix = isFunction(suffix) ? suffix(unref(getValues)) : suffix;
-
-          return (
-            <Form.Item
-              name={field}
-              colon={colon}
-              class={{ 'suffix-item': showSuffix }}
-              {...(itemProps as Recordable)}
-              label={renderLabelHelpMessage()}
-              rules={handleRules()}
-              labelCol={labelCol}
-              wrapperCol={wrapperCol}
-            >
-              <div style="display:flex">
-                {/* author: sunjianlei for: 銆怴UEN-744銆戞澶勫姞涓� width: 100%; 鍥犱负瑕侀槻姝㈢粍浠跺搴﹁秴鍑� FormItem */}
-                <div style="flex:1; width: 100%;">{getContent()}</div>
-                {showSuffix && <span class="suffix">{getSuffix}</span>}
-              </div>
-            </Form.Item>
-          );
-        }
-      }
-
-      return () => {
-        const { colProps = {}, colSlot, renderColContent, component } = props.schema;
-        if (!componentMap.has(component)) {
-          return null;
-        }
-
-        const { baseColProps = {} } = props.formProps;
-        const realColProps = { ...baseColProps, ...colProps };
-        const { isIfShow, isShow } = getShow();
-        const values = unref(getValues);
-
-        const getContent = () => {
-          return colSlot ? getSlot(slots, colSlot, values) : renderColContent ? renderColContent(values) : renderItem();
-        };
-
-        return (
-          isIfShow && (
-            <Col {...realColProps} v-show={isShow}>
-              {getContent()}
-            </Col>
-          )
-        );
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/components/RadioButtonGroup.vue b/src/components/Form/src/components/RadioButtonGroup.vue
deleted file mode 100644
index c2c7b22..0000000
--- a/src/components/Form/src/components/RadioButtonGroup.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<!--
- * @Description:It is troublesome to implement radio button group in the form. So it is extracted independently as a separate component
--->
-<template>
-  <RadioGroup v-bind="attrs" v-model:value="state" button-style="solid">
-    <template v-for="item in getOptions" :key="`${item.value}`">
-      <RadioButton :value="item.value" :disabled="item.disabled">
-        {{ item.label }}
-      </RadioButton>
-    </template>
-  </RadioGroup>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, computed } from 'vue';
-  import { Radio } from 'ant-design-vue';
-  import { isString } from '/@/utils/is';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-
-  type OptionsItem = { label: string; value: string | number | boolean; disabled?: boolean };
-  type RadioItem = string | OptionsItem;
-
-  export default defineComponent({
-    name: 'RadioButtonGroup',
-    components: {
-      RadioGroup: Radio.Group,
-      RadioButton: Radio.Button,
-    },
-    props: {
-      value: {
-        type: [String, Number, Boolean] as PropType<string | number | boolean>,
-      },
-      options: {
-        type: Array as PropType<RadioItem[]>,
-        default: () => [],
-      },
-    },
-    setup(props) {
-      const attrs = useAttrs();
-      // Embedded in the form, just use the hook binding to perform form verification
-      const [state] = useRuleFormItem(props);
-
-      // Processing options value
-      const getOptions = computed((): OptionsItem[] => {
-        const { options } = props;
-        if (!options || options?.length === 0) return [];
-
-        const isStringArr = options.some((item) => isString(item));
-        if (!isStringArr) return options as OptionsItem[];
-
-        return options.map((item) => ({ label: item, value: item })) as OptionsItem[];
-      });
-
-      return { state, getOptions, attrs };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/helper.ts b/src/components/Form/src/helper.ts
deleted file mode 100644
index ac76f26..0000000
--- a/src/components/Form/src/helper.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import type { ValidationRule } from 'ant-design-vue/lib/form/Form';
-import type { ComponentType } from './types/index';
-import { useI18n } from '/@/hooks/web/useI18n';
-import { dateUtil } from '/@/utils/dateUtil';
-import { isNumber, isObject } from '/@/utils/is';
-
-const { t } = useI18n();
-
-/**
- * @description: 鐢熸垚placeholder
- */
-export function createPlaceholderMessage(component: ComponentType) {
-  if (component.includes('Input') || component.includes('Complete')) {
-    return t('common.inputText');
-  }
-  if (component.includes('Picker')) {
-    return t('common.chooseText');
-  }
-  if (
-    component.includes('Select') ||
-    component.includes('Cascader') ||
-    component.includes('Checkbox') ||
-    component.includes('Radio') ||
-    component.includes('Switch')
-  ) {
-    // return `璇烽�夋嫨${label}`;
-    return t('common.chooseText');
-  }
-  return '';
-}
-
-const DATE_TYPE = ['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker'];
-
-function genType() {
-  return [...DATE_TYPE, 'RangePicker'];
-}
-
-export function setComponentRuleType(rule: ValidationRule, component: ComponentType, valueFormat: string) {
-  if (['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker'].includes(component)) {
-    rule.type = valueFormat ? 'string' : 'object';
-  } else if (['RangePicker', 'Upload', 'CheckboxGroup', 'TimePicker'].includes(component)) {
-    rule.type = 'array';
-  } else if (['InputNumber'].includes(component)) {
-    rule.type = 'number';
-  }
-}
-
-export function processDateValue(attr: Recordable, component: string) {
-  const { valueFormat, value } = attr;
-  if (valueFormat) {
-    attr.value = isObject(value) ? dateUtil(value).format(valueFormat) : value;
-  } else if (DATE_TYPE.includes(component) && value) {
-    attr.value = dateUtil(attr.value);
-  }
-}
-
-export function handleInputNumberValue(component?: ComponentType, val?: any) {
-  if (!component) return val;
-  if (['Input', 'InputPassword', 'InputSearch', 'InputTextArea'].includes(component)) {
-    return val && isNumber(val) ? `${val}` : val;
-  }
-  return val;
-}
-
-/**
- * 鏃堕棿瀛楁
- */
-export const dateItemType = genType();
diff --git a/src/components/Form/src/hooks/useAdvanced.ts b/src/components/Form/src/hooks/useAdvanced.ts
deleted file mode 100644
index 6842c0a..0000000
--- a/src/components/Form/src/hooks/useAdvanced.ts
+++ /dev/null
@@ -1,164 +0,0 @@
-import type { ColEx } from '../types';
-import type { AdvanceState } from '../types/hooks';
-import type { ComputedRef, Ref } from 'vue';
-import type { FormProps, FormSchema } from '../types/form';
-import { computed, unref, watch } from 'vue';
-import { isBoolean, isFunction, isNumber, isObject } from '/@/utils/is';
-import { useBreakpoint } from '/@/hooks/event/useBreakpoint';
-import { useDebounceFn } from '@vueuse/core';
-
-const BASIC_COL_LEN = 24;
-
-interface UseAdvancedContext {
-  advanceState: AdvanceState;
-  emit: EmitType;
-  getProps: ComputedRef<FormProps>;
-  getSchema: ComputedRef<FormSchema[]>;
-  formModel: Recordable;
-  defaultValueRef: Ref<Recordable>;
-}
-
-export default function ({ advanceState, emit, getProps, getSchema, formModel, defaultValueRef }: UseAdvancedContext) {
-  const { realWidthRef, screenEnum, screenRef } = useBreakpoint();
-
-  const getEmptySpan = computed((): number => {
-    if (!advanceState.isAdvanced) {
-      return 0;
-    }
-    // For some special cases, you need to manually specify additional blank lines
-    const emptySpan = unref(getProps).emptySpan || 0;
-
-    if (isNumber(emptySpan)) {
-      return emptySpan;
-    }
-    if (isObject(emptySpan)) {
-      const { span = 0 } = emptySpan;
-      const screen = unref(screenRef) as string;
-
-      const screenSpan = (emptySpan as any)[screen.toLowerCase()];
-      return screenSpan || span || 0;
-    }
-    return 0;
-  });
-
-  const debounceUpdateAdvanced = useDebounceFn(updateAdvanced, 30);
-
-  watch(
-    [() => unref(getSchema), () => advanceState.isAdvanced, () => unref(realWidthRef)],
-    () => {
-      const { showAdvancedButton } = unref(getProps);
-      if (showAdvancedButton) {
-        debounceUpdateAdvanced();
-      }
-    },
-    { immediate: true }
-  );
-
-  function getAdvanced(itemCol: Partial<ColEx>, itemColSum = 0, isLastAction = false, index = 0) {
-    const width = unref(realWidthRef);
-
-    const mdWidth =
-      parseInt(itemCol.md as string) || parseInt(itemCol.xs as string) || parseInt(itemCol.sm as string) || (itemCol.span as number) || BASIC_COL_LEN;
-
-    const lgWidth = parseInt(itemCol.lg as string) || mdWidth;
-    const xlWidth = parseInt(itemCol.xl as string) || lgWidth;
-    const xxlWidth = parseInt(itemCol.xxl as string) || xlWidth;
-    if (width <= screenEnum.LG) {
-      itemColSum += mdWidth;
-    } else if (width < screenEnum.XL) {
-      itemColSum += lgWidth;
-    } else if (width < screenEnum.XXL) {
-      itemColSum += xlWidth;
-    } else {
-      itemColSum += xxlWidth;
-    }
-
-    let autoAdvancedCol = unref(getProps).autoAdvancedCol ?? 3;
-
-    if (isLastAction) {
-      advanceState.hideAdvanceBtn = unref(getSchema).length <= autoAdvancedCol;
-      // update-begin--author:sunjianlei---date:20211108---for: 娉ㄩ噴鎺夎閫昏緫锛屼娇灏忎簬绛変簬2琛屾椂锛屼篃鏄剧ず灞曞紑鏀惰捣鎸夐挳
-      /* if (itemColSum <= BASIC_COL_LEN * 2) {
-        // 灏忎簬绛変簬2琛屾椂锛屼笉鏄剧ず鎶樺彔鍜屽睍寮�鎸夐挳
-        advanceState.hideAdvanceBtn = true;
-        advanceState.isAdvanced = true;
-      } else */
-      // update-end--author:sunjianlei---date:20211108---for: 娉ㄩ噴鎺夎閫昏緫锛屼娇灏忎簬绛変簬2琛屾椂锛屼篃鏄剧ず灞曞紑鏀惰捣鎸夐挳
-      if (itemColSum > BASIC_COL_LEN * 2 && itemColSum <= BASIC_COL_LEN * (unref(getProps).autoAdvancedLine || 3)) {
-        advanceState.hideAdvanceBtn = false;
-
-        // 榛樿瓒呰繃 3 琛屾姌鍙�
-      } else if (!advanceState.isLoad) {
-        advanceState.isLoad = true;
-        advanceState.isAdvanced = !advanceState.isAdvanced;
-        // update-begin--author:sunjianlei---date:20211108---for: 濡傛灉鎬诲垪鏁板ぇ浜� autoAdvancedCol锛屽氨榛樿鎶樺彔
-        if (unref(getSchema).length > autoAdvancedCol) {
-          advanceState.hideAdvanceBtn = false;
-          advanceState.isAdvanced = false;
-        }
-        // update-end--author:sunjianlei---date:20211108---for: 濡傛灉鎬诲垪鏁板ぇ浜� autoAdvancedCol锛屽氨榛樿鎶樺彔
-      }
-      return { isAdvanced: advanceState.isAdvanced, itemColSum };
-    }
-    if (itemColSum > BASIC_COL_LEN * (unref(getProps).alwaysShowLines || 1)) {
-      return { isAdvanced: advanceState.isAdvanced, itemColSum };
-    } else if (!advanceState.isAdvanced && index + 1 > autoAdvancedCol) {
-      // 濡傛灉褰撳墠鏄敹璧风姸鎬侊紝骞朵笖褰撳墠鍒椾笅鏍� > autoAdvancedCol锛屽氨闅愯棌
-      return { isAdvanced: false, itemColSum };
-    } else {
-      // The first line is always displayed
-      return { isAdvanced: true, itemColSum };
-    }
-  }
-
-  function updateAdvanced() {
-    let itemColSum = 0;
-    let realItemColSum = 0;
-    const { baseColProps = {} } = unref(getProps);
-
-    const schemas = unref(getSchema);
-    for (let i = 0; i < schemas.length; i++) {
-      const schema = schemas[i];
-      const { show, colProps } = schema;
-      let isShow = true;
-
-      if (isBoolean(show)) {
-        isShow = show;
-      }
-
-      if (isFunction(show)) {
-        isShow = show({
-          schema: schema,
-          model: formModel,
-          field: schema.field,
-          values: {
-            ...unref(defaultValueRef),
-            ...formModel,
-          },
-        });
-      }
-
-      if (isShow && (colProps || baseColProps)) {
-        const { itemColSum: sum, isAdvanced } = getAdvanced({ ...baseColProps, ...colProps }, itemColSum, false, i);
-
-        itemColSum = sum || 0;
-        if (isAdvanced) {
-          realItemColSum = itemColSum;
-        }
-        schema.isAdvanced = isAdvanced;
-      }
-    }
-
-    advanceState.actionSpan = (realItemColSum % BASIC_COL_LEN) + unref(getEmptySpan);
-
-    getAdvanced(unref(getProps).actionColOptions || { span: BASIC_COL_LEN }, itemColSum, true);
-
-    emit('advanced-change');
-  }
-
-  function handleToggleAdvanced() {
-    advanceState.isAdvanced = !advanceState.isAdvanced;
-  }
-
-  return { handleToggleAdvanced };
-}
diff --git a/src/components/Form/src/hooks/useAutoFocus.ts b/src/components/Form/src/hooks/useAutoFocus.ts
deleted file mode 100644
index 85dcc2f..0000000
--- a/src/components/Form/src/hooks/useAutoFocus.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import type { ComputedRef, Ref } from 'vue';
-import type { FormSchema, FormActionType, FormProps } from '../types/form';
-
-import { unref, nextTick, watchEffect } from 'vue';
-
-interface UseAutoFocusContext {
-  getSchema: ComputedRef<FormSchema[]>;
-  getProps: ComputedRef<FormProps>;
-  isInitedDefault: Ref<boolean>;
-  formElRef: Ref<FormActionType>;
-}
-export async function useAutoFocus({ getSchema, getProps, formElRef, isInitedDefault }: UseAutoFocusContext) {
-  watchEffect(async () => {
-    if (unref(isInitedDefault) || !unref(getProps).autoFocusFirstItem) {
-      return;
-    }
-    await nextTick();
-    const schemas = unref(getSchema);
-    const formEl = unref(formElRef);
-    const el = (formEl as any)?.$el as HTMLElement;
-    if (!formEl || !el || !schemas || schemas.length === 0) {
-      return;
-    }
-
-    const firstItem = schemas[0];
-    // Only open when the first form item is input type
-    if (!firstItem.component.includes('Input')) {
-      return;
-    }
-
-    const inputEl = el.querySelector('.ant-row:first-child input') as Nullable<HTMLInputElement>;
-    if (!inputEl) return;
-    inputEl?.focus();
-  });
-}
diff --git a/src/components/Form/src/hooks/useComponentRegister.ts b/src/components/Form/src/hooks/useComponentRegister.ts
deleted file mode 100644
index 218aaa9..0000000
--- a/src/components/Form/src/hooks/useComponentRegister.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import type { ComponentType } from '../types/index';
-import { tryOnUnmounted } from '@vueuse/core';
-import { add, del } from '../componentMap';
-import type { Component } from 'vue';
-
-export function useComponentRegister(compName: ComponentType, comp: Component) {
-  add(compName, comp);
-  tryOnUnmounted(() => {
-    del(compName);
-  });
-}
diff --git a/src/components/Form/src/hooks/useForm.ts b/src/components/Form/src/hooks/useForm.ts
deleted file mode 100644
index fd5885f..0000000
--- a/src/components/Form/src/hooks/useForm.ts
+++ /dev/null
@@ -1,159 +0,0 @@
-import type { FormProps, FormActionType, UseFormReturnType, FormSchema } from '../types/form';
-import type { NamePath } from 'ant-design-vue/lib/form/interface';
-import type { DynamicProps } from '/#/utils';
-import { handleRangeValue } from '../utils/formUtils';
-import { ref, onUnmounted, unref, nextTick, watch } from 'vue';
-import { isProdMode } from '/@/utils/env';
-import { error } from '/@/utils/log';
-import { getDynamicProps, getValueType } from '/@/utils';
-import { add } from "/@/components/Form/src/componentMap";
-//闆嗘垚online涓撶敤鎺т欢
-import { OnlineSelectCascade, LinkTableCard, LinkTableSelect } from  '@jeecg/online';
-
-export declare type ValidateFields = (nameList?: NamePath[]) => Promise<Recordable>;
-
-type Props = Partial<DynamicProps<FormProps>>;
-
-export function useForm(props?: Props): UseFormReturnType {
-  const formRef = ref<Nullable<FormActionType>>(null);
-  const loadedRef = ref<Nullable<boolean>>(false);
-
-  //闆嗘垚online涓撶敤鎺т欢
-  add("OnlineSelectCascade", OnlineSelectCascade)
-  add("LinkTableCard", LinkTableCard)
-  add("LinkTableSelect", LinkTableSelect)
-  
-  async function getForm() {
-    const form = unref(formRef);
-    if (!form) {
-      error('The form instance has not been obtained, please make sure that the form has been rendered when performing the form operation!');
-    }
-    await nextTick();
-    return form as FormActionType;
-  }
-
-  function register(instance: FormActionType) {
-    isProdMode() &&
-      onUnmounted(() => {
-        formRef.value = null;
-        loadedRef.value = null;
-      });
-    if (unref(loadedRef) && isProdMode() && instance === unref(formRef)) return;
-
-    formRef.value = instance;
-    loadedRef.value = true;
-
-    watch(
-      () => props,
-      () => {
-        props && instance.setProps(getDynamicProps(props));
-      },
-      {
-        immediate: true,
-        deep: true,
-      }
-    );
-  }
-
-  const methods: FormActionType = {
-    scrollToField: async (name: NamePath, options?: ScrollOptions | undefined) => {
-      const form = await getForm();
-      form.scrollToField(name, options);
-    },
-    setProps: async (formProps: Partial<FormProps>) => {
-      const form = await getForm();
-      form.setProps(formProps);
-    },
-
-    updateSchema: async (data: Partial<FormSchema> | Partial<FormSchema>[]) => {
-      const form = await getForm();
-      form.updateSchema(data);
-    },
-
-    resetSchema: async (data: Partial<FormSchema> | Partial<FormSchema>[]) => {
-      const form = await getForm();
-      form.resetSchema(data);
-    },
-
-    clearValidate: async (name?: string | string[]) => {
-      const form = await getForm();
-      form.clearValidate(name);
-    },
-
-    resetFields: async () => {
-      getForm().then(async (form) => {
-        await form.resetFields();
-      });
-    },
-
-    removeSchemaByFiled: async (field: string | string[]) => {
-      unref(formRef)?.removeSchemaByFiled(field);
-    },
-
-    // TODO promisify
-    getFieldsValue: <T>() => {
-      //update-begin-author:taoyan date:2022-7-5 for: VUEN-1341銆愭祦绋嬨�戠紪鐮佹柟寮� 娴佺▼鑺傜偣缂栬緫琛ㄥ崟鏃讹紝濉啓鏁版嵁鎶ラ敊 鍖呮嫭鐢ㄦ埛缁勪欢銆侀儴闂ㄧ粍浠躲�佺渷甯傚尯
-      let values = unref(formRef)?.getFieldsValue() as T;
-      if(values){
-        Object.keys(values).map(key=>{
-          if (values[key] instanceof Array) {
-            // update-begin-author:sunjianlei date:20221205 for: 銆恑ssues/4330銆戝垽鏂鏋滄槸瀵硅薄鏁扮粍锛屽垯涓嶆嫾鎺�
-            let isObject = typeof (values[key][0] || '') === 'object';
-            if (!isObject) {
-              values[key] = values[key].join(',');
-            }
-            // update-end-author:sunjianlei date:20221205 for: 銆恑ssues/4330銆戝垽鏂鏋滄槸瀵硅薄鏁扮粍锛屽垯涓嶆嫾鎺�
-          }
-        });
-      }
-      return values;
-      //update-end-author:taoyan date:2022-7-5 for: VUEN-1341銆愭祦绋嬨�戠紪鐮佹柟寮� 娴佺▼鑺傜偣缂栬緫琛ㄥ崟鏃讹紝濉啓鏁版嵁鎶ラ敊 鍖呮嫭鐢ㄦ埛缁勪欢銆侀儴闂ㄧ粍浠躲�佺渷甯傚尯
-    },
-
-    setFieldsValue: async <T>(values: T) => {
-      const form = await getForm();
-      form.setFieldsValue<T>(values);
-    },
-
-    appendSchemaByField: async (schema: FormSchema, prefixField: string | undefined, first: boolean) => {
-      const form = await getForm();
-      form.appendSchemaByField(schema, prefixField, first);
-    },
-
-    submit: async (): Promise<any> => {
-      const form = await getForm();
-      return form.submit();
-    },
-
-    /**
-     * 琛ㄥ崟楠岃瘉骞惰繑鍥炶〃鍗曞��
-     * @update:娣诲姞琛ㄥ崟鍊艰浆鎹㈤�昏緫
-     * @updateBy:zyf
-     * @updateDate:2021-09-02
-     */
-    validate: async (nameList?: NamePath[]): Promise<Recordable> => {
-      const form = await getForm();
-      let getProps = props || form.getProps;
-      let values = form.validate(nameList).then((values) => {
-        for (let key in values) {
-          if (values[key] instanceof Array) {
-            let valueType = getValueType(getProps, key);
-            if (valueType === 'string') {
-              values[key] = values[key].join(',');
-            }
-          }
-        }
-        //--@updateBy-begin----author:liusq---date:20210916------for:澶勭悊鍖哄煙浜嬩欢瀛楀吀淇℃伅------
-        return handleRangeValue(getProps, values);
-        //--@updateBy-end----author:liusq---date:20210916------for:澶勭悊鍖哄煙浜嬩欢瀛楀吀淇℃伅------
-      });
-      return values;
-    },
-    validateFields: async (nameList?: NamePath[]): Promise<Recordable> => {
-      const form = await getForm();
-      return form.validateFields(nameList);
-    },
-  };
-
-  return [register, methods];
-}
diff --git a/src/components/Form/src/hooks/useFormContext.ts b/src/components/Form/src/hooks/useFormContext.ts
deleted file mode 100644
index 01dfadd..0000000
--- a/src/components/Form/src/hooks/useFormContext.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import type { InjectionKey } from 'vue';
-import { createContext, useContext } from '/@/hooks/core/useContext';
-
-export interface FormContextProps {
-  resetAction: () => Promise<void>;
-  submitAction: () => Promise<void>;
-}
-
-const key: InjectionKey<FormContextProps> = Symbol();
-
-export function createFormContext(context: FormContextProps) {
-  return createContext<FormContextProps>(context, key);
-}
-
-export function useFormContext() {
-  return useContext<FormContextProps>(key);
-}
diff --git a/src/components/Form/src/hooks/useFormEvents.ts b/src/components/Form/src/hooks/useFormEvents.ts
deleted file mode 100644
index 3bb6664..0000000
--- a/src/components/Form/src/hooks/useFormEvents.ts
+++ /dev/null
@@ -1,276 +0,0 @@
-import type { ComputedRef, Ref } from 'vue';
-import type { FormProps, FormSchema, FormActionType } from '../types/form';
-import type { NamePath } from 'ant-design-vue/lib/form/interface';
-import { unref, toRaw } from 'vue';
-import { isArray, isFunction, isObject, isString } from '/@/utils/is';
-import { deepMerge, getValueType } from '/@/utils';
-import { dateItemType, handleInputNumberValue } from '../helper';
-import { dateUtil } from '/@/utils/dateUtil';
-import { cloneDeep, uniqBy } from 'lodash-es';
-import { error } from '/@/utils/log';
-
-interface UseFormActionContext {
-  emit: EmitType;
-  getProps: ComputedRef<FormProps>;
-  getSchema: ComputedRef<FormSchema[]>;
-  formModel: Recordable;
-  defaultValueRef: Ref<Recordable>;
-  formElRef: Ref<FormActionType>;
-  schemaRef: Ref<FormSchema[]>;
-  handleFormValues: Fn;
-}
-export function useFormEvents({
-  emit,
-  getProps,
-  formModel,
-  getSchema,
-  defaultValueRef,
-  formElRef,
-  schemaRef,
-  handleFormValues,
-}: UseFormActionContext) {
-  async function resetFields(): Promise<void> {
-    const { resetFunc, submitOnReset } = unref(getProps);
-    resetFunc && isFunction(resetFunc) && (await resetFunc());
-
-    const formEl = unref(formElRef);
-    if (!formEl) return;
-
-    Object.keys(formModel).forEach((key) => {
-      formModel[key] = defaultValueRef.value[key];
-    });
-    clearValidate();
-    emit('reset', toRaw(formModel));
-    submitOnReset && handleSubmit();
-  }
-
-  /**
-   * @description: Set form value
-   */
-  async function setFieldsValue(values: Recordable): Promise<void> {
-    const fields = unref(getSchema)
-      .map((item) => item.field)
-      .filter(Boolean);
-
-    const validKeys: string[] = [];
-    Object.keys(values).forEach((key) => {
-      const schema = unref(getSchema).find((item) => item.field === key);
-      let value = values[key];
-
-      //antd3鍗囩骇鍚庯紝online琛ㄥ崟鏃堕棿鎺т欢閫変腑鍊兼姤js閿� TypeError: Reflect.has called on non-object
-      if(!(values instanceof Object)){
-        return;
-      }
-      
-      const hasKey = Reflect.has(values, key);
-
-      value = handleInputNumberValue(schema?.component, value);
-      // 0| '' is allow
-      if (hasKey && fields.includes(key)) {
-        // time type
-        if (itemIsDateType(key)) {
-          if (Array.isArray(value)) {
-            const arr: any[] = [];
-            for (const ele of value) {
-              arr.push(ele ? dateUtil(ele) : null);
-            }
-            formModel[key] = arr;
-          } else {
-            const { componentProps } = schema || {};
-            let _props = componentProps as any;
-            if (typeof componentProps === 'function') {
-              _props = _props({ formModel });
-            }
-            formModel[key] = value ? (_props?.valueFormat ? value : dateUtil(value)) : null;
-          }
-        } else {
-          formModel[key] = value;
-        }
-        validKeys.push(key);
-      }
-    });
-    validateFields(validKeys).catch((_) => {});
-  }
-  /**
-   * @description: Delete based on field name
-   */
-  async function removeSchemaByFiled(fields: string | string[]): Promise<void> {
-    const schemaList: FormSchema[] = cloneDeep(unref(getSchema));
-    if (!fields) {
-      return;
-    }
-
-    let fieldList: string[] = isString(fields) ? [fields] : fields;
-    if (isString(fields)) {
-      fieldList = [fields];
-    }
-    for (const field of fieldList) {
-      _removeSchemaByFiled(field, schemaList);
-    }
-    schemaRef.value = schemaList;
-  }
-
-  /**
-   * @description: Delete based on field name
-   */
-  function _removeSchemaByFiled(field: string, schemaList: FormSchema[]): void {
-    if (isString(field)) {
-      const index = schemaList.findIndex((schema) => schema.field === field);
-      if (index !== -1) {
-        delete formModel[field];
-        schemaList.splice(index, 1);
-      }
-    }
-  }
-
-  /**
-   * @description: Insert after a certain field, if not insert the last
-   */
-  async function appendSchemaByField(schema: FormSchema, prefixField?: string, first = false) {
-    const schemaList: FormSchema[] = cloneDeep(unref(getSchema));
-
-    const index = schemaList.findIndex((schema) => schema.field === prefixField);
-    const hasInList = schemaList.some((item) => item.field === prefixField || schema.field);
-
-    if (!hasInList) return;
-
-    if (!prefixField || index === -1 || first) {
-      first ? schemaList.unshift(schema) : schemaList.push(schema);
-      schemaRef.value = schemaList;
-      return;
-    }
-    if (index !== -1) {
-      schemaList.splice(index + 1, 0, schema);
-    }
-    schemaRef.value = schemaList;
-  }
-
-  async function resetSchema(data: Partial<FormSchema> | Partial<FormSchema>[]) {
-    let updateData: Partial<FormSchema>[] = [];
-    if (isObject(data)) {
-      updateData.push(data as FormSchema);
-    }
-    if (isArray(data)) {
-      updateData = [...data];
-    }
-
-    const hasField = updateData.every((item) => item.component === 'Divider' || (Reflect.has(item, 'field') && item.field));
-
-    if (!hasField) {
-      error('All children of the form Schema array that need to be updated must contain the `field` field');
-      return;
-    }
-    schemaRef.value = updateData as FormSchema[];
-  }
-
-  async function updateSchema(data: Partial<FormSchema> | Partial<FormSchema>[]) {
-    let updateData: Partial<FormSchema>[] = [];
-    if (isObject(data)) {
-      updateData.push(data as FormSchema);
-    }
-    if (isArray(data)) {
-      updateData = [...data];
-    }
-
-    const hasField = updateData.every((item) => item.component === 'Divider' || (Reflect.has(item, 'field') && item.field));
-
-    if (!hasField) {
-      error('All children of the form Schema array that need to be updated must contain the `field` field');
-      return;
-    }
-    const schema: FormSchema[] = [];
-    updateData.forEach((item) => {
-      unref(getSchema).forEach((val) => {
-        if (val.field === item.field) {
-          const newSchema = deepMerge(val, item);
-          schema.push(newSchema as FormSchema);
-        } else {
-          schema.push(val);
-        }
-      });
-    });
-    schemaRef.value = uniqBy(schema, 'field');
-  }
-
-  function getFieldsValue(): Recordable {
-    const formEl = unref(formElRef);
-    if (!formEl) return {};
-    return handleFormValues(toRaw(unref(formModel)));
-  }
-
-  /**
-   * @description: Is it time
-   */
-  function itemIsDateType(key: string) {
-    return unref(getSchema).some((item) => {
-      return item.field === key ? dateItemType.includes(item.component) : false;
-    });
-  }
-
-  async function validateFields(nameList?: NamePath[] | undefined) {
-    return unref(formElRef)?.validateFields(nameList);
-  }
-
-  async function validate(nameList?: NamePath[] | undefined) {
-    return await unref(formElRef)?.validate(nameList);
-  }
-
-  async function clearValidate(name?: string | string[]) {
-    await unref(formElRef)?.clearValidate(name);
-  }
-
-  async function scrollToField(name: NamePath, options?: ScrollOptions | undefined) {
-    await unref(formElRef)?.scrollToField(name, options);
-  }
-
-  /**
-   * @description: Form submission
-   */
-  async function handleSubmit(e?: Event): Promise<void> {
-    e && e.preventDefault();
-    const { submitFunc } = unref(getProps);
-    if (submitFunc && isFunction(submitFunc)) {
-      await submitFunc();
-      return;
-    }
-    const formEl = unref(formElRef);
-    if (!formEl) return;
-    try {
-      const values = await validate();
-      //update-begin---author:zhangdaihao   Date:20140212  for锛歔bug鍙穄鏍戞満鏋勮皟鏁�------------
-      //--updateBy-begin----author:zyf---date:20211206------for:瀵规煡璇㈣〃鍗曟彁浜ょ殑鏁扮粍澶勭悊鎴愬瓧绗︿覆------
-      for (let key in values) {
-        if (values[key] instanceof Array) {
-          let valueType = getValueType(getProps, key);
-          if (valueType === 'string') {
-            values[key] = values[key].join(',');
-          }
-        }
-      }
-      //--updateBy-end----author:zyf---date:20211206------for:瀵规煡璇㈣〃鍗曟彁浜ょ殑鏁扮粍澶勭悊鎴愬瓧绗︿覆------
-      const res = handleFormValues(values);
-      emit('submit', res);
-    } catch (error) {
-      //update-begin-author:taoyan date:2022-11-4 for: 鍒楄〃鏌ヨ琛ㄥ崟浼氳Е鍙戞牎楠岄敊璇鑷撮噸缃け璐ワ紝鍘熷洜涓嶆槑
-      emit('submit', {});
-      console.error('query form validate error, please ignore!', error)
-      //throw new Error(error);
-      //update-end-author:taoyan date:2022-11-4 for: 鍒楄〃鏌ヨ琛ㄥ崟浼氳Е鍙戞牎楠岄敊璇鑷撮噸缃け璐ワ紝鍘熷洜涓嶆槑
-    }
-  }
-
-  return {
-    handleSubmit,
-    clearValidate,
-    validate,
-    validateFields,
-    getFieldsValue,
-    updateSchema,
-    resetSchema,
-    appendSchemaByField,
-    removeSchemaByFiled,
-    resetFields,
-    setFieldsValue,
-    scrollToField,
-  };
-}
diff --git a/src/components/Form/src/hooks/useFormValues.ts b/src/components/Form/src/hooks/useFormValues.ts
deleted file mode 100644
index db63c8d..0000000
--- a/src/components/Form/src/hooks/useFormValues.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import { isArray, isFunction, isObject, isString, isNullOrUnDef } from '/@/utils/is';
-import { unref } from 'vue';
-import type { Ref, ComputedRef } from 'vue';
-import type { FormProps, FormSchema } from '../types/form';
-import dayjs from "dayjs";
-import { set } from 'lodash-es';
-import { handleRangeValue } from '/@/components/Form/src/utils/formUtils';
-
-interface UseFormValuesContext {
-  defaultValueRef: Ref<any>;
-  getSchema: ComputedRef<FormSchema[]>;
-  getProps: ComputedRef<FormProps>;
-  formModel: Recordable;
-}
-export function useFormValues({ defaultValueRef, getSchema, formModel, getProps }: UseFormValuesContext) {
-  // Processing form values
-  function handleFormValues(values: Recordable) {
-    if (!isObject(values)) {
-      return {};
-    }
-    const res: Recordable = {};
-    for (const item of Object.entries(values)) {
-      let [, value] = item;
-      const [key] = item;
-      if (!key || (isArray(value) && value.length === 0) || isFunction(value)) {
-        continue;
-      }
-      const transformDateFunc = unref(getProps).transformDateFunc;
-      if (isObject(value)) {
-        value = transformDateFunc?.(value);
-      }
-      // 鍒ゆ柇鏄惁鏄痙ayjs瀹炰緥
-      if (isArray(value) && dayjs.isDayjs(value[0]) && dayjs.isDayjs(value[1])) {
-        value = value.map((item) => transformDateFunc?.(item));
-      }
-      // Remove spaces
-      if (isString(value)) {
-        value = value.trim();
-      }
-      set(res, key, value);
-    }
-    return handleRangeValue(getProps, res);
-  }
-
-  function initDefault() {
-    const schemas = unref(getSchema);
-    const obj: Recordable = {};
-    schemas.forEach((item) => {
-      const { defaultValue } = item;
-      if (!isNullOrUnDef(defaultValue)) {
-        obj[item.field] = defaultValue;
-        formModel[item.field] = defaultValue;
-      }
-    });
-    defaultValueRef.value = obj;
-  }
-
-  return { handleFormValues, initDefault };
-}
diff --git a/src/components/Form/src/hooks/useLabelWidth.ts b/src/components/Form/src/hooks/useLabelWidth.ts
deleted file mode 100644
index f994985..0000000
--- a/src/components/Form/src/hooks/useLabelWidth.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import type { Ref } from 'vue';
-import type { FormProps, FormSchema } from '../types/form';
-
-import { computed, unref } from 'vue';
-import { isNumber } from '/@/utils/is';
-
-export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref<FormProps>) {
-  return computed(() => {
-    const schemaItem = unref(schemaItemRef);
-    const { labelCol = {}, wrapperCol = {} } = schemaItem.itemProps || {};
-    const { labelWidth, disabledLabelWidth } = schemaItem;
-
-    const { labelWidth: globalLabelWidth, labelCol: globalLabelCol, wrapperCol: globWrapperCol,layout } = unref(propsRef);
-
-    // update-begin--author:sunjianlei---date:20211104---for: 绂佺敤鍏ㄥ眬 labelWidth锛屼笉鑷姩璁剧疆 textAlign --------
-    if (disabledLabelWidth) {
-      return { labelCol, wrapperCol };
-    }
-    // update-begin--author:sunjianlei---date:20211104---for: 绂佺敤鍏ㄥ眬 labelWidth锛屼笉鑷姩璁剧疆 textAlign --------
-
-    // If labelWidth is set globally, all items setting
-    if (!globalLabelWidth && !labelWidth && !globalLabelCol) {
-      labelCol.style = {
-        textAlign: 'left',
-      };
-      return { labelCol, wrapperCol };
-    }
-    let width = labelWidth || globalLabelWidth;
-    const col = { ...globalLabelCol, ...labelCol };
-    const wrapCol = { ...globWrapperCol, ...wrapperCol };
-
-    if (width) {
-      width = isNumber(width) ? `${width}px` : width;
-    }
-
-    return {
-      labelCol: { style: { width: width ? width : '100%' }, ...col },
-      wrapperCol: {
-        style: { width: layout === 'vertical' ? '100%' : `calc(100% - ${width})` },
-        ...wrapCol,
-      },
-    };
-  });
-}
diff --git a/src/components/Form/src/jeecg/components/JAddInput.vue b/src/components/Form/src/jeecg/components/JAddInput.vue
deleted file mode 100644
index f3bd2d6..0000000
--- a/src/components/Form/src/jeecg/components/JAddInput.vue
+++ /dev/null
@@ -1,123 +0,0 @@
-<template>
-  <div v-for="(param, index) in dynamicInput.params" :key="index" style="display: flex">
-    <a-input placeholder="璇疯緭鍏ュ弬鏁発ey" v-model:value="param.label" style="width: 30%; margin-bottom: 5px" @input="emitChange" />
-    <a-input placeholder="璇疯緭鍏ュ弬鏁皏alue" v-model:value="param.value" style="width: 30%; margin: 0 0 5px 5px" @input="emitChange" />
-    <MinusCircleOutlined
-      v-if="dynamicInput.params.length > min"
-      class="dynamic-delete-button"
-      @click="remove(param)"
-      style="width: 50px"
-    ></MinusCircleOutlined>
-  </div>
-  <div>
-    <a-button type="dashed" style="width: 60%" @click="add">
-      <PlusOutlined />
-      鏂板
-    </a-button>
-  </div>
-</template>
-<script lang="ts">
-  import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons-vue';
-  import { defineComponent, reactive, ref, UnwrapRef, watchEffect } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { isEmpty } from '/@/utils/is';
-  import { tryOnMounted, tryOnUnmounted } from '@vueuse/core';
-  interface Params {
-    label: string;
-    value: string;
-  }
-
-  export default defineComponent({
-    name: 'JAddInput',
-    props: {
-      value: propTypes.string.def(''),
-      //update-begin---author:wangshuai ---date:20220516  for锛歔VUEN-1043]绯荤粺缂栫爜瑙勫垯锛屾渶鍚庝竴涓緭鍏ユ涓嶈兘鍒犻櫎------------
-      //鑷畾涔夊垹闄ゆ寜閽灏戞墠浼氭樉绀�
-      min: propTypes.integer.def(1),
-      //update-end---author:wangshuai ---date:20220516  for锛歔VUEN-1043]绯荤粺缂栫爜瑙勫垯锛屾渶鍚庝竴涓緭鍏ユ涓嶈兘鍒犻櫎--------------
-    },
-    emits: ['change', 'update:value'],
-    setup(props, { emit }) {
-      //input鍔ㄦ�佹暟鎹�
-      const dynamicInput: UnwrapRef<{ params: Params[] }> = reactive({ params: [] });
-      //鍒犻櫎Input
-      const remove = (item: Params) => {
-        let index = dynamicInput.params.indexOf(item);
-        if (index !== -1) {
-          dynamicInput.params.splice(index, 1);
-        }
-        emitChange();
-      };
-      //鏂板Input
-      const add = () => {
-        dynamicInput.params.push({
-          label: '',
-          value: '',
-        });
-        emitChange();
-      };
-
-      //鐩戝惉浼犲叆鏁版嵁value
-      watchEffect(() => {
-        initVal();
-      });
-
-      /**
-       * 鍒濆鍖栨暟鍊�
-       */
-      function initVal() {
-        console.log('props.value', props.value);
-        dynamicInput.params = [];
-        if (props.value && props.value.indexOf('{') == 0) {
-          let jsonObj = JSON.parse(props.value);
-          Object.keys(jsonObj).forEach((key) => {
-            dynamicInput.params.push({ label: key, value: jsonObj[key] });
-          });
-        }
-      }
-      /**
-       * 鏁板�兼敼鍙�
-       */
-      function emitChange() {
-        let obj = {};
-        if (dynamicInput.params.length > 0) {
-          dynamicInput.params.forEach((item) => {
-            obj[item['label']] = item['value'];
-          });
-        }
-        emit('change', isEmpty(obj) ? '' : JSON.stringify(obj));
-        emit('update:value', isEmpty(obj) ? '' : JSON.stringify(obj));
-      }
-
-      return {
-        dynamicInput,
-        emitChange,
-        remove,
-        add,
-      };
-    },
-    components: {
-      MinusCircleOutlined,
-      PlusOutlined,
-    },
-  });
-</script>
-<style scoped>
-  .dynamic-delete-button {
-    cursor: pointer;
-    position: relative;
-    top: 4px;
-    font-size: 24px;
-    color: #999;
-    transition: all 0.3s;
-  }
-
-  .dynamic-delete-button:hover {
-    color: #777;
-  }
-
-  .dynamic-delete-button[disabled] {
-    cursor: not-allowed;
-    opacity: 0.5;
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JAreaLinkage.vue b/src/components/Form/src/jeecg/components/JAreaLinkage.vue
deleted file mode 100644
index 5fbeffb..0000000
--- a/src/components/Form/src/jeecg/components/JAreaLinkage.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-<template>
-  <Cascader v-bind="attrs" :value="state" :options="getOptions" @change="handleChange" />
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, reactive, watchEffect, computed, unref, watch, onMounted } from 'vue';
-  import { Cascader } from 'ant-design-vue';
-  import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus } from '../../utils/areaDataUtil';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  export default defineComponent({
-    name: 'JAreaLinkage',
-    components: {
-      Cascader,
-    },
-    inheritAttrs: false,
-    props: {
-      value: propTypes.oneOfType([propTypes.object, propTypes.array]),
-      //鏄惁鏄剧ず鍖哄幙
-      showArea: propTypes.bool.def(true),
-      //鏄惁鏄叏閮�
-      showAll: propTypes.bool.def(false),
-    },
-    emits: ['options-change', 'change'],
-    setup(props, { emit, refs }) {
-      const emitData = ref<any[]>([]);
-      const attrs = useAttrs();
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
-      const getOptions = computed(() => {
-        if (props.showArea && props.showAll) {
-          return regionDataPlus;
-        }
-        if (props.showArea && !props.showAll) {
-          return regionData;
-        }
-        if (!props.showArea && !props.showAll) {
-          return provinceAndCityData;
-        }
-        if (!props.showArea && props.showAll) {
-          return provinceAndCityDataPlus;
-        }
-      });
-      /**
-       * 鐩戝惉value鍙樺寲
-       */
-      watchEffect(() => {
-        props.value && initValue();
-      });
-
-      /**
-       * 灏嗗瓧绗︿覆鍊艰浆鍖栦负鏁扮粍
-       */
-      function initValue() {
-        let value = props.value ? props.value : [];
-        if (value && typeof value === 'string' && value != 'null' && value != 'undefined') {
-          state.value = value.split(',');
-        }
-      }
-
-      function handleChange(array, ...args) {
-        // emitData.value = args;
-        //update-begin-author:taoyan date:2022-6-27 for: VUEN-1424銆恦ue3銆戞爲琛ㄣ�佸崟琛ㄣ�乯vxe銆乪rp 銆佸唴宓屽瓙琛ㄧ渷甯傚幙 閫夋嫨涓嶄笂
-        // 涓婇潰鏀圭殑v-model:value瀵艰嚧閫変腑鏁版嵁娌℃湁鏄剧ず
-        state.value = array;
-        //update-end-author:taoyan date:2022-6-27 for: VUEN-1424銆恦ue3銆戞爲琛ㄣ�佸崟琛ㄣ�乯vxe銆乪rp 銆佸唴宓屽瓙琛ㄧ渷甯傚幙 閫夋嫨涓嶄笂
-      }
-      return {
-        state,
-        attrs,
-        regionData,
-        getOptions,
-        handleChange,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JAreaSelect.vue b/src/components/Form/src/jeecg/components/JAreaSelect.vue
deleted file mode 100644
index 91cda9f..0000000
--- a/src/components/Form/src/jeecg/components/JAreaSelect.vue
+++ /dev/null
@@ -1,165 +0,0 @@
-<template>
-  <a-form-item-rest>
-    <div class="area-select">
-      <!--鐪佷唤-->
-      <a-select v-model:value="province" @change="proChange" allowClear :disabled="disabled">
-        <template v-for="item in provinceOptions" :key="`${item.value}`">
-          <a-select-option :value="item.value">{{ item.label }}</a-select-option>
-        </template>
-      </a-select>
-      <!--鍩庡競-->
-      <a-select v-if="level >= 2" v-model:value="city" @change="cityChange" :disabled="disabled">
-        <template v-for="item in cityOptions" :key="`${item.value}`">
-          <a-select-option :value="item.value">{{ item.label }}</a-select-option>
-        </template>
-      </a-select>
-      <!--鍦板尯-->
-      <a-select v-if="level >= 3" v-model:value="area" @change="areaChange" :disabled="disabled">
-        <template v-for="item in areaOptions" :key="`${item.value}`">
-          <a-select-option :value="item.value">{{ item.label }}</a-select-option>
-        </template>
-      </a-select>
-    </div>
-  </a-form-item-rest>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, reactive, watchEffect, computed, unref, watch, onMounted, onUnmounted, toRefs } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { provinceOptions, getDataByCode, getRealCode } from '../../utils/areaDataUtil';
-
-  export default defineComponent({
-    name: 'JAreaSelect',
-    props: {
-      value: [Array, String],
-      province: [String],
-      city: [String],
-      area: [String],
-      level: propTypes.number.def(3),
-      disabled: propTypes.bool.def(false),
-      codeField: propTypes.string,
-      size: propTypes.string,
-      placeholder: propTypes.string,
-      formValues: propTypes.any,
-      allowClear: propTypes.bool.def(false),
-      getPopupContainer: {
-        type: Function,
-        default: (node) => node.parentNode,
-      },
-    },
-    emits: ['change', 'update:value','update:area','update:city','update:province'],
-    setup(props, { emit, refs }) {
-      const emitData = ref<any[]>([]);
-      //涓嬫媺妗嗙殑閫夋嫨鍊�
-      const pca = reactive({
-        province: '',
-        city: '',
-        area: '',
-      });
-      //琛ㄥ崟鍊�
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
-      //鍩庡競涓嬫媺妗嗙殑閫夐」
-      const cityOptions = computed(() => {
-        return pca.province ? getDataByCode(pca.province) : [];
-      });
-      //鍦板尯涓嬫媺妗嗙殑閫夐」
-      const areaOptions = computed(() => {
-        return pca.city ? getDataByCode(pca.city) : [];
-      });
-      /**
-       * 鐩戝惉props鍊�
-       */
-      watchEffect(() => {
-        props && initValue();
-      });
-
-      /**
-       * 鐩戝惉缁勪欢鍊煎彉鍖�
-       */
-      watch(pca, (newVal) => {
-        if (!props.value) {
-          emit('update:province', pca.province);
-          emit('update:city', pca.city);
-          emit('update:area', pca.area);
-        }
-      });
-      /**
-       * 鏁版嵁鍒濆鍖�
-       */
-      function initValue() {
-        if (props.value) {
-          //浼犲弬鏄暟缁勭殑鎯呭喌涓嬬殑澶勭悊
-          if (Array.isArray(props.value)) {
-            pca.province = props.value[0];
-            pca.city = props.value[1] ? props.value[1] : '';
-            pca.area = props.value[2] ? props.value[2] : '';
-          } else {
-            //浼犲弬鏄暟鍊�
-            let valueArr = getRealCode(props.value, props.level);
-            if (valueArr) {
-              pca.province = valueArr[0];
-              pca.city = props.level >= 2 && valueArr[1] ? valueArr[1] : '';
-              pca.area = props.level >= 3 && valueArr[2] ? valueArr[2] : '';
-            }
-          }
-        } else {
-          //缁戝畾涓変釜鏁版嵁鐨勬儏鍐�
-          pca.province = props.province ? props.province : '';
-          pca.city = props.city ? props.city : '';
-          pca.area = props.area ? props.area : '';
-        }
-      }
-
-      /**
-       * 鐪佷唤change浜嬩欢
-       */
-      function proChange(val) {
-        pca.city = val && getDataByCode(val)[0]?.value;
-        pca.area = pca.city && getDataByCode(pca.city)[0]?.value;
-        state.value = props.level <= 1 ? val : props.level <= 2 ? pca.city : pca.area;
-        emit('update:value', unref(state));
-      }
-
-      /**
-       * 鍩庡競change浜嬩欢
-       */
-      function cityChange(val) {
-        pca.area = val && getDataByCode(val)[0]?.value;
-        state.value = props.level <= 2 ? val : pca.area;
-        emit('update:value', unref(state));
-      }
-
-      /**
-       * 鍖哄煙change浜嬩欢
-       */
-      function areaChange(val) {
-        state.value = val;
-        emit('update:value', unref(state));
-      }
-
-      return {
-        ...toRefs(pca),
-        provinceOptions,
-        cityOptions,
-        areaOptions,
-        proChange,
-        cityChange,
-        areaChange,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .area-select {
-    width: 100%;
-    display: flex;
-
-    .ant-select {
-      width: 33.3%;
-    }
-
-    .ant-select:not(:first-child) {
-      margin-left: 10px;
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JCategorySelect.vue b/src/components/Form/src/jeecg/components/JCategorySelect.vue
deleted file mode 100644
index 0155acc..0000000
--- a/src/components/Form/src/jeecg/components/JCategorySelect.vue
+++ /dev/null
@@ -1,258 +0,0 @@
-<!--涓嬫媺鏍�-->
-<template>
-  <a-tree-select
-    allowClear
-    labelInValue
-    style="width: 100%"
-    :disabled="disabled"
-    :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
-    :placeholder="placeholder"
-    :loadData="asyncLoadTreeData"
-    :value="treeValue"
-    :treeData="treeData"
-    :multiple="multiple"
-    @change="onChange"
-  >
-  </a-tree-select>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, unref, watch } from 'vue';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { loadDictItem, loadTreeData } from '/@/api/common/api';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const { createMessage, createErrorModal } = useMessage();
-  export default defineComponent({
-    name: 'JCategorySelect',
-    components: {},
-    inheritAttrs: false,
-    props: {
-      value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-      placeholder: {
-        type: String,
-        default: '璇烽�夋嫨',
-        required: false,
-      },
-      disabled: {
-        type: Boolean,
-        default: false,
-        required: false,
-      },
-      condition: {
-        type: String,
-        default: '',
-        required: false,
-      },
-      // 鏄惁鏀寔澶氶��
-      multiple: {
-        type: [Boolean, String],
-        default: false,
-      },
-      loadTriggleChange: {
-        type: Boolean,
-        default: false,
-        required: false,
-      },
-      pid: {
-        type: String,
-        default: '',
-        required: false,
-      },
-      pcode: {
-        type: String,
-        default: '',
-        required: false,
-      },
-      back: {
-        type: String,
-        default: '',
-        required: false,
-      },
-    },
-    emits: ['options-change', 'change'],
-    setup(props, { emit, refs }) {
-      console.info(props);
-      const emitData = ref<any[]>([]);
-      const treeData = ref<any[]>([]);
-      const treeValue = ref();
-      treeValue.value = '';
-      const attrs = useAttrs();
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
-      watch(
-        () => props.value,
-        () => {
-          loadItemByCode();
-        },
-        { deep: true }
-      );
-      watch(
-        () => props.pcode,
-        () => {
-          loadRoot();
-        },
-        { deep: true, immediate: true }
-      );
-
-      function loadRoot() {
-        let param = {
-          pid: props.pid,
-          pcode: !props.pcode ? '0' : props.pcode,
-          condition: props.condition,
-        };
-        console.info(param);
-        loadTreeData(param).then((res) => {
-            if(res && res.length>0){
-                for (let i of res) {
-                    i.value = i.key;
-                    if (i.leaf == false) {
-                        i.isLeaf = false;
-                    } else if (i.leaf == true) {
-                        i.isLeaf = true;
-                    }
-                }
-                treeData.value = res;
-						}
-        });
-      }
-
-      function loadItemByCode() {
-        if (!props.value || props.value == '0') {
-          if(props.multiple){
-            treeValue.value = [];
-          }else{
-            treeValue.value = '';
-          }
-        } else {
-          loadDictItem({ ids: props.value }).then((res) => {
-            let values = props.value.split(',');
-            treeValue.value = res.map((item, index) => ({
-              key: values[index],
-              value: values[index],
-              label: item,
-            }));
-            if(!props.multiple){
-              treeValue.value = treeValue.value[0];
-            }
-            onLoadTriggleChange(res[0]);
-          });
-        }
-      }
-
-      function onLoadTriggleChange(text) {
-        //鍙湁鍗曢�夋墠浼氳Е鍙�
-        if (!props.multiple && props.loadTriggleChange) {
-          backValue(props.value, text);
-        }
-      }
-
-      function backValue(value, label) {
-        let obj = {};
-        if (props.back) {
-          obj[props.back] = label;
-        }
-        emit('change', value, obj);
-      }
-
-      function asyncLoadTreeData(treeNode) {
-        let dataRef = treeNode.dataRef;
-        return new Promise<void>((resolve) => {
-          if (treeNode.children && treeNode.children.length > 0) {
-            resolve();
-            return;
-          }
-          let pid = dataRef.key;
-          let param = {
-            pid: pid,
-            condition: props.condition,
-          };
-          loadTreeData(param).then((res) => {
-            if (res) {
-              for (let i of res) {
-                i.value = i.key;
-                if (i.leaf == false) {
-                  i.isLeaf = false;
-                } else if (i.leaf == true) {
-                  i.isLeaf = true;
-                }
-              }
-              addChildren(pid, res, treeData.value);
-              resolve();
-            }
-          });
-        });
-      }
-
-      function addChildren(pid, children, treeArray) {
-        if (treeArray && treeArray.length > 0) {
-          for (let item of treeArray) {
-            if (item.key == pid) {
-              if (!children || children.length == 0) {
-                item.isLeaf = true;
-              } else {
-                item.children = children;
-              }
-              break;
-            } else {
-              addChildren(pid, children, item.children);
-            }
-          }
-        }
-      }
-
-      function onChange(value) {
-        if (!value) {
-          emit('change', '');
-          treeValue.value = '';
-        } else if (Array.isArray(value)) {
-          let labels = [];
-          let values = value.map((item) => {
-            labels.push(item.label);
-            return item.value;
-          });
-          backValue(values.join(','), labels.join(','));
-          treeValue.value = value;
-        } else {
-          backValue(value.value, value.label);
-          treeValue.value = value;
-        }
-      }
-
-      function getCurrTreeData() {
-        return treeData;
-      }
-
-      function validateProp() {
-        let mycondition = props.condition;
-        return new Promise((resolve, reject) => {
-          if (!mycondition) {
-            resolve();
-          } else {
-            try {
-              let test = JSON.parse(mycondition);
-              if (typeof test == 'object' && test) {
-                resolve();
-              } else {
-                createMessage.error('缁勪欢JTreeSelect-condition浼犲�兼湁璇紝闇�瑕佷竴涓猨son瀛楃涓�!');
-                reject();
-              }
-            } catch (e) {
-              createMessage.error('缁勪欢JTreeSelect-condition浼犲�兼湁璇紝闇�瑕佷竴涓猨son瀛楃涓�!');
-              reject();
-            }
-          }
-        });
-      }
-
-      return {
-        state,
-        attrs,
-        onChange,
-        treeData,
-        treeValue,
-        asyncLoadTreeData,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JCheckbox.vue b/src/components/Form/src/jeecg/components/JCheckbox.vue
deleted file mode 100644
index b69ac4c..0000000
--- a/src/components/Form/src/jeecg/components/JCheckbox.vue
+++ /dev/null
@@ -1,91 +0,0 @@
-<template>
-  <a-checkbox-group v-bind="attrs" v-model:value="checkboxArray" :options="checkOptions" @change="handleChange"></a-checkbox-group>
-</template>
-
-<script lang="ts">
-  import { defineComponent, computed, watch, watchEffect, ref, unref } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { initDictOptions } from '/@/utils/dict/index';
-
-  export default defineComponent({
-    name: 'JCheckbox',
-    props: {
-      value:propTypes.oneOfType([propTypes.string, propTypes.number]),
-      dictCode: propTypes.string,
-      options: {
-        type: Array,
-        default: () => [],
-      },
-    },
-    emits: ['change', 'update:value'],
-    setup(props, { emit }) {
-      const attrs = useAttrs();
-      //checkbox閫夐」
-      const checkOptions = ref<any[]>([]);
-      //checkbox鏁板��
-      const checkboxArray = ref<any[]>([]);
-      /**
-       * 鐩戝惉value
-       */
-      watchEffect(() => {
-        //update-begin-author:taoyan date:2022-7-4 for:issues/I5E7YX AUTO鍦ㄧ嚎琛ㄥ崟杩涘叆鍔熻兘娴嬭瘯涔嬪悗涓�鐩村崱鍦ㄥ姛鑳芥祴璇曠晫闈�
-        let temp = props.value;
-        if(!temp && temp!==0){
-          checkboxArray.value = []
-        }else{
-          temp = temp + '';
-          checkboxArray.value = temp.split(',')
-        }
-        //update-end-author:taoyan date:2022-7-4 for:issues/I5E7YX AUTO鍦ㄧ嚎琛ㄥ崟杩涘叆鍔熻兘娴嬭瘯涔嬪悗涓�鐩村崱鍦ㄥ姛鑳芥祴璇曠晫闈�
-        //update-begin-author:taoyan date:20220401 for: 璋冪敤琛ㄥ崟鐨� resetFields涓嶄細娓呯┖褰撳墠淇℃伅锛岀晫闈㈡樉绀轰笂涓�娆$殑鏁版嵁
-        if (props.value === '' || props.value === undefined) {
-          checkboxArray.value = [];
-        }
-        //update-end-author:taoyan date:20220401 for: 璋冪敤琛ㄥ崟鐨� resetFields涓嶄細娓呯┖褰撳墠淇℃伅锛岀晫闈㈡樉绀轰笂涓�娆$殑鏁版嵁
-      });
-      /**
-       * 鐩戝惉瀛楀吀code
-       */
-      watchEffect(() => {
-        props && initOptions();
-      });
-
-      /**
-       * 鍒濆鍖栭�夐」
-       */
-      async function initOptions() {
-        //鏍规嵁options, 鍒濆鍖栭�夐」
-        if (props.options && props.options.length > 0) {
-          checkOptions.value = props.options;
-          return;
-        }
-        //鏍规嵁瀛楀吀Code, 鍒濆鍖栭�夐」
-        if (props.dictCode) {
-          const dictData = await initDictOptions(props.dictCode);
-          checkOptions.value = dictData.reduce((prev, next) => {
-            if (next) {
-              const value = next['value'];
-              prev.push({
-                label: next['text'],
-                value: value,
-              });
-            }
-            return prev;
-          }, []);
-        }
-      }
-
-      /**
-       * change浜嬩欢
-       * @param $event
-       */
-      function handleChange($event) {
-        emit('update:value', $event.join(','));
-        emit('change', $event.join(','));
-      }
-
-      return { checkboxArray, checkOptions, attrs, handleChange };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JCodeEditor.vue b/src/components/Form/src/jeecg/components/JCodeEditor.vue
deleted file mode 100644
index 9f06e4d..0000000
--- a/src/components/Form/src/jeecg/components/JCodeEditor.vue
+++ /dev/null
@@ -1,298 +0,0 @@
-<template>
-  <div v-bind="boxBindProps">
-    <!-- 鍏ㄥ睆鎸夐挳 -->
-    <a-icon v-if="fullScreen" class="full-screen-icon" :type="fullScreenIcon" @click="onToggleFullScreen" />
-    <textarea ref="textarea" v-bind="getBindValue"></textarea>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent, onMounted, reactive, ref, watch, unref, computed } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  // 寮曞叆鍏ㄥ眬瀹炰緥
-  import _CodeMirror, { EditorFromTextArea } from 'codemirror';
-  // 鏍稿績鏍峰紡
-  import 'codemirror/lib/codemirror.css';
-  // 寮曞叆涓婚鍚庤繕闇�瑕佸湪 options 涓寚瀹氫富棰樻墠浼氱敓鏁�
-  import 'codemirror/theme/idea.css';
-  // 闇�瑕佸紩鍏ュ叿浣撶殑璇硶楂樹寒搴撴墠浼氭湁瀵瑰簲鐨勮娉曢珮浜晥鏋�
-  import 'codemirror/mode/javascript/javascript.js';
-  import 'codemirror/mode/css/css.js';
-  import 'codemirror/mode/xml/xml.js';
-  import 'codemirror/mode/clike/clike.js';
-  import 'codemirror/mode/markdown/markdown.js';
-  import 'codemirror/mode/python/python.js';
-  import 'codemirror/mode/r/r.js';
-  import 'codemirror/mode/shell/shell.js';
-  import 'codemirror/mode/sql/sql.js';
-  import 'codemirror/mode/swift/swift.js';
-  import 'codemirror/mode/vue/vue.js';
-  // 鎶樺彔璧勬簮寮曞叆:寮�濮�
-  import 'codemirror/addon/fold/foldgutter.css';
-  import 'codemirror/addon/fold/foldcode.js';
-  import 'codemirror/addon/fold/brace-fold.js';
-  import 'codemirror/addon/fold/comment-fold.js';
-  import 'codemirror/addon/fold/indent-fold.js';
-  import 'codemirror/addon/fold/foldgutter.js';
-  // 鎶樺彔璧勬簮寮曞叆:缁撴潫
-  //鍏夋爣琛岃儗鏅珮浜紝閰嶇疆閲岄潰涔熼渶瑕乻tyleActiveLine璁剧疆涓簍rue
-  import 'codemirror/addon/selection/active-line.js';
-  // 鏀寔浠g爜鑷姩琛ュ叏
-  import 'codemirror/addon/hint/show-hint.css';
-  import 'codemirror/addon/hint/show-hint.js';
-  import 'codemirror/addon/hint/anyword-hint.js';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { isJsonObjectString } from '/@/utils/is.ts';
-
-  export default defineComponent({
-    name: 'JCodeEditor',
-    // 涓嶅皢 attrs 鐨勫睘鎬х粦瀹氬埌 html 鏍囩涓�
-    inheritAttrs: false,
-    components: {},
-    props: {
-      value: propTypes.string.def(''),
-      height: propTypes.string.def('auto'),
-      disabled: propTypes.bool.def(false),
-      // 鏄惁鏄剧ず鍏ㄥ睆鎸夐挳
-      fullScreen: propTypes.bool.def(false),
-      // 鍏ㄥ睆浠ュ悗鐨剒-index
-      zIndex: propTypes.any.def(999),
-      theme: propTypes.string.def('idea'),
-      language: propTypes.string.def(''),
-    },
-    emits: ['change', 'update:value'],
-    setup(props, { emit }) {
-      const { prefixCls } = useDesign('code-editer');
-      const CodeMirror = window.CodeMirror || _CodeMirror;
-      const emitData = ref<object>();
-      //琛ㄥ崟鍊�
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
-      const textarea = ref<HTMLTextAreaElement>();
-      let coder: Nullable<EditorFromTextArea> = null;
-      const attrs = useAttrs();
-      const height = ref(props.height);
-      const options = reactive({
-        // 缂╄繘鏍煎紡
-        tabSize: 2,
-        // 涓婚锛屽搴斾富棰樺簱 JS 闇�瑕佹彁鍓嶅紩鍏�
-        theme: props.theme,
-        smartIndent: true, // 鏄惁鏅鸿兘缂╄繘
-        // 鏄剧ず琛屽彿
-        lineNumbers: true,
-        line: true,
-        // 鍚敤浠g爜鎶樺彔鐩稿叧鍔熻兘:寮�濮�
-        foldGutter: true,
-        lineWrapping: true,
-        gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter', 'CodeMirror-lint-markers'],
-        // 鍚敤浠g爜鎶樺彔鐩稿叧鍔熻兘:缁撴潫
-        // 鍏夋爣琛岄珮浜�
-        styleActiveLine: true,
-        //浠g爜鏍煎紡鍖�
-        extraKeys: {
-          Tab: function autoFormat(editor) {
-            //var totalLines = editor.lineCount();
-            //editor.autoFormatRange({line:0, ch:0}, {line:totalLines});
-            setValue(innerValue, false);
-          },
-        },
-      });
-      // 鍐呴儴瀛樺偍鍊硷紝鍒濆涓� props.value
-      let innerValue = props.value ?? '';
-      // 鍏ㄥ睆鐘舵��
-      const isFullScreen = ref(false);
-      const fullScreenIcon = computed(() => (isFullScreen.value ? 'fullscreen-exit' : 'fullscreen'));
-      // 澶栭儴鐩掑瓙鍙傛暟
-      const boxBindProps = computed(() => {
-        let _props = {
-          class: [
-            prefixCls,
-            'full-screen-parent',
-            'auto-height',
-            {
-              'full-screen': isFullScreen.value,
-            },
-          ],
-          style: {},
-        };
-        if (isFullScreen.value) {
-          _props.style['z-index'] = props.zIndex;
-        }
-        return _props;
-      });
-      /**
-       * 鐩戝惉缁勪欢鍊�
-       */
-      watch(
-        () => props.value,
-        () => {
-          if (innerValue != props.value) {
-            setValue(props.value, false);
-          }
-        }
-      );
-      onMounted(() => {
-        initialize();
-      });
-
-      /**
-       * 缁勪欢璧嬪��
-       * @param value
-       * @param trigger 鏄惁瑙﹀彂 change 浜嬩欢
-       */
-      function setValue(value: string, trigger = true) {
-        if (value && isJsonObjectString(value)) {
-          value = JSON.stringify(JSON.parse(value), null, 2);
-        }
-        coder?.setValue(value ?? '');
-        innerValue = value;
-        trigger && emitChange(innerValue);
-      }
-
-      //缂栬緫鍣ㄥ�间慨鏀逛簨浠�
-      function onChange(obj) {
-        let value = obj.getValue();
-        innerValue = value || '';
-        if (props.value != innerValue) {
-          emitChange(innerValue);
-        }
-      }
-
-      function emitChange(value) {
-        emit('change', value);
-        emit('update:value', value);
-      }
-
-      //缁勪欢鍒濆鍖�
-      function initialize() {
-        coder = CodeMirror.fromTextArea(textarea.value!, options);
-        //缁戝畾鍊间慨鏀逛簨浠�
-        coder.on('change', onChange);
-        // 鍒濆鍖栨垚鍔熸椂璧嬪�间竴娆�
-        setValue(innerValue, false);
-      }
-
-      // 鍒囨崲鍏ㄥ睆鐘舵��
-      function onToggleFullScreen() {
-        isFullScreen.value = !isFullScreen.value;
-      }
-
-      //update-begin-author:taoyan date:2022-5-9 for: codeEditor绂佺敤鍔熻兘
-      watch(
-        () => props.disabled,
-        (val) => {
-          if (coder) {
-            coder.setOption('readOnly', val);
-          }
-        }
-      );
-      //update-end-author:taoyan date:2022-5-9 for: codeEditor绂佺敤鍔熻兘
-      
-      // 鏀寔鍔ㄦ�佽缃瑷�
-      watch(()=>props.language, (val)=>{
-        if(val && coder){
-          coder.setOption('mode', val);
-        }
-      });
-
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
-
-      //update-begin-author:taoyan date:2022-10-18 for: VUEN-2480銆愪弗閲峛ug銆憃nline vue3娴嬭瘯鐨勯棶棰� 8銆乷nline js澧炲己鏍峰紡闂
-      function refresh(){
-        if(coder){
-          coder.refresh();
-        }
-      }
-      //update-end-author:taoyan date:2022-10-18 for: VUEN-2480銆愪弗閲峛ug銆憃nline vue3娴嬭瘯鐨勯棶棰� 8銆乷nline js澧炲己鏍峰紡闂
-      
-      return {
-        state,
-        textarea,
-        boxBindProps,
-        getBindValue,
-        setValue,
-        isFullScreen,
-        fullScreenIcon,
-        onToggleFullScreen,
-        refresh
-      };
-    },
-  });
-</script>
-
-<style lang="less">
-  //noinspection LessUnresolvedVariable
-  @prefix-cls: ~'@{namespace}-code-editer';
-  .@{prefix-cls} {
-    &.auto-height {
-      .CodeMirror {
-        height: v-bind(height) !important;
-        min-height: 100px;
-      }
-    }
-
-    /* 鍏ㄥ睆鏍峰紡 */
-
-    &.full-screen-parent {
-      position: relative;
-
-      .full-screen-icon {
-        opacity: 0;
-        color: black;
-        width: 20px;
-        height: 20px;
-        line-height: 24px;
-        background-color: white;
-        position: absolute;
-        top: 2px;
-        right: 2px;
-        z-index: 9;
-        cursor: pointer;
-        transition: opacity 0.3s;
-        padding: 2px 0 0 1.5px;
-      }
-
-      &:hover {
-        .full-screen-icon {
-          opacity: 1;
-
-          &:hover {
-            background-color: rgba(255, 255, 255, 0.88);
-          }
-        }
-      }
-
-      &.full-screen {
-        position: fixed;
-        top: 0;
-        right: 0;
-        bottom: 0;
-        left: 0;
-        padding: 8px;
-        background-color: #f5f5f5;
-
-        .full-screen-icon {
-          top: 12px;
-          right: 12px;
-        }
-
-        .full-screen-child,
-        .CodeMirror {
-          height: 100%;
-          max-height: 100%;
-          min-height: 100%;
-        }
-      }
-
-      .full-screen-child {
-        height: 100%;
-      }
-    }
-    
-    /** VUEN-2344銆恦ue3銆戣繖涓牱寮忔湁闂锛屾槸涓嶆槸鍔犱釜杈规 */
-    .CodeMirror{
-      border: 1px solid #ddd;
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JDictSelectTag.vue b/src/components/Form/src/jeecg/components/JDictSelectTag.vue
deleted file mode 100644
index a833c26..0000000
--- a/src/components/Form/src/jeecg/components/JDictSelectTag.vue
+++ /dev/null
@@ -1,202 +0,0 @@
-<template>
-  <a-radio-group v-if="compType === CompTypeEnum.Radio" v-bind="attrs" v-model:value="state" @change="handleChangeRadio">
-    <template v-for="item in dictOptions" :key="`${item.value}`">
-      <a-radio :value="item.value">
-        {{ item.label }}
-      </a-radio>
-    </template>
-  </a-radio-group>
-
-  <a-radio-group
-    v-else-if="compType === CompTypeEnum.RadioButton"
-    v-bind="attrs"
-    v-model:value="state"
-    buttonStyle="solid"
-    @change="handleChangeRadio"
-  >
-    <template v-for="item in dictOptions" :key="`${item.value}`">
-      <a-radio-button :value="item.value">
-        {{ item.label }}
-      </a-radio-button>
-    </template>
-  </a-radio-group>
-
-  <template v-else-if="compType === CompTypeEnum.Select">
-    <!-- 鏄剧ず鍔犺浇鏁堟灉 -->
-    <a-input v-if="loadingEcho" readOnly placeholder="鍔犺浇涓��">
-      <template #prefix>
-        <LoadingOutlined />
-      </template>
-    </a-input>
-    <a-select
-      v-else
-      :placeholder="placeholder"
-      v-bind="attrs"
-      v-model:value="state"
-      :filterOption="handleFilterOption"
-      :getPopupContainer="getPopupContainer"
-      @change="handleChange"
-    >
-      <a-select-option v-if="showChooseOption" :value="null">璇烽�夋嫨鈥�</a-select-option>
-      <template v-for="item in dictOptions" :key="`${item.value}`">
-        <a-select-option :value="item.value">
-          <span style="display: inline-block; width: 100%" :title="item.label">
-            {{ item.label }}
-          </span>
-        </a-select-option>
-      </template>
-    </a-select>
-  </template>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, reactive, watchEffect, computed, unref, watch, onMounted, nextTick } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { initDictOptions } from '/@/utils/dict';
-  import { get, omit } from 'lodash-es';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { CompTypeEnum } from '/@/enums/CompTypeEnum';
-  import { LoadingOutlined } from '@ant-design/icons-vue';
-
-  export default defineComponent({
-    name: 'JDictSelectTag',
-    inheritAttrs: false,
-    components: { LoadingOutlined },
-    props: {
-      value: propTypes.oneOfType([propTypes.string, propTypes.number, propTypes.array]),
-      dictCode: propTypes.string,
-      type: propTypes.string,
-      placeholder: propTypes.string,
-      stringToNumber: propTypes.bool,
-      getPopupContainer: {
-        type: Function,
-        default: (node) => node.parentNode,
-      },
-      // 鏄惁鏄剧ず銆愯閫夋嫨銆戦�夐」
-      showChooseOption: propTypes.bool.def(true),
-      // 涓嬫媺椤�-online浣跨敤
-      options: {
-        type: Array,
-        default: [],
-        required: false,
-      },
-    },
-    emits: ['options-change', 'change'],
-    setup(props, { emit, refs }) {
-      const dictOptions = ref<any[]>([]);
-      const attrs = useAttrs();
-      const [state, , , formItemContext] = useRuleFormItem(props, 'value', 'change');
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
-      // 鏄惁姝e湪鍔犺浇鍥炴樉鏁版嵁
-      const loadingEcho = ref<boolean>(false);
-      // 鏄惁鏄娆″姞杞藉洖鏄撅紝鍙湁棣栨鍔犺浇锛屾墠浼氭樉绀� loading
-      let isFirstLoadEcho = true;
-
-      //缁勪欢绫诲瀷
-      const compType = computed(() => {
-        return !props.type || props.type === 'list' ? 'select' : props.type;
-      });
-      /**
-       * 鐩戝惉瀛楀吀code
-       */
-      watchEffect(() => {
-        if (props.dictCode) {
-          loadingEcho.value = isFirstLoadEcho;
-          isFirstLoadEcho = false;
-          initDictData().finally(() => {
-            loadingEcho.value = isFirstLoadEcho;
-          });
-        }
-        //update-begin-author:taoyan date: 濡傛灉娌℃湁鎻愪緵dictCode 鍙互璧皁ptions鐨勯厤缃�--
-        if (!props.dictCode) {
-          dictOptions.value = props.options;
-        }
-        //update-end-author:taoyan date: 濡傛灉娌℃湁鎻愪緵dictCode 鍙互璧皁ptions鐨勯厤缃�--
-      });
-
-      //update-begin-author:taoyan date:20220404 for: 浣跨敤useRuleFormItem瀹氫箟鐨剉alue锛屼細鏈変竴涓棶棰橈紝濡傛灉涓嶆槸鎿嶄綔璁剧疆鐨勫�艰�屾槸浠g爜璁剧疆鐨勬帶浠跺�艰�屼笉鑳借Е鍙慶hange浜嬩欢
-      // 姝ゅ娣诲姞绌哄�肩殑change浜嬩欢,鍗冲綋缁勪欢璋冪敤鍦颁唬鐮佽缃畍alue涓�''涔熻兘瑙﹀彂change浜嬩欢
-      watch(
-        () => props.value,
-        () => {
-          if (props.value === '') {
-            emit('change', '');
-            nextTick(() => formItemContext.onFieldChange());
-          }
-        }
-      );
-      //update-end-author:taoyan date:20220404 for: 浣跨敤useRuleFormItem瀹氫箟鐨剉alue锛屼細鏈変竴涓棶棰橈紝濡傛灉涓嶆槸鎿嶄綔璁剧疆鐨勫�艰�屾槸浠g爜璁剧疆鐨勬帶浠跺�艰�屼笉鑳借Е鍙慶hange浜嬩欢
-
-      async function initDictData() {
-        let { dictCode, stringToNumber } = props;
-        //鏍规嵁瀛楀吀Code, 鍒濆鍖栧瓧鍏告暟缁�
-        const dictData = await initDictOptions(dictCode);
-        dictOptions.value = dictData.reduce((prev, next) => {
-          if (next) {
-            const value = next['value'];
-            prev.push({
-              label: next['text'] || next['label'],
-              value: stringToNumber ? +value : value,
-              ...omit(next, ['text', 'value']),
-            });
-          }
-          return prev;
-        }, []);
-      }
-
-      function handleChange(e) {
-        const { mode } = unref<Recordable>(getBindValue);
-        let changeValue:any;
-        // 鍏煎澶氶�夋ā寮�
-        
-        //update-begin---author:wangshuai ---date:20230216  for锛歔QQYUN-4290]鍏枃鍙戞枃锛氶�夋嫨鏈哄叧浠e瓧鎶ラ敊,鏄洜涓哄�兼敼鍙樿Е鍙戜簡change浜嬩欢涓夋锛屽鑷存暟鎹彂鐢熸敼鍙�------------
-        //閲囩敤涓�涓�硷紝涓嶇劧鐨勮瘽state鍊煎彉鎹㈣Е鍙戝涓猚hange
-        if (mode === 'multiple') {
-          changeValue = e?.target?.value ?? e;
-          // 杩囨护鎺夌┖鍊�
-          if (changeValue == null || changeValue === '') {
-            changeValue = [];
-          }
-          if (Array.isArray(changeValue)) {
-            changeValue = changeValue.filter((item) => item != null && item !== '');
-          }
-        } else {
-          changeValue = e?.target?.value ?? e;
-        }
-        state.value = changeValue;
-        //update-end---author:wangshuai ---date:20230216  for锛歔QQYUN-4290]鍏枃鍙戞枃锛氶�夋嫨鏈哄叧浠e瓧鎶ラ敊,鏄洜涓哄�兼敼鍙樿Е鍙戜簡change浜嬩欢涓夋锛屽鑷存暟鎹彂鐢熸敼鍙�------------
-        
-        // nextTick(() => formItemContext.onFieldChange());
-      }
-
-      /** 鍗曢�塺adio鐨勫�煎彉鍖栦簨浠� */
-      function handleChangeRadio(e) {
-        state.value = e?.target?.value ?? e;
-      }
-
-      /** 鐢ㄤ簬鎼滅储涓嬫媺妗嗕腑鐨勫唴瀹� */
-      function handleFilterOption(input, option) {
-        // 鍦� label 涓悳绱�
-        let labelIf = option.children()[0]?.children.toLowerCase().indexOf(input.toLowerCase()) >= 0;
-        if (labelIf) {
-          return true;
-        }
-        // 鍦� value 涓悳绱�
-        return (option.value || '').toString().toLowerCase().indexOf(input.toLowerCase()) >= 0;
-      }
-
-      return {
-        state,
-        compType,
-        attrs,
-        loadingEcho,
-        getBindValue,
-        dictOptions,
-        CompTypeEnum,
-        handleChange,
-        handleChangeRadio,
-        handleFilterOption,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/EasyCronInner.vue b/src/components/Form/src/jeecg/components/JEasyCron/EasyCronInner.vue
deleted file mode 100644
index de8796c..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/EasyCronInner.vue
+++ /dev/null
@@ -1,319 +0,0 @@
-<template>
-  <div :class="`${prefixCls}`">
-    <div class="content">
-      <a-tabs :size="`small`" v-model:activeKey="activeKey">
-        <a-tab-pane tab="绉�" key="second" v-if="!hideSecond">
-          <SecondUI v-model:value="second" :disabled="disabled" />
-        </a-tab-pane>
-        <a-tab-pane tab="鍒�" key="minute">
-          <MinuteUI v-model:value="minute" :disabled="disabled" />
-        </a-tab-pane>
-        <a-tab-pane tab="鏃�" key="hour">
-          <HourUI v-model:value="hour" :disabled="disabled" />
-        </a-tab-pane>
-        <a-tab-pane tab="鏃�" key="day">
-          <DayUI v-model:value="day" :week="week" :disabled="disabled" />
-        </a-tab-pane>
-        <a-tab-pane tab="鏈�" key="month">
-          <MonthUI v-model:value="month" :disabled="disabled" />
-        </a-tab-pane>
-        <a-tab-pane tab="鍛�" key="week">
-          <WeekUI v-model:value="week" :day="day" :disabled="disabled" />
-        </a-tab-pane>
-        <a-tab-pane tab="骞�" key="year" v-if="!hideYear && !hideSecond">
-          <YearUI v-model:value="year" :disabled="disabled" />
-        </a-tab-pane>
-      </a-tabs>
-      <a-divider />
-      <!-- 鎵ц鏃堕棿棰勮 -->
-      <a-row :gutter="8">
-        <a-col :span="18" style="margin-top: 22px">
-          <a-row :gutter="8">
-            <a-col :span="8" style="margin-bottom: 12px">
-              <a-input v-model:value="inputValues.second" @blur="onInputBlur">
-                <template #addonBefore>
-                  <span class="allow-click" @click="activeKey = 'second'">绉�</span>
-                </template>
-              </a-input>
-            </a-col>
-            <a-col :span="8" style="margin-bottom: 12px">
-              <a-input v-model:value="inputValues.minute" @blur="onInputBlur">
-                <template #addonBefore>
-                  <span class="allow-click" @click="activeKey = 'minute'">鍒�</span>
-                </template>
-              </a-input>
-            </a-col>
-            <a-col :span="8" style="margin-bottom: 12px">
-              <a-input v-model:value="inputValues.hour" @blur="onInputBlur">
-                <template #addonBefore>
-                  <span class="allow-click" @click="activeKey = 'hour'">鏃�</span>
-                </template>
-              </a-input>
-            </a-col>
-            <a-col :span="8" style="margin-bottom: 12px">
-              <a-input v-model:value="inputValues.day" @blur="onInputBlur">
-                <template #addonBefore>
-                  <span class="allow-click" @click="activeKey = 'day'">鏃�</span>
-                </template>
-              </a-input>
-            </a-col>
-            <a-col :span="8" style="margin-bottom: 12px">
-              <a-input v-model:value="inputValues.month" @blur="onInputBlur">
-                <template #addonBefore>
-                  <span class="allow-click" @click="activeKey = 'month'">鏈�</span>
-                </template>
-              </a-input>
-            </a-col>
-            <a-col :span="8" style="margin-bottom: 12px">
-              <a-input v-model:value="inputValues.week" @blur="onInputBlur">
-                <template #addonBefore>
-                  <span class="allow-click" @click="activeKey = 'week'">鍛�</span>
-                </template>
-              </a-input>
-            </a-col>
-            <a-col :span="8">
-              <a-input v-model:value="inputValues.year" @blur="onInputBlur">
-                <template #addonBefore>
-                  <span class="allow-click" @click="activeKey = 'year'">骞�</span>
-                </template>
-              </a-input>
-            </a-col>
-            <a-col :span="16">
-              <a-input v-model:value="inputValues.cron" @blur="onInputCronBlur">
-                <template #addonBefore>
-                  <a-tooltip title="Cron琛ㄨ揪寮�">寮�</a-tooltip>
-                </template>
-              </a-input>
-            </a-col>
-          </a-row>
-        </a-col>
-        <a-col :span="6">
-          <div>杩戝崄娆℃墽琛屾椂闂达紙涓嶅惈骞达級</div>
-          <a-textarea type="textarea" :value="preTimeList" :rows="5" />
-        </a-col>
-      </a-row>
-    </div>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { computed, reactive, ref, watch, provide } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import CronParser from 'cron-parser';
-  import SecondUI from './tabs/SecondUI.vue';
-  import MinuteUI from './tabs/MinuteUI.vue';
-  import HourUI from './tabs/HourUI.vue';
-  import DayUI from './tabs/DayUI.vue';
-  import MonthUI from './tabs/MonthUI.vue';
-  import WeekUI from './tabs/WeekUI.vue';
-  import YearUI from './tabs/YearUI.vue';
-  import { cronEmits, cronProps } from './easy.cron.data';
-  import { dateFormat, simpleDebounce } from '/@/utils/common/compUtils';
-
-  const { prefixCls } = useDesign('easy-cron-inner');
-  provide('prefixCls', prefixCls);
-  const emit = defineEmits([...cronEmits]);
-  const props = defineProps({ ...cronProps });
-  const activeKey = ref(props.hideSecond ? 'minute' : 'second');
-  const second = ref('*');
-  const minute = ref('*');
-  const hour = ref('*');
-  const day = ref('*');
-  const month = ref('*');
-  const week = ref('?');
-  const year = ref('*');
-  const inputValues = reactive({
-    second: '',
-    minute: '',
-    hour: '',
-    day: '',
-    month: '',
-    week: '',
-    year: '',
-    cron: '',
-  });
-  const preTimeList = ref('鎵ц棰勮锛屼細蹇界暐骞翠唤鍙傛暟銆�');
-
-  // cron琛ㄨ揪寮�
-  const cronValueInner = computed(() => {
-    let result: string[] = [];
-    if (!props.hideSecond) {
-      result.push(second.value ? second.value : '*');
-    }
-    result.push(minute.value ? minute.value : '*');
-    result.push(hour.value ? hour.value : '*');
-    result.push(day.value ? day.value : '*');
-    result.push(month.value ? month.value : '*');
-    result.push(week.value ? week.value : '?');
-    if (!props.hideYear && !props.hideSecond) result.push(year.value ? year.value : '*');
-    return result.join(' ');
-  });
-  // 涓嶅惈骞�
-  const cronValueNoYear = computed(() => {
-    const v = cronValueInner.value;
-    if (props.hideYear || props.hideSecond) return v;
-    const vs = v.split(' ');
-    if (vs.length >= 6) {
-      // 杞垚 Quartz 鐨勮鍒�
-      vs[5] = convertWeekToQuartz(vs[5]);
-    }
-    return vs.slice(0, vs.length - 1).join(' ');
-  });
-  const calTriggerList = simpleDebounce(calTriggerListInner, 500);
-
-  watch(
-    () => props.value,
-    (newVal) => {
-      if (newVal === cronValueInner.value) {
-        return;
-      }
-      formatValue();
-    }
-  );
-
-  watch(cronValueInner, (newValue) => {
-    calTriggerList();
-    emitValue(newValue);
-    assignInput();
-  });
-
-  // watch(minute, () => {
-  //   if (second.value === '*') {
-  //     second.value = '0'
-  //   }
-  // })
-  // watch(hour, () => {
-  //   if (minute.value === '*') {
-  //     minute.value = '0'
-  //   }
-  // })
-  // watch(day, () => {
-  //   if (day.value !== '?' && hour.value === '*') {
-  //     hour.value = '0'
-  //   }
-  // })
-  // watch(week, () => {
-  //   if (week.value !== '?' && hour.value === '*') {
-  //     hour.value = '0'
-  //   }
-  // })
-  // watch(month, () => {
-  //   if (day.value === '?' && week.value === '*') {
-  //     week.value = '1'
-  //   } else if (week.value === '?' && day.value === '*') {
-  //     day.value = '1'
-  //   }
-  // })
-  // watch(year, () => {
-  //   if (month.value === '*') {
-  //     month.value = '1'
-  //   }
-  // })
-
-  assignInput();
-  formatValue();
-  calTriggerListInner();
-
-  function assignInput() {
-    inputValues.second = second.value;
-    inputValues.minute = minute.value;
-    inputValues.hour = hour.value;
-    inputValues.day = day.value;
-    inputValues.month = month.value;
-    inputValues.week = week.value;
-    inputValues.year = year.value;
-    inputValues.cron = cronValueInner.value;
-  }
-
-  function formatValue() {
-    if (!props.value) return;
-    const values = props.value.split(' ').filter((item) => !!item);
-    if (!values || values.length <= 0) return;
-    let i = 0;
-    if (!props.hideSecond) second.value = values[i++];
-    if (values.length > i) minute.value = values[i++];
-    if (values.length > i) hour.value = values[i++];
-    if (values.length > i) day.value = values[i++];
-    if (values.length > i) month.value = values[i++];
-    if (values.length > i) week.value = values[i++];
-    if (values.length > i) year.value = values[i];
-    assignInput();
-  }
-
-  // Quartz 鐨勮鍒欙細
-  // 1 = 鍛ㄦ棩锛�2 = 鍛ㄤ竴锛�3 = 鍛ㄤ簩锛�4 = 鍛ㄤ笁锛�5 = 鍛ㄥ洓锛�6 = 鍛ㄤ簲锛�7 = 鍛ㄥ叚
-  function convertWeekToQuartz(week: string) {
-    let convert = (v: string) => {
-      if (v === '0') {
-        return '1';
-      }
-      if (v === '1') {
-        return '0';
-      }
-      return (Number.parseInt(v) - 1).toString();
-    };
-    // 鍖归厤绀轰緥 1-7 or 1/7
-    let patten1 = /^([0-7])([-/])([0-7])$/;
-    // 鍖归厤绀轰緥 1,4,7
-    let patten2 = /^([0-7])(,[0-7])+$/;
-    if (/^[0-7]$/.test(week)) {
-      return convert(week);
-    } else if (patten1.test(week)) {
-      return week.replace(patten1, ($0, before, separator, after) => {
-        if (separator === '/') {
-          return convert(before) + separator + after;
-        } else {
-          return convert(before) + separator + convert(after);
-        }
-      });
-    } else if (patten2.test(week)) {
-      return week
-        .split(',')
-        .map((v) => convert(v))
-        .join(',');
-    }
-    return week;
-  }
-
-  function calTriggerListInner() {
-    // 璁剧疆浜嗗洖璋冨嚱鏁�
-    if (props.remote) {
-      props.remote(cronValueInner.value, +new Date(), (v) => {
-        preTimeList.value = v;
-      });
-      return;
-    }
-    const format = 'yyyy-MM-dd hh:mm:ss';
-    const options = {
-      currentDate: dateFormat(new Date(), format),
-    };
-    const iter = CronParser.parseExpression(cronValueNoYear.value, options);
-    const result: string[] = [];
-    for (let i = 1; i <= 10; i++) {
-      result.push(dateFormat(new Date(iter.next() as any), format));
-    }
-    preTimeList.value = result.length > 0 ? result.join('\n') : '鏃犳墽琛屾椂闂�';
-  }
-
-  function onInputBlur() {
-    second.value = inputValues.second;
-    minute.value = inputValues.minute;
-    hour.value = inputValues.hour;
-    day.value = inputValues.day;
-    month.value = inputValues.month;
-    week.value = inputValues.week;
-    year.value = inputValues.year;
-  }
-
-  function onInputCronBlur(event) {
-    emitValue(event.target.value);
-  }
-
-  function emitValue(value) {
-    emit('change', value);
-    emit('update:value', value);
-  }
-</script>
-<style lang="less">
-  @import 'easy.cron.inner';
-</style>
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/EasyCronInput.vue b/src/components/Form/src/jeecg/components/JEasyCron/EasyCronInput.vue
deleted file mode 100644
index 51e8abe..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/EasyCronInput.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-<template>
-  <div :class="`${prefixCls}`">
-    <a-input :placeholder="placeholder" v-model:value="editCronValue" :disabled="disabled">
-      <template #addonAfter>
-        <a class="open-btn" :disabled="disabled ? 'disabled' : null" @click="showConfigModal">
-          <Icon icon="ant-design:setting-outlined" />
-          <span>閫夋嫨</span>
-        </a>
-      </template>
-    </a-input>
-    <EasyCronModal
-      @register="registerModal"
-      v-model:value="editCronValue"
-      :exeStartTime="exeStartTime"
-      :hideYear="hideYear"
-      :remote="remote"
-      :hideSecond="hideSecond"
-    />
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { ref, watch } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useModal } from '/@/components/Modal';
-  import { propTypes } from '/@/utils/propTypes';
-  import Icon from '/@/components/Icon/src/Icon.vue';
-  import EasyCronModal from './EasyCronModal.vue';
-  import { cronEmits, cronProps } from './easy.cron.data';
-
-  const { prefixCls } = useDesign('easy-cron-input');
-  const emit = defineEmits([...cronEmits]);
-  const props = defineProps({
-    ...cronProps,
-    placeholder: propTypes.string.def('璇疯緭鍏ron琛ㄨ揪寮�'),
-    exeStartTime: propTypes.oneOfType([propTypes.number, propTypes.string, propTypes.object]).def(0),
-  });
-  const [registerModal, { openModal }] = useModal();
-  const editCronValue = ref(props.value);
-
-  watch(
-    () => props.value,
-    (newVal) => {
-      if (newVal !== editCronValue.value) {
-        editCronValue.value = newVal;
-      }
-    }
-  );
-  watch(editCronValue, (newVal) => {
-    emit('change', newVal);
-    emit('update:value', newVal);
-  });
-
-  function showConfigModal() {
-    if (!props.disabled) {
-      openModal();
-    }
-  }
-</script>
-
-<style lang="less">
-  @import 'easy.cron.input';
-</style>
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/EasyCronModal.vue b/src/components/Form/src/jeecg/components/JEasyCron/EasyCronModal.vue
deleted file mode 100644
index b5fa5da..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/EasyCronModal.vue
+++ /dev/null
@@ -1,28 +0,0 @@
-<template>
-  <BasicModal @register="registerModal" title="Cron琛ㄨ揪寮�" width="800px" @ok="onOk">
-    <EasyCron v-bind="attrs" />
-  </BasicModal>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import EasyCron from './EasyCronInner.vue';
-
-  export default defineComponent({
-    name: 'EasyCronModal',
-    inheritAttrs: false,
-    components: { BasicModal, EasyCron },
-    setup() {
-      const attrs = useAttrs();
-      const [registerModal, { closeModal }] = useModalInner();
-
-      function onOk() {
-        closeModal();
-      }
-
-      return { attrs, registerModal, onOk };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/LICENSE b/src/components/Form/src/jeecg/components/JEasyCron/LICENSE
deleted file mode 100644
index 08eddc9..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2019 鐭ヨ鍚堜竴
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/easy.cron.data.ts b/src/components/Form/src/jeecg/components/JEasyCron/easy.cron.data.ts
deleted file mode 100644
index 335a8c0..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/easy.cron.data.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { propTypes } from '/@/utils/propTypes';
-
-export const cronEmits = ['change', 'update:value'];
-export const cronProps = {
-  value: propTypes.string.def(''),
-  disabled: propTypes.bool.def(false),
-  hideSecond: propTypes.bool.def(false),
-  hideYear: propTypes.bool.def(false),
-  remote: propTypes.func,
-};
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/easy.cron.inner.less b/src/components/Form/src/jeecg/components/JEasyCron/easy.cron.inner.less
deleted file mode 100644
index 3aab6ba..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/easy.cron.inner.less
+++ /dev/null
@@ -1,59 +0,0 @@
-//noinspection LessUnresolvedVariable
-@prefix-cls: ~'@{namespace}-easy-cron-inner';
-
-.@{prefix-cls} {
-  .content {
-    .ant-checkbox-wrapper + .ant-checkbox-wrapper {
-      margin-left: 0;
-    }
-  }
-
-  &-config-list {
-    text-align: left;
-    margin: 0 10px 10px 10px;
-
-    .item {
-      margin-top: 5px;
-      font-size: 14px;
-
-      span {
-        padding: 0 2px;
-      }
-    }
-
-    .choice {
-      padding: 5px 8px;
-    }
-
-    .w60 {
-      width: 60px;
-      min-width: 60px;
-    }
-
-    .w80 {
-      width: 80px;
-      min-width: 80px;
-    }
-
-    .list {
-      margin: 0 20px;
-    }
-
-    .list-check-item {
-      padding: 1px 3px;
-      width: 4em;
-    }
-
-    .list-cn .list-check-item {
-      width: 5em;
-    }
-
-    .tip-info {
-      color: #999;
-    }
-  }
-
-  .allow-click {
-    cursor: pointer;
-  }
-}
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/easy.cron.input.less b/src/components/Form/src/jeecg/components/JEasyCron/easy.cron.input.less
deleted file mode 100644
index d72aa15..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/easy.cron.input.less
+++ /dev/null
@@ -1,14 +0,0 @@
-//noinspection LessUnresolvedVariable
-@prefix-cls: ~'@{namespace}-easy-cron-input';
-
-.@{prefix-cls} {
-  a.open-btn {
-    cursor: pointer;
-
-    .app-iconify {
-      position: relative;
-      top: 1px;
-      right: 2px;
-    }
-  }
-}
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/index.ts b/src/components/Form/src/jeecg/components/JEasyCron/index.ts
deleted file mode 100644
index 1513f0d..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-// 鍘熷紑婧愰」鐩湴鍧�锛歨ttps://gitee.com/toktok/easy-cron
-
-export { default as JEasyCron } from './EasyCronInput.vue';
-export { default as JEasyCronInner } from './EasyCronInner.vue';
-export { default as JEasyCronModal } from './EasyCronModal.vue';
-export { default as JCronValidator } from './validator';
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/tabs/DayUI.vue b/src/components/Form/src/jeecg/components/JEasyCron/tabs/DayUI.vue
deleted file mode 100644
index 1cd215c..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/tabs/DayUI.vue
+++ /dev/null
@@ -1,94 +0,0 @@
-<template>
-  <div :class="`${prefixCls}-config-list`">
-    <a-radio-group v-model:value="type">
-      <div class="item">
-        <a-radio :value="TypeEnum.unset" v-bind="beforeRadioAttrs">涓嶈缃�</a-radio>
-        <span class="tip-info">鏃ュ拰鍛ㄥ彧鑳借缃叾涓箣涓�</span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.every" v-bind="beforeRadioAttrs">姣忔棩</a-radio>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.range" v-bind="beforeRadioAttrs">鍖洪棿</a-radio>
-        <span> 浠� </span>
-        <InputNumber v-model:value="valueRange.start" v-bind="typeRangeAttrs" />
-        <span> 鏃� 鑷� </span>
-        <InputNumber v-model:value="valueRange.end" v-bind="typeRangeAttrs" />
-        <span> 鏃� </span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.loop" v-bind="beforeRadioAttrs">寰幆</a-radio>
-        <span> 浠� </span>
-        <InputNumber v-model:value="valueLoop.start" v-bind="typeLoopAttrs" />
-        <span> 鏃ュ紑濮嬶紝闂撮殧 </span>
-        <InputNumber v-model:value="valueLoop.interval" v-bind="typeLoopAttrs" />
-        <span> 鏃� </span>
-      </div>
-<!--       宸ヤ綔鏃ユ殏涓嶆敮鎸侊紝浼氭姤閿欙紝鍏堥殣钘忎簡 -->
-<!--      <div class="item">-->
-<!--        <a-radio :value="TypeEnum.work" v-bind="beforeRadioAttrs">宸ヤ綔鏃�</a-radio>-->
-<!--        <span> 鏈湀 </span>-->
-<!--        <InputNumber v-model:value="valueWork" v-bind="typeWorkAttrs" />-->
-<!--        <span> 鏃ワ紝鏈�杩戠殑宸ヤ綔鏃� </span>-->
-<!--      </div>-->
-      <div class="item">
-        <a-radio :value="TypeEnum.last" v-bind="beforeRadioAttrs">鏈�鍚庝竴鏃�</a-radio>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.specify" v-bind="beforeRadioAttrs">鎸囧畾</a-radio>
-        <div class="list">
-          <a-checkbox-group v-model:value="valueList">
-            <template v-for="i in specifyRange" :key="i">
-              <a-checkbox :value="i" v-bind="typeSpecifyAttrs">{{ i }}</a-checkbox>
-            </template>
-          </a-checkbox-group>
-        </div>
-      </div>
-    </a-radio-group>
-  </div>
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent, watch } from 'vue';
-  import { InputNumber } from 'ant-design-vue';
-  import { TypeEnum, useTabEmits, useTabProps, useTabSetup } from './useTabMixin';
-
-  export default defineComponent({
-    name: 'DayUI',
-    components: { InputNumber },
-    props: useTabProps({
-      defaultValue: '*',
-      props: {
-        week: { type: String, default: '?' },
-      },
-    }),
-    emits: useTabEmits(),
-    setup(props, context) {
-      const disabledChoice = computed(() => {
-        return (props.week && props.week !== '?') || props.disabled;
-      });
-      const setup = useTabSetup(props, context, {
-        defaultValue: '*',
-        valueWork: 1,
-        minValue: 1,
-        maxValue: 31,
-        valueRange: { start: 1, end: 31 },
-        valueLoop: { start: 1, interval: 1 },
-        disabled: disabledChoice,
-      });
-      const typeWorkAttrs = computed(() => ({
-        disabled: setup.type.value !== TypeEnum.work || props.disabled || disabledChoice.value,
-        ...setup.inputNumberAttrs.value,
-      }));
-
-      watch(
-        () => props.week,
-        () => {
-          setup.updateValue(disabledChoice.value ? '?' : setup.computeValue.value);
-        }
-      );
-
-      return { ...setup, typeWorkAttrs };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/tabs/HourUI.vue b/src/components/Form/src/jeecg/components/JEasyCron/tabs/HourUI.vue
deleted file mode 100644
index c3c5224..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/tabs/HourUI.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <div :class="`${prefixCls}-config-list`">
-    <a-radio-group v-model:value="type">
-      <div class="item">
-        <a-radio :value="TypeEnum.every" v-bind="beforeRadioAttrs">姣忔椂</a-radio>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.range" v-bind="beforeRadioAttrs">鍖洪棿</a-radio>
-        <span> 浠� </span>
-        <InputNumber v-model:value="valueRange.start" v-bind="typeRangeAttrs" />
-        <span> 鏃� 鑷� </span>
-        <InputNumber v-model:value="valueRange.end" v-bind="typeRangeAttrs" />
-        <span> 鏃� </span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.loop" v-bind="beforeRadioAttrs">寰幆</a-radio>
-        <span> 浠� </span>
-        <InputNumber v-model:value="valueLoop.start" v-bind="typeLoopAttrs" />
-        <span> 鏃跺紑濮嬶紝闂撮殧 </span>
-        <InputNumber v-model:value="valueLoop.interval" v-bind="typeLoopAttrs" />
-        <span> 鏃� </span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.specify" v-bind="beforeRadioAttrs">鎸囧畾</a-radio>
-        <div class="list">
-          <a-checkbox-group v-model:value="valueList">
-            <template v-for="i in specifyRange" :key="i">
-              <a-checkbox :value="i" v-bind="typeSpecifyAttrs">{{ i }}</a-checkbox>
-            </template>
-          </a-checkbox-group>
-        </div>
-      </div>
-    </a-radio-group>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { InputNumber } from 'ant-design-vue';
-  import { useTabProps, useTabEmits, useTabSetup } from './useTabMixin';
-
-  export default defineComponent({
-    name: 'HourUI',
-    components: { InputNumber },
-    props: useTabProps({
-      defaultValue: '*',
-    }),
-    emits: useTabEmits(),
-    setup(props, context) {
-      return useTabSetup(props, context, {
-        defaultValue: '*',
-        minValue: 0,
-        maxValue: 23,
-        valueRange: { start: 0, end: 23 },
-        valueLoop: { start: 0, interval: 1 },
-      });
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/tabs/MinuteUI.vue b/src/components/Form/src/jeecg/components/JEasyCron/tabs/MinuteUI.vue
deleted file mode 100644
index 34617bf..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/tabs/MinuteUI.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <div :class="`${prefixCls}-config-list`">
-    <a-radio-group v-model:value="type">
-      <div class="item">
-        <a-radio :value="TypeEnum.every" v-bind="beforeRadioAttrs">姣忓垎</a-radio>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.range" v-bind="beforeRadioAttrs">鍖洪棿</a-radio>
-        <span> 浠� </span>
-        <InputNumber v-model:value="valueRange.start" v-bind="typeRangeAttrs" />
-        <span> 鍒� 鑷� </span>
-        <InputNumber v-model:value="valueRange.end" v-bind="typeRangeAttrs" />
-        <span> 鍒� </span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.loop" v-bind="beforeRadioAttrs">寰幆</a-radio>
-        <span> 浠� </span>
-        <InputNumber v-model:value="valueLoop.start" v-bind="typeLoopAttrs" />
-        <span> 鍒嗗紑濮嬶紝闂撮殧 </span>
-        <InputNumber v-model:value="valueLoop.interval" v-bind="typeLoopAttrs" />
-        <span> 鍒� </span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.specify" v-bind="beforeRadioAttrs">鎸囧畾</a-radio>
-        <div class="list">
-          <a-checkbox-group v-model:value="valueList">
-            <template v-for="i in specifyRange" :key="i">
-              <a-checkbox :value="i" v-bind="typeSpecifyAttrs">{{ i }}</a-checkbox>
-            </template>
-          </a-checkbox-group>
-        </div>
-      </div>
-    </a-radio-group>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { InputNumber } from 'ant-design-vue';
-  import { useTabProps, useTabEmits, useTabSetup } from './useTabMixin';
-
-  export default defineComponent({
-    name: 'MinuteUI',
-    components: { InputNumber },
-    props: useTabProps({
-      defaultValue: '*',
-    }),
-    emits: useTabEmits(),
-    setup(props, context) {
-      return useTabSetup(props, context, {
-        defaultValue: '*',
-        minValue: 0,
-        maxValue: 59,
-        valueRange: { start: 0, end: 59 },
-        valueLoop: { start: 0, interval: 1 },
-      });
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/tabs/MonthUI.vue b/src/components/Form/src/jeecg/components/JEasyCron/tabs/MonthUI.vue
deleted file mode 100644
index 78f7f4e..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/tabs/MonthUI.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <div :class="`${prefixCls}-config-list`">
-    <a-radio-group v-model:value="type">
-      <div class="item">
-        <a-radio :value="TypeEnum.every" v-bind="beforeRadioAttrs">姣忔湀</a-radio>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.range" v-bind="beforeRadioAttrs">鍖洪棿</a-radio>
-        <span> 浠� </span>
-        <InputNumber v-model:value="valueRange.start" v-bind="typeRangeAttrs" />
-        <span> 鏈� 鑷� </span>
-        <InputNumber v-model:value="valueRange.end" v-bind="typeRangeAttrs" />
-        <span> 鏈� </span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.loop" v-bind="beforeRadioAttrs">寰幆</a-radio>
-        <span> 浠� </span>
-        <InputNumber v-model:value="valueLoop.start" v-bind="typeLoopAttrs" />
-        <span> 鏈堝紑濮嬶紝闂撮殧 </span>
-        <InputNumber v-model:value="valueLoop.interval" v-bind="typeLoopAttrs" />
-        <span> 鏈� </span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.specify" v-bind="beforeRadioAttrs">鎸囧畾</a-radio>
-        <div class="list">
-          <a-checkbox-group v-model:value="valueList">
-            <template v-for="i in specifyRange" :key="i">
-              <a-checkbox :value="i" v-bind="typeSpecifyAttrs">{{ i }}</a-checkbox>
-            </template>
-          </a-checkbox-group>
-        </div>
-      </div>
-    </a-radio-group>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { InputNumber } from 'ant-design-vue';
-  import { useTabProps, useTabEmits, useTabSetup } from './useTabMixin';
-
-  export default defineComponent({
-    name: 'MonthUI',
-    components: { InputNumber },
-    props: useTabProps({
-      defaultValue: '*',
-    }),
-    emits: useTabEmits(),
-    setup(props, context) {
-      return useTabSetup(props, context, {
-        defaultValue: '*',
-        minValue: 1,
-        maxValue: 12,
-        valueRange: { start: 1, end: 12 },
-        valueLoop: { start: 1, interval: 1 },
-      });
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/tabs/SecondUI.vue b/src/components/Form/src/jeecg/components/JEasyCron/tabs/SecondUI.vue
deleted file mode 100644
index 6b65b85..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/tabs/SecondUI.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <div :class="`${prefixCls}-config-list`">
-    <a-radio-group v-model:value="type">
-      <div class="item">
-        <a-radio :value="TypeEnum.every" v-bind="beforeRadioAttrs">姣忕</a-radio>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.range" v-bind="beforeRadioAttrs">鍖洪棿</a-radio>
-        <span> 浠� </span>
-        <InputNumber v-model:value="valueRange.start" v-bind="typeRangeAttrs" />
-        <span> 绉� 鑷� </span>
-        <InputNumber v-model:value="valueRange.end" v-bind="typeRangeAttrs" />
-        <span> 绉� </span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.loop" v-bind="beforeRadioAttrs">寰幆</a-radio>
-        <span> 浠� </span>
-        <InputNumber v-model:value="valueLoop.start" v-bind="typeLoopAttrs" />
-        <span> 绉掑紑濮嬶紝闂撮殧 </span>
-        <InputNumber v-model:value="valueLoop.interval" v-bind="typeLoopAttrs" />
-        <span> 绉� </span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.specify" v-bind="beforeRadioAttrs">鎸囧畾</a-radio>
-        <div class="list">
-          <a-checkbox-group v-model:value="valueList">
-            <template v-for="i in specifyRange" :key="i">
-              <a-checkbox :value="i" v-bind="typeSpecifyAttrs">{{ i }}</a-checkbox>
-            </template>
-          </a-checkbox-group>
-        </div>
-      </div>
-    </a-radio-group>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { InputNumber } from 'ant-design-vue';
-  import { useTabProps, useTabEmits, useTabSetup } from './useTabMixin';
-
-  export default defineComponent({
-    name: 'SecondUI',
-    components: { InputNumber },
-    props: useTabProps({
-      defaultValue: '*',
-    }),
-    emits: useTabEmits(),
-    setup(props, context) {
-      return useTabSetup(props, context, {
-        defaultValue: '*',
-        minValue: 0,
-        maxValue: 59,
-        valueRange: { start: 0, end: 59 },
-        valueLoop: { start: 0, interval: 1 },
-      });
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/tabs/WeekUI.vue b/src/components/Form/src/jeecg/components/JEasyCron/tabs/WeekUI.vue
deleted file mode 100644
index c3b15dc..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/tabs/WeekUI.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-  <div :class="`${prefixCls}-config-list`">
-    <a-radio-group v-model:value="type">
-      <div class="item">
-        <a-radio :value="TypeEnum.unset" v-bind="beforeRadioAttrs">涓嶈缃�</a-radio>
-        <span class="tip-info">鏃ュ拰鍛ㄥ彧鑳借缃叾涓箣涓�</span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.range" v-bind="beforeRadioAttrs">鍖洪棿</a-radio>
-        <span> 浠� </span>
-        <a-select v-model:value="valueRange.start" :options="weekOptions" v-bind="typeRangeSelectAttrs" />
-        <span> 鑷� </span>
-        <a-select v-model:value="valueRange.end" :options="weekOptions" v-bind="typeRangeSelectAttrs" />
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.loop" v-bind="beforeRadioAttrs">寰幆</a-radio>
-        <span> 浠� </span>
-        <a-select v-model:value="valueLoop.start" :options="weekOptions" v-bind="typeLoopSelectAttrs" />
-        <span> 寮�濮嬶紝闂撮殧 </span>
-        <InputNumber v-model:value="valueLoop.interval" v-bind="typeLoopAttrs" />
-        <span> 澶� </span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.specify" v-bind="beforeRadioAttrs">鎸囧畾</a-radio>
-        <div class="list list-cn">
-          <a-checkbox-group v-model:value="valueList">
-            <template v-for="opt in weekOptions" :key="i">
-              <a-checkbox :value="opt.value" v-bind="typeSpecifyAttrs">{{ opt.label }}</a-checkbox>
-            </template>
-          </a-checkbox-group>
-        </div>
-      </div>
-    </a-radio-group>
-  </div>
-</template>
-
-<script lang="ts">
-  import { computed, watch, defineComponent } from 'vue';
-  import { InputNumber } from 'ant-design-vue';
-  import { useTabProps, useTabEmits, useTabSetup, TypeEnum } from './useTabMixin';
-
-  const WEEK_MAP_EN = {
-    '1': 'SUN',
-    '2': 'MON',
-    '3': 'TUE',
-    '4': 'WED',
-    '5': 'THU',
-    '6': 'FRI',
-    '7': 'SAT',
-  };
-
-  const WEEK_MAP_CN = {
-    '1': '鍛ㄦ棩',
-    '2': '鍛ㄤ竴',
-    '3': '鍛ㄤ簩',
-    '4': '鍛ㄤ笁',
-    '5': '鍛ㄥ洓',
-    '6': '鍛ㄤ簲',
-    '7': '鍛ㄥ叚',
-  };
-
-  export default defineComponent({
-    name: 'WeekUI',
-    components: { InputNumber },
-    props: useTabProps({
-      defaultValue: '?',
-      props: {
-        day: { type: String, default: '*' },
-      },
-    }),
-    emits: useTabEmits(),
-    setup(props, context) {
-      const disabledChoice = computed(() => {
-        return (props.day && props.day !== '?') || props.disabled;
-      });
-      const setup = useTabSetup(props, context, {
-        defaultType: TypeEnum.unset,
-        defaultValue: '?',
-        minValue: 1,
-        maxValue: 7,
-        // 0,7琛ㄧず鍛ㄦ棩 1琛ㄧず鍛ㄤ竴
-        valueRange: { start: 1, end: 7 },
-        valueLoop: { start: 2, interval: 1 },
-        disabled: disabledChoice,
-      });
-      const weekOptions = computed(() => {
-        let options: { label: string; value: number }[] = [];
-        for (let weekKey of Object.keys(WEEK_MAP_CN)) {
-          let weekName: string = WEEK_MAP_CN[weekKey];
-          options.push({
-            value: Number.parseInt(weekKey),
-            label: weekName,
-          });
-        }
-        return options;
-      });
-
-      const typeRangeSelectAttrs = computed(() => ({
-        class: ['w80'],
-        disabled: setup.typeRangeAttrs.value.disabled,
-      }));
-
-      const typeLoopSelectAttrs = computed(() => ({
-        class: ['w80'],
-        disabled: setup.typeLoopAttrs.value.disabled,
-      }));
-
-      watch(
-        () => props.day,
-        () => {
-          setup.updateValue(disabledChoice.value ? '?' : setup.computeValue.value);
-        }
-      );
-
-      return {
-        ...setup,
-        weekOptions,
-        typeLoopSelectAttrs,
-        typeRangeSelectAttrs,
-        WEEK_MAP_CN,
-        WEEK_MAP_EN,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/tabs/YearUI.vue b/src/components/Form/src/jeecg/components/JEasyCron/tabs/YearUI.vue
deleted file mode 100644
index 2be7972..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/tabs/YearUI.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-<template>
-  <div :class="`${prefixCls}-config-list`">
-    <a-radio-group v-model:value="type">
-      <div class="item">
-        <a-radio :value="TypeEnum.every" v-bind="beforeRadioAttrs">姣忓勾</a-radio>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.range" v-bind="beforeRadioAttrs">鍖洪棿</a-radio>
-        <span> 浠� </span>
-        <InputNumber class="w80" v-model:value="valueRange.start" v-bind="typeRangeAttrs" />
-        <span> 骞� 鑷� </span>
-        <InputNumber class="w80" v-model:value="valueRange.end" v-bind="typeRangeAttrs" />
-        <span> 骞� </span>
-      </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.loop" v-bind="beforeRadioAttrs">寰幆</a-radio>
-        <span> 浠� </span>
-        <InputNumber class="w80" v-model:value="valueLoop.start" v-bind="typeLoopAttrs" />
-        <span> 骞村紑濮嬶紝闂撮殧 </span>
-        <InputNumber class="w80" v-model:value="valueLoop.interval" v-bind="typeLoopAttrs" />
-        <span> 骞� </span>
-      </div>
-    </a-radio-group>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { InputNumber } from 'ant-design-vue';
-  import { useTabProps, useTabEmits, useTabSetup } from './useTabMixin';
-
-  export default defineComponent({
-    name: 'YearUI',
-    components: { InputNumber },
-    props: useTabProps({
-      defaultValue: '*',
-    }),
-    emits: useTabEmits(),
-    setup(props, context) {
-      const nowYear = new Date().getFullYear();
-      return useTabSetup(props, context, {
-        defaultValue: '*',
-        minValue: 0,
-        valueRange: { start: nowYear, end: nowYear + 100 },
-        valueLoop: { start: nowYear, interval: 1 },
-      });
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/tabs/useTabMixin.ts b/src/components/Form/src/jeecg/components/JEasyCron/tabs/useTabMixin.ts
deleted file mode 100644
index 291ca19..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/tabs/useTabMixin.ts
+++ /dev/null
@@ -1,199 +0,0 @@
-// 涓昏鐢ㄤ簬鏃ュ拰鏄熸湡鐨勪簰鏂ヤ娇鐢�
-import { computed, inject, reactive, ref, unref, watch } from 'vue';
-import { propTypes } from '/@/utils/propTypes';
-
-export enum TypeEnum {
-  unset = 'UNSET',
-  every = 'EVERY',
-  range = 'RANGE',
-  loop = 'LOOP',
-  work = 'WORK',
-  last = 'LAST',
-  specify = 'SPECIFY',
-}
-
-// use 鍏叡 props
-export function useTabProps(options) {
-  const defaultValue = options?.defaultValue ?? '?';
-  return {
-    value: propTypes.string.def(defaultValue),
-    disabled: propTypes.bool.def(false),
-    ...options?.props,
-  };
-}
-
-// use 鍏叡 emits
-export function useTabEmits() {
-  return ['change', 'update:value'];
-}
-
-// use 鍏叡 setup
-export function useTabSetup(props, context, options) {
-  const { emit } = context;
-  const prefixCls = inject('prefixCls');
-  const defaultValue = ref(options?.defaultValue ?? '?');
-  // 绫诲瀷
-  const type = ref(options.defaultType ?? TypeEnum.every);
-  const valueList = ref<any[]>([]);
-  // 瀵逛簬涓嶅悓鐨勭被鍨嬶紝鎵�瀹氫箟鐨勫�间篃鏈夋墍涓嶅悓
-  const valueRange = reactive(options.valueRange);
-  const valueLoop = reactive(options.valueLoop);
-  const valueWeek = reactive(options.valueWeek);
-  const valueWork = ref(options.valueWork);
-  const maxValue = ref(options.maxValue);
-  const minValue = ref(options.minValue);
-
-  // 鏍规嵁涓嶅悓鐨勭被鍨嬭绠楀嚭鐨剉alue
-  const computeValue = computed(() => {
-    let valueArray: any[] = [];
-    switch (type.value) {
-      case TypeEnum.unset:
-        valueArray.push('?');
-        break;
-      case TypeEnum.every:
-        valueArray.push('*');
-        break;
-      case TypeEnum.range:
-        valueArray.push(`${valueRange.start}-${valueRange.end}`);
-        break;
-      case TypeEnum.loop:
-        valueArray.push(`${valueLoop.start}/${valueLoop.interval}`);
-        break;
-      case TypeEnum.work:
-        valueArray.push(`${valueWork.value}W`);
-        break;
-      case TypeEnum.last:
-        valueArray.push('L');
-        break;
-      case TypeEnum.specify:
-        if (valueList.value.length === 0) {
-          valueList.value.push(minValue.value);
-        }
-        valueArray.push(valueList.value.join(','));
-        break;
-      default:
-        valueArray.push(defaultValue.value);
-        break;
-    }
-    return valueArray.length > 0 ? valueArray.join('') : defaultValue.value;
-  });
-  // 鎸囧畾鍊艰寖鍥村尯闂达紝浠嬩簬鏈�灏忓�煎拰鏈�澶у�间箣闂�
-  const specifyRange = computed(() => {
-    let range: number[] = [];
-    if (maxValue.value != null) {
-      for (let i = minValue.value; i <= maxValue.value; i++) {
-        range.push(i);
-      }
-    }
-    return range;
-  });
-
-  watch(
-    () => props.value,
-    (val) => {
-      if (val !== computeValue.value) {
-        parseValue(val);
-      }
-    },
-    { immediate: true }
-  );
-
-  watch(computeValue, (v) => updateValue(v));
-
-  function updateValue(value) {
-    emit('change', value);
-    emit('update:value', value);
-  }
-
-  /**
-   * parseValue
-   * @param value
-   */
-  function parseValue(value) {
-    if (value === computeValue.value) {
-      return;
-    }
-    try {
-      if (!value || value === defaultValue.value) {
-        type.value = TypeEnum.every;
-      } else if (value.indexOf('?') >= 0) {
-        type.value = TypeEnum.unset;
-      } else if (value.indexOf('-') >= 0) {
-        type.value = TypeEnum.range;
-        const values = value.split('-');
-        if (values.length >= 2) {
-          valueRange.start = parseInt(values[0]);
-          valueRange.end = parseInt(values[1]);
-        }
-      } else if (value.indexOf('/') >= 0) {
-        type.value = TypeEnum.loop;
-        const values = value.split('/');
-        if (values.length >= 2) {
-          valueLoop.start = value[0] === '*' ? 0 : parseInt(values[0]);
-          valueLoop.interval = parseInt(values[1]);
-        }
-      } else if (value.indexOf('W') >= 0) {
-        type.value = TypeEnum.work;
-        const values = value.split('W');
-        if (!values[0] && !isNaN(values[0])) {
-          valueWork.value = parseInt(values[0]);
-        }
-      } else if (value.indexOf('L') >= 0) {
-        type.value = TypeEnum.last;
-      } else if (value.indexOf(',') >= 0 || !isNaN(value)) {
-        type.value = TypeEnum.specify;
-        valueList.value = value.split(',').map((item) => parseInt(item));
-      } else {
-        type.value = TypeEnum.every;
-      }
-    } catch (e) {
-      type.value = TypeEnum.every;
-    }
-  }
-
-  const beforeRadioAttrs = computed(() => ({
-    class: ['choice'],
-    disabled: props.disabled || unref(options.disabled),
-  }));
-  const inputNumberAttrs = computed(() => ({
-    class: ['w60'],
-    max: maxValue.value,
-    min: minValue.value,
-    precision: 0,
-  }));
-  const typeRangeAttrs = computed(() => ({
-    disabled: type.value !== TypeEnum.range || props.disabled || unref(options.disabled),
-    ...inputNumberAttrs.value,
-  }));
-  const typeLoopAttrs = computed(() => ({
-    disabled: type.value !== TypeEnum.loop || props.disabled || unref(options.disabled),
-    ...inputNumberAttrs.value,
-  }));
-  const typeSpecifyAttrs = computed(() => ({
-    disabled: type.value !== TypeEnum.specify || props.disabled || unref(options.disabled),
-    class: ['list-check-item'],
-  }));
-
-  return {
-    type,
-    TypeEnum,
-    prefixCls,
-    defaultValue,
-    valueRange,
-    valueLoop,
-    valueWeek,
-    valueList,
-    valueWork,
-    maxValue,
-    minValue,
-    computeValue,
-    specifyRange,
-    updateValue,
-    parseValue,
-    beforeRadioAttrs,
-    inputNumberAttrs,
-    typeRangeAttrs,
-    typeLoopAttrs,
-    typeSpecifyAttrs,
-  };
-}
diff --git a/src/components/Form/src/jeecg/components/JEasyCron/validator.ts b/src/components/Form/src/jeecg/components/JEasyCron/validator.ts
deleted file mode 100644
index 308f1e8..0000000
--- a/src/components/Form/src/jeecg/components/JEasyCron/validator.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import CronParser from 'cron-parser';
-import type { ValidatorRule } from 'ant-design-vue/lib/form/interface';
-
-const cronRule: ValidatorRule = {
-  validator({}, value) {
-    // 娌″~鍐欏氨涓嶆牎楠�
-    if (!value) {
-      return Promise.resolve();
-    }
-    const values: string[] = value.split(' ').filter((item) => !!item);
-    if (values.length > 7) {
-      return Promise.reject('Cron琛ㄨ揪寮忔渶澶�7椤癸紒');
-    }
-    // 妫�鏌ョ7椤�
-    let val: string = value;
-    if (values.length === 7) {
-      const year = values[6];
-      if (year !== '*' && year !== '?') {
-        let yearValues: string[] = [];
-        if (year.indexOf('-') >= 0) {
-          yearValues = year.split('-');
-        } else if (year.indexOf('/')) {
-          yearValues = year.split('/');
-        } else {
-          yearValues = [year];
-        }
-        // 鍒ゆ柇鏄惁閮芥槸鏁板瓧
-        const checkYear = yearValues.some((item) => isNaN(Number(item)));
-        if (checkYear) {
-          return Promise.reject('Cron琛ㄨ揪寮忓弬鏁癧骞碷閿欒锛�' + year);
-        }
-      }
-      // 鍙栧叾涓殑鍓嶅叚椤�
-      val = values.slice(0, 6).join(' ');
-    }
-    // 6浣� 娌℃湁骞�
-    // 5浣嶆病鏈夌銆佸勾
-    try {
-      const iter = CronParser.parseExpression(val);
-      iter.next();
-      return Promise.resolve();
-    } catch (e) {
-      return Promise.reject('Cron琛ㄨ揪寮忛敊璇細' + e);
-    }
-  },
-};
-
-export default cronRule.validator;
diff --git a/src/components/Form/src/jeecg/components/JEditor.vue b/src/components/Form/src/jeecg/components/JEditor.vue
deleted file mode 100644
index 3928fc9..0000000
--- a/src/components/Form/src/jeecg/components/JEditor.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-<template>
-  <Tinymce v-bind="bindProps" @change="onChange" />
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-
-  import { Tinymce } from '/@/components/Tinymce';
-  import { propTypes } from '/@/utils/propTypes';
-
-  export default defineComponent({
-    name: 'JEditor',
-    // 涓嶅皢 attrs 鐨勫睘鎬х粦瀹氬埌 html 鏍囩涓�
-    inheritAttrs: false,
-    components: { Tinymce },
-    props: {
-      value: propTypes.string.def(''),
-      disabled: propTypes.bool.def(false),
-    },
-    emits: ['change', 'update:value'],
-    setup(props, { emit, attrs }) {
-      // 鍚堝苟 props 鍜� attrs
-      const bindProps = computed(() => Object.assign({}, props, attrs));
-
-      // value change 浜嬩欢
-      function onChange(value) {
-        emit('change', value);
-        emit('update:value', value);
-      }
-
-      return {
-        bindProps,
-        onChange,
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped></style>
diff --git a/src/components/Form/src/jeecg/components/JEllipsis.vue b/src/components/Form/src/jeecg/components/JEllipsis.vue
deleted file mode 100644
index 5eac646..0000000
--- a/src/components/Form/src/jeecg/components/JEllipsis.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-<template>
-  <a-tooltip placement="topLeft">
-    <template #title>
-      <span>{{ value }}</span>
-    </template>
-    {{ showText }}
-  </a-tooltip>
-</template>
-<script lang="ts" setup>
-  import { computed } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-
-  const props = defineProps({
-    value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-    length: propTypes.number.def(25),
-  });
-  //鏄剧ず鐨勬枃鏈�
-  const showText = computed(() =>
-    props.value ? (props.value.length > props.length ? props.value.slice(0, props.length) + '...' : props.value) : props.value
-  );
-</script>
diff --git a/src/components/Form/src/jeecg/components/JFormContainer.vue b/src/components/Form/src/jeecg/components/JFormContainer.vue
deleted file mode 100644
index 6fe2398..0000000
--- a/src/components/Form/src/jeecg/components/JFormContainer.vue
+++ /dev/null
@@ -1,62 +0,0 @@
-<template>
-  <div :class="disabled ? 'jeecg-form-container-disabled' : ''">
-    <fieldset :disabled="disabled">
-      <slot></slot>
-    </fieldset>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-
-  export default defineComponent({
-    name: 'JFormContainer',
-    props: {
-      disabled: {
-        type: Boolean,
-        default: false,
-        required: false,
-      },
-    },
-  });
-</script>
-
-<style lang="less">
-  .jeecg-form-container-disabled {
-    cursor: not-allowed;
-
-    fieldset[disabled] {
-      -ms-pointer-events: none;
-      pointer-events: none;
-    }
-
-    .ant-select {
-      -ms-pointer-events: none;
-      pointer-events: none;
-    }
-
-    .ant-upload-select {
-      display: none;
-    }
-
-    .ant-upload-list {
-      cursor: grabbing;
-    }
-
-    fieldset[disabled]{
-      .anticon-delete{
-        display: none !important;
-      }
-    }
-  }
-
-  .jeecg-form-container-disabled fieldset[disabled] .ant-upload-list {
-    -ms-pointer-events: auto !important;
-    pointer-events: auto !important;
-  }
-
-  .jeecg-form-container-disabled .ant-upload-list-item-actions .anticon-delete,
-  .jeecg-form-container-disabled .ant-upload-list-item .anticon-close {
-    display: none;
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JImageUpload.vue b/src/components/Form/src/jeecg/components/JImageUpload.vue
deleted file mode 100644
index c840ef1..0000000
--- a/src/components/Form/src/jeecg/components/JImageUpload.vue
+++ /dev/null
@@ -1,256 +0,0 @@
-<template>
-  <div class="clearfix">
-    <a-upload
-      :listType="listType"
-      :multiple="multiple"
-      :action="uploadUrl"
-      :headers="headers"
-      :data="{ biz: bizPath }"
-      v-model:fileList="uploadFileList"
-      :beforeUpload="beforeUpload"
-      :disabled="disabled"
-      @change="handleChange"
-      @preview="handlePreview"
-    >
-      <div v-if="uploadVisible">
-        <div v-if="listType == 'picture-card'">
-          <LoadingOutlined v-if="loading" />
-          <UploadOutlined v-else />
-          <div class="ant-upload-text">{{ text }}</div>
-        </div>
-        <a-button v-if="listType == 'picture'" :disabled="disabled">
-          <UploadOutlined></UploadOutlined>
-          {{ text }}
-        </a-button>
-      </div>
-    </a-upload>
-    <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel()">
-      <img alt="example" style="width: 100%" :src="previewImage" />
-    </a-modal>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, reactive, watchEffect, computed, unref, watch, onMounted } from 'vue';
-  import { LoadingOutlined, UploadOutlined } from '@ant-design/icons-vue';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { getFileAccessHttpUrl, getRandom } from '/@/utils/common/compUtils';
-  import { uploadUrl } from '/@/api/common/api';
-  import { getToken } from '/@/utils/auth';
-
-  const { createMessage, createErrorModal } = useMessage();
-  export default defineComponent({
-    name: 'JImageUpload',
-    components: { LoadingOutlined, UploadOutlined },
-    inheritAttrs: false,
-    props: {
-      //缁戝畾鍊�
-      value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-      //鎸夐挳鏂囨湰
-      listType: {
-        type: String,
-        required: false,
-        default: 'picture-card',
-      },
-      //鎸夐挳鏂囨湰
-      text: {
-        type: String,
-        required: false,
-        default: '涓婁紶',
-      },
-      //杩欎釜灞炴�х敤浜庢帶鍒舵枃浠朵笂浼犵殑涓氬姟璺緞
-      bizPath: {
-        type: String,
-        required: false,
-        default: 'temp',
-      },
-      //鏄惁绂佺敤
-      disabled: {
-        type: Boolean,
-        required: false,
-        default: false,
-      },
-      //涓婁紶鏁伴噺
-      fileMax: {
-        type: Number,
-        required: false,
-        default: 1,
-      },
-    },
-    emits: ['options-change', 'change', 'update:value'],
-    setup(props, { emit, refs }) {
-      const emitData = ref<any[]>([]);
-      const attrs = useAttrs();
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
-      //鑾峰彇鏂囦欢鍚�
-      const getFileName = (path) => {
-        if (path.lastIndexOf('\\') >= 0) {
-          let reg = new RegExp('\\\\', 'g');
-          path = path.replace(reg, '/');
-        }
-        return path.substring(path.lastIndexOf('/') + 1);
-      };
-      //token
-      const headers = ref<object>({
-        'X-Access-Token': getToken(),
-      });
-      //涓婁紶鐘舵��
-      const loading = ref<boolean>(false);
-      //鏄惁鏄垵濮嬪寲鍔犺浇
-      const initTag = ref<boolean>(true);
-      //鏂囦欢鍒楄〃
-      let uploadFileList = ref<any[]>([]);
-      //棰勮鍥�
-      const previewImage = ref<string | undefined>('');
-      //棰勮妗嗙姸鎬�
-      const previewVisible = ref<boolean>(false);
-
-      //璁$畻鏄惁寮�鍚鍥句笂浼�
-      const multiple = computed(() => {
-        return props['fileMax'] > 1;
-      });
-
-      //璁$畻鏄惁鍙互缁х画涓婁紶
-      const uploadVisible = computed(() => {
-        return uploadFileList.value.length < props['fileMax'];
-      });
-
-      /**
-       * 鐩戝惉value鍙樺寲
-       */
-      watch(
-        () => props.value,
-        (val, prevCount) => {
-          if (val instanceof Array) {
-            val = val.join(',');
-          }
-          if (initTag.value == true) {
-            initFileList(val);
-          }
-        }
-      );
-
-      /**
-       * 鍒濆鍖栨枃浠跺垪琛�
-       */
-      function initFileList(paths) {
-        if (!paths || paths.length == 0) {
-          uploadFileList.value = [];
-          return;
-        }
-        let files = [];
-        let arr = paths.split(',');
-        arr.forEach((value) => {
-          let url = getFileAccessHttpUrl(value);
-          files.push({
-            uid: getRandom(10),
-            name: getFileName(value),
-            status: 'done',
-            url: url,
-            response: {
-              status: 'history',
-              message: value,
-            },
-          });
-        });
-        uploadFileList.value = files;
-      }
-
-      /**
-       * 涓婁紶鍓嶆牎楠�
-       */
-      function beforeUpload(file) {
-        let fileType = file.type;
-        if (fileType.indexOf('image') < 0) {
-          createMessage.info('璇蜂笂浼犲浘鐗�');
-          return false;
-        }
-      }
-      /**
-       * 鏂囦欢涓婁紶缁撴灉鍥炶皟
-       */
-      function handleChange({ file, fileList, event }) {
-        initTag.value = false;
-        uploadFileList.value = fileList;
-        if (file.status === 'error') {
-          createMessage.error(`${file.name} 涓婁紶澶辫触.`);
-        }
-        let fileUrls = [];
-        //涓婁紶瀹屾垚
-        if (file.status != 'uploading') {
-          fileList.forEach((file) => {
-            if (file.status === 'done') {
-              //update-begin---author:wangshuai ---date:20221121  for锛歔issues/248]鍘熺敓琛ㄥ崟鍐呬娇鐢ㄥ浘鐗囩粍浠�,鍏抽棴寮圭獥鍥剧墖缁勪欢鍊间笉浼氳娓呯┖------------
-              initTag.value = true;
-              //update-end---author:wangshuai ---date:20221121  for锛歔issues/248]鍘熺敓琛ㄥ崟鍐呬娇鐢ㄥ浘鐗囩粍浠�,鍏抽棴寮圭獥鍥剧墖缁勪欢鍊间笉浼氳娓呯┖------------
-              fileUrls.push(file.response.message);
-            }
-          });
-          if (file.status === 'removed') {
-            handleDelete(file);
-          }
-        }
-        // emitData.value = fileUrls.join(',');
-        state.value = fileUrls.join(',');
-        emit('update:value', fileUrls.join(','));
-      }
-
-      /**
-       * 鍒犻櫎鍥剧墖
-       */
-      function handleDelete(file) {
-        //濡傛湁闇�瑕佹柊澧� 鍒犻櫎閫昏緫
-        console.log(file);
-      }
-
-      /**
-       * 棰勮鍥剧墖
-       */
-      function handlePreview(file) {
-        previewImage.value = file.url || file.thumbUrl;
-        previewVisible.value = true;
-      }
-
-      function getAvatarView() {
-        if (uploadFileList.length > 0) {
-          let url = uploadFileList[0].url;
-          return getFileAccessHttpUrl(url, null);
-        }
-      }
-
-      function handleCancel() {
-        previewVisible.value = false;
-      }
-
-      return {
-        state,
-        attrs,
-        previewImage,
-        previewVisible,
-        uploadFileList,
-        multiple,
-        headers,
-        loading,
-        uploadUrl,
-        beforeUpload,
-        uploadVisible,
-        handlePreview,
-        handleCancel,
-        handleChange,
-      };
-    },
-  });
-</script>
-<style scoped>
-  .ant-upload-select-picture-card i {
-    font-size: 32px;
-    color: #999;
-  }
-
-  .ant-upload-select-picture-card .ant-upload-text {
-    margin-top: 8px;
-    color: #666;
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JImportModal.vue b/src/components/Form/src/jeecg/components/JImportModal.vue
deleted file mode 100644
index 8a1c0f8..0000000
--- a/src/components/Form/src/jeecg/components/JImportModal.vue
+++ /dev/null
@@ -1,181 +0,0 @@
-<template>
-  <div>
-    <BasicModal v-bind="$attrs" @register="register" title="瀵煎叆EXCEL" :width="600" @cancel="handleClose" :confirmLoading="uploading" destroyOnClose>
-      <!--鏄惁鏍¢獙-->
-      <div style="margin: 0 5px 1px" v-if="online">
-        <span style="display: inline-block; height: 32px; line-height: 32px; vertical-align: middle">鏄惁寮�鍚牎楠�:</span>
-        <span style="margin-left: 6px">
-          <a-switch :checked="validateStatus == 1" @change="handleChangeValidateStatus" checked-children="鏄�" un-checked-children="鍚�" size="small" />
-        </span>
-      </div>
-      <!--涓婁紶-->
-      <a-upload name="file" accept=".xls,.xlsx" :multiple="true" :fileList="fileList" :remove="handleRemove" :beforeUpload="beforeUpload">
-        <a-button preIcon="ant-design:upload-outlined">閫夋嫨瀵煎叆鏂囦欢</a-button>
-      </a-upload>
-      <!--椤佃剼-->
-      <template #footer>
-        <a-button @click="handleClose">鍏抽棴</a-button>
-        <a-button type="primary" @click="handleImport" :disabled="uploadDisabled" :loading="uploading">{{
-          uploading ? '涓婁紶涓�...' : '寮�濮嬩笂浼�'
-        }}</a-button>
-      </template>
-    </BasicModal>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent, ref, unref, watchEffect, computed } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { defHttp } from '/@/utils/http/axios';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  export default defineComponent({
-    name: 'JImportModal',
-    components: {
-      BasicModal,
-    },
-    props: {
-      url: {
-        type: String,
-        default: '',
-        required: false,
-      },
-      biz: {
-        type: String,
-        default: '',
-        required: false,
-      },
-      //鏄惁online瀵煎叆
-      online: {
-        type: Boolean,
-        default: false,
-        required: false,
-      },
-    },
-    emits: ['ok', 'register'],
-    setup(props, { emit, refs }) {
-      const { createMessage, createWarningModal } = useMessage();
-      //娉ㄥ唽寮规
-      const [register, { closeModal }] = useModalInner((data) => {
-        reset(data);
-      });
-      const glob = useGlobSetting();
-      const attrs = useAttrs();
-      const uploading = ref(false);
-      //鏂囦欢闆嗗悎
-      const fileList = ref([]);
-      //涓婁紶url
-      const uploadAction = ref('');
-      const foreignKeys = ref('');
-      //鏍¢獙鐘舵��
-      const validateStatus = ref(0);
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
-      //鐩戝惉url
-      watchEffect(() => {
-        props.url && (uploadAction.value = `${glob.uploadUrl}${props.url}`);
-      });
-      //鎸夐挳disabled鐘舵��
-      const uploadDisabled = computed(() => !(unref(fileList).length > 0));
-
-      //鍏抽棴鏂规硶
-      function handleClose() {
-        closeModal() && reset();
-      }
-
-      //鏍¢獙鐘舵�佸垏鎹�
-      function handleChangeValidateStatus(checked) {
-        validateStatus.value = !!checked ? 1 : 0;
-      }
-
-      //绉婚櫎涓婁紶鏂囦欢
-      function handleRemove(file) {
-        const index = unref(fileList).indexOf(file);
-        const newFileList = unref(fileList).slice();
-        newFileList.splice(index, 1);
-        fileList.value = newFileList;
-      }
-
-      //涓婁紶鍓嶅鐞�
-      function beforeUpload(file) {
-        fileList.value = [...unref(fileList), file];
-        return false;
-      }
-
-      //鏂囦欢涓婁紶
-      function handleImport() {
-        let { biz, online } = props;
-        const formData = new FormData();
-        if (biz) {
-          formData.append('isSingleTableImport', biz);
-        }
-        if (unref(foreignKeys) && unref(foreignKeys).length > 0) {
-          formData.append('foreignKeys', unref(foreignKeys));
-        }
-        if (!!online) {
-          formData.append('validateStatus', unref(validateStatus));
-        }
-        unref(fileList).forEach((file) => {
-          formData.append('files[]', file);
-        });
-        uploading.value = true;
-
-        //TODO 璇锋眰鎬庢牱澶勭悊鐨勯棶棰�
-        let headers = {
-          'Content-Type': 'multipart/form-data;boundary = ' + new Date().getTime(),
-        };
-        defHttp.post({ url: props.url, params: formData, headers }, { isTransformResponse: false }).then((res) => {
-          uploading.value = false;
-          if (res.success) {
-            if (res.code == 201) {
-              errorTip(res.message, res.result);
-            } else {
-              createMessage.success(res.message);
-            }
-            handleClose();
-            reset();
-            emit('ok');
-          } else {
-            createMessage.warning(res.message);
-          }
-        });
-      }
-
-      //閿欒淇℃伅鎻愮ず
-      function errorTip(tipMessage, fileUrl) {
-        let href = glob.uploadUrl + fileUrl;
-        createWarningModal({
-          title: '瀵煎叆鎴愬姛,浣嗘槸鏈夐敊璇暟鎹�!',
-          centered: false,
-          content: `<div>
-                        <span>${tipMessage}</span><br/>
-                        <span>鍏蜂綋璇︽儏璇�<a href = ${href} target="_blank"> 鐐瑰嚮涓嬭浇 </a> </span>
-                      </div>`,
-        });
-      }
-
-      //閲嶇疆
-      function reset(arg?) {
-        fileList.value = [];
-        uploading.value = false;
-        foreignKeys.value = arg;
-        validateStatus.value = 0;
-      }
-
-      return {
-        register,
-        getBindValue,
-        uploadDisabled,
-        fileList,
-        uploading,
-        validateStatus,
-        handleClose,
-        handleChangeValidateStatus,
-        handleRemove,
-        beforeUpload,
-        handleImport,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JInput.vue b/src/components/Form/src/jeecg/components/JInput.vue
deleted file mode 100644
index a7e8077..0000000
--- a/src/components/Form/src/jeecg/components/JInput.vue
+++ /dev/null
@@ -1,105 +0,0 @@
-<template>
-  <a-input v-bind="getBindValue" v-model:value="showText" @input="backValue"></a-input>
-</template>
-
-<script lang="ts">
-  import { defineComponent, PropType, ref, watchEffect, unref, watch } from 'vue';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { propTypes } from '/@/utils/propTypes';
-  import { JInputTypeEnum } from '/@/enums/jeecgEnum.ts';
-
-  export default defineComponent({
-    name: 'JInput',
-    inheritAttrs: false,
-    props: {
-      value: propTypes.string.def(''),
-      type: propTypes.string.def(JInputTypeEnum.JINPUT_QUERY_LIKE),
-      placeholder: propTypes.string.def(''),
-      trim: propTypes.bool.def(false),
-    },
-    emits: ['change', 'update:value'],
-    setup(props, { emit }) {
-      const attrs = useAttrs();
-      //琛ㄥ崟鍊�
-      const showText = ref('');
-      //缁戝畾灞炴��
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
-      //鐩戝惉绫诲瀷鍙樺寲
-      watch(
-        () => props.type,
-        (val) => {
-          val && backValue({ target: { value: unref(showText) } });
-        }
-      );
-      //鐩戝惉value鍙樺寲
-      watch(
-        () => props.value,
-        () => {
-          initVal();
-        },
-        { immediate: true }
-      );
-
-      /**
-       * 鍒濆鍖栨暟鍊�
-       */
-      function initVal() {
-        if (!props.value) {
-          showText.value = '';
-        } else {
-          let text = props.value;
-          switch (props.type) {
-            case JInputTypeEnum.JINPUT_QUERY_LIKE:
-              //淇璺敱浼犲弬鐨勫�间紶閫佸埌jinput妗嗚鍓嶅悗鍚勬埅鍙栦簡涓�浣� #1336
-              if (text.indexOf('*') != -1) {
-                text = text.substring(1, text.length - 1);
-              }
-              break;
-            case JInputTypeEnum.JINPUT_QUERY_NE:
-              text = text.substring(1);
-              break;
-            case JInputTypeEnum.JINPUT_QUERY_GE:
-              text = text.substring(2);
-              break;
-            case JInputTypeEnum.JINPUT_QUERY_LE:
-              text = text.substring(2);
-              break;
-            default:
-          }
-          showText.value = text;
-        }
-      }
-
-      /**
-       * 杩斿洖鍊�
-       */
-      function backValue(e) {
-        let text = e?.target?.value ?? '';
-        if (text && !!props.trim) {
-          text = text.trim();
-        }
-        switch (props.type) {
-          case JInputTypeEnum.JINPUT_QUERY_LIKE:
-            text = '*' + text + '*';
-            break;
-          case JInputTypeEnum.JINPUT_QUERY_NE:
-            text = '!' + text;
-            break;
-          case JInputTypeEnum.JINPUT_QUERY_GE:
-            text = '>=' + text;
-            break;
-          case JInputTypeEnum.JINPUT_QUERY_LE:
-            text = '<=' + text;
-            break;
-          default:
-        }
-        emit('change', text);
-        emit('update:value', text);
-      }
-
-      return { showText, attrs, getBindValue, backValue };
-    },
-  });
-</script>
-
-<style scoped></style>
diff --git a/src/components/Form/src/jeecg/components/JInputPop.vue b/src/components/Form/src/jeecg/components/JInputPop.vue
deleted file mode 100644
index ad5dd22..0000000
--- a/src/components/Form/src/jeecg/components/JInputPop.vue
+++ /dev/null
@@ -1,117 +0,0 @@
-<template>
-  <a-popover
-    trigger="contextmenu"
-    v-model:visible="visible"
-    :overlayClassName="`${prefixCls}-popover`"
-    :getPopupContainer="getPopupContainer"
-    :placement="position"
-  >
-    <template #title>
-      <span>{{ title }}</span>
-      <span style="float: right" title="鍏抽棴">
-        <Icon icon="ant-design:close-outlined" @click="visible = false" />
-      </span>
-    </template>
-    <template #content>
-      <a-textarea ref="textareaRef" :value="innerValue" :disabled="disabled" :style="textareaStyle" v-bind="attrs" @input="onInputChange" />
-    </template>
-    <a-input :class="`${prefixCls}-input`" :value="innerValue" :disabled="disabled" v-bind="attrs" @change="onInputChange">
-      <template #suffix>
-        <Icon icon="ant-design:fullscreen-outlined" @click.stop="onShowPopup" />
-      </template>
-    </a-input>
-  </a-popover>
-</template>
-
-<script lang="ts" setup>
-  import { computed, nextTick, ref, watch } from 'vue';
-  import Icon from '/@/components/Icon/src/Icon.vue';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  const { prefixCls } = useDesign('j-input-popup');
-  const props = defineProps({
-    // v-model:value
-    value: propTypes.string.def(''),
-    title: propTypes.string.def(''),
-    // 寮瑰嚭妗嗘樉绀轰綅缃�
-    position: propTypes.string.def('right'),
-    width: propTypes.number.def(300),
-    height: propTypes.number.def(150),
-    disabled: propTypes.bool.def(false),
-    // 寮瑰嚭妗嗘寕杞界殑鍏冪礌ID
-    popContainer: propTypes.oneOfType([propTypes.string, propTypes.func]).def(''),
-  });
-  const attrs = useAttrs();
-  const emit = defineEmits(['change', 'update:value']);
-
-  const visible = ref<boolean>(false);
-  const innerValue = ref<string>('');
-  // textarea ref瀵硅薄
-  const textareaRef = ref();
-  // textarea 鏍峰紡
-  const textareaStyle = computed(() => ({
-    height: `${props.height}px`,
-    width: `${props.width}px`,
-  }));
-
-  watch(
-    () => props.value,
-    (value) => {
-      if (value && value.length > 0) {
-        innerValue.value = value;
-      }
-    },
-    { immediate: true }
-  );
-
-  function onInputChange(event) {
-    innerValue.value = event.target.value;
-    emitValue(innerValue.value);
-  }
-
-  async function onShowPopup() {
-    visible.value = true;
-    await nextTick();
-    textareaRef.value?.focus();
-  }
-
-  // 鑾峰彇寮瑰嚭妗嗘寕杞界殑鍏冪礌
-  function getPopupContainer(node) {
-    if (!props.popContainer) {
-      return node.parentNode;
-    } else if (typeof props.popContainer === 'function') {
-      return props.popContainer(node);
-    } else {
-      return document.getElementById(props.popContainer);
-    }
-  }
-
-  function emitValue(value) {
-    emit('change', value);
-    emit('update:value', value);
-  }
-</script>
-
-<style lang="less">
-  //noinspection LessUnresolvedVariable
-  @prefix-cls: ~'@{namespace}-j-input-popup';
-
-  .@{prefix-cls} {
-    &-popover {
-    }
-
-    &-input {
-      .app-iconify {
-        cursor: pointer;
-        color: #666666;
-        transition: color 0.3s;
-
-        &:hover {
-          color: black;
-        }
-      }
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JMarkdownEditor.vue b/src/components/Form/src/jeecg/components/JMarkdownEditor.vue
deleted file mode 100644
index b9d2b5c..0000000
--- a/src/components/Form/src/jeecg/components/JMarkdownEditor.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <MarkDown v-bind="bindProps" @change="onChange" @get="onGetVditor" />
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent, watch } from 'vue';
-  import { MarkDown } from '/@/components/Markdown';
-  import { propTypes } from '/@/utils/propTypes';
-
-  export default defineComponent({
-    name: 'JMarkdownEditor',
-    // 涓嶅皢 attrs 鐨勫睘鎬х粦瀹氬埌 html 鏍囩涓�
-    inheritAttrs: false,
-    components: { MarkDown },
-    props: {
-      value: propTypes.string.def(''),
-      disabled: propTypes.bool.def(false),
-    },
-    emits: ['change', 'update:value'],
-    setup(props, { emit, attrs }) {
-      // markdown 缁勪欢瀹炰緥
-      let mdRef: any = null;
-      // vditor 缁勪欢瀹炰緥
-      let vditorRef: any = null;
-      // 鍚堝苟 props 鍜� attrs
-      const bindProps = computed(() => Object.assign({}, props, attrs));
-
-      // 鐩稿綋浜� onMounted
-      function onGetVditor(instance) {
-        mdRef = instance;
-        vditorRef = mdRef.getVditor();
-
-        // 鐩戝惉绂佺敤锛屽垏鎹㈢紪杈戝櫒绂佺敤鐘舵��
-        watch(
-          () => props.disabled,
-          (disabled) => (disabled ? vditorRef.disabled() : vditorRef.enable()),
-          { immediate: true }
-        );
-      }
-
-      // value change 浜嬩欢
-      function onChange(value) {
-        emit('change', value);
-        emit('update:value', value);
-      }
-
-      return {
-        bindProps,
-
-        onChange,
-        onGetVditor,
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped></style>
diff --git a/src/components/Form/src/jeecg/components/JPopup.vue b/src/components/Form/src/jeecg/components/JPopup.vue
deleted file mode 100644
index 9ecefe0..0000000
--- a/src/components/Form/src/jeecg/components/JPopup.vue
+++ /dev/null
@@ -1,154 +0,0 @@
-<!--popup缁勪欢-->
-<template>
-  <div class="components-input-demo-presuffix" v-if="avalid">
-    <!--杈撳叆妗�-->
-    <a-input @click="handleOpen" v-model:value="showText" :placeholder="placeholder" readOnly v-bind="attrs">
-      <template #prefix>
-        <Icon icon="ant-design:cluster-outlined"></Icon>
-      </template>
-      <!-- update-begin-author:taoyan date:2022-5-31 for: VUEN-1157 popup 閫変腑鍚庯紝鏈変袱涓竻闄ゅ浘鏍囷紱鍚庤竟杩欎釜娓呴櫎锛屽彧鏄妸杈撳叆妗嗕腑鏁版嵁娓呴櫎锛屽疄闄呭�煎苟娌℃湁娓呴櫎 -->
-      <!-- <template #suffix>
-                <Icon icon="ant-design:close-circle-outlined" @click="handleEmpty" title="娓呯┖" v-if="showText"></Icon>
-            </template>-->
-      <!-- update-begin-author:taoyan date:2022-5-31 for: VUEN-1157 popup 閫変腑鍚庯紝鏈変袱涓竻闄ゅ浘鏍囷紱鍚庤竟杩欎釜娓呴櫎锛屽彧鏄妸杈撳叆妗嗕腑鏁版嵁娓呴櫎锛屽疄闄呭�煎苟娌℃湁娓呴櫎 -->
-    </a-input>
-    <!--popup寮圭獥-->
-    <JPopupOnlReportModal
-      @register="regModal"
-      :code="code"
-      :multi="multi"
-      :sorter="sorter"
-      :groupId="uniqGroupId"
-      :param="param"
-      @ok="callBack"
-      :getContainer="getContainer"
-    ></JPopupOnlReportModal>
-  </div>
-</template>
-<script lang="ts">
-  import JPopupOnlReportModal from './modal/JPopupOnlReportModal.vue';
-  import { defineComponent, ref, reactive, onMounted, watchEffect, watch, computed, unref } from 'vue';
-  import { useModal } from '/@/components/Modal';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  export default defineComponent({
-    name: 'JPopup',
-    components: {
-      JPopupOnlReportModal,
-    },
-    inheritAttrs: false,
-    props: {
-      code: propTypes.string.def(''),
-      value: propTypes.string.def(''),
-      sorter: propTypes.string.def(''),
-      width: propTypes.number.def(1200),
-      placeholder: propTypes.string.def('璇烽�夋嫨'),
-      multi: propTypes.bool.def(false),
-      param: propTypes.object.def({}),
-      spliter: propTypes.string.def(','),
-      groupId: propTypes.string.def(''),
-      formElRef: propTypes.object,
-      setFieldsValue: propTypes.func,
-      getContainer: propTypes.func,
-      fieldConfig: {
-        type: Array,
-        default: () => [],
-      },
-    },
-    emits: ['update:value', 'register'],
-    setup(props, { emit, refs }) {
-      const { createMessage } = useMessage();
-      const attrs = useAttrs();
-      //pop鏄惁灞曠ず
-      const avalid = ref(true);
-      const showText = ref('');
-      //娉ㄥ唽model
-      const [regModal, { openModal }] = useModal();
-      //琛ㄥ崟鍊�
-      let { groupId, code, fieldConfig } = props;
-      //鍞竴鍒嗙粍groupId
-      const uniqGroupId = computed(() => (groupId ? `${groupId}_${code}_${fieldConfig[0]['source']}_${fieldConfig[0]['target']}` : ''));
-      /**
-       * 鍒ゆ柇popup閰嶇疆椤规槸鍚︽纭�
-       */
-      onMounted(() => {
-        if (props.fieldConfig.length == 0) {
-          createMessage.error('popup鍙傛暟鏈纭厤缃�!');
-          avalid.value = false;
-        }
-      });
-      /**
-       * 鐩戝惉value鏁板��
-       */
-      watch(
-        () => props.value,
-        (val) => {
-          showText.value = val && val.length > 0 ? val.split(props.spliter).join(',') : '';
-        },
-        { immediate: true }
-      );
-
-      /**
-       * 鎵撳紑pop寮瑰嚭妗�
-       */
-      function handleOpen() {
-        !props.disabled && openModal(true);
-      }
-
-      /**
-       * TODO 娓呯┖
-       */
-      function handleEmpty() {
-        showText.value = '';
-      }
-
-      /**
-       * 浼犲�煎洖璋�
-       */
-      function callBack(rows) {
-        let { fieldConfig } = props;
-        //鍖归厤popup璁剧疆鐨勫洖璋冨��
-        let values = {};
-        for (let item of fieldConfig) {
-          let val = rows.map((row) => row[item.source]).join(',');
-          item.target.split(',').forEach((target) => {
-            values[target] = val;
-          });
-        }
-        //浼犲叆琛ㄥ崟绀轰緥鏂瑰紡璧嬪��
-        props.formElRef && props.formElRef.setFieldsValue(values);
-        //浼犲叆璧嬪�兼柟娉曟柟寮忚祴鍊�
-        props.setFieldsValue && props.setFieldsValue(values);
-      }
-
-      return {
-        showText,
-        avalid,
-        uniqGroupId,
-        attrs,
-        regModal,
-        handleOpen,
-        handleEmpty,
-        callBack,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .components-input-demo-presuffix .anticon-close-circle {
-    cursor: pointer;
-    color: #ccc;
-    transition: color 0.3s;
-    font-size: 12px;
-  }
-
-  .components-input-demo-presuffix .anticon-close-circle:hover {
-    color: #f5222d;
-  }
-
-  .components-input-demo-presuffix .anticon-close-circle:active {
-    color: #666;
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JRangeDate.vue b/src/components/Form/src/jeecg/components/JRangeDate.vue
deleted file mode 100644
index 865e388..0000000
--- a/src/components/Form/src/jeecg/components/JRangeDate.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-<template>
-    <a-range-picker v-model:value="rangeValue" @change="handleChange" :show-time="datetime" :placeholder="placeholder" :valueFormat="valueFormat"/>
-</template>
-
-<script>
-    import { defineComponent, ref, watch, computed } from 'vue';
-    import { propTypes } from '/@/utils/propTypes';
-    import { Form } from 'ant-design-vue';
-
-    const placeholder = ['寮�濮嬫棩鏈�', '缁撴潫鏃ユ湡']
-    /**
-     * 鐢ㄤ簬鑼冨洿鏌ヨ
-     */
-    export default defineComponent({
-        name: "JRangeDate",
-        props:{
-            value: propTypes.string.def(''),
-            datetime: propTypes.bool.def(false),
-            placeholder: propTypes.string.def(''),
-        },
-        emits:['change', 'update:value'],
-        setup(props, {emit}){
-            const rangeValue = ref([])
-            const formItemContext = Form.useInjectFormItemContext();
-
-            watch(()=>props.value, (val)=>{
-                if(val){
-                    rangeValue.value = val.split(',')
-                }else{
-                    rangeValue.value = []
-                }
-            }, {immediate: true});
-
-            const valueFormat = computed(()=>{
-                if(props.datetime === true){
-                    return 'YYYY-MM-DD HH:mm:ss'
-                }else{
-                    return 'YYYY-MM-DD'
-                }
-            });
-
-            function handleChange(arr){
-                let str = ''
-                if(arr && arr.length>0){
-                    if(arr[1] && arr[0]){
-                        str = arr.join(',')
-                    }
-                }
-                emit('change', str);
-                emit('update:value', str);
-                formItemContext.onFieldChange();
-            }
-            return {
-                rangeValue,
-                placeholder,
-                valueFormat,
-                handleChange
-            }
-        }
-    });
-</script>
-
-<style scoped>
-
-</style>
\ No newline at end of file
diff --git a/src/components/Form/src/jeecg/components/JRangeNumber.vue b/src/components/Form/src/jeecg/components/JRangeNumber.vue
deleted file mode 100644
index 7d34f05..0000000
--- a/src/components/Form/src/jeecg/components/JRangeNumber.vue
+++ /dev/null
@@ -1,72 +0,0 @@
-<template>
-  <a-input-group>
-    <a-input :value="beginValue" style="width: calc(50% - 15px)" placeholder="鏈�灏忓��" @change="handleChangeBegin" />
-    <a-input style="width: 30px; border-left: 0; pointer-events: none; background-color: #fff" placeholder="~" disabled />
-    <a-input :value="endValue" style="width: calc(50% - 15px); border-left: 0" placeholder="鏈�澶у��" @change="handleChangeEnd" />
-  </a-input-group>
-</template>
-
-<script>
-  /**
-   * 鏌ヨ鏉′欢鐢�-鏁板�艰寖鍥存煡璇�
-   */
-  import { ref, watch } from 'vue';
-  import { Form } from 'ant-design-vue';
-  import { propTypes } from '/@/utils/propTypes';
-  
-  export default {
-    name: 'JRangeNumber',
-    props: {
-      value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-    },
-    emits: ['change', 'update:value'],
-    setup(props, { emit }) {
-      const beginValue = ref('');
-      const endValue = ref('');
-      const formItemContext = Form.useInjectFormItemContext();
-      
-      function handleChangeBegin(e) {
-        beginValue.value = e.target.value;
-        emitArray();
-      }
-
-      function handleChangeEnd(e) {
-        endValue.value = e.target.value;
-        emitArray();
-      }
-
-      function emitArray() {
-        let arr = [];
-        let begin = beginValue.value || '';
-        let end = endValue.value || '';
-        arr.push(begin);
-        arr.push(end);
-        emit('change', arr);
-        emit('update:value', arr);
-        formItemContext.onFieldChange();
-      }
-
-      watch(
-        () => props.value,
-        (val) => {
-          if (val && val.length == 2) {
-            beginValue.value = val[0];
-            endValue.value = val[1];
-          } else {
-            beginValue.value = '';
-            endValue.value = '';
-          }
-        }, {immediate: true}
-      );
-
-      return {
-        beginValue,
-        endValue,
-        handleChangeBegin,
-        handleChangeEnd,
-      };
-    },
-  };
-</script>
-
-<style scoped></style>
diff --git a/src/components/Form/src/jeecg/components/JRangeTime.vue b/src/components/Form/src/jeecg/components/JRangeTime.vue
deleted file mode 100644
index 645b99d..0000000
--- a/src/components/Form/src/jeecg/components/JRangeTime.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-    <a-time-range-picker v-model:value="rangeValue" @change="handleChange" :placeholder="placeholder" :valueFormat="format" :format="format"/>
-</template>
-
-<script>
-    import { defineComponent, ref, watch } from 'vue';
-    import { propTypes } from '/@/utils/propTypes';
-    import { Form } from 'ant-design-vue';
-
-    const placeholder = ['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']
-    /**
-     * 鐢ㄤ簬鏃堕棿-time缁勪欢鐨勮寖鍥存煡璇�
-     */
-    export default defineComponent({
-        name: "JRangeTime",
-        props:{
-            value: propTypes.string.def(''),
-            format: propTypes.string.def('HH:mm:ss'),
-            placeholder: propTypes.string.def(''),
-        },
-        emits:['change', 'update:value'],
-        setup(props, {emit}){
-            const rangeValue = ref([])
-            const formItemContext = Form.useInjectFormItemContext();
-
-            watch(()=>props.value, (val)=>{
-                if(val){
-                    rangeValue.value = val.split(',')
-                }else{
-                    rangeValue.value = []
-                }
-            }, {immediate: true});
-
-
-            function handleChange(arr){
-                let str = ''
-                if(arr && arr.length>0){
-                    if(arr[1] && arr[0]){
-                        str = arr.join(',')
-                    }
-                }
-                emit('change', str);
-                emit('update:value', str);
-                formItemContext.onFieldChange();
-            }
-            return {
-                rangeValue,
-                placeholder,
-                handleChange
-            }
-        }
-    });
-</script>
\ No newline at end of file
diff --git a/src/components/Form/src/jeecg/components/JSearchSelect.vue b/src/components/Form/src/jeecg/components/JSearchSelect.vue
deleted file mode 100644
index 8a46827..0000000
--- a/src/components/Form/src/jeecg/components/JSearchSelect.vue
+++ /dev/null
@@ -1,319 +0,0 @@
-<template>
-  <!--寮傛瀛楀吀涓嬫媺鎼滅礌-->
-  <a-select
-    v-if="async"
-    v-bind="attrs"
-    v-model:value="selectedAsyncValue"
-    showSearch
-    labelInValue
-    allowClear
-    :getPopupContainer="getParentContainer"
-    :placeholder="placeholder"
-    :filterOption="false"
-    :notFoundContent="loading ? undefined : null"
-    @search="loadData"
-    @change="handleAsyncChange"
-  >
-    <template #notFoundContent>
-      <a-spin size="small" />
-    </template>
-    <a-select-option v-for="d in options" :key="d.value" :value="d.value">{{ d.text }}</a-select-option>
-  </a-select>
-  <!--瀛楀吀涓嬫媺鎼滅礌-->
-  <a-select
-    v-else
-    v-model:value="selectedValue"
-    v-bind="attrs"
-    showSearch
-    :getPopupContainer="getParentContainer"
-    :placeholder="placeholder"
-    :filterOption="filterOption"
-    :notFoundContent="loading ? undefined : null"
-    @change="handleChange"
-  >
-    <template #notFoundContent>
-      <a-spin v-if="loading" size="small" />
-    </template>
-    <a-select-option v-for="d in options" :key="d.value" :value="d.value">{{ d.text }}</a-select-option>
-  </a-select>
-</template>
-
-<script lang="ts">
-  import { useDebounceFn } from '@vueuse/core';
-  import { defineComponent, PropType, ref, reactive, watchEffect, computed, unref, watch, onMounted } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { initDictOptions } from '/@/utils/dict/index';
-  import { defHttp } from '/@/utils/http/axios';
-
-  export default defineComponent({
-    name: 'JSearchSelect',
-    inheritAttrs: false,
-    props: {
-      value: propTypes.oneOfType([propTypes.string, propTypes.number]),
-      dict: propTypes.string,
-      dictOptions: {
-        type: Array,
-        default: () => [],
-      },
-      async: propTypes.bool.def(false),
-      placeholder: propTypes.string,
-      popContainer: propTypes.string,
-      pageSize: propTypes.number.def(10),
-      getPopupContainer: {
-        type: Function,
-        default: (node) => node.parentNode,
-      },
-      //鏄惁鍦ㄦ湁鍊煎悗绔嬪嵆瑙﹀彂change
-      immediateChange: propTypes.bool.def(false),
-      //update-begin-author:taoyan date:2022-8-15 for: VUEN-1971 銆恛nline 涓撻」娴嬭瘯銆戝叧鑱旇褰曞拰浠栬〃瀛楁 1
-      //鏀寔浼犲叆鏌ヨ鍙傛暟锛屽鎺掑簭淇℃伅
-      params:{
-        type: Object,
-        default: ()=>{}
-      },
-      //update-end-author:taoyan date:2022-8-15 for: VUEN-1971 銆恛nline 涓撻」娴嬭瘯銆戝叧鑱旇褰曞拰浠栬〃瀛楁 1
-    },
-    emits: ['change', 'update:value'],
-    setup(props, { emit, refs }) {
-      const options = ref<any[]>([]);
-      const loading = ref(false);
-      const attrs = useAttrs();
-      const selectedValue = ref([]);
-      const selectedAsyncValue = ref([]);
-      const lastLoad = ref(0);
-      // 鏄惁鏍规嵁value鍔犺浇text
-      const loadSelectText = ref(true);
-      /**
-       * 鐩戝惉瀛楀吀code
-       */
-      watchEffect(() => {
-        props.dict && initDictData();
-      });
-      /**
-       * 鐩戝惉value
-       */
-      watch(
-        () => props.value,
-        (val) => {
-          if (val || val === 0) {
-            initSelectValue();
-          } else {
-            selectedValue.value = [];
-            selectedAsyncValue.value = [];
-          }
-        },
-        { immediate: true }
-      );
-      /**
-       * 鐩戝惉dictOptions
-       */
-      watch(
-        () => props.dictOptions,
-        (val) => {
-          if (val && val.length > 0) {
-            options.value = [...val];
-          }
-        },
-        { immediate: true }
-      );
-      /**
-       * 寮傛鏌ヨ鏁版嵁
-       */
-      async function loadData(value) {
-        lastLoad.value += 1;
-        const currentLoad = unref(lastLoad);
-        options.value = [];
-        loading.value = true;
-        let keywordInfo = getKeywordParam(value);
-        // 瀛楀吀code鏍煎紡锛歵able,text,code
-        defHttp
-          .get({
-            url: `/sys/dict/loadDict/${props.dict}`,
-            params: { keyword: keywordInfo, pageSize: props.pageSize },
-          })
-          .then((res) => {
-            loading.value = false;
-            if (res && res.length > 0) {
-              if (currentLoad != unref(lastLoad)) {
-                return;
-              }
-              options.value = res;
-            }
-          });
-      }
-      /**
-       * 鍒濆鍖杤alue
-       */
-      function initSelectValue() {
-        //update-begin-author:taoyan date:2022-4-24 for: 涓嬫媺鎼滅储缁勪欢姣忔閫変腑鍊间細瑙﹀彂value鐨勭洃鍚簨浠讹紝瑙﹀彂姝ゆ柟娉曪紝浣嗘槸瀹為檯涓嶉渶瑕�
-        if (loadSelectText.value === false) {
-          loadSelectText.value = true;
-          return;
-        }
-        //update-end-author:taoyan date:2022-4-24 for: 涓嬫媺鎼滅储缁勪欢姣忔閫変腑鍊间細瑙﹀彂value鐨勭洃鍚簨浠讹紝瑙﹀彂姝ゆ柟娉曪紝浣嗘槸瀹為檯涓嶉渶瑕�
-        let { async, value, dict } = props;
-        if (async) {
-          if (!selectedAsyncValue || !selectedAsyncValue.key || selectedAsyncValue.key !== value) {
-            defHttp.get({ url: `/sys/dict/loadDictItem/${dict}`, params: { key: value } }).then((res) => {
-              if (res && res.length > 0) {
-                let obj = {
-                  key: value,
-                  label: res,
-                };
-                selectedAsyncValue.value = { ...obj };
-                //update-begin-author:taoyan date:2022-8-11 for: 鍊兼敼鍙樿Е鍙慶hange浜嬩欢--鐢ㄤ簬online鍏宠仈璁板綍閰嶇疆椤甸潰
-                if(props.immediateChange == true){
-                  emit('change', value);
-                }
-                //update-end-author:taoyan date:2022-8-11 for: 鍊兼敼鍙樿Е鍙慶hange浜嬩欢--鐢ㄤ簬online鍏宠仈璁板綍閰嶇疆椤甸潰
-              }
-            });
-          }
-        } else {
-          selectedValue.value = value.toString();
-          //update-begin-author:taoyan date:2022-8-11 for: 鍊兼敼鍙樿Е鍙慶hange浜嬩欢--鐢ㄤ簬online浠栬〃瀛楁閰嶇疆鐣岄潰
-          if(props.immediateChange == true){
-            emit('change', value.toString());
-          }
-          //update-end-author:taoyan date:2022-8-11 for: 鍊兼敼鍙樿Е鍙慶hange浜嬩欢--鐢ㄤ簬online浠栬〃瀛楁閰嶇疆鐣岄潰
-        }
-      }
-
-      /**
-       * 鍒濆鍖栧瓧鍏镐笅鎷夋暟鎹�
-       */
-      async function initDictData() {
-        let { dict, async, dictOptions, pageSize } = props;
-        if (!async) {
-          //濡傛灉瀛楀吀椤归泦鍚堟湁鏁版嵁
-          if (dictOptions && dictOptions.length > 0) {
-            options.value = dictOptions;
-          } else {
-            //鏍规嵁瀛楀吀Code, 鍒濆鍖栧瓧鍏告暟缁�
-            let dictStr = '';
-            if (dict) {
-              let arr = dict.split(',');
-              if (arr[0].indexOf('where') > 0) {
-                let tbInfo = arr[0].split('where');
-                dictStr = tbInfo[0].trim() + ',' + arr[1] + ',' + arr[2] + ',' + encodeURIComponent(tbInfo[1]);
-              } else {
-                dictStr = dict;
-              }
-              //鏍规嵁瀛楀吀Code, 鍒濆鍖栧瓧鍏告暟缁�
-              const dictData = await initDictOptions(dictStr);
-              options.value = dictData;
-            }
-          }
-        } else {
-          if (!dict) {
-            console.error('鎼滅储缁勪欢鏈厤缃瓧鍏搁」');
-          } else {
-            //寮傛涓�寮�濮嬩篃鍔犺浇涓�鐐规暟鎹�
-            loading.value = true;
-            let keywordInfo = getKeywordParam('');
-            defHttp
-              .get({
-                url: `/sys/dict/loadDict/${dict}`,
-                params: { pageSize: pageSize, keyword: keywordInfo },
-              })
-              .then((res) => {
-                loading.value = false;
-                if (res && res.length > 0) {
-                  options.value = res;
-                }
-              });
-          }
-        }
-      }
-      /**
-       * 鍚屾鏀瑰彉浜嬩欢
-       * */
-      function handleChange(value) {
-        selectedValue.value = value;
-        callback();
-      }
-      /**
-       * 寮傛鏀瑰彉浜嬩欢
-       * */
-      function handleAsyncChange(selectedObj) {
-        if (selectedObj) {
-          selectedAsyncValue.value = selectedObj;
-          selectedValue.value = selectedObj.key;
-        } else {
-          selectedAsyncValue.value = null;
-          selectedValue.value = null;
-          options.value = null;
-          loadData('');
-        }
-        callback();
-      }
-      /**
-       *鍥炶皟鏂规硶
-       * */
-      function callback() {
-        loadSelectText.value = false;
-        emit('change', unref(selectedValue));
-        emit('update:value', unref(selectedValue));
-      }
-      /**
-       * 杩囨护閫変腑option
-       */
-      function filterOption(input, option) {
-        //update-begin-author:taoyan date:2022-11-8 for: issues/218 鎵�鏈夊姛鑳借〃鍗曠殑涓嬫媺鎼滅储妗嗘悳绱㈡棤鏁�
-        let value = '', label = '';
-        try {
-          value = option.value;
-          label = option.children()[0].children;
-        }catch (e) {
-          console.log('鑾峰彇涓嬫媺椤瑰け璐�', e)
-        }
-        let str = input.toLowerCase();
-        return value.toLowerCase().indexOf(str) >= 0 || label.toLowerCase().indexOf(str) >= 0;
-        //update-end-author:taoyan date:2022-11-8 for: issues/218 鎵�鏈夊姛鑳借〃鍗曠殑涓嬫媺鎼滅储妗嗘悳绱㈡棤鏁�
-      }
-
-      function getParentContainer(node) {
-        // update-begin-author:taoyan date:20220407 for: getPopupContainer涓�鐩存湁鍊� 瀵艰嚧popContainer鐨勯�昏緫姘歌繙璧颁笉杩涘幓锛屾妸瀹冩尓鍒板墠闈㈠垽鏂�
-        if (props.popContainer) {
-          return document.querySelector(props.popContainer);
-        } else {
-          if (typeof props.getPopupContainer === 'function') {
-            return props.getPopupContainer(node);
-          } else {
-            return node.parentNode;
-          }
-        }
-        // update-end-author:taoyan date:20220407 for: getPopupContainer涓�鐩存湁鍊� 瀵艰嚧popContainer鐨勯�昏緫姘歌繙璧颁笉杩涘幓锛屾妸瀹冩尓鍒板墠闈㈠垽鏂�
-      }
-
-      //update-begin-author:taoyan date:2022-8-15 for: VUEN-1971 銆恛nline 涓撻」娴嬭瘯銆戝叧鑱旇褰曞拰浠栬〃瀛楁 1
-      //鑾峰彇鍏抽敭璇嶅弬鏁� 鏀寔璁剧疆鎺掑簭淇℃伅
-      function getKeywordParam(text){
-        // 濡傛灉璁惧畾浜嗘帓搴忎俊鎭紝闇�瑕佸啓鍏ユ帓搴忎俊鎭紝鍦ㄥ叧閿瘝鍚庡姞 [orderby:create_time,desc]
-        if(props.params && props.params.column && props.params.order){
-          let temp = text||''
-          return temp+'[orderby:'+props.params.column+','+props.params.order+']'
-        }else{
-          return text;
-        }
-      }
-      //update-end-author:taoyan date:2022-8-15 for: VUEN-1971 銆恛nline 涓撻」娴嬭瘯銆戝叧鑱旇褰曞拰浠栬〃瀛楁 1
-      
-      return {
-        attrs,
-        options,
-        loading,
-        selectedValue,
-        selectedAsyncValue,
-        loadData: useDebounceFn(loadData, 800),
-        getParentContainer,
-        filterOption,
-        handleChange,
-        handleAsyncChange,
-      };
-    },
-  });
-</script>
-
-<style scoped></style>
diff --git a/src/components/Form/src/jeecg/components/JSelectDept.vue b/src/components/Form/src/jeecg/components/JSelectDept.vue
deleted file mode 100644
index 5097a22..0000000
--- a/src/components/Form/src/jeecg/components/JSelectDept.vue
+++ /dev/null
@@ -1,157 +0,0 @@
-<!--閮ㄩ棬閫夋嫨缁勪欢-->
-<template>
-  <div>
-    <JSelectBiz @handleOpen="handleOpen" :loading="loadingEcho" v-bind="attrs" />
-    <DeptSelectModal @register="regModal" @getSelectResult="setValue" v-bind="getBindValue" />
-  </div>
-</template>
-<script lang="ts">
-  import DeptSelectModal from './modal/DeptSelectModal.vue';
-  import JSelectBiz from './base/JSelectBiz.vue';
-  import { defineComponent, ref, reactive, watchEffect, watch, provide, unref, toRaw } from 'vue';
-  import { useModal } from '/@/components/Modal';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { SelectValue } from 'ant-design-vue/es/select';
-
-  export default defineComponent({
-    name: 'JSelectDept',
-    components: {
-      DeptSelectModal,
-      JSelectBiz,
-    },
-    inheritAttrs: false,
-    props: {
-      value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-      // 鏄惁鍏佽澶氶�夛紝榛樿 true
-      multiple: propTypes.bool.def(true),
-    },
-    emits: ['options-change', 'change', 'select', 'update:value'],
-    setup(props, { emit, refs }) {
-      const emitData = ref<any[]>();
-      //娉ㄥ唽model
-      const [regModal, { openModal }] = useModal();
-      //琛ㄥ崟鍊�
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
-      //涓嬫媺妗嗛�夐」鍊�
-      const selectOptions = ref<SelectValue>([]);
-      //涓嬫媺妗嗛�変腑鍊�
-      let selectValues = reactive<Recordable>({
-        value: [],
-      });
-      // 鏄惁姝e湪鍔犺浇鍥炴樉鏁版嵁
-      const loadingEcho = ref<boolean>(false);
-      //涓嬪彂 selectOptions,xxxBiz缁勪欢鎺ユ敹
-      provide('selectOptions', selectOptions);
-      //涓嬪彂 selectValues,xxxBiz缁勪欢鎺ユ敹
-      provide('selectValues', selectValues);
-      //涓嬪彂 loadingEcho,xxxBiz缁勪欢鎺ユ敹
-      provide('loadingEcho', loadingEcho);
-
-      const tag = ref(false);
-      const attrs = useAttrs();
-
-      /**
-       * 鐩戝惉缁勪欢鍊�
-       */
-      watchEffect(() => {
-        props.value && initValue();
-      });
-
-      //update-begin-author:liusq---date:20220609--for: 涓轰簡瑙e喅寮圭獥form鍒濆鍖栬祴鍊奸棶棰� ---
-      watch(
-        () => props.value,
-        () => {
-          initValue();
-        }
-      );
-      //update-end-author:liusq---date:20220609--for: 涓轰簡瑙e喅寮圭獥form鍒濆鍖栬祴鍊奸棶棰� ---
-      /**
-       * 鐩戝惉selectValues鍙樺寲
-       */
-      watch(selectValues, () => {
-        if (selectValues) {
-          state.value = selectValues.value;
-        }
-      });
-      /**
-       * 鐩戝惉selectOptions鍙樺寲
-       */
-      watch(selectOptions, () => {
-        if (selectOptions) {
-          emit('select', toRaw(unref(selectOptions)), toRaw(unref(selectValues)));
-        }
-      });
-
-      /**
-       * 鎵撳崱寮瑰嚭妗�
-       */
-      function handleOpen() {
-        tag.value = true;
-        openModal(true, {
-          isUpdate: false,
-        });
-      }
-
-      /**
-       * 灏嗗瓧绗︿覆鍊艰浆鍖栦负鏁扮粍
-       */
-      function initValue() {
-        let value = props.value ? props.value : [];
-        if (value && typeof value === 'string') {
-          state.value = value.split(',');
-          selectValues.value = value.split(',');
-        } else {
-          // 銆怴UEN-857銆戝吋瀹规暟缁勶紙琛岀紪杈戠殑鐢ㄦ硶闂锛�
-          selectValues.value = value;
-        }
-      }
-
-      /**
-       * 璁剧疆涓嬫媺妗嗙殑鍊�
-       */
-      function setValue(options, values) {
-        selectOptions.value = options;
-        //emitData.value = values.join(",");
-        state.value = values;
-        selectValues.value = values;
-        emit('update:value', values.join(','));
-      }
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
-      return {
-        state,
-        attrs,
-        selectOptions,
-        selectValues,
-        loadingEcho,
-        getBindValue,
-        tag,
-        regModal,
-        setValue,
-        handleOpen,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .j-select-row {
-    @width: 82px;
-
-    .left {
-      width: calc(100% - @width - 8px);
-    }
-
-    .right {
-      width: @width;
-    }
-
-    .full {
-      width: 100%;
-    }
-
-    :deep(.ant-select-search__field) {
-      display: none !important;
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JSelectInput.vue b/src/components/Form/src/jeecg/components/JSelectInput.vue
deleted file mode 100644
index 9fa1c65..0000000
--- a/src/components/Form/src/jeecg/components/JSelectInput.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-<template>
-  <a-select v-bind="bindProps" @change="onChange" @search="onSearch" />
-</template>
-
-<script lang="ts">
-  import { propTypes } from '/@/utils/propTypes';
-  import { defineComponent, ref, watch, computed } from 'vue';
-
-  // 鍙互杈撳叆鐨勪笅鎷夋锛堟缁勪欢鏆傛椂娌℃湁浜虹敤锛�
-  export default defineComponent({
-    name: 'JSelectInput',
-    props: {
-      options: propTypes.array.def(() => []),
-    },
-    emits: ['change', 'update:value'],
-    setup(props, { emit, attrs }) {
-      // 鍐呴儴 options 閫夐」
-      const options = ref<any[]>([]);
-      // 鐩戝惉澶栭儴 options 鍙樺寲锛屽苟瑕嗙洊鍐呴儴 options
-      watch(
-        () => props.options,
-        () => {
-          options.value = [...props.options];
-        },
-        { deep: true, immediate: true }
-      );
-      // 鍚堝苟 props 鍜� attrs
-      const bindProps: any = computed(() =>
-        Object.assign(
-          {
-            showSearch: true,
-          },
-          props,
-          attrs,
-          {
-            options: options.value,
-          }
-        )
-      );
-
-      function onChange(...args: any[]) {
-        deleteSearchAdd(args[0]);
-        emit('change', ...args);
-        emit('update:value', args[0]);
-      }
-
-      function onSearch(value) {
-        // 鏄惁鎵惧埌浜嗗搴旂殑椤癸紝鎵句笉鍒板垯娣诲姞杩欎竴椤�
-        let foundIt =
-          options.value.findIndex((option) => {
-            return option.value.toString() === value.toString();
-          }) !== -1;
-        // !!value 锛氫笉娣诲姞绌哄��
-        if (!foundIt && !!value) {
-          deleteSearchAdd(value);
-          // searchAdd 鏄惁鏄�氳繃鎼滅储娣诲姞鐨�
-          options.value.push({ value: value, searchAdd: true });
-          //onChange(value,{ value })
-        } else if (foundIt) {
-          onChange(value);
-        }
-      }
-
-      // 鍒犻櫎鏃犵敤鐨勫洜鎼滅储锛堢敤鎴疯緭鍏ワ級鑰屽垱寤虹殑椤�
-      function deleteSearchAdd(value = '') {
-        let indexes: any[] = [];
-        options.value.forEach((option, index) => {
-          if (option.searchAdd) {
-            if ((option.value ?? '').toString() !== value.toString()) {
-              indexes.push(index);
-            }
-          }
-        });
-        // 缈昏浆鍒犻櫎鏁扮粍涓殑椤�
-        for (let index of indexes.reverse()) {
-          options.value.splice(index, 1);
-        }
-      }
-
-      return {
-        bindProps,
-        onChange,
-        onSearch,
-      };
-    },
-  });
-</script>
-
-<style scoped></style>
diff --git a/src/components/Form/src/jeecg/components/JSelectMultiple.vue b/src/components/Form/src/jeecg/components/JSelectMultiple.vue
deleted file mode 100644
index eaad64b..0000000
--- a/src/components/Form/src/jeecg/components/JSelectMultiple.vue
+++ /dev/null
@@ -1,164 +0,0 @@
-<!--瀛楀吀涓嬫媺澶氶��-->
-<template>
-  <a-select
-    :value="arrayValue"
-    @change="onChange"
-    mode="multiple"
-    :filter-option="filterOption"
-    :disabled="disabled"
-    :placeholder="placeholder"
-    allowClear
-    :getPopupContainer="getParentContainer"
-  >
-    <a-select-option v-for="(item, index) in dictOptions" :key="index" :getPopupContainer="getParentContainer" :value="item.value">
-      {{ item.text || item.label }}
-    </a-select-option>
-  </a-select>
-</template>
-<script lang="ts">
-  import { computed, defineComponent, onMounted, ref, nextTick, watch } from 'vue';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { getDictItems } from '/@/api/common/api';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const { createMessage, createErrorModal } = useMessage();
-  export default defineComponent({
-    name: 'JSelectMultiple',
-    components: {},
-    inheritAttrs: false,
-    props: {
-      value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-      placeholder: {
-        type: String,
-        default: '璇烽�夋嫨',
-        required: false,
-      },
-      readOnly: {
-        type: Boolean,
-        required: false,
-        default: false,
-      },
-      options: {
-        type: Array,
-        default: () => [],
-        required: false,
-      },
-      triggerChange: {
-        type: Boolean,
-        required: false,
-        default: true,
-      },
-      spliter: {
-        type: String,
-        required: false,
-        default: ',',
-      },
-      popContainer: {
-        type: String,
-        default: '',
-        required: false,
-      },
-      dictCode: {
-        type: String,
-        required: false,
-      },
-      disabled: {
-        type: Boolean,
-        default: false,
-      },
-    },
-    emits: ['options-change', 'change', 'input', 'update:value'],
-    setup(props, { emit, refs }) {
-      //console.info(props);
-      const emitData = ref<any[]>([]);
-      const arrayValue = ref<any[]>(!props.value ? [] : props.value.split(props.spliter));
-      const dictOptions = ref<any[]>([]);
-      const attrs = useAttrs();
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
-
-      onMounted(() => {
-        if (props.dictCode) {
-          loadDictOptions();
-        } else {
-          dictOptions.value = props.options;
-        }
-      });
-
-      watch(
-        () => props.value,
-        (val) => {
-          if (!val) {
-            arrayValue.value = [];
-          } else {
-            arrayValue.value = props.value.split(props.spliter);
-          }
-        }
-      );
-
-      //閫傜敤浜� 鍔ㄦ�佹敼鍙樹笅鎷夐�夐」鐨勬搷浣�
-      watch(()=>props.options, ()=>{
-        if (props.dictCode) {
-          // nothing to do
-        } else {
-          dictOptions.value = props.options;
-        }
-      });
-
-      function onChange(selectedValue) {
-        if (props.triggerChange) {
-          emit('change', selectedValue.join(props.spliter));
-          emit('update:value', selectedValue.join(props.spliter));
-        } else {
-          emit('input', selectedValue.join(props.spliter));
-          emit('update:value', selectedValue.join(props.spliter));
-        }
-      }
-
-      function getParentContainer(node) {
-        if (!props.popContainer) {
-          return node.parentNode;
-        } else {
-          return document.querySelector(props.popContainer);
-        }
-      }
-
-      // 鏍规嵁瀛楀吀code鏌ヨ瀛楀吀椤�
-      function loadDictOptions() {
-        //update-begin-author:taoyan date:2022-6-21 for: 瀛楀吀鏁版嵁璇锋眰鍓嶅皢鍙傛暟缂栫爜澶勭悊锛屼絾鏄笉鑳界洿鎺ョ紪鐮侊紝鍥犱负鍙兘涔嬪墠宸茬粡缂栫爜杩囦簡
-        let temp = props.dictCode || '';
-        if (temp.indexOf(',') > 0 && temp.indexOf(' ') > 0) {
-          // 缂栫爜鍚� 鏄笉鍖呭惈绌烘牸鐨�
-          temp = encodeURI(temp);
-        }
-        //update-end-author:taoyan date:2022-6-21 for: 瀛楀吀鏁版嵁璇锋眰鍓嶅皢鍙傛暟缂栫爜澶勭悊锛屼絾鏄笉鑳界洿鎺ョ紪鐮侊紝鍥犱负鍙兘涔嬪墠宸茬粡缂栫爜杩囦簡
-        getDictItems(temp).then((res) => {
-          if (res) {
-            dictOptions.value = res.map((item) => ({ value: item.value, label: item.text }));
-            //console.info('res', dictOptions.value);
-          } else {
-            console.error('getDictItems error: : ', res);
-            dictOptions.value = [];
-          }
-        });
-      }
-
-      //update-begin-author:taoyan date:2022-5-31 for: VUEN-1145 涓嬫媺澶氶�夛紝鎼滅储鏃讹紝鏌ヤ笉鍒版暟鎹�
-      function filterOption(input, option) {
-        return option.children()[0].children.toLowerCase().indexOf(input.toLowerCase()) >= 0;
-      }
-      //update-end-author:taoyan date:2022-5-31 for: VUEN-1145 涓嬫媺澶氶�夛紝鎼滅储鏃讹紝鏌ヤ笉鍒版暟鎹�
-
-      return {
-        state,
-        attrs,
-        dictOptions,
-        onChange,
-        arrayValue,
-        getParentContainer,
-        filterOption,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/JSelectPosition.vue b/src/components/Form/src/jeecg/components/JSelectPosition.vue
deleted file mode 100644
index e54001b..0000000
--- a/src/components/Form/src/jeecg/components/JSelectPosition.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<!--鑱屽姟閫夋嫨缁勪欢-->
-<template>
-  <div>
-    <JSelectBiz @handleOpen="handleOpen" :loading="loadingEcho" v-bind="attrs"></JSelectBiz>
-    <PositionSelectModal @register="regModal" @getSelectResult="setValue" v-bind="getBindValue"></PositionSelectModal>
-  </div>
-</template>
-<script lang="ts">
-  import PositionSelectModal from './modal/PositionSelectModal.vue';
-  import JSelectBiz from './base/JSelectBiz.vue';
-  import { defineComponent, ref, reactive, watchEffect, watch, provide, computed, unref } from 'vue';
-  import { useModal } from '/@/components/Modal';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { SelectValue } from 'ant-design-vue/es/select';
-
-  export default defineComponent({
-    name: 'JSelectPosition',
-    components: {
-      PositionSelectModal,
-      JSelectBiz,
-    },
-    inheritAttrs: false,
-    props: {
-      value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-      labelKey: {
-        type: String,
-        default: 'name',
-      },
-      rowKey: {
-        type: String,
-        default: 'code',
-      },
-      params: {
-        type: Object,
-        default: () => {},
-      },
-    },
-    emits: ['options-change', 'change'],
-    setup(props, { emit, refs }) {
-      const emitData = ref<any[]>();
-      //娉ㄥ唽model
-      const [regModal, { openModal }] = useModal();
-      //琛ㄥ崟鍊�
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
-      //涓嬫媺妗嗛�夐」鍊�
-      const selectOptions = ref<SelectValue>([]);
-      //涓嬫媺妗嗛�変腑鍊�
-      let selectValues = reactive<object>({
-        value: [],
-        change: false,
-      });
-      // 鏄惁姝e湪鍔犺浇鍥炴樉鏁版嵁
-      const loadingEcho = ref<boolean>(false);
-      //涓嬪彂 selectOptions,xxxBiz缁勪欢鎺ユ敹
-      provide('selectOptions', selectOptions);
-      //涓嬪彂 selectValues,xxxBiz缁勪欢鎺ユ敹
-      provide('selectValues', selectValues);
-      //涓嬪彂 loadingEcho,xxxBiz缁勪欢鎺ユ敹
-      provide('loadingEcho', loadingEcho);
-
-      const tag = ref(false);
-      const attrs = useAttrs();
-
-      /**
-       * 鐩戝惉缁勪欢鍊�
-       */
-      watchEffect(() => {
-        props.value && initValue();
-      });
-
-      /**
-       * 鐩戝惉selectValues鍙樺寲
-       */
-      watch(selectValues, () => {
-        if (selectValues) {
-          state.value = selectValues.value;
-        }
-      });
-
-      /**
-       * 鎵撳崱寮瑰嚭妗�
-       */
-      function handleOpen() {
-        tag.value = true;
-        openModal(true, {
-          isUpdate: false,
-        });
-      }
-
-      /**
-       * 灏嗗瓧绗︿覆鍊艰浆鍖栦负鏁扮粍
-       */
-      function initValue() {
-        let value = props.value ? props.value : [];
-        if (value && typeof value === 'string' && value != 'null' && value != 'undefined') {
-          state.value = value.split(',');
-          selectValues.value = value.split(',');
-        }
-      }
-
-      /**
-       * 璁剧疆涓嬫媺妗嗙殑鍊�
-       */
-      function setValue(options, values) {
-        selectOptions.value = options;
-        //emitData.value = values.join(",");
-        state.value = values;
-        selectValues.value = values;
-      }
-
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
-      return {
-        state,
-        getBindValue,
-        attrs,
-        selectOptions,
-        selectValues,
-        loadingEcho,
-        tag,
-        regModal,
-        setValue,
-        handleOpen,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .j-select-row {
-    @width: 82px;
-
-    .left {
-      width: calc(100% - @width - 8px);
-    }
-
-    .right {
-      width: @width;
-    }
-
-    .full {
-      width: 100%;
-    }
-
-    :deep(.ant-select-search__field) {
-      display: none !important;
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JSelectRole.vue b/src/components/Form/src/jeecg/components/JSelectRole.vue
deleted file mode 100644
index ea56187..0000000
--- a/src/components/Form/src/jeecg/components/JSelectRole.vue
+++ /dev/null
@@ -1,154 +0,0 @@
-<!--瑙掕壊閫夋嫨缁勪欢-->
-<template>
-  <div>
-    <JSelectBiz @handleOpen="handleOpen" :loading="loadingEcho" v-bind="attrs"></JSelectBiz>
-    <RoleSelectModal @register="regModal" @getSelectResult="setValue" v-bind="getBindValue"></RoleSelectModal>
-  </div>
-</template>
-<script lang="ts">
-  import RoleSelectModal from './modal/RoleSelectModal.vue';
-  import JSelectBiz from './base/JSelectBiz.vue';
-  import { defineComponent, ref, unref, reactive, watchEffect, watch, provide } from 'vue';
-  import { useModal } from '/@/components/Modal';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { SelectValue } from 'ant-design-vue/es/select';
-
-  export default defineComponent({
-    name: 'JSelectRole',
-    components: {
-      RoleSelectModal,
-      JSelectBiz,
-    },
-    inheritAttrs: false,
-    props: {
-      value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-      labelKey: {
-        type: String,
-        default: 'roleName',
-      },
-      rowKey: {
-        type: String,
-        default: 'id',
-      },
-      params: {
-        type: Object,
-        default: () => {},
-      },
-    },
-    emits: ['options-change', 'change'],
-    setup(props, { emit, refs }) {
-      const emitData = ref<any[]>();
-      //娉ㄥ唽model
-      const [regModal, { openModal }] = useModal();
-      //琛ㄥ崟鍊�
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
-      //涓嬫媺妗嗛�夐」鍊�
-      const selectOptions = ref<SelectValue>([]);
-      //涓嬫媺妗嗛�変腑鍊�
-      let selectValues = reactive<Recordable>({
-        value: [],
-        change: false,
-      });
-      // 鏄惁姝e湪鍔犺浇鍥炴樉鏁版嵁
-      const loadingEcho = ref<boolean>(false);
-      //涓嬪彂 selectOptions,xxxBiz缁勪欢鎺ユ敹
-      provide('selectOptions', selectOptions);
-      //涓嬪彂 selectValues,xxxBiz缁勪欢鎺ユ敹
-      provide('selectValues', selectValues);
-      //涓嬪彂 loadingEcho,xxxBiz缁勪欢鎺ユ敹
-      provide('loadingEcho', loadingEcho);
-
-      const tag = ref(false);
-      const attrs = useAttrs();
-
-      /**
-       * 鐩戝惉缁勪欢鍊�
-       */
-      watchEffect(() => {
-        props.value && initValue();
-        // 鏌ヨ鏉′欢閲嶇疆鐨勬椂鍊欙紝娓呯┖鐣岄潰鏄剧ず
-        if (!props.value) {
-          selectValues.value = [];
-        }
-      });
-
-      /**
-       * 鐩戝惉selectValues鍙樺寲
-       */
-      watch(selectValues, () => {
-        if (selectValues) {
-          state.value = selectValues.value;
-        }
-      });
-
-      /**
-       * 鎵撳崱寮瑰嚭妗�
-       */
-      function handleOpen() {
-        tag.value = true;
-        openModal(true, {
-          isUpdate: false,
-        });
-      }
-
-      /**
-       * 灏嗗瓧绗︿覆鍊艰浆鍖栦负鏁扮粍
-       */
-      function initValue() {
-        let value = props.value ? props.value : [];
-        if (value && typeof value === 'string' && value != 'null' && value != 'undefined') {
-          state.value = value.split(',');
-          selectValues.value = value.split(',');
-        } else {
-          selectValues.value = value;
-        }
-      }
-
-      /**
-       * 璁剧疆涓嬫媺妗嗙殑鍊�
-       */
-      function setValue(options, values) {
-        selectOptions.value = options;
-        //emitData.value = values.join(",");
-        state.value = values;
-        selectValues.value = values;
-      }
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
-      return {
-        state,
-        attrs,
-        getBindValue,
-        selectOptions,
-        selectValues,
-        loadingEcho,
-        tag,
-        regModal,
-        setValue,
-        handleOpen,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .j-select-row {
-    @width: 82px;
-
-    .left {
-      width: calc(100% - @width - 8px);
-    }
-
-    .right {
-      width: @width;
-    }
-
-    .full {
-      width: 100%;
-    }
-
-    :deep(.ant-select-search__field) {
-      display: none !important;
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JSelectUser.vue b/src/components/Form/src/jeecg/components/JSelectUser.vue
deleted file mode 100644
index 82866b2..0000000
--- a/src/components/Form/src/jeecg/components/JSelectUser.vue
+++ /dev/null
@@ -1,157 +0,0 @@
-<!--鐢ㄦ埛閫夋嫨缁勪欢-->
-<template>
-  <div>
-    <JSelectBiz @handleOpen="handleOpen" :loading="loadingEcho" v-bind="attrs"></JSelectBiz>
-    <UserSelectModal :rowKey="rowKey" @register="regModal" @getSelectResult="setValue" v-bind="getBindValue"></UserSelectModal>
-  </div>
-</template>
-<script lang="ts">
-  import { unref } from 'vue';
-  import UserSelectModal from './modal/UserSelectModal.vue';
-  import JSelectBiz from './base/JSelectBiz.vue';
-  import { defineComponent, ref, reactive, watchEffect, watch, provide } from 'vue';
-  import { useModal } from '/@/components/Modal';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { SelectValue } from 'ant-design-vue/es/select';
-
-  export default defineComponent({
-    name: 'JSelectUser',
-    components: {
-      UserSelectModal,
-      JSelectBiz,
-    },
-    inheritAttrs: false,
-    props: {
-      value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-      labelKey: {
-        type: String,
-        default: 'realname',
-      },
-      rowKey: {
-        type: String,
-        default: 'username',
-      },
-      params: {
-        type: Object,
-        default: () => {},
-      },
-    },
-    emits: ['options-change', 'change', 'update:value'],
-    setup(props, { emit }) {
-      const emitData = ref<any[]>();
-      //娉ㄥ唽model
-      const [regModal, { openModal }] = useModal();
-      //琛ㄥ崟鍊�
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
-      //涓嬫媺妗嗛�夐」鍊�
-      const selectOptions = ref<SelectValue>([]);
-      //涓嬫媺妗嗛�変腑鍊�
-      let selectValues = reactive<Recordable>({
-        value: [],
-        change: false,
-      });
-      // 鏄惁姝e湪鍔犺浇鍥炴樉鏁版嵁
-      const loadingEcho = ref<boolean>(false);
-      //涓嬪彂 selectOptions,xxxBiz缁勪欢鎺ユ敹
-      provide('selectOptions', selectOptions);
-      //涓嬪彂 selectValues,xxxBiz缁勪欢鎺ユ敹
-      provide('selectValues', selectValues);
-      //涓嬪彂 loadingEcho,xxxBiz缁勪欢鎺ユ敹
-      provide('loadingEcho', loadingEcho);
-
-      const tag = ref(false);
-      const attrs = useAttrs();
-
-      /**
-       * 鐩戝惉缁勪欢鍊�
-       */
-      watchEffect(() => {
-        props.value && initValue();
-        // 鏌ヨ鏉′欢閲嶇疆鐨勬椂鍊� 鐣岄潰鏄剧ず鏈竻绌�
-        if (!props.value) {
-          selectValues.value = [];
-        }
-      });
-
-      /**
-       * 鐩戝惉selectValues鍙樺寲
-       */
-      watch(selectValues, () => {
-        if (selectValues) {
-          state.value = selectValues.value;
-        }
-      });
-
-      /**
-       * 鎵撳崱寮瑰嚭妗�
-       */
-      function handleOpen() {
-        tag.value = true;
-        openModal(true, {
-          isUpdate: false,
-        });
-      }
-
-      /**
-       * 灏嗗瓧绗︿覆鍊艰浆鍖栦负鏁扮粍
-       */
-      function initValue() {
-        let value = props.value ? props.value : [];
-        if (value && typeof value === 'string' && value != 'null' && value != 'undefined') {
-          state.value = value.split(',');
-          selectValues.value = value.split(',');
-        } else {
-          // 銆怴UEN-857銆戝吋瀹规暟缁勶紙琛岀紪杈戠殑鐢ㄦ硶闂锛�
-          selectValues.value = value;
-        }
-      }
-
-      /**
-       * 璁剧疆涓嬫媺妗嗙殑鍊�
-       */
-      function setValue(options, values) {
-        selectOptions.value = options;
-        //emitData.value = values.join(",");
-        state.value = values;
-        selectValues.value = values;
-        emit('update:value', values.join(','));
-      }
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
-      return {
-        state,
-        attrs,
-        selectOptions,
-        getBindValue,
-        selectValues,
-        loadingEcho,
-        tag,
-        regModal,
-        setValue,
-        handleOpen,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .j-select-row {
-    @width: 82px;
-
-    .left {
-      width: calc(100% - @width - 8px);
-    }
-
-    .right {
-      width: @width;
-    }
-
-    .full {
-      width: 100%;
-    }
-
-    :deep(.ant-select-search__field) {
-      display: none !important;
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JSelectUserByDept.vue b/src/components/Form/src/jeecg/components/JSelectUserByDept.vue
deleted file mode 100644
index 5039150..0000000
--- a/src/components/Form/src/jeecg/components/JSelectUserByDept.vue
+++ /dev/null
@@ -1,153 +0,0 @@
-<!--鐢ㄦ埛閫夋嫨缁勪欢-->
-<template>
-  <div>
-    <JSelectBiz @change="handleChange" @handleOpen="handleOpen" :loading="loadingEcho" v-bind="attrs"></JSelectBiz>
-    <UserSelectByDepModal :rowKey="rowKey" @register="regModal" @getSelectResult="setValue" v-bind="getBindValue"></UserSelectByDepModal>
-  </div>
-</template>
-<script lang="ts">
-  import { unref } from 'vue';
-  import UserSelectByDepModal from './modal/UserSelectByDepModal.vue';
-  import JSelectBiz from './base/JSelectBiz.vue';
-  import { defineComponent, ref, reactive, watchEffect, watch, provide } from 'vue';
-  import { useModal } from '/@/components/Modal';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { SelectValue } from 'ant-design-vue/es/select';
-  export default defineComponent({
-    name: 'JSelectUserByDept',
-    components: {
-      UserSelectByDepModal,
-      JSelectBiz,
-    },
-    inheritAttrs: false,
-    props: {
-      value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-      rowKey: {
-        type: String,
-        default: 'username',
-      },
-      labelKey: {
-        type: String,
-        default: 'realname',
-      },
-    },
-    emits: ['options-change', 'change', 'update:value'],
-    setup(props, { emit, refs }) {
-      const emitData = ref<any[]>();
-      //娉ㄥ唽model
-      const [regModal, { openModal }] = useModal();
-      //琛ㄥ崟鍊�
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
-      //涓嬫媺妗嗛�夐」鍊�
-      const selectOptions = ref<SelectValue>([]);
-      //涓嬫媺妗嗛�変腑鍊�
-      let selectValues = reactive<object>({
-        value: [],
-        change: false,
-      });
-      // 鏄惁姝e湪鍔犺浇鍥炴樉鏁版嵁
-      const loadingEcho = ref<boolean>(false);
-      //涓嬪彂 selectOptions,xxxBiz缁勪欢鎺ユ敹
-      provide('selectOptions', selectOptions);
-      //涓嬪彂 selectValues,xxxBiz缁勪欢鎺ユ敹
-      provide('selectValues', selectValues);
-      //涓嬪彂 loadingEcho,xxxBiz缁勪欢鎺ユ敹
-      provide('loadingEcho', loadingEcho);
-
-      const tag = ref(false);
-      const attrs = useAttrs();
-
-      /**
-       * 鐩戝惉缁勪欢鍊�
-       */
-      watchEffect(() => {
-        initValue();
-      });
-
-      /**
-       * 鐩戝惉selectValues鍙樺寲
-       */
-      watch(selectValues, () => {
-        if (selectValues) {
-          state.value = selectValues.value;
-        }
-      });
-
-      /**
-       * 鎵撳崱寮瑰嚭妗�
-       */
-      function handleOpen() {
-        tag.value = true;
-        openModal(true, {
-          isUpdate: false,
-        });
-      }
-
-      /**
-       * 灏嗗瓧绗︿覆鍊艰浆鍖栦负鏁扮粍
-       */
-      function initValue() {
-        let value = props.value ? props.value : [];
-        if (value && typeof value === 'string' && value != 'null' && value != 'undefined') {
-          state.value = value.split(',');
-          selectValues.value = value.split(',');
-        } else {
-          selectValues.value = value;
-        }
-      }
-
-      /**
-       * 璁剧疆涓嬫媺妗嗙殑鍊�
-       */
-      function setValue(options, values) {
-        selectOptions.value = options;
-        //emitData.value = values.join(",");
-        state.value = values;
-        selectValues.value = values;
-        emit('update:value', values);
-        emit('options-change', options);
-      }
-
-      function handleChange(values) {
-        emit('update:value', values);
-      }
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
-      return {
-        state,
-        attrs,
-        selectOptions,
-        getBindValue,
-        selectValues,
-        loadingEcho,
-        tag,
-        regModal,
-        setValue,
-        handleOpen,
-        handleChange,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .j-select-row {
-    @width: 82px;
-
-    .left {
-      width: calc(100% - @width - 8px);
-    }
-
-    .right {
-      width: @width;
-    }
-
-    .full {
-      width: 100%;
-    }
-
-    :deep(.ant-select-search__field) {
-      display: none !important;
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JSwitch.vue b/src/components/Form/src/jeecg/components/JSwitch.vue
deleted file mode 100644
index 251bcdc..0000000
--- a/src/components/Form/src/jeecg/components/JSwitch.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <a-select
-      v-if="query"
-      v-model:value="state"
-      :options="selectOptions"
-      :disabled="disabled"
-      style="width: 100%"
-      v-bind="attrs"
-      @change="onSelectChange"
-    />
-    <a-switch v-else v-model:checked="checked" :disabled="disabled" v-bind="attrs" @change="onSwitchChange" />
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { computed, ref, watch } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
-  const { prefixCls } = useDesign('j-switch');
-  const props = defineProps({
-    // v-model:value
-    value: propTypes.oneOfType([propTypes.string, propTypes.number]),
-    // 鍙栧�� options
-    options: propTypes.array.def(() => ['Y', 'N']),
-    // 鏂囨湰 options
-    labelOptions: propTypes.array.def(() => ['鏄�', '鍚�']),
-    // 鏄惁浣跨敤涓嬫媺
-    query: propTypes.bool.def(false),
-    // 鏄惁绂佺敤
-    disabled: propTypes.bool.def(false),
-  });
-  const attrs = useAttrs();
-  const emit = defineEmits(['change', 'update:value']);
-
-  const checked = ref<boolean>(false);
-  const [state] = useRuleFormItem(props, 'value', 'change');
-  watch(
-    () => props.value,
-    (val) => {
-      if (!props.query) {
-        if (!val) {
-          checked.value = false;
-          emitValue(props.options[1]);
-        } else {
-          checked.value = props.options[0] == val;
-        }
-      }
-    },
-    { immediate: true }
-  );
-
-  const selectOptions = computed(() => {
-    let options: any[] = [];
-    options.push({ value: props.options[0], label: props.labelOptions[0] });
-    options.push({ value: props.options[1], label: props.labelOptions[1] });
-    return options;
-  });
-
-  function onSwitchChange(checked) {
-    let flag = checked === false ? props.options[1] : props.options[0];
-    emitValue(flag);
-  }
-
-  function onSelectChange(value) {
-    emitValue(value);
-  }
-
-  function emitValue(value) {
-    emit('change', value);
-    emit('update:value', value);
-  }
-</script>
-
-<style lang="less">
-  //noinspection LessUnresolvedVariable
-  @prefix-cls: ~'@{namespace}-j-switch';
-
-  .@{prefix-cls} {
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JTreeDict.vue b/src/components/Form/src/jeecg/components/JTreeDict.vue
deleted file mode 100644
index 6439290..0000000
--- a/src/components/Form/src/jeecg/components/JTreeDict.vue
+++ /dev/null
@@ -1,141 +0,0 @@
-<template>
-  <TreeSelect
-    :class="prefixCls"
-    :value="treeValue"
-    :treeData="treeData"
-    :loadData="asyncLoadTreeData"
-    allowClear
-    labelInValue
-    :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
-    style="width: 100%"
-    v-bind="attrs"
-    @change="onChange"
-  >
-  </TreeSelect>
-</template>
-
-<script lang="ts" setup>
-  import { ref, watch } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { TreeSelect } from 'ant-design-vue';
-
-  enum Api {
-    view = '/sys/category/loadOne',
-    root = '/sys/category/loadTreeRoot',
-    children = '/sys/category/loadTreeChildren',
-  }
-
-  const { prefixCls } = useDesign('j-tree-dict');
-  const props = defineProps({
-    // v-model:value
-    value: propTypes.string.def(''),
-    field: propTypes.string.def('id'),
-    parentCode: propTypes.string.def(''),
-    async: propTypes.bool.def(false),
-  });
-  const attrs = useAttrs();
-  const emit = defineEmits(['change', 'update:value']);
-
-  const treeData = ref<any[]>([]);
-  const treeValue = ref<any>(null);
-
-  watch(
-    () => props.value,
-    () => loadViewInfo(),
-    { deep: true, immediate: true }
-  );
-  watch(
-    () => props.parentCode,
-    () => loadRoot(),
-    { deep: true, immediate: true }
-  );
-
-  async function loadViewInfo() {
-    if (!props.value || props.value == '0') {
-      treeValue.value = null;
-    } else {
-      let params = { field: props.field, val: props.value };
-      let result = await defHttp.get({ url: Api.view, params });
-      treeValue.value = {
-        value: props.value,
-        label: result.name,
-      };
-    }
-  }
-
-  async function loadRoot() {
-    let params = {
-      async: props.async,
-      pcode: props.parentCode,
-    };
-    let result = await defHttp.get({ url: Api.root, params });
-    treeData.value = [...result];
-    handleTreeNodeValue(result);
-  }
-
-  async function asyncLoadTreeData(treeNode) {
-    if (!props.async || treeNode.dataRef.children) {
-      return Promise.resolve();
-    }
-    let pid = treeNode.dataRef.key;
-    let params = { pid: pid };
-    let result = await defHttp.get({ url: Api.children, params });
-    handleTreeNodeValue(result);
-    addChildren(pid, result, treeData.value);
-    treeData.value = [...treeData.value];
-    return Promise.resolve();
-  }
-
-  function addChildren(pid, children, treeArray) {
-    if (treeArray && treeArray.length > 0) {
-      for (let item of treeArray) {
-        if (item.key == pid) {
-          if (!children || children.length == 0) {
-            item.leaf = true;
-          } else {
-            item.children = children;
-          }
-          break;
-        } else {
-          addChildren(pid, children, item.children);
-        }
-      }
-    }
-  }
-
-  function handleTreeNodeValue(result) {
-    let storeField = props.field == 'code' ? 'code' : 'key';
-    for (let i of result) {
-      i.value = i[storeField];
-      i.isLeaf = i.leaf;
-      if (i.children && i.children.length > 0) {
-        handleTreeNodeValue(i.children);
-      }
-    }
-  }
-
-  function onChange(value) {
-    if (!value) {
-      emitValue('');
-    } else {
-      emitValue(value.value);
-    }
-    treeValue.value = value;
-  }
-
-  function emitValue(value) {
-    emit('change', value);
-    emit('update:value', value);
-  }
-</script>
-
-<style lang="less">
-  //noinspection LessUnresolvedVariable
-  @prefix-cls: ~'@{namespace}-j-tree-dict';
-
-  .@{prefix-cls} {
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JTreeSelect.vue b/src/components/Form/src/jeecg/components/JTreeSelect.vue
deleted file mode 100644
index 18343f0..0000000
--- a/src/components/Form/src/jeecg/components/JTreeSelect.vue
+++ /dev/null
@@ -1,352 +0,0 @@
-<template>
-  <a-tree-select
-    allowClear
-    labelInValue
-    style="width: 100%"
-    :getPopupContainer="(node) => node.parentNode"
-    :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
-    :placeholder="placeholder"
-    :loadData="asyncLoadTreeData"
-    :value="treeValue"
-    :treeData="treeData"
-    :multiple="multiple"
-    v-bind="attrs"
-    @change="onChange"
-    @search="onSearch"
-    :tree-checkable="treeCheckAble"
-  >
-  </a-tree-select>
-</template>
-<script lang="ts" setup>
-  /*
-   * 寮傛鏍戝姞杞界粍浠� 閫氳繃浼犲叆琛ㄥ悕 鏄剧ず瀛楁 瀛樺偍瀛楁 鍔犺浇涓�涓爲鎺т欢
-   * <j-tree-select dict="aa_tree_test,aad,id" pid-field="pid" ></j-tree-select>
-   * */
-  import { ref, watch, unref } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { TreeSelect } from 'ant-design-vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  enum Api {
-    url = '/sys/dict/loadTreeData',
-    view = '/sys/dict/loadDictItem/',
-  }
-
-  const props = defineProps({
-    value: propTypes.string.def(''),
-    placeholder: propTypes.string.def('璇烽�夋嫨'),
-    dict: propTypes.string.def('id'),
-    parentCode: propTypes.string.def(''),
-    pidField: propTypes.string.def('pid'),
-    //update-begin---author:wangshuai ---date:20220620  for锛欽TreeSelect缁勪欢pidValue杩樺師鎴愮┖锛屽惁鍒欎細褰卞搷鑷畾涔夌粍浠舵爲绀轰緥------------
-    pidValue: propTypes.string.def(''),
-    //update-end---author:wangshuai ---date:20220620  for锛欽TreeSelect缁勪欢pidValue杩樺師鎴愮┖锛屽惁鍒欎細褰卞搷鑷畾涔夌粍浠舵爲绀轰緥--------------
-    hasChildField: propTypes.string.def(''),
-    converIsLeafVal: propTypes.integer.def(1),
-    condition: propTypes.string.def(''),
-    multiple: propTypes.bool.def(false),
-    loadTriggleChange: propTypes.bool.def(false),
-    reload: propTypes.number.def(1),
-    //update-begin-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect鎺т欢changeOptions鏂规硶鏈敓鏁�
-    url: propTypes.string.def(''),
-    params: propTypes.object.def({}),
-    //update-end-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect鎺т欢changeOptions鏂规硶鏈敓鏁�
-    //update-begin---author:wangshuai date: 20230202 for: 鏂板鏄惁鏈夊閫夋
-    //榛樿娌℃湁閫夋嫨妗�
-    treeCheckAble: propTypes.bool.def(false),
-    //update-end---author:wangshuai date: 20230202 for: 鏂板鏄惁鏈夊閫夋
-  });
-  const attrs = useAttrs();
-  const emit = defineEmits(['change', 'update:value']);
-  const { createMessage } = useMessage();
-  //鏍戝舰涓嬫媺鏁版嵁
-  const treeData = ref<any[]>([]);
-  //閫夋嫨鏁版嵁
-  const treeValue = ref<any>(null);
-  const tableName = ref<any>('');
-  const text = ref<any>('');
-  const code = ref<any>('');
-  /**
-   * 鐩戝惉value鏁版嵁骞跺垵濮嬪寲
-   */
-  watch(
-    () => props.value,
-    () => loadItemByCode(),
-    { deep: true, immediate: true }
-  );
-  /**
-   * 鐩戝惉dict鍙樺寲
-   */
-  watch(
-    () => props.dict,
-    () => {
-      initDictInfo();
-      loadRoot();
-    },
-    { deep: true, immediate: true }
-  );
-
-  //update-begin-author:taoyan date:2022-5-25 for: VUEN-1056 15銆佷弗閲嶁�斺�攐nline鏍戣〃鍗曪紝娣诲姞鐨勬椂鍊欙紝鐖朵翰鑺傜偣鏄┖鐨�
-  watch(
-    () => props.reload,
-    async () => {
-      treeData.value = [];
-      await loadRoot();
-    },
-    {
-      immediate: false,
-    }
-  );
-  //update-end-author:taoyan date:2022-5-25 for: VUEN-1056 15銆佷弗閲嶁�斺�攐nline鏍戣〃鍗曪紝娣诲姞鐨勬椂鍊欙紝鐖朵翰鑺傜偣鏄┖鐨�
-
-  /**
-   * 鏍规嵁code鑾峰彇涓嬫媺鏁版嵁骞跺洖鏄�
-   */
-  async function loadItemByCode() {
-    if (!props.value || props.value == '0') {
-      if(props.multiple){
-        treeValue.value = [];
-      }else{
-        treeValue.value = null;
-      }
-    } else {
-      //update-begin-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect鎺т欢changeOptions鏂规硶鏈敓鏁�
-      if(props.url){
-        getItemFromTreeData();
-      }else{
-        let params = { key: props.value };
-        let result = await defHttp.get({ url: `${Api.view}${props.dict}`, params }, { isTransformResponse: false });
-        if (result.success) {
-          let values = props.value.split(',');
-          treeValue.value = result.result.map((item, index) => ({
-            key: values[index],
-            value: values[index],
-            label: item,
-          }));
-          onLoadTriggleChange(result.result[0]);
-        }
-      }
-      //update-end-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect鎺т欢changeOptions鏂规硶鏈敓鏁�
-    }
-  }
-
-  function onLoadTriggleChange(text) {
-    //鍙湁鍗曢�夋墠浼氳Е鍙�
-    if (!props.multiple && props.loadTriggleChange) {
-      emit('change', props.value, text);
-    }
-  }
-
-  /**
-   * 鍒濆鍖栨暟鎹�
-   */
-  function initDictInfo() {
-    let arr = props.dict?.split(',');
-    tableName.value = arr[0];
-    text.value = arr[1];
-    code.value = arr[2];
-  }
-
-  /**
-   * 鍔犺浇涓嬫媺鏍戝舰鏁版嵁
-   */
-  async function loadRoot() {
-    let params = {
-      pid: props.pidValue,
-      pidField: props.pidField,
-      hasChildField: props.hasChildField,
-      converIsLeafVal: props.converIsLeafVal,
-      condition: props.condition,
-      tableName: unref(tableName),
-      text: unref(text),
-      code: unref(code),
-    };
-    let res = await defHttp.get({ url: Api.url, params }, { isTransformResponse: false });
-    if (res.success && res.result) {
-      for (let i of res.result) {
-        i.value = i.key;
-        i.isLeaf = !!i.leaf;
-      }
-      treeData.value = [...res.result];
-    } else {
-      console.log('鏁版牴鑺傜偣鏌ヨ缁撴灉寮傚父', res);
-    }
-  }
-
-  /**
-   * 寮傛鍔犺浇鏁版嵁
-   */
-  async function asyncLoadTreeData(treeNode) {
-    if (treeNode.dataRef.children) {
-      return Promise.resolve();
-    }
-    if(props.url){
-      return Promise.resolve();
-    }
-    let pid = treeNode.dataRef.key;
-    let params = {
-      pid: pid,
-      pidField: props.pidField,
-      hasChildField: props.hasChildField,
-      converIsLeafVal: props.converIsLeafVal,
-      condition: props.condition,
-      tableName: unref(tableName),
-      text: unref(text),
-      code: unref(code),
-    };
-    let res = await defHttp.get({ url: Api.url, params }, { isTransformResponse: false });
-    if (res.success) {
-      for (let i of res.result) {
-        i.value = i.key;
-        i.isLeaf = !!i.leaf;
-      }
-      //娣诲姞瀛愯妭鐐�
-      addChildren(pid, res.result, treeData.value);
-      treeData.value = [...treeData.value];
-    }
-    return Promise.resolve();
-  }
-
-  /**
-   * 鍔犺浇瀛愯妭鐐�
-   */
-  function addChildren(pid, children, treeArray) {
-    if (treeArray && treeArray.length > 0) {
-      for (let item of treeArray) {
-        if (item.key == pid) {
-          if (!children || children.length == 0) {
-            item.isLeaf = true;
-          } else {
-            item.children = children;
-          }
-          break;
-        } else {
-          addChildren(pid, children, item.children);
-        }
-      }
-    }
-  }
-
-  /**
-   * 閫変腑鏍戣妭鐐逛簨浠�
-   */
-  function onChange(value) {
-    if (!value) {
-      emitValue('');
-    } else if (value instanceof Array) {
-      emitValue(value.map((item) => item.value).join(','));
-    } else {
-      emitValue(value.value);
-    }
-    treeValue.value = value;
-  }
-
-  function emitValue(value) {
-    emit('change', value);
-    emit('update:value', value);
-  }
-
-  /**
-   * 鏂囨湰妗嗗�煎彉鍖�
-   */
-  function onSearch(value) {
-    console.log(value);
-  }
-
-  /**
-   * 鏍¢獙鏉′欢閰嶇疆鏄惁鏈夎
-   */
-  function validateProp() {
-    let mycondition = props.condition;
-    return new Promise((resolve, reject) => {
-      if (!mycondition) {
-        resolve();
-      } else {
-        try {
-          let test = JSON.parse(mycondition);
-          if (typeof test == 'object' && test) {
-            resolve();
-          } else {
-            createMessage.error('缁勪欢JTreeSelect-condition浼犲�兼湁璇紝闇�瑕佷竴涓猨son瀛楃涓�!');
-            reject();
-          }
-        } catch (e) {
-          createMessage.error('缁勪欢JTreeSelect-condition浼犲�兼湁璇紝闇�瑕佷竴涓猨son瀛楃涓�!');
-          reject();
-        }
-      }
-    });
-  }
-
-  //update-begin-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect鎺т欢changeOptions鏂规硶鏈敓鏁�
-  watch(()=>props.url, async (val)=>{
-    if(val){
-      await loadRootByUrl();
-    }
-  });
-
-  /**
-   * 鏍规嵁鑷畾涔夌殑璇锋眰鍦板潃鍔犺浇鏁版嵁
-   */
-  async function loadRootByUrl(){
-    let url = props.url;
-    let params = props.params;
-    let res = await defHttp.get({ url, params }, { isTransformResponse: false });
-    if (res.success && res.result) {
-      for (let i of res.result) {
-        i.key = i.value;
-        i.isLeaf = !!i.leaf;
-      }
-      treeData.value = [...res.result];
-    } else {
-      console.log('鏁版牴鑺傜偣鏌ヨ缁撴灉寮傚父', res);
-    }
-  }
-
-  /**
-   * 鏍规嵁宸叉湁鐨勬爲鏁版嵁 缈昏瘧閫夐」
-   */
-  function getItemFromTreeData(){
-    let data = treeData.value;
-    let arr = []
-    findChildrenNode(data, arr);
-    if(arr.length>0){
-      treeValue.value = arr
-      onLoadTriggleChange(arr[0]);
-    }
-  }
-
-  /**
-   * 閫掑綊鎵惧瓙鑺傜偣
-   * @param data
-   * @param arr
-   */
-  function findChildrenNode(data, arr){
-    let val = props.value;
-    if(data && data.length){
-      for(let item of data){
-        if(val===item.value){
-          arr.push({
-            key: item.key,
-            value: item.value,
-            label: item.label||item.title
-          })
-        }else{
-          findChildrenNode(item.children, arr)
-        }
-      }
-    }
-  }
-  //update-end-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect鎺т欢changeOptions鏂规硶鏈敓鏁�
-
-  // onCreated
-  validateProp().then(() => {
-    initDictInfo();
-    loadRoot();
-    loadItemByCode();
-  });
-</script>
-
-<style lang="less"></style>
diff --git a/src/components/Form/src/jeecg/components/JUpload/JUpload.vue b/src/components/Form/src/jeecg/components/JUpload/JUpload.vue
deleted file mode 100644
index 5117428..0000000
--- a/src/components/Form/src/jeecg/components/JUpload/JUpload.vue
+++ /dev/null
@@ -1,427 +0,0 @@
-<template>
-  <div ref="containerRef" :class="`${prefixCls}-container`">
-    <a-upload
-      :headers="headers"
-      :multiple="multiple"
-      :action="uploadUrl"
-      :fileList="fileList"
-      :disabled="disabled"
-      v-bind="bindProps"
-      @remove="onRemove"
-      @change="onFileChange"
-      @preview="onFilePreview"
-    >
-      <template v-if="isImageMode">
-        <div v-if="!isMaxCount">
-          <Icon icon="ant-design:plus-outlined" />
-          <div class="ant-upload-text">{{ text }}</div>
-        </div>
-      </template>
-      <a-button v-else-if="buttonVisible" :disabled="isMaxCount || disabled">
-        <Icon icon="ant-design:upload-outlined" />
-        <span>{{ text }}</span>
-      </a-button>
-    </a-upload>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { ref, reactive, computed, watch, nextTick, createApp } from 'vue';
-  import { Icon } from '/@/components/Icon';
-  import { getToken } from '/@/utils/auth';
-  import { uploadUrl } from '/@/api/common/api';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { createImgPreview } from '/@/components/Preview/index';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { UploadTypeEnum } from './upload.data';
-  import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-  import UploadItemActions from './components/UploadItemActions.vue';
-
-  const { createMessage, createConfirm } = useMessage();
-  const { prefixCls } = useDesign('j-upload');
-  const attrs = useAttrs();
-  const emit = defineEmits(['change', 'update:value']);
-  const props = defineProps({
-    value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-    text: propTypes.string.def('涓婁紶'),
-    fileType: propTypes.string.def(UploadTypeEnum.all),
-    /*杩欎釜灞炴�х敤浜庢帶鍒舵枃浠朵笂浼犵殑涓氬姟璺緞*/
-    bizPath: propTypes.string.def('temp'),
-    /**
-     * 鏄惁杩斿洖url锛�
-     * true锛氫粎杩斿洖url
-     * false锛氳繑鍥瀎ileName filePath fileSize
-     */
-    returnUrl: propTypes.bool.def(true),
-    // 鏈�澶т笂浼犳暟閲�
-    maxCount: propTypes.number.def(0),
-    buttonVisible: propTypes.bool.def(true),
-    multiple: propTypes.bool.def(true),
-    // 鏄惁鏄剧ず宸﹀彸绉诲姩鎸夐挳
-    mover: propTypes.bool.def(true),
-    // 鏄惁鏄剧ず涓嬭浇鎸夐挳
-    download: propTypes.bool.def(true),
-    // 鍒犻櫎鏃舵槸鍚︽樉绀虹‘璁ゆ
-    removeConfirm: propTypes.bool.def(false),
-    beforeUpload: propTypes.func,
-    disabled: propTypes.bool.def(false),
-  });
-
-  const headers = reactive({
-    'X-Access-Token': getToken(),
-  });
-  const fileList = ref<any[]>([]);
-  const uploadGoOn = ref<boolean>(true);
-  // refs
-  const containerRef = ref();
-  // 鏄惁杈惧埌浜嗘渶澶т笂浼犳暟閲�
-  const isMaxCount = computed(() => props.maxCount > 0 && fileList.value.length >= props.maxCount);
-  // 褰撳墠鏄惁鏄笂浼犲浘鐗囨ā寮�
-  const isImageMode = computed(() => props.fileType === UploadTypeEnum.image);
-  // 鍚堝苟 props 鍜� attrs
-  const bindProps = computed(() => {
-    const bind: any = Object.assign({}, props, attrs);
-    bind.name = 'file';
-    bind.listType = isImageMode.value ? 'picture-card' : 'text';
-    bind.class = [bind.class, { 'upload-disabled': props.disabled }];
-    bind.data = { biz: props.bizPath, ...bind.data };
-    //update-begin-author:taoyan date:20220407 for: 鑷畾涔塨eforeUpload return false锛屽苟涓嶈兘涓柇涓婁紶杩囩▼
-    if (!bind.beforeUpload) {
-      bind.beforeUpload = onBeforeUpload;
-    }
-    //update-end-author:taoyan date:20220407 for: 鑷畾涔塨eforeUpload return false锛屽苟涓嶈兘涓柇涓婁紶杩囩▼
-    // 濡傛灉褰撳墠鏄浘鐗囦笂浼犳ā寮忥紝灏卞彧鑳戒笂浼犲浘鐗�
-    if (isImageMode.value && !bind.accept) {
-      bind.accept = 'image/*';
-    }
-    return bind;
-  });
-
-  watch(
-    () => props.value,
-    (val) => {
-      if (Array.isArray(val)) {
-        if (props.returnUrl) {
-          parsePathsValue(val.join(','));
-        } else {
-          parseArrayValue(val);
-        }
-      } else {
-        parsePathsValue(val);
-      }
-    },
-    { immediate: true }
-  );
-
-  watch(fileList, () => nextTick(() => addActionsListener()), { immediate: true });
-
-  const antUploadItemCls = 'ant-upload-list-item';
-
-  // Listener
-  function addActionsListener() {
-    if (!isImageMode.value) {
-      return;
-    }
-    const uploadItems = containerRef.value ? containerRef.value.getElementsByClassName(antUploadItemCls) : null;
-    if (!uploadItems || uploadItems.length === 0) {
-      return;
-    }
-    for (const uploadItem of uploadItems) {
-      let hasActions = uploadItem.getAttribute('data-has-actions') === 'true';
-      if (!hasActions) {
-        uploadItem.addEventListener('mouseover', onAddActionsButton);
-      }
-    }
-  }
-
-  // 娣诲姞鍙乏鍙崇Щ鍔ㄧ殑鎸夐挳
-  function onAddActionsButton(event) {
-    const getUploadItem = () => {
-      for (const path of event.path) {
-        if (path.classList.contains(antUploadItemCls)) {
-          return path;
-        } else if (path.classList.contains(`${prefixCls}-container`)) {
-          return null;
-        }
-      }
-      return null;
-    };
-    const uploadItem = getUploadItem();
-    if (!uploadItem) {
-      return;
-    }
-    const actions = uploadItem.getElementsByClassName('ant-upload-list-item-actions');
-    if (!actions || actions.length === 0) {
-      return;
-    }
-    // 娣诲姞鎿嶄綔鎸夐挳
-    const div = document.createElement('div');
-    div.className = 'upload-actions-container';
-    createApp(UploadItemActions, {
-      element: uploadItem,
-      fileList: fileList,
-      mover: props.mover,
-      download: props.download,
-      emitValue: emitValue,
-    }).mount(div);
-    actions[0].appendChild(div);
-    uploadItem.setAttribute('data-has-actions', 'true');
-    uploadItem.removeEventListener('mouseover', onAddActionsButton);
-  }
-
-  // 瑙f瀽鏁版嵁搴撳瓨鍌ㄧ殑閫楀彿鍒嗗壊
-  function parsePathsValue(paths) {
-    if (!paths || paths.length == 0) {
-      fileList.value = [];
-      return;
-    }
-    let list: any[] = [];
-    for (const item of paths.split(',')) {
-      let url = getFileAccessHttpUrl(item);
-      list.push({
-        uid: uidGenerator(),
-        name: getFileName(item),
-        status: 'done',
-        url: url,
-        response: { status: 'history', message: item },
-      });
-    }
-    fileList.value = list;
-  }
-
-  // 瑙f瀽鏁扮粍鍊�
-  function parseArrayValue(array) {
-    if (!array || array.length == 0) {
-      fileList.value = [];
-      return;
-    }
-    let list: any[] = [];
-    for (const item of array) {
-      let url = getFileAccessHttpUrl(item.filePath);
-      list.push({
-        uid: uidGenerator(),
-        name: item.fileName,
-        url: url,
-        status: 'done',
-        response: { status: 'history', message: item.filePath },
-      });
-    }
-    fileList.value = list;
-  }
-
-  // 鏂囦欢涓婁紶涔嬪墠鐨勬搷浣�
-  function onBeforeUpload(file) {
-    uploadGoOn.value = true;
-    if (isImageMode.value) {
-      if (file.type.indexOf('image') < 0) {
-        createMessage.warning('璇蜂笂浼犲浘鐗�');
-        uploadGoOn.value = false;
-        return false;
-      }
-    }
-    // 鎵╁睍 beforeUpload 楠岃瘉
-    if (typeof props.beforeUpload === 'function') {
-      return props.beforeUpload(file);
-    }
-    return true;
-  }
-
-  // 鍒犻櫎澶勭悊浜嬩欢
-  function onRemove() {
-    if (props.removeConfirm) {
-      return new Promise((resolve) => {
-        createConfirm({
-          title: '鍒犻櫎',
-          content: `纭畾瑕佸垹闄よ繖${isImageMode.value ? '寮犲浘鐗�' : '涓枃浠�'}鍚楋紵`,
-          iconType: 'warning',
-          onOk: () => resolve(true),
-          onCancel: () => resolve(false),
-        });
-      });
-    }
-    return true;
-  }
-
-  // upload缁勪欢change浜嬩欢
-  function onFileChange(info) {
-    if (!info.file.status && uploadGoOn.value === false) {
-      info.fileList.pop();
-    }
-    let fileListTemp = info.fileList;
-    // 闄愬埗鏈�澶т笂浼犳暟
-    if (props.maxCount > 0) {
-      let count = fileListTemp.length;
-      if (count >= props.maxCount) {
-        let diffNum = props.maxCount - fileListTemp.length;
-        if (diffNum >= 0) {
-          fileListTemp = fileListTemp.slice(-props.maxCount);
-        } else {
-          return;
-        }
-      }
-    }
-    if (info.file.status === 'done') {
-      if (info.file.response.success) {
-        fileListTemp = fileListTemp.map((file) => {
-          if (file.response) {
-            let reUrl = file.response.message;
-            file.url = getFileAccessHttpUrl(reUrl);
-          }
-          return file;
-        });
-      }
-    } else if (info.file.status === 'error') {
-      createMessage.error(`${info.file.name} 涓婁紶澶辫触.`);
-    }
-    fileList.value = fileListTemp;
-    if (info.file.status === 'done' || info.file.status === 'removed') {
-      //returnUrl涓簍rue鏃朵粎杩斿洖鏂囦欢璺緞
-      if (props.returnUrl) {
-        handlePathChange();
-      } else {
-        //returnUrl涓篺alse鏃惰繑鍥炴枃浠跺悕绉般�佹枃浠惰矾寰勫強鏂囦欢澶у皬
-        let newFileList: any[] = [];
-        for (const item of fileListTemp) {
-          if (item.status === 'done') {
-            let fileJson = {
-              fileName: item.name,
-              filePath: item.response.message,
-              fileSize: item.size,
-            };
-            newFileList.push(fileJson);
-          }else{
-            return;
-          }
-        }
-        emitValue(newFileList);
-      }
-    }
-  }
-
-  function handlePathChange() {
-    let uploadFiles = fileList.value;
-    let path = '';
-    if (!uploadFiles || uploadFiles.length == 0) {
-      path = '';
-    }
-    let pathList: string[] = [];
-    for (const item of uploadFiles) {
-      if (item.status === 'done') {
-        pathList.push(item.response.message);
-      } else {
-        return;
-      }
-    }
-    if (pathList.length > 0) {
-      path = pathList.join(',');
-    }
-    emitValue(path);
-  }
-
-  // 棰勮鏂囦欢銆佸浘鐗�
-  function onFilePreview(file) {
-    if (isImageMode.value) {
-      createImgPreview({ imageList: [file.url], maskClosable: true });
-    } else {
-      window.open(file.url);
-    }
-  }
-
-  function emitValue(value) {
-    emit('change', value);
-    emit('update:value', value);
-  }
-
-  function uidGenerator() {
-    return '-' + parseInt(Math.random() * 10000 + 1, 10);
-  }
-
-  function getFileName(path) {
-    if (path.lastIndexOf('\\') >= 0) {
-      let reg = new RegExp('\\\\', 'g');
-      path = path.replace(reg, '/');
-    }
-    return path.substring(path.lastIndexOf('/') + 1);
-  }
-
-  defineExpose({
-    addActionsListener,
-  });
-</script>
-
-<style lang="less">
-  //noinspection LessUnresolvedVariable
-  @prefix-cls: ~'@{namespace}-j-upload';
-
-  .@{prefix-cls} {
-    &-container {
-      position: relative;
-
-      .upload-disabled {
-        .ant-upload-list-item {
-          .anticon-close {
-            display: none;
-          }
-
-          .anticon-delete {
-            display: none;
-          }
-        }
-
-        /* update-begin-author:taoyan date:2022-5-24 for:VUEN-1093璇︽儏鐣岄潰 鍥剧墖涓嬭浇鎸夐挳鏄剧ず涓嶅叏*/
-        .upload-download-handler {
-          right: 6px !important;
-        }
-        /* update-end-author:taoyan date:2022-5-24 for:VUEN-1093璇︽儏鐣岄潰 鍥剧墖涓嬭浇鎸夐挳鏄剧ず涓嶅叏*/
-      }
-
-      .ant-upload-list-item {
-        .upload-actions-container {
-          position: absolute;
-          top: -31px;
-          left: -18px;
-          z-index: 11;
-          width: 84px;
-          height: 84px;
-          line-height: 28px;
-          text-align: center;
-          pointer-events: none;
-
-          a {
-            opacity: 0.9;
-            margin: 0 5px;
-            cursor: pointer;
-            transition: opacity 0.3s;
-
-            .anticon {
-              color: #fff;
-              font-size: 16px;
-            }
-
-            &:hover {
-              opacity: 1;
-            }
-          }
-
-          .upload-mover-handler,
-          .upload-download-handler {
-            position: absolute;
-            pointer-events: auto;
-          }
-
-          .upload-mover-handler {
-            width: 100%;
-            bottom: 0;
-          }
-
-          .upload-download-handler {
-            top: -4px;
-            right: -4px;
-          }
-        }
-      }
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/JUpload/JUploadModal.vue b/src/components/Form/src/jeecg/components/JUpload/JUploadModal.vue
deleted file mode 100644
index 083e1ec..0000000
--- a/src/components/Form/src/jeecg/components/JUpload/JUploadModal.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<template>
-  <BasicModal @register="registerModal" :title="modalTitle" :width="width" @ok="handleOk" v-bind="$attrs">
-    <JUpload ref="uploadRef" :value="value" v-bind="uploadBinds.props" @change="emitValue" />
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { ref, unref, reactive, computed, nextTick } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import JUpload from './JUpload.vue';
-  import { UploadTypeEnum } from './upload.data';
-  import { propTypes } from '/@/utils/propTypes';
-
-  const { createMessage } = useMessage();
-  const emit = defineEmits(['change', 'update:value', 'register']);
-  const props = defineProps({
-    value: propTypes.oneOfType([propTypes.string, propTypes.array]),
-    width: propTypes.number.def(520),
-  });
-
-  const uploadRef = ref();
-  const uploadBinds = reactive({ props: {} as any });
-  const modalTitle = computed(() => (uploadBinds.props?.fileType === UploadTypeEnum.image ? '鍥剧墖涓婁紶' : '鏂囦欢涓婁紶'));
-
-  // 娉ㄥ唽寮圭獥
-  const [registerModal, { closeModal }] = useModalInner(async (data) => {
-    uploadBinds.props = unref(data) || {};
-    if ([UploadTypeEnum.image, 'img', 'picture'].includes(uploadBinds.props?.fileType)) {
-      uploadBinds.props.fileType = UploadTypeEnum.image;
-    } else {
-      uploadBinds.props.fileType = UploadTypeEnum.file;
-    }
-    nextTick(() => uploadRef.value.addActionsListener());
-  });
-
-  function handleOk() {
-    closeModal();
-  }
-
-  function emitValue(value) {
-    emit('change', value);
-    emit('update:value', value);
-  }
-</script>
diff --git a/src/components/Form/src/jeecg/components/JUpload/components/UploadItemActions.vue b/src/components/Form/src/jeecg/components/JUpload/components/UploadItemActions.vue
deleted file mode 100644
index 61586ab..0000000
--- a/src/components/Form/src/jeecg/components/JUpload/components/UploadItemActions.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-<template>
-  <div v-show="download" class="upload-download-handler">
-    <a class="download" title="涓嬭浇" @click="onDownload">
-      <Icon icon="ant-design:download" />
-    </a>
-  </div>
-  <div v-show="mover && list.length > 1" class="upload-mover-handler">
-    <a title="鍚戝墠绉诲姩" @click="onMoveForward">
-      <Icon icon="ant-design:arrow-left" />
-    </a>
-    <a title="鍚戝悗绉诲姩" @click="onMoveBack">
-      <Icon icon="ant-design:arrow-right" />
-    </a>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { unref, computed } from 'vue';
-  import { Icon } from '/@/components/Icon';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const { createMessage } = useMessage();
-
-  const props = defineProps({
-    element: { type: HTMLElement, required: true },
-    fileList: { type: Object, required: true },
-    mover: { type: Boolean, required: true },
-    download: { type: Boolean, required: true },
-    emitValue: { type: Function, required: true },
-  });
-  const list = computed(() => unref(props.fileList));
-
-  // 鍚戝墠绉诲姩鍥剧墖
-  function onMoveForward() {
-    let index = getIndexByUrl();
-    if (index === -1) {
-      createMessage.warn('绉诲姩澶辫触锛�' + index);
-      return;
-    }
-    if (index === 0) {
-      doSwap(index, unref(list).length - 1);
-      return;
-    }
-    doSwap(index, index - 1);
-  }
-
-  // 鍚戝悗绉诲姩鍥剧墖
-  function onMoveBack() {
-    let index = getIndexByUrl();
-    if (index === -1) {
-      createMessage.warn('绉诲姩澶辫触锛�' + index);
-      return;
-    }
-    if (index == unref(list).length - 1) {
-      doSwap(index, 0);
-      return;
-    }
-    doSwap(index, index + 1);
-  }
-
-  function doSwap(oldIndex, newIndex) {
-    if (oldIndex !== newIndex) {
-      let array: any[] = [...(unref(list) as Array<any>)];
-      let temp = array[oldIndex];
-      array[oldIndex] = array[newIndex];
-      array[newIndex] = temp;
-      props.emitValue(array.map((i) => i.url).join(','));
-    }
-  }
-
-  function getIndexByUrl() {
-    const url = props.element?.getElementsByTagName('img')[0]?.src;
-    if (url) {
-      const fileList: any = unref(list);
-      for (let i = 0; i < fileList.length; i++) {
-        let current = fileList[i].url;
-        const replace = url.replace(window.location.origin, '');
-        if (current === replace || encodeURI(current) === replace) {
-          return i;
-        }
-      }
-    }
-    return -1;
-  }
-
-  function onDownload() {
-    const url = props.element?.getElementsByTagName('img')[0]?.src;
-    window.open(url);
-  }
-</script>
diff --git a/src/components/Form/src/jeecg/components/JUpload/index.ts b/src/components/Form/src/jeecg/components/JUpload/index.ts
deleted file mode 100644
index 740bf2d..0000000
--- a/src/components/Form/src/jeecg/components/JUpload/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export { UploadTypeEnum } from './upload.data';
-export { default as JUpload } from './JUpload.vue';
-export { default as JUploadModal } from './JUploadModal.vue';
diff --git a/src/components/Form/src/jeecg/components/JUpload/upload.data.ts b/src/components/Form/src/jeecg/components/JUpload/upload.data.ts
deleted file mode 100644
index 820146d..0000000
--- a/src/components/Form/src/jeecg/components/JUpload/upload.data.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export enum UploadTypeEnum {
-  all = 'all',
-  image = 'image',
-  file = 'file',
-}
diff --git a/src/components/Form/src/jeecg/components/base/JSelectBiz.vue b/src/components/Form/src/jeecg/components/base/JSelectBiz.vue
deleted file mode 100644
index 96f8de5..0000000
--- a/src/components/Form/src/jeecg/components/base/JSelectBiz.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-<template>
-  <div>
-    <a-row class="j-select-row" type="flex" :gutter="8">
-      <a-col class="left" :class="{ full: !showButton }">
-        <!-- 鏄剧ず鍔犺浇鏁堟灉 -->
-        <a-input v-if="loading" readOnly placeholder="鍔犺浇涓��">
-          <template #prefix>
-            <LoadingOutlined />
-          </template>
-        </a-input>
-        <a-select
-          v-else
-          ref="select"
-          v-model:value="selectValues.value"
-          :placeholder="placeholder"
-          :mode="multiple"
-          :open="false"
-          :disabled="disabled"
-          :options="options"
-          :maxTagCount="maxTagCount"
-          @change="handleChange"
-          style="width: 100%"
-          @click="!disabled && openModal(false)"
-          v-bind="attrs"
-        ></a-select>
-      </a-col>
-      <a-col v-if="showButton" class="right">
-        <a-button v-if="buttonIcon" :preIcon="buttonIcon" type="primary" @click="openModal(true)" :disabled="disabled">閫夋嫨</a-button>
-        <a-button v-else type="primary" @click="openModal(true)" :disabled="disabled">閫夋嫨</a-button>
-      </a-col>
-    </a-row>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, inject, reactive } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { LoadingOutlined } from '@ant-design/icons-vue';
-
-  export default defineComponent({
-    name: 'JSelectBiz',
-    components: { LoadingOutlined },
-    inheritAttrs: false,
-    props: {
-      showButton: propTypes.bool.def(true),
-      disabled: propTypes.bool.def(false),
-      placeholder: {
-        type: String,
-        default: '璇烽�夋嫨',
-      },
-      // 鏄惁鏀寔澶氶�夛紝榛樿 true
-      multiple: {
-        type: String,
-        default: 'multiple',
-      },
-      // 鏄惁姝e湪鍔犺浇
-      loading: propTypes.bool.def(false),
-      // 鏈�澶氭樉绀哄灏戜釜 tag
-      maxTagCount: propTypes.number,
-      // buttonIcon
-      buttonIcon: propTypes.string.def(''),
-    },
-    emits: ['handleOpen', 'change'],
-    setup(props, { emit, refs }) {
-      //鎺ユ敹涓嬫媺妗嗛�夐」
-      const options = inject('selectOptions') || ref([]);
-      //鎺ユ敹閫夋嫨鐨勫��
-      const selectValues = inject('selectValues') || ref({});
-      const attrs = useAttrs();
-
-      /**
-       * 鎵撳紑寮瑰嚭妗�
-       */
-      function openModal(isButton) {
-        if (props.showButton && isButton) {
-          emit('handleOpen');
-        }
-        if (!props.showButton && !isButton) {
-          emit('handleOpen');
-        }
-      }
-
-      /**
-       * 涓嬫媺妗嗗�兼敼鍙樹簨浠�
-       */
-      function handleChange(value) {
-        selectValues.value = value;
-        selectValues.change = true;
-        emit('change', value);
-      }
-
-      return {
-        attrs,
-        selectValues,
-        options,
-        handleChange,
-        openModal,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .j-select-row {
-    @width: 82px;
-
-    .left {
-      width: calc(100% - @width - 8px);
-    }
-
-    .right {
-      width: @width;
-    }
-
-    .full {
-      width: 100%;
-    }
-
-    :deep(.ant-select-search__field) {
-      display: none !important;
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/base/JTreeBiz.vue b/src/components/Form/src/jeecg/components/base/JTreeBiz.vue
deleted file mode 100644
index cd65c5f..0000000
--- a/src/components/Form/src/jeecg/components/base/JTreeBiz.vue
+++ /dev/null
@@ -1,91 +0,0 @@
-<template>
-  <div>
-    <a-row class="j-select-row" type="flex" :gutter="8">
-      <a-col class="left" :class="{ full: !showButton }">
-        <a-select
-          ref="select"
-          v-model:value="selectValues.value"
-          :mode="multiple"
-          :open="false"
-          :options="options"
-          @change="handleChange"
-          style="width: 100%"
-        />
-      </a-col>
-      <a-col v-if="showButton" class="right">
-        <a-button type="primary" @click="openModal">閫夋嫨</a-button>
-      </a-col>
-    </a-row>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, inject, reactive } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-
-  export default defineComponent({
-    name: 'JSelectBiz',
-    components: {},
-    inheritAttrs: false,
-    props: {
-      showButton: propTypes.bool.def(true),
-      // 鏄惁鏀寔澶氶�夛紝榛樿 true
-      multiple: {
-        type: Boolean,
-        default: 'multiple',
-      },
-    },
-    emits: ['btnOk'],
-    setup(props, { emit, refs }) {
-      //鎺ユ敹涓嬫媺妗嗛�夐」
-      const options = inject('selectOptions') || ref([]);
-      //鎺ユ敹閫夋嫨鐨勫��
-      const selectValues = inject('selectValues') || ref({});
-      const attrs = useAttrs();
-
-      /**
-       * 鎵撳紑寮瑰嚭妗�
-       */
-      function openModal() {
-        emit('btnOk');
-      }
-
-      /**
-       * 涓嬫媺妗嗗�兼敼鍙樹簨浠�
-       */
-      function handleChange(value) {
-        selectValues.value = value;
-        selectValues.change = true;
-      }
-
-      return {
-        attrs,
-        selectValues,
-        options,
-        handleChange,
-        openModal,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .j-select-row {
-    @width: 82px;
-
-    .left {
-      width: calc(100% - @width - 8px);
-    }
-
-    .right {
-      width: @width;
-    }
-
-    .full {
-      width: 100%;
-    }
-
-    :deep(.ant-select-search__field) {
-      display: none !important;
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/modal/DeptSelectModal.vue b/src/components/Form/src/jeecg/components/modal/DeptSelectModal.vue
deleted file mode 100644
index 4c569e5..0000000
--- a/src/components/Form/src/jeecg/components/modal/DeptSelectModal.vue
+++ /dev/null
@@ -1,120 +0,0 @@
-<!--閮ㄩ棬閫夋嫨妗�-->
-<template>
-  <div>
-    <BasicModal v-bind="$attrs" @register="register" :title="modalTitle" width="500px" @ok="handleOk" destroyOnClose @visible-change="visibleChange">
-      <BasicTree
-        ref="treeRef"
-        :treeData="treeData"
-        :load-data="sync == false ? null : onLoadData"
-        v-bind="getBindValue"
-        @select="onSelect"
-        @check="onCheck"
-        :fieldNames="fieldNames"
-        :checkedKeys="checkedKeys"
-        :checkStrictly="getCheckStrictly"
-      />
-      <!--鏍戞搷浣滈儴鍒�-->
-      <template #insertFooter>
-        <a-dropdown placement="top">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item v-if="multiple" key="1" @click="checkALL(true)">鍏ㄩ儴鍕鹃��</a-menu-item>
-              <a-menu-item v-if="multiple" key="2" @click="checkALL(false)">鍙栨秷鍏ㄩ��</a-menu-item>
-              <a-menu-item key="3" @click="expandAll(true)">灞曞紑鍏ㄩ儴</a-menu-item>
-              <a-menu-item key="4" @click="expandAll(false)">鎶樺彔鍏ㄩ儴</a-menu-item>
-            </a-menu>
-          </template>
-          <a-button style="float: left"> 鏍戞搷浣� <Icon icon="ant-design:up-outlined" /> </a-button>
-        </a-dropdown>
-      </template>
-    </BasicModal>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { queryDepartTreeSync, queryTreeList } from '/@/api/common/api';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { treeProps } from '/@/components/Form/src/jeecg/props/props';
-  import { BasicTree, TreeActionType } from '/@/components/Tree';
-  import { useTreeBiz } from '/@/components/Form/src/jeecg/hooks/useTreeBiz';
-  import {propTypes} from "/@/utils/propTypes";
-
-  export default defineComponent({
-    name: 'DeptSelectModal',
-    components: {
-      BasicModal,
-      BasicTree,
-    },
-    props: {
-      ...treeProps,
-      //閫夋嫨妗嗘爣棰�
-      modalTitle: {
-        type: String,
-        default: '閮ㄩ棬閫夋嫨',
-      },
-      value: propTypes.oneOfType([propTypes.string, propTypes.array])
-    },
-    emits: ['register', 'getSelectResult'],
-    setup(props, { emit, refs }) {
-      //娉ㄥ唽寮规
-      const [register, { closeModal }] = useModalInner();
-      const attrs = useAttrs();
-      const treeRef = ref<Nullable<TreeActionType>>(null);
-      
-      //update-begin-author:taoyan date:2022-10-28 for: 閮ㄩ棬閫夋嫨璀﹀憡绫诲瀷涓嶅尮閰�
-      let propValue = props.value === ''?[]:props.value;
-      const getBindValue = Object.assign({}, unref(props), unref(attrs), {value: propValue});
-      //update-end-author:taoyan date:2022-10-28 for: 閮ㄩ棬閫夋嫨璀﹀憡绫诲瀷涓嶅尮閰�
-      
-      const queryUrl = getQueryUrl();
-      const [{ visibleChange, checkedKeys, getCheckStrictly, getSelectTreeData, onCheck, onLoadData, treeData, checkALL, expandAll, onSelect }] =
-        useTreeBiz(treeRef, queryUrl, getBindValue);
-      const searchInfo = ref(props.params);
-      const tree = ref([]);
-      //鏇挎崲treeNode涓璳ey瀛楁涓簍reeData涓搴旂殑瀛楁
-      const fieldNames = {
-        key: props.rowKey,
-      };
-      // {children:'children', title:'title', key:'key' }
-      /**
-       * 纭畾閫夋嫨
-       */
-      function handleOk() {
-        getSelectTreeData((options, values) => {
-          //鍥炰紶閫夐」鍜屽凡閫夋嫨鐨勫��
-          emit('getSelectResult', options, values);
-          //鍏抽棴寮圭獥
-          closeModal();
-        });
-      }
-
-      /** 鑾峰彇鏌ヨ鏁版嵁鏂规硶 */
-      function getQueryUrl() {
-        let queryFn = props.sync ? queryDepartTreeSync : queryTreeList;
-        //update-begin-author:taoyan date:2022-7-4 for: issues/I5F3P4 online閰嶇疆閮ㄩ棬閫夋嫨鍚庣紪杈戯紝鏌ョ湅鏁版嵁搴旇鏄剧ず閮ㄩ棬鍚嶇О锛屼笉鏄儴闂ㄤ唬鐮�
-        return (params) => queryFn(Object.assign({}, params, { primaryKey: props.rowKey }));
-        //update-end-author:taoyan date:2022-7-4 for: issues/I5F3P4 online閰嶇疆閮ㄩ棬閫夋嫨鍚庣紪杈戯紝鏌ョ湅鏁版嵁搴旇鏄剧ず閮ㄩ棬鍚嶇О锛屼笉鏄儴闂ㄤ唬鐮�
-      }
-
-      return {
-        tree,
-        handleOk,
-        searchInfo,
-        treeRef,
-        treeData,
-        onCheck,
-        onSelect,
-        checkALL,
-        expandAll,
-        fieldNames,
-        checkedKeys,
-        register,
-        getBindValue,
-        getCheckStrictly,
-        visibleChange,
-        onLoadData,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/modal/JPopupOnlReportModal.vue b/src/components/Form/src/jeecg/components/modal/JPopupOnlReportModal.vue
deleted file mode 100644
index 2ddcc9d..0000000
--- a/src/components/Form/src/jeecg/components/modal/JPopupOnlReportModal.vue
+++ /dev/null
@@ -1,284 +0,0 @@
-<template>
-  <!--popup閫夋嫨妗�-->
-  <div>
-    <BasicModal
-      v-bind="$attrs"
-      @register="register"
-      :title="title"
-      :width="1200"
-      @ok="handleSubmit"
-      @cancel="handleCancel"
-      cancelText="鍏抽棴"
-      wrapClassName="j-popup-modal"
-      @visible-change="visibleChange"
-    >
-      <div class="jeecg-basic-table-form-container" v-if="showSearchFlag">
-        <a-form ref="formRef" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol" @keyup.enter.native="searchQuery">
-          <a-row :gutter="24">
-            <template v-for="(item, index) in queryInfo">
-              <template v-if="item.hidden === '1'">
-                <a-col :md="8" :sm="24" :key="'query' + index" v-show="toggleSearchStatus">
-                  <SearchFormItem :formElRef="formRef" :queryParam="queryParam" :item="item" :dictOptions="dictOptions"></SearchFormItem>
-                </a-col>
-              </template>
-              <template v-else>
-                <a-col :md="8" :sm="24" :key="'query' + index">
-                  <SearchFormItem :formElRef="formRef" :queryParam="queryParam" :item="item" :dictOptions="dictOptions"></SearchFormItem>
-                </a-col>
-              </template>
-            </template>
-
-            <a-col :md="8" :sm="8">
-              <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
-                <a-col :lg="6">
-                  <a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset">閲嶇疆</a-button>
-                  <a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery" style="margin-left: 8px">鏌ヨ</a-button>
-                  <a @click="handleToggleSearch" style="margin-left: 8px">
-                    {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
-                    <Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
-                  </a>
-                </a-col>
-              </span>
-            </a-col>
-          </a-row>
-        </a-form>
-      </div>
-
-      <BasicTable
-        ref="tableRef"
-        :canResize="false"
-        :bordered="true"
-        :loading="loading"
-        :rowKey="combineRowKey"
-        :columns="columns"
-        :showIndexColumn="false"
-        :dataSource="dataSource"
-        :pagination="pagination"
-        :rowSelection="rowSelection"
-        @row-click="clickThenCheck"
-        @change="handleChangeInTable"
-      >
-        <template #tableTitle></template>
-      </BasicTable>
-    </BasicModal>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent, unref, ref, watch, watchEffect, reactive, computed } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { usePopBiz } from '/@/components/jeecg/OnLine/hooks/usePopBiz';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  export default defineComponent({
-    name: 'JPopupOnlReportModal',
-    components: {
-      //姝ゅ闇�瑕佸紓姝ュ姞杞紹asicTable
-      BasicModal,
-      SearchFormItem: createAsyncComponent(() => import('/@/components/jeecg/OnLine/SearchFormItem.vue'), { loading: false }),
-      BasicTable: createAsyncComponent(() => import('/@/components/Table/src/BasicTable.vue'), {
-        loading: true,
-      }),
-    },
-    props: ['multi', 'code', 'sorter', 'groupId', 'param'],
-    emits: ['ok', 'register'],
-    setup(props, { emit, refs }) {
-      const { createMessage } = useMessage();
-      const labelCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 6 },
-      });
-      const wrapperCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 18 },
-      });
-      //娉ㄥ唽寮规
-      const [register, { closeModal }] = useModalInner();
-      const formRef = ref();
-      const tableRef = ref();
-      const toggleSearchStatus = ref(false);
-      const attrs = useAttrs();
-      const tableScroll = ref({ x: true });
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
-      const [
-        {
-          visibleChange,
-          loadColumnsInfo,
-          dynamicParamHandler,
-          loadData,
-          handleChangeInTable,
-          combineRowKey,
-          clickThenCheck,
-          filterUnuseSelect,
-          getOkSelectRows,
-        },
-        {
-          visible,
-          rowSelection,
-          checkedKeys,
-          selectRows,
-          pagination,
-          dataSource,
-          columns,
-          loading,
-          title,
-          iSorter,
-          queryInfo,
-          queryParam,
-          dictOptions,
-        },
-      ] = usePopBiz(getBindValue);
-
-      const showSearchFlag = computed(() => unref(queryInfo) && unref(queryInfo).length > 0);
-      /**
-       *鐩戝惉code
-       */
-      watch(
-        () => props.code,
-        () => {
-          loadColumnsInfo();
-        }
-      );
-      /**
-       *鐩戝惉popup鍔ㄦ�佸弬鏁� 鏀寔绯荤粺鍙橀噺璇硶
-       */
-      watch(
-        () => props.param,
-        () => {
-          if (visible) {
-            dynamicParamHandler();
-            loadData();
-          }
-        }
-      );
-      /**
-       *鐩戝惉sorter鎺掑簭瀛楁
-       */
-      watchEffect(() => {
-        if (props.sorter) {
-          let arr = props.sorter.split('=');
-          if (arr.length === 2 && ['asc', 'desc'].includes(arr[1].toLowerCase())) {
-            iSorter.value = { column: arr[0], order: arr[1].toLowerCase() };
-            // 鎺掑簭瀛楁鍙楁帶
-            unref(columns).forEach((col) => {
-              if (col.dataIndex === unref(iSorter).column) {
-                col['sortOrder'] = unref(iSorter).order === 'asc' ? 'ascend' : 'descend';
-              } else {
-                col['sortOrder'] = false;
-              }
-            });
-          } else {
-            console.warn('銆怞Popup銆憇orter鍙傛暟涓嶅悎娉�');
-          }
-        }
-      });
-
-      //update-begin-author:taoyan date:2022-5-31 for: VUEN-1156 popup 澶氭暟鎹湁鍒嗛〉鏃讹紝閫変腑鍏朵粬椤碉紝鍏抽棴popup 鍐嶇偣寮�锛屽垎椤典粛鐒堕�変腑涓婁竴娆$偣鍑荤殑鍒嗛〉锛屼絾鏁版嵁鏄涓�椤电殑鏁版嵁 鏈埛鏂�
-      watch(
-        () => pagination.current,
-        (current) => {
-          if (current) {
-            tableRef.value.setPagination({
-              current: current,
-            });
-          }
-        }
-      );
-      //update-end-author:taoyan date:2022-5-31 for: VUEN-1156 popup 澶氭暟鎹湁鍒嗛〉鏃讹紝閫変腑鍏朵粬椤碉紝鍏抽棴popup 鍐嶇偣寮�锛屽垎椤典粛鐒堕�変腑涓婁竴娆$偣鍑荤殑鍒嗛〉锛屼絾鏁版嵁鏄涓�椤电殑鏁版嵁 鏈埛鏂�
-
-      function handleToggleSearch() {
-        toggleSearchStatus.value = !unref(toggleSearchStatus);
-      }
-      /**
-       * 鍙栨秷/鍏抽棴
-       */
-      function handleCancel() {
-        closeModal();
-        checkedKeys.value = [];
-        selectRows.value = [];
-      }
-
-      /**
-       *纭鎻愪氦
-       */
-      function handleSubmit() {
-        filterUnuseSelect();
-        if (!props.multi && unref(selectRows) && unref(selectRows).length > 1) {
-          createMessage.warning('鍙兘閫夋嫨涓�鏉¤褰�');
-          return false;
-        }
-        if (!unref(selectRows) || unref(selectRows).length == 0) {
-          createMessage.warning('鑷冲皯閫夋嫨涓�鏉¤褰�');
-          return false;
-        }
-        //update-begin-author:taoyan date:2022-5-31 for: VUEN-1155 popup 閫夋嫨鏁版嵁鏃讹紝浼氶�夋嫨澶氭潯閲嶅鏁版嵁
-        let rows = getOkSelectRows!();
-        emit('ok', rows);
-        //update-end-author:taoyan date:2022-5-31 for: VUEN-1155 popup 閫夋嫨鏁版嵁鏃讹紝浼氶�夋嫨澶氭潯閲嶅鏁版嵁
-        handleCancel();
-      }
-
-      /**
-       * 鏌ヨ
-       */
-      function searchQuery() {
-        loadData(1);
-      }
-      /**
-       * 閲嶇疆
-       */
-      function searchReset() {
-        queryParam.value = {};
-        loadData(1);
-      }
-      return {
-        attrs,
-        register,
-        tableScroll,
-        dataSource,
-        pagination,
-        columns,
-        rowSelection,
-        checkedKeys,
-        loading,
-        title,
-        handleCancel,
-        handleSubmit,
-        clickThenCheck,
-        loadData,
-        combineRowKey,
-        handleChangeInTable,
-        visibleChange,
-        queryInfo,
-        queryParam,
-        tableRef,
-        formRef,
-        labelCol,
-        wrapperCol,
-        dictOptions,
-        showSearchFlag,
-        toggleSearchStatus,
-        handleToggleSearch,
-        searchQuery,
-        searchReset,
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .jeecg-basic-table-form-container {
-    padding: 5px;
-
-    .table-page-search-submitButtons {
-      display: block;
-      margin-bottom: 0;
-      white-space: nowrap;
-    }
-  }
-  :deep .jeecg-basic-table .ant-table-wrapper .ant-table-title {
-    min-height: 0;
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/modal/PositionSelectModal.vue b/src/components/Form/src/jeecg/components/modal/PositionSelectModal.vue
deleted file mode 100644
index 1103607..0000000
--- a/src/components/Form/src/jeecg/components/modal/PositionSelectModal.vue
+++ /dev/null
@@ -1,182 +0,0 @@
-<!--鑱屽姟閫夋嫨妗�-->
-<template>
-  <div>
-    <BasicModal
-      v-bind="$attrs"
-      @register="register"
-      :title="modalTitle"
-      width="900px"
-      wrapClassName="j-user-select-modal"
-      @ok="handleOk"
-      destroyOnClose
-      @visible-change="visibleChange"
-    >
-      <a-row>
-        <a-col :span="showSelected ? 18 : 24">
-          <BasicTable
-            :columns="columns"
-            :bordered="true"
-            :useSearchForm="true"
-            :formConfig="formConfig"
-            :api="getPositionList"
-            :searchInfo="searchInfo"
-            :rowSelection="rowSelection"
-            :indexColumnProps="indexColumnProps"
-            v-bind="getBindValue"
-          ></BasicTable>
-        </a-col>
-        <a-col :span="showSelected ? 6 : 0">
-          <BasicTable
-            v-bind="selectedTable"
-            :dataSource="selectRows"
-            :useSearchForm="true"
-            :formConfig="{ showActionButtonGroup: false, baseRowStyle: { minHeight: '40px' } }"
-          >
-            <!--鎿嶄綔鏍�-->
-            <template #action="{ record }">
-              <a href="javascript:void(0)" @click="handleDeleteSelected(record)"><Icon icon="ant-design:delete-outlined"></Icon></a>
-            </template>
-          </BasicTable>
-        </a-col>
-      </a-row>
-    </BasicModal>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { getPositionList } from '/@/api/common/api';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-  import { useSelectBiz } from '/@/components/Form/src/jeecg/hooks/useSelectBiz';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { selectProps } from '/@/components/Form/src/jeecg/props/props';
-
-  export default defineComponent({
-    name: 'PositionSelectModal',
-    components: {
-      //姝ゅ闇�瑕佸紓姝ュ姞杞紹asicTable
-      BasicModal,
-      BasicTable: createAsyncComponent(() => import('/@/components/Table/src/BasicTable.vue'), {
-        loading: true,
-      }),
-    },
-    props: {
-      ...selectProps,
-      //閫夋嫨妗嗘爣棰�
-      modalTitle: {
-        type: String,
-        default: '鑱屽姟閫夋嫨',
-      },
-    },
-    emits: ['register', 'getSelectResult'],
-    setup(props, { emit, refs }) {
-      //娉ㄥ唽寮规
-      const [register, { closeModal }] = useModalInner();
-      const attrs = useAttrs();
-      //琛ㄦ牸閰嶇疆
-      const config = {
-        canResize: false,
-        bordered: true,
-        size: 'small',
-        rowKey: 'code',
-      };
-      const getBindValue = Object.assign({}, unref(props), unref(attrs), config);
-      const [{ rowSelection, visibleChange, indexColumnProps, getSelectResult, handleDeleteSelected, selectRows }] = useSelectBiz(
-        getPositionList,
-        getBindValue
-      );
-      const searchInfo = ref(props.params);
-      //鏌ヨform
-      const formConfig = {
-        labelCol: {
-          span: 8,
-        },
-        baseColProps: {
-          xs: 24,
-          sm: 10,
-          md: 10,
-          lg: 10,
-          xl: 10,
-          xxl: 10,
-        },
-        schemas: [
-          {
-            label: '鑱屽姟鍚嶇О',
-            field: 'name',
-            component: 'JInput',
-            colProps: { span: 10 },
-          },
-        ],
-      };
-      //瀹氫箟琛ㄦ牸鍒�
-      const columns = [
-        {
-          title: '鑱屽姟缂栫爜',
-          dataIndex: 'code',
-          width: 40,
-          align: 'left',
-        },
-        {
-          title: '鑱屽姟鍚嶇О',
-          dataIndex: 'name',
-          width: 40,
-        },
-        {
-          title: '鑱屽姟绛夌骇',
-          dataIndex: 'postRank_dictText',
-          width: 40,
-        },
-      ];
-      //宸查�夋嫨鐨則able淇℃伅
-      const selectedTable = {
-        pagination: false,
-        showIndexColumn: false,
-        scroll: { y: 390 },
-        size: 'small',
-        canResize: false,
-        bordered: true,
-        rowKey: 'id',
-        columns: [
-          {
-            title: '鑱屽姟鍚嶇О',
-            dataIndex: 'name',
-            width: 40,
-          },
-          {
-            title: '鎿嶄綔',
-            dataIndex: 'action',
-            align: 'center',
-            width: 40,
-            slots: { customRender: 'action' },
-          },
-        ],
-      };
-      /**
-       * 纭畾閫夋嫨
-       */
-      function handleOk() {
-        getSelectResult((options, values) => {
-          //鍥炰紶閫夐」鍜屽凡閫夋嫨鐨勫��
-          emit('getSelectResult', options, values);
-          //鍏抽棴寮圭獥
-          closeModal();
-        });
-      }
-      return {
-        handleOk,
-        getPositionList,
-        register,
-        visibleChange,
-        getBindValue,
-        formConfig,
-        indexColumnProps,
-        columns,
-        rowSelection,
-
-        selectedTable,
-        selectRows,
-        handleDeleteSelected,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/modal/RoleSelectModal.vue b/src/components/Form/src/jeecg/components/modal/RoleSelectModal.vue
deleted file mode 100644
index c5a1024..0000000
--- a/src/components/Form/src/jeecg/components/modal/RoleSelectModal.vue
+++ /dev/null
@@ -1,120 +0,0 @@
-<!--瑙掕壊閫夋嫨妗�-->
-<template>
-  <div>
-    <BasicModal v-bind="$attrs" @register="register" :title="modalTitle" width="800px" @ok="handleOk" destroyOnClose @visible-change="visibleChange">
-      <BasicTable
-        :columns="columns"
-        v-bind="config"
-        :useSearchForm="true"
-        :formConfig="formConfig"
-        :api="getRoleList"
-        :searchInfo="searchInfo"
-        :rowSelection="rowSelection"
-        :indexColumnProps="indexColumnProps"
-      ></BasicTable>
-    </BasicModal>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { getRoleList } from '/@/api/common/api';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-  import { useSelectBiz } from '/@/components/Form/src/jeecg/hooks/useSelectBiz';
-  import { selectProps } from '/@/components/Form/src/jeecg/props/props';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-
-  export default defineComponent({
-    name: 'UserSelectModal',
-    components: {
-      //姝ゅ闇�瑕佸紓姝ュ姞杞紹asicTable
-      BasicModal,
-      BasicTable: createAsyncComponent(() => import('/@/components/Table/src/BasicTable.vue'), {
-        loading: true,
-      }),
-    },
-    props: {
-      ...selectProps,
-      //閫夋嫨妗嗘爣棰�
-      modalTitle: {
-        type: String,
-        default: '瑙掕壊閫夋嫨',
-      },
-    },
-    emits: ['register', 'getSelectResult'],
-    setup(props, { emit, refs }) {
-      //娉ㄥ唽寮规
-      const [register, { closeModal }] = useModalInner();
-      const attrs = useAttrs();
-      //琛ㄦ牸閰嶇疆
-      const config = {
-        canResize: false,
-        bordered: true,
-        size: 'small',
-        rowKey: unref(props).rowKey,
-      };
-      const getBindValue = Object.assign({}, unref(props), unref(attrs), config);
-      const [{ rowSelection, indexColumnProps, visibleChange, getSelectResult }] = useSelectBiz(getRoleList, getBindValue);
-      const searchInfo = ref(props.params);
-      //鏌ヨform
-      const formConfig = {
-        //labelWidth: 220,
-        baseColProps: {
-          xs: 24,
-          sm: 24,
-          md: 24,
-          lg: 14,
-          xl: 14,
-          xxl: 14,
-        },
-        schemas: [
-          {
-            label: '瑙掕壊鍚嶇О',
-            field: 'roleName',
-            component: 'JInput',
-          },
-        ],
-      };
-      //瀹氫箟琛ㄦ牸鍒�
-      const columns = [
-        {
-          title: '瑙掕壊鍚嶇О',
-          dataIndex: 'roleName',
-          width: 40,
-          align: 'left',
-        },
-        {
-          title: '瑙掕壊缂栫爜',
-          dataIndex: 'roleCode',
-          width: 40,
-        },
-      ];
-
-      /**
-       * 纭畾閫夋嫨
-       */
-      function handleOk() {
-        getSelectResult((options, values) => {
-          //鍥炰紶閫夐」鍜屽凡閫夋嫨鐨勫��
-          emit('getSelectResult', options, values);
-          //鍏抽棴寮圭獥
-          closeModal();
-        });
-      }
-
-      return {
-        config,
-        handleOk,
-        searchInfo,
-        register,
-        indexColumnProps,
-        visibleChange,
-        getRoleList,
-        formConfig,
-        getBindValue,
-        columns,
-        rowSelection,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/modal/UserSelectByDepModal.vue b/src/components/Form/src/jeecg/components/modal/UserSelectByDepModal.vue
deleted file mode 100644
index 5ce39fc..0000000
--- a/src/components/Form/src/jeecg/components/modal/UserSelectByDepModal.vue
+++ /dev/null
@@ -1,214 +0,0 @@
-<!--閫氳繃閮ㄩ棬閫夋嫨鐢ㄦ埛-->
-<template>
-  <BasicModal v-bind="$attrs" @register="register" :title="modalTitle" width="1200px" @ok="handleOk" destroyOnClose @visible-change="visibleChange">
-    <a-row :gutter="10">
-      <a-col :md="7" :sm="24">
-        <a-card :style="{ minHeight: '613px', overflow: 'auto' }">
-          <!--缁勭粐鏈烘瀯-->
-          <BasicTree
-            ref="treeRef"
-            :style="{ minWidth: '250px' }"
-            selectable
-            @select="onDepSelect"
-            :load-data="loadChildrenTreeData"
-            :treeData="departTree"
-            :selectedKeys="selectedDepIds"
-            :expandedKeys="expandedKeys"
-            :clickRowToExpand="false"
-          ></BasicTree>
-        </a-card>
-      </a-col>
-      <a-col :md="17" :sm="24">
-        <a-card :style="{ minHeight: '613px', overflow: 'auto' }">
-          <!--鐢ㄦ埛鍒楄〃-->
-          <BasicTable ref="tableRef" v-bind="getBindValue" :searchInfo="searchInfo" :api="getTableList" :rowSelection="rowSelection"></BasicTable>
-        </a-card>
-      </a-col>
-    </a-row>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, unref, ref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicTree } from '/@/components/Tree/index';
-  import { queryTreeList, getTableList } from '/@/api/common/api';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-  import { useSelectBiz } from '/@/components/Form/src/jeecg/hooks/useSelectBiz';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { queryDepartTreeSync } from '/@/views/system/depart/depart.api';
-  import { selectProps } from '/@/components/Form/src/jeecg/props/props';
-  export default defineComponent({
-    name: 'UserSelectByDepModal',
-    components: {
-      //姝ゅ闇�瑕佸紓姝ュ姞杞紹asicTable
-      BasicModal,
-      BasicTree,
-      BasicTable: createAsyncComponent(() => import('/@/components/Table/src/BasicTable.vue'), {
-        loading: true,
-      }),
-    },
-    props: {
-      ...selectProps,
-      //閫夋嫨妗嗘爣棰�
-      modalTitle: {
-        type: String,
-        default: '閮ㄩ棬鐢ㄦ埛閫夋嫨',
-      },
-    },
-    emits: ['register', 'getSelectResult'],
-    setup(props, { emit, refs }) {
-      const tableRef = ref();
-      const treeRef = ref();
-      //娉ㄥ唽寮规
-      const [register, { closeModal }] = useModalInner(async (data) => {
-        await queryDepartTree();
-      });
-      const attrs = useAttrs();
-      const departTree = ref([]);
-      const selectedDepIds = ref([]);
-      const expandedKeys = ref([]);
-      const searchInfo = {};
-      /**
-       *琛ㄦ牸閰嶇疆
-       */
-      const tableProps = {
-        columns: [
-          {
-            title: '鐢ㄦ埛璐﹀彿',
-            dataIndex: 'username',
-            width: 50,
-          },
-          {
-            title: '鐢ㄦ埛濮撳悕',
-            dataIndex: 'realname',
-            width: 50,
-          },
-          {
-            title: '鎬у埆',
-            dataIndex: 'sex_dictText',
-            width: 50,
-          },
-          {
-            title: '鎵嬫満鍙风爜',
-            dataIndex: 'phone',
-            width: 50,
-          },
-        ],
-        useSearchForm: true,
-        canResize: false,
-        showIndexColumn: false,
-        striped: true,
-        bordered: true,
-        size: 'small',
-        formConfig: {
-          //labelWidth: 200,
-          baseColProps: {
-            xs: 24,
-            sm: 8,
-            md: 6,
-            lg: 8,
-            xl: 6,
-            xxl: 10,
-          },
-          schemas: [
-            {
-              label: '璐﹀彿',
-              field: 'username',
-              component: 'Input',
-            },
-          ],
-          resetFunc: customResetFunc,
-        },
-      };
-      const getBindValue = Object.assign({}, unref(props), unref(attrs), tableProps);
-      const [{ rowSelection, visibleChange, indexColumnProps, getSelectResult, reset }] = useSelectBiz(getTableList, getBindValue);
-      /**
-       * 鍔犺浇鏍戝舰鏁版嵁
-       */
-      function queryDepartTree() {
-        queryDepartTreeSync().then((res) => {
-          if (res) {
-            departTree.value = res;
-            // 榛樿灞曞紑鐖惰妭鐐�
-            //expandedKeys.value = unref(departTree).map(item => item.id)
-          }
-        });
-      }
-      /**
-       * 鍔犺浇瀛愮骇閮ㄩ棬
-       */
-      async function loadChildrenTreeData(treeNode) {
-        try {
-          const result = await queryDepartTreeSync({
-            pid: treeNode.eventKey,
-          });
-          const asyncTreeAction = unref(treeRef);
-          if (asyncTreeAction) {
-            asyncTreeAction.updateNodeByKey(treeNode.eventKey, { children: result });
-            asyncTreeAction.setExpandedKeys([treeNode.eventKey, ...asyncTreeAction.getExpandedKeys()]);
-          }
-        } catch (e) {
-          console.error(e);
-        }
-        return Promise.resolve();
-      }
-      /**
-       * 鐐瑰嚮鏍戣妭鐐�,绛涢�夊嚭瀵瑰簲鐨勭敤鎴�
-       */
-      function onDepSelect(keys) {
-        if (keys[0] != null) {
-          if (unref(selectedDepIds)[0] !== keys[0]) {
-            selectedDepIds.value = [keys[0]];
-          }
-          searchInfo['departId'] = unref(selectedDepIds).join(',');
-          tableRef.value.reload();
-        }
-      }
-      /**
-       * 鑷畾涔夐噸缃柟娉�
-       * */
-      async function customResetFunc() {
-        console.log('鑷畾涔夋煡璇�');
-        //鏍戣妭鐐规竻绌�
-        selectedDepIds.value = [];
-        //鏌ヨ鏉′欢娓呯┖
-        searchInfo['departId'] = '';
-        //閫夋嫨椤规竻绌�
-        reset();
-      }
-      /**
-       * 纭畾閫夋嫨
-       */
-      function handleOk() {
-        getSelectResult((options, values) => {
-          //鍥炰紶閫夐」鍜屽凡閫夋嫨鐨勫��
-          emit('getSelectResult', options, values);
-          //鍏抽棴寮圭獥
-          closeModal();
-        });
-      }
-
-      return {
-        //config,
-        handleOk,
-        searchInfo,
-        register,
-        indexColumnProps,
-        visibleChange,
-        getBindValue,
-        rowSelection,
-
-        departTree,
-        selectedDepIds,
-        expandedKeys,
-        treeRef,
-        tableRef,
-        getTableList,
-        onDepSelect,
-        loadChildrenTreeData,
-      };
-    },
-  });
-</script>
-
-<style scoped lang="less"></style>
diff --git a/src/components/Form/src/jeecg/components/modal/UserSelectModal.vue b/src/components/Form/src/jeecg/components/modal/UserSelectModal.vue
deleted file mode 100644
index 673e312..0000000
--- a/src/components/Form/src/jeecg/components/modal/UserSelectModal.vue
+++ /dev/null
@@ -1,233 +0,0 @@
-<!--鐢ㄦ埛閫夋嫨妗�-->
-<template>
-  <div>
-    <BasicModal
-      v-bind="$attrs"
-      @register="register"
-      :title="modalTitle"
-      width="900px"
-      wrapClassName="j-user-select-modal"
-      @ok="handleOk"
-      destroyOnClose
-      @visible-change="visibleChange"
-    >
-      <a-row>
-        <a-col :span="showSelected ? 18 : 24">
-          <BasicTable
-            ref="tableRef"
-            :columns="columns"
-            :scroll="tableScroll"
-            v-bind="getBindValue"
-            :useSearchForm="true"
-            :formConfig="formConfig"
-            :api="getUserList"
-            :searchInfo="searchInfo"
-            :rowSelection="rowSelection"
-            :indexColumnProps="indexColumnProps"
-          >
-            <!-- update-begin-author:taoyan date:2022-5-25 for: VUEN-1112涓�瀵瑰 鐢ㄦ埛閫夋嫨 鏈樉绀洪�夋嫨鏉℃暟锛屽強娓呯┖ -->
-            <template #tableTitle></template>
-            <!-- update-end-author:taoyan date:2022-5-25 for: VUEN-1112涓�瀵瑰 鐢ㄦ埛閫夋嫨 鏈樉绀洪�夋嫨鏉℃暟锛屽強娓呯┖ -->
-          </BasicTable>
-        </a-col>
-        <a-col :span="showSelected ? 6 : 0">
-          <BasicTable
-            v-bind="selectedTable"
-            :dataSource="selectRows"
-            :useSearchForm="true"
-            :formConfig="{ showActionButtonGroup: false, baseRowStyle: { minHeight: '40px' } }"
-          >
-            <!--鎿嶄綔鏍�-->
-            <template #action="{ record }">
-              <a href="javascript:void(0)" @click="handleDeleteSelected(record)"><Icon icon="ant-design:delete-outlined"></Icon></a>
-            </template>
-          </BasicTable>
-        </a-col>
-      </a-row>
-    </BasicModal>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, unref, ref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { getUserList } from '/@/api/common/api';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-  import { useSelectBiz } from '/@/components/Form/src/jeecg/hooks/useSelectBiz';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { selectProps } from '/@/components/Form/src/jeecg/props/props';
-
-  export default defineComponent({
-    name: 'UserSelectModal',
-    components: {
-      //姝ゅ闇�瑕佸紓姝ュ姞杞紹asicTable
-      BasicModal,
-      BasicTable: createAsyncComponent(() => import('/@/components/Table/src/BasicTable.vue'), {
-        loading: true,
-      }),
-    },
-    props: {
-      ...selectProps,
-      //閫夋嫨妗嗘爣棰�
-      modalTitle: {
-        type: String,
-        default: '閫夋嫨鐢ㄦ埛',
-      },
-    },
-    emits: ['register', 'getSelectResult'],
-    setup(props, { emit, refs }) {
-      // update-begin-author:taoyan date:2022-5-24 for: VUEN-1086 銆愮Щ鍔ㄧ銆戠敤鎴烽�夋嫨 鏌ヨ鎸夐挳 鏁堟灉涓嶅ソ 鍒楄〃灞曠ず娌℃湁婊氬姩鏉�
-      const tableScroll = ref<any>({ x: false });
-      const tableRef = ref();
-      //娉ㄥ唽寮规
-      const [register, { closeModal }] = useModalInner(() => {
-        if (window.innerWidth < 900) {
-          tableScroll.value = { x: 900 };
-        } else {
-          tableScroll.value = { x: false };
-        }
-        //update-begin-author:taoyan date:2022-6-2 for: VUEN-1112 涓�瀵瑰 鐢ㄦ埛閫夋嫨 鏈樉绀洪�夋嫨鏉℃暟锛屽強娓呯┖
-        setTimeout(() => {
-          if (tableRef.value) {
-            tableRef.value.setSelectedRowKeys(selectValues['value'] || []);
-          }
-        }, 800);
-        //update-end-author:taoyan date:2022-6-2 for: VUEN-1112 涓�瀵瑰 鐢ㄦ埛閫夋嫨 鏈樉绀洪�夋嫨鏉℃暟锛屽強娓呯┖
-      });
-      // update-end-author:taoyan date:2022-5-24 for: VUEN-1086 銆愮Щ鍔ㄧ銆戠敤鎴烽�夋嫨 鏌ヨ鎸夐挳 鏁堟灉涓嶅ソ 鍒楄〃灞曠ず娌℃湁婊氬姩鏉�
-      const attrs = useAttrs();
-      //琛ㄦ牸閰嶇疆
-      const config = {
-        canResize: false,
-        bordered: true,
-        size: 'small',
-      };
-      const getBindValue = Object.assign({}, unref(props), unref(attrs), config);
-      const [{ rowSelection, visibleChange, selectValues, indexColumnProps, getSelectResult, handleDeleteSelected, selectRows }] = useSelectBiz(
-        getUserList,
-        getBindValue
-      );
-      const searchInfo = ref(props.params);
-      //鏌ヨform
-      const formConfig = {
-        baseColProps: {
-          xs: 24,
-          sm: 8,
-          md: 6,
-          lg: 8,
-          xl: 6,
-          xxl: 6,
-        },
-        //update-begin-author:taoyan date:2022-5-24 for: VUEN-1086 銆愮Щ鍔ㄧ銆戠敤鎴烽�夋嫨 鏌ヨ鎸夐挳 鏁堟灉涓嶅ソ 鍒楄〃灞曠ず娌℃湁婊氬姩鏉�---鏌ヨ琛ㄥ崟鎸夐挳鐨勬爡鏍煎竷灞�鍜岃〃鍗曠殑淇濇寔涓�鑷�
-        actionColOptions: {
-          xs: 24,
-          sm: 8,
-          md: 8,
-          lg: 8,
-          xl: 8,
-          xxl: 8,
-        },
-        //update-end-author:taoyan date:2022-5-24 for: VUEN-1086 銆愮Щ鍔ㄧ銆戠敤鎴烽�夋嫨 鏌ヨ鎸夐挳 鏁堟灉涓嶅ソ 鍒楄〃灞曠ず娌℃湁婊氬姩鏉�---鏌ヨ琛ㄥ崟鎸夐挳鐨勬爡鏍煎竷灞�鍜岃〃鍗曠殑淇濇寔涓�鑷�
-        schemas: [
-          {
-            label: '璐﹀彿',
-            field: 'username',
-            component: 'JInput',
-          },
-          {
-            label: '濮撳悕',
-            field: 'realname',
-            component: 'JInput',
-          },
-        ],
-      };
-      //瀹氫箟琛ㄦ牸鍒�
-      const columns = [
-        {
-          title: '鐢ㄦ埛璐﹀彿',
-          dataIndex: 'username',
-          width: 40,
-          align: 'left',
-        },
-        {
-          title: '鐢ㄦ埛濮撳悕',
-          dataIndex: 'realname',
-          width: 40,
-        },
-        {
-          title: '鎬у埆',
-          dataIndex: 'sex_dictText',
-          width: 20,
-        },
-        {
-          title: '鎵嬫満鍙风爜',
-          dataIndex: 'phone',
-          width: 30,
-        },
-        {
-          title: '閭',
-          dataIndex: 'email',
-          width: 40,
-        },
-        {
-          title: '鐘舵��',
-          dataIndex: 'status_dictText',
-          width: 20,
-        },
-      ];
-      //宸查�夋嫨鐨則able淇℃伅
-      const selectedTable = {
-        pagination: false,
-        showIndexColumn: false,
-        scroll: { y: 390 },
-        size: 'small',
-        canResize: false,
-        bordered: true,
-        rowKey: 'id',
-        columns: [
-          {
-            title: '鐢ㄦ埛濮撳悕',
-            dataIndex: 'realname',
-            width: 40,
-          },
-          {
-            title: '鎿嶄綔',
-            dataIndex: 'action',
-            align: 'center',
-            width: 40,
-            slots: { customRender: 'action' },
-          },
-        ],
-      };
-      /**
-       * 纭畾閫夋嫨
-       */
-      function handleOk() {
-        getSelectResult((options, values) => {
-          //鍥炰紶閫夐」鍜屽凡閫夋嫨鐨勫��
-          emit('getSelectResult', options, values);
-          //鍏抽棴寮圭獥
-          closeModal();
-        });
-      }
-
-      return {
-        //config,
-        handleOk,
-        searchInfo,
-        register,
-        indexColumnProps,
-        visibleChange,
-        getBindValue,
-        getUserList,
-        formConfig,
-        columns,
-        rowSelection,
-        selectRows,
-        selectedTable,
-        handleDeleteSelected,
-        tableScroll,
-        tableRef,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Form/src/jeecg/components/positionSelect/PositionSelectModal.vue b/src/components/Form/src/jeecg/components/positionSelect/PositionSelectModal.vue
deleted file mode 100644
index 88866c1..0000000
--- a/src/components/Form/src/jeecg/components/positionSelect/PositionSelectModal.vue
+++ /dev/null
@@ -1,282 +0,0 @@
-<template>
-    <BasicModal
-        @register="register"
-        :getContainer="getContainer"
-        :canFullscreen="false"
-        :title="title"
-        :width="500"
-        destroyOnClose
-        @ok="handleOk"
-        wrapClassName="j-user-select-modal2" >
-
-        <div style="position: relative; min-height: 350px">
-            <div style="width: 100%">
-                <a-input v-model:value="searchText" allowClear style="width: 100%" placeholder="鎼滅储">
-                    <template #prefix>
-                        <SearchOutlined style="color: #c0c0c0" />
-                    </template>
-                </a-input>
-            </div>
-
-            <!-- tabs -->
-            <div class="modal-select-list-container">
-                <div class="scroll">
-                    <div class="content" style="right: -10px">
-                        
-                        <label class="item" v-for="item in showDataList" @click="(e)=>onSelect(e, item)">
-                            <a-checkbox v-model:checked="item.checked">
-                                <span>{{ item.name }}</span>
-                            </a-checkbox>
-                        </label>
-                    </div>
-                    
-                </div>
-            </div>
-
-            <!-- 閫変腑鐢ㄦ埛 -->
-            <div class="selected-users" style="width: 100%; overflow-x: hidden">
-                <SelectedUserItem v-for="item in selectedList" :info="item" @unSelect="unSelect" />
-            </div>
-        </div>
-    </BasicModal>
-</template>
-
-<script lang="ts">
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { SearchOutlined, CloseOutlined } from '@ant-design/icons-vue';
-  import SelectedUserItem from '../userSelect/SelectedUserItem.vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { computed, ref, toRaw, watch } from 'vue';
-  
-  export default {
-    name: 'PositionSelectModal',
-    components: {
-      BasicModal,
-      SearchOutlined,
-      CloseOutlined,
-      SelectedUserItem,
-    },
-    props: {
-      multi: {
-        type: Boolean,
-        default: true,
-      },
-      getContainer: {
-        type: Function,
-        default: null,
-      },
-      title:{
-        type: String,
-        default: '',
-      },
-      type: {
-        type: String,
-        default: 'sys_position',
-      },
-      appId: {
-        type: String,
-        default: '',
-      }
-    },
-    emits: ['selected', 'register'],
-    setup(props, { emit }) {
-
-      const searchText = ref('');
-      const selectedIdList = computed(() => {
-        let arr = selectedList.value;
-        if (!arr || arr.length == 0) {
-          return [];
-        } else {
-          return arr.map((k) => k.id);
-        }
-      });
-
-      watch(()=>props.appId, async (val)=>{
-        if(val){
-          await loadDataList();
-        }
-      }, {immediate: true});
-      
-      
-      // 寮圭獥浜嬩欢
-      const [register] = useModalInner(() => {
-        let list = dataList.value;
-        if(!list || list.length ==0 ){
-        }
-        for(let item of list){
-          item.checked = false
-        }
-      });
-
-      // 纭畾浜嬩欢
-      function handleOk() {
-        let arr = toRaw(selectedIdList.value);
-        emit('selected', arr);
-      }
-      
-      const dataList = ref<any[]>([]);
-      const showDataList = computed(()=>{
-        let list = dataList.value;
-        if(!list || list.length ==0 ){
-          return []
-        }
-        let text = searchText.value;
-        if(!text){
-          return list
-        }
-        return list.filter(item=>item.name.indexOf(text)>=0)
-      });
-  
-      const selectedList = computed(()=>{
-        let list = dataList.value;
-        if(!list || list.length ==0 ){
-          return []
-        }
-        return list.filter(item=>item.checked)
-      });
-
-      function unSelect(id) {
-        let list = dataList.value;
-        if(!list || list.length ==0 ){
-          return;
-        }
-        let arr = list.filter(item=>item.id == id);
-        arr[0].checked = false;
-      }
-      
-      async function loadDataList() {
-        let params = {
-          pageNo: 1,
-          pageSize: 200,
-          column: 'createTime',
-          order: 'desc'
-        };
-        const url = '/sys/position/list'
-        const data = await defHttp.get({ url, params }, { isTransformResponse: false });
-        if (data.success) {
-          const { records } = data.result;
-          let arr:any[] = [];
-          if(records && records.length>0){
-            for(let item of records){
-              arr.push({
-                id: item.id,
-                name: item.name || item.roleName,
-                selectType: props.type,
-                checked: false
-              })
-            }
-          }
-          dataList.value = arr;
-        } else {
-          console.error(data.message);
-        }
-        console.log('loadDataList', data);
-      }
-
-
-      function onSelect(e, item) {
-        prevent(e);
-        console.log('onselect');
-        item.checked = !item.checked;
-      }
-
-      function prevent(e) {
-        e.preventDefault();
-        e.stopPropagation();
-      }
-
-      return {
-        register,
-        showDataList,
-        searchText,
-        handleOk,
-        selectedList,
-        selectedIdList,
-        unSelect,
-        onSelect
-      
-      };
-    },
-  };
-</script>
-<style scoped lang="less">
-    .modal-select-list-container{
-        height: 352px;
-        margin-top: 12px;
-        overflow: auto;
-        .scroll{
-            height: 100%;
-            position: relative;
-            width: 100%;
-            overflow: hidden;
-            .content{
-                bottom: 0;
-                left: 0;
-                overflow: scroll;
-                overflow-x: hidden;
-                position: absolute;
-                right: 0;
-                top: 0;
-                .item{
-                    padding: 7px 5px;
-                    cursor: pointer;
-                    display: block;
-                    &:hover{
-                        background-color: #f5f5f5;
-                    }
-                }
-               
-            }
-        }
-
-       
-    }
-</style>
-
-<style lang="less">
-    .j-user-select-modal2 {
-        .depart-select {
-            .ant-select-selector {
-                color: #fff !important;
-                background-color: #409eff !important;
-                border-radius: 5px !important;
-            }
-            .ant-select-selection-item,
-            .ant-select-arrow {
-                color: #fff !important;
-            }
-        }
-        .my-search {
-            position: absolute;
-            top: 14px;
-            z-index: 1;
-            &.all-width {
-                width: 100%;
-            }
-
-            .anticon {
-                cursor: pointer;
-                &:hover {
-                    color: #0a8fe9 !important;
-                }
-            }
-            .hidden {
-                display: none;
-            }
-        }
-
-        .my-tabs {
-        }
-
-        .selected-users {
-            display: flex;
-            flex-wrap: wrap;
-            flex-direction: row;
-            padding-top: 15px;
-        }
-
-        .scroll-container {
-            padding-bottom: 0 !important;
-        }
-    }
-</style>
diff --git a/src/components/Form/src/jeecg/components/roleSelect/RoleSelectModal.vue b/src/components/Form/src/jeecg/components/roleSelect/RoleSelectModal.vue
deleted file mode 100644
index 5d92be4..0000000
--- a/src/components/Form/src/jeecg/components/roleSelect/RoleSelectModal.vue
+++ /dev/null
@@ -1,282 +0,0 @@
-<template>
-    <BasicModal
-        @register="register"
-        :getContainer="getContainer"
-        :canFullscreen="false"
-        :title="title"
-        :width="500"
-        destroyOnClose
-        @ok="handleOk"
-        wrapClassName="j-user-select-modal2" >
-
-        <div style="position: relative; min-height: 350px">
-            <div style="width: 100%">
-                <a-input v-model:value="searchText" allowClear style="width: 100%" placeholder="鎼滅储">
-                    <template #prefix>
-                        <SearchOutlined style="color: #c0c0c0" />
-                    </template>
-                </a-input>
-            </div>
-
-            <!-- tabs -->
-            <div class="modal-select-list-container">
-                <div class="scroll">
-                    <div class="content" style="right: -10px">
-                        
-                        <label class="item" v-for="item in showDataList" @click="(e)=>onSelect(e, item)">
-                            <a-checkbox v-model:checked="item.checked">
-                                <span class="text">{{ item.name }}</span>
-                            </a-checkbox>
-                        </label>
-                    </div>
-                    
-                </div>
-            </div>
-
-            <!-- 閫変腑鐢ㄦ埛 -->
-            <div class="selected-users" style="width: 100%; overflow-x: hidden">
-                <SelectedUserItem v-for="item in selectedList" :info="item" @unSelect="unSelect" />
-            </div>
-        </div>
-    </BasicModal>
-</template>
-
-<script lang="ts">
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { SearchOutlined, CloseOutlined } from '@ant-design/icons-vue';
-  import SelectedUserItem from '../userSelect/SelectedUserItem.vue';
-  import { defHttp } from '/@/utils/http/axios';
-
-  import { computed, ref, toRaw, watch } from 'vue';
-  export default {
-    name: 'RoleSelectModal',
-    components: {
-      BasicModal,
-      SearchOutlined,
-      CloseOutlined,
-      SelectedUserItem,
-    },
-    props: {
-      multi: {
-        type: Boolean,
-        default: true,
-      },
-      getContainer: {
-        type: Function,
-        default: null,
-      },
-      title:{
-        type: String,
-        default: '',
-      },
-      type: {
-        type: String,
-        default: 'sys_role',
-      },
-      appId: {
-        type: String,
-        default: '',
-      }
-    },
-    emits: ['selected', 'register'],
-    setup(props, { emit }) {
-
-      const searchText = ref('');
-      const selectedIdList = computed(() => {
-        let arr = selectedList.value;
-        if (!arr || arr.length == 0) {
-          return [];
-        } else {
-          return arr.map((k) => k.id);
-        }
-      });
-
-      watch(()=>props.appId, async (val)=>{
-        if(val){
-          await loadDataList();
-        }
-      }, {immediate: true});
-      
-      
-      // 寮圭獥浜嬩欢
-      const [register] = useModalInner(() => {
-        let list = dataList.value;
-        if(!list || list.length ==0 ){
-        }
-        for(let item of list){
-          item.checked = false
-        }
-      });
-
-      // 纭畾浜嬩欢
-      function handleOk() {
-        let arr = toRaw(selectedIdList.value);
-        emit('selected', arr);
-      }
-      
-      const dataList = ref<any[]>([]);
-      const showDataList = computed(()=>{
-        let list = dataList.value;
-        if(!list || list.length ==0 ){
-          return []
-        }
-        let text = searchText.value;
-        if(!text){
-          return list
-        }
-        return list.filter(item=>item.name.indexOf(text)>=0)
-      });
-  
-      const selectedList = computed(()=>{
-        let list = dataList.value;
-        if(!list || list.length ==0 ){
-          return []
-        }
-        return list.filter(item=>item.checked)
-      });
-
-      function unSelect(id) {
-        let list = dataList.value;
-        if(!list || list.length ==0 ){
-          return;
-        }
-        let arr = list.filter(item=>item.id == id);
-        arr[0].checked = false;
-      }
-      
-      async function loadDataList() {
-        let params = {
-          pageNo: 1,
-          pageSize: 200,
-          column: 'createTime',
-          order: 'desc'
-        };
-        const url = '/sys/role/listByTenant';
-        const data = await defHttp.get({ url, params }, { isTransformResponse: false });
-        if (data.success) {
-          const { records } = data.result;
-          let arr:any[] = [];
-          if(records && records.length>0){
-            for(let item of records){
-              arr.push({
-                id: item.id,
-                name: item.name || item.roleName,
-                selectType: props.type,
-                checked: false
-              })
-            }
-          }
-          dataList.value = arr;
-        } else {
-          console.error(data.message);
-        }
-        console.log('loadDataList', data);
-      }
-
-
-      function onSelect(e, item) {
-        prevent(e);
-        console.log('onselect');
-        item.checked = !item.checked;
-      }
-
-      function prevent(e) {
-        e.preventDefault();
-        e.stopPropagation();
-      }
-
-      return {
-        register,
-        showDataList,
-        searchText,
-        handleOk,
-        selectedList,
-        selectedIdList,
-        unSelect,
-        onSelect
-      
-      };
-    },
-  };
-</script>
-<style scoped lang="less">
-    .modal-select-list-container{
-        height: 352px;
-        margin-top: 12px;
-        overflow: auto;
-        .scroll{
-            height: 100%;
-            position: relative;
-            width: 100%;
-            overflow: hidden;
-            .content{
-                bottom: 0;
-                left: 0;
-                overflow: scroll;
-                overflow-x: hidden;
-                position: absolute;
-                right: 0;
-                top: 0;
-                .item{
-                    padding: 7px 5px;
-                    cursor: pointer;
-                    display: block;
-                    &:hover{
-                        background-color: #f5f5f5;
-                    }
-                }
-               
-            }
-        }
-
-       
-    }
-</style>
-
-<style lang="less">
-    .j-user-select-modal2 {
-        .depart-select {
-            .ant-select-selector {
-                color: #fff !important;
-                background-color: #409eff !important;
-                border-radius: 5px !important;
-            }
-            .ant-select-selection-item,
-            .ant-select-arrow {
-                color: #fff !important;
-            }
-        }
-        .my-search {
-            position: absolute;
-            top: 14px;
-            z-index: 1;
-            &.all-width {
-                width: 100%;
-            }
-
-            .anticon {
-                cursor: pointer;
-                &:hover {
-                    color: #0a8fe9 !important;
-                }
-            }
-            .hidden {
-                display: none;
-            }
-        }
-
-        .my-tabs {
-        }
-
-        .selected-users {
-            display: flex;
-            flex-wrap: wrap;
-            flex-direction: row;
-            padding-top: 15px;
-        }
-
-        .scroll-container {
-            padding-bottom: 0 !important;
-        }
-    }
-</style>
diff --git a/src/components/Form/src/jeecg/components/userSelect/SelectedUserItem.vue b/src/components/Form/src/jeecg/components/userSelect/SelectedUserItem.vue
deleted file mode 100644
index e45a5bf..0000000
--- a/src/components/Form/src/jeecg/components/userSelect/SelectedUserItem.vue
+++ /dev/null
@@ -1,144 +0,0 @@
-<template>
-  <div class="user-selected-item">
-    <div
-      style="
-        display: flex;
-        flex-direction: row;
-        height: 24px;
-        border-radius: 12px;
-        padding-right: 10px;
-        vertical-align: middle;
-        background-color: #f5f5f5;
-      "
-    >
-      <span style="width: 24px; height: 24px; line-height: 20px; margin-right: 3px; display: inline-block">
-        <a-avatar v-if="info.avatar" :src="getFileAccessHttpUrl(info.avatar)" :size="24"></a-avatar>
-        
-        <a-avatar v-else-if="info.selectType == 'sys_role'" :size="24" style="background-color: rgb(255, 173, 0);">
-          <template #icon>
-            <team-outlined style="font-size: 16px"/>
-          </template>
-        </a-avatar>
-        <a-avatar v-else-if="info.selectType == 'sys_position'" :size="24" style="background-color: rgb(245, 34, 45);">
-          <template #icon>
-            <TagsOutlined style="font-size: 16px"/>
-          </template>
-        </a-avatar>
-        
-        <a-avatar :size="24" v-else>
-          <template #icon><UserOutlined /></template>
-        </a-avatar>
-      </span>
-
-      <div style="height: 24px; line-height: 24px" class="ellipsis">
-        {{ info.realname || info.name }}
-      </div>
-
-      <div v-if="showClose" class="icon-close">
-        <CloseOutlined @click="removeSelect"/>
-      </div>
-    </div>
-
-    <div v-if="!showClose" class="icon-remove">
-      <MinusCircleFilled @click="removeSelect" />
-    </div>
-  </div>
-</template>
-
-<script>
-  import { UserOutlined, CloseOutlined, MinusCircleFilled, TagsOutlined, TeamOutlined } from '@ant-design/icons-vue';
-  import {computed} from 'vue'
-  import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-  
-  export default {
-    name: 'SelectedUserItem',
-    components: {
-      UserOutlined,
-      MinusCircleFilled,
-      CloseOutlined,
-      TagsOutlined,
-      TeamOutlined
-    },
-    props: {
-      info: {
-        type: Object,
-        default: () => {},
-      },
-      // 鏄惁浣滀负鏌ヨ鏉′欢
-      query:{
-        type: Boolean,
-        default: false,
-      }
-    },
-    emits: ['unSelect'],
-    setup(props, { emit }) {
-      function removeSelect(e) {
-        e.preventDefault();
-        e.stopPropagation();
-        emit('unSelect', props.info.id);
-      }
-
-      const showClose = computed(()=>{
-        if(props.query===true){
-          return true;
-        }else{
-          return false;
-        }
-      });
-      
-      return {
-        showClose,
-        removeSelect,
-        getFileAccessHttpUrl
-      };
-    },
-  };
-</script>
-
-<style lang="less">
-  .user-selected-item {
-    position: relative;
-    display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
-    margin-right: 8px;
-    height: 30px;
-    border-radius: 12px;
-    line-height: 30px;
-    vertical-align: middle;
-
-    .ellipsis {
-      overflow: hidden;
-      text-overflow: ellipsis;
-      white-space: nowrap;
-    }
-    .icon-remove {
-      position: absolute;
-      top: -10px;
-      right: -4px;
-      font-size: 18px;
-      width: 15px;
-      height: 15px;
-      cursor: pointer;
-      display: none;
-    }
-    
-    .icon-close{
-      height: 22px;
-      line-height: 24px;
-      font-size: 10px;
-      font-weight: bold;
-      margin-left: 7px;
-      &:hover{
-        color: #0a8fe9;
-      }
-    }
-
-    &:hover {
-      .icon-remove {
-        display: block;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/userSelect/UserList.vue b/src/components/Form/src/jeecg/components/userSelect/UserList.vue
deleted file mode 100644
index 2c03bbb..0000000
--- a/src/components/Form/src/jeecg/components/userSelect/UserList.vue
+++ /dev/null
@@ -1,175 +0,0 @@
-<template>
-  <a-list item-layout="horizontal" :data-source="showDataList">
-    <template #renderItem="{ item }">
-      <a-list-item style="padding: 3px 0">
-        <div class="user-select-user-info" @click="(e) => onClickUser(e, item)">
-          <div>
-            <a-checkbox v-model:checked="checkStatus[item.id]" />
-          </div>
-          <div>
-            <a-avatar v-if="item.avatar" :src="getFileAccessHttpUrl(item.avatar)"></a-avatar>
-            <a-avatar v-else>
-              <template #icon><UserOutlined /></template>
-            </a-avatar>
-          </div>
-          <div :style="nameStyle">
-            {{ item.realname }}
-          </div>
-          <div :style="departStyle">
-            {{ item.orgCodeTxt }}
-          </div>
-        </div>
-      </a-list-item>
-    </template>
-  </a-list>
-</template>
-
-<script lang="ts">
-  import { UserOutlined } from '@ant-design/icons-vue';
-  import { computed, toRaw, reactive, watchEffect, ref } from 'vue';
-  import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-  
-  export default {
-    name: 'UserList',
-    props: {
-      dataList: {
-        type: Array,
-        default: () => [],
-      },
-      // 鏄惁鏄剧ず閮ㄩ棬鏂囨湰
-      depart: {
-        type: Boolean,
-        default: false,
-      },
-      selectedIdList: {
-        type: Array,
-        default: () => [],
-      },
-      excludeUserIdList:{
-        type: Array,
-        default: () => [],
-      }
-    },
-    components: {
-      UserOutlined,
-    },
-    emits: ['selected', 'unSelect'],
-    setup(props, { emit }) {
-      function onClickUser(e, user) {
-        e && prevent(e);
-        let status = checkStatus[user.id];
-        if (status === true) {
-          emit('unSelect', user.id);
-        } else {
-          emit('selected', toRaw(user));
-        }
-      }
-
-      function getTwoText(text) {
-        if (!text) {
-          return '';
-        } else {
-          return text.substr(0, 2);
-        }
-      }
-
-      const departStyle = computed(() => {
-        if (props.depart === true) {
-          // 濡傛灉鏄剧ず閮ㄩ棬淇℃伅
-          return {
-            flex: 1,
-          };
-        } else {
-          return {
-            display: 'none',
-          };
-        }
-      });
-
-      const nameStyle = computed(() => {
-        if (props.depart === true) {
-          // 濡傛灉鏄剧ず閮ㄩ棬淇℃伅
-          return {
-            width: '200px',
-          };
-        } else {
-          return {
-            flex: 1,
-          };
-        }
-      });
-
-      function onChangeChecked(e) {
-        console.error('onChangeChecked', e);
-      }
-
-     // const showDataList = ref<any[]>([])
-      const checkStatus = reactive<any>({});
-      watchEffect(() => {
-        let arr1 = props.dataList;
-        if (!arr1 || arr1.length === 0) {
-          return;
-        }
-        let idList = props.selectedIdList;
-        for (let item of arr1) {
-          if (idList.indexOf(item.id) >= 0) {
-            checkStatus[item.id] = true;
-          } else {
-            checkStatus[item.id] = false;
-          }
-        }
-        
-      
-      });
-
-      function prevent(e) {
-        e.preventDefault();
-        e.stopPropagation();
-      }
-
-      function records2DataList() {
-        let arr:any[] = [];
-        let excludeList = props.excludeUserIdList;
-        let records = props.dataList;
-        if(records && records.length>0){
-          for(let item of records){
-            if(excludeList.indexOf(item.id)<0){
-              arr.push({...item})
-            }
-          }
-        }
-        return arr;
-      }
-      
-      const showDataList = computed(()=>{
-        let excludeList = props.excludeUserIdList;
-        if(excludeList && excludeList.length>0){
-          return records2DataList();
-        }
-        return props.dataList;
-      });
-
-      return {
-        onClickUser,
-        getTwoText,
-        departStyle,
-        nameStyle,
-        onChangeChecked,
-        checkStatus,
-        showDataList,
-        getFileAccessHttpUrl
-      };
-    },
-  };
-</script>
-
-<style lang="less">
-  .user-select-user-info {
-    display: flex;
-    > div {
-      height: 36px;
-      line-height: 36px;
-      margin-right: 10px;
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/userSelect/UserListAndDepart.vue b/src/components/Form/src/jeecg/components/userSelect/UserListAndDepart.vue
deleted file mode 100644
index a37a7f4..0000000
--- a/src/components/Form/src/jeecg/components/userSelect/UserListAndDepart.vue
+++ /dev/null
@@ -1,181 +0,0 @@
-<template>
-  <a-row>
-    <a-col :span="12">
-      <div :style="containerStyle">
-        <a-tree
-          v-if="treeData.length > 0"
-          :load-data="loadChildren"
-          showIcon
-          autoExpandParent
-          :treeData="treeData"
-          :selectedKeys="selectedKeys"
-          v-model:expandedKeys="expandedKeys"
-          @select="onSelect"
-        >
-        </a-tree>
-      </div>
-    </a-col>
-    <a-col :span="12" style="padding-left: 10px">
-      <div :style="containerStyle">
-        <user-list :excludeUserIdList="excludeUserIdList" :dataList="userDataList" :selectedIdList="selectedIdList" @selected="onSelectUser" @unSelect="unSelectUser" />
-      </div>
-    </a-col>
-  </a-row>
-</template>
-
-<script lang="ts">
-  import { defHttp } from '/@/utils/http/axios';
-  import { computed, ref, watch } from 'vue';
-  import UserList from './UserList.vue';
-
-  export default {
-    name: 'DepartUserList',
-    components: {
-      UserList,
-    },
-    props: {
-      searchText: {
-        type: String,
-        default: '',
-      },
-      selectedIdList: {
-        type: Array,
-        default: () => [],
-      },
-      excludeUserIdList:{
-        type: Array,
-        default: () => [],
-      }
-    },
-    emits: ['loaded', 'selected', 'unSelect'],
-    setup(props, { emit }) {
-      //export const queryById = (params) => defHttp.get({ url: Api.queryById, params }, { isTransformResponse: false });
-
-      async function loadDepartTree(pid?) {
-        const url = '/sys/sysDepart/queryDepartTreeSync';
-        let params = {};
-        if (pid) {
-          params['pid'] = pid;
-        }
-        const data = await defHttp.get({ url, params }, { isTransformResponse: false });
-        console.log('loadDepartTree', data);
-        return data;
-      }
-
-      async function initRoot() {
-        console.log('initRoot');
-        const data = await loadDepartTree();
-        if (data.success) {
-          let arr = data.result;
-          treeData.value = arr;
-          emitDepartOptions(arr);
-        } else {
-          console.error(data.message);
-        }
-        clear();
-      }
-
-      function emitDepartOptions(arr) {
-        let options = [];
-        if (arr && arr.length > 0) {
-          options = arr.map((k) => {
-            return {
-              value: k.id,
-              label: k.departName,
-            };
-          });
-        }
-        emit('loaded', options);
-      }
-
-      initRoot();
-
-      const treeData = ref<any[]>([]);
-      const selectedKeys = ref<string[]>([]);
-      const expandedKeys = ref<string[]>([]);
-      const selectedDepartId = ref('');
-      function onSelect(ids, e) {
-        let record = e.node.dataRef;
-        selectedKeys.value = [record.key];
-
-        let id = ids[0];
-        selectedDepartId.value = id;
-        loadUserList();
-      }
-
-      function clear() {
-        selectedDepartId.value = '';
-      }
-      async function loadChildren(treeNode) {
-        console.log('loadChildren', treeNode);
-        const data = await loadDepartTree(treeNode.eventKey);
-        if (data.success) {
-          let arr = data.result;
-          treeNode.dataRef.children = [...arr];
-          treeData.value = [...treeData.value];
-        } else {
-          console.error(data.message);
-        }
-      }
-
-      const maxHeight = ref(300);
-      maxHeight.value = window.innerHeight - 300;
-      const containerStyle = computed(() => {
-        return {
-          'overflow-y': 'auto',
-          'max-height': maxHeight.value + 'px',
-        };
-      });
-
-      const userDataList = ref<any[]>([]);
-      async function loadUserList() {
-        const url = '/sys/user/selectUserList';
-        let params = {
-          pageNo: 1,
-          pageSize: 10,
-        };
-        if (props.searchText) {
-          params['keyword'] = props.searchText;
-        }
-        if (selectedDepartId.value) {
-          params['departId'] = selectedDepartId.value;
-        }
-        const data = await defHttp.get({ url, params }, { isTransformResponse: false });
-        if (data.success) {
-          const { records } = data.result;
-          userDataList.value = records;
-        } else {
-          console.error(data.message);
-        }
-        console.log('depart-loadUserList', data);
-      }
-      watch(
-        () => props.searchText,
-        () => {
-          loadUserList();
-        }
-      );
-
-      function onSelectUser(info) {
-        emit('selected', info);
-      }
-      function unSelectUser(id) {
-        emit('unSelect', id);
-      }
-
-      return {
-        containerStyle,
-        treeData,
-        selectedKeys,
-        expandedKeys,
-        onSelect,
-        loadChildren,
-        onSelectUser,
-        unSelectUser,
-        userDataList,
-      };
-    },
-  };
-</script>
-
-<style scoped></style>
diff --git a/src/components/Form/src/jeecg/components/userSelect/UserListAndRole.vue b/src/components/Form/src/jeecg/components/userSelect/UserListAndRole.vue
deleted file mode 100644
index 0424d66..0000000
--- a/src/components/Form/src/jeecg/components/userSelect/UserListAndRole.vue
+++ /dev/null
@@ -1,136 +0,0 @@
-<template>
-  <a-row>
-    <a-col :span="12">
-      <div :style="containerStyle">
-        <a-tree v-if="treeData.length > 0" showIcon :treeData="treeData" :selectedKeys="selectedKeys" @select="onSelect"> </a-tree>
-      </div>
-    </a-col>
-    <a-col :span="12" style="padding-left: 10px">
-      <div :style="containerStyle">
-        <user-list :excludeUserIdList="excludeUserIdList" :dataList="userDataList" :selectedIdList="selectedIdList" @selected="onSelectUser" @unSelect="unSelectUser" />
-      </div>
-    </a-col>
-  </a-row>
-</template>
-
-<script lang="ts">
-  import { computed, ref, watch } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import UserList from './UserList.vue';
-
-  export default {
-    name: 'RoleUserList',
-    components: {
-      UserList,
-    },
-    props: {
-      searchText: {
-        type: String,
-        default: '',
-      },
-      selectedIdList: {
-        type: Array,
-        default: () => [],
-      },
-      excludeUserIdList:{
-        type: Array,
-        default: () => [],
-      }
-    },
-    emits: ['selected', 'unSelect'],
-    setup(props, { emit }) {
-      const treeData = ref<any[]>([]);
-      async function loadRoleList() {
-        const url = '/sys/role/listByTenant';
-        let params = {
-          order: 'desc',
-          column: 'createTime',
-          pageSize: 200,
-        };
-        let arr = [];
-        const data = await defHttp.get({ url, params }, { isTransformResponse: false });
-        if (data.success) {
-          const { records } = data.result;
-          arr = records.map((k) => {
-            return {
-              title: k.roleName,
-              id: k.id,
-              key: k.id,
-            };
-          });
-        }
-        console.log('loadRoleList', data);
-        treeData.value = arr;
-      }
-      loadRoleList();
-
-      const selectedKeys = ref<any[]>([]);
-      const selectedRoleId = ref('');
-      function onSelect(ids, e) {
-        let record = e.node.dataRef;
-        selectedKeys.value = [record.key];
-
-        let id = ids[0];
-        selectedRoleId.value = id;
-        loadUserList();
-      }
-
-      const userDataList = ref<any[]>([]);
-      async function loadUserList() {
-        const url = '/sys/user/selectUserList';
-        let params = {
-          pageNo: 1,
-          pageSize: 10,
-        };
-        if (props.searchText) {
-          params['keyword'] = props.searchText;
-        }
-        if (selectedRoleId.value) {
-          params['roleId'] = selectedRoleId.value;
-        }
-        const data = await defHttp.get({ url, params }, { isTransformResponse: false });
-        if (data.success) {
-          const { records } = data.result;
-          userDataList.value = records;
-        } else {
-          console.error(data.message);
-        }
-        console.log('role-loadUserList', data);
-      }
-      watch(
-        () => props.searchText,
-        () => {
-          loadUserList();
-        }
-      );
-
-      function onSelectUser(info) {
-        emit('selected', info);
-      }
-      function unSelectUser(id) {
-        emit('unSelect', id);
-      }
-
-      const maxHeight = ref(300);
-      maxHeight.value = window.innerHeight - 300;
-      const containerStyle = computed(() => {
-        return {
-          'overflow-y': 'auto',
-          'max-height': maxHeight.value + 'px',
-        };
-      });
-
-      return {
-        containerStyle,
-        treeData,
-        selectedKeys,
-        onSelect,
-        onSelectUser,
-        unSelectUser,
-        userDataList,
-      };
-    },
-  };
-</script>
-
-<style scoped></style>
diff --git a/src/components/Form/src/jeecg/components/userSelect/UserSelectModal.vue b/src/components/Form/src/jeecg/components/userSelect/UserSelectModal.vue
deleted file mode 100644
index 11ebc22..0000000
--- a/src/components/Form/src/jeecg/components/userSelect/UserSelectModal.vue
+++ /dev/null
@@ -1,347 +0,0 @@
-<template>
-  <BasicModal
-    @register="register"
-    :getContainer="getContainer"
-    :canFullscreen="false"
-    title="閫夋嫨鐢ㄦ埛"
-    :width="600"
-    wrapClassName="j-user-select-modal2"
-  >
-    <!-- 閮ㄩ棬涓嬫媺妗� -->
-    <a-select v-model:value="selectedDepart" style="width: 100%" class="depart-select" @change="onDepartChange">
-      <a-select-option v-for="item in departOptions" :value="item.value">{{ item.label }}</a-select-option>
-    </a-select>
-
-    <div style="position: relative; min-height: 350px">
-      <!-- 鐢ㄦ埛鎼滅储妗� -->
-      <div :class="searchInputStatus ? 'my-search all-width' : 'my-search'">
-        <span :class="searchInputStatus ? 'hidden' : ''" style="margin-left: 10px"
-          ><SearchOutlined style="color: #c0c0c0" @click="showSearchInput"
-        /></span>
-        <div style="width: 100%" :class="searchInputStatus ? '' : 'hidden'">
-          <a-input v-model:value="searchText" @pressEnter="onSearchUser" style="width: 100%" placeholder="璇疯緭鍏ョ敤鎴峰悕鎸夊洖杞︽悳绱�">
-            <template #prefix>
-              <SearchOutlined style="color: #c0c0c0" />
-            </template>
-            <template #suffix>
-              <CloseOutlined title="閫�鍑烘悳绱�" @click="clearSearch" />
-            </template>
-          </a-input>
-        </div>
-      </div>
-
-      <!-- tabs -->
-      <div class="my-tabs">
-        <a-tabs v-model:activeKey="myActiveKey" :centered="true" @change="onChangeTab">
-          <!-- 鎵�鏈夌敤鎴� -->
-          <a-tab-pane key="1" tab="鍏ㄩ儴" forceRender>
-            <user-list :excludeUserIdList="excludeUserIdList" :dataList="userDataList" :selectedIdList="selectedIdList" depart @selected="onSelectUser" @unSelect="unSelectUser" />
-          </a-tab-pane>
-
-          <!-- 閮ㄩ棬鐢ㄦ埛 -->
-          <a-tab-pane key="2" tab="鎸夐儴闂�" forceRender>
-            <depart-user-list
-              :searchText="searchText"
-              :selectedIdList="selectedIdList"
-              :excludeUserIdList="excludeUserIdList"
-              @loaded="initDepartOptions"
-              @selected="onSelectUser"
-              @unSelect="unSelectUser"
-            />
-          </a-tab-pane>
-
-          <!-- 瑙掕壊鐢ㄦ埛 -->
-          <a-tab-pane key="3" tab="鎸夎鑹�" forceRender>
-            <role-user-list :excludeUserIdList="excludeUserIdList" :searchText="searchText" :selectedIdList="selectedIdList" @selected="onSelectUser" @unSelect="unSelectUser" />
-          </a-tab-pane>
-        </a-tabs>
-      </div>
-
-      <!-- 閫変腑鐢ㄦ埛 -->
-      <div class="selected-users" style="width: 100%; overflow-x: hidden">
-        <SelectedUserItem v-for="item in selectedUserList" :info="item" @unSelect="unSelectUser" />
-      </div>
-    </div>
-
-    <template #footer>
-      <div style="display: flex; justify-content: space-between; width: 100%">
-        <div class="select-user-page-info">
-          <a-pagination
-            v-if="myActiveKey == '1'"
-            v-model:current="pageNo"
-            size="small"
-            :total="totalRecord"
-            show-quick-jumper
-            @change="onPageChange"
-          />
-        </div>
-        <a-button type="primary" @click="handleOk">纭� 瀹�</a-button>
-      </div>
-    </template>
-  </BasicModal>
-</template>
-
-<script lang="ts">
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { SearchOutlined, CloseOutlined } from '@ant-design/icons-vue';
-  import UserList from './UserList.vue';
-  import SelectedUserItem from './SelectedUserItem.vue';
-  import DepartUserList from './UserListAndDepart.vue';
-  import RoleUserList from './UserListAndRole.vue';
-  import { Pagination } from 'ant-design-vue';
-  const APagination = Pagination;
-  import { defHttp } from '/@/utils/http/axios';
-
-  import { computed, ref, toRaw } from 'vue';
-  import { useUserStore } from '/@/store/modules/user';
-  export default {
-    name: 'UserSelectModal',
-    components: {
-      BasicModal,
-      SearchOutlined,
-      CloseOutlined,
-      SelectedUserItem,
-      UserList,
-      DepartUserList,
-      RoleUserList,
-      APagination,
-    },
-    props: {
-      multi: {
-        type: Boolean,
-        default: false,
-      },
-      getContainer: {
-        type: Function,
-        default: null,
-      },
-      //鏄惁鎺掗櫎鎴戣嚜宸�
-      izExcludeMy: {
-        type: Boolean,
-        default: false,
-      },
-    },
-    emits: ['selected', 'register'],
-    setup(props, { emit }) {
-      const myActiveKey = ref('1');
-      const selectedUserList = ref<any[]>([]);
-      const userStore = useUserStore();
-      const selectedIdList = computed(() => {
-        let arr = selectedUserList.value;
-        if (!arr || arr.length == 0) {
-          return [];
-        } else {
-          return arr.map((k) => k.id);
-        }
-      });
-      // QQYUN-4152銆愬簲鐢ㄣ�戝凡缁忓瓨鍦ㄧ殑鐢ㄦ埛锛屾坊鍔犵殑鏃跺�欒繕鍙互閲嶅閫夋嫨
-      const excludeUserIdList = ref<any[]>([]);
-
-      // 寮圭獥浜嬩欢
-      const [register] = useModalInner((data) => {
-        let list = data.list;
-        if (list && list.length > 0) {
-          selectedUserList.value = [...list];
-        } else {
-          selectedUserList.value = [];
-        }
-        if(data.excludeUserIdList){
-          excludeUserIdList.value = data.excludeUserIdList;
-        }else{
-          excludeUserIdList.value = [];
-        }
-        //濡傛灉鎺掗櫎鎴戣嚜宸憋紝鐩存帴excludeUserIdList.push鎺掗櫎鍗冲彲
-        if (props.izExcludeMy) {
-          excludeUserIdList.value.push(userStore.getUserInfo.id);
-        }
-      });
-
-      // 纭畾浜嬩欢
-      function handleOk() {
-        let arr = toRaw(selectedUserList.value);
-        emit('selected', arr);
-      }
-
-      /*--------------閮ㄩ棬涓嬫媺妗嗭紝鐢ㄤ簬绛涢�夌敤鎴�---------------*/
-      const selectedDepart = ref('');
-      const departOptions = ref<any[]>([]);
-      function initDepartOptions(options) {
-        departOptions.value = [{ value: '', label: '鍏ㄩ儴鐢ㄦ埛' }, ...options];
-        selectedDepart.value = '';
-      }
-      function onDepartChange() {
-        loadUserList();
-      }
-      /*--------------閮ㄩ棬涓嬫媺妗嗭紝鐢ㄤ簬绛涢�夌敤鎴�---------------*/
-
-      /*--------------绗竴椤� 鎼滅储妗�---------------*/
-      const searchInputStatus = ref(false);
-      const searchText = ref('');
-      function showSearchInput(e) {
-        e && prevent(e);
-        searchInputStatus.value = true;
-      }
-      function onSearchUser() {
-        console.log('onSearchUser');
-        loadUserList();
-      }
-      function clearSearch(e) {
-        e && prevent(e);
-        searchText.value = '';
-        searchInputStatus.value = false;
-        loadUserList();
-      }
-      /*--------------绗竴椤� 鎼滅储妗�---------------*/
-
-      /*--------------鍔犺浇鏁版嵁---------------*/
-      const pageNo = ref(1);
-      const totalRecord = ref(0);
-      const userDataList = ref<any[]>([]);
-      async function onPageChange() {
-        console.log('onPageChange', pageNo.value);
-        await loadUserList();
-      }
-      async function loadUserList() {
-        const url = '/sys/user/selectUserList';
-        let params = {
-          pageNo: pageNo.value,
-          pageSize: 10,
-        };
-        if (searchText.value) {
-          params['keyword'] = searchText.value;
-        }
-        if (selectedDepart.value) {
-          params['departId'] = selectedDepart.value;
-        }
-        const data = await defHttp.get({ url, params }, { isTransformResponse: false });
-        if (data.success) {
-          const { records, total } = data.result;
-          totalRecord.value = total;
-          userDataList.value = records;
-        } else {
-          console.error(data.message);
-        }
-        console.log('loadUserList', data);
-      }
-      /*--------------鍔犺浇鏁版嵁---------------*/
-
-      /*--------------閫変腑/鍙栨秷閫変腑---------------*/
-      function onSelectUser(info) {
-        if (props.multi === true) {
-          let arr = selectedUserList.value;
-          let idList = selectedIdList.value;
-          if (idList.indexOf(info.id) < 0) {
-            arr.push({ ...info });
-            selectedUserList.value = arr;
-          }
-        } else {
-          selectedUserList.value = [{ ...info }];
-        }
-      }
-      function unSelectUser(id) {
-        let arr = selectedUserList.value;
-        let index = -1;
-        for (let i = 0; i < arr.length; i++) {
-          if (arr[i].id === id) {
-            index = i;
-            break;
-          }
-        }
-        if (index >= 0) {
-          arr.splice(index, 1);
-          selectedUserList.value = arr;
-        }
-      }
-      /*--------------閫変腑/鍙栨秷閫変腑---------------*/
-
-      function onChangeTab(tab) {
-        myActiveKey.value = tab;
-      }
-
-      function prevent(e) {
-        e.preventDefault();
-        e.stopPropagation();
-      }
-
-      //鍔犺浇绗竴椤垫暟鎹�
-      loadUserList();
-
-      return {
-        selectedDepart,
-        departOptions,
-        initDepartOptions,
-        onDepartChange,
-
-        register,
-        handleOk,
-
-        searchText,
-        searchInputStatus,
-        showSearchInput,
-        onSearchUser,
-        clearSearch,
-
-        myActiveKey,
-        onChangeTab,
-
-        pageNo,
-        totalRecord,
-        onPageChange,
-        userDataList,
-        selectedUserList,
-        selectedIdList,
-        onSelectUser,
-        unSelectUser,
-        excludeUserIdList
-      };
-    },
-  };
-</script>
-
-<style lang="less">
-  .j-user-select-modal2 {
-    .depart-select {
-      .ant-select-selector {
-        color: #fff !important;
-        background-color: #409eff !important;
-        border-radius: 5px !important;
-      }
-      .ant-select-selection-item,
-      .ant-select-arrow {
-        color: #fff !important;
-      }
-    }
-    .my-search {
-      position: absolute;
-      top: 14px;
-      z-index: 1;
-      &.all-width {
-        width: 100%;
-      }
-
-      .anticon {
-        cursor: pointer;
-        &:hover {
-          color: #0a8fe9 !important;
-        }
-      }
-      .hidden {
-        display: none;
-      }
-    }
-
-    .my-tabs {
-    }
-
-    .selected-users {
-      display: flex;
-      flex-wrap: wrap;
-      flex-direction: row;
-      padding-top: 15px;
-    }
-
-    .scroll-container {
-      padding-bottom: 0 !important;
-    }
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/components/userSelect/index.vue b/src/components/Form/src/jeecg/components/userSelect/index.vue
deleted file mode 100644
index 1fd2eae..0000000
--- a/src/components/Form/src/jeecg/components/userSelect/index.vue
+++ /dev/null
@@ -1,245 +0,0 @@
-<template>
-  <div>
-    <div v-if="isSearchFormComp" @click="click2Add" :class="disabled?'disabled-user-select':''" style="padding:0 5px;background-color: #fff;border: 1px solid #ccc;border-radius: 3px;box-sizing: border-box;display:flex;color: #9e9e9e;font-size: 14px;flex-wrap: wrap;min-height: 32px;">
-      <template v-if="selectedUserList.length > 0">
-        <SelectedUserItem v-for="item in showUserList" :info="item" @unSelect="unSelectUser" query />
-      </template>
-      <span v-else style="height: 30px;line-height: 30px;display: inline-block;margin-left: 7px;color: #bfbfbf;">璇烽�夋嫨鐢ㄦ埛</span>
-      <div v-if="ellipsisInfo.status" class="user-selected-item">
-        <div class="user-select-ellipsis">
-          <span style="color: red">+{{ellipsisInfo.count}}...</span>
-        </div>
-      </div>
-    </div>    
-    
-    <div v-else style="display: flex; flex-wrap: wrap; flex-direction: row" >
-      <template v-if="selectedUserList.length > 0">
-        <SelectedUserItem v-for="item in selectedUserList" :info="item" @unSelect="unSelectUser" />
-      </template>
-      <a-button v-if="showAddButton" shape="circle" @click="onShowModal"><PlusOutlined /></a-button>
-    </div>
-
-    <user-select-modal :multi="multi" :getContainer="getContainer" @register="registerModal" @selected="onSelected" :izExcludeMy="izExcludeMy"></user-select-modal>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent, watch, ref, computed, toRaw } from 'vue';
-  import { Form } from 'ant-design-vue';
-  import { PlusOutlined } from '@ant-design/icons-vue';
-  import { useModal } from '/@/components/Modal';
-  import UserSelectModal from './UserSelectModal.vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import SelectedUserItem from './SelectedUserItem.vue';
-
-  export default defineComponent({
-    name: 'UserSelect',
-    components: {
-      PlusOutlined,
-      UserSelectModal,
-      SelectedUserItem,
-    },
-    props: {
-      store: {
-        type: String,
-        default: 'id',
-      },
-      value: {
-        type: String,
-        default: '',
-      },
-      multi: {
-        type: Boolean,
-        default: false,
-      },
-      getContainer: {
-        type: Function,
-        default: null,
-      },
-      // 鏄惁浣滀负鏌ヨ鏉′欢
-      query:{
-        type: Boolean,
-        default: false,
-      },
-      //鏈�澶氭樉绀哄嚑涓汉鍛�-query涓簍rue鏈夋晥
-      maxCount:{
-        type: Number,
-        default: 2
-      },
-      disabled:{
-        type: Boolean,
-        default: false,
-      },
-      //鏄惁鎺掗櫎鎴戣嚜宸�
-      izExcludeMy:{
-        type: Boolean,
-        default: false,
-      }
-    },
-    emits: ['update:value', 'change'],
-    setup(props, { emit }) {
-      const formItemContext = Form.useInjectFormItemContext();
-      const loading = ref(true);
-      const selectedUserList = ref<any[]>([]);
-      const showUserList = computed(()=>{
-        let list = selectedUserList.value
-        let max = props.maxCount;
-        if(list.length<=max){
-          return list;
-        }
-        return list.filter((_item, index)=>index<max);
-      });
-      const ellipsisInfo = computed(()=>{
-        let max = props.maxCount;
-        let len = selectedUserList.value.length
-        if(len > max){
-          return {status: true, count: len-max};
-        }else{
-          return {status: false}
-        }
-      });
-
-      // 娉ㄥ唽寮圭獥
-      const [registerModal, { openModal, closeModal }] = useModal();
-      function onShowModal() {
-        if(props.disabled===true){
-          return ;
-        }
-        let list = toRaw(selectedUserList.value);
-        openModal(true, {
-          list,
-        });
-      }
-
-      function onSelected(arr) {
-        console.log('onSelected', arr);
-        selectedUserList.value = arr;
-        onSelectedChange();
-        closeModal();
-      }
-
-      function onSelectedChange() {
-        loading.value = false;
-        let temp: any[] = [];
-        let arr = selectedUserList.value;
-        if (arr && arr.length > 0) {
-          temp = arr.map((k) => {
-            return k[props.store];
-          });
-        }
-        let str = temp.join(',');
-        emit('update:value', str);
-        emit('change', str);
-        formItemContext.onFieldChange();
-        console.log('閫変腑鏁版嵁', str);
-      }
-
-      watch(
-        () => props.value,
-        async (val) => {
-          if (val) {
-            if (loading.value === true) {
-              await getUserList(val);
-            }
-          } else {
-            selectedUserList.value = [];
-          }
-          loading.value = true;
-        },
-        { immediate: true }
-      );
-
-      async function getUserList(ids) {
-        const url = '/sys/user/list';
-        let params = {
-          [props.store]: ids,
-        };
-        selectedUserList.value = [];
-        const data = await defHttp.get({ url, params }, { isTransformResponse: false });
-        if (data.success) {
-          const { records } = data.result;
-          selectedUserList.value = records;
-        } else {
-          console.error(data.message);
-        }
-        console.log('getUserList', data);
-      }
-
-      const showAddButton = computed(() => {
-        if(props.disabled === true){
-          return false;
-        }
-        if (props.multi === true) {
-          return true;
-        } else {
-          if (selectedUserList.value.length > 0) {
-            return false;
-          } else {
-            return true;
-          }
-        }
-      });
-
-      function unSelectUser(id) {
-        console.log('unSelectUser', id);
-        let arr = selectedUserList.value;
-        let index = -1;
-        for (let i = 0; i < arr.length; i++) {
-          if (arr[i].id == id) {
-            index = i;
-            break;
-          }
-        }
-        if (index >= 0) {
-          arr.splice(index, 1);
-          selectedUserList.value = arr;
-
-          onSelectedChange();
-        }
-      }
-      
-      function click2Add(e) {
-        e.preventDefault();
-        e.stopPropagation();
-        onShowModal();
-      }
-      
-      const isSearchFormComp = computed(()=>{
-        if(props.query===true){
-          return true;
-        }else{
-          return false
-        }
-      });
-      
-      return {
-        registerModal,
-        onShowModal,
-        isSearchFormComp,
-        onSelected,
-        showAddButton,
-        unSelectUser,
-        selectedUserList,
-        showUserList,
-        ellipsisInfo,
-        click2Add
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .user-select-ellipsis{
-    width: 40px;
-    height: 24px;
-    text-align: center;
-    line-height: 22px;
-    border-radius: 8px;
-    background: #f5f5f5;
-    border: 1px solid #f0f0f0;
-  }
-  .disabled-user-select{
-    cursor: not-allowed;
-    background-color: #f5f5f5 !important;
-  }
-</style>
diff --git a/src/components/Form/src/jeecg/hooks/useSelectBiz.ts b/src/components/Form/src/jeecg/hooks/useSelectBiz.ts
deleted file mode 100644
index 5d36216..0000000
--- a/src/components/Form/src/jeecg/hooks/useSelectBiz.ts
+++ /dev/null
@@ -1,166 +0,0 @@
-import { inject, reactive, ref, watch, unref, Ref } from 'vue';
-import { useMessage } from '/@/hooks/web/useMessage';
-
-export function useSelectBiz(getList, props) {
-  //鎺ユ敹涓嬫媺妗嗛�夐」
-  const selectOptions = inject('selectOptions', ref<Array<object>>([]));
-  //鎺ユ敹宸查�夋嫨鐨勫��
-  const selectValues = <object>inject('selectValues', reactive({ value: [], change: false }));
-  // 鏄惁姝e湪鍔犺浇鍥炴樉
-  const loadingEcho = inject<Ref<boolean>>('loadingEcho', ref(false));
-  //鏁版嵁闆�
-  const dataSource = ref<Array<object>>([]);
-  //宸查�夋嫨鐨勫��
-  const checkedKeys = ref<Array<string | number>>([]);
-  //閫夊垯鐨勮璁板綍
-  const selectRows = ref<Array<object>>([]);
-  //鎻愮ず寮圭獥
-  const $message = useMessage();
-  // 鏄惁鏄娆″姞杞藉洖鏄撅紝鍙湁棣栨鍔犺浇锛屾墠浼氭樉绀� loading
-  let isFirstLoadEcho = true;
-
-  /**
-   * 鐩戝惉selectValues鍙樺寲
-   */
-  watch(
-    selectValues,
-    () => {
-      if (selectValues['change'] == false) {
-        //update-begin---author:wangshuai ---date:20220412  for锛歔VUEN-672]鍙戞枃鑽夌绠辩紪杈戞椂鎷熺浜烘樉绀虹敤鎴峰悕------------
-        let params = {};
-        params[props.rowKey] = selectValues['value'].join(',');
-        //update-end---author:wangshuai ---date:20220412  for锛歔VUEN-672]鍙戞枃鑽夌绠辩紪杈戞椂鎷熺浜烘樉绀虹敤鎴峰悕--------------
-        loadingEcho.value = isFirstLoadEcho;
-        isFirstLoadEcho = false;
-        getDataSource(params, true)
-          .then()
-          .finally(() => {
-            loadingEcho.value = isFirstLoadEcho;
-          });
-      }
-      //璁剧疆鍒楄〃榛樿閫変腑
-      checkedKeys['value'] = selectValues['value'];
-    },
-    { immediate: true }
-  );
-
-  async function onSelectChange(selectedRowKeys: (string | number)[], selectRow) {
-    checkedKeys.value = selectedRowKeys;
-    //鍒ゆ柇鍏ㄩ�夌殑闂checkedKeys鍜宻electRows蹇呴』涓�鑷�
-    if (props.showSelected && unref(checkedKeys).length !== unref(selectRow).length) {
-      let { records } = await getList({
-        code: unref(checkedKeys).join(','),
-        pageSize: unref(checkedKeys).length,
-      });
-      selectRows.value = records;
-    } else {
-      selectRows.value = selectRow;
-    }
-  }
-
-  /**
-   * 閫夋嫨鍒楅厤缃�
-   */
-  const rowSelection = {
-    //update-begin-author:liusq---date:20220517--for: 鍔ㄦ�佽缃畆owSelection鐨則ype鍊�,榛樿鏄�'checkbox' ---
-    type: props.isRadioSelection ? 'radio' : 'checkbox',
-    //update-end-author:liusq---date:20220517--for: 鍔ㄦ�佽缃畆owSelection鐨則ype鍊�,榛樿鏄�'checkbox' ---
-    columnWidth: 20,
-    selectedRowKeys: checkedKeys,
-    onChange: onSelectChange,
-    //update-begin-author:wangshuai---date:20221102--for: [VUEN-2562]鐢ㄦ埛閫夋嫨锛岃法椤甸�夋嫨鍚庯紝鍙湁褰撳墠椤典汉鍛� ---
-    //table4.4.0鏂板灞炴�ч�変腑涔嬪悗鏄惁娓呯┖涓婁竴椤典笅涓�椤电殑鏁版嵁锛岄粯璁alse
-    preserveSelectedRowKeys:true,
-    //update-end-author:wangshuai---date:20221102--for: [VUEN-2562]鐢ㄦ埛閫夋嫨锛岃法椤甸�夋嫨鍚庯紝鍙湁褰撳墠椤典汉鍛� ---
-  };
-
-  /**
-   * 搴忓彿鍒楅厤缃�
-   */
-  const indexColumnProps = {
-    dataIndex: 'index',
-    width: 20,
-  };
-
-  /**
-   * 鍔犺浇鍒楄〃鏁版嵁闆�
-   * @param params
-   * @param flag 鏄惁鏄粯璁ゅ洖鏄炬ā寮忓姞杞�
-   */
-  async function getDataSource(params, flag) {
-    let { records } = await getList(params);
-    dataSource.value = records;
-    if (flag) {
-      let options = <any[]>[];
-      records.forEach((item) => {
-        options.push({ label: item[props.labelKey], value: item[props.rowKey] });
-      });
-      selectOptions.value = options;
-    }
-  }
-  async function initSelectRows() {
-    let { records } = await getList({
-      code: selectValues['value'].join(','),
-      pageSize: selectValues['value'].length,
-    });
-    checkedKeys['value'] = selectValues['value'];
-    selectRows['value'] = records;
-  }
-
-  /**
-   * 寮瑰嚭妗嗘樉绀洪殣钘忚Е鍙戜簨浠�
-   */
-  async function visibleChange(visible) {
-    if (visible) {
-      //璁剧疆鍒楄〃榛樿閫変腑
-      props.showSelected && initSelectRows();
-    }
-  }
-
-  /**
-   * 纭畾閫夋嫨
-   */
-  function getSelectResult(success) {
-    let options = <any[]>[];
-    let values = <any[]>[];
-    selectRows.value.forEach((item) => {
-      options.push({ label: item[props.labelKey], value: item[props.rowKey] });
-    });
-    checkedKeys.value.forEach((item) => {
-      values.push(item);
-    });
-    selectOptions.value = options;
-    if (props.maxSelectCount && values.length > props.maxSelectCount) {
-      $message.createMessage.warning(`鏈�澶氬彧鑳介�夋嫨${props.maxSelectCount}鏉℃暟鎹甡);
-      return false;
-    }
-    success && success(options, values);
-  }
-  //鍒犻櫎宸查�夋嫨鐨勪俊鎭�
-  function handleDeleteSelected(record) {
-    checkedKeys.value = checkedKeys.value.splice(checkedKeys.value.indexOf(record['id']), 1);
-    selectRows.value = selectRows.value.filter((item) => item['id'] !== record['id']);
-  }
-  //娓呯┖閫夋嫨椤�
-  function reset() {
-    checkedKeys.value = [];
-    selectRows.value = [];
-  }
-  return [
-    {
-      onSelectChange,
-      getDataSource,
-      visibleChange,
-      selectOptions,
-      selectValues,
-      rowSelection,
-      indexColumnProps,
-      checkedKeys,
-      selectRows,
-      dataSource,
-      getSelectResult,
-      handleDeleteSelected,
-      reset,
-    },
-  ];
-}
diff --git a/src/components/Form/src/jeecg/hooks/useTreeBiz.ts b/src/components/Form/src/jeecg/hooks/useTreeBiz.ts
deleted file mode 100644
index 5ac2029..0000000
--- a/src/components/Form/src/jeecg/hooks/useTreeBiz.ts
+++ /dev/null
@@ -1,252 +0,0 @@
-import type { Ref } from 'vue';
-import { inject, reactive, ref, computed, unref, watch, nextTick } from 'vue';
-import { TreeActionType } from '/@/components/Tree';
-import { listToTree } from '/@/utils/common/compUtils';
-
-export function useTreeBiz(treeRef, getList, props) {
-  //鎺ユ敹涓嬫媺妗嗛�夐」
-  const selectOptions = inject('selectOptions', ref<Array<object>>([]));
-  //鎺ユ敹宸查�夋嫨鐨勫��
-  const selectValues = <object>inject('selectValues', reactive({}));
-  // 鏄惁姝e湪鍔犺浇鍥炴樉
-  const loadingEcho = inject<Ref<boolean>>('loadingEcho', ref(false));
-  //鏁版嵁闆�
-  const treeData = ref<Array<object>>([]);
-  //宸查�夋嫨鐨勫��
-  const checkedKeys = ref<Array<string | number>>([]);
-  //閫夊垯鐨勮璁板綍
-  const selectRows = ref<Array<object>>([]);
-  //鏄惁鏄墦寮�寮规妯″紡
-  const openModal = ref(false);
-  // 鏄惁寮�鍚埗瀛愬叧鑱旓紝濡傛灉涓嶅彲浠ュ閫夛紝灏卞缁堝彇娑堢埗瀛愬叧鑱�
-  const getCheckStrictly = computed(() => (props.multiple ? props.checkStrictly : true));
-  // 鏄惁鏄娆″姞杞藉洖鏄撅紝鍙湁棣栨鍔犺浇锛屾墠浼氭樉绀� loading
-  let isFirstLoadEcho = true;
-
-  /**
-   * 鐩戝惉selectValues鍙樺寲
-   */
-  watch(
-    selectValues,
-    ({ value: values }: Recordable) => {
-      if(!values){
-        return;
-      }
-      if (openModal.value == false && values.length > 0) {
-        loadingEcho.value = isFirstLoadEcho;
-        isFirstLoadEcho = false;
-        onLoadData(null, values.join(',')).finally(() => {
-          loadingEcho.value = false;
-        });
-      }
-    },
-    { immediate: true }
-  );
-
-  /**
-   * 鑾峰彇鏍戝疄渚�
-   */
-  function getTree() {
-    const tree = unref(treeRef);
-    if (!tree) {
-      throw new Error('tree is null!');
-    }
-    return tree;
-  }
-
-  /**
-   * 璁剧疆鏍戝睍寮�绾у埆
-   */
-  function expandTree() {
-    nextTick(() => {
-      if (props.defaultExpandLevel && props.defaultExpandLevel > 0) {
-        getTree().filterByLevel(props.defaultExpandLevel);
-      }
-      //璁剧疆鍒楄〃榛樿閫変腑
-      checkedKeys.value = selectValues['value'];
-    }).then();
-  }
-
-  /**
-   * 鏍戣妭鐐归�夋嫨
-   */
-  function onSelect(keys, info) {
-    if (props.checkable == false) {
-      checkedKeys.value = props.checkStrictly ? keys.checked : keys;
-      const { selectedNodes } = info;
-      let rows = <any[]>[];
-      selectedNodes.forEach((item) => {
-        rows.push(item);
-      });
-      selectRows.value = rows;
-    }
-  }
-
-  /**
-   * 鏍戣妭鐐归�夋嫨
-   */
-  function onCheck(keys, info) {
-    if (props.checkable == true) {
-      // 濡傛灉涓嶈兘澶氶�夛紝灏卞彧淇濈暀鏈�鍚庝竴涓�変腑鐨�
-      if (!props.multiple) {
-        if (info.checked) {
-          //update-begin-author:taoyan date:20220408 for: 鍗曢�夋ā寮忎笅锛岃瀹歳owKey锛屾棤娉曢�変腑鏁版嵁-
-          checkedKeys.value = [info.node.eventKey];
-          let rowKey = props.rowKey;
-          let temp = info.checkedNodes.find((n) => n[rowKey] === info.node.eventKey);
-          selectRows.value = [temp];
-          //update-end-author:taoyan date:20220408 for: 鍗曢�夋ā寮忎笅锛岃瀹歳owKey锛屾棤娉曢�変腑鏁版嵁-
-        } else {
-          checkedKeys.value = [];
-          selectRows.value = [];
-        }
-        return;
-      }
-      checkedKeys.value = props.checkStrictly ? keys.checked : keys;
-      const { checkedNodes } = info;
-      let rows = <any[]>[];
-      checkedNodes.forEach((item) => {
-        rows.push(item);
-      });
-      selectRows.value = rows;
-    }
-  }
-
-  /**
-   * 鍕鹃�夊叏閮�
-   */
-  function checkALL(checkAll) {
-    getTree().checkAll(checkAll);
-  }
-
-  /**
-   * 灞曞紑鍏ㄩ儴
-   */
-  function expandAll(expandAll) {
-    getTree().expandAll(expandAll);
-  }
-
-  /**
-   * 鍔犺浇鏍戞暟鎹�
-   */
-  async function onLoadData(treeNode, ids) {
-    let params = {};
-    let startPid = '';
-    if (treeNode) {
-      startPid = treeNode.eventKey;
-      //update-begin---author:wangshuai ---date:20220407  for锛歳owkey涓嶈缃垚id锛宻ync寮�鍚紓姝ョ殑鏃跺�欙紝鐐瑰嚮涓婄骇涓嬬骇涓嶆樉绀�------------
-      params['pid'] = treeNode.value;
-      //update-end---author:wangshuai ---date:20220407  for锛歳owkey涓嶈缃垚id锛宻ync寮�鍚紓姝ョ殑鏃跺�欙紝鐐瑰嚮涓婄骇涓嬬骇涓嶆樉绀�------------
-    }
-    if (ids) {
-      startPid = '';
-      params['ids'] = ids;
-    }
-    let record = await getList(params);
-    let optionData = record;
-    if (!props.serverTreeData) {
-      //鍓嶇澶勭悊鏁版嵁涓簍ree缁撴瀯
-      record = listToTree(record, props, startPid);
-      if (record.length == 0 && treeNode) {
-        checkHasChild(startPid, treeData.value);
-      }
-    }
-
-    if (openModal.value == true) {
-      //寮规妯″紡涓嬪姞杞藉叏閮ㄦ暟鎹�
-      if (!treeNode) {
-        treeData.value = record;
-      } else {
-        return new Promise((resolve: (value?: unknown) => void) => {
-          if (!treeNode.children) {
-            resolve();
-            return;
-          }
-          const asyncTreeAction: TreeActionType | null = unref(treeRef);
-          if (asyncTreeAction) {
-            asyncTreeAction.updateNodeByKey(treeNode.eventKey, { children: record });
-            asyncTreeAction.setExpandedKeys([treeNode.eventKey, ...asyncTreeAction.getExpandedKeys()]);
-          }
-          resolve();
-          return;
-        });
-      }
-      expandTree();
-    } else {
-      const options = <any[]>[];
-      optionData.forEach((item) => {
-        //update-begin-author:taoyan date:2022-7-4 for: issues/I5F3P4 online閰嶇疆閮ㄩ棬閫夋嫨鍚庣紪杈戯紝鏌ョ湅鏁版嵁搴旇鏄剧ず閮ㄩ棬鍚嶇О锛屼笉鏄儴闂ㄤ唬鐮�
-        options.push({ label: item[props.titleKey], value: item[props.rowKey] });
-        //update-end-author:taoyan date:2022-7-4 for: issues/I5F3P4 online閰嶇疆閮ㄩ棬閫夋嫨鍚庣紪杈戯紝鏌ョ湅鏁版嵁搴旇鏄剧ず閮ㄩ棬鍚嶇О锛屼笉鏄儴闂ㄤ唬鐮�
-      });
-      selectOptions.value = options;
-    }
-  }
-
-  /**
-   * 寮傛鍔犺浇鏃舵娴嬫槸鍚﹀惈鏈変笅绾ц妭鐐�
-   * @param pid 鐖惰妭鐐�
-   * @param treeArray  tree鏁版嵁
-   */
-  function checkHasChild(pid, treeArray) {
-    if (treeArray && treeArray.length > 0) {
-      for (let item of treeArray) {
-        if (item.key == pid) {
-          if (!item.child) {
-            item.isLeaf = true;
-          }
-          break;
-        } else {
-          checkHasChild(pid, item.children);
-        }
-      }
-    }
-  }
-
-  /**
-   * 鑾峰彇宸查�夋嫨鏁版嵁
-   */
-  function getSelectTreeData(success) {
-    const options = <any[]>[];
-    const values = <any[]>[];
-    selectRows.value.forEach((item) => {
-      options.push({ label: item[props.labelKey], value: item[props.rowKey] });
-    });
-    checkedKeys.value.forEach((item) => {
-      values.push(item);
-    });
-    selectOptions.value = options;
-    success && success(options, values);
-  }
-
-  /**
-   * 寮瑰嚭妗嗘樉绀洪殣钘忚Е鍙戜簨浠�
-   */
-  async function visibleChange(visible) {
-    if (visible) {
-      //寮瑰嚭妗嗘墦寮�鏃跺姞杞藉叏閮ㄦ暟鎹�
-      openModal.value = true;
-      await onLoadData(null, null);
-    } else {
-      openModal.value = false;
-    }
-  }
-
-  return [
-    {
-      visibleChange,
-      selectOptions,
-      selectValues,
-      onLoadData,
-      onCheck,
-      onSelect,
-      checkALL,
-      expandAll,
-      checkedKeys,
-      selectRows,
-      treeData,
-      getCheckStrictly,
-      getSelectTreeData,
-    },
-  ];
-}
diff --git a/src/components/Form/src/jeecg/props/props.ts b/src/components/Form/src/jeecg/props/props.ts
deleted file mode 100644
index 3a5fa79..0000000
--- a/src/components/Form/src/jeecg/props/props.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-//涓嬫媺閫夋嫨妗嗙粍浠跺叕鍏眕rops
-import { propTypes } from '/@/utils/propTypes';
-
-export const selectProps = {
-  //鏄惁澶氶��
-  isRadioSelection: {
-    type: Boolean,
-    //update-begin---author:wangshuai ---date:20220527  for锛氶儴闂ㄧ敤鎴风粍浠堕粯璁ゅ簲璇ュ崟閫夛紝鍚﹀垯鍏朵粬鍦版柟鏈夐棶棰�------------
-    default: false,
-    //update-end---author:wangshuai ---date:20220527  for锛氶儴闂ㄧ敤鎴风粍浠堕粯璁ゅ簲璇ュ崟閫夛紝鍚﹀垯鍏朵粬鍦版柟鏈夐棶棰�--------------
-  },
-  //鍥炰紶value瀛楁鍚�
-  rowKey: {
-    type: String,
-    default: 'id',
-  },
-  //鍥炰紶鏂囨湰瀛楁鍚�
-  labelKey: {
-    type: String,
-    default: 'name',
-  },
-  //鏌ヨ鍙傛暟
-  params: {
-    type: Object,
-    default: () => {},
-  },
-  //鏄惁鏄剧ず閫夋嫨鎸夐挳
-  showButton: propTypes.bool.def(true),
-  //鏄惁鏄剧ず鍙充晶閫変腑鍒楄〃
-  showSelected: propTypes.bool.def(false),
-  //鏈�澶ч�夋嫨鏁伴噺
-  maxSelectCount: {
-    type: Number,
-    default: 0,
-  },
-};
-
-//鏍戝舰閫夋嫨缁勪欢鍏叡props
-export const treeProps = {
-  //鍥炰紶value瀛楁鍚�
-  rowKey: {
-    type: String,
-    default: 'key',
-  },
-  //鍥炰紶鏂囨湰瀛楁鍚�
-  labelKey: {
-    type: String,
-    default: 'title',
-  },
-  //鍒濆灞曞紑鐨勫眰绾�
-  defaultExpandLevel: {
-    type: [Number],
-    default: 0,
-  },
-  //鏍筽id鍊�
-  startPid: {
-    type: [Number, String],
-    default: '',
-  },
-  //涓婚敭瀛楁
-  primaryKey: {
-    type: [String],
-    default: 'id',
-  },
-  //鐖禝D瀛楁
-  parentKey: {
-    type: [String],
-    default: 'parentId',
-  },
-  //title瀛楁
-  titleKey: {
-    type: [String],
-    default: 'title',
-  },
-  //鏄惁寮�鍚湇鍔$杞崲tree鏁版嵁缁撴瀯
-  serverTreeData: propTypes.bool.def(true),
-  //鏄惁寮�鍚紓姝ュ姞杞芥暟鎹�
-  sync: propTypes.bool.def(true),
-  //鏄惁鏄剧ず閫夋嫨鎸夐挳
-  showButton: propTypes.bool.def(true),
-  //鏄惁鏄剧ず澶嶉�夋
-  checkable: propTypes.bool.def(true),
-  //checkable 鐘舵�佷笅鑺傜偣閫夋嫨瀹屽叏鍙楁帶锛堢埗瀛愯妭鐐归�変腑鐘舵�佷笉鍐嶅叧鑱旓級
-  checkStrictly: propTypes.bool.def(false),
-  // 鏄惁鍏佽澶氶�夛紝榛樿 true
-  multiple: propTypes.bool.def(true),
-};
diff --git a/src/components/Form/src/props.ts b/src/components/Form/src/props.ts
deleted file mode 100644
index 1c8a645..0000000
--- a/src/components/Form/src/props.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-import type { FieldMapToTime, FormSchema } from './types/form';
-import type { CSSProperties, PropType } from 'vue';
-import type { ColEx } from './types';
-import type { TableActionType } from '/@/components/Table';
-import type { ButtonProps } from 'ant-design-vue/es/button/buttonTypes';
-import type { RowProps } from 'ant-design-vue/lib/grid/Row';
-import dayjs from "dayjs";
-import { propTypes } from '/@/utils/propTypes';
-import componentSetting from '/@/settings/componentSetting';
-
-const { form } = componentSetting;
-export const basicProps = {
-  model: {
-    type: Object as PropType<Recordable>,
-    default: {},
-  },
-  // 鏍囩瀹藉害  鍥哄畾瀹藉害
-  labelWidth: {
-    type: [Number, String] as PropType<number | string>,
-    default: 0,
-  },
-  fieldMapToTime: {
-    type: Array as PropType<FieldMapToTime>,
-    default: () => [],
-  },
-  fieldMapToNumber: {
-    type: Array as PropType<FieldMapToTime>,
-    default: () => [],
-  },
-  compact: propTypes.bool,
-  // 琛ㄥ崟閰嶇疆瑙勫垯
-  schemas: {
-    type: [Array] as PropType<FormSchema[]>,
-    default: () => [],
-  },
-  mergeDynamicData: {
-    type: Object as PropType<Recordable>,
-    default: null,
-  },
-  baseRowStyle: {
-    type: Object as PropType<CSSProperties>,
-  },
-  baseColProps: {
-    type: Object as PropType<Partial<ColEx>>,
-  },
-  autoSetPlaceHolder: propTypes.bool.def(true),
-  // 鍦↖NPUT缁勪欢涓婂崟鍑诲洖杞︽椂锛屾槸鍚﹁嚜鍔ㄦ彁浜�
-  autoSubmitOnEnter: propTypes.bool.def(false),
-  submitOnReset: propTypes.bool,
-  size: propTypes.oneOf(['default', 'small', 'large']).def('default'),
-  // 绂佺敤琛ㄥ崟
-  disabled: propTypes.bool,
-  emptySpan: {
-    type: [Number, Object] as PropType<number>,
-    default: 0,
-  },
-  // 鏄惁鏄剧ず鏀惰捣灞曞紑鎸夐挳
-  showAdvancedButton: propTypes.bool,
-  // 杞寲鏃堕棿
-  transformDateFunc: {
-    type: Function as PropType<Fn>,
-    default: (date: any) => {
-      // 鍒ゆ柇鏄惁鏄痙ayjs瀹炰緥
-      return dayjs.isDayjs(date) ? date?.format('YYYY-MM-DD HH:mm:ss') : date;
-    },
-  },
-  rulesMessageJoinLabel: propTypes.bool.def(true),
-  // 銆恓eecg銆戣秴杩�3鍒楄嚜鍔ㄦ姌鍙�
-  autoAdvancedCol: propTypes.number.def(3),
-  // 瓒呰繃3琛岃嚜鍔ㄦ姌鍙�
-  autoAdvancedLine: propTypes.number.def(3),
-  // 涓嶅彈鎶樺彔褰卞搷鐨勮鏁�
-  alwaysShowLines: propTypes.number.def(1),
-
-  // 鏄惁鏄剧ず鎿嶄綔鎸夐挳
-  showActionButtonGroup: propTypes.bool.def(true),
-  // 鎿嶄綔鍒桟ol閰嶇疆
-  actionColOptions: Object as PropType<Partial<ColEx>>,
-  // 鏄剧ず閲嶇疆鎸夐挳
-  showResetButton: propTypes.bool.def(true),
-  // 鏄惁鑱氱劍绗竴涓緭鍏ユ锛屽彧鍦ㄧ涓�涓〃鍗曢」涓篿nput鐨勬椂鍊欎綔鐢�
-  autoFocusFirstItem: propTypes.bool,
-  // 閲嶇疆鎸夐挳閰嶇疆
-  resetButtonOptions: Object as PropType<Partial<ButtonProps>>,
-
-  // 鏄剧ず纭鎸夐挳
-  showSubmitButton: propTypes.bool.def(true),
-  // 纭鎸夐挳閰嶇疆
-  submitButtonOptions: Object as PropType<Partial<ButtonProps>>,
-
-  // 鑷畾涔夐噸缃嚱鏁�
-  resetFunc: Function as PropType<() => Promise<void>>,
-  submitFunc: Function as PropType<() => Promise<void>>,
-
-  // 浠ヤ笅涓洪粯璁rops
-  hideRequiredMark: propTypes.bool,
-
-  labelCol: {
-    type: Object as PropType<Partial<ColEx>>,
-    default: form.labelCol,
-  },
-
-  layout: propTypes.oneOf(['horizontal', 'vertical', 'inline']).def('horizontal'),
-  tableAction: {
-    type: Object as PropType<TableActionType>,
-  },
-
-  wrapperCol: {
-    type: Object as PropType<Partial<ColEx>>,
-    default: form.wrapperCol,
-  },
-
-  colon: propTypes.bool.def(form.colon),
-
-  labelAlign: propTypes.string,
-
-  rowProps: Object as PropType<RowProps>,
-  
-  // 褰撹〃鍗曟槸鏌ヨ鏉′欢鐨勬椂鍊� 褰撹〃鍗曟敼鍙樺悗鑷姩鏌ヨ锛屼笉闇�瑕佺偣鍑绘煡璇㈡寜閽�
-  autoSearch: propTypes.bool.def(false),
-};
diff --git a/src/components/Form/src/types/form.ts b/src/components/Form/src/types/form.ts
deleted file mode 100644
index 5cddf3d..0000000
--- a/src/components/Form/src/types/form.ts
+++ /dev/null
@@ -1,216 +0,0 @@
-import type { NamePath, RuleObject } from 'ant-design-vue/lib/form/interface';
-import type { VNode, ComputedRef } from 'vue';
-import type { ButtonProps as AntdButtonProps } from '/@/components/Button';
-import type { FormItem } from './formItem';
-import type { ColEx, ComponentType } from './index';
-import type { TableActionType } from '/@/components/Table/src/types/table';
-import type { CSSProperties } from 'vue';
-import type { RowProps } from 'ant-design-vue/lib/grid/Row';
-
-export type FieldMapToTime = [string, [string, string], string?][];
-export type FieldMapToNumber = [string, [string, string]][];
-
-export type Rule = RuleObject & {
-  trigger?: 'blur' | 'change' | ['change', 'blur'];
-};
-
-export interface RenderCallbackParams {
-  schema: FormSchema;
-  values: Recordable;
-  model: Recordable;
-  field: string;
-}
-
-export interface ButtonProps extends AntdButtonProps {
-  text?: string;
-}
-
-export interface FormActionType {
-  submit: () => Promise<void>;
-  setFieldsValue: <T>(values: T) => Promise<void>;
-  resetFields: () => Promise<void>;
-  getFieldsValue: () => Recordable;
-  clearValidate: (name?: string | string[]) => Promise<void>;
-  updateSchema: (data: Partial<FormSchema> | Partial<FormSchema>[]) => Promise<void>;
-  resetSchema: (data: Partial<FormSchema> | Partial<FormSchema>[]) => Promise<void>;
-  setProps: (formProps: Partial<FormProps>) => Promise<void>;
-  getProps: ComputedRef<Partial<FormProps>>;
-  removeSchemaByFiled: (field: string | string[]) => Promise<void>;
-  appendSchemaByField: (schema: FormSchema, prefixField: string | undefined, first?: boolean | undefined) => Promise<void>;
-  validateFields: (nameList?: NamePath[]) => Promise<any>;
-  validate: (nameList?: NamePath[]) => Promise<any>;
-  scrollToField: (name: NamePath, options?: ScrollOptions) => Promise<void>;
-}
-
-export type RegisterFn = (formInstance: FormActionType) => void;
-
-export type UseFormReturnType = [RegisterFn, FormActionType];
-
-export interface FormProps {
-  layout?: 'vertical' | 'inline' | 'horizontal';
-  // Form value
-  model?: Recordable;
-  // The width of all items in the entire form
-  labelWidth?: number | string;
-  //alignment
-  labelAlign?: 'left' | 'right';
-  //Row configuration for the entire form
-  rowProps?: RowProps;
-  // Submit form on reset
-  submitOnReset?: boolean;
-  // Col configuration for the entire form
-  labelCol?: Partial<ColEx>;
-  // Col configuration for the entire form
-  wrapperCol?: Partial<ColEx>;
-
-  // General row style
-  baseRowStyle?: CSSProperties;
-
-  // General col configuration
-  baseColProps?: Partial<ColEx>;
-
-  // Form configuration rules
-  schemas?: FormSchema[];
-  // Function values used to merge into dynamic control form items
-  mergeDynamicData?: Recordable;
-  // Compact mode for search forms
-  compact?: boolean;
-  // Blank line span
-  emptySpan?: number | Partial<ColEx>;
-  // Internal component size of the form
-  size?: 'default' | 'small' | 'large';
-  // Whether to disable
-  disabled?: boolean;
-  // Time interval fields are mapped into multiple
-  fieldMapToTime?: FieldMapToTime;
-  // number interval fields are mapped into multiple
-  fieldMapToNumber?: FieldMapToNumber;
-  // Placeholder is set automatically
-  autoSetPlaceHolder?: boolean;
-  // Auto submit on press enter on input
-  autoSubmitOnEnter?: boolean;
-  // Check whether the information is added to the label
-  rulesMessageJoinLabel?: boolean;
-  // 鏄惁鏄剧ず灞曞紑鏀惰捣鎸夐挳
-  showAdvancedButton?: boolean;
-  // Whether to focus on the first input box, only works when the first form item is input
-  autoFocusFirstItem?: boolean;
-  // 銆恓eecg銆戝鏋� showAdvancedButton 涓� true锛岃秴杩囨寚瀹氬垪鏁伴粯璁ゆ姌鍙狅紝榛樿涓�3
-  autoAdvancedCol?: number;
-  // 濡傛灉 showAdvancedButton 涓� true锛岃秴杩囨寚瀹氳鏁拌榛樿鎶樺彔
-  autoAdvancedLine?: number;
-  // 鎶樺彔鏃跺缁堜繚鎸佹樉绀虹殑琛屾暟
-  alwaysShowLines?: number;
-  // Whether to show the operation button
-  showActionButtonGroup?: boolean;
-
-  // Reset button configuration
-  resetButtonOptions?: Partial<ButtonProps>;
-
-  // Confirm button configuration
-  submitButtonOptions?: Partial<ButtonProps>;
-
-  // Operation column configuration
-  actionColOptions?: Partial<ColEx>;
-
-  // Show reset button
-  showResetButton?: boolean;
-  // Show confirmation button
-  showSubmitButton?: boolean;
-
-  resetFunc?: () => Promise<void>;
-  submitFunc?: () => Promise<void>;
-  transformDateFunc?: (date: any) => string;
-  colon?: boolean;
-}
-export interface FormSchema {
-  // Field name
-  field: string;
-  // Event name triggered by internal value change, default change
-  changeEvent?: string;
-  // Variable name bound to v-model Default value
-  valueField?: string;
-  // Label name
-  label: string | VNode;
-  // Auxiliary text
-  subLabel?: string;
-  // Help text on the right side of the text
-  helpMessage?: string | string[] | ((renderCallbackParams: RenderCallbackParams) => string | string[]);
-  // BaseHelp component props
-  helpComponentProps?: Partial<HelpComponentProps>;
-  // Label width, if it is passed, the labelCol and WrapperCol configured by itemProps will be invalid
-  labelWidth?: string | number;
-  // Disable the adjustment of labelWidth with global settings of formModel, and manually set labelCol and wrapperCol by yourself
-  disabledLabelWidth?: boolean;
-  // render component
-  component: ComponentType;
-  // Component parameters
-  componentProps?:
-    | ((opt: { schema: FormSchema; tableAction: TableActionType; formActionType: FormActionType; formModel: Recordable }) => Recordable)
-    | object;
-  // Required
-  required?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean);
-
-  suffix?: string | number | ((values: RenderCallbackParams) => string | number);
-
-  // Validation rules
-  rules?: Rule[];
-  // Check whether the information is added to the label
-  rulesMessageJoinLabel?: boolean;
-
-  // Reference formModelItem
-  itemProps?: Partial<FormItem>;
-
-  // col configuration outside formModelItem
-  colProps?: Partial<ColEx>;
-
-  // 榛樿鍊�
-  defaultValue?: any;
-  isAdvanced?: boolean;
-
-  // Matching details components
-  span?: number;
-
-  ifShow?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean);
-
-  show?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean);
-
-  // Render the content in the form-item tag
-  render?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string;
-
-  // Rendering col content requires outer wrapper form-item
-  renderColContent?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string;
-
-  renderComponentContent?: ((renderCallbackParams: RenderCallbackParams) => any) | VNode | VNode[] | string;
-
-  // Custom slot, in from-item
-  slot?: string;
-
-  // Custom slot, similar to renderColContent
-  colSlot?: string;
-
-  dynamicDisabled?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean);
-
-  dynamicRules?: (renderCallbackParams: RenderCallbackParams) => Rule[];
-
-  // 杩欎釜灞炴�ц嚜瀹氫箟鐨� 鐢ㄤ簬鑷畾涔夌殑涓氬姟 姣斿鍦ㄨ〃鍗曟墦寮�鐨勬椂鍊欎慨鏀硅〃鍗曠殑绂佺敤鐘舵�侊紝浣嗘槸鍙堜笉鑳介噸鍐檆omponentProps锛屽洜涓轰粬鐨勫唴瀹瑰お澶氫簡锛屾墍浠ヤ娇鐢╠ynamicDisabled鍜宐uss瀹炵幇
-  buss?: any;
-  
-  //label瀛楁暟鎺у埗锛坙abel瀹藉害锛�
-  labelLength?: number
-}
-export interface HelpComponentProps {
-  maxWidth: string;
-  // Whether to display the serial number
-  showIndex: boolean;
-  // Text list
-  text: any;
-  // colour
-  color: string;
-  // font size
-  fontSize: string;
-  icon: string;
-  absolute: boolean;
-  // Positioning
-  position: any;
-}
diff --git a/src/components/Form/src/types/formItem.ts b/src/components/Form/src/types/formItem.ts
deleted file mode 100644
index 77b238a..0000000
--- a/src/components/Form/src/types/formItem.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import type { NamePath } from 'ant-design-vue/lib/form/interface';
-import type { ColProps } from 'ant-design-vue/lib/grid/Col';
-import type { HTMLAttributes, VNodeChild } from 'vue';
-
-export interface FormItem {
-  /**
-   * Used with label, whether to display : after label text.
-   * @default true
-   * @type boolean
-   */
-  colon?: boolean;
-
-  /**
-   * The extra prompt message. It is similar to help. Usage example: to display error message and prompt message at the same time.
-   * @type any (string | slot)
-   */
-  extra?: string | VNodeChild | JSX.Element;
-
-  /**
-   * Used with validateStatus, this option specifies the validation status icon. Recommended to be used only with Input.
-   * @default false
-   * @type boolean
-   */
-  hasFeedback?: boolean;
-
-  /**
-   * The prompt message. If not provided, the prompt message will be generated by the validation rule.
-   * @type any (string | slot)
-   */
-  help?: string | VNodeChild | JSX.Element;
-
-  /**
-   * Label test
-   * @type any (string | slot)
-   */
-  label?: string | VNodeChild | JSX.Element;
-
-  /**
-   * The layout of label. You can set span offset to something like {span: 3, offset: 12} or sm: {span: 3, offset: 12} same as with <Col>
-   * @type Col
-   */
-  labelCol?: ColProps & HTMLAttributes;
-
-  /**
-   * Whether provided or not, it will be generated by the validation rule.
-   * @default false
-   * @type boolean
-   */
-  required?: boolean;
-
-  /**
-   * The validation status. If not provided, it will be generated by validation rule. options: 'success' 'warning' 'error' 'validating'
-   * @type string
-   */
-  validateStatus?: '' | 'success' | 'warning' | 'error' | 'validating';
-
-  /**
-   * The layout for input controls, same as labelCol
-   * @type Col
-   */
-  wrapperCol?: ColProps;
-  /**
-   * Set sub label htmlFor.
-   */
-  htmlFor?: string;
-  /**
-   * text align of label
-   */
-  labelAlign?: 'left' | 'right';
-  /**
-   * a key of model. In the setting of validate and resetFields method, the attribute is required
-   */
-  name?: NamePath;
-  /**
-   * validation rules of form
-   */
-  rules?: object | object[];
-  /**
-   * Whether to automatically associate form fields. In most cases, you can setting automatic association.
-   * If the conditions for automatic association are not met, you can manually associate them. See the notes below.
-   */
-  autoLink?: boolean;
-  /**
-   * Whether stop validate on first rule of error for this field.
-   */
-  validateFirst?: boolean;
-  /**
-   * When to validate the value of children node
-   */
-  validateTrigger?: string | string[] | false;
-}
diff --git a/src/components/Form/src/types/hooks.ts b/src/components/Form/src/types/hooks.ts
deleted file mode 100644
index 0308e73..0000000
--- a/src/components/Form/src/types/hooks.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export interface AdvanceState {
-  isAdvanced: boolean;
-  hideAdvanceBtn: boolean;
-  isLoad: boolean;
-  actionSpan: number;
-}
diff --git a/src/components/Form/src/types/index.ts b/src/components/Form/src/types/index.ts
deleted file mode 100644
index 15f1991..0000000
--- a/src/components/Form/src/types/index.ts
+++ /dev/null
@@ -1,154 +0,0 @@
-type ColSpanType = number | string;
-
-export interface ColEx {
-  style?: any;
-  /**
-   * raster number of cells to occupy, 0 corresponds to display: none
-   * @default none (0)
-   * @type ColSpanType
-   */
-  span?: ColSpanType;
-
-  /**
-   * raster order, used in flex layout mode
-   * @default 0
-   * @type ColSpanType
-   */
-  order?: ColSpanType;
-
-  /**
-   * the layout fill of flex
-   * @default none
-   * @type ColSpanType
-   */
-  flex?: ColSpanType;
-
-  /**
-   * the number of cells to offset Col from the left
-   * @default 0
-   * @type ColSpanType
-   */
-  offset?: ColSpanType;
-
-  /**
-   * the number of cells that raster is moved to the right
-   * @default 0
-   * @type ColSpanType
-   */
-  push?: ColSpanType;
-
-  /**
-   * the number of cells that raster is moved to the left
-   * @default 0
-   * @type ColSpanType
-   */
-  pull?: ColSpanType;
-
-  /**
-   * <576px and also default setting, could be a span value or an object containing above props
-   * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType
-   */
-  xs?: { span: ColSpanType; offset?: ColSpanType } | ColSpanType;
-
-  /**
-   * 鈮�576px, could be a span value or an object containing above props
-   * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType
-   */
-  sm?: { span: ColSpanType; offset?: ColSpanType } | ColSpanType;
-
-  /**
-   * 鈮�768px, could be a span value or an object containing above props
-   * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType
-   */
-  md?: { span: ColSpanType; offset?: ColSpanType } | ColSpanType;
-
-  /**
-   * 鈮�992px, could be a span value or an object containing above props
-   * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType
-   */
-  lg?: { span: ColSpanType; offset?: ColSpanType } | ColSpanType;
-
-  /**
-   * 鈮�1200px, could be a span value or an object containing above props
-   * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType
-   */
-  xl?: { span: ColSpanType; offset?: ColSpanType } | ColSpanType;
-
-  /**
-   * 鈮�1600px, could be a span value or an object containing above props
-   * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType
-   */
-  xxl?: { span: ColSpanType; offset?: ColSpanType } | ColSpanType;
-}
-
-export type ComponentType =
-  | 'Input'
-  | 'InputGroup'
-  | 'InputPassword'
-  | 'InputSearch'
-  | 'InputTextArea'
-  | 'InputNumber'
-  | 'InputCountDown'
-  | 'Select'
-  | 'ApiSelect'
-  | 'TreeSelect'
-  | 'ApiTreeSelect'
-  | 'ApiRadioGroup'
-  | 'RadioButtonGroup'
-  | 'RadioGroup'
-  | 'Checkbox'
-  | 'CheckboxGroup'
-  | 'AutoComplete'
-  | 'Cascader'
-  | 'DatePicker'
-  | 'MonthPicker'
-  | 'RangePicker'
-  | 'WeekPicker'
-  | 'TimePicker'
-  | 'Switch'
-  | 'StrengthMeter'
-  | 'Upload'
-  | 'IconPicker'
-  | 'Render'
-  | 'Slider'
-  | 'Rate'
-  | 'Divider'
-  | 'JAreaLinkage'
-  | 'JSelectPosition'
-  | 'JSelectRole'
-  | 'JSelectUser'
-  | 'JImageUpload'
-  | 'JDictSelectTag'
-  | 'JSelectDept'
-  | 'JAreaSelect'
-  | 'JEditor'
-  | 'JMarkdownEditor'
-  | 'JSelectInput'
-  | 'JCodeEditor'
-  | 'JCategorySelect'
-  | 'JSelectMultiple'
-  | 'JPopup'
-  | 'JSwitch'
-  | 'JEasyCron'
-  | 'JTreeDict'
-  | 'JInputPop'
-  | 'JCheckbox'
-  | 'JInput'
-  | 'JTreeSelect'
-  | 'JEllipsis'
-  | 'JSelectUserByDept'
-  | 'JUpload'
-  | 'JSearchSelect'
-  | 'JAddInput'
-  | 'Time'
-  | 'OnlineSelectCascade'
-  | 'LinkTableCard'
-  | 'LinkTableSelect'
-  | 'LinkTableForQuery'
-  | 'CascaderPcaForQuery'
-  | 'UserSelect'
-  | 'RangeDate'
-  | 'RangeNumber'
-  | 'linkRecordSelect'
-  | 'RangeTime'
-  | 'JRangeNumber';
diff --git a/src/components/Form/src/utils/Area.ts b/src/components/Form/src/utils/Area.ts
deleted file mode 100644
index c410ec5..0000000
--- a/src/components/Form/src/utils/Area.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import REGION_DATA from 'china-area-data';
-
-/**
- * Area 灞炴�ll鐨勭被鍨�
- */
-interface PlainPca {
-  id: string;
-  text: string;
-  pid: string;
-  index: Number;
-}
-
-/**
- * 鐪佸競鍖哄伐鍏风被 -瑙e喅鍒楄〃鐪佸競鍖虹粍浠剁殑缈昏瘧闂
- */
-class Area {
-  all: PlainPca[];
-
-  /**
-   * 鏋勯�犲櫒
-   * @param express
-   */
-  constructor(pcaa?) {
-    if (!pcaa) {
-      pcaa = REGION_DATA;
-    }
-    let arr: PlainPca[] = [];
-    const province = pcaa['86'];
-    Object.keys(province).map((key) => {
-      arr.push({ id: key, text: province[key], pid: '86', index: 1 });
-      const city = pcaa[key];
-      Object.keys(city).map((key2) => {
-        arr.push({ id: key2, text: city[key2], pid: key, index: 2 });
-        const qu = pcaa[key2];
-        if (qu) {
-          Object.keys(qu).map((key3) => {
-            arr.push({ id: key3, text: qu[key3], pid: key2, index: 3 });
-          });
-        }
-      });
-    });
-    this.all = arr;
-  }
-
-  get pca() {
-    return this.all;
-  }
-
-  getCode(text) {
-    if (!text || text.length == 0) {
-      return '';
-    }
-    for (let item of this.all) {
-      if (item.text === text) {
-        return item.id;
-      }
-    }
-  }
-
-  getText(code) {
-    if (!code || code.length == 0) {
-      return '';
-    }
-    let arr = [];
-    this.getAreaBycode(code, arr, 3);
-    return arr.join('/');
-  }
-
-  getRealCode(code) {
-    let arr = [];
-    this.getPcode(code, arr, 3);
-    return arr;
-  }
-
-  getPcode(id, arr, index) {
-    for (let item of this.all) {
-      if (item.id === id && item.index == index) {
-        arr.unshift(id);
-        if (item.pid != '86') {
-          this.getPcode(item.pid, arr, --index);
-        }
-      }
-    }
-  }
-
-  getAreaBycode(code, arr, index) {
-    for (let item of this.all) {
-      if (item.id === code && item.index == index) {
-        arr.unshift(item.text);
-        if (item.pid != '86') {
-          this.getAreaBycode(item.pid, arr, --index);
-        }
-      }
-    }
-  }
-}
-const jeecgAreaData = new Area();
-
-// 鏍规嵁code鎵炬枃鏈�
-const getAreaTextByCode = function (code) {
-  //update-begin-author:liusq---date:20220531--for: 鍒ゆ柇code鏄惁鏄code閫楀彿鍒嗗壊鐨勫瓧绗︿覆锛屾槸鐨勮瘽锛岃幏鍙栨渶鍚庝竴浣嶇殑code ---
-  if (code && code.includes(',')) {
-    code = code.substr(code.lastIndexOf(',') + 1);
-  }
-  //update-end-author:liusq---date:20220531--for: 鍒ゆ柇code鏄惁鏄code閫楀彿鍒嗗壊鐨勫瓧绗︿覆锛屾槸鐨勮瘽锛岃幏鍙栨渶鍚庝竴浣嶇殑code ---
-  return jeecgAreaData.getText(code);
-};
-
-export { getAreaTextByCode };
diff --git a/src/components/Form/src/utils/GroupRequest.ts b/src/components/Form/src/utils/GroupRequest.ts
deleted file mode 100644
index ce813df..0000000
--- a/src/components/Form/src/utils/GroupRequest.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { getAuthCache, setAuthCache } from '/@/utils/auth';
-/**
- * 灏嗕竴涓姹傚垎缁�
- *
- * @param getPromise 浼犲叆涓�涓彲浠ヨ幏鍙栧埌Promise瀵硅薄鐨勬柟娉�
- * @param groupId 鍒嗙粍ID锛屽鏋滀笉浼犳垨鑰呬负绌哄垯涓嶅垎缁�
- * @param expire 杩囨湡鏃堕棿锛岄粯璁� 鍗婂垎閽�
- */
-export function httpGroupRequest(getPromise, groupId, expire = 1000 * 30) {
-  if (groupId == null || groupId === '') {
-    console.log('--------popup----------getFrom  DB-------with---no--groupId ');
-    return getPromise();
-  }
-
-  if (getAuthCache(groupId)) {
-    console.log('---------popup--------getFrom  Cache--------groupId = ' + groupId);
-    return Promise.resolve(getAuthCache(groupId));
-  } else {
-    console.log('--------popup----------getFrom  DB---------groupId = ' + groupId);
-  }
-
-  // 杩樻病鏈夊彂鍑鸿姹傦紝灏卞彂鍑虹涓�娆$殑璇锋眰
-  return getPromise().then((res) => {
-    setAuthCache(groupId, res);
-    return Promise.resolve(res);
-  });
-}
diff --git a/src/components/Form/src/utils/areaDataUtil.js b/src/components/Form/src/utils/areaDataUtil.js
deleted file mode 100644
index 14aa7ae..0000000
--- a/src/components/Form/src/utils/areaDataUtil.js
+++ /dev/null
@@ -1,193 +0,0 @@
-import REGION_DATA from 'china-area-data';
-import { cloneDeep } from 'lodash-es';
-
-// code杞眽瀛楀ぇ瀵硅薄
-const CodeToText = {};
-// 姹夊瓧杞琧ode澶у璞�
-const TextToCode = {};
-const provinceObject = REGION_DATA['86']; // 鐪佷唤瀵硅薄
-const regionData = [];
-let provinceAndCityData = [];
-
-CodeToText[''] = '鍏ㄩ儴';
-
-// 璁$畻鐪�
-for (const prop in provinceObject) {
-  regionData.push({
-    value: prop, // 鐪佷唤code鍊�
-    label: provinceObject[prop], // 鐪佷唤姹夊瓧
-  });
-  CodeToText[prop] = provinceObject[prop];
-  TextToCode[provinceObject[prop]] = {
-    code: prop,
-  };
-  TextToCode[provinceObject[prop]]['鍏ㄩ儴'] = {
-    code: '',
-  };
-}
-// 璁$畻甯�
-for (let i = 0, len = regionData.length; i < len; i++) {
-  const provinceCode = regionData[i].value;
-  const provinceText = regionData[i].label;
-  const provinceChildren = [];
-  for (const prop in REGION_DATA[provinceCode]) {
-    provinceChildren.push({
-      value: prop,
-      label: REGION_DATA[provinceCode][prop],
-    });
-    CodeToText[prop] = REGION_DATA[provinceCode][prop];
-    TextToCode[provinceText][REGION_DATA[provinceCode][prop]] = {
-      code: prop,
-    };
-    TextToCode[provinceText][REGION_DATA[provinceCode][prop]]['鍏ㄩ儴'] = {
-      code: '',
-    };
-  }
-  if (provinceChildren.length) {
-    regionData[i].children = provinceChildren;
-  }
-}
-provinceAndCityData = cloneDeep(regionData);
-
-// 璁$畻鍖�
-for (let i = 0, len = regionData.length; i < len; i++) {
-  const province = regionData[i].children;
-  const provinceText = regionData[i].label;
-  if (province) {
-    for (let j = 0, len = province.length; j < len; j++) {
-      const cityCode = province[j].value;
-      const cityText = province[j].label;
-      const cityChildren = [];
-      for (const prop in REGION_DATA[cityCode]) {
-        cityChildren.push({
-          value: prop,
-          label: REGION_DATA[cityCode][prop],
-        });
-        CodeToText[prop] = REGION_DATA[cityCode][prop];
-        TextToCode[provinceText][cityText][REGION_DATA[cityCode][prop]] = {
-          code: prop,
-        };
-      }
-      if (cityChildren.length) {
-        province[j].children = cityChildren;
-      }
-    }
-  }
-}
-
-// 娣诲姞鈥滃叏閮ㄢ�濋�夐」
-const provinceAndCityDataPlus = cloneDeep(provinceAndCityData);
-provinceAndCityDataPlus.unshift({
-  value: '',
-  label: '鍏ㄩ儴',
-});
-for (let i = 0, len = provinceAndCityDataPlus.length; i < len; i++) {
-  const province = provinceAndCityDataPlus[i].children;
-  if (province && province.length) {
-    province.unshift({
-      value: '',
-      label: '鍏ㄩ儴',
-    });
-    for (let j = 0, len = province.length; j < len; j++) {
-      const city = province[j].children;
-      if (city && city.length) {
-        city.unshift({
-          value: '',
-          label: '鍏ㄩ儴',
-        });
-      }
-    }
-  }
-}
-
-const regionDataPlus = cloneDeep(regionData);
-regionDataPlus.unshift({
-  value: '',
-  label: '鍏ㄩ儴',
-});
-for (let i = 0, len = regionDataPlus.length; i < len; i++) {
-  const province = regionDataPlus[i].children;
-  if (province && province.length) {
-    province.unshift({
-      value: '',
-      label: '鍏ㄩ儴',
-    });
-
-    for (let j = 0, len = province.length; j < len; j++) {
-      const city = province[j].children;
-      if (city && city.length) {
-        city.unshift({
-          value: '',
-          label: '鍏ㄩ儴',
-        });
-      }
-    }
-  }
-}
-//--begin--@updateBy:liusq----date:20210922---for:鐪佸競鍖轰笁绾ц仈鍔ㄩ渶姹傛柟娉�-----
-//鐪佷唤鏁版嵁
-const provinceOptions = [];
-for (const prop in provinceObject) {
-  provinceOptions.push({
-    value: prop, // 鐪佷唤code鍊�
-    label: provinceObject[prop], // 鐪佷唤姹夊瓧
-  });
-}
-/**
- * 鏍规嵁code鑾峰彇涓嬫媺option鐨勬暟鎹�
- * @param code
- * @returns []
- */
-function getDataByCode(code) {
-  let data = [];
-  for (const prop in REGION_DATA[code]) {
-    data.push({
-      value: prop, // 鐪佷唤code鍊�
-      label: REGION_DATA[code][prop], // 鐪佷唤姹夊瓧
-    });
-  }
-  return data;
-}
-
-/**
- * 鑾峰彇鍏ㄩ儴鐪佸競鍖虹殑灞傜骇
- * @type {Array}
- */
-const pca = [];
-Object.keys(provinceObject).map((province) => {
-  pca.push({ id: province, text: provinceObject[province], pid: '86', index: 1 });
-  const cityObject = REGION_DATA[province];
-  Object.keys(cityObject).map((city) => {
-    pca.push({ id: city, text: cityObject[city], pid: province, index: 2 });
-    const areaObject = REGION_DATA[city];
-    if (areaObject) {
-      Object.keys(areaObject).map((area) => {
-        pca.push({ id: area, text: areaObject[area], pid: city, index: 3 });
-      });
-    }
-  });
-});
-
-/**
- * 鏍规嵁code鍙嶆帹value
- * @param code
- * @param level
- * @returns {Array}
- */
-function getRealCode(code, level) {
-  let arr = [];
-  getPcode(code, arr, level);
-  return arr;
-}
-function getPcode(id, arr, index) {
-  for (let item of pca) {
-    if (item.id === id && item.index == index) {
-      arr.unshift(id);
-      if (item.pid != '86') {
-        getPcode(item.pid, arr, --index);
-      }
-    }
-  }
-}
-//--end--@updateBy:liusq----date:20210922---for:鐪佸競鍖轰笁绾ц仈鍔ㄩ渶姹傛柟娉�-----
-export { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, getDataByCode, provinceOptions, getRealCode };
diff --git a/src/components/Form/src/utils/formUtils.ts b/src/components/Form/src/utils/formUtils.ts
deleted file mode 100644
index ea04960..0000000
--- a/src/components/Form/src/utils/formUtils.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import { unref } from 'vue';
-import { dateUtil } from '/@/utils/dateUtil';
-
-/**
- * 琛ㄥ崟鍖洪棿鏃堕棿鏁板�煎瓧娈佃浆鎹�
- * @param props
- * @param values
- */
-export function handleRangeValue(props, values) {
-  //鍒ゆ柇鏄惁閰嶇疆骞跺鐞唂ieldMapToTime
-  const fieldMapToTime = unref(props)?.fieldMapToTime;
-  fieldMapToTime && (values = handleRangeTimeValue(props, values));
-  //鍒ゆ柇鏄惁閰嶇疆骞跺鐞唂ieldMapToNumber
-  const fieldMapToNumber = unref(props)?.fieldMapToNumber;
-  fieldMapToNumber && (values = handleRangeNumberValue(props, values));
-  return values;
-}
-/**
- * 澶勭悊鏃堕棿杞崲鎴�2涓瓧娈�
- * @param props
- * @param values
- */
-export function handleRangeTimeValue(props, values) {
-  const fieldMapToTime = unref(props).fieldMapToTime;
-  if (!fieldMapToTime || !Array.isArray(fieldMapToTime)) {
-    return values;
-  }
-  for (const [field, [startTimeKey, endTimeKey], format = 'YYYY-MM-DD'] of fieldMapToTime) {
-    if (!field || !startTimeKey || !endTimeKey || !values[field]) {
-      continue;
-    }
-
-    // 銆恑ssues/I53G9Y銆� 鏃ユ湡鍖洪棿缁勪欢鏈夊彲鑳芥槸瀛楃涓�
-    let timeValue = values[field];
-    if (!Array.isArray(timeValue)) {
-      timeValue = timeValue.split(',');
-    }
-    const [startTime, endTime]: string[] = timeValue;
-    values[startTimeKey] = dateUtil(startTime).format(format);
-    values[endTimeKey] = dateUtil(endTime).format(format);
-    Reflect.deleteProperty(values, field);
-  }
-  return values;
-}
-/**
- * 澶勭悊鏁板瓧杞崲鎴�2涓瓧娈�
- * @param props
- * @param values
- * @updateby liusq
- * @updateDate:2021-09-16
- */
-export function handleRangeNumberValue(props, values) {
-  const fieldMapToNumber = unref(props).fieldMapToNumber;
-  if (!fieldMapToNumber || !Array.isArray(fieldMapToNumber)) {
-    return values;
-  }
-  for (const [field, [startNumberKey, endNumberKey]] of fieldMapToNumber) {
-    if (!field || !startNumberKey || !endNumberKey || !values[field]) {
-      continue;
-    }
-    //update-begin-author:taoyan date:2022-5-10 for: 鐢ㄤ簬鏁板�肩殑鑼冨洿鏌ヨ 鏁扮粍鏍煎紡鐨勪腑闂磋浆鎹笉鐭ラ亾鍝噷鍑轰簡闂锛岃繖閲屼細鍙樻垚瀛楃涓诧紝闇�瑕佸啀寮哄埗杞垚鏁扮粍
-    let temp = values[field];
-    if (typeof temp === 'string') {
-      temp = temp.split(',');
-    }
-    const [startNumber, endNumber]: number[] = temp;
-    //update-end-author:taoyan date:2022-5-10 for: 鐢ㄤ簬鏁板�肩殑鑼冨洿鏌ヨ 鏁扮粍鏍煎紡鐨勪腑闂磋浆鎹笉鐭ラ亾鍝噷鍑轰簡闂锛岃繖閲屼細鍙樻垚瀛楃涓诧紝闇�瑕佸啀寮哄埗杞垚鏁扮粍
-    values[startNumberKey] = startNumber;
-    values[endNumberKey] = endNumber;
-    Reflect.deleteProperty(values, field);
-  }
-  return values;
-}
diff --git a/src/components/Icon/data/icons.data.ts b/src/components/Icon/data/icons.data.ts
deleted file mode 100644
index bcac58e..0000000
--- a/src/components/Icon/data/icons.data.ts
+++ /dev/null
@@ -1,791 +0,0 @@
-export default [
-  'ant-design:account-book-filled',
-  'ant-design:account-book-outlined',
-  'ant-design:account-book-twotone',
-  'ant-design:aim-outlined',
-  'ant-design:alert-filled',
-  'ant-design:alert-outlined',
-  'ant-design:alert-twotone',
-  'ant-design:alibaba-outlined',
-  'ant-design:align-center-outlined',
-  'ant-design:align-left-outlined',
-  'ant-design:align-right-outlined',
-  'ant-design:alipay-circle-filled',
-  'ant-design:alipay-circle-outlined',
-  'ant-design:alipay-outlined',
-  'ant-design:alipay-square-filled',
-  'ant-design:aliwangwang-filled',
-  'ant-design:aliwangwang-outlined',
-  'ant-design:aliyun-outlined',
-  'ant-design:amazon-circle-filled',
-  'ant-design:amazon-outlined',
-  'ant-design:amazon-square-filled',
-  'ant-design:android-filled',
-  'ant-design:android-outlined',
-  'ant-design:ant-cloud-outlined',
-  'ant-design:ant-design-outlined',
-  'ant-design:apartment-outlined',
-  'ant-design:api-filled',
-  'ant-design:api-outlined',
-  'ant-design:api-twotone',
-  'ant-design:apple-filled',
-  'ant-design:apple-outlined',
-  'ant-design:appstore-add-outlined',
-  'ant-design:appstore-filled',
-  'ant-design:appstore-outlined',
-  'ant-design:appstore-twotone',
-  'ant-design:area-chart-outlined',
-  'ant-design:arrow-down-outlined',
-  'ant-design:arrow-left-outlined',
-  'ant-design:arrow-right-outlined',
-  'ant-design:arrow-up-outlined',
-  'ant-design:arrows-alt-outlined',
-  'ant-design:audio-filled',
-  'ant-design:audio-muted-outlined',
-  'ant-design:audio-outlined',
-  'ant-design:audio-twotone',
-  'ant-design:audit-outlined',
-  'ant-design:backward-filled',
-  'ant-design:backward-outlined',
-  'ant-design:bank-filled',
-  'ant-design:bank-outlined',
-  'ant-design:bank-twotone',
-  'ant-design:bar-chart-outlined',
-  'ant-design:barcode-outlined',
-  'ant-design:bars-outlined',
-  'ant-design:behance-circle-filled',
-  'ant-design:behance-outlined',
-  'ant-design:behance-square-filled',
-  'ant-design:behance-square-outlined',
-  'ant-design:bell-filled',
-  'ant-design:bell-outlined',
-  'ant-design:bell-twotone',
-  'ant-design:bg-colors-outlined',
-  'ant-design:block-outlined',
-  'ant-design:bold-outlined',
-  'ant-design:book-filled',
-  'ant-design:book-outlined',
-  'ant-design:book-twotone',
-  'ant-design:border-bottom-outlined',
-  'ant-design:border-horizontal-outlined',
-  'ant-design:border-inner-outlined',
-  'ant-design:border-left-outlined',
-  'ant-design:border-outer-outlined',
-  'ant-design:border-outlined',
-  'ant-design:border-right-outlined',
-  'ant-design:border-top-outlined',
-  'ant-design:border-verticle-outlined',
-  'ant-design:borderless-table-outlined',
-  'ant-design:box-plot-filled',
-  'ant-design:box-plot-outlined',
-  'ant-design:box-plot-twotone',
-  'ant-design:branches-outlined',
-  'ant-design:bug-filled',
-  'ant-design:bug-outlined',
-  'ant-design:bug-twotone',
-  'ant-design:build-filled',
-  'ant-design:build-outlined',
-  'ant-design:build-twotone',
-  'ant-design:bulb-filled',
-  'ant-design:bulb-outlined',
-  'ant-design:bulb-twotone',
-  'ant-design:calculator-filled',
-  'ant-design:calculator-outlined',
-  'ant-design:calculator-twotone',
-  'ant-design:calendar-filled',
-  'ant-design:calendar-outlined',
-  'ant-design:calendar-twotone',
-  'ant-design:camera-filled',
-  'ant-design:camera-outlined',
-  'ant-design:camera-twotone',
-  'ant-design:car-filled',
-  'ant-design:car-outlined',
-  'ant-design:car-twotone',
-  'ant-design:caret-down-filled',
-  'ant-design:caret-down-outlined',
-  'ant-design:caret-left-filled',
-  'ant-design:caret-left-outlined',
-  'ant-design:caret-right-filled',
-  'ant-design:caret-right-outlined',
-  'ant-design:caret-up-filled',
-  'ant-design:caret-up-outlined',
-  'ant-design:carry-out-filled',
-  'ant-design:carry-out-outlined',
-  'ant-design:carry-out-twotone',
-  'ant-design:check-circle-filled',
-  'ant-design:check-circle-outlined',
-  'ant-design:check-circle-twotone',
-  'ant-design:check-outlined',
-  'ant-design:check-square-filled',
-  'ant-design:check-square-outlined',
-  'ant-design:check-square-twotone',
-  'ant-design:chrome-filled',
-  'ant-design:chrome-outlined',
-  'ant-design:ci-circle-filled',
-  'ant-design:ci-circle-outlined',
-  'ant-design:ci-circle-twotone',
-  'ant-design:ci-outlined',
-  'ant-design:ci-twotone',
-  'ant-design:clear-outlined',
-  'ant-design:clock-circle-filled',
-  'ant-design:clock-circle-outlined',
-  'ant-design:clock-circle-twotone',
-  'ant-design:close-circle-filled',
-  'ant-design:close-circle-outlined',
-  'ant-design:close-circle-twotone',
-  'ant-design:close-outlined',
-  'ant-design:close-square-filled',
-  'ant-design:close-square-outlined',
-  'ant-design:close-square-twotone',
-  'ant-design:cloud-download-outlined',
-  'ant-design:cloud-filled',
-  'ant-design:cloud-outlined',
-  'ant-design:cloud-server-outlined',
-  'ant-design:cloud-sync-outlined',
-  'ant-design:cloud-twotone',
-  'ant-design:cloud-upload-outlined',
-  'ant-design:cluster-outlined',
-  'ant-design:code-filled',
-  'ant-design:code-outlined',
-  'ant-design:code-sandbox-circle-filled',
-  'ant-design:code-sandbox-outlined',
-  'ant-design:code-sandbox-square-filled',
-  'ant-design:code-twotone',
-  'ant-design:codepen-circle-filled',
-  'ant-design:codepen-circle-outlined',
-  'ant-design:codepen-outlined',
-  'ant-design:codepen-square-filled',
-  'ant-design:coffee-outlined',
-  'ant-design:column-height-outlined',
-  'ant-design:column-width-outlined',
-  'ant-design:comment-outlined',
-  'ant-design:compass-filled',
-  'ant-design:compass-outlined',
-  'ant-design:compass-twotone',
-  'ant-design:compress-outlined',
-  'ant-design:console-sql-outlined',
-  'ant-design:contacts-filled',
-  'ant-design:contacts-outlined',
-  'ant-design:contacts-twotone',
-  'ant-design:container-filled',
-  'ant-design:container-outlined',
-  'ant-design:container-twotone',
-  'ant-design:control-filled',
-  'ant-design:control-outlined',
-  'ant-design:control-twotone',
-  'ant-design:copy-filled',
-  'ant-design:copy-outlined',
-  'ant-design:copy-twotone',
-  'ant-design:copyright-circle-filled',
-  'ant-design:copyright-circle-outlined',
-  'ant-design:copyright-circle-twotone',
-  'ant-design:copyright-outlined',
-  'ant-design:copyright-twotone',
-  'ant-design:credit-card-filled',
-  'ant-design:credit-card-outlined',
-  'ant-design:credit-card-twotone',
-  'ant-design:crown-filled',
-  'ant-design:crown-outlined',
-  'ant-design:crown-twotone',
-  'ant-design:customer-service-filled',
-  'ant-design:customer-service-outlined',
-  'ant-design:customer-service-twotone',
-  'ant-design:dash-outlined',
-  'ant-design:dashboard-filled',
-  'ant-design:dashboard-outlined',
-  'ant-design:dashboard-twotone',
-  'ant-design:database-filled',
-  'ant-design:database-outlined',
-  'ant-design:database-twotone',
-  'ant-design:delete-column-outlined',
-  'ant-design:delete-filled',
-  'ant-design:delete-outlined',
-  'ant-design:delete-row-outlined',
-  'ant-design:delete-twotone',
-  'ant-design:delivered-procedure-outlined',
-  'ant-design:deployment-unit-outlined',
-  'ant-design:desktop-outlined',
-  'ant-design:diff-filled',
-  'ant-design:diff-outlined',
-  'ant-design:diff-twotone',
-  'ant-design:dingding-outlined',
-  'ant-design:dingtalk-circle-filled',
-  'ant-design:dingtalk-outlined',
-  'ant-design:dingtalk-square-filled',
-  'ant-design:disconnect-outlined',
-  'ant-design:dislike-filled',
-  'ant-design:dislike-outlined',
-  'ant-design:dislike-twotone',
-  'ant-design:dollar-circle-filled',
-  'ant-design:dollar-circle-outlined',
-  'ant-design:dollar-circle-twotone',
-  'ant-design:dollar-outlined',
-  'ant-design:dollar-twotone',
-  'ant-design:dot-chart-outlined',
-  'ant-design:double-left-outlined',
-  'ant-design:double-right-outlined',
-  'ant-design:down-circle-filled',
-  'ant-design:down-circle-outlined',
-  'ant-design:down-circle-twotone',
-  'ant-design:down-outlined',
-  'ant-design:down-square-filled',
-  'ant-design:down-square-outlined',
-  'ant-design:down-square-twotone',
-  'ant-design:download-outlined',
-  'ant-design:drag-outlined',
-  'ant-design:dribbble-circle-filled',
-  'ant-design:dribbble-outlined',
-  'ant-design:dribbble-square-filled',
-  'ant-design:dribbble-square-outlined',
-  'ant-design:dropbox-circle-filled',
-  'ant-design:dropbox-outlined',
-  'ant-design:dropbox-square-filled',
-  'ant-design:edit-filled',
-  'ant-design:edit-outlined',
-  'ant-design:edit-twotone',
-  'ant-design:ellipsis-outlined',
-  'ant-design:enter-outlined',
-  'ant-design:environment-filled',
-  'ant-design:environment-outlined',
-  'ant-design:environment-twotone',
-  'ant-design:euro-circle-filled',
-  'ant-design:euro-circle-outlined',
-  'ant-design:euro-circle-twotone',
-  'ant-design:euro-outlined',
-  'ant-design:euro-twotone',
-  'ant-design:exception-outlined',
-  'ant-design:exclamation-circle-filled',
-  'ant-design:exclamation-circle-outlined',
-  'ant-design:exclamation-circle-twotone',
-  'ant-design:exclamation-outlined',
-  'ant-design:expand-alt-outlined',
-  'ant-design:expand-outlined',
-  'ant-design:experiment-filled',
-  'ant-design:experiment-outlined',
-  'ant-design:experiment-twotone',
-  'ant-design:export-outlined',
-  'ant-design:eye-filled',
-  'ant-design:eye-invisible-filled',
-  'ant-design:eye-invisible-outlined',
-  'ant-design:eye-invisible-twotone',
-  'ant-design:eye-outlined',
-  'ant-design:eye-twotone',
-  'ant-design:facebook-filled',
-  'ant-design:facebook-outlined',
-  'ant-design:fall-outlined',
-  'ant-design:fast-backward-filled',
-  'ant-design:fast-backward-outlined',
-  'ant-design:fast-forward-filled',
-  'ant-design:fast-forward-outlined',
-  'ant-design:field-binary-outlined',
-  'ant-design:field-number-outlined',
-  'ant-design:field-string-outlined',
-  'ant-design:field-time-outlined',
-  'ant-design:file-add-filled',
-  'ant-design:file-add-outlined',
-  'ant-design:file-add-twotone',
-  'ant-design:file-done-outlined',
-  'ant-design:file-excel-filled',
-  'ant-design:file-excel-outlined',
-  'ant-design:file-excel-twotone',
-  'ant-design:file-exclamation-filled',
-  'ant-design:file-exclamation-outlined',
-  'ant-design:file-exclamation-twotone',
-  'ant-design:file-filled',
-  'ant-design:file-gif-outlined',
-  'ant-design:file-image-filled',
-  'ant-design:file-image-outlined',
-  'ant-design:file-image-twotone',
-  'ant-design:file-jpg-outlined',
-  'ant-design:file-markdown-filled',
-  'ant-design:file-markdown-outlined',
-  'ant-design:file-markdown-twotone',
-  'ant-design:file-outlined',
-  'ant-design:file-pdf-filled',
-  'ant-design:file-pdf-outlined',
-  'ant-design:file-pdf-twotone',
-  'ant-design:file-ppt-filled',
-  'ant-design:file-ppt-outlined',
-  'ant-design:file-ppt-twotone',
-  'ant-design:file-protect-outlined',
-  'ant-design:file-search-outlined',
-  'ant-design:file-sync-outlined',
-  'ant-design:file-text-filled',
-  'ant-design:file-text-outlined',
-  'ant-design:file-text-twotone',
-  'ant-design:file-twotone',
-  'ant-design:file-unknown-filled',
-  'ant-design:file-unknown-outlined',
-  'ant-design:file-unknown-twotone',
-  'ant-design:file-word-filled',
-  'ant-design:file-word-outlined',
-  'ant-design:file-word-twotone',
-  'ant-design:file-zip-filled',
-  'ant-design:file-zip-outlined',
-  'ant-design:file-zip-twotone',
-  'ant-design:filter-filled',
-  'ant-design:filter-outlined',
-  'ant-design:filter-twotone',
-  'ant-design:fire-filled',
-  'ant-design:fire-outlined',
-  'ant-design:fire-twotone',
-  'ant-design:flag-filled',
-  'ant-design:flag-outlined',
-  'ant-design:flag-twotone',
-  'ant-design:folder-add-filled',
-  'ant-design:folder-add-outlined',
-  'ant-design:folder-add-twotone',
-  'ant-design:folder-filled',
-  'ant-design:folder-open-filled',
-  'ant-design:folder-open-outlined',
-  'ant-design:folder-open-twotone',
-  'ant-design:folder-outlined',
-  'ant-design:folder-twotone',
-  'ant-design:folder-view-outlined',
-  'ant-design:font-colors-outlined',
-  'ant-design:font-size-outlined',
-  'ant-design:fork-outlined',
-  'ant-design:form-outlined',
-  'ant-design:format-painter-filled',
-  'ant-design:format-painter-outlined',
-  'ant-design:forward-filled',
-  'ant-design:forward-outlined',
-  'ant-design:frown-filled',
-  'ant-design:frown-outlined',
-  'ant-design:frown-twotone',
-  'ant-design:fullscreen-exit-outlined',
-  'ant-design:fullscreen-outlined',
-  'ant-design:function-outlined',
-  'ant-design:fund-filled',
-  'ant-design:fund-outlined',
-  'ant-design:fund-projection-screen-outlined',
-  'ant-design:fund-twotone',
-  'ant-design:fund-view-outlined',
-  'ant-design:funnel-plot-filled',
-  'ant-design:funnel-plot-outlined',
-  'ant-design:funnel-plot-twotone',
-  'ant-design:gateway-outlined',
-  'ant-design:gif-outlined',
-  'ant-design:gift-filled',
-  'ant-design:gift-outlined',
-  'ant-design:gift-twotone',
-  'ant-design:github-filled',
-  'ant-design:github-outlined',
-  'ant-design:gitlab-filled',
-  'ant-design:gitlab-outlined',
-  'ant-design:global-outlined',
-  'ant-design:gold-filled',
-  'ant-design:gold-outlined',
-  'ant-design:gold-twotone',
-  'ant-design:golden-filled',
-  'ant-design:google-circle-filled',
-  'ant-design:google-outlined',
-  'ant-design:google-plus-circle-filled',
-  'ant-design:google-plus-outlined',
-  'ant-design:google-plus-square-filled',
-  'ant-design:google-square-filled',
-  'ant-design:group-outlined',
-  'ant-design:hdd-filled',
-  'ant-design:hdd-outlined',
-  'ant-design:hdd-twotone',
-  'ant-design:heart-filled',
-  'ant-design:heart-outlined',
-  'ant-design:heart-twotone',
-  'ant-design:heat-map-outlined',
-  'ant-design:highlight-filled',
-  'ant-design:highlight-outlined',
-  'ant-design:highlight-twotone',
-  'ant-design:history-outlined',
-  'ant-design:holder-outlined',
-  'ant-design:home-filled',
-  'ant-design:home-outlined',
-  'ant-design:home-twotone',
-  'ant-design:hourglass-filled',
-  'ant-design:hourglass-outlined',
-  'ant-design:hourglass-twotone',
-  'ant-design:html5-filled',
-  'ant-design:html5-outlined',
-  'ant-design:html5-twotone',
-  'ant-design:idcard-filled',
-  'ant-design:idcard-outlined',
-  'ant-design:idcard-twotone',
-  'ant-design:ie-circle-filled',
-  'ant-design:ie-outlined',
-  'ant-design:ie-square-filled',
-  'ant-design:import-outlined',
-  'ant-design:inbox-outlined',
-  'ant-design:info-circle-filled',
-  'ant-design:info-circle-outlined',
-  'ant-design:info-circle-twotone',
-  'ant-design:info-outlined',
-  'ant-design:insert-row-above-outlined',
-  'ant-design:insert-row-below-outlined',
-  'ant-design:insert-row-left-outlined',
-  'ant-design:insert-row-right-outlined',
-  'ant-design:instagram-filled',
-  'ant-design:instagram-outlined',
-  'ant-design:insurance-filled',
-  'ant-design:insurance-outlined',
-  'ant-design:insurance-twotone',
-  'ant-design:interaction-filled',
-  'ant-design:interaction-outlined',
-  'ant-design:interaction-twotone',
-  'ant-design:issues-close-outlined',
-  'ant-design:italic-outlined',
-  'ant-design:key-outlined',
-  'ant-design:laptop-outlined',
-  'ant-design:layout-filled',
-  'ant-design:layout-outlined',
-  'ant-design:layout-twotone',
-  'ant-design:left-circle-filled',
-  'ant-design:left-circle-outlined',
-  'ant-design:left-circle-twotone',
-  'ant-design:left-outlined',
-  'ant-design:left-square-filled',
-  'ant-design:left-square-outlined',
-  'ant-design:left-square-twotone',
-  'ant-design:like-filled',
-  'ant-design:like-outlined',
-  'ant-design:like-twotone',
-  'ant-design:line-chart-outlined',
-  'ant-design:line-height-outlined',
-  'ant-design:line-outlined',
-  'ant-design:link-outlined',
-  'ant-design:linkedin-filled',
-  'ant-design:linkedin-outlined',
-  'ant-design:loading-3-quarters-outlined',
-  'ant-design:loading-outlined',
-  'ant-design:lock-filled',
-  'ant-design:lock-outlined',
-  'ant-design:lock-twotone',
-  'ant-design:login-outlined',
-  'ant-design:logout-outlined',
-  'ant-design:mac-command-filled',
-  'ant-design:mac-command-outlined',
-  'ant-design:mail-filled',
-  'ant-design:mail-outlined',
-  'ant-design:mail-twotone',
-  'ant-design:man-outlined',
-  'ant-design:medicine-box-filled',
-  'ant-design:medicine-box-outlined',
-  'ant-design:medicine-box-twotone',
-  'ant-design:medium-circle-filled',
-  'ant-design:medium-outlined',
-  'ant-design:medium-square-filled',
-  'ant-design:medium-workmark-outlined',
-  'ant-design:meh-filled',
-  'ant-design:meh-outlined',
-  'ant-design:meh-twotone',
-  'ant-design:menu-fold-outlined',
-  'ant-design:menu-outlined',
-  'ant-design:menu-unfold-outlined',
-  'ant-design:merge-cells-outlined',
-  'ant-design:message-filled',
-  'ant-design:message-outlined',
-  'ant-design:message-twotone',
-  'ant-design:minus-circle-filled',
-  'ant-design:minus-circle-outlined',
-  'ant-design:minus-circle-twotone',
-  'ant-design:minus-outlined',
-  'ant-design:minus-square-filled',
-  'ant-design:minus-square-outlined',
-  'ant-design:minus-square-twotone',
-  'ant-design:mobile-filled',
-  'ant-design:mobile-outlined',
-  'ant-design:mobile-twotone',
-  'ant-design:money-collect-filled',
-  'ant-design:money-collect-outlined',
-  'ant-design:money-collect-twotone',
-  'ant-design:monitor-outlined',
-  'ant-design:more-outlined',
-  'ant-design:node-collapse-outlined',
-  'ant-design:node-expand-outlined',
-  'ant-design:node-index-outlined',
-  'ant-design:notification-filled',
-  'ant-design:notification-outlined',
-  'ant-design:notification-twotone',
-  'ant-design:number-outlined',
-  'ant-design:one-to-one-outlined',
-  'ant-design:ordered-list-outlined',
-  'ant-design:paper-clip-outlined',
-  'ant-design:partition-outlined',
-  'ant-design:pause-circle-filled',
-  'ant-design:pause-circle-outlined',
-  'ant-design:pause-circle-twotone',
-  'ant-design:pause-outlined',
-  'ant-design:pay-circle-filled',
-  'ant-design:pay-circle-outlined',
-  'ant-design:percentage-outlined',
-  'ant-design:phone-filled',
-  'ant-design:phone-outlined',
-  'ant-design:phone-twotone',
-  'ant-design:pic-center-outlined',
-  'ant-design:pic-left-outlined',
-  'ant-design:pic-right-outlined',
-  'ant-design:picture-filled',
-  'ant-design:picture-outlined',
-  'ant-design:picture-twotone',
-  'ant-design:pie-chart-filled',
-  'ant-design:pie-chart-outlined',
-  'ant-design:pie-chart-twotone',
-  'ant-design:play-circle-filled',
-  'ant-design:play-circle-outlined',
-  'ant-design:play-circle-twotone',
-  'ant-design:play-square-filled',
-  'ant-design:play-square-outlined',
-  'ant-design:play-square-twotone',
-  'ant-design:plus-circle-filled',
-  'ant-design:plus-circle-outlined',
-  'ant-design:plus-circle-twotone',
-  'ant-design:plus-outlined',
-  'ant-design:plus-square-filled',
-  'ant-design:plus-square-outlined',
-  'ant-design:plus-square-twotone',
-  'ant-design:pound-circle-filled',
-  'ant-design:pound-circle-outlined',
-  'ant-design:pound-circle-twotone',
-  'ant-design:pound-outlined',
-  'ant-design:poweroff-outlined',
-  'ant-design:printer-filled',
-  'ant-design:printer-outlined',
-  'ant-design:printer-twotone',
-  'ant-design:profile-filled',
-  'ant-design:profile-outlined',
-  'ant-design:profile-twotone',
-  'ant-design:project-filled',
-  'ant-design:project-outlined',
-  'ant-design:project-twotone',
-  'ant-design:property-safety-filled',
-  'ant-design:property-safety-outlined',
-  'ant-design:property-safety-twotone',
-  'ant-design:pull-request-outlined',
-  'ant-design:pushpin-filled',
-  'ant-design:pushpin-outlined',
-  'ant-design:pushpin-twotone',
-  'ant-design:qq-circle-filled',
-  'ant-design:qq-outlined',
-  'ant-design:qq-square-filled',
-  'ant-design:qrcode-outlined',
-  'ant-design:question-circle-filled',
-  'ant-design:question-circle-outlined',
-  'ant-design:question-circle-twotone',
-  'ant-design:question-outlined',
-  'ant-design:radar-chart-outlined',
-  'ant-design:radius-bottomleft-outlined',
-  'ant-design:radius-bottomright-outlined',
-  'ant-design:radius-setting-outlined',
-  'ant-design:radius-upleft-outlined',
-  'ant-design:radius-upright-outlined',
-  'ant-design:read-filled',
-  'ant-design:read-outlined',
-  'ant-design:reconciliation-filled',
-  'ant-design:reconciliation-outlined',
-  'ant-design:reconciliation-twotone',
-  'ant-design:red-envelope-filled',
-  'ant-design:red-envelope-outlined',
-  'ant-design:red-envelope-twotone',
-  'ant-design:reddit-circle-filled',
-  'ant-design:reddit-outlined',
-  'ant-design:reddit-square-filled',
-  'ant-design:redo-outlined',
-  'ant-design:reload-outlined',
-  'ant-design:rest-filled',
-  'ant-design:rest-outlined',
-  'ant-design:rest-twotone',
-  'ant-design:retweet-outlined',
-  'ant-design:right-circle-filled',
-  'ant-design:right-circle-outlined',
-  'ant-design:right-circle-twotone',
-  'ant-design:right-outlined',
-  'ant-design:right-square-filled',
-  'ant-design:right-square-outlined',
-  'ant-design:right-square-twotone',
-  'ant-design:rise-outlined',
-  'ant-design:robot-filled',
-  'ant-design:robot-outlined',
-  'ant-design:rocket-filled',
-  'ant-design:rocket-outlined',
-  'ant-design:rocket-twotone',
-  'ant-design:rollback-outlined',
-  'ant-design:rotate-left-outlined',
-  'ant-design:rotate-right-outlined',
-  'ant-design:safety-certificate-filled',
-  'ant-design:safety-certificate-outlined',
-  'ant-design:safety-certificate-twotone',
-  'ant-design:safety-outlined',
-  'ant-design:save-filled',
-  'ant-design:save-outlined',
-  'ant-design:save-twotone',
-  'ant-design:scan-outlined',
-  'ant-design:schedule-filled',
-  'ant-design:schedule-outlined',
-  'ant-design:schedule-twotone',
-  'ant-design:scissor-outlined',
-  'ant-design:search-outlined',
-  'ant-design:security-scan-filled',
-  'ant-design:security-scan-outlined',
-  'ant-design:security-scan-twotone',
-  'ant-design:select-outlined',
-  'ant-design:send-outlined',
-  'ant-design:setting-filled',
-  'ant-design:setting-outlined',
-  'ant-design:setting-twotone',
-  'ant-design:shake-outlined',
-  'ant-design:share-alt-outlined',
-  'ant-design:shop-filled',
-  'ant-design:shop-outlined',
-  'ant-design:shop-twotone',
-  'ant-design:shopping-cart-outlined',
-  'ant-design:shopping-filled',
-  'ant-design:shopping-outlined',
-  'ant-design:shopping-twotone',
-  'ant-design:shrink-outlined',
-  'ant-design:signal-filled',
-  'ant-design:sisternode-outlined',
-  'ant-design:sketch-circle-filled',
-  'ant-design:sketch-outlined',
-  'ant-design:sketch-square-filled',
-  'ant-design:skin-filled',
-  'ant-design:skin-outlined',
-  'ant-design:skin-twotone',
-  'ant-design:skype-filled',
-  'ant-design:skype-outlined',
-  'ant-design:slack-circle-filled',
-  'ant-design:slack-outlined',
-  'ant-design:slack-square-filled',
-  'ant-design:slack-square-outlined',
-  'ant-design:sliders-filled',
-  'ant-design:sliders-outlined',
-  'ant-design:sliders-twotone',
-  'ant-design:small-dash-outlined',
-  'ant-design:smile-filled',
-  'ant-design:smile-outlined',
-  'ant-design:smile-twotone',
-  'ant-design:snippets-filled',
-  'ant-design:snippets-outlined',
-  'ant-design:snippets-twotone',
-  'ant-design:solution-outlined',
-  'ant-design:sort-ascending-outlined',
-  'ant-design:sort-descending-outlined',
-  'ant-design:sound-filled',
-  'ant-design:sound-outlined',
-  'ant-design:sound-twotone',
-  'ant-design:split-cells-outlined',
-  'ant-design:star-filled',
-  'ant-design:star-outlined',
-  'ant-design:star-twotone',
-  'ant-design:step-backward-filled',
-  'ant-design:step-backward-outlined',
-  'ant-design:step-forward-filled',
-  'ant-design:step-forward-outlined',
-  'ant-design:stock-outlined',
-  'ant-design:stop-filled',
-  'ant-design:stop-outlined',
-  'ant-design:stop-twotone',
-  'ant-design:strikethrough-outlined',
-  'ant-design:subnode-outlined',
-  'ant-design:swap-left-outlined',
-  'ant-design:swap-outlined',
-  'ant-design:swap-right-outlined',
-  'ant-design:switcher-filled',
-  'ant-design:switcher-outlined',
-  'ant-design:switcher-twotone',
-  'ant-design:sync-outlined',
-  'ant-design:table-outlined',
-  'ant-design:tablet-filled',
-  'ant-design:tablet-outlined',
-  'ant-design:tablet-twotone',
-  'ant-design:tag-filled',
-  'ant-design:tag-outlined',
-  'ant-design:tag-twotone',
-  'ant-design:tags-filled',
-  'ant-design:tags-outlined',
-  'ant-design:tags-twotone',
-  'ant-design:taobao-circle-filled',
-  'ant-design:taobao-circle-outlined',
-  'ant-design:taobao-outlined',
-  'ant-design:taobao-square-filled',
-  'ant-design:team-outlined',
-  'ant-design:thunderbolt-filled',
-  'ant-design:thunderbolt-outlined',
-  'ant-design:thunderbolt-twotone',
-  'ant-design:to-top-outlined',
-  'ant-design:tool-filled',
-  'ant-design:tool-outlined',
-  'ant-design:tool-twotone',
-  'ant-design:trademark-circle-filled',
-  'ant-design:trademark-circle-outlined',
-  'ant-design:trademark-circle-twotone',
-  'ant-design:trademark-outlined',
-  'ant-design:transaction-outlined',
-  'ant-design:translation-outlined',
-  'ant-design:trophy-filled',
-  'ant-design:trophy-outlined',
-  'ant-design:trophy-twotone',
-  'ant-design:twitter-circle-filled',
-  'ant-design:twitter-outlined',
-  'ant-design:twitter-square-filled',
-  'ant-design:underline-outlined',
-  'ant-design:undo-outlined',
-  'ant-design:ungroup-outlined',
-  'ant-design:unlock-filled',
-  'ant-design:unlock-outlined',
-  'ant-design:unlock-twotone',
-  'ant-design:unordered-list-outlined',
-  'ant-design:up-circle-filled',
-  'ant-design:up-circle-outlined',
-  'ant-design:up-circle-twotone',
-  'ant-design:up-outlined',
-  'ant-design:up-square-filled',
-  'ant-design:up-square-outlined',
-  'ant-design:up-square-twotone',
-  'ant-design:upload-outlined',
-  'ant-design:usb-filled',
-  'ant-design:usb-outlined',
-  'ant-design:usb-twotone',
-  'ant-design:user-add-outlined',
-  'ant-design:user-delete-outlined',
-  'ant-design:user-outlined',
-  'ant-design:user-switch-outlined',
-  'ant-design:usergroup-add-outlined',
-  'ant-design:usergroup-delete-outlined',
-  'ant-design:verified-outlined',
-  'ant-design:vertical-align-bottom-outlined',
-  'ant-design:vertical-align-middle-outlined',
-  'ant-design:vertical-align-top-outlined',
-  'ant-design:vertical-left-outlined',
-  'ant-design:vertical-right-outlined',
-  'ant-design:video-camera-add-outlined',
-  'ant-design:video-camera-filled',
-  'ant-design:video-camera-outlined',
-  'ant-design:video-camera-twotone',
-  'ant-design:wallet-filled',
-  'ant-design:wallet-outlined',
-  'ant-design:wallet-twotone',
-  'ant-design:warning-filled',
-  'ant-design:warning-outlined',
-  'ant-design:warning-twotone',
-  'ant-design:wechat-filled',
-  'ant-design:wechat-outlined',
-  'ant-design:weibo-circle-filled',
-  'ant-design:weibo-circle-outlined',
-  'ant-design:weibo-outlined',
-  'ant-design:weibo-square-filled',
-  'ant-design:weibo-square-outlined',
-  'ant-design:whats-app-outlined',
-  'ant-design:wifi-outlined',
-  'ant-design:windows-filled',
-  'ant-design:windows-outlined',
-  'ant-design:woman-outlined',
-  'ant-design:yahoo-filled',
-  'ant-design:yahoo-outlined',
-  'ant-design:youtube-filled',
-  'ant-design:youtube-outlined',
-  'ant-design:yuque-filled',
-  'ant-design:yuque-outlined',
-  'ant-design:zhihu-circle-filled',
-  'ant-design:zhihu-outlined',
-  'ant-design:zhihu-square-filled',
-  'ant-design:zoom-in-outlined',
-  'ant-design:zoom-out-outlined',
-];
diff --git a/src/components/Icon/index.ts b/src/components/Icon/index.ts
deleted file mode 100644
index 01e7d23..0000000
--- a/src/components/Icon/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import Icon from './src/Icon.vue';
-import SvgIcon from './src/SvgIcon.vue';
-import IconPicker from './src/IconPicker.vue';
-
-export { Icon, IconPicker, SvgIcon };
-
-export default Icon;
diff --git a/src/components/Icon/src/Icon.vue b/src/components/Icon/src/Icon.vue
deleted file mode 100644
index d6b1349..0000000
--- a/src/components/Icon/src/Icon.vue
+++ /dev/null
@@ -1,101 +0,0 @@
-<template>
-  <SvgIcon :size="size" :name="getSvgIcon" v-if="isSvgIcon" :class="[$attrs.class, 'anticon']" :spin="spin" />
-  <span v-else ref="elRef" :class="[$attrs.class, 'app-iconify anticon', spin && 'app-iconify-spin']" :style="getWrapStyle"></span>
-</template>
-<script lang="ts">
-  import type { PropType } from 'vue';
-  import { defineComponent, ref, watch, onMounted, nextTick, unref, computed, CSSProperties } from 'vue';
-  import SvgIcon from './SvgIcon.vue';
-  import Iconify from '@purge-icons/generated';
-  import { isString } from '/@/utils/is';
-  import { propTypes } from '/@/utils/propTypes';
-
-  const SVG_END_WITH_FLAG = '|svg';
-  export default defineComponent({
-    name: 'Icon',
-    components: { SvgIcon },
-    props: {
-      // icon name
-      icon: propTypes.string,
-      // icon color
-      color: propTypes.string,
-      // icon size
-      size: {
-        type: [String, Number] as PropType<string | number>,
-        default: 16,
-      },
-      spin: propTypes.bool.def(false),
-      prefix: propTypes.string.def(''),
-    },
-    setup(props) {
-      const elRef = ref<ElRef>(null);
-
-      const isSvgIcon = computed(() => props.icon?.endsWith(SVG_END_WITH_FLAG));
-      const getSvgIcon = computed(() => props.icon.replace(SVG_END_WITH_FLAG, ''));
-      const getIconRef = computed(() => `${props.prefix ? props.prefix + ':' : ''}${props.icon}`);
-
-      const update = async () => {
-        if (unref(isSvgIcon)) return;
-
-        const el = unref(elRef);
-        if (!el) return;
-
-        await nextTick();
-        const icon = unref(getIconRef);
-        if (!icon) return;
-
-        const svg = Iconify.renderSVG(icon, {});
-        if (svg) {
-          el.textContent = '';
-          el.appendChild(svg);
-        } else {
-          const span = document.createElement('span');
-          span.className = 'iconify';
-          span.dataset.icon = icon;
-          el.textContent = '';
-          el.appendChild(span);
-        }
-      };
-
-      const getWrapStyle = computed((): CSSProperties => {
-        const { size, color } = props;
-        let fs = size;
-        if (isString(size)) {
-          fs = parseInt(size, 10);
-        }
-
-        return {
-          fontSize: `${fs}px`,
-          color: color,
-          display: 'inline-flex',
-        };
-      });
-
-      watch(() => props.icon, update, { flush: 'post' });
-
-      onMounted(update);
-
-      return { elRef, getWrapStyle, isSvgIcon, getSvgIcon };
-    },
-  });
-</script>
-<style lang="less">
-  .app-iconify {
-    display: inline-block;
-    // vertical-align: middle;
-
-    &-spin {
-      svg {
-        animation: loadingCircle 1s infinite linear;
-      }
-    }
-  }
-
-  span.iconify {
-    display: block;
-    min-width: 1em;
-    min-height: 1em;
-    background-color: @iconify-bg-color;
-    border-radius: 100%;
-  }
-</style>
diff --git a/src/components/Icon/src/IconPicker.vue b/src/components/Icon/src/IconPicker.vue
deleted file mode 100644
index 144ffc2..0000000
--- a/src/components/Icon/src/IconPicker.vue
+++ /dev/null
@@ -1,178 +0,0 @@
-<template>
-  <a-input :disabled="disabled" :style="{ width }" readOnly :placeholder="t('component.icon.placeholder')" :class="prefixCls" v-model:value="currentSelect">
-    <template #addonAfter>
-      <a-popover placement="bottomLeft" trigger="click" v-model="visible" :overlayClassName="`${prefixCls}-popover`">
-        <template #title>
-          <div class="flex justify-between">
-            <a-input :placeholder="t('component.icon.search')"  @change="debounceHandleSearchChange" allowClear />
-          </div>
-        </template>
-
-        <template #content>
-          <div v-if="getPaginationList.length">
-            <ScrollContainer class="border border-solid border-t-0">
-              <ul class="flex flex-wrap px-2">
-                <li
-                  v-for="icon in getPaginationList"
-                  :key="icon"
-                  :class="currentSelect === icon ? 'border border-primary' : ''"
-                  class="p-2 w-1/8 cursor-pointer mr-1 mt-1 flex justify-center items-center border border-solid hover:border-primary"
-                  @click="handleClick(icon)"
-                  :title="icon"
-                >
-                  <!-- <Icon :icon="icon" :prefix="prefix" /> -->
-                  <SvgIcon v-if="isSvgMode" :name="icon" />
-                  <Icon :icon="icon" v-else />
-                </li>
-              </ul>
-            </ScrollContainer>
-            <div class="flex py-2 items-center justify-center" v-if="getTotal >= pageSize">
-              <a-pagination showLessItems size="small" :pageSize="pageSize" :total="getTotal" @change="handlePageChange" />
-            </div>
-          </div>
-          <template v-else
-            ><div class="p-5"><a-empty /></div>
-          </template>
-        </template>
-
-        <span class="cursor-pointer px-2 py-1 flex items-center" v-if="isSvgMode && currentSelect">
-          <SvgIcon :name="currentSelect" />
-        </span>
-        <Icon :icon="currentSelect || 'ion:apps-outline'" class="cursor-pointer px-2 py-1" v-else />
-      </a-popover>
-    </template>
-  </a-input>
-</template>
-<script lang="ts" setup name="icon-picker">
-  import { ref, watchEffect, watch, unref } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { ScrollContainer } from '/@/components/Container';
-  import { Input, Popover, Pagination, Empty } from 'ant-design-vue';
-  import Icon from './Icon.vue';
-  import SvgIcon from './SvgIcon.vue';
-
-  import iconsData from '../data/icons.data';
-  import { propTypes } from '/@/utils/propTypes';
-  import { usePagination } from '/@/hooks/web/usePagination';
-  import { useDebounceFn } from '@vueuse/core';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import svgIcons from 'virtual:svg-icons-names';
-
-  // 娌℃湁浣跨敤鍒悕寮曞叆锛屾槸鍥犱负WebStorm褰撳墠鐗堟湰杩樹笉鑳芥纭瘑鍒紝浼氭姤unused璀﹀憡
-  const AInput = Input;
-  const APopover = Popover;
-  const APagination = Pagination;
-  const AEmpty = Empty;
-
-  function getIcons() {
-    const data = iconsData as any;
-    const prefix: string = data?.prefix ?? '';
-    let result: string[] = [];
-    if (prefix) {
-      result = (data?.icons ?? []).map((item) => `${prefix}:${item}`);
-    } else if (Array.isArray(iconsData)) {
-      result = iconsData as string[];
-    }
-    return result;
-  }
-
-  function getSvgIcons() {
-    return svgIcons.map((icon) => icon.replace('icon-', ''));
-  }
-
-  const props = defineProps({
-    value: propTypes.string,
-    width: propTypes.string.def('100%'),
-    pageSize: propTypes.number.def(140),
-    copy: propTypes.bool.def(false),
-    mode: propTypes.oneOf<('svg' | 'iconify')[]>(['svg', 'iconify']).def('iconify'),
-    disabled: propTypes.bool.def(true),
-    clearSelect: propTypes.bool.def(false)
-  });
-
-  const emit = defineEmits(['change', 'update:value']);
-
-  const isSvgMode = props.mode === 'svg';
-  const icons = isSvgMode ? getSvgIcons() : getIcons();
-
-  const currentSelect = ref('');
-  const visible = ref(false);
-  const currentList = ref(icons);
-
-  const { t } = useI18n();
-  const { prefixCls } = useDesign('icon-picker');
-
-  const debounceHandleSearchChange = useDebounceFn(handleSearchChange, 100);
-  const { clipboardRef, isSuccessRef } = useCopyToClipboard(props.value);
-  const { createMessage } = useMessage();
-
-  const { getPaginationList, getTotal, setCurrentPage } = usePagination(currentList, props.pageSize);
-
-  watchEffect(() => {
-    currentSelect.value = props.value;
-  });
-
-  watch(
-    () => currentSelect.value,
-    (v) => {
-      emit('update:value', v);
-      return emit('change', v);
-    }
-  );
-
-  function handlePageChange(page: number) {
-    setCurrentPage(page);
-  }
-
-  function handleClick(icon: string) {
-    if(props.clearSelect === true){
-      if(currentSelect.value===icon){
-        currentSelect.value = ''
-      }else{
-        currentSelect.value = icon;
-      }
-    }else{
-      currentSelect.value = icon;
-      if (props.copy) {
-        clipboardRef.value = icon;
-        if (unref(isSuccessRef)) {
-          createMessage.success(t('component.icon.copy'));
-        }
-      }
-    }
-    
-  }
-
-  function handleSearchChange(e: ChangeEvent) {
-    const value = e.target.value;
-    if (!value) {
-      setCurrentPage(1);
-      currentList.value = icons;
-      return;
-    }
-    currentList.value = icons.filter((item) => item.includes(value));
-  }
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-icon-picker';
-
-  .@{prefix-cls} {
-    .ant-input-group-addon {
-      padding: 0;
-    }
-
-    &-popover {
-      width: 300px;
-
-      .ant-popover-inner-content {
-        padding: 0;
-      }
-
-      .scrollbar {
-        height: 220px;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Icon/src/SvgIcon.vue b/src/components/Icon/src/SvgIcon.vue
deleted file mode 100644
index 20bfcca..0000000
--- a/src/components/Icon/src/SvgIcon.vue
+++ /dev/null
@@ -1,61 +0,0 @@
-<template>
-  <svg :class="[prefixCls, $attrs.class, spin && 'svg-icon-spin']" :style="getStyle" aria-hidden="true">
-    <use :xlink:href="symbolId" />
-  </svg>
-</template>
-<script lang="ts">
-  import type { CSSProperties } from 'vue';
-  import { defineComponent, computed } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  export default defineComponent({
-    name: 'SvgIcon',
-    props: {
-      prefix: {
-        type: String,
-        default: 'icon',
-      },
-      name: {
-        type: String,
-        required: true,
-      },
-      size: {
-        type: [Number, String],
-        default: 16,
-      },
-      spin: {
-        type: Boolean,
-        default: false,
-      },
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('svg-icon');
-      const symbolId = computed(() => `#${props.prefix}-${props.name}`);
-
-      const getStyle = computed((): CSSProperties => {
-        const { size } = props;
-        let s = `${size}`;
-        s = `${s.replace('px', '')}px`;
-        return {
-          width: s,
-          height: s,
-        };
-      });
-      return { symbolId, prefixCls, getStyle };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-svg-icon';
-
-  .@{prefix-cls} {
-    display: inline-block;
-    overflow: hidden;
-    vertical-align: -0.15em;
-    fill: currentColor;
-  }
-
-  .svg-icon-spin {
-    animation: loadingCircle 1s infinite linear;
-  }
-</style>
diff --git a/src/components/JVxeCustom/index.ts b/src/components/JVxeCustom/index.ts
deleted file mode 100644
index e2d0caa..0000000
--- a/src/components/JVxeCustom/index.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { registerComponent, registerAsyncComponent } from '/@/components/jeecg/JVxeTable';
-import { JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-import { DictSearchSpanCell, DictSearchInputCell } from './src/components/JVxeSelectDictSearchCell';
-
-export async function registerJVxeCustom() {
-  // ----------------- 鈿� 娉ㄦ剰浜嬮」 鈿� -----------------
-  //  褰撶粍浠跺唴鍖呭惈 BasicModal 鏃讹紝蹇呴』浣跨敤寮傛寮曞叆锛�
-  //  鍚﹀垯灏嗕細瀵艰嚧 i18n 澶辨晥锛�
-  // ----------------- 鈿� 娉ㄦ剰浜嬮」 鈿� -----------------
-
-  // 娉ㄥ唽銆怭opup銆戯紙鏅�氬皝瑁呮柟寮忥級
-  await registerAsyncComponent(JVxeTypes.popup, import('./src/components/JVxePopupCell.vue'));
-
-  // 娉ㄥ唽銆愬瓧鍏告悳绱笅鎷夈�戠粍浠讹紙楂樼骇灏佽鏂瑰紡锛�
-  registerComponent(JVxeTypes.selectDictSearch, DictSearchInputCell, DictSearchSpanCell);
-
-  // 娉ㄥ唽銆愭枃浠朵笂浼犮�戠粍浠�
-  await registerAsyncComponent(JVxeTypes.file, import('./src/components/JVxeFileCell.vue'));
-  // 娉ㄥ唽銆愬浘鐗囦笂浼犮�戠粍浠�
-  await registerAsyncComponent(JVxeTypes.image, import('./src/components/JVxeImageCell.vue'));
-  // 娉ㄥ唽銆愮敤鎴烽�夋嫨銆戠粍浠�
-  await registerAsyncComponent(JVxeTypes.userSelect, import('./src/components/JVxeUserSelectCell.vue'));
-  // 娉ㄥ唽銆愰儴闂ㄩ�夋嫨銆戠粍浠�
-  await registerAsyncComponent(JVxeTypes.departSelect, import('./src/components/JVxeDepartSelectCell.vue'));
-  // 娉ㄥ唽銆愮渷甯傚尯閫夋嫨銆戠粍浠�
-  await registerAsyncComponent(JVxeTypes.pca, import('./src/components/JVxePcaCell.vue'));
-}
diff --git a/src/components/JVxeCustom/src/components/JVxeDepartSelectCell.vue b/src/components/JVxeCustom/src/components/JVxeDepartSelectCell.vue
deleted file mode 100644
index edafba1..0000000
--- a/src/components/JVxeCustom/src/components/JVxeDepartSelectCell.vue
+++ /dev/null
@@ -1,212 +0,0 @@
-<template>
-  <!--  <div>-->
-  <!--    <a-input-->
-  <!--        v-show="!departIds"-->
-  <!--        @click="openSelect"-->
-  <!--        placeholder="璇风偣鍑婚�夋嫨閮ㄩ棬"-->
-  <!--        v-model="departNames"-->
-  <!--        readOnly-->
-  <!--        :disabled="componentDisabled"-->
-  <!--        class="jvxe-select-input">-->
-  <!--      <a-icon slot="prefix" type="cluster" title="閮ㄩ棬閫夋嫨鎺т欢"/>-->
-  <!--    </a-input>-->
-  <!--    <j-select-depart-modal-->
-  <!--        ref="innerDepartSelectModal"-->
-  <!--        :modal-width="modalWidth"-->
-  <!--        :multi="multi"-->
-  <!--        :rootOpened="rootOpened"-->
-  <!--        :depart-id="departIds"-->
-  <!--        @ok="handleOK"-->
-  <!--        @initComp="initComp"/>-->
-  <!--    <span style="display: inline-block;height:100%;padding-left:14px" v-if="departIds">-->
-  <!--      <span @click="openSelect" style="display: inline-block;vertical-align: middle">{{ departNames }}</span>-->
-  <!--      <a-icon style="margin-left:5px;vertical-align: middle" type="close-circle" @click="handleEmpty" title="娓呯┖"/>-->
-  <!--    </span>-->
-  <!--  </div>-->
-  <div :class="[prefixCls]">
-    <JSelectDept v-bind="getProps" @change="handleChange" />
-  </div>
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { JSelectDept } from '/@/components/Form';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-
-  // import JSelectDepartModal from '@/components/jeecgbiz/modal/JSelectDepartModal'
-  import { dispatchEvent } from '/@/components/jeecg/JVxeTable/utils';
-  import { isArray, isEmpty, isString } from '/@/utils/is';
-
-  export default defineComponent({
-    name: 'JVxeDepartSelectCell',
-    components: { JSelectDept },
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, cellProps, handleChangeCommon, useCellDesign } = useJVxeComponent(props);
-      const { prefixCls } = useCellDesign('depart-select');
-
-      const selectedValue = computed(() => {
-        let val: any = innerValue.value;
-        if (val == null) {
-          return val;
-        }
-        if (isEmpty(val)) {
-          return [];
-        }
-        if (isArray(val)) {
-          return val;
-        }
-        if (isString(val)) {
-          return (<string>val).split(',');
-        }
-        return [val];
-      });
-
-      const multiple = computed(() => cellProps.value['multi'] != false);
-
-      const getProps = computed(() => {
-        return {
-          ...cellProps.value,
-          value: selectedValue.value,
-          showButton: false,
-          // 涓嶅厑璁告悳绱�
-          showSearch: false,
-          // 璁剧疆鏈�澶х殑鏄剧ず涓暟
-          maxTagCount: 1,
-          // 鏄剧ず鎻愮ず閲嶅啓锛屽幓鎺夌渷鐣ュ彿
-          maxTagPlaceholder: ({ length }) => '+' + length,
-        };
-      });
-
-      function handleChange(values) {
-        handleChangeCommon(values.join(','));
-      }
-
-      return {
-        prefixCls,
-        selectedValue,
-        multiple,
-        cellProps,
-        getProps,
-        handleChange,
-      };
-    },
-
-    data() {
-      return {
-        // departNames: '',
-        // departIds: '',
-        // selectedOptions: [],
-        // customReturnField: 'id',
-      };
-    },
-    computed: {
-      // custProps() {
-      //   const { departIds, originColumn: col, caseId, cellProps } = this
-      //   return {
-      //     ...cellProps,
-      //     value: departIds,
-      //     field: col.field || col.key,
-      //     groupId: caseId,
-      //     class: 'jvxe-select',
-      //   }
-      // },
-      // componentDisabled() {
-      //   if (this.cellProps.disabled == true) {
-      //     return true
-      //   }
-      //   return false
-      // },
-      // modalWidth() {
-      //   if (this.cellProps.modalWidth) {
-      //     return this.cellProps.modalWidth
-      //   } else {
-      //     return 500
-      //   }
-      // },
-      // multi() {
-      //   if (this.cellProps.multi == false) {
-      //     return false
-      //   } else {
-      //     return true
-      //   }
-      // },
-      // rootOpened() {
-      //   if (this.cellProps.open == false) {
-      //     return false
-      //   } else {
-      //     return true
-      //   }
-      // },
-    },
-    watch: {
-      // innerValue: {
-      //   immediate: true,
-      //   handler(val) {
-      //     if (val == null || val === '') {
-      //       this.departIds = ''
-      //     } else {
-      //       this.departIds = val
-      //     }
-      //   },
-      // },
-    },
-    methods: {
-      // openSelect() {
-      //   this.$refs.innerDepartSelectModal.show()
-      // },
-      // handleEmpty() {
-      //   this.handleOK('')
-      // },
-      // handleOK(rows, idstr) {
-      //   let value = ''
-      //   if (!rows && rows.length <= 0) {
-      //     this.departNames = ''
-      //     this.departIds = ''
-      //   } else {
-      //     value = rows.map(row => row[this.customReturnField]).join(',')
-      //     this.departNames = rows.map(row => row['departName']).join(',')
-      //     this.departIds = idstr
-      //   }
-      //   this.handleChangeCommon(this.departIds)
-      // },
-      // initComp(departNames) {
-      //   this.departNames = departNames
-      // },
-      // handleChange(value) {
-      //   this.handleChangeCommon(value)
-      // },
-    },
-    enhanced: {
-      switches: {
-        visible: true,
-      },
-      translate: {
-        enabled: false,
-      },
-      aopEvents: {
-        editActived({ $event }) {
-          dispatchEvent({
-            $event,
-            props: this.props,
-            className: '.ant-select .ant-select-selection-search-input',
-            isClick: true,
-          });
-        },
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
-
-<style lang="less">
-  // noinspection LessUnresolvedVariable
-  @prefix-cls: ~'@{namespace}-vxe-cell-depart-select';
-
-  .@{prefix-cls} {
-    // 闄愬埗tag鏈�澶ч暱搴︿负100px锛岄槻姝㈤�変腑鏂囧瓧杩囧鐨勯�夐」鏃舵崲琛�
-    .ant-select .ant-select-selection-overflow-item {
-      max-width: 80px;
-    }
-  }
-</style>
diff --git a/src/components/JVxeCustom/src/components/JVxeFileCell.vue b/src/components/JVxeCustom/src/components/JVxeFileCell.vue
deleted file mode 100644
index c27602e..0000000
--- a/src/components/JVxeCustom/src/components/JVxeFileCell.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-<template>
-  <div>
-    <template v-if="hasFile" v-for="(file, fileKey) of [innerFile || {}]" :key="fileKey">
-      <div style="position: relative">
-        <a-tooltip v-if="file.status === 'uploading'" :title="`涓婁紶涓�(${Math.floor(file.percent)}%)`">
-          <LoadingOutlined />
-          <span style="margin-left: 5px">涓婁紶涓��</span>
-        </a-tooltip>
-
-        <a-tooltip v-else-if="file.status === 'done'" :title="file.name">
-          <Icon icon="ant-design:paper-clip" />
-          <span style="margin-left: 5px">{{ ellipsisFileName }}</span>
-        </a-tooltip>
-
-        <a-tooltip v-else :title="file.message || '涓婁紶澶辫触'">
-          <Icon icon="ant-design:exclamation-circle" style="color: red" />
-          <span style="margin-left: 5px">{{ ellipsisFileName }}</span>
-        </a-tooltip>
-
-        <Dropdown :trigger="['click']" placement="bottomRight" style="margin-left: 10px">
-          <a-tooltip title="鎿嶄綔">
-            <Icon v-if="file.status !== 'uploading'" icon="ant-design:setting" style="cursor: pointer" />
-          </a-tooltip>
-          <template #overlay>
-            <a-menu>
-              <a-menu-item v-if="originColumn.allowDownload !== false" @click="handleClickDownloadFile">
-                <span><Icon icon="ant-design:download" />&nbsp;涓嬭浇</span>
-              </a-menu-item>
-              <a-menu-item v-if="originColumn.allowRemove !== false" @click="handleClickDeleteFile">
-                <span><Icon icon="ant-design:delete" />&nbsp;鍒犻櫎</span>
-              </a-menu-item>
-              <a-menu-item @click="handleMoreOperation">
-                <span><Icon icon="ant-design:bars" />&nbsp;鏇村</span>
-              </a-menu-item>
-            </a-menu>
-          </template>
-        </Dropdown>
-      </div>
-    </template>
-
-    <a-upload
-      v-show="!hasFile"
-      name="file"
-      :data="{ isup: 1 }"
-      :multiple="false"
-      :action="uploadAction"
-      :headers="uploadHeaders"
-      :showUploadList="false"
-      v-bind="cellProps"
-      @change="handleChangeUpload"
-    >
-      <a-button preIcon="ant-design:upload">{{ originColumn.btnText || '鐐瑰嚮涓婁紶' }}</a-button>
-    </a-upload>
-    <JUploadModal :value="modalValue" @register="registerModel" @change="onModalChange" />
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { UploadTypeEnum } from '/@/components/Form/src/jeecg/components/JUpload';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-  import { useFileCell, enhanced, components } from '../hooks/useFileCell';
-
-  export default defineComponent({
-    name: 'JVxeFileCell',
-    components: components,
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      return useFileCell(props, UploadTypeEnum.file);
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-    enhanced: enhanced,
-  });
-</script>
-
-<style scoped lang="less"></style>
diff --git a/src/components/JVxeCustom/src/components/JVxeImageCell.vue b/src/components/JVxeCustom/src/components/JVxeImageCell.vue
deleted file mode 100644
index 0a7eb12..0000000
--- a/src/components/JVxeCustom/src/components/JVxeImageCell.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-<template>
-  <div>
-    <template v-if="hasFile" v-for="(file, fileKey) of [innerFile || {}]" :key="fileKey">
-      <div class="j-vxe-image-list">
-        <template v-if="!file || !(file['url'] || file['path'] || file['message'])">
-          <a-tooltip :title="'璇风◢鍚�: ' + JSON.stringify(file) + (file['url'] || file['path'] || file['message'])">
-            <LoadingOutlined />
-          </a-tooltip>
-        </template>
-        <template v-else-if="file['path']">
-          <template v-for="src of imgList">
-            <img class="j-vxe-image" :src="src" alt="鍥剧墖閿欒" @click="handleMoreOperation" />
-          </template>
-        </template>
-        <a-tooltip v-else :title="file.message || '涓婁紶澶辫触'" @click="handleClickShowImageError">
-          <Icon icon="ant-design:exclamation-circle" style="color: red" />
-        </a-tooltip>
-      </div>
-    </template>
-    <div class="j-vxe-image-upload">
-      <a-upload
-        name="file"
-        :data="{ isup: 1 }"
-        :multiple="false"
-        :action="uploadAction"
-        :headers="uploadHeaders"
-        :showUploadList="false"
-        v-bind="cellProps"
-        @change="handleChangeUpload"
-      >
-        <a-button v-if="!hasFile" preIcon="ant-design:upload">{{ originColumn.btnText || '涓婁紶鍥剧墖' }}</a-button>
-        <div v-if="hasFile && imgList.length < maxCount" class="j-vxe-plus" @click="">
-          <Icon icon="ant-design:plus" />
-        </div>
-      </a-upload>
-    </div>
-    <JUploadModal :value="modalValue" @register="registerModel" @change="onModalChange" />
-  </div>
-</template>
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-  import { UploadTypeEnum } from '/@/components/Form/src/jeecg/components/JUpload';
-  import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-  import { components, enhanced, useFileCell } from '../hooks/useFileCell';
-
-  export default defineComponent({
-    name: 'JVxeImageCell',
-    components: components,
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { createErrorModal } = useMessage();
-      const setup = useFileCell(props, UploadTypeEnum.image, { multiple: true });
-      const { innerFile, maxCount } = setup;
-
-      const imgList = computed(() => {
-        if (innerFile.value) {
-          if (innerFile.value['url']) {
-            return [innerFile.value['url']];
-          } else if (innerFile.value['path']) {
-            let paths = innerFile.value['path'].split(',');
-            return paths.map((p) => getFileAccessHttpUrl(p));
-          }
-        }
-        return [];
-      });
-
-      // 寮瑰嚭涓婁紶鍑洪敊璇︾粏淇℃伅
-      function handleClickShowImageError() {
-        let file = innerFile.value || null;
-        if (file && file['message']) {
-          createErrorModal({
-            title: '涓婁紶鍑洪敊',
-            content: '閿欒淇℃伅锛�' + file['message'],
-            maskClosable: true,
-          });
-        }
-      }
-
-      return {
-        ...setup,
-        imgList,
-        maxCount,
-        handleClickShowImageError,
-      };
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-    enhanced: enhanced,
-  });
-</script>
-
-<style scoped lang="less">
-  .j-vxe-image {
-    height: 32px;
-    max-width: 100px !important;
-    cursor: pointer;
-    display: inline-block;
-    margin-right: 4px;
-    vertical-align: top;
-
-    &:hover {
-      opacity: 0.8;
-    }
-
-    &:active {
-      opacity: 0.6;
-    }
-  }
-
-  .j-vxe-plus {
-    width: 32px;
-    height: 32px;
-    line-height: 32px;
-    text-align: center;
-    background-color: #fafafa;
-    border: 1px dashed #d9d9d9;
-    border-radius: 2px;
-    cursor: pointer;
-  }
-
-  .j-vxe-image-list,
-  .j-vxe-image-upload {
-    display: inline-block;
-    vertical-align: top;
-  }
-</style>
diff --git a/src/components/JVxeCustom/src/components/JVxePcaCell.vue b/src/components/JVxeCustom/src/components/JVxePcaCell.vue
deleted file mode 100644
index b547892..0000000
--- a/src/components/JVxeCustom/src/components/JVxePcaCell.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-<template>
-    <a-cascader v-bind="getProps" class="pca-select" @change="handleChange" />
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { regionData, getRealCode } from '/@/components/Form/src/utils/areaDataUtil';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-  import { dispatchEvent } from '/@/components/jeecg/JVxeTable/utils';
-
-  export default defineComponent({
-    name: 'JVxePcaCell',
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, cellProps, handleChangeCommon } = useJVxeComponent(props);
-
-      const selectedValue = computed(() => {
-        let val: any = innerValue.value;
-        if (!val) {
-          return []
-        }
-        let arr = getRealCode(val, 3);
-        return arr;
-      });
-
-      const getProps = computed(() => {
-        return {
-          ...cellProps.value,
-          options: regionData,
-          showOverflow: false,
-          value: selectedValue.value,
-        };
-      });
-      
-      function handleChange(arr) {
-        let str = '';
-        if(arr && arr.length==3){
-          str = arr[2];
-        }
-        handleChangeCommon(str);
-      }
-
-      return {
-        handleChange,
-        selectedValue,
-        getProps
-      };
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-    enhanced: {
-      switches: {
-        visible: true,
-      },
-      translate: {
-        enabled: false,
-      },
-      aopEvents: {
-        editActived({ $event }) {
-          dispatchEvent({
-            $event,
-            props: this.props,
-            className: '.ant-select .ant-select-selection-search-input',
-            isClick: true,
-          });
-        },
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
-<style lang="less">
-    .pca-select{
-        .ant-select-selection-placeholder{
-            color: #bfbfbf !important;
-        }
-    }
-</style>
diff --git a/src/components/JVxeCustom/src/components/JVxePopupCell.vue b/src/components/JVxeCustom/src/components/JVxePopupCell.vue
deleted file mode 100644
index e3144fd..0000000
--- a/src/components/JVxeCustom/src/components/JVxePopupCell.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-  <JPopup v-bind="popupProps" />
-</template>
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { JPopup } from '/@/components/Form';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-  import { dispatchEvent, vModel } from '/@/components/jeecg/JVxeTable/utils';
-  import { isEmpty } from '/@/utils/is';
-
-  export default defineComponent({
-    name: 'JVxePopupCell',
-    components: { JPopup },
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, row, originColumn, cellProps, handleChangeCommon } = useJVxeComponent(props);
-
-      const popupProps = computed(() => {
-        return {
-          ...cellProps,
-          value: innerValue.value,
-          field: originColumn.value.field || originColumn.value.key,
-          code: originColumn.value.popupCode,
-          fieldConfig: originColumn.value.fieldConfig,
-          // orgFields: originColumn.value.orgFields,
-          // destFields: originColumn.value.destFields,
-          groupId: 'j-vxe-popup',
-          param: originColumn.value.params,
-          sorter: originColumn.value.sorter,
-          setFieldsValue: (values) => {
-            if (!isEmpty(values)) {
-              let popupValue = '';
-              Object.keys(values).forEach((key) => {
-                let currentValue = values[key];
-                // 褰撳墠鍒楃洿鎺ヨ祴鍊硷紝鍏朵粬鍒楅�氳繃vModel璧嬪��
-                if (key === originColumn.value.key) {
-                  popupValue = currentValue;
-                } else {
-                  vModel(currentValue, row, key);
-                }
-              });
-              handleChangeCommon(popupValue);
-            }
-          },
-        };
-      });
-
-      return {
-        popupProps,
-      };
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-    enhanced: {
-      aopEvents: {
-        editActived({ $event }) {
-          dispatchEvent({
-            $event,
-            props: this.props,
-            className: '.ant-input',
-            isClick: true,
-          });
-        },
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
diff --git a/src/components/JVxeCustom/src/components/JVxeSelectDictSearchCell.ts b/src/components/JVxeCustom/src/components/JVxeSelectDictSearchCell.ts
deleted file mode 100644
index e03c395..0000000
--- a/src/components/JVxeCustom/src/components/JVxeSelectDictSearchCell.ts
+++ /dev/null
@@ -1,288 +0,0 @@
-import { computed, ref, watch, defineComponent, h } from 'vue';
-import { cloneDeep, debounce } from 'lodash-es';
-import { defHttp } from '/@/utils/http/axios';
-import { filterDictText } from '/@/utils/dict/JDictSelectUtil';
-import { ajaxGetDictItems, getDictItemsByCode } from '/@/utils/dict';
-import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-import { dispatchEvent } from '/@/components/jeecg/JVxeTable/utils';
-import { useResolveComponent as rc } from '/@/components/jeecg/JVxeTable/hooks';
-import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-import { useMessage } from '/@/hooks/web/useMessage';
-
-/** value - label map锛岄槻姝㈤噸澶嶆煡璇紙鍒锋柊娓呯┖缂撳瓨锛� */
-const LabelMap = new Map<string, any>();
-// 璇锋眰id
-let requestId = 0;
-
-/** 鏄剧ず缁勪欢锛岃嚜甯︾炕璇� */
-export const DictSearchSpanCell = defineComponent({
-  name: 'JVxeSelectSearchSpanCell',
-  props: useJVxeCompProps(),
-  setup(props: JVxeComponent.Props) {
-    const { innerOptions, innerSelectValue, innerValue } = useSelectDictSearch(props);
-    return () => {
-      return h('span', {}, [filterDictText(innerOptions.value, innerSelectValue.value || innerValue.value)]);
-    };
-  },
-});
-
-// 杈撳叆閫夋嫨缁勪欢
-export const DictSearchInputCell = defineComponent({
-  name: 'JVxeSelectSearchInputCell',
-  props: useJVxeCompProps(),
-  setup(props: JVxeComponent.Props) {
-    const { createMessage } = useMessage();
-    const { dict, loading, isAsync, options, innerOptions, originColumn, cellProps, innerSelectValue, handleChangeCommon } =
-      useSelectDictSearch(props);
-    const hasRequest = ref(false);
-    // 鎻愮ず淇℃伅
-    const tipsContent = computed(() => {
-      return originColumn.value.tipsContent || '璇疯緭鍏ユ悳绱㈠唴瀹�';
-    });
-    // 绛涢�夊嚱鏁�
-    const filterOption = computed(() => {
-      if (isAsync.value) {
-        //銆恓eecgboot-vue3/issues/I5QRT8銆慗VxeTypes.selectDictSearch sync闂
-        return ()=>true;
-      }
-      return (input, option) => option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
-    });
-
-    /** 鍔犺浇鏁版嵁 */
-    const loadData = debounce((value) => {
-      const currentRequestId = ++requestId;
-      loading.value = true;
-      innerOptions.value = [];
-      if (value == null || value.trim() === '') {
-        loading.value = false;
-        hasRequest.value = false;
-        return;
-      }
-      // 瀛楀吀code鏍煎紡锛歵able,text,code
-      hasRequest.value = true;
-      loadDictByKeyword(dict.value, value)
-        .then((res) => {
-          if (currentRequestId !== requestId) {
-            return;
-          }
-          let { success, result, message } = res;
-          if (success) {
-            innerOptions.value = result;
-            result.forEach((item) => {
-              LabelMap.set(item.value, [item]);
-            });
-          } else {
-            createMessage.warning(message || '鏌ヨ澶辫触');
-          }
-        })
-        .finally(() => {
-          loading.value = false;
-        });
-    }, 300);
-
-    function handleChange(selectedValue) {
-      innerSelectValue.value = selectedValue;
-      handleChangeCommon(innerSelectValue.value);
-    }
-
-    function handleSearch(value) {
-      if (isAsync.value) {
-        // 鍦ㄨ緭鍏ユ椂涔熷簲璇ュ紑鍚姞杞斤紝鍥犱负loadData鍔犱簡娑堟姈锛屾墍浠ヤ細鏈�800ms鐨勭敤鎴蜂富瑙備笂璁や负鐨勫崱椤挎椂闂�
-        loading.value = true;
-        if (innerOptions.value.length > 0) {
-          innerOptions.value = [];
-        }
-        loadData(value);
-      }
-    }
-
-    function renderOptionItem() {
-      let optionItems: any[] = [];
-      options.value.forEach(({ value, text, label, title, disabled }) => {
-        optionItems.push(
-          h(
-            rc('a-select-option'),
-            {
-              key: value,
-              value: value,
-              disabled: disabled,
-            },
-            {
-              default: () => text || label || title,
-            }
-          )
-        );
-      });
-      return optionItems;
-    }
-
-    return () => {
-      return h(
-        rc('a-select'),
-        {
-          ...cellProps.value,
-          value: innerSelectValue.value,
-          filterOption: filterOption.value,
-          showSearch: true,
-          allowClear: true,
-          autofocus: true,
-          defaultOpen: true,
-          style: 'width: 100%',
-          onSearch: handleSearch,
-          onChange: handleChange,
-        },
-        {
-          default: () => renderOptionItem(),
-          notFoundContent: () => {
-            if (loading.value) {
-              return h(rc('a-spin'), { size: 'small' });
-            } else if (hasRequest.value) {
-              return h('div', '娌℃湁鏌ヨ鍒颁换浣曟暟鎹�');
-            } else {
-              return h('div', [tipsContent.value]);
-            }
-          },
-        }
-      );
-    };
-  },
-  // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-  enhanced: {
-    aopEvents: {
-      editActived({ $event }) {
-        dispatchEvent({
-          $event,
-          props: this.props,
-          className: '.ant-select .ant-select-selection-search-input',
-          isClick: false,
-          handler: (el) => el.focus(),
-        });
-      },
-    },
-  } as JVxeComponent.EnhancedPartial,
-});
-
-function useSelectDictSearch(props) {
-  const setup = useJVxeComponent(props);
-  const { innerValue, originColumn } = setup;
-
-  // 鍔犺浇鐘舵��
-  const loading = ref(false);
-  // 鍐呴儴閫夋嫨鍊�
-  const innerSelectValue = ref(null);
-  // 鍐呴儴 options
-  const innerOptions = ref<any[]>([]);
-
-  const dict = computed(() => originColumn.value.dict);
-  // 鏄惁鏄紓姝ユā寮�
-  const isAsync = computed(() => {
-    let isAsync = originColumn.value.async;
-    return isAsync != null && isAsync !== '' ? !!isAsync : true;
-  });
-  const options = computed(() => {
-    if (isAsync.value) {
-      return innerOptions.value;
-    } else {
-      return originColumn.value.options || [];
-    }
-  });
-
-  /** 鍏叡灞炴�х洃鍚� */
-  watch(
-    innerValue,
-    (value: string) => {
-      if (value == null || value === '') {
-        innerSelectValue.value = null;
-      } else {
-        loadDataByValue(value);
-      }
-    },
-    { immediate: true }
-  );
-  watch(dict, () => loadDataByDict());
-
-  // 鏍规嵁 value 鏌ヨ鏁版嵁锛岀敤浜庡洖鏄�
-  async function loadDataByValue(value) {
-    if (isAsync.value) {
-      if (innerSelectValue.value !== value) {
-        if (LabelMap.has(value)) {
-          innerOptions.value = cloneDeep(LabelMap.get(value));
-        } else {
-          let result = await loadDictItem(dict.value, value);
-          if (result && result.length > 0) {
-            innerOptions.value = [{ value: value, text: result[0] }];
-            LabelMap.set(value, cloneDeep(innerOptions.value));
-          }
-        }
-      }
-    }
-    innerSelectValue.value = (value || '').toString();
-  }
-
-  // 鍒濆鍖栧瓧鍏�
-  async function loadDataByDict() {
-    if (!isAsync.value) {
-      // 濡傛灉瀛楀吀椤归泦鍚堟湁鏁版嵁
-      if (!originColumn.value.options || originColumn.value.options.length === 0) {
-        // 鏍规嵁瀛楀吀Code, 鍒濆鍖栧瓧鍏告暟缁�
-        let dictStr = '';
-        if (dict.value) {
-          let arr = dict.value.split(',');
-          if (arr[0].indexOf('where') > 0) {
-            let tbInfo = arr[0].split('where');
-            dictStr = tbInfo[0].trim() + ',' + arr[1] + ',' + arr[2] + ',' + encodeURIComponent(tbInfo[1]);
-          } else {
-            dictStr = dict.value;
-          }
-          if (dict.value.indexOf(',') === -1) {
-            //浼樺厛浠庣紦瀛樹腑璇诲彇瀛楀吀閰嶇疆
-            let cache = getDictItemsByCode(dict.value);
-            if (cache) {
-              innerOptions.value = cache;
-              return;
-            }
-          }
-          let { success, result } = await ajaxGetDictItems(dictStr, null);
-          if (success) {
-            innerOptions.value = result;
-          }
-        }
-      }
-    }
-  }
-
-  return {
-    ...setup,
-    loading,
-    innerOptions,
-    innerSelectValue,
-    dict,
-    isAsync,
-    options,
-  };
-}
-
-/** 鑾峰彇瀛楀吀椤� */
-function loadDictItem(dict: string, key: string) {
-  return defHttp.get({
-    url: `/sys/dict/loadDictItem/${dict}`,
-    params: {
-      key: key,
-    },
-  });
-}
-
-/** 鏍规嵁鍏抽敭瀛楄幏鍙栧瓧鍏搁」锛堟悳绱級 */
-function loadDictByKeyword(dict: string, keyword: string) {
-  return defHttp.get(
-    {
-      url: `/sys/dict/loadDict/${dict}`,
-      params: {
-        keyword: keyword,
-      },
-    },
-    {
-      isTransformResponse: false,
-    }
-  );
-}
diff --git a/src/components/JVxeCustom/src/components/JVxeUserSelectCell.vue b/src/components/JVxeCustom/src/components/JVxeUserSelectCell.vue
deleted file mode 100644
index 773d023..0000000
--- a/src/components/JVxeCustom/src/components/JVxeUserSelectCell.vue
+++ /dev/null
@@ -1,101 +0,0 @@
-<template>
-  <div :class="[prefixCls]">
-    <JSelectUser v-bind="getProps" @change="handleChange" />
-  </div>
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { JSelectUser } from '/@/components/Form';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-  import { dispatchEvent } from '/@/components/jeecg/JVxeTable/utils';
-  import { isArray, isEmpty, isString } from '/@/utils/is';
-
-  export default defineComponent({
-    name: 'JVxeUserSelectCell',
-    components: { JSelectUser },
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, cellProps, handleChangeCommon, useCellDesign } = useJVxeComponent(props);
-      const { prefixCls } = useCellDesign('user-select');
-
-      const selectedValue = computed(() => {
-        let val: any = innerValue.value;
-        if (val == null) {
-          return val;
-        }
-        if (isEmpty(val)) {
-          return [];
-        }
-        if (isArray(val)) {
-          return val;
-        }
-        if (isString(val)) {
-          // @ts-ignore
-          return val.split(',');
-        }
-        return [val];
-      });
-      // @ts-ignore
-      const multiple = computed(() => cellProps.value.multi != false);
-
-      const getProps = computed(() => {
-        return {
-          ...cellProps.value,
-          value: selectedValue.value,
-          showButton: false,
-          // 涓嶅厑璁告悳绱�
-          showSearch: false,
-          // 璁剧疆鏈�澶х殑鏄剧ず涓暟
-          maxTagCount: 1,
-          // 鏄剧ず鎻愮ず閲嶅啓锛屽幓鎺夌渷鐣ュ彿
-          maxTagPlaceholder: ({ length }) => '+' + length,
-        };
-      });
-
-      function handleChange(values) {
-        handleChangeCommon(values.join(','));
-      }
-
-      return {
-        prefixCls,
-        selectedValue,
-        multiple,
-        cellProps,
-        getProps,
-        handleChange,
-      };
-    },
-    enhanced: {
-      switches: {
-        visible: true,
-      },
-      translate: {
-        enabled: false,
-      },
-      aopEvents: {
-        editActived({ $event }) {
-          dispatchEvent({
-            $event,
-            props: this.props,
-            className: '.ant-select .ant-select-selection-search-input',
-            isClick: true,
-          });
-        },
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
-
-<style lang="less">
-  // noinspection LessUnresolvedVariable
-  @prefix-cls: ~'@{namespace}-vxe-cell-user-select';
-
-  .@{prefix-cls} {
-    // 闄愬埗tag鏈�澶ч暱搴︿负100px锛岄槻姝㈤�変腑鏂囧瓧杩囧鐨勯�夐」鏃舵崲琛�
-    .ant-select .ant-select-selection-overflow-item {
-      max-width: 80px;
-    }
-  }
-</style>
diff --git a/src/components/JVxeCustom/src/hooks/useFileCell.ts b/src/components/JVxeCustom/src/hooks/useFileCell.ts
deleted file mode 100644
index 216721a..0000000
--- a/src/components/JVxeCustom/src/hooks/useFileCell.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import { computed } from 'vue';
-import { fileGetValue, fileSetValue, useJVxeUploadCell } from '/@/components/jeecg/JVxeTable/src/hooks/cells/useJVxeUploadCell';
-import { uploadUrl } from '/@/api/common/api';
-import { JUploadModal, UploadTypeEnum } from '/@/components/Form/src/jeecg/components/JUpload';
-import { useModal } from '/@/components/Modal';
-import { JVxeComponent } from '/@/components/jeecg/JVxeTable/src/types/JVxeComponent';
-import { Icon } from '/@/components/Icon';
-import { Dropdown } from 'ant-design-vue';
-import { LoadingOutlined } from '@ant-design/icons-vue';
-
-export function useFileCell(props, fileType: UploadTypeEnum, options?) {
-  const setup = useJVxeUploadCell(props, { token: true, action: uploadUrl, ...options });
-
-  const { innerFile, handleChangeCommon, originColumn } = setup;
-  const [registerModel, { openModal }] = useModal();
-
-  // 鎴彇鏂囦欢鍚�
-  const ellipsisFileName = computed(() => {
-    let length = 5;
-    let file = innerFile.value;
-    if (!file || !file.name) {
-      return '';
-    }
-    if (file.name.length > length) {
-      return file.name.substr(0, length) + '鈥�';
-    }
-    return file.name;
-  });
-
-  const modalValue = computed(() => {
-    if (innerFile.value) {
-      if (innerFile.value['url']) {
-        return innerFile.value['url'];
-      } else if (innerFile.value['path']) {
-        return innerFile.value['path'];
-      }
-    }
-    return '';
-  });
-
-  const maxCount = computed(() => {
-    let maxCount = originColumn.value.maxCount;
-    // online 鎵╁睍JSON
-    if (originColumn.value && originColumn.value.fieldExtendJson) {
-      let json = JSON.parse(originColumn.value.fieldExtendJson);
-      maxCount = json.uploadnum ? json.uploadnum : 0;
-    }
-    return maxCount ?? 0;
-  });
-
-  // 鐐瑰嚮鏇村鎸夐挳
-  function handleMoreOperation() {
-    openModal(true, {
-      removeConfirm: true,
-      mover: true,
-      download: true,
-      ...originColumn.value.props,
-      maxCount: maxCount.value,
-      fileType: fileType,
-    });
-  }
-
-  // 鏇村涓婁紶鍥炶皟
-  function onModalChange(path) {
-    if (path) {
-      innerFile.value.path = path;
-      handleChangeCommon(innerFile.value);
-    }
-  }
-
-  return {
-    ...setup,
-    modalValue,
-    maxCount,
-    ellipsisFileName,
-    registerModel,
-    onModalChange,
-    handleMoreOperation,
-  };
-}
-
-export const components = {
-  Icon,
-  Dropdown,
-  LoadingOutlined,
-  JUploadModal,
-};
-
-export const enhanced = {
-  switches: { visible: true },
-  getValue: (value) => fileGetValue(value),
-  setValue: (value) => fileSetValue(value),
-} as JVxeComponent.EnhancedPartial;
diff --git a/src/components/Loading/index.ts b/src/components/Loading/index.ts
deleted file mode 100644
index 3673a44..0000000
--- a/src/components/Loading/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import Loading from './src/Loading.vue';
-
-export { Loading };
-export { useLoading } from './src/useLoading';
-export { createLoading } from './src/createLoading';
diff --git a/src/components/Loading/src/Loading.vue b/src/components/Loading/src/Loading.vue
deleted file mode 100644
index f626b18..0000000
--- a/src/components/Loading/src/Loading.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<template>
-  <section
-    class="full-loading"
-    :class="{ absolute, [theme]: !!theme }"
-    :style="[background ? `background-color: ${background}` : '']"
-    v-show="loading"
-  >
-    <Spin v-bind="$attrs" :tip="tip" :size="size" :spinning="loading" />
-  </section>
-</template>
-<script lang="ts">
-  import { PropType } from 'vue';
-  import { defineComponent } from 'vue';
-  import { Spin } from 'ant-design-vue';
-  import { SizeEnum } from '/@/enums/sizeEnum';
-
-  export default defineComponent({
-    name: 'Loading',
-    components: { Spin },
-    props: {
-      tip: {
-        type: String as PropType<string>,
-        default: '',
-      },
-      size: {
-        type: String as PropType<SizeEnum>,
-        default: SizeEnum.LARGE,
-        validator: (v: SizeEnum): boolean => {
-          return [SizeEnum.DEFAULT, SizeEnum.SMALL, SizeEnum.LARGE].includes(v);
-        },
-      },
-      absolute: {
-        type: Boolean as PropType<boolean>,
-        default: false,
-      },
-      loading: {
-        type: Boolean as PropType<boolean>,
-        default: false,
-      },
-      background: {
-        type: String as PropType<string>,
-      },
-      theme: {
-        type: String as PropType<'dark' | 'light'>,
-      },
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .full-loading {
-    position: fixed;
-    top: 0;
-    left: 0;
-    z-index: 200;
-    display: flex;
-    width: 100%;
-    height: 100%;
-    justify-content: center;
-    align-items: center;
-    background-color: rgba(240, 242, 245, 0.4);
-
-    &.absolute {
-      position: absolute;
-      top: 0;
-      left: 0;
-      z-index: 300;
-    }
-  }
-
-  html[data-theme='dark'] {
-    .full-loading:not(.light) {
-      background-color: @modal-mask-bg;
-    }
-  }
-
-  .full-loading.dark {
-    background-color: @modal-mask-bg;
-  }
-</style>
diff --git a/src/components/Loading/src/createLoading.ts b/src/components/Loading/src/createLoading.ts
deleted file mode 100644
index 5efff7f..0000000
--- a/src/components/Loading/src/createLoading.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { VNode, defineComponent } from 'vue';
-import type { LoadingProps } from './typing';
-
-import { createVNode, render, reactive, h } from 'vue';
-import Loading from './Loading.vue';
-
-export function createLoading(props?: Partial<LoadingProps>, target?: HTMLElement, wait = false) {
-  let vm: Nullable<VNode> = null;
-  const data = reactive({
-    tip: '',
-    loading: true,
-    ...props,
-  });
-
-  const LoadingWrap = defineComponent({
-    render() {
-      return h(Loading, { ...data });
-    },
-  });
-
-  vm = createVNode(LoadingWrap);
-
-  if (wait) {
-    // TODO fix https://github.com/anncwb/vue-Jeecg-admin/issues/438
-    setTimeout(() => {
-      render(vm, document.createElement('div'));
-    }, 0);
-  } else {
-    render(vm, document.createElement('div'));
-  }
-
-  function close() {
-    if (vm?.el && vm.el.parentNode) {
-      vm.el.parentNode.removeChild(vm.el);
-    }
-  }
-
-  function open(target: HTMLElement = document.body) {
-    if (!vm || !vm.el) {
-      return;
-    }
-    target.appendChild(vm.el as HTMLElement);
-  }
-
-  if (target) {
-    open(target);
-  }
-  return {
-    vm,
-    close,
-    open,
-    setTip: (tip: string) => {
-      data.tip = tip;
-    },
-    setLoading: (loading: boolean) => {
-      data.loading = loading;
-    },
-    get loading() {
-      return data.loading;
-    },
-    get $el() {
-      return vm?.el as HTMLElement;
-    },
-  };
-}
diff --git a/src/components/Loading/src/typing.ts b/src/components/Loading/src/typing.ts
deleted file mode 100644
index 9af60e6..0000000
--- a/src/components/Loading/src/typing.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { SizeEnum } from '/@/enums/sizeEnum';
-
-export interface LoadingProps {
-  tip: string;
-  size: SizeEnum;
-  absolute: boolean;
-  loading: boolean;
-  background: string;
-  theme: 'dark' | 'light';
-}
diff --git a/src/components/Loading/src/useLoading.ts b/src/components/Loading/src/useLoading.ts
deleted file mode 100644
index b5f1215..0000000
--- a/src/components/Loading/src/useLoading.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { unref } from 'vue';
-import { createLoading } from './createLoading';
-import type { LoadingProps } from './typing';
-import type { Ref } from 'vue';
-
-export interface UseLoadingOptions {
-  target?: any;
-  props?: Partial<LoadingProps>;
-}
-
-interface Fn {
-  (): void;
-}
-
-export function useLoading(props: Partial<LoadingProps>): [Fn, Fn, (string) => void];
-export function useLoading(opt: Partial<UseLoadingOptions>): [Fn, Fn, (string) => void];
-
-export function useLoading(opt: Partial<LoadingProps> | Partial<UseLoadingOptions>): [Fn, Fn, (string) => void] {
-  let props: Partial<LoadingProps>;
-  let target: HTMLElement | Ref<ElRef> = document.body;
-
-  if (Reflect.has(opt, 'target') || Reflect.has(opt, 'props')) {
-    const options = opt as Partial<UseLoadingOptions>;
-    props = options.props || {};
-    target = options.target || document.body;
-  } else {
-    props = opt as Partial<LoadingProps>;
-  }
-
-  const instance = createLoading(props, undefined, true);
-
-  const open = (): void => {
-    const t = unref(target as Ref<ElRef>);
-    if (!t) return;
-    instance.open(t);
-  };
-
-  const close = (): void => {
-    instance.close();
-  };
-
-  const setTip = (tip: string) => {
-    instance.setTip(tip);
-  };
-
-  return [open, close, setTip];
-}
diff --git a/src/components/Markdown/index.ts b/src/components/Markdown/index.ts
deleted file mode 100644
index d337681..0000000
--- a/src/components/Markdown/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { withInstall } from '/@/utils';
-import markDown from './src/Markdown.vue';
-import markDownViewer from './src/MarkdownViewer.vue';
-
-export const MarkDown = withInstall(markDown);
-export const MarkdownViewer = withInstall(markDownViewer);
-export * from './src/typing';
diff --git a/src/components/Markdown/src/Markdown.vue b/src/components/Markdown/src/Markdown.vue
deleted file mode 100644
index 8d272ce..0000000
--- a/src/components/Markdown/src/Markdown.vue
+++ /dev/null
@@ -1,184 +0,0 @@
-<template>
-  <div ref="wrapRef"></div>
-</template>
-<script lang="ts">
-  import type { Ref } from 'vue';
-  import { defineComponent, ref, unref, nextTick, computed, watch, onBeforeUnmount, onDeactivated } from 'vue';
-  import Vditor from 'vditor';
-  import 'vditor/dist/index.css';
-  import { useLocale } from '/@/locales/useLocale';
-  import { useModalContext } from '../../Modal';
-  import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-  import { onMountedOrActivated } from '/@/hooks/core/onMountedOrActivated';
-  import { getToken } from '/@/utils/auth';
-  import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-
-  type Lang = 'zh_CN' | 'en_US' | 'ja_JP' | 'ko_KR' | undefined;
-
-  export default defineComponent({
-    inheritAttrs: false,
-    props: {
-      height: { type: Number, default: 360 },
-      value: { type: String, default: '' },
-    },
-    emits: ['change', 'get', 'update:value'],
-    setup(props, { attrs, emit }) {
-      const wrapRef = ref<ElRef>(null);
-      const vditorRef = ref(null) as Ref<Nullable<Vditor>>;
-      const initedRef = ref(false);
-
-      const modalFn = useModalContext();
-
-      const { getLocale } = useLocale();
-      const { getDarkMode } = useRootSetting();
-      const valueRef = ref(props.value || '');
-
-      watch(
-        [() => getDarkMode.value, () => initedRef.value],
-        ([val, inited]) => {
-          if (!inited) {
-            return;
-          }
-          const theme = val === 'dark' ? 'dark' : 'classic';
-          instance.getVditor()?.setTheme(theme);
-        },
-        {
-          immediate: true,
-          flush: 'post',
-        }
-      );
-
-      watch(
-        () => props.value,
-        (v) => {
-          if (v !== valueRef.value) {
-            instance.getVditor()?.setValue(v);
-          }
-          valueRef.value = v;
-        }
-      );
-
-      const getCurrentLang = computed((): 'zh_CN' | 'en_US' | 'ja_JP' | 'ko_KR' => {
-        let lang: Lang;
-        switch (unref(getLocale)) {
-          case 'en':
-            lang = 'en_US';
-            break;
-          case 'ja':
-            lang = 'ja_JP';
-            break;
-          case 'ko':
-            lang = 'ko_KR';
-            break;
-          default:
-            lang = 'zh_CN';
-        }
-        return lang;
-      });
-      //update-begin-author:taoyan date:2022-5-24 for: VUEN-1090 markdown 鏃犳硶涓婁紶
-      const uploadUrl = `${window._CONFIG['domianURL']}/sys/common/upload`;
-      const token = getToken();
-      function formatResult(files, responseText): string {
-        let data: any = JSON.parse(responseText);
-        // {"success":true,"message":"markdown/aa_1653391146501.png","code":0,"result":null,"timestamp":1653391146501}'
-        let filename = files[0].name as string;
-        let result = {
-          msg: '',
-          code: 0,
-          data: {
-            errFiles: [''],
-            succMap: {},
-          },
-        };
-        if (data.success) {
-          result.data.errFiles = [];
-          result.data.succMap = {
-            [data.message]: getFileAccessHttpUrl(data.message),
-          };
-        } else {
-          result.code = 1;
-          result.msg = data.message;
-          result.data.errFiles = [filename];
-        }
-        return JSON.stringify(result);
-      }
-      //update-end-author:taoyan date:2022-5-24 for: VUEN-1090 markdown 鏃犳硶涓婁紶
-      function init() {
-        const wrapEl = unref(wrapRef) as HTMLElement;
-        if (!wrapEl) return;
-        const bindValue = { ...attrs, ...props };
-        const insEditor = new Vditor(wrapEl, {
-          theme: getDarkMode.value === 'dark' ? 'dark' : 'classic',
-          lang: unref(getCurrentLang),
-          mode: 'sv',
-          fullscreen: {
-            index: 520,
-          },
-          preview: {
-            actions: [],
-          },
-          //update-begin-author:taoyan date:2022-5-24 for: VUEN-1090 markdown 鏃犳硶涓婁紶
-          upload: {
-            accept: 'image/*',
-            url: uploadUrl,
-            fieldName: 'file',
-            extraData: { biz: 'markdown' },
-            setHeaders() {
-              return {
-                'X-Access-Token': token as string,
-              };
-            },
-            format(files, response) {
-              return formatResult(files, response);
-            },
-          },
-          //update-end-author:taoyan date:2022-5-24 for: VUEN-1090 markdown 鏃犳硶涓婁紶
-          input: (v) => {
-            valueRef.value = v;
-            emit('update:value', v);
-            emit('change', v);
-          },
-          after: () => {
-            nextTick(() => {
-              modalFn?.redoModalHeight?.();
-              insEditor.setValue(valueRef.value);
-              vditorRef.value = insEditor;
-              initedRef.value = true;
-              emit('get', instance);
-            });
-          },
-          blur: () => {
-            //unref(vditorRef)?.setValue(props.value);
-          },
-          ...bindValue,
-          cache: {
-            enable: false,
-          },
-        });
-      }
-
-      const instance = {
-        getVditor: (): Vditor => vditorRef.value!,
-      };
-
-      function destroy() {
-        const vditorInstance = unref(vditorRef);
-        if (!vditorInstance) return;
-        try {
-          vditorInstance?.destroy?.();
-        } catch (error) {}
-        vditorRef.value = null;
-        initedRef.value = false;
-      }
-
-      onMountedOrActivated(init);
-
-      onBeforeUnmount(destroy);
-      onDeactivated(destroy);
-      return {
-        wrapRef,
-        ...instance,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Markdown/src/MarkdownViewer.vue b/src/components/Markdown/src/MarkdownViewer.vue
deleted file mode 100644
index b453451..0000000
--- a/src/components/Markdown/src/MarkdownViewer.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-<template>
-  <div v-html="getHtmlData" :class="$props.class" class="markdown-viewer"></div>
-</template>
-
-<script lang="ts" setup>
-  import { computed } from 'vue';
-  import showdown from 'showdown';
-
-  const converter = new showdown.Converter();
-  converter.setOption('tables', true);
-  const props = defineProps({
-    value: { type: String },
-    class: { type: String },
-  });
-  const getHtmlData = computed(() => converter.makeHtml(props.value || ''));
-</script>
-
-<style scoped>
-  .markdown-viewer {
-    width: 100%;
-  }
-</style>
diff --git a/src/components/Markdown/src/typing.ts b/src/components/Markdown/src/typing.ts
deleted file mode 100644
index b4bb465..0000000
--- a/src/components/Markdown/src/typing.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import Vditor from 'vditor';
-export interface MarkDownActionType {
-  getVditor: () => Vditor;
-}
diff --git a/src/components/Menu/index.ts b/src/components/Menu/index.ts
deleted file mode 100644
index 4a59225..0000000
--- a/src/components/Menu/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import BasicMenu from './src/BasicMenu.vue';
-
-export { BasicMenu };
diff --git a/src/components/Menu/src/BasicMenu.vue b/src/components/Menu/src/BasicMenu.vue
deleted file mode 100644
index a61fe97..0000000
--- a/src/components/Menu/src/BasicMenu.vue
+++ /dev/null
@@ -1,159 +0,0 @@
-<template>
-  <Menu
-    :selectedKeys="selectedKeys"
-    :defaultSelectedKeys="defaultSelectedKeys"
-    :mode="mode"
-    :openKeys="getOpenKeys"
-    :inlineIndent="inlineIndent"
-    :theme="theme"
-    @openChange="handleOpenChange"
-    :class="getMenuClass"
-    @click="handleMenuClick"
-    :subMenuOpenDelay="0.2"
-    v-bind="getInlineCollapseOptions"
-  >
-    <template v-for="item in items" :key="item.path">
-      <BasicSubMenuItem :item="item" :theme="theme" :isHorizontal="isHorizontal" />
-    </template>
-  </Menu>
-</template>
-<script lang="ts">
-  import type { MenuState } from './types';
-  import { computed, defineComponent, unref, reactive, watch, toRefs, ref } from 'vue';
-  import { Menu } from 'ant-design-vue';
-  import BasicSubMenuItem from './components/BasicSubMenuItem.vue';
-  import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum';
-  import { useOpenKeys } from './useOpenKeys';
-  import { RouteLocationNormalizedLoaded, useRouter } from 'vue-router';
-  import { isFunction } from '/@/utils/is';
-  import { basicProps } from './props';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { REDIRECT_NAME } from '/@/router/constant';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { getCurrentParentPath } from '/@/router/menus';
-  import { listenerRouteChange } from '/@/logics/mitt/routeChange';
-  import { getAllParentPath } from '/@/router/helper/menuHelper';
-
-  export default defineComponent({
-    name: 'BasicMenu',
-    components: {
-      Menu,
-      BasicSubMenuItem,
-    },
-    props: basicProps,
-    emits: ['menuClick'],
-    setup(props, { emit }) {
-      const isClickGo = ref(false);
-      const currentActiveMenu = ref('');
-
-      const menuState = reactive<MenuState>({
-        defaultSelectedKeys: [],
-        openKeys: [],
-        selectedKeys: [],
-        collapsedOpenKeys: [],
-      });
-
-      const { prefixCls } = useDesign('basic-menu');
-      const { items, mode, accordion } = toRefs(props);
-
-      const { getCollapsed, getTopMenuAlign, getSplit } = useMenuSetting();
-
-      const { currentRoute } = useRouter();
-
-      const { handleOpenChange, setOpenKeys, getOpenKeys } = useOpenKeys(menuState, items, mode as any, accordion);
-
-      const getIsTopMenu = computed(() => {
-        const { type, mode } = props;
-
-        return (type === MenuTypeEnum.TOP_MENU && mode === MenuModeEnum.HORIZONTAL) || (props.isHorizontal && unref(getSplit));
-      });
-
-      const getMenuClass = computed(() => {
-        const align = props.isHorizontal && unref(getSplit) ? 'start' : unref(getTopMenuAlign);
-        return [
-          prefixCls,
-          `justify-${align}`,
-          {
-            [`${prefixCls}__second`]: !props.isHorizontal && unref(getSplit),
-            [`${prefixCls}__sidebar-hor`]: unref(getIsTopMenu),
-          },
-        ];
-      });
-
-      const getInlineCollapseOptions = computed(() => {
-        const isInline = props.mode === MenuModeEnum.INLINE;
-
-        const inlineCollapseOptions: { inlineCollapsed?: boolean } = {};
-        if (isInline) {
-          inlineCollapseOptions.inlineCollapsed = props.mixSider ? false : unref(getCollapsed);
-        }
-        return inlineCollapseOptions;
-      });
-
-      listenerRouteChange((route) => {
-        if (route.name === REDIRECT_NAME) return;
-        handleMenuChange(route);
-        currentActiveMenu.value = route.meta?.currentActiveMenu as string;
-
-        if (unref(currentActiveMenu)) {
-          menuState.selectedKeys = [unref(currentActiveMenu)];
-          setOpenKeys(unref(currentActiveMenu));
-        }
-      });
-
-      !props.mixSider &&
-        watch(
-          () => props.items,
-          () => {
-            handleMenuChange();
-          }
-        );
-
-      //update-begin-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-      async function handleMenuClick({ item, key }: { item: any; key: string; keyPath: string[] }) {
-        const { beforeClickFn } = props;
-        if (beforeClickFn && isFunction(beforeClickFn)) {
-          const flag = await beforeClickFn(key);
-          if (!flag) return;
-        }
-        emit('menuClick', key, item);
-        //update-end-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-
-        isClickGo.value = true;
-        // const parentPath = await getCurrentParentPath(key);
-
-        // menuState.openKeys = [parentPath];
-        menuState.selectedKeys = [key];
-      }
-
-      async function handleMenuChange(route?: RouteLocationNormalizedLoaded) {
-        if (unref(isClickGo)) {
-          isClickGo.value = false;
-          return;
-        }
-        const path = (route || unref(currentRoute)).meta?.currentActiveMenu || (route || unref(currentRoute)).path;
-        setOpenKeys(path);
-        if (unref(currentActiveMenu)) return;
-        if (props.isHorizontal && unref(getSplit)) {
-          const parentPath = await getCurrentParentPath(path);
-          menuState.selectedKeys = [parentPath];
-        } else {
-          const parentPaths = await getAllParentPath(props.items, path);
-          menuState.selectedKeys = parentPaths;
-        }
-      }
-
-      return {
-        handleMenuClick,
-        getInlineCollapseOptions,
-        getMenuClass,
-        handleOpenChange,
-        getOpenKeys,
-        ...toRefs(menuState),
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @import './index.less';
-</style>
diff --git a/src/components/Menu/src/components/BasicMenuItem.vue b/src/components/Menu/src/components/BasicMenuItem.vue
deleted file mode 100644
index fd54497..0000000
--- a/src/components/Menu/src/components/BasicMenuItem.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-<template>
-  <MenuItem :key="item.path" :title="item.title">
-    <MenuItemContent v-bind="$props" :item="item" />
-  </MenuItem>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Menu } from 'ant-design-vue';
-  import { itemProps } from '../props';
-
-  import MenuItemContent from './MenuItemContent.vue';
-  export default defineComponent({
-    name: 'BasicMenuItem',
-    components: { MenuItem: Menu.Item, MenuItemContent },
-    props: itemProps,
-    setup() {
-      return {};
-    },
-  });
-</script>
diff --git a/src/components/Menu/src/components/BasicSubMenuItem.vue b/src/components/Menu/src/components/BasicSubMenuItem.vue
deleted file mode 100644
index 5f92f96..0000000
--- a/src/components/Menu/src/components/BasicSubMenuItem.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <BasicMenuItem v-if="!menuHasChildren(item) && getShowMenu" v-bind="$props" />
-  <SubMenu v-if="menuHasChildren(item) && getShowMenu" :class="[theme]" :key="`submenu-${item.path}`" popupClassName="app-top-menu-popup">
-    <template #title>
-      <MenuItemContent v-bind="$props" :item="item" />
-    </template>
-
-    <template v-for="childrenItem in item.children || []" :key="childrenItem.path">
-      <BasicSubMenuItem v-bind="$props" :item="childrenItem" />
-    </template>
-  </SubMenu>
-</template>
-<script lang="ts">
-  import type { Menu as MenuType } from '/@/router/types';
-  import { defineComponent, computed } from 'vue';
-  import { Menu } from 'ant-design-vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { checkChildrenHidden } from '/@/utils/common/compUtils';
-  import { itemProps } from '../props';
-  import BasicMenuItem from './BasicMenuItem.vue';
-  import MenuItemContent from './MenuItemContent.vue';
-
-  export default defineComponent({
-    name: 'BasicSubMenuItem',
-    isSubMenu: true,
-    components: {
-      BasicMenuItem,
-      SubMenu: Menu.SubMenu,
-      MenuItemContent,
-    },
-    props: itemProps,
-    setup(props) {
-      const { prefixCls } = useDesign('basic-menu-item');
-
-      const getShowMenu = computed(() => !props.item.meta?.hideMenu);
-      function menuHasChildren(menuTreeItem: MenuType): boolean {
-        return (
-          !menuTreeItem.meta?.hideChildrenInMenu &&
-          Reflect.has(menuTreeItem, 'children') &&
-          !!menuTreeItem.children &&
-          menuTreeItem.children.length > 0
-          &&checkChildrenHidden(menuTreeItem)
-        );
-      }
-      return {
-        prefixCls,
-        menuHasChildren,
-        checkChildrenHidden,
-        getShowMenu,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Menu/src/components/MenuItemContent.vue b/src/components/Menu/src/components/MenuItemContent.vue
deleted file mode 100644
index 3044fbc..0000000
--- a/src/components/Menu/src/components/MenuItemContent.vue
+++ /dev/null
@@ -1,34 +0,0 @@
-<template>
-  <span :class="`${prefixCls}- flex items-center `">
-    <Icon v-if="getIcon" :icon="getIcon" :size="18" :class="`${prefixCls}-wrapper__icon mr-2`" />
-    {{ getI18nName }}
-  </span>
-</template>
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-
-  import Icon from '/@/components/Icon/index';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { contentProps } from '../props';
-  const { t } = useI18n();
-
-  export default defineComponent({
-    name: 'MenuItemContent',
-    components: {
-      Icon,
-    },
-    props: contentProps,
-    setup(props) {
-      const { prefixCls } = useDesign('basic-menu-item-content');
-      const getI18nName = computed(() => t(props.item?.name));
-      const getIcon = computed(() => props.item?.icon);
-
-      return {
-        prefixCls,
-        getI18nName,
-        getIcon,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Menu/src/index.less b/src/components/Menu/src/index.less
deleted file mode 100644
index 8bfbb0d..0000000
--- a/src/components/Menu/src/index.less
+++ /dev/null
@@ -1,74 +0,0 @@
-@basic-menu-prefix-cls: ~'@{namespace}-basic-menu';
-
-.app-top-menu-popup {
-  min-width: 150px;
-}
-
-.@{basic-menu-prefix-cls} {
-  width: 100%;
-
-  .ant-menu-item {
-    transition: unset;
-  }
-
-  &__sidebar-hor {
-    &.ant-menu-horizontal {
-      display: flex;
-      align-items: center;
-
-      &.ant-menu-dark {
-        background-color: transparent;
-
-        .ant-menu-submenu:hover,
-        .ant-menu-item-open,
-        .ant-menu-submenu-open,
-        .ant-menu-item-selected,
-        .ant-menu-submenu-selected,
-        .ant-menu-item:hover,
-        .ant-menu-item-active,
-        .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
-        .ant-menu-submenu-active,
-        .ant-menu-submenu-title:hover {
-          color: #fff;
-          background-color: @top-menu-active-bg-color !important;
-        }
-
-        .ant-menu-item:hover,
-        .ant-menu-item-active,
-        .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,
-        .ant-menu-submenu-active,
-        .ant-menu-submenu-title:hover {
-          background-color: @top-menu-active-bg-color;
-        }
-
-        .@{basic-menu-prefix-cls}-item__level1 {
-          background-color: transparent;
-
-          &.ant-menu-item-selected,
-          &.ant-menu-submenu-selected {
-            background-color: @top-menu-active-bg-color !important;
-          }
-        }
-
-        .ant-menu-item,
-        .ant-menu-submenu {
-          &.@{basic-menu-prefix-cls}-item__level1,
-          .ant-menu-submenu-title {
-            height: @header-height;
-            line-height: @header-height;
-          }
-        }
-      }
-    }
-  }
-
-  .ant-menu-submenu,
-  .ant-menu-submenu-inline {
-    transition: unset;
-  }
-
-  .ant-menu-inline.ant-menu-sub {
-    box-shadow: unset !important;
-    transition: unset;
-  }
-}
diff --git a/src/components/Menu/src/props.ts b/src/components/Menu/src/props.ts
deleted file mode 100644
index ed3f010..0000000
--- a/src/components/Menu/src/props.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import type { Menu } from '/@/router/types';
-import type { PropType } from 'vue';
-
-import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum';
-import { ThemeEnum } from '/@/enums/appEnum';
-import { propTypes } from '/@/utils/propTypes';
-import type { MenuTheme } from 'ant-design-vue';
-import type { MenuMode } from 'ant-design-vue/lib/menu/src/interface';
-export const basicProps = {
-  items: {
-    type: Array as PropType<Menu[]>,
-    default: () => [],
-  },
-  collapsedShowTitle: propTypes.bool,
-  // 鏈�濂芥槸4 鍊嶆暟
-  inlineIndent: propTypes.number.def(20),
-  // 鑿滃崟缁勪欢鐨刴ode灞炴��
-  mode: {
-    type: String as PropType<MenuMode>,
-    default: MenuModeEnum.INLINE,
-  },
-
-  type: {
-    type: String as PropType<MenuTypeEnum>,
-    default: MenuTypeEnum.MIX,
-  },
-  theme: {
-    type: String as PropType<MenuTheme>,
-    default: ThemeEnum.DARK,
-  },
-  inlineCollapsed: propTypes.bool,
-  mixSider: propTypes.bool,
-
-  isHorizontal: propTypes.bool,
-  accordion: propTypes.bool.def(true),
-  beforeClickFn: {
-    type: Function as PropType<(key: string) => Promise<boolean>>,
-  },
-};
-
-export const itemProps = {
-  item: {
-    type: Object as PropType<Menu>,
-    default: {},
-  },
-  level: propTypes.number,
-  theme: propTypes.oneOf(['dark', 'light']),
-  showTitle: propTypes.bool,
-  isHorizontal: propTypes.bool,
-};
-
-export const contentProps = {
-  item: {
-    type: Object as PropType<Menu>,
-    default: null,
-  },
-  showTitle: propTypes.bool.def(true),
-  level: propTypes.number.def(0),
-  isHorizontal: propTypes.bool.def(true),
-};
diff --git a/src/components/Menu/src/types.ts b/src/components/Menu/src/types.ts
deleted file mode 100644
index ad711c2..0000000
--- a/src/components/Menu/src/types.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-// import { ComputedRef } from 'vue';
-// import { ThemeEnum } from '/@/enums/appEnum';
-// import { MenuModeEnum } from '/@/enums/menuEnum';
-export interface MenuState {
-  // 榛樿閫変腑鐨勫垪琛�
-  defaultSelectedKeys: string[];
-
-  // 妯″紡
-  // mode: MenuModeEnum;
-
-  // // 涓婚
-  // theme: ComputedRef<ThemeEnum> | ThemeEnum;
-
-  // 缂╄繘
-  inlineIndent?: number;
-
-  // 灞曞紑鏁扮粍
-  openKeys: string[];
-
-  // 褰撳墠閫変腑鐨勮彍鍗曢」 key 鏁扮粍
-  selectedKeys: string[];
-
-  // 鏀剁缉鐘舵�佷笅灞曞紑鐨勬暟缁�
-  collapsedOpenKeys: string[];
-}
diff --git a/src/components/Menu/src/useOpenKeys.ts b/src/components/Menu/src/useOpenKeys.ts
deleted file mode 100644
index 3e35eac..0000000
--- a/src/components/Menu/src/useOpenKeys.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import { MenuModeEnum } from '/@/enums/menuEnum';
-import type { Menu as MenuType } from '/@/router/types';
-import type { MenuState } from './types';
-
-import { computed, Ref, toRaw } from 'vue';
-
-import { unref } from 'vue';
-import { uniq } from 'lodash-es';
-import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-import { getAllParentPath } from '/@/router/helper/menuHelper';
-import { useTimeoutFn } from '/@/hooks/core/useTimeout';
-
-export function useOpenKeys(menuState: MenuState, menus: Ref<MenuType[]>, mode: Ref<MenuModeEnum>, accordion: Ref<boolean>) {
-  const { getCollapsed, getIsMixSidebar } = useMenuSetting();
-
-  async function setOpenKeys(path: string) {
-    if (mode.value === MenuModeEnum.HORIZONTAL) {
-      return;
-    }
-    const native = unref(getIsMixSidebar);
-    useTimeoutFn(
-      () => {
-        const menuList = toRaw(menus.value);
-        if (menuList?.length === 0) {
-          menuState.openKeys = [];
-          return;
-        }
-        if (!unref(accordion)) {
-          menuState.openKeys = uniq([...menuState.openKeys, ...getAllParentPath(menuList, path)]);
-        } else {
-          menuState.openKeys = getAllParentPath(menuList, path);
-        }
-      },
-      16,
-      !native
-    );
-  }
-
-  const getOpenKeys = computed(() => {
-    const collapse = unref(getIsMixSidebar) ? false : unref(getCollapsed);
-
-    return collapse ? menuState.collapsedOpenKeys : menuState.openKeys;
-  });
-
-  /**
-   * @description:  閲嶇疆鍊�
-   */
-  function resetKeys() {
-    menuState.selectedKeys = [];
-    menuState.openKeys = [];
-  }
-
-  function handleOpenChange(openKeys: string[]) {
-    if (unref(mode) === MenuModeEnum.HORIZONTAL || !unref(accordion) || unref(getIsMixSidebar)) {
-      menuState.openKeys = openKeys;
-    } else {
-      // const menuList = toRaw(menus.value);
-      // getAllParentPath(menuList, path);
-      const rootSubMenuKeys: string[] = [];
-      for (const { children, path } of unref(menus)) {
-        if (children && children.length > 0) {
-          rootSubMenuKeys.push(path);
-        }
-      }
-      if (!unref(getCollapsed)) {
-        const latestOpenKey = openKeys.find((key) => menuState.openKeys.indexOf(key) === -1);
-        if (rootSubMenuKeys.indexOf(latestOpenKey as string) === -1) {
-          menuState.openKeys = openKeys;
-        } else {
-          menuState.openKeys = latestOpenKey ? [latestOpenKey] : [];
-        }
-      } else {
-        menuState.collapsedOpenKeys = openKeys;
-      }
-    }
-  }
-  return { setOpenKeys, resetKeys, getOpenKeys, handleOpenChange };
-}
diff --git a/src/components/Modal/index.ts b/src/components/Modal/index.ts
deleted file mode 100644
index 6188c5c..0000000
--- a/src/components/Modal/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { withInstall } from '/@/utils';
-import './src/index.less';
-import basicModal from './src/BasicModal.vue';
-
-export const BasicModal = withInstall(basicModal);
-export { useModalContext } from './src/hooks/useModalContext';
-export { useModal, useModalInner } from './src/hooks/useModal';
-export * from './src/typing';
diff --git a/src/components/Modal/src/BasicModal.vue b/src/components/Modal/src/BasicModal.vue
deleted file mode 100644
index be81523..0000000
--- a/src/components/Modal/src/BasicModal.vue
+++ /dev/null
@@ -1,271 +0,0 @@
-<template>
-  <Modal v-bind="getBindValue" @cancel="handleCancel">
-    <template #closeIcon v-if="!$slots.closeIcon">
-      <ModalClose :canFullscreen="getProps.canFullscreen" :fullScreen="fullScreenRef" :commentSpan="commentSpan" :enableComment="getProps.enableComment" @comment="handleComment" @cancel="handleCancel" @fullscreen="handleFullScreen" />
-    </template>
-
-    <template #title v-if="!$slots.title">
-      <ModalHeader :helpMessage="getProps.helpMessage" :title="getMergeProps.title" @dblclick="handleTitleDbClick" />
-    </template>
-
-    <template #footer v-if="!$slots.footer">
-      <ModalFooter v-bind="getBindValue" @ok="handleOk" @cancel="handleCancel">
-        <template #[item]="data" v-for="item in Object.keys($slots)">
-          <slot :name="item" v-bind="data || {}"></slot>
-        </template>
-      </ModalFooter>
-    </template>
-
-    <!-- update-begin-author:taoyan date:2022-7-18 for:  modal寮圭獥 鏀寔璇勮 slot -->
-    <a-row class="jeecg-modal-wrapper">
-      <a-col :span="24-commentSpan" class="jeecg-modal-content">
-        <ModalWrapper
-          :useWrapper="getProps.useWrapper"
-          :footerOffset="wrapperFooterOffset"
-          :fullScreen="fullScreenRef"
-          ref="modalWrapperRef"
-          :loading="getProps.loading"
-          :loading-tip="getProps.loadingTip"
-          :minHeight="getProps.minHeight"
-          :height="getWrapperHeight"
-          :visible="visibleRef"
-          :modalFooterHeight="footer !== undefined && !footer ? 0 : undefined"
-          v-bind="omit(getProps.wrapperProps, 'visible', 'height', 'modalFooterHeight')"
-          @ext-height="handleExtHeight"
-          @height-change="handleHeightChange">
-          <slot></slot>
-        </ModalWrapper>
-      </a-col>
-      
-      <a-col :span="commentSpan" class="jeecg-comment-outer">
-        <slot name="comment"></slot>
-      </a-col>
-      
-    </a-row>
-    <!-- update-end-author:taoyan date:2022-7-18 for:  modal寮圭獥 鏀寔璇勮 slot -->
-    
-    <template #[item]="data" v-for="item in Object.keys(omit($slots, 'default'))">
-      <slot :name="item" v-bind="data || {}"></slot>
-    </template>
-  </Modal>
-</template>
-<script lang="ts">
-  import type { ModalProps, ModalMethods } from './typing';
-
-  import { defineComponent, computed, ref, watch, unref, watchEffect, toRef, getCurrentInstance, nextTick } from 'vue';
-  import Modal from './components/Modal';
-  import ModalWrapper from './components/ModalWrapper.vue';
-  import ModalClose from './components/ModalClose.vue';
-  import ModalFooter from './components/ModalFooter.vue';
-  import ModalHeader from './components/ModalHeader.vue';
-  import { isFunction } from '/@/utils/is';
-  import { deepMerge } from '/@/utils';
-  import { basicProps } from './props';
-  import { useFullScreen } from './hooks/useModalFullScreen';
-  import { omit } from 'lodash-es';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  export default defineComponent({
-    name: 'BasicModal',
-    components: { Modal, ModalWrapper, ModalClose, ModalFooter, ModalHeader },
-    inheritAttrs: false,
-    props: basicProps,
-    emits: ['visible-change', 'height-change', 'cancel', 'ok', 'register', 'update:visible'],
-    setup(props, { emit, attrs }) {
-      const visibleRef = ref(false);
-      const propsRef = ref<Partial<ModalProps> | null>(null);
-      const modalWrapperRef = ref<any>(null);
-      const { prefixCls } = useDesign('basic-modal');
-      // modal   Bottom and top height
-      const extHeightRef = ref(0);
-      const modalMethods: ModalMethods = {
-        setModalProps,
-        emitVisible: undefined,
-        redoModalHeight: () => {
-          nextTick(() => {
-            if (unref(modalWrapperRef)) {
-              (unref(modalWrapperRef) as any).setModalHeight();
-            }
-          });
-        },
-      };
-
-      const instance = getCurrentInstance();
-      if (instance) {
-        emit('register', modalMethods, instance.uid);
-      }
-
-      // Custom title component: get title
-      const getMergeProps = computed((): Recordable => {
-        return {
-          ...props,
-          ...(unref(propsRef) as any),
-        };
-      });
-
-      const { handleFullScreen, getWrapClassName, fullScreenRef } = useFullScreen({
-        modalWrapperRef,
-        extHeightRef,
-        wrapClassName: toRef(getMergeProps.value, 'wrapClassName'),
-      });
-
-      // modal component does not need title and origin buttons
-      const getProps = computed((): Recordable => {
-        const opt = {
-          ...unref(getMergeProps),
-          visible: unref(visibleRef),
-          okButtonProps: undefined,
-          cancelButtonProps: undefined,
-          title: undefined,
-        };
-        return {
-          ...opt,
-          wrapClassName: unref(getWrapClassName),
-        };
-      });
-
-      const getBindValue = computed((): Recordable => {
-        const attr = {
-          ...attrs,
-          ...unref(getMergeProps),
-          visible: unref(visibleRef),
-          wrapClassName: unref(getWrapClassName),
-        };
-        if (unref(fullScreenRef)) {
-          return omit(attr, ['height', 'title']);
-        }
-        return omit(attr, 'title');
-      });
-
-      const getWrapperHeight = computed(() => {
-        if (unref(fullScreenRef)) return undefined;
-        return unref(getProps).height;
-      });
-
-      watchEffect(() => {
-        fullScreenRef.value = !!props.defaultFullscreen;
-      });
-
-      watchEffect(() => {
-        visibleRef.value = !!props.visible;
-      });
-
-      watch(
-        () => unref(visibleRef),
-        (v) => {
-          emit('visible-change', v);
-          emit('update:visible', v);
-          instance && modalMethods.emitVisible?.(v, instance.uid);
-          nextTick(() => {
-            if (props.scrollTop && v && unref(modalWrapperRef)) {
-              (unref(modalWrapperRef) as any).scrollTop();
-            }
-          });
-        },
-        {
-          immediate: false,
-        }
-      );
-
-      // 鍙栨秷浜嬩欢
-      async function handleCancel(e: Event) {
-        e?.stopPropagation();
-        // 杩囨护鑷畾涔夊叧闂寜閽殑绌虹櫧鍖哄煙
-        if ((e.target as HTMLElement)?.classList?.contains(prefixCls + '-close--custom')) return;
-        if (props.closeFunc && isFunction(props.closeFunc)) {
-          const isClose: boolean = await props.closeFunc();
-          visibleRef.value = !isClose;
-          return;
-        }
-
-        visibleRef.value = false;
-        emit('cancel', e);
-      }
-
-      /**
-       * @description: 璁剧疆modal鍙傛暟
-       */
-      function setModalProps(props: Partial<ModalProps>): void {
-        // Keep the last setModalProps
-        propsRef.value = deepMerge(unref(propsRef) || ({} as any), props);
-        if (Reflect.has(props, 'visible')) {
-          visibleRef.value = !!props.visible;
-        }
-        if (Reflect.has(props, 'defaultFullscreen')) {
-          fullScreenRef.value = !!props.defaultFullscreen;
-        }
-      }
-
-      function handleOk(e: Event) {
-        emit('ok', e);
-      }
-
-      function handleHeightChange(height: string) {
-        emit('height-change', height);
-      }
-
-      function handleExtHeight(height: number) {
-        extHeightRef.value = height;
-      }
-
-      function handleTitleDbClick(e) {
-        if (!props.canFullscreen) return;
-        e.stopPropagation();
-        handleFullScreen(e);
-      }
-
-      //update-begin-author:taoyan date:2022-7-18 for: modal鏀寔璇勮 slot
-      const commentSpan = ref(0);
-      watch(()=>props.enableComment, (flag)=>{
-        handleComment(flag)
-      }, {immediate:true});
-      function handleComment(flag){
-        if(flag=== true){
-          commentSpan.value = 6
-        }else{
-          commentSpan.value = 0
-        }
-      }
-      //update-end-author:taoyan date:2022-7-18 for: modal鏀寔璇勮 slot
-
-      return {
-        handleCancel,
-        getBindValue,
-        getProps,
-        handleFullScreen,
-        fullScreenRef,
-        getMergeProps,
-        handleOk,
-        visibleRef,
-        omit,
-        modalWrapperRef,
-        handleExtHeight,
-        handleHeightChange,
-        handleTitleDbClick,
-        getWrapperHeight,
-        commentSpan,
-        handleComment
-      };
-    },
-  });
-</script>
-<style lang="less">
-  /*update-begin-author:taoyan date:2022-7-27 for:modal璇勮鍖哄煙鏍峰紡*/
-  .jeecg-comment-outer {
-    border-left: 1px solid #f0f0f0;
-    .ant-tabs-nav-wrap{
-    /*  text-align: center;*/
-    }
-  }
-  .jeecg-modal-content{
-    >.scroll-container{
-      padding: 14px;
-    }
-  }
-  /*update-end-author:taoyan date:2022-7-27 for:modal璇勮鍖哄煙鏍峰紡*/
-
-  // wrapper璁句负100%锛屽吋瀹逛箣鍓嶅啓杩囩殑寮圭獥鑷畾涔夋牱寮�
-  .jeecg-modal-wrapper,
-  .jeecg-modal-content {
-    height: 100%;
-  }
-</style>
diff --git a/src/components/Modal/src/components/Modal.tsx b/src/components/Modal/src/components/Modal.tsx
deleted file mode 100644
index 684e3bf..0000000
--- a/src/components/Modal/src/components/Modal.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { Modal } from 'ant-design-vue';
-import { defineComponent, toRefs, unref } from 'vue';
-import { basicProps } from '../props';
-import { useModalDragMove } from '../hooks/useModalDrag';
-import { useAttrs } from '/@/hooks/core/useAttrs';
-import { extendSlots } from '/@/utils/helper/tsxHelper';
-
-export default defineComponent({
-  name: 'Modal',
-  inheritAttrs: false,
-  props: basicProps,
-  emits: ['cancel'],
-  setup(props, { slots, emit }) {
-    const { visible, draggable, destroyOnClose } = toRefs(props);
-    const attrs = useAttrs();
-    useModalDragMove({
-      visible,
-      destroyOnClose,
-      draggable,
-    });
-    const onCancel = (e: Event) => {
-      emit('cancel', e);
-    };
-
-    return () => {
-      const propsData = { ...unref(attrs), ...props, onCancel } as Recordable;
-      return <Modal {...propsData}>{extendSlots(slots)}</Modal>;
-    };
-  },
-});
diff --git a/src/components/Modal/src/components/ModalClose.vue b/src/components/Modal/src/components/ModalClose.vue
deleted file mode 100644
index 72fe1c9..0000000
--- a/src/components/Modal/src/components/ModalClose.vue
+++ /dev/null
@@ -1,159 +0,0 @@
-<template>
-  <div :class="getClass">
-    <template v-if="fullScreenStatus">
-      <Tooltip :title="t('component.modal.restore')" placement="bottom" v-if="fullScreen">
-        <FullscreenExitOutlined role="full" @click="handleFullScreen" />
-      </Tooltip>
-      <Tooltip :title="t('component.modal.maximize')" placement="bottom" v-else>
-        <FullscreenOutlined role="close" @click="handleFullScreen" />
-      </Tooltip>
-    </template>
-
-    <!-- 鏄惁寮�鍚瘎璁哄尯鍩� -->
-    <template v-if="enableComment">
-      <Tooltip title="鏀惰捣" placement="bottom" v-if="commentSpan>0">
-        <RightSquareOutlined @click="handleCloseComment" style="font-size: 16px"/>
-      </Tooltip>
-      <Tooltip title="灞曞紑" placement="bottom" v-else>
-        <LeftSquareOutlined @click="handleOpenComment" style="font-size: 16px"/>
-      </Tooltip>
-    </template>
-    
-    <Tooltip :title="t('component.modal.close')" placement="bottom">
-      <CloseOutlined @click="handleCancel" />
-    </Tooltip>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, computed } from 'vue';
-  import { FullscreenExitOutlined, FullscreenOutlined, CloseOutlined, LeftSquareOutlined, RightSquareOutlined } from '@ant-design/icons-vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { Tooltip } from 'ant-design-vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  export default defineComponent({
-    name: 'ModalClose',
-    components: { Tooltip, FullscreenExitOutlined, FullscreenOutlined, CloseOutlined, LeftSquareOutlined, RightSquareOutlined },
-    props: {
-      canFullscreen: { type: Boolean, default: true },
-      fullScreen: { type: Boolean },
-      enableComment: { type: Boolean, default: false },
-      commentSpan: { type: Number, default: 0 },
-    },
-    emits: ['cancel', 'fullscreen', 'comment'],
-    setup(props, { emit }) {
-      const { prefixCls } = useDesign('basic-modal-close');
-      const { t } = useI18n();
-
-      const getClass = computed(() => {
-        return [
-          prefixCls,
-          `${prefixCls}--custom`,
-          {
-            [`${prefixCls}--can-full`]: props.canFullscreen || props.enableComment,
-          },
-        ];
-      });
-
-      function handleCancel(e: Event) {
-        emit('cancel', e);
-      }
-
-      function handleFullScreen(e: Event) {
-        e?.stopPropagation();
-        e?.preventDefault();
-        if(props.commentSpan==0 || props.enableComment == false){
-          emit('fullscreen');
-        }
-      }
-
-      /**
-       * 寮�鍚瘎璁哄尯鍩�
-       * @param e
-       */
-      function handleOpenComment(e: Event){
-        e?.stopPropagation();
-        e?.preventDefault();
-        if(props.fullScreen==false){
-          emit('fullscreen');
-        }
-        emit('comment', true);
-      }
-
-      /**
-       * 鍏抽棴璇勮鍖哄煙
-       * @param e
-       */
-      function handleCloseComment(e: Event){
-        e?.stopPropagation();
-        e?.preventDefault();
-        emit('comment', false);
-      }
-
-      /**
-       * 鏈夎瘎璁虹殑鏃跺�欎笉闇�瑕佽缃叏灞�
-       */
-      const fullScreenStatus = computed(()=>{
-        if(props.enableComment===true){
-          return false
-        }else{
-          return props.canFullscreen;
-        }
-      });
-      
-      return {
-        t,
-        getClass,
-        prefixCls,
-        handleCancel,
-        handleFullScreen,
-        handleOpenComment,
-        handleCloseComment,
-        fullScreenStatus
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-modal-close';
-  .@{prefix-cls} {
-    display: flex;
-    height: 95%;
-    align-items: center;
-
-    > span {
-      margin-left: 48px;
-      font-size: 16px;
-    }
-
-    &--can-full {
-      > span {
-        margin-left: 12px;
-      }
-    }
-
-    &:not(&--can-full) {
-      > span:nth-child(1) {
-        &:hover {
-          font-weight: 700;
-        }
-      }
-    }
-
-    & span:nth-child(1) {
-      display: inline-block;
-      padding: 10px;
-
-      &:hover {
-        color: @primary-color;
-      }
-    }
-
-    & span:last-child {
-      padding: 10px 10px 10px 0;
-      &:hover {
-        color: @error-color;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Modal/src/components/ModalFooter.vue b/src/components/Modal/src/components/ModalFooter.vue
deleted file mode 100644
index 7bc5786..0000000
--- a/src/components/Modal/src/components/ModalFooter.vue
+++ /dev/null
@@ -1,34 +0,0 @@
-<template>
-  <div>
-    <slot name="insertFooter"></slot>
-    <a-button v-bind="cancelButtonProps" @click="handleCancel" v-if="showCancelBtn">
-      {{ cancelText }}
-    </a-button>
-    <slot name="centerFooter"></slot>
-    <a-button :type="okType" @click="handleOk" :loading="confirmLoading" v-bind="okButtonProps" v-if="showOkBtn">
-      {{ okText }}
-    </a-button>
-    <slot name="appendFooter"></slot>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-
-  import { basicProps } from '../props';
-  export default defineComponent({
-    name: 'BasicModalFooter',
-    props: basicProps,
-    emits: ['ok', 'cancel'],
-    setup(_, { emit }) {
-      function handleOk(e: Event) {
-        emit('ok', e);
-      }
-
-      function handleCancel(e: Event) {
-        emit('cancel', e);
-      }
-
-      return { handleOk, handleCancel };
-    },
-  });
-</script>
diff --git a/src/components/Modal/src/components/ModalHeader.vue b/src/components/Modal/src/components/ModalHeader.vue
deleted file mode 100644
index bf6c112..0000000
--- a/src/components/Modal/src/components/ModalHeader.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-<template>
-  <BasicTitle :helpMessage="helpMessage">
-    {{ title }}
-  </BasicTitle>
-</template>
-<script lang="ts">
-  import type { PropType } from 'vue';
-  import { defineComponent } from 'vue';
-  import { BasicTitle } from '/@/components/Basic';
-
-  export default defineComponent({
-    name: 'BasicModalHeader',
-    components: { BasicTitle },
-    emits: ['dblclick'],
-    props: {
-      helpMessage: {
-        type: [String, Array] as PropType<string | string[]>,
-      },
-      title: { type: String },
-    },
-  });
-</script>
diff --git a/src/components/Modal/src/components/ModalWrapper.vue b/src/components/Modal/src/components/ModalWrapper.vue
deleted file mode 100644
index 3b5aa45..0000000
--- a/src/components/Modal/src/components/ModalWrapper.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<template>
-  <ScrollContainer ref="wrapperRef">
-    <div ref="spinRef" :style="spinStyle" v-loading="loading" :loading-tip="loadingTip">
-      <slot></slot>
-    </div>
-  </ScrollContainer>
-</template>
-<script lang="ts">
-  import type { CSSProperties } from 'vue';
-  import { defineComponent, computed, ref, watchEffect, unref, watch, onMounted, nextTick, onUnmounted } from 'vue';
-  import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
-  import { ScrollContainer } from '/@/components/Container';
-  import { createModalContext } from '../hooks/useModalContext';
-  import { useMutationObserver } from '@vueuse/core';
-
-  const props = {
-    loading: { type: Boolean },
-    useWrapper: { type: Boolean, default: true },
-    modalHeaderHeight: { type: Number, default: 57 },
-    modalFooterHeight: { type: Number, default: 74 },
-    minHeight: { type: Number, default: 200 },
-    height: { type: Number },
-    footerOffset: { type: Number, default: 0 },
-    visible: { type: Boolean },
-    fullScreen: { type: Boolean },
-    loadingTip: { type: String },
-  };
-
-  export default defineComponent({
-    name: 'ModalWrapper',
-    components: { ScrollContainer },
-    inheritAttrs: false,
-    props,
-    emits: ['height-change', 'ext-height'],
-    setup(props, { emit }) {
-      const wrapperRef = ref<ComponentRef>(null);
-      const spinRef = ref<ElRef>(null);
-      const realHeightRef = ref(0);
-      const minRealHeightRef = ref(0);
-
-      let realHeight = 0;
-
-      let stopElResizeFn: Fn = () => {};
-
-      useWindowSizeFn(setModalHeight.bind(null, false));
-
-      useMutationObserver(
-        spinRef,
-        () => {
-          setModalHeight();
-        },
-        {
-          attributes: true,
-          subtree: true,
-        }
-      );
-
-      createModalContext({
-        redoModalHeight: setModalHeight,
-      });
-
-      const spinStyle = computed((): CSSProperties => {
-        return {
-          minHeight: `${props.minHeight}px`,
-          [props.fullScreen ? 'height' : 'maxHeight']: `${unref(realHeightRef)}px`,
-        };
-      });
-
-      watchEffect(() => {
-        props.useWrapper && setModalHeight();
-      });
-
-      watch(
-        () => props.fullScreen,
-        (v) => {
-          setModalHeight();
-          if (!v) {
-            realHeightRef.value = minRealHeightRef.value;
-          } else {
-            minRealHeightRef.value = realHeightRef.value;
-          }
-        }
-      );
-
-      onMounted(() => {
-        const { modalHeaderHeight, modalFooterHeight } = props;
-        emit('ext-height', modalHeaderHeight + modalFooterHeight);
-      });
-
-      onUnmounted(() => {
-        stopElResizeFn && stopElResizeFn();
-      });
-
-      async function scrollTop() {
-        nextTick(() => {
-          const wrapperRefDom = unref(wrapperRef);
-          if (!wrapperRefDom) return;
-          (wrapperRefDom as any)?.scrollTo?.(0);
-        });
-      }
-
-      async function setModalHeight() {
-        // 瑙e喅鍦ㄥ脊绐楀叧闂殑鏃跺�欑洃鍚繕瀛樺湪,瀵艰嚧鍐嶆鎵撳紑寮圭獥娌℃湁楂樺害
-        // 鍔犱笂杩欎釜,灏卞繀椤诲湪浣跨敤鐨勬椂鍊欎紶閫掔埗绾х殑visible
-        if (!props.visible) return;
-        const wrapperRefDom = unref(wrapperRef);
-        if (!wrapperRefDom) return;
-
-        const bodyDom = wrapperRefDom.$el.parentElement;
-        if (!bodyDom) return;
-        bodyDom.style.padding = '0';
-        await nextTick();
-
-        try {
-          const modalDom = bodyDom.parentElement && bodyDom.parentElement.parentElement;
-          if (!modalDom) return;
-
-          const modalRect = getComputedStyle(modalDom as Element).top;
-          const modalTop = Number.parseInt(modalRect);
-          let maxHeight = window.innerHeight - modalTop * 2 + (props.footerOffset! || 0) - props.modalFooterHeight - props.modalHeaderHeight;
-
-          // 璺濈椤堕儴杩囪繘浼氬嚭鐜版粴鍔ㄦ潯
-          if (modalTop < 40) {
-            maxHeight -= 26;
-          }
-          await nextTick();
-          const spinEl = unref(spinRef);
-
-          if (!spinEl) return;
-          await nextTick();
-          // if (!realHeight) {
-          realHeight = spinEl.scrollHeight;
-          // }
-
-          if (props.fullScreen) {
-            realHeightRef.value = window.innerHeight - props.modalFooterHeight - props.modalHeaderHeight - 28;
-          } else {
-            realHeightRef.value = props.height ? props.height : realHeight > maxHeight ? maxHeight : realHeight;
-          }
-          emit('height-change', unref(realHeightRef));
-        } catch (error) {
-          console.log(error);
-        }
-      }
-
-      return { wrapperRef, spinRef, spinStyle, scrollTop, setModalHeight };
-    },
-  });
-</script>
diff --git a/src/components/Modal/src/hooks/useModal.ts b/src/components/Modal/src/hooks/useModal.ts
deleted file mode 100644
index 1c88323..0000000
--- a/src/components/Modal/src/hooks/useModal.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-import type { UseModalReturnType, ModalMethods, ModalProps, ReturnMethods, UseModalInnerReturnType } from '../typing';
-import { ref, onUnmounted, unref, getCurrentInstance, reactive, watchEffect, nextTick, toRaw } from 'vue';
-import { isProdMode } from '/@/utils/env';
-import { isFunction } from '/@/utils/is';
-import { isEqual } from 'lodash-es';
-import { tryOnUnmounted } from '@vueuse/core';
-import { error } from '/@/utils/log';
-import { computed } from 'vue';
-
-const dataTransfer = reactive<any>({});
-
-const visibleData = reactive<{ [key: number]: boolean }>({});
-
-/**
- * @description: Applicable to independent modal and call outside
- */
-export function useModal(): UseModalReturnType {
-  const modal = ref<Nullable<ModalMethods>>(null);
-  const loaded = ref<Nullable<boolean>>(false);
-  const uid = ref<string>('');
-
-  function register(modalMethod: ModalMethods, uuid: string) {
-    if (!getCurrentInstance()) {
-      throw new Error('useModal() can only be used inside setup() or functional components!');
-    }
-    uid.value = uuid;
-    isProdMode() &&
-      onUnmounted(() => {
-        modal.value = null;
-        loaded.value = false;
-        dataTransfer[unref(uid)] = null;
-      });
-    if (unref(loaded) && isProdMode() && modalMethod === unref(modal)) return;
-
-    modal.value = modalMethod;
-    loaded.value = true;
-    modalMethod.emitVisible = (visible: boolean, uid: number) => {
-      visibleData[uid] = visible;
-    };
-  }
-
-  const getInstance = () => {
-    const instance = unref(modal);
-    if (!instance) {
-      error('useModal instance is undefined!');
-    }
-    return instance;
-  };
-
-  const methods: ReturnMethods = {
-    setModalProps: (props: Partial<ModalProps>): void => {
-      getInstance()?.setModalProps(props);
-    },
-
-    getVisible: computed((): boolean => {
-      return visibleData[~~unref(uid)];
-    }),
-
-    redoModalHeight: () => {
-      getInstance()?.redoModalHeight?.();
-    },
-
-    openModal: <T = any>(visible = true, data?: T, openOnSet = true): void => {
-      getInstance()?.setModalProps({
-        visible: visible,
-      });
-
-      if (!data) return;
-      const id = unref(uid);
-      if (openOnSet) {
-        dataTransfer[id] = null;
-        dataTransfer[id] = toRaw(data);
-        return;
-      }
-      const equal = isEqual(toRaw(dataTransfer[id]), toRaw(data));
-      if (!equal) {
-        dataTransfer[id] = toRaw(data);
-      }
-    },
-
-    closeModal: () => {
-      getInstance()?.setModalProps({ visible: false });
-    },
-  };
-  return [register, methods];
-}
-
-export const useModalInner = (callbackFn?: Fn): UseModalInnerReturnType => {
-  const modalInstanceRef = ref<Nullable<ModalMethods>>(null);
-  const currentInstance = getCurrentInstance();
-  const uidRef = ref<string>('');
-
-  const getInstance = () => {
-    const instance = unref(modalInstanceRef);
-    if (!instance) {
-      error('useModalInner instance is undefined!');
-    }
-    return instance;
-  };
-
-  const register = (modalInstance: ModalMethods, uuid: string) => {
-    isProdMode() &&
-      tryOnUnmounted(() => {
-        modalInstanceRef.value = null;
-      });
-    uidRef.value = uuid;
-    modalInstanceRef.value = modalInstance;
-    currentInstance?.emit('register', modalInstance, uuid);
-  };
-
-  watchEffect(() => {
-    const data = dataTransfer[unref(uidRef)];
-    if (!data) return;
-    if (!callbackFn || !isFunction(callbackFn)) return;
-    nextTick(() => {
-      callbackFn(data);
-    });
-  });
-
-  return [
-    register,
-    {
-      changeLoading: (loading = true) => {
-        getInstance()?.setModalProps({ loading });
-      },
-      getVisible: computed((): boolean => {
-        return visibleData[~~unref(uidRef)];
-      }),
-
-      changeOkLoading: (loading = true) => {
-        getInstance()?.setModalProps({ confirmLoading: loading });
-      },
-
-      closeModal: () => {
-        getInstance()?.setModalProps({ visible: false });
-      },
-
-      setModalProps: (props: Partial<ModalProps>) => {
-        getInstance()?.setModalProps(props);
-      },
-
-      redoModalHeight: () => {
-        const callRedo = getInstance()?.redoModalHeight;
-        callRedo && callRedo();
-      },
-    },
-  ];
-};
diff --git a/src/components/Modal/src/hooks/useModalContext.ts b/src/components/Modal/src/hooks/useModalContext.ts
deleted file mode 100644
index 94d4c4e..0000000
--- a/src/components/Modal/src/hooks/useModalContext.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { InjectionKey } from 'vue';
-import { createContext, useContext } from '/@/hooks/core/useContext';
-
-export interface ModalContextProps {
-  redoModalHeight: () => void;
-}
-
-const key: InjectionKey<ModalContextProps> = Symbol();
-
-export function createModalContext(context: ModalContextProps) {
-  return createContext<ModalContextProps>(context, key);
-}
-
-export function useModalContext() {
-  return useContext<ModalContextProps>(key);
-}
diff --git a/src/components/Modal/src/hooks/useModalDrag.ts b/src/components/Modal/src/hooks/useModalDrag.ts
deleted file mode 100644
index ff05b7b..0000000
--- a/src/components/Modal/src/hooks/useModalDrag.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-import { Ref, unref, watchEffect } from 'vue';
-import { useTimeoutFn } from '/@/hooks/core/useTimeout';
-
-export interface UseModalDragMoveContext {
-  draggable: Ref<boolean>;
-  destroyOnClose: Ref<boolean | undefined> | undefined;
-  visible: Ref<boolean>;
-}
-
-export function useModalDragMove(context: UseModalDragMoveContext) {
-  const getStyle = (dom: any, attr: any) => {
-    return getComputedStyle(dom)[attr];
-  };
-  const drag = (wrap: any) => {
-    if (!wrap) return;
-    wrap.setAttribute('data-drag', unref(context.draggable));
-    const dialogHeaderEl = wrap.querySelector('.ant-modal-header');
-    const dragDom = wrap.querySelector('.ant-modal');
-
-    if (!dialogHeaderEl || !dragDom || !unref(context.draggable)) return;
-
-    dialogHeaderEl.style.cursor = 'move';
-
-    dialogHeaderEl.onmousedown = (e: any) => {
-      if (!e) return;
-      // 榧犳爣鎸変笅锛岃绠楀綋鍓嶅厓绱犺窛绂诲彲瑙嗗尯鐨勮窛绂�
-      const disX = e.clientX;
-      const disY = e.clientY;
-      const screenWidth = document.body.clientWidth; // body褰撳墠瀹藉害
-      const screenHeight = document.documentElement.clientHeight; // 鍙鍖哄煙楂樺害(搴斾负body楂樺害锛屽彲鏌愪簺鐜涓嬫棤娉曡幏鍙�)
-
-      const dragDomWidth = dragDom.offsetWidth; // 瀵硅瘽妗嗗搴�
-      const dragDomheight = dragDom.offsetHeight; // 瀵硅瘽妗嗛珮搴�
-
-      const minDragDomLeft = dragDom.offsetLeft;
-
-      const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
-      const minDragDomTop = dragDom.offsetTop;
-      const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;
-      // 鑾峰彇鍒扮殑鍊煎甫px 姝e垯鍖归厤鏇挎崲
-      const domLeft = getStyle(dragDom, 'left');
-      const domTop = getStyle(dragDom, 'top');
-      let styL = +domLeft;
-      let styT = +domTop;
-
-      // 娉ㄦ剰鍦╥e涓� 绗竴娆¤幏鍙栧埌鐨勫�间负缁勪欢鑷甫50% 绉诲姩涔嬪悗璧嬪�间负px
-      if (domLeft.includes('%')) {
-        styL = +document.body.clientWidth * (+domLeft.replace(/%/g, '') / 100);
-        styT = +document.body.clientHeight * (+domTop.replace(/%/g, '') / 100);
-      } else {
-        styL = +domLeft.replace(/px/g, '');
-        styT = +domTop.replace(/px/g, '');
-      }
-
-      document.onmousemove = function (e) {
-        // 閫氳繃浜嬩欢濮旀墭锛岃绠楃Щ鍔ㄧ殑璺濈
-        let left = e.clientX - disX;
-        let top = e.clientY - disY;
-
-        // 杈圭晫澶勭悊
-        if (-left > minDragDomLeft) {
-          left = -minDragDomLeft;
-        } else if (left > maxDragDomLeft) {
-          left = maxDragDomLeft;
-        }
-
-        if (-top > minDragDomTop) {
-          top = -minDragDomTop;
-        } else if (top > maxDragDomTop) {
-          top = maxDragDomTop;
-        }
-
-        // 绉诲姩褰撳墠鍏冪礌
-        dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;
-      };
-
-      document.onmouseup = () => {
-        document.onmousemove = null;
-        document.onmouseup = null;
-      };
-    };
-  };
-
-  const handleDrag = () => {
-    const dragWraps = document.querySelectorAll('.ant-modal-wrap');
-    for (const wrap of Array.from(dragWraps)) {
-      if (!wrap) continue;
-      const display = getStyle(wrap, 'display');
-      const draggable = wrap.getAttribute('data-drag');
-      if (display !== 'none') {
-        // 鎷栨嫿浣嶇疆
-        if (draggable === null || unref(context.destroyOnClose)) {
-          drag(wrap);
-        }
-      }
-    }
-  };
-
-  watchEffect(() => {
-    if (!unref(context.visible) || !unref(context.draggable)) {
-      return;
-    }
-    useTimeoutFn(() => {
-      handleDrag();
-    }, 30);
-  });
-}
diff --git a/src/components/Modal/src/hooks/useModalFullScreen.ts b/src/components/Modal/src/hooks/useModalFullScreen.ts
deleted file mode 100644
index b53563a..0000000
--- a/src/components/Modal/src/hooks/useModalFullScreen.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import { computed, Ref, ref, unref } from 'vue';
-
-export interface UseFullScreenContext {
-  wrapClassName: Ref<string | undefined>;
-  modalWrapperRef: Ref<ComponentRef>;
-  extHeightRef: Ref<number>;
-}
-
-export function useFullScreen(context: UseFullScreenContext) {
-  // const formerHeightRef = ref(0);
-  const fullScreenRef = ref(false);
-
-  const getWrapClassName = computed(() => {
-    const clsName = unref(context.wrapClassName) || '';
-    return unref(fullScreenRef) ? `fullscreen-modal ${clsName} ` : unref(clsName);
-  });
-
-  function handleFullScreen(e: Event) {
-    e && e.stopPropagation();
-    fullScreenRef.value = !unref(fullScreenRef);
-
-    // const modalWrapper = unref(context.modalWrapperRef);
-
-    // if (!modalWrapper) return;
-
-    // const wrapperEl = modalWrapper.$el as HTMLElement;
-    // if (!wrapperEl) return;
-    // const modalWrapSpinEl = wrapperEl.querySelector('.ant-spin-nested-loading') as HTMLElement;
-
-    // if (!modalWrapSpinEl) return;
-
-    // if (!unref(formerHeightRef) && unref(fullScreenRef)) {
-    //   formerHeightRef.value = modalWrapSpinEl.offsetHeight;
-    // }
-
-    // if (unref(fullScreenRef)) {
-    //   modalWrapSpinEl.style.height = `${window.innerHeight - unref(context.extHeightRef)}px`;
-    // } else {
-    //   modalWrapSpinEl.style.height = `${unref(formerHeightRef)}px`;
-    // }
-  }
-  return { getWrapClassName, handleFullScreen, fullScreenRef };
-}
diff --git a/src/components/Modal/src/index.less b/src/components/Modal/src/index.less
deleted file mode 100644
index 58ee1e4..0000000
--- a/src/components/Modal/src/index.less
+++ /dev/null
@@ -1,136 +0,0 @@
-.fullscreen-modal {
-  overflow: hidden;
-
-  .ant-modal {
-    top: 0 !important;
-    right: 0 !important;
-    bottom: 0 !important;
-    left: 0 !important;
-    width: 100% !important;
-    height: 100% !important;
-    max-width: 100% !important;
-    max-height: 100% !important;
-
-    &-content {
-      height: 100%;
-    }
-
-    .ant-modal-header,
-    .@{namespace}-basic-title {
-      cursor: default !important;
-    }
-  }
-}
-
-.ant-modal {
-  width: 520px;
-  padding-bottom: 0;
-
-  .ant-modal-body > .scrollbar {
-    padding: 14px;
-  }
-
-  &-title {
-    font-size: 16px;
-    font-weight: bold;
-    line-height: 16px;
-
-    .base-title {
-      cursor: move !important;
-    }
-  }
-
-  .ant-modal-body {
-    padding: 0;
-
-    > .scrollbar > .scrollbar__bar.is-horizontal {
-      display: none;
-    }
-  }
-
-  &-large {
-    top: 60px;
-
-    &--mini {
-      top: 16px;
-    }
-  }
-
-  &-header {
-    padding: 16px;
-  }
-
-  &-content {
-    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
-  }
-
-  &-footer {
-    button + button {
-      margin-left: 10px;
-    }
-  }
-
-  &-close {
-    font-weight: normal;
-    outline: none;
-  }
-
-  &-close-x {
-    display: inline-block;
-    width: 96px;
-/*    width: auto;*/
-    height: 56px;
-    line-height: 56px;
-  }
-
-  &-confirm-body {
-    .ant-modal-confirm-content {
-      // color: #fff;
-
-      > * {
-        color: @text-color-help-dark;
-      }
-    }
-  }
-
-  &-confirm-confirm.error .ant-modal-confirm-body > .anticon {
-    color: @error-color;
-  }
-
-  &-confirm-btns {
-    .ant-btn:last-child {
-      margin-right: 0;
-    }
-  }
-
-  &-confirm-info {
-    .ant-modal-confirm-body > .anticon {
-      color: @warning-color;
-    }
-  }
-
-  &-confirm-confirm.success {
-    .ant-modal-confirm-body > .anticon {
-      color: @success-color;
-    }
-  }
-}
-
-.ant-modal-confirm .ant-modal-body {
-  padding: 24px !important;
-}
-@media screen and (max-height: 600px) {
-  .ant-modal {
-    top: 60px;
-  }
-}
-@media screen and (max-height: 540px) {
-  .ant-modal {
-    top: 30px;
-  }
-}
-@media screen and (max-height: 480px) {
-  .ant-modal {
-    top: 10px;
-  }
-}
diff --git a/src/components/Modal/src/props.ts b/src/components/Modal/src/props.ts
deleted file mode 100644
index cb8a3c3..0000000
--- a/src/components/Modal/src/props.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import type { PropType, CSSProperties } from 'vue';
-import type { ModalWrapperProps } from './typing';
-import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes';
-import { useI18n } from '/@/hooks/web/useI18n';
-
-const { t } = useI18n();
-
-export const modalProps = {
-  visible: { type: Boolean },
-  scrollTop: { type: Boolean, default: true },
-  height: { type: Number },
-  minHeight: { type: Number },
-  // open drag
-  draggable: { type: Boolean, default: true },
-  centered: { type: Boolean },
-  cancelText: { type: String, default: t('common.cancelText') },
-  okText: { type: String, default: t('common.okText') },
-
-  closeFunc: Function as PropType<() => Promise<boolean>>,
-};
-
-export const basicProps = Object.assign({}, modalProps, {
-  defaultFullscreen: { type: Boolean },
-  // Can it be full screen
-  canFullscreen: { type: Boolean, default: true },
-  // After enabling the wrapper, the bottom can be increased in height
-  wrapperFooterOffset: { type: Number, default: 0 },
-  // Warm reminder message
-  helpMessage: [String, Array] as PropType<string | string[]>,
-  // Whether to setting wrapper
-  useWrapper: { type: Boolean, default: true },
-  loading: { type: Boolean },
-  loadingTip: { type: String },
-  /**
-   * @description: Show close button
-   */
-  showCancelBtn: { type: Boolean, default: true },
-  /**
-   * @description: Show confirmation button
-   */
-  showOkBtn: { type: Boolean, default: true },
-
-  wrapperProps: Object as PropType<Partial<ModalWrapperProps>>,
-
-  afterClose: Function as PropType<() => Promise<VueNode>>,
-
-  bodyStyle: Object as PropType<CSSProperties>,
-
-  closable: { type: Boolean, default: true },
-
-  closeIcon: Object as PropType<VueNode>,
-
-  confirmLoading: { type: Boolean },
-
-  destroyOnClose: { type: Boolean },
-
-  footer: Object as PropType<VueNode>,
-
-  getContainer: Function as PropType<() => any>,
-
-  mask: { type: Boolean, default: true },
-
-  maskClosable: { type: Boolean, default: true },
-  keyboard: { type: Boolean, default: true },
-
-  maskStyle: Object as PropType<CSSProperties>,
-
-  okType: { type: String, default: 'primary' },
-
-  okButtonProps: Object as PropType<ButtonProps>,
-
-  cancelButtonProps: Object as PropType<ButtonProps>,
-
-  title: { type: String },
-
-  visible: { type: Boolean },
-
-  width: [String, Number] as PropType<string | number>,
-
-  wrapClassName: { type: String },
-
-  zIndex: { type: Number },
-
-  // 鏄惁寮�鍚瘎璁哄尯鍩�
-  enableComment: { type: Boolean, default: false },
-});
diff --git a/src/components/Modal/src/typing.ts b/src/components/Modal/src/typing.ts
deleted file mode 100644
index 7bd9497..0000000
--- a/src/components/Modal/src/typing.ts
+++ /dev/null
@@ -1,211 +0,0 @@
-import type { ButtonProps } from 'ant-design-vue/lib/button/buttonTypes';
-import type { CSSProperties, VNodeChild, ComputedRef } from 'vue';
-/**
- * @description: 寮圭獥瀵瑰鏆撮湶鐨勬柟娉�
- */
-export interface ModalMethods {
-  setModalProps: (props: Partial<ModalProps>) => void;
-  emitVisible?: (visible: boolean, uid: number) => void;
-  redoModalHeight?: () => void;
-}
-
-export type RegisterFn = (modalMethods: ModalMethods, uuid?: string) => void;
-
-export interface ReturnMethods extends ModalMethods {
-  openModal: <T = any>(props?: boolean, data?: T, openOnSet?: boolean) => void;
-  closeModal: () => void;
-  getVisible?: ComputedRef<boolean>;
-}
-
-export type UseModalReturnType = [RegisterFn, ReturnMethods];
-
-export interface ReturnInnerMethods extends ModalMethods {
-  closeModal: () => void;
-  changeLoading: (loading: boolean) => void;
-  changeOkLoading: (loading: boolean) => void;
-  getVisible?: ComputedRef<boolean>;
-  redoModalHeight: () => void;
-}
-
-export type UseModalInnerReturnType = [RegisterFn, ReturnInnerMethods];
-
-export interface ModalProps {
-  minHeight?: number;
-  height?: number;
-  // 鍚敤wrapper鍚� 搴曢儴鍙互閫傚綋澧炲姞楂樺害
-  wrapperFooterOffset?: number;
-  draggable?: boolean;
-  scrollTop?: boolean;
-
-  // 鏄惁鍙互杩涜鍏ㄥ睆
-  canFullscreen?: boolean;
-  defaultFullscreen?: boolean;
-  visible?: boolean;
-  // 娓╅Θ鎻愰啋淇℃伅
-  helpMessage: string | string[];
-
-  // 鏄惁浣跨敤modalWrapper
-  useWrapper: boolean;
-
-  loading: boolean;
-  loadingTip?: string;
-
-  wrapperProps: Omit<ModalWrapperProps, 'loading'>;
-
-  showOkBtn: boolean;
-  showCancelBtn: boolean;
-  closeFunc: () => Promise<any>;
-
-  /**
-   * Specify a function that will be called when modal is closed completely.
-   * @type Function
-   */
-  afterClose?: () => any;
-
-  /**
-   * Body style for modal body element. Such as height, padding etc.
-   * @default {}
-   * @type object
-   */
-  bodyStyle?: CSSProperties;
-
-  /**
-   * Text of the Cancel button
-   * @default 'cancel'
-   * @type string
-   */
-  cancelText?: string;
-
-  /**
-   * Centered Modal
-   * @default false
-   * @type boolean
-   */
-  centered?: boolean;
-
-  /**
-   * Whether a close (x) button is visible on top right of the modal dialog or not
-   * @default true
-   * @type boolean
-   */
-  closable?: boolean;
-  /**
-   * Whether a close (x) button is visible on top right of the modal dialog or not
-   */
-  closeIcon?: VNodeChild | JSX.Element;
-
-  /**
-   * Whether to apply loading visual effect for OK button or not
-   * @default false
-   * @type boolean
-   */
-  confirmLoading?: boolean;
-
-  /**
-   * Whether to unmount child components on onClose
-   * @default false
-   * @type boolean
-   */
-  destroyOnClose?: boolean;
-
-  /**
-   * Footer content, set as :footer="null" when you don't need default buttons
-   * @default OK and Cancel buttons
-   * @type any (string | slot)
-   */
-  footer?: VNodeChild | JSX.Element;
-
-  /**
-   * Return the mount node for Modal
-   * @default () => document.body
-   * @type Function
-   */
-  getContainer?: (instance: any) => HTMLElement;
-
-  /**
-   * Whether show mask or not.
-   * @default true
-   * @type boolean
-   */
-  mask?: boolean;
-
-  /**
-   * Whether to close the modal dialog when the mask (area outside the modal) is clicked
-   * @default true
-   * @type boolean
-   */
-  maskClosable?: boolean;
-
-  /**
-   * Style for modal's mask element.
-   * @default {}
-   * @type object
-   */
-  maskStyle?: CSSProperties;
-
-  /**
-   * Text of the OK button
-   * @default 'OK'
-   * @type string
-   */
-  okText?: string;
-
-  /**
-   * Button type of the OK button
-   * @default 'primary'
-   * @type string
-   */
-  okType?: 'primary' | 'danger' | 'dashed' | 'ghost' | 'default';
-
-  /**
-   * The ok button props, follow jsx rules
-   * @type object
-   */
-  okButtonProps?: ButtonProps;
-
-  /**
-   * The cancel button props, follow jsx rules
-   * @type object
-   */
-  cancelButtonProps?: ButtonProps;
-
-  /**
-   * The modal dialog's title
-   * @type any (string | slot)
-   */
-  title?: VNodeChild | JSX.Element;
-
-  /**
-   * Width of the modal dialog
-   * @default 520
-   * @type string | number
-   */
-  width?: string | number;
-
-  /**
-   * The class name of the container of the modal dialog
-   * @type string
-   */
-  wrapClassName?: string;
-
-  /**
-   * The z-index of the Modal
-   * @default 1000
-   * @type number
-   */
-  zIndex?: number;
-
-  enableComment?: boolean;
-}
-
-export interface ModalWrapperProps {
-  footerOffset?: number;
-  loading: boolean;
-  modalHeaderHeight: number;
-  modalFooterHeight: number;
-  minHeight: number;
-  height: number;
-  visible: boolean;
-  fullScreen: boolean;
-  useWrapper: boolean;
-}
diff --git a/src/components/Page/index.ts b/src/components/Page/index.ts
deleted file mode 100644
index a04d23b..0000000
--- a/src/components/Page/index.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { withInstall } from '/@/utils'
-
-import pageFooter from './src/PageFooter.vue'
-import pageWrapper from './src/PageWrapper.vue'
-
-export const PageFooter = withInstall(pageFooter)
-export const PageWrapper = withInstall(pageWrapper)
-
-export const PageWrapperFixedHeightKey = 'PageWrapperFixedHeight'
diff --git a/src/components/Page/src/PageFooter.vue b/src/components/Page/src/PageFooter.vue
deleted file mode 100644
index 5440d2a..0000000
--- a/src/components/Page/src/PageFooter.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-<template>
-  <div :class="prefixCls" :style="{ width: getCalcContentWidth }">
-    <div :class="`${prefixCls}__left`">
-      <slot name="left"></slot>
-    </div>
-    <slot></slot>
-    <div :class="`${prefixCls}__right`">
-      <slot name="right"></slot>
-    </div>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  export default defineComponent({
-    name: 'PageFooter',
-    inheritAttrs: false,
-    setup() {
-      const { prefixCls } = useDesign('page-footer');
-      const { getCalcContentWidth } = useMenuSetting();
-      return { prefixCls, getCalcContentWidth };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-page-footer';
-
-  .@{prefix-cls} {
-    position: fixed;
-    right: 0;
-    bottom: 0;
-    z-index: @page-footer-z-index;
-    display: flex;
-    width: 100%;
-    align-items: center;
-    padding: 0 24px;
-    line-height: 44px;
-    background-color: @component-background;
-    border-top: 1px solid @border-color-base;
-    box-shadow: 0 -6px 16px -8px rgba(0, 0, 0, 0.08), 0 -9px 28px 0 rgba(0, 0, 0, 0.05), 0 -12px 48px 16px rgba(0, 0, 0, 0.03);
-    transition: width 0.2s;
-
-    &__left {
-      flex: 1 1;
-    }
-  }
-</style>
diff --git a/src/components/Page/src/PageWrapper.vue b/src/components/Page/src/PageWrapper.vue
deleted file mode 100644
index dc9f043..0000000
--- a/src/components/Page/src/PageWrapper.vue
+++ /dev/null
@@ -1,186 +0,0 @@
-<template>
-  <div :class="getClass" ref="wrapperRef">
-    <PageHeader
-      :ghost="ghost"
-      :title="title"
-      v-bind="omit($attrs, 'class')"
-      ref="headerRef"
-      v-if="content || $slots.headerContent || title || getHeaderSlots.length"
-    >
-      <template #default>
-        <template v-if="content">
-          {{ content }}
-        </template>
-        <slot name="headerContent" v-else></slot>
-      </template>
-      <template #[item]="data" v-for="item in getHeaderSlots">
-        <slot :name="item" v-bind="data || {}"></slot>
-      </template>
-    </PageHeader>
-
-    <div class="overflow-hidden" :class="getContentClass" :style="getContentStyle" ref="contentRef">
-      <slot></slot>
-    </div>
-
-    <PageFooter v-if="getShowFooter" ref="footerRef">
-      <template #left>
-        <slot name="leftFooter"></slot>
-      </template>
-      <template #right>
-        <slot name="rightFooter"></slot>
-      </template>
-    </PageFooter>
-  </div>
-</template>
-<script lang="ts">
-  import { CSSProperties, PropType, provide } from 'vue';
-
-  import { defineComponent, computed, watch, ref, unref } from 'vue';
-  import PageFooter from './PageFooter.vue';
-
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { propTypes } from '/@/utils/propTypes';
-  import { omit } from 'lodash-es';
-  import { PageHeader } from 'ant-design-vue';
-  import { useContentHeight } from '/@/hooks/web/useContentHeight';
-  import { PageWrapperFixedHeightKey } from '..';
-
-  export default defineComponent({
-    name: 'PageWrapper',
-    components: { PageFooter, PageHeader },
-    inheritAttrs: false,
-    props: {
-      title: propTypes.string,
-      dense: propTypes.bool,
-      ghost: propTypes.bool,
-      content: propTypes.string,
-      contentStyle: {
-        type: Object as PropType<CSSProperties>,
-      },
-      contentBackground: propTypes.bool,
-      contentFullHeight: propTypes.bool,
-      contentClass: propTypes.string,
-      fixedHeight: propTypes.bool,
-      upwardSpace: propTypes.oneOfType([propTypes.number, propTypes.string]).def(0),
-    },
-    setup(props, { slots, attrs }) {
-      const wrapperRef = ref(null);
-      const headerRef = ref(null);
-      const contentRef = ref(null);
-      const footerRef = ref(null);
-      const { prefixCls } = useDesign('page-wrapper');
-
-      provide(
-        PageWrapperFixedHeightKey,
-        computed(() => props.fixedHeight)
-      );
-
-      const getIsContentFullHeight = computed(() => {
-        return props.contentFullHeight;
-      });
-
-      const getUpwardSpace = computed(() => props.upwardSpace);
-      const { redoHeight, setCompensation, contentHeight } = useContentHeight(
-        getIsContentFullHeight,
-        wrapperRef,
-        [headerRef, footerRef],
-        [contentRef],
-        getUpwardSpace
-      );
-      setCompensation({ useLayoutFooter: true, elements: [footerRef] });
-
-      const getClass = computed(() => {
-        return [
-          prefixCls,
-          {
-            [`${prefixCls}--dense`]: props.dense,
-          },
-          attrs.class ?? {},
-        ];
-      });
-
-      const getShowFooter = computed(() => slots?.leftFooter || slots?.rightFooter);
-
-      const getHeaderSlots = computed(() => {
-        return Object.keys(omit(slots, 'default', 'leftFooter', 'rightFooter', 'headerContent'));
-      });
-
-      const getContentStyle = computed((): CSSProperties => {
-        const { contentFullHeight, contentStyle, fixedHeight } = props;
-        if (!contentFullHeight) {
-          return { ...contentStyle };
-        }
-
-        const height = `${unref(contentHeight)}px`;
-        return {
-          ...contentStyle,
-          minHeight: height,
-          ...(fixedHeight ? { height } : {}),
-        };
-      });
-
-      const getContentClass = computed(() => {
-        const { contentBackground, contentClass } = props;
-        return [
-          `${prefixCls}-content`,
-          contentClass,
-          {
-            [`${prefixCls}-content-bg`]: contentBackground,
-          },
-        ];
-      });
-
-      watch(
-        () => [getShowFooter.value],
-        () => {
-          redoHeight();
-        },
-        {
-          flush: 'post',
-          immediate: true,
-        }
-      );
-
-      return {
-        getContentStyle,
-        wrapperRef,
-        headerRef,
-        contentRef,
-        footerRef,
-        getClass,
-        getHeaderSlots,
-        prefixCls,
-        getShowFooter,
-        omit,
-        getContentClass,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-page-wrapper';
-
-  .@{prefix-cls} {
-    position: relative;
-
-    .@{prefix-cls}-content {
-      margin: 16px;
-    }
-
-    .ant-page-header {
-      &:empty {
-        padding: 0;
-      }
-    }
-
-    &-content-bg {
-      background-color: @component-background;
-    }
-
-    &--dense {
-      .@{prefix-cls}-content {
-        margin: 0;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Preview/index.ts b/src/components/Preview/index.ts
deleted file mode 100644
index c0b4685..0000000
--- a/src/components/Preview/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { default as ImagePreview } from './src/Preview.vue';
-export { createImgPreview } from './src/functional';
diff --git a/src/components/Preview/src/Functional.vue b/src/components/Preview/src/Functional.vue
deleted file mode 100644
index 7de37ec..0000000
--- a/src/components/Preview/src/Functional.vue
+++ /dev/null
@@ -1,528 +0,0 @@
-<script lang="tsx">
-  import { defineComponent, ref, unref, computed, reactive, watchEffect } from 'vue';
-  import { CloseOutlined, LeftOutlined, RightOutlined } from '@ant-design/icons-vue';
-  import resumeSvg from '/@/assets/svg/preview/resume.svg';
-  import rotateSvg from '/@/assets/svg/preview/p-rotate.svg';
-  import scaleSvg from '/@/assets/svg/preview/scale.svg';
-  import unScaleSvg from '/@/assets/svg/preview/unscale.svg';
-  import unRotateSvg from '/@/assets/svg/preview/unrotate.svg';
-
-  enum StatueEnum {
-    LOADING,
-    DONE,
-    FAIL,
-  }
-  interface ImgState {
-    currentUrl: string;
-    imgScale: number;
-    imgRotate: number;
-    imgTop: number;
-    imgLeft: number;
-    currentIndex: number;
-    status: StatueEnum;
-    moveX: number;
-    moveY: number;
-    show: boolean;
-  }
-  const props = {
-    show: {
-      type: Boolean as PropType<boolean>,
-      default: false,
-    },
-    imageList: {
-      type: [Array] as PropType<string[]>,
-      default: null,
-    },
-    index: {
-      type: Number as PropType<number>,
-      default: 0,
-    },
-    scaleStep: {
-      type: Number as PropType<number>,
-    },
-    defaultWidth: {
-      type: Number as PropType<number>,
-    },
-    maskClosable: {
-      type: Boolean as PropType<boolean>,
-    },
-    rememberState: {
-      type: Boolean as PropType<boolean>,
-    },
-  };
-
-  const prefixCls = 'img-preview';
-  export default defineComponent({
-    name: 'ImagePreview',
-    props,
-    emits: ['img-load', 'img-error'],
-    setup(props, { expose, emit }) {
-      interface stateInfo {
-        scale: number;
-        rotate: number;
-        top: number;
-        left: number;
-      }
-      const stateMap = new Map<string, stateInfo>();
-      const imgState = reactive<ImgState>({
-        currentUrl: '',
-        imgScale: 1,
-        imgRotate: 0,
-        imgTop: 0,
-        imgLeft: 0,
-        status: StatueEnum.LOADING,
-        currentIndex: 0,
-        moveX: 0,
-        moveY: 0,
-        show: props.show,
-      });
-
-      const wrapElRef = ref<HTMLDivElement | null>(null);
-      const imgElRef = ref<HTMLImageElement | null>(null);
-
-      // 鍒濆鍖�
-      function init() {
-        initMouseWheel();
-        const { index, imageList } = props;
-
-        if (!imageList || !imageList.length) {
-          throw new Error('imageList is undefined');
-        }
-        imgState.currentIndex = index;
-        handleIChangeImage(imageList[index]);
-      }
-
-      // 閲嶇疆
-      function initState() {
-        imgState.imgScale = 1;
-        imgState.imgRotate = 0;
-        imgState.imgTop = 0;
-        imgState.imgLeft = 0;
-      }
-
-      // 鍒濆鍖栭紶鏍囨粴杞簨浠�
-      function initMouseWheel() {
-        const wrapEl = unref(wrapElRef);
-        if (!wrapEl) {
-          return;
-        }
-        (wrapEl as any).onmousewheel = scrollFunc;
-        // 鐏嫄娴忚鍣ㄦ病鏈塷nmousewheel浜嬩欢锛岀敤DOMMouseScroll浠f浛
-        document.body.addEventListener('DOMMouseScroll', scrollFunc);
-        // 绂佹鐏嫄娴忚鍣ㄤ笅鎷栨嫿鍥剧墖鐨勯粯璁や簨浠�
-        document.ondragstart = function () {
-          return false;
-        };
-      }
-
-      const getScaleStep = computed(() => {
-        const scaleStep = props?.scaleStep ?? 0;
-        if (scaleStep ?? (0 > 0 && scaleStep < 100)) {
-          return scaleStep / 100;
-        } else {
-          return imgState.imgScale / 10;
-        }
-      });
-
-      // 鐩戝惉榧犳爣婊氳疆
-      function scrollFunc(e: any) {
-        e = e || window.event;
-        e.delta = e.wheelDelta || -e.detail;
-
-        e.preventDefault();
-        if (e.delta > 0) {
-          // 婊戣疆鍚戜笂婊氬姩
-          scaleFunc(getScaleStep.value);
-        }
-        if (e.delta < 0) {
-          // 婊戣疆鍚戜笅婊氬姩
-          scaleFunc(-getScaleStep.value);
-        }
-      }
-      // 缂╂斁鍑芥暟
-      function scaleFunc(num: number) {
-        if (imgState.imgScale <= 0.2 && num < 0) return;
-        imgState.imgScale += num;
-      }
-
-      // 鏃嬭浆鍥剧墖
-      function rotateFunc(deg: number) {
-        imgState.imgRotate += deg;
-      }
-
-      // 榧犳爣浜嬩欢
-      function handleMouseUp() {
-        const imgEl = unref(imgElRef);
-        if (!imgEl) return;
-        imgEl.onmousemove = null;
-      }
-
-      // 鏇存崲鍥剧墖
-      function handleIChangeImage(url: string) {
-        imgState.status = StatueEnum.LOADING;
-        const img = new Image();
-        img.src = url;
-        img.onload = (e: Event) => {
-          if (imgState.currentUrl !== url) {
-            const ele: any[] = e.composedPath();
-            if (props.rememberState) {
-              // 淇濆瓨褰撳墠鍥剧墖鐨勭缉鏀句俊鎭�
-              stateMap.set(imgState.currentUrl, {
-                scale: imgState.imgScale,
-                top: imgState.imgTop,
-                left: imgState.imgLeft,
-                rotate: imgState.imgRotate,
-              });
-              // 濡傛灉涔嬪墠宸插瓨鍌ㄧ缉鏀句俊鎭紝灏卞簲鐢�
-              const stateInfo = stateMap.get(url);
-              if (stateInfo) {
-                imgState.imgScale = stateInfo.scale;
-                imgState.imgTop = stateInfo.top;
-                imgState.imgRotate = stateInfo.rotate;
-                imgState.imgLeft = stateInfo.left;
-              } else {
-                initState();
-                if (props.defaultWidth) {
-                  imgState.imgScale = props.defaultWidth / ele[0].naturalWidth;
-                }
-              }
-            } else {
-              if (props.defaultWidth) {
-                imgState.imgScale = props.defaultWidth / ele[0].naturalWidth;
-              }
-            }
-
-            ele &&
-              emit('img-load', {
-                index: imgState.currentIndex,
-                dom: ele[0] as HTMLImageElement,
-                url,
-              });
-          }
-          imgState.currentUrl = url;
-          imgState.status = StatueEnum.DONE;
-        };
-        img.onerror = (e: Event) => {
-          const ele: EventTarget[] = e.composedPath();
-          ele &&
-            emit('img-error', {
-              index: imgState.currentIndex,
-              dom: ele[0] as HTMLImageElement,
-              url,
-            });
-          imgState.status = StatueEnum.FAIL;
-        };
-      }
-
-      // 鍏抽棴
-      function handleClose(e: MouseEvent) {
-        e && e.stopPropagation();
-        close();
-      }
-
-      function close() {
-        imgState.show = false;
-        // 绉婚櫎鐏嫄娴忚鍣ㄤ笅鐨勯紶鏍囨粴鍔ㄤ簨浠�
-        document.body.removeEventListener('DOMMouseScroll', scrollFunc);
-        // 鎭㈠鐏嫄鍙奡afari娴忚鍣ㄤ笅鐨勫浘鐗囨嫋鎷�
-        document.ondragstart = null;
-      }
-
-      // 鍥剧墖澶嶅師
-      function resume() {
-        initState();
-      }
-
-      expose({
-        resume,
-        close,
-        prev: handleChange.bind(null, 'left'),
-        next: handleChange.bind(null, 'right'),
-        setScale: (scale: number) => {
-          if (scale > 0 && scale <= 10) imgState.imgScale = scale;
-        },
-        setRotate: (rotate: number) => {
-          imgState.imgRotate = rotate;
-        },
-      });
-
-      // 涓婁竴椤典笅涓�椤�
-      function handleChange(direction: 'left' | 'right') {
-        const { currentIndex } = imgState;
-        const { imageList } = props;
-        if (direction === 'left') {
-          imgState.currentIndex--;
-          if (currentIndex <= 0) {
-            imgState.currentIndex = imageList.length - 1;
-          }
-        }
-        if (direction === 'right') {
-          imgState.currentIndex++;
-          if (currentIndex >= imageList.length - 1) {
-            imgState.currentIndex = 0;
-          }
-        }
-        handleIChangeImage(imageList[imgState.currentIndex]);
-      }
-
-      function handleAddMoveListener(e: MouseEvent) {
-        e = e || window.event;
-        imgState.moveX = e.clientX;
-        imgState.moveY = e.clientY;
-        const imgEl = unref(imgElRef);
-        if (imgEl) {
-          imgEl.onmousemove = moveFunc;
-        }
-      }
-
-      function moveFunc(e: MouseEvent) {
-        e = e || window.event;
-        e.preventDefault();
-        const movementX = e.clientX - imgState.moveX;
-        const movementY = e.clientY - imgState.moveY;
-        imgState.imgLeft += movementX;
-        imgState.imgTop += movementY;
-        imgState.moveX = e.clientX;
-        imgState.moveY = e.clientY;
-      }
-
-      // 鑾峰彇鍥剧墖鏍峰紡
-      const getImageStyle = computed(() => {
-        const { imgScale, imgRotate, imgTop, imgLeft } = imgState;
-        return {
-          transform: `scale(${imgScale}) rotate(${imgRotate}deg)`,
-          marginTop: `${imgTop}px`,
-          marginLeft: `${imgLeft}px`,
-          maxWidth: props.defaultWidth ? 'unset' : '100%',
-        };
-      });
-
-      const getIsMultipleImage = computed(() => {
-        const { imageList } = props;
-        return imageList.length > 1;
-      });
-
-      watchEffect(() => {
-        if (props.show) {
-          init();
-        }
-        if (props.imageList) {
-          initState();
-        }
-      });
-
-      const handleMaskClick = (e: MouseEvent) => {
-        if (props.maskClosable && e.target && (e.target as HTMLDivElement).classList.contains(`${prefixCls}-content`)) {
-          handleClose(e);
-        }
-      };
-
-      const renderClose = () => {
-        return (
-          <div class={`${prefixCls}__close`} onClick={handleClose}>
-            <CloseOutlined class={`${prefixCls}__close-icon`} />
-          </div>
-        );
-      };
-
-      const renderIndex = () => {
-        if (!unref(getIsMultipleImage)) {
-          return null;
-        }
-        const { currentIndex } = imgState;
-        const { imageList } = props;
-        return (
-          <div class={`${prefixCls}__index`}>
-            {currentIndex + 1} / {imageList.length}
-          </div>
-        );
-      };
-
-      const renderController = () => {
-        return (
-          <div class={`${prefixCls}__controller`}>
-            <div class={`${prefixCls}__controller-item`} onClick={() => scaleFunc(-getScaleStep.value)}>
-              <img src={unScaleSvg} />
-            </div>
-            <div class={`${prefixCls}__controller-item`} onClick={() => scaleFunc(getScaleStep.value)}>
-              <img src={scaleSvg} />
-            </div>
-            <div class={`${prefixCls}__controller-item`} onClick={resume}>
-              <img src={resumeSvg} />
-            </div>
-            <div class={`${prefixCls}__controller-item`} onClick={() => rotateFunc(-90)}>
-              <img src={unRotateSvg} />
-            </div>
-            <div class={`${prefixCls}__controller-item`} onClick={() => rotateFunc(90)}>
-              <img src={rotateSvg} />
-            </div>
-          </div>
-        );
-      };
-
-      const renderArrow = (direction: 'left' | 'right') => {
-        if (!unref(getIsMultipleImage)) {
-          return null;
-        }
-        return (
-          <div class={[`${prefixCls}__arrow`, direction]} onClick={() => handleChange(direction)}>
-            {direction === 'left' ? <LeftOutlined /> : <RightOutlined />}
-          </div>
-        );
-      };
-
-      return () => {
-        return (
-          imgState.show && (
-            <div class={prefixCls} ref={wrapElRef} onMouseup={handleMouseUp} onClick={handleMaskClick}>
-              <div class={`${prefixCls}-content`}>
-                {/*<Spin*/}
-                {/*  indicator={<LoadingOutlined style="font-size: 24px" spin />}*/}
-                {/*  spinning={true}*/}
-                {/*  class={[*/}
-                {/*    `${prefixCls}-image`,*/}
-                {/*    {*/}
-                {/*      hidden: imgState.status !== StatueEnum.LOADING,*/}
-                {/*    },*/}
-                {/*  ]}*/}
-                {/*/>*/}
-                <img
-                  style={unref(getImageStyle)}
-                  class={[`${prefixCls}-image`, imgState.status === StatueEnum.DONE ? '' : 'hidden']}
-                  ref={imgElRef}
-                  src={imgState.currentUrl}
-                  onMousedown={handleAddMoveListener}
-                />
-                {renderClose()}
-                {renderIndex()}
-                {renderController()}
-                {renderArrow('left')}
-                {renderArrow('right')}
-              </div>
-            </div>
-          )
-        );
-      };
-    },
-  });
-</script>
-<style lang="less">
-  .img-preview {
-    position: fixed;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    left: 0;
-    z-index: @preview-comp-z-index;
-    background: rgba(0, 0, 0, 0.5);
-    user-select: none;
-
-    &-content {
-      display: flex;
-      width: 100%;
-      height: 100%;
-      color: @white;
-      justify-content: center;
-      align-items: center;
-    }
-
-    &-image {
-      cursor: pointer;
-      transition: transform 0.3s;
-    }
-
-    &__close {
-      position: absolute;
-      top: -40px;
-      right: -40px;
-      width: 80px;
-      height: 80px;
-      overflow: hidden;
-      color: @white;
-      cursor: pointer;
-      background-color: rgba(0, 0, 0, 0.5);
-      border-radius: 50%;
-      transition: all 0.2s;
-
-      &-icon {
-        position: absolute;
-        top: 46px;
-        left: 16px;
-        font-size: 16px;
-      }
-
-      &:hover {
-        background-color: rgba(0, 0, 0, 0.8);
-      }
-    }
-
-    &__index {
-      position: absolute;
-      bottom: 5%;
-      left: 50%;
-      padding: 0 22px;
-      font-size: 16px;
-      background: rgba(109, 109, 109, 0.6);
-      border-radius: 15px;
-      transform: translateX(-50%);
-    }
-
-    &__controller {
-      position: absolute;
-      bottom: 10%;
-      left: 50%;
-      display: flex;
-      width: 260px;
-      height: 44px;
-      padding: 0 22px;
-      margin-left: -139px;
-      background: rgba(109, 109, 109, 0.6);
-      border-radius: 22px;
-      justify-content: center;
-
-      &-item {
-        display: flex;
-        height: 100%;
-        padding: 0 9px;
-        font-size: 24px;
-        cursor: pointer;
-        transition: all 0.2s;
-
-        &:hover {
-          transform: scale(1.2);
-        }
-
-        img {
-          width: 1em;
-        }
-      }
-    }
-
-    &__arrow {
-      position: absolute;
-      top: 50%;
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      width: 50px;
-      height: 50px;
-      font-size: 28px;
-      cursor: pointer;
-      background-color: rgba(0, 0, 0, 0.5);
-      border-radius: 50%;
-      transition: all 0.2s;
-
-      &:hover {
-        background-color: rgba(0, 0, 0, 0.8);
-      }
-
-      &.left {
-        left: 50px;
-      }
-
-      &.right {
-        right: 50px;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Preview/src/Preview.vue b/src/components/Preview/src/Preview.vue
deleted file mode 100644
index 3bb0b14..0000000
--- a/src/components/Preview/src/Preview.vue
+++ /dev/null
@@ -1,94 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <PreviewGroup>
-      <slot v-if="!imageList || $slots.default"></slot>
-      <template v-else>
-        <template v-for="item in getImageList" :key="item.src">
-          <Image v-bind="item">
-            <template #placeholder v-if="item.placeholder">
-              <Image v-bind="item" :src="item.placeholder" :preview="false" />
-            </template>
-          </Image>
-        </template>
-      </template>
-    </PreviewGroup>
-  </div>
-</template>
-<script lang="ts">
-  import type { PropType } from 'vue';
-  import { defineComponent, computed } from 'vue';
-
-  import { Image } from 'ant-design-vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { propTypes } from '/@/utils/propTypes';
-  import { isString } from '/@/utils/is';
-
-  interface ImageProps {
-    alt?: string;
-    fallback?: string;
-    src: string;
-    width: string | number;
-    height?: string | number;
-    placeholder?: string | boolean;
-    preview?:
-      | boolean
-      | {
-          visible?: boolean;
-          onVisibleChange?: (visible: boolean, prevVisible: boolean) => void;
-          getContainer: string | HTMLElement | (() => HTMLElement);
-        };
-  }
-
-  type ImageItem = string | ImageProps;
-
-  export default defineComponent({
-    name: 'ImagePreview',
-    components: {
-      Image,
-      PreviewGroup: Image.PreviewGroup,
-    },
-    props: {
-      functional: propTypes.bool,
-      imageList: {
-        type: Array as PropType<ImageItem[]>,
-      },
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('image-preview');
-
-      const getImageList = computed((): any[] => {
-        const { imageList } = props;
-        if (!imageList) {
-          return [];
-        }
-        return imageList.map((item) => {
-          if (isString(item)) {
-            return {
-              src: item,
-              placeholder: false,
-            };
-          }
-          return item;
-        });
-      });
-
-      return {
-        prefixCls,
-        getImageList,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-image-preview';
-
-  .@{prefix-cls} {
-    .ant-image {
-      margin-right: 10px;
-    }
-
-    .ant-image-preview-operations {
-      background-color: rgba(0, 0, 0, 0.4);
-    }
-  }
-</style>
diff --git a/src/components/Preview/src/functional.ts b/src/components/Preview/src/functional.ts
deleted file mode 100644
index e4b27d6..0000000
--- a/src/components/Preview/src/functional.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import type { Options, Props } from './typing';
-import ImgPreview from './Functional.vue';
-import { isClient } from '/@/utils/is';
-import { createVNode, render } from 'vue';
-
-let instance: ReturnType<typeof createVNode> | null = null;
-
-export function createImgPreview(options: Options) {
-  if (!isClient) return;
-  const propsData: Partial<Props> = {};
-  const container = document.createElement('div');
-  Object.assign(propsData, { show: true, index: 0, scaleStep: 100 }, options);
-
-  instance = createVNode(ImgPreview, propsData);
-  render(instance, container);
-  document.body.appendChild(container);
-  return instance.component?.exposed;
-}
diff --git a/src/components/Preview/src/typing.ts b/src/components/Preview/src/typing.ts
deleted file mode 100644
index bbb8a83..0000000
--- a/src/components/Preview/src/typing.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-export interface Options {
-  show?: boolean;
-  imageList: string[];
-  index?: number;
-  scaleStep?: number;
-  defaultWidth?: number;
-  maskClosable?: boolean;
-  rememberState?: boolean;
-  onImgLoad?: ({ index: number, url: string, dom: HTMLImageElement }) => void;
-  onImgError?: ({ index: number, url: string, dom: HTMLImageElement }) => void;
-}
-
-export interface Props {
-  show: boolean;
-  instance: Props;
-  imageList: string[];
-  index: number;
-  scaleStep: number;
-  defaultWidth: number;
-  maskClosable: boolean;
-  rememberState: boolean;
-}
-
-export interface PreviewActions {
-  resume: () => void;
-  close: () => void;
-  prev: () => void;
-  next: () => void;
-  setScale: (scale: number) => void;
-  setRotate: (rotate: number) => void;
-}
-
-export interface ImageProps {
-  alt?: string;
-  fallback?: string;
-  src: string;
-  width: string | number;
-  height?: string | number;
-  placeholder?: string | boolean;
-  preview?:
-    | boolean
-    | {
-        visible?: boolean;
-        onVisibleChange?: (visible: boolean, prevVisible: boolean) => void;
-        getContainer: string | HTMLElement | (() => HTMLElement);
-      };
-}
-
-export type ImageItem = string | ImageProps;
diff --git a/src/components/Qrcode/index.ts b/src/components/Qrcode/index.ts
deleted file mode 100644
index 16a2f40..0000000
--- a/src/components/Qrcode/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { withInstall } from '/@/utils';
-import qrCode from './src/Qrcode.vue';
-
-export const QrCode = withInstall(qrCode);
-export * from './src/typing';
diff --git a/src/components/Qrcode/src/Qrcode.vue b/src/components/Qrcode/src/Qrcode.vue
deleted file mode 100644
index a8df59f..0000000
--- a/src/components/Qrcode/src/Qrcode.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-<template>
-  <div>
-    <component :is="tag" ref="wrapRef" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, watch, PropType, ref, unref, onMounted } from 'vue';
-  import { toCanvas, QRCodeRenderersOptions, LogoType } from './qrcodePlus';
-  import { toDataURL } from 'qrcode';
-  import { downloadByUrl } from '/@/utils/file/download';
-  import { QrcodeDoneEventParams } from './typing';
-
-  export default defineComponent({
-    name: 'QrCode',
-    props: {
-      value: {
-        type: [String, Array] as PropType<string | any[]>,
-        default: null,
-      },
-      // 鍙傛暟
-      options: {
-        type: Object as PropType<QRCodeRenderersOptions>,
-        default: null,
-      },
-      // 瀹藉害
-      width: {
-        type: Number as PropType<number>,
-        default: 200,
-      },
-      // 涓棿logo鍥炬爣
-      logo: {
-        type: [String, Object] as PropType<Partial<LogoType> | string>,
-        default: '',
-      },
-      // img 涓嶆敮鎸佸唴宓宭ogo
-      tag: {
-        type: String as PropType<'canvas' | 'img'>,
-        default: 'canvas',
-        validator: (v: string) => ['canvas', 'img'].includes(v),
-      },
-    },
-    emits: { done: (data: QrcodeDoneEventParams) => !!data, error: (error: any) => !!error },
-    setup(props, { emit }) {
-      const wrapRef = ref<HTMLCanvasElement | HTMLImageElement | null>(null);
-      async function createQrcode() {
-        try {
-          const { tag, value, options = {}, width, logo } = props;
-          const renderValue = String(value);
-          const wrapEl = unref(wrapRef);
-
-          if (!wrapEl) return;
-
-          if (tag === 'canvas') {
-            const url: string = await toCanvas({
-              canvas: wrapEl,
-              width,
-              logo: logo as any,
-              content: renderValue,
-              options: options || {},
-            });
-            emit('done', { url, ctx: (wrapEl as HTMLCanvasElement).getContext('2d') });
-            return;
-          }
-
-          if (tag === 'img') {
-            const url = await toDataURL(renderValue, {
-              errorCorrectionLevel: 'H',
-              width,
-              ...options,
-            });
-            (unref(wrapRef) as HTMLImageElement).src = url;
-            emit('done', { url });
-          }
-        } catch (error) {
-          emit('error', error);
-        }
-      }
-      /**
-       * file download
-       */
-      function download(fileName?: string) {
-        let url = '';
-        const wrapEl = unref(wrapRef);
-        if (wrapEl instanceof HTMLCanvasElement) {
-          url = wrapEl.toDataURL();
-        } else if (wrapEl instanceof HTMLImageElement) {
-          url = wrapEl.src;
-        }
-        if (!url) return;
-        downloadByUrl({
-          url,
-          fileName,
-        });
-      }
-
-      onMounted(createQrcode);
-
-      // 鐩戝惉鍙傛暟鍙樺寲閲嶆柊鐢熸垚浜岀淮鐮�
-      watch(
-        props,
-        () => {
-          createQrcode();
-        },
-        {
-          deep: true,
-        }
-      );
-
-      return { wrapRef, download };
-    },
-  });
-</script>
diff --git a/src/components/Qrcode/src/drawCanvas.ts b/src/components/Qrcode/src/drawCanvas.ts
deleted file mode 100644
index 82aee5f..0000000
--- a/src/components/Qrcode/src/drawCanvas.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { toCanvas } from 'qrcode';
-import type { QRCodeRenderersOptions } from 'qrcode';
-import { RenderQrCodeParams, ContentType } from './typing';
-import { cloneDeep } from 'lodash-es';
-
-export const renderQrCode = ({ canvas, content, width = 0, options: params = {} }: RenderQrCodeParams) => {
-  const options = cloneDeep(params);
-  // 瀹归敊鐜囷紝榛樿瀵瑰唴瀹瑰皯鐨勪簩缁寸爜閲囩敤楂樺閿欑巼锛屽唴瀹瑰鐨勪簩缁寸爜閲囩敤浣庡閿欑巼
-  options.errorCorrectionLevel = options.errorCorrectionLevel || getErrorCorrectionLevel(content);
-
-  return getOriginWidth(content, options).then((_width: number) => {
-    options.scale = width === 0 ? undefined : (width / _width) * 4;
-    return toCanvas(canvas, content, options);
-  });
-};
-
-// 寰楀埌鍘烸rCode鐨勫ぇ灏忥紝浠ヤ究缂╂斁寰楀埌姝g‘鐨凲rCode澶у皬
-function getOriginWidth(content: ContentType, options: QRCodeRenderersOptions) {
-  const _canvas = document.createElement('canvas');
-  return toCanvas(_canvas, content, options).then(() => _canvas.width);
-}
-
-// 瀵逛簬鍐呭灏戠殑QrCode锛屽澶у閿欑巼
-function getErrorCorrectionLevel(content: ContentType) {
-  if (content.length > 36) {
-    return 'M';
-  } else if (content.length > 16) {
-    return 'Q';
-  } else {
-    return 'H';
-  }
-}
diff --git a/src/components/Qrcode/src/drawLogo.ts b/src/components/Qrcode/src/drawLogo.ts
deleted file mode 100644
index dbfe292..0000000
--- a/src/components/Qrcode/src/drawLogo.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import { isString } from '/@/utils/is';
-import { RenderQrCodeParams, LogoType } from './typing';
-export const drawLogo = ({ canvas, logo }: RenderQrCodeParams) => {
-  if (!logo) {
-    return new Promise((resolve) => {
-      resolve((canvas as HTMLCanvasElement).toDataURL());
-    });
-  }
-  const canvasWidth = (canvas as HTMLCanvasElement).width;
-  const { logoSize = 0.15, bgColor = '#ffffff', borderSize = 0.05, crossOrigin, borderRadius = 8, logoRadius = 0 } = logo as LogoType;
-
-  const logoSrc: string = isString(logo) ? logo : logo.src;
-  const logoWidth = canvasWidth * logoSize;
-  const logoXY = (canvasWidth * (1 - logoSize)) / 2;
-  const logoBgWidth = canvasWidth * (logoSize + borderSize);
-  const logoBgXY = (canvasWidth * (1 - logoSize - borderSize)) / 2;
-
-  const ctx = canvas.getContext('2d');
-  if (!ctx) return;
-
-  // logo 搴曡壊
-  canvasRoundRect(ctx)(logoBgXY, logoBgXY, logoBgWidth, logoBgWidth, borderRadius);
-  ctx.fillStyle = bgColor;
-  ctx.fill();
-
-  // logo
-  const image = new Image();
-  if (crossOrigin || logoRadius) {
-    image.setAttribute('crossOrigin', crossOrigin || 'anonymous');
-  }
-  image.src = logoSrc;
-
-  // 浣跨敤image缁樺埗鍙互閬垮厤鏌愪簺璺ㄥ煙鎯呭喌
-  const drawLogoWithImage = (image: CanvasImageSource) => {
-    ctx.drawImage(image, logoXY, logoXY, logoWidth, logoWidth);
-  };
-
-  // 浣跨敤canvas缁樺埗浠ヨ幏寰楁洿澶氱殑鍔熻兘
-  const drawLogoWithCanvas = (image: HTMLImageElement) => {
-    const canvasImage = document.createElement('canvas');
-    canvasImage.width = logoXY + logoWidth;
-    canvasImage.height = logoXY + logoWidth;
-    const imageCanvas = canvasImage.getContext('2d');
-    if (!imageCanvas || !ctx) return;
-    imageCanvas.drawImage(image, logoXY, logoXY, logoWidth, logoWidth);
-
-    canvasRoundRect(ctx)(logoXY, logoXY, logoWidth, logoWidth, logoRadius);
-    if (!ctx) return;
-    const fillStyle = ctx.createPattern(canvasImage, 'no-repeat');
-    if (fillStyle) {
-      ctx.fillStyle = fillStyle;
-      ctx.fill();
-    }
-  };
-
-  // 灏� logo缁樺埗鍒� canvas涓�
-  return new Promise((resolve) => {
-    image.onload = () => {
-      logoRadius ? drawLogoWithCanvas(image) : drawLogoWithImage(image);
-      resolve((canvas as HTMLCanvasElement).toDataURL());
-    };
-  });
-};
-
-// copy鏉ョ殑鏂规硶锛岀敤浜庣粯鍒跺渾瑙�
-function canvasRoundRect(ctx: CanvasRenderingContext2D) {
-  return (x: number, y: number, w: number, h: number, r: number) => {
-    const minSize = Math.min(w, h);
-    if (r > minSize / 2) {
-      r = minSize / 2;
-    }
-    ctx.beginPath();
-    ctx.moveTo(x + r, y);
-    ctx.arcTo(x + w, y, x + w, y + h, r);
-    ctx.arcTo(x + w, y + h, x, y + h, r);
-    ctx.arcTo(x, y + h, x, y, r);
-    ctx.arcTo(x, y, x + w, y, r);
-    ctx.closePath();
-    return ctx;
-  };
-}
diff --git a/src/components/Qrcode/src/qrcodePlus.ts b/src/components/Qrcode/src/qrcodePlus.ts
deleted file mode 100644
index 6439861..0000000
--- a/src/components/Qrcode/src/qrcodePlus.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-// 鍙傝�� qr-code-with-logo 杩涜ts鐗堟湰淇敼
-import { toCanvas } from './toCanvas';
-export * from './typing';
-export { toCanvas };
diff --git a/src/components/Qrcode/src/toCanvas.ts b/src/components/Qrcode/src/toCanvas.ts
deleted file mode 100644
index f74d596..0000000
--- a/src/components/Qrcode/src/toCanvas.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { renderQrCode } from './drawCanvas';
-import { drawLogo } from './drawLogo';
-import { RenderQrCodeParams } from './typing';
-export const toCanvas = (options: RenderQrCodeParams) => {
-  return renderQrCode(options)
-    .then(() => {
-      return options;
-    })
-    .then(drawLogo) as Promise<string>;
-};
diff --git a/src/components/Qrcode/src/typing.ts b/src/components/Qrcode/src/typing.ts
deleted file mode 100644
index 3a037e9..0000000
--- a/src/components/Qrcode/src/typing.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import type { QRCodeSegment, QRCodeRenderersOptions } from 'qrcode';
-
-export type ContentType = string | QRCodeSegment[];
-
-export type { QRCodeRenderersOptions };
-
-export type LogoType = {
-  src: string;
-  logoSize: number;
-  borderColor: string;
-  bgColor: string;
-  borderSize: number;
-  crossOrigin: string;
-  borderRadius: number;
-  logoRadius: number;
-};
-
-export interface RenderQrCodeParams {
-  canvas: any;
-  content: ContentType;
-  width?: number;
-  options?: QRCodeRenderersOptions;
-  logo?: LogoType | string;
-  image?: HTMLImageElement;
-  downloadName?: string;
-  download?: boolean | Fn;
-}
-
-export type ToCanvasFn = (options: RenderQrCodeParams) => Promise<unknown>;
-
-export interface QrCodeActionType {
-  download: (fileName?: string) => void;
-}
-
-export interface QrcodeDoneEventParams {
-  url: string;
-  ctx?: CanvasRenderingContext2D | null;
-}
diff --git a/src/components/Scrollbar/index.ts b/src/components/Scrollbar/index.ts
deleted file mode 100644
index e5b2cb2..0000000
--- a/src/components/Scrollbar/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * copy from element-ui
- */
-
-import Scrollbar from './src/Scrollbar.vue';
-
-export { Scrollbar };
-export type { ScrollbarType } from './src/types';
diff --git a/src/components/Scrollbar/src/Scrollbar.vue b/src/components/Scrollbar/src/Scrollbar.vue
deleted file mode 100644
index 3ea4a02..0000000
--- a/src/components/Scrollbar/src/Scrollbar.vue
+++ /dev/null
@@ -1,193 +0,0 @@
-<template>
-  <div class="scrollbar">
-    <div ref="wrap" :class="[wrapClass, 'scrollbar__wrap', native ? '' : 'scrollbar__wrap--hidden-default']" :style="style" @scroll="handleScroll">
-      <component :is="tag" ref="resize" :class="['scrollbar__view', viewClass]" :style="viewStyle">
-        <slot></slot>
-      </component>
-    </div>
-    <template v-if="!native">
-      <bar :move="moveX" :size="sizeWidth" />
-      <bar vertical :move="moveY" :size="sizeHeight" />
-    </template>
-  </div>
-</template>
-<script lang="ts">
-  import { addResizeListener, removeResizeListener } from '/@/utils/event';
-  import componentSetting from '/@/settings/componentSetting';
-  const { scrollbar } = componentSetting;
-  import { toObject } from './util';
-  import { defineComponent, ref, onMounted, onBeforeUnmount, nextTick, provide, computed, unref } from 'vue';
-  import Bar from './bar';
-
-  export default defineComponent({
-    name: 'Scrollbar',
-    // inheritAttrs: false,
-    components: { Bar },
-    props: {
-      native: {
-        type: Boolean,
-        default: scrollbar?.native ?? false,
-      },
-      wrapStyle: {
-        type: [String, Array],
-        default: '',
-      },
-      wrapClass: {
-        type: [String, Array],
-        default: '',
-      },
-      viewClass: {
-        type: [String, Array],
-        default: '',
-      },
-      viewStyle: {
-        type: [String, Array],
-        default: '',
-      },
-      noresize: Boolean, // 濡傛灉 container 灏哄涓嶄細鍙戠敓鍙樺寲锛屾渶濂借缃畠鍙互浼樺寲鎬ц兘
-      tag: {
-        type: String,
-        default: 'div',
-      },
-    },
-    setup(props) {
-      const sizeWidth = ref('0');
-      const sizeHeight = ref('0');
-      const moveX = ref(0);
-      const moveY = ref(0);
-      const wrap = ref();
-      const resize = ref();
-
-      provide('scroll-bar-wrap', wrap);
-
-      const style = computed(() => {
-        if (Array.isArray(props.wrapStyle)) {
-          return toObject(props.wrapStyle);
-        }
-        return props.wrapStyle;
-      });
-
-      const handleScroll = () => {
-        if (!props.native) {
-          moveY.value = (unref(wrap).scrollTop * 100) / unref(wrap).clientHeight;
-          moveX.value = (unref(wrap).scrollLeft * 100) / unref(wrap).clientWidth;
-        }
-      };
-
-      const update = () => {
-        if (!unref(wrap)) return;
-
-        const heightPercentage = (unref(wrap).clientHeight * 100) / unref(wrap).scrollHeight;
-        const widthPercentage = (unref(wrap).clientWidth * 100) / unref(wrap).scrollWidth;
-
-        sizeHeight.value = heightPercentage < 100 ? heightPercentage + '%' : '';
-        sizeWidth.value = widthPercentage < 100 ? widthPercentage + '%' : '';
-      };
-
-      onMounted(() => {
-        if (props.native) return;
-        nextTick(update);
-        if (!props.noresize) {
-          addResizeListener(unref(resize), update);
-          addResizeListener(unref(wrap), update);
-          addEventListener('resize', update);
-        }
-      });
-
-      onBeforeUnmount(() => {
-        if (props.native) return;
-        if (!props.noresize) {
-          removeResizeListener(unref(resize), update);
-          removeResizeListener(unref(wrap), update);
-          removeEventListener('resize', update);
-        }
-      });
-
-      return {
-        moveX,
-        moveY,
-        sizeWidth,
-        sizeHeight,
-        style,
-        wrap,
-        resize,
-        update,
-        handleScroll,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  .scrollbar {
-    position: relative;
-    height: 100%;
-    overflow: hidden;
-
-    &__wrap {
-      height: 100%;
-      overflow: auto;
-
-      &--hidden-default {
-        scrollbar-width: none;
-
-        &::-webkit-scrollbar {
-          display: none;
-          width: 0;
-          height: 0;
-          opacity: 0;
-        }
-      }
-    }
-
-    &__thumb {
-      position: relative;
-      display: block;
-      width: 0;
-      height: 0;
-      cursor: pointer;
-      background-color: rgba(144, 147, 153, 0.3);
-      border-radius: inherit;
-      transition: 0.3s background-color;
-
-      &:hover {
-        background-color: rgba(144, 147, 153, 0.5);
-      }
-    }
-
-    &__bar {
-      position: absolute;
-      right: 2px;
-      bottom: 2px;
-      z-index: 1;
-      border-radius: 4px;
-      opacity: 0;
-      -webkit-transition: opacity 80ms ease;
-      transition: opacity 80ms ease;
-
-      &.is-vertical {
-        top: 2px;
-        width: 6px;
-
-        & > div {
-          width: 100%;
-        }
-      }
-
-      &.is-horizontal {
-        left: 2px;
-        height: 6px;
-
-        & > div {
-          height: 100%;
-        }
-      }
-    }
-  }
-
-  .scrollbar:active > .scrollbar__bar,
-  .scrollbar:focus > .scrollbar__bar,
-  .scrollbar:hover > .scrollbar__bar {
-    opacity: 1;
-    transition: opacity 340ms ease-out;
-  }
-</style>
diff --git a/src/components/Scrollbar/src/bar.ts b/src/components/Scrollbar/src/bar.ts
deleted file mode 100644
index d56b56c..0000000
--- a/src/components/Scrollbar/src/bar.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import { defineComponent, h, computed, ref, getCurrentInstance, onUnmounted, inject, Ref } from 'vue';
-import { on, off } from '/@/utils/domUtils';
-
-import { renderThumbStyle, BAR_MAP } from './util';
-
-export default defineComponent({
-  name: 'Bar',
-
-  props: {
-    vertical: Boolean,
-    size: String,
-    move: Number,
-  },
-
-  setup(props) {
-    const instance = getCurrentInstance();
-    const thumb = ref();
-    const wrap = inject('scroll-bar-wrap', {} as Ref<Nullable<HTMLElement>>) as any;
-    const bar = computed(() => {
-      return BAR_MAP[props.vertical ? 'vertical' : 'horizontal'];
-    });
-    const barStore = ref<Recordable>({});
-    const cursorDown = ref();
-    const clickThumbHandler = (e: any) => {
-      // prevent click event of right button
-      if (e.ctrlKey || e.button === 2) {
-        return;
-      }
-      window.getSelection()?.removeAllRanges();
-      startDrag(e);
-      barStore.value[bar.value.axis] =
-        e.currentTarget[bar.value.offset] - (e[bar.value.client] - e.currentTarget.getBoundingClientRect()[bar.value.direction]);
-    };
-
-    const clickTrackHandler = (e: any) => {
-      const offset = Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]);
-      const thumbHalf = thumb.value[bar.value.offset] / 2;
-      const thumbPositionPercentage = ((offset - thumbHalf) * 100) / instance?.vnode.el?.[bar.value.offset];
-
-      wrap.value[bar.value.scroll] = (thumbPositionPercentage * wrap.value[bar.value.scrollSize]) / 100;
-    };
-    const startDrag = (e: any) => {
-      e.stopImmediatePropagation();
-      cursorDown.value = true;
-      on(document, 'mousemove', mouseMoveDocumentHandler);
-      on(document, 'mouseup', mouseUpDocumentHandler);
-      document.onselectstart = () => false;
-    };
-
-    const mouseMoveDocumentHandler = (e: any) => {
-      if (cursorDown.value === false) return;
-      const prevPage = barStore.value[bar.value.axis];
-
-      if (!prevPage) return;
-
-      const offset = (instance?.vnode.el?.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1;
-      const thumbClickPosition = thumb.value[bar.value.offset] - prevPage;
-      const thumbPositionPercentage = ((offset - thumbClickPosition) * 100) / instance?.vnode.el?.[bar.value.offset];
-      wrap.value[bar.value.scroll] = (thumbPositionPercentage * wrap.value[bar.value.scrollSize]) / 100;
-    };
-
-    function mouseUpDocumentHandler() {
-      cursorDown.value = false;
-      barStore.value[bar.value.axis] = 0;
-      off(document, 'mousemove', mouseMoveDocumentHandler);
-      document.onselectstart = null;
-    }
-
-    onUnmounted(() => {
-      off(document, 'mouseup', mouseUpDocumentHandler);
-    });
-
-    return () =>
-      h(
-        'div',
-        {
-          class: ['scrollbar__bar', 'is-' + bar.value.key],
-          onMousedown: clickTrackHandler,
-        },
-        h('div', {
-          ref: thumb,
-          class: 'scrollbar__thumb',
-          onMousedown: clickThumbHandler,
-          style: renderThumbStyle({
-            size: props.size,
-            move: props.move,
-            bar: bar.value,
-          }),
-        })
-      );
-  },
-});
diff --git a/src/components/Scrollbar/src/types.d.ts b/src/components/Scrollbar/src/types.d.ts
deleted file mode 100644
index 4c7eeea..0000000
--- a/src/components/Scrollbar/src/types.d.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-export interface BarMapItem {
-  offset: string;
-  scroll: string;
-  scrollSize: string;
-  size: string;
-  key: string;
-  axis: string;
-  client: string;
-  direction: string;
-}
-export interface BarMap {
-  vertical: BarMapItem;
-  horizontal: BarMapItem;
-}
-
-export interface ScrollbarType {
-  wrap: ElRef;
-}
diff --git a/src/components/Scrollbar/src/util.ts b/src/components/Scrollbar/src/util.ts
deleted file mode 100644
index b7c4845..0000000
--- a/src/components/Scrollbar/src/util.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import type { BarMap } from './types';
-export const BAR_MAP: BarMap = {
-  vertical: {
-    offset: 'offsetHeight',
-    scroll: 'scrollTop',
-    scrollSize: 'scrollHeight',
-    size: 'height',
-    key: 'vertical',
-    axis: 'Y',
-    client: 'clientY',
-    direction: 'top',
-  },
-  horizontal: {
-    offset: 'offsetWidth',
-    scroll: 'scrollLeft',
-    scrollSize: 'scrollWidth',
-    size: 'width',
-    key: 'horizontal',
-    axis: 'X',
-    client: 'clientX',
-    direction: 'left',
-  },
-};
-
-// @ts-ignore
-export function renderThumbStyle({ move, size, bar }) {
-  const style = {} as any;
-  const translate = `translate${bar.axis}(${move}%)`;
-
-  style[bar.size] = size;
-  style.transform = translate;
-  style.msTransform = translate;
-  style.webkitTransform = translate;
-
-  return style;
-}
-
-function extend<T, K>(to: T, _from: K): T & K {
-  return Object.assign(to, _from);
-}
-
-export function toObject<T>(arr: Array<T>): Recordable<T> {
-  const res = {};
-  for (let i = 0; i < arr.length; i++) {
-    if (arr[i]) {
-      extend(res, arr[i]);
-    }
-  }
-  return res;
-}
diff --git a/src/components/SimpleMenu/index.ts b/src/components/SimpleMenu/index.ts
deleted file mode 100644
index 0dfd248..0000000
--- a/src/components/SimpleMenu/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { default as SimpleMenu } from './src/SimpleMenu.vue';
-export { default as SimpleMenuTag } from './src/SimpleMenuTag.vue';
diff --git a/src/components/SimpleMenu/src/SimpleMenu.vue b/src/components/SimpleMenu/src/SimpleMenu.vue
deleted file mode 100644
index d6699fa..0000000
--- a/src/components/SimpleMenu/src/SimpleMenu.vue
+++ /dev/null
@@ -1,155 +0,0 @@
-<template>
-  <Menu
-    v-bind="getBindValues"
-    :activeName="activeName"
-    :openNames="getOpenKeys"
-    :class="prefixCls"
-    :activeSubMenuNames="activeSubMenuNames"
-    @select="handleSelect"
-  >
-    <template v-for="item in items" :key="item.path">
-      <SimpleSubMenu :item="item" :parent="true" :collapsedShowTitle="collapsedShowTitle" :collapse="collapse" />
-    </template>
-  </Menu>
-</template>
-<script lang="ts">
-  import type { MenuState } from './types';
-  import type { Menu as MenuType } from '/@/router/types';
-  import type { RouteLocationNormalizedLoaded } from 'vue-router';
-  import { defineComponent, computed, ref, unref, reactive, toRefs, watch } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import Menu from './components/Menu.vue';
-  import SimpleSubMenu from './SimpleSubMenu.vue';
-  import { listenerRouteChange } from '/@/logics/mitt/routeChange';
-  import { propTypes } from '/@/utils/propTypes';
-  import { REDIRECT_NAME } from '/@/router/constant';
-  import { useRouter } from 'vue-router';
-  import { isFunction, isUrl } from '/@/utils/is';
-  import { openWindow } from '/@/utils';
-
-  import { useOpenKeys } from './useOpenKeys';
-  import { URL_HASH_TAB } from '/@/utils';
-
-  export default defineComponent({
-    name: 'SimpleMenu',
-    components: {
-      Menu,
-      SimpleSubMenu,
-    },
-    inheritAttrs: false,
-    props: {
-      items: {
-        type: Array as PropType<MenuType[]>,
-        default: () => [],
-      },
-      collapse: propTypes.bool,
-      mixSider: propTypes.bool,
-      theme: propTypes.string,
-      accordion: propTypes.bool.def(true),
-      collapsedShowTitle: propTypes.bool,
-      beforeClickFn: {
-        type: Function as PropType<(key: string) => Promise<boolean>>,
-      },
-      isSplitMenu: propTypes.bool,
-    },
-    emits: ['menuClick'],
-    setup(props, { attrs, emit }) {
-      const currentActiveMenu = ref('');
-      const isClickGo = ref(false);
-
-      const menuState = reactive<MenuState>({
-        activeName: '',
-        openNames: [],
-        activeSubMenuNames: [],
-      });
-
-      const { currentRoute } = useRouter();
-      const { prefixCls } = useDesign('simple-menu');
-      const { items, accordion, mixSider, collapse } = toRefs(props);
-
-      const { setOpenKeys, getOpenKeys } = useOpenKeys(menuState, items, accordion, mixSider, collapse);
-
-      const getBindValues = computed(() => ({ ...attrs, ...props }));
-
-      watch(
-        () => props.collapse,
-        (collapse) => {
-          if (collapse) {
-            menuState.openNames = [];
-          } else {
-            setOpenKeys(currentRoute.value.path);
-          }
-        },
-        { immediate: true }
-      );
-
-      watch(
-        () => props.items,
-        () => {
-          if (!props.isSplitMenu) {
-            return;
-          }
-          setOpenKeys(currentRoute.value.path);
-        },
-        { flush: 'post' }
-      );
-
-      listenerRouteChange((route) => {
-        if (route.name === REDIRECT_NAME) return;
-
-        currentActiveMenu.value = route.meta?.currentActiveMenu as string;
-        handleMenuChange(route);
-
-        if (unref(currentActiveMenu)) {
-          menuState.activeName = unref(currentActiveMenu);
-          setOpenKeys(unref(currentActiveMenu));
-        }
-      });
-
-      async function handleMenuChange(route?: RouteLocationNormalizedLoaded) {
-        if (unref(isClickGo)) {
-          isClickGo.value = false;
-          return;
-        }
-        const path = (route || unref(currentRoute)).path;
-
-        menuState.activeName = path;
-
-        setOpenKeys(path);
-      }
-
-      async function handleSelect(key: string) {
-        if (isUrl(key)) {
-          // update-begin--author:sunjianlei---date:20220408---for: 銆怴UEN-656銆戦厤缃閮ㄧ綉鍧�鎵撲笉寮�锛屽師鍥犳槸甯︿簡#鍙凤紝闇�瑕佹浛鎹竴涓�
-          let url = key.replace(URL_HASH_TAB, '#');
-          window.open(url)
-          //openWindow(url);
-          // update-begin--author:sunjianlei---date:20220408---for: 銆怴UEN-656銆戦厤缃閮ㄧ綉鍧�鎵撲笉寮�锛屽師鍥犳槸甯︿簡#鍙凤紝闇�瑕佹浛鎹竴涓�
-          return;
-        }
-        const { beforeClickFn } = props;
-        if (beforeClickFn && isFunction(beforeClickFn)) {
-          const flag = await beforeClickFn(key);
-          if (!flag) return;
-        }
-
-        emit('menuClick', key);
-
-        isClickGo.value = true;
-        setOpenKeys(key);
-        menuState.activeName = key;
-      }
-
-      return {
-        prefixCls,
-        getBindValues,
-        handleSelect,
-        getOpenKeys,
-        ...toRefs(menuState),
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @import './index.less';
-</style>
diff --git a/src/components/SimpleMenu/src/SimpleMenuTag.vue b/src/components/SimpleMenu/src/SimpleMenuTag.vue
deleted file mode 100644
index b7d3cb3..0000000
--- a/src/components/SimpleMenu/src/SimpleMenuTag.vue
+++ /dev/null
@@ -1,68 +0,0 @@
-<template>
-  <span :class="getTagClass" v-if="getShowTag">{{ getContent }}</span>
-</template>
-<script lang="ts">
-  import type { Menu } from '/@/router/types';
-
-  import { defineComponent, computed } from 'vue';
-
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { propTypes } from '/@/utils/propTypes';
-
-  export default defineComponent({
-    name: 'SimpleMenuTag',
-    props: {
-      item: {
-        type: Object as PropType<Menu>,
-        default: () => ({}),
-      },
-      dot: propTypes.bool,
-      collapseParent: propTypes.bool,
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('simple-menu');
-
-      const getShowTag = computed(() => {
-        const { item } = props;
-
-        if (!item) return false;
-
-        const { tag } = item;
-        if (!tag) return false;
-
-        const { dot, content } = tag;
-        if (!dot && !content) return false;
-        return true;
-      });
-
-      const getContent = computed(() => {
-        if (!getShowTag.value) return '';
-        const { item, collapseParent } = props;
-        const { tag } = item;
-        const { dot, content } = tag!;
-        return dot || collapseParent ? '' : content;
-      });
-
-      const getTagClass = computed(() => {
-        const { item, collapseParent } = props;
-        const { tag = {} } = item || {};
-        const { dot, type = 'error' } = tag;
-        const tagCls = `${prefixCls}-tag`;
-        return [
-          tagCls,
-
-          [`${tagCls}--${type}`],
-          {
-            [`${tagCls}--collapse`]: collapseParent,
-            [`${tagCls}--dot`]: dot || props.dot,
-          },
-        ];
-      });
-      return {
-        getTagClass,
-        getShowTag,
-        getContent,
-      };
-    },
-  });
-</script>
diff --git a/src/components/SimpleMenu/src/SimpleSubMenu.vue b/src/components/SimpleMenu/src/SimpleSubMenu.vue
deleted file mode 100644
index e713f62..0000000
--- a/src/components/SimpleMenu/src/SimpleSubMenu.vue
+++ /dev/null
@@ -1,105 +0,0 @@
-<template>
-  <MenuItem :name="item.path" v-if="!menuHasChildren(item) && getShowMenu" v-bind="$props" :class="getLevelClass">
-    <Icon v-if="getIcon" :icon="getIcon" :size="16" />
-    <div v-if="collapsedShowTitle && getIsCollapseParent" class="mt-1 collapse-title">
-      {{ getI18nName }}
-    </div>
-    <template #title>
-      <span :class="['ml-2', `${prefixCls}-sub-title`]">
-        {{ getI18nName }}
-      </span>
-      <SimpleMenuTag :item="item" :collapseParent="getIsCollapseParent" />
-    </template>
-  </MenuItem>
-  <SubMenu :name="item.path" v-if="menuHasChildren(item) && getShowMenu" :class="[getLevelClass, theme]" :collapsedShowTitle="collapsedShowTitle">
-    <template #title>
-      <Icon v-if="getIcon" :icon="getIcon" :size="16" />
-
-      <div v-if="collapsedShowTitle && getIsCollapseParent" class="mt-2 collapse-title">
-        {{ getI18nName }}
-      </div>
-
-      <span v-show="getShowSubTitle" :class="['ml-2', `${prefixCls}-sub-title`]">
-        {{ getI18nName }}
-      </span>
-      <SimpleMenuTag :item="item" :collapseParent="!!collapse && !!parent" />
-    </template>
-    <template v-for="childrenItem in item.children || []" :key="childrenItem.path">
-      <SimpleSubMenu v-bind="$props" :item="childrenItem" :parent="false" />
-    </template>
-  </SubMenu>
-</template>
-<script lang="ts">
-  import type { PropType } from 'vue';
-  import type { Menu } from '/@/router/types';
-
-  import { defineComponent, computed } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import Icon from '/@/components/Icon/index';
-  import { checkChildrenHidden } from '/@/utils/common/compUtils';
-  import MenuItem from './components/MenuItem.vue';
-  import SubMenu from './components/SubMenuItem.vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-
-  export default defineComponent({
-    name: 'SimpleSubMenu',
-    components: {
-      SubMenu,
-      MenuItem,
-      SimpleMenuTag: createAsyncComponent(() => import('./SimpleMenuTag.vue')),
-      Icon,
-    },
-    props: {
-      item: {
-        type: Object as PropType<Menu>,
-        default: () => ({}),
-      },
-      parent: propTypes.bool,
-      collapsedShowTitle: propTypes.bool,
-      collapse: propTypes.bool,
-      theme: propTypes.oneOf(['dark', 'light']),
-    },
-    setup(props) {
-      const { t } = useI18n();
-      const { prefixCls } = useDesign('simple-menu');
-
-      const getShowMenu = computed(() => !props.item?.meta?.hideMenu);
-      const getIcon = computed(() => props.item?.icon);
-      const getI18nName = computed(() => t(props.item?.name));
-      const getShowSubTitle = computed(() => !props.collapse || !props.parent);
-      const getIsCollapseParent = computed(() => !!props.collapse && !!props.parent);
-      const getLevelClass = computed(() => {
-        return [
-          {
-            [`${prefixCls}__parent`]: props.parent,
-            [`${prefixCls}__children`]: !props.parent,
-          },
-        ];
-      });
-
-      function menuHasChildren(menuTreeItem): boolean {
-        return (
-          !menuTreeItem.meta?.hideChildrenInMenu &&
-          Reflect.has(menuTreeItem, 'children') &&
-          !!menuTreeItem.children &&
-          menuTreeItem.children.length > 0
-          &&checkChildrenHidden(menuTreeItem)
-        );
-      }
-
-      return {
-        prefixCls,
-        menuHasChildren,
-        checkChildrenHidden,
-        getShowMenu,
-        getIcon,
-        getI18nName,
-        getShowSubTitle,
-        getLevelClass,
-        getIsCollapseParent,
-      };
-    },
-  });
-</script>
diff --git a/src/components/SimpleMenu/src/components/Menu.vue b/src/components/SimpleMenu/src/components/Menu.vue
deleted file mode 100644
index 80c0f65..0000000
--- a/src/components/SimpleMenu/src/components/Menu.vue
+++ /dev/null
@@ -1,148 +0,0 @@
-<template>
-  <ul :class="getClass">
-    <slot></slot>
-  </ul>
-</template>
-
-<script lang="ts">
-  import type { PropType } from 'vue';
-  import type { SubMenuProvider } from './types';
-  import { defineComponent, ref, computed, onMounted, watchEffect, watch, nextTick, getCurrentInstance, provide } from 'vue';
-
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { propTypes } from '/@/utils/propTypes';
-  import { createSimpleRootMenuContext } from './useSimpleMenuContext';
-  import mitt from '/@/utils/mitt';
-  export default defineComponent({
-    name: 'Menu',
-    props: {
-      theme: propTypes.oneOf(['light', 'dark']).def('light'),
-      activeName: propTypes.oneOfType([propTypes.string, propTypes.number]),
-      openNames: {
-        type: Array as PropType<string[]>,
-        default: () => [],
-      },
-      accordion: propTypes.bool.def(true),
-      width: propTypes.string.def('100%'),
-      collapsedWidth: propTypes.string.def('48px'),
-      indentSize: propTypes.number.def(16),
-      collapse: propTypes.bool.def(true),
-      activeSubMenuNames: {
-        type: Array as PropType<(string | number)[]>,
-        default: () => [],
-      },
-    },
-    emits: ['select', 'open-change'],
-    setup(props, { emit }) {
-      const rootMenuEmitter = mitt();
-      const instance = getCurrentInstance();
-
-      const currentActiveName = ref<string | number>('');
-      const openedNames = ref<string[]>([]);
-
-      const { prefixCls } = useDesign('menu');
-
-      const isRemoveAllPopup = ref(false);
-
-      createSimpleRootMenuContext({
-        rootMenuEmitter: rootMenuEmitter,
-        activeName: currentActiveName,
-      });
-
-      const getClass = computed(() => {
-        const { theme } = props;
-        return [
-          prefixCls,
-          `${prefixCls}-${theme}`,
-          `${prefixCls}-vertical`,
-          {
-            [`${prefixCls}-collapse`]: props.collapse,
-          },
-        ];
-      });
-
-      watchEffect(() => {
-        openedNames.value = props.openNames;
-      });
-
-      watchEffect(() => {
-        if (props.activeName) {
-          currentActiveName.value = props.activeName;
-        }
-      });
-
-      watch(
-        () => props.openNames,
-        () => {
-          nextTick(() => {
-            updateOpened();
-          });
-        }
-      );
-
-      function updateOpened() {
-        rootMenuEmitter.emit('on-update-opened', openedNames.value);
-      }
-
-      function addSubMenu(name: string) {
-        if (openedNames.value.includes(name)) return;
-        openedNames.value.push(name);
-        updateOpened();
-      }
-
-      function removeSubMenu(name: string) {
-        openedNames.value = openedNames.value.filter((item) => item !== name);
-        updateOpened();
-      }
-
-      function removeAll() {
-        openedNames.value = [];
-        updateOpened();
-      }
-
-      function sliceIndex(index: number) {
-        if (index === -1) return;
-        openedNames.value = openedNames.value.slice(0, index + 1);
-        updateOpened();
-      }
-
-      provide<SubMenuProvider>(`subMenu:${instance?.uid}`, {
-        addSubMenu,
-        removeSubMenu,
-        getOpenNames: () => openedNames.value,
-        removeAll,
-        isRemoveAllPopup,
-        sliceIndex,
-        level: 0,
-        props: props as any,
-      });
-
-      onMounted(() => {
-        openedNames.value = !props.collapse ? [...props.openNames] : [];
-        updateOpened();
-        rootMenuEmitter.on('on-menu-item-select', (name: string) => {
-          currentActiveName.value = name;
-
-          nextTick(() => {
-            props.collapse && removeAll();
-          });
-          emit('select', name);
-        });
-
-        rootMenuEmitter.on('open-name-change', ({ name, opened }) => {
-          if (opened && !openedNames.value.includes(name)) {
-            openedNames.value.push(name);
-          } else if (!opened) {
-            const index = openedNames.value.findIndex((item) => item === name);
-            index !== -1 && openedNames.value.splice(index, 1);
-          }
-        });
-      });
-
-      return { getClass, openedNames };
-    },
-  });
-</script>
-<style lang="less">
-  @import './menu.less';
-</style>
diff --git a/src/components/SimpleMenu/src/components/MenuCollapseTransition.vue b/src/components/SimpleMenu/src/components/MenuCollapseTransition.vue
deleted file mode 100644
index 5295439..0000000
--- a/src/components/SimpleMenu/src/components/MenuCollapseTransition.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-<template>
-  <transition mode="out-in" v-on="on">
-    <slot></slot>
-  </transition>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { addClass, removeClass } from '/@/utils/domUtils';
-
-  export default defineComponent({
-    name: 'MenuCollapseTransition',
-    setup() {
-      return {
-        on: {
-          beforeEnter(el) {
-            addClass(el, 'collapse-transition');
-            if (!el.dataset) el.dataset = {};
-
-            el.dataset.oldPaddingTop = el.style.paddingTop;
-            el.dataset.oldPaddingBottom = el.style.paddingBottom;
-
-            el.style.height = '0';
-            el.style.paddingTop = 0;
-            el.style.paddingBottom = 0;
-          },
-
-          enter(el) {
-            el.dataset.oldOverflow = el.style.overflow;
-            if (el.scrollHeight !== 0) {
-              el.style.height = el.scrollHeight + 'px';
-              el.style.paddingTop = el.dataset.oldPaddingTop;
-              el.style.paddingBottom = el.dataset.oldPaddingBottom;
-            } else {
-              el.style.height = '';
-              el.style.paddingTop = el.dataset.oldPaddingTop;
-              el.style.paddingBottom = el.dataset.oldPaddingBottom;
-            }
-
-            el.style.overflow = 'hidden';
-          },
-
-          afterEnter(el) {
-            removeClass(el, 'collapse-transition');
-            el.style.height = '';
-            el.style.overflow = el.dataset.oldOverflow;
-          },
-
-          beforeLeave(el) {
-            if (!el.dataset) el.dataset = {};
-            el.dataset.oldPaddingTop = el.style.paddingTop;
-            el.dataset.oldPaddingBottom = el.style.paddingBottom;
-            el.dataset.oldOverflow = el.style.overflow;
-
-            el.style.height = el.scrollHeight + 'px';
-            el.style.overflow = 'hidden';
-          },
-
-          leave(el) {
-            if (el.scrollHeight !== 0) {
-              addClass(el, 'collapse-transition');
-              el.style.height = 0;
-              el.style.paddingTop = 0;
-              el.style.paddingBottom = 0;
-            }
-          },
-
-          afterLeave(el) {
-            removeClass(el, 'collapse-transition');
-            el.style.height = '';
-            el.style.overflow = el.dataset.oldOverflow;
-            el.style.paddingTop = el.dataset.oldPaddingTop;
-            el.style.paddingBottom = el.dataset.oldPaddingBottom;
-          },
-        },
-      };
-    },
-  });
-</script>
diff --git a/src/components/SimpleMenu/src/components/MenuItem.vue b/src/components/SimpleMenu/src/components/MenuItem.vue
deleted file mode 100644
index 0b7afc7..0000000
--- a/src/components/SimpleMenu/src/components/MenuItem.vue
+++ /dev/null
@@ -1,127 +0,0 @@
-<template>
-  <li :class="getClass" @click.stop="handleClickItem" :style="getCollapse ? {} : getItemStyle">
-    <Tooltip placement="right" v-if="showTooptip">
-      <template #title>
-        <slot name="title"></slot>
-      </template>
-      <div :class="`${prefixCls}-tooltip`">
-        <slot></slot>
-      </div>
-    </Tooltip>
-
-    <template v-else>
-      <slot></slot>
-      <slot name="title"></slot>
-    </template>
-  </li>
-</template>
-
-<script lang="ts">
-  import { PropType } from 'vue';
-  import { defineComponent, ref, computed, unref, getCurrentInstance, watch } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useMenuItem } from './useMenu';
-  import { Tooltip } from 'ant-design-vue';
-  import { useSimpleRootMenuContext } from './useSimpleMenuContext';
-  import { useLocaleStore } from '/@/store/modules/locale';
-
-  export default defineComponent({
-    name: 'MenuItem',
-    components: { Tooltip },
-    props: {
-      name: {
-        type: [String, Number] as PropType<string | number>,
-        required: true,
-      },
-      disabled: propTypes.bool,
-    },
-    setup(props, { slots }) {
-      const instance = getCurrentInstance();
-      const localeStore = useLocaleStore();
-
-      const active = ref(false);
-
-      const { getItemStyle, getParentList, getParentMenu, getParentRootMenu } = useMenuItem(instance);
-
-      const { prefixCls } = useDesign('menu');
-
-      const { rootMenuEmitter, activeName } = useSimpleRootMenuContext();
-
-      const getClass = computed(() => {
-        return [
-          `${prefixCls}-item`,
-          {
-            [`${prefixCls}-item-active`]: unref(active),
-            [`${prefixCls}-item-selected`]: unref(active),
-            [`${prefixCls}-item-disabled`]: !!props.disabled,
-          },
-        ];
-      });
-
-      const getCollapse = computed(() => unref(getParentRootMenu)?.props.collapse);
-
-      const showTooptip = computed(() => {
-        return unref(getParentMenu)?.type.name === 'Menu' && unref(getCollapse) && slots.title;
-      });
-
-      function handleClickItem() {
-        const { disabled } = props;
-        if (disabled) {
-          return;
-        }
-
-        rootMenuEmitter.emit('on-menu-item-select', props.name);
-        if (unref(getCollapse)) {
-          return;
-        }
-        const { uidList } = getParentList();
-
-        rootMenuEmitter.emit('on-update-opened', {
-          opend: false,
-          parent: instance?.parent,
-          uidList: uidList,
-        });
-      }
-      watch(
-        () => activeName.value,
-        (name: string) => {
-          if (name === props.name) {
-            const { list, uidList } = getParentList();
-            active.value = true;
-            list.forEach((item) => {
-              if (item.proxy) {
-                (item.proxy as any).active = true;
-              }
-            });
-
-            //瀛樺偍璺緞鍜屾爣棰樼殑鍏崇郴
-            storePathTitle(props.name);
-            rootMenuEmitter.emit('on-update-active-name:submenu', uidList);
-          } else {
-            active.value = false;
-          }
-        },
-        { immediate: true }
-      );
-
-      //update-begin-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-      function storePathTitle(path) {
-        console.log('storePathTitle', path);
-        let title = '';
-        if (instance!.attrs) {
-          let item: any = instance!.attrs.item;
-          if (item) {
-            title = item.title;
-          }
-        }
-        if (localeStore) {
-          localeStore.setPathTitle(path, title);
-        }
-      }
-      //update-end-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-
-      return { getClass, prefixCls, getItemStyle, getCollapse, handleClickItem, showTooptip };
-    },
-  });
-</script>
diff --git a/src/components/SimpleMenu/src/components/SubMenuItem.vue b/src/components/SimpleMenu/src/components/SubMenuItem.vue
deleted file mode 100644
index 9300b48..0000000
--- a/src/components/SimpleMenu/src/components/SubMenuItem.vue
+++ /dev/null
@@ -1,311 +0,0 @@
-<template>
-  <li :class="getClass">
-    <template v-if="!getCollapse">
-      <div :class="`${prefixCls}-submenu-title`" @click.stop="handleClick" :style="getItemStyle">
-        <slot name="title" :getIsOpened="getIsOpend"></slot>
-        <Icon icon="eva:arrow-ios-downward-outline" :size="14" :class="`${prefixCls}-submenu-title-icon`" />
-      </div>
-      <CollapseTransition>
-        <ul :class="prefixCls" v-show="opened">
-          <slot></slot>
-        </ul>
-      </CollapseTransition>
-    </template>
-
-    <Popover
-      placement="right"
-      :overlayClassName="`${prefixCls}-menu-popover`"
-      v-else
-      :visible="getIsOpend"
-      @visibleChange="handleVisibleChange"
-      :overlayStyle="getOverlayStyle"
-      :align="{ offset: [0, 0] }"
-    >
-      <div :class="getSubClass" v-bind="getEvents(false)">
-        <div
-          :class="[
-            {
-              [`${prefixCls}-submenu-popup`]: !getParentSubMenu,
-              [`${prefixCls}-submenu-collapsed-show-tit`]: collapsedShowTitle,
-            },
-          ]"
-        >
-          <slot name="title"></slot>
-        </div>
-        <Icon v-if="getParentSubMenu" icon="eva:arrow-ios-downward-outline" :size="14" :class="`${prefixCls}-submenu-title-icon`" />
-      </div>
-      <!-- eslint-disable-next-line -->
-      <template #content v-show="opened">
-        <div v-bind="getEvents(true)">
-          <ul :class="[prefixCls, `${prefixCls}-${getTheme}`, `${prefixCls}-popup`]">
-            <slot></slot>
-          </ul>
-        </div>
-      </template>
-    </Popover>
-  </li>
-</template>
-
-<script lang="ts">
-  import type { CSSProperties, PropType } from 'vue';
-  import type { SubMenuProvider } from './types';
-  import { defineComponent, computed, unref, getCurrentInstance, toRefs, reactive, provide, onBeforeMount, inject } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useMenuItem } from './useMenu';
-  import { useSimpleRootMenuContext } from './useSimpleMenuContext';
-  import { CollapseTransition } from '/@/components/Transition';
-  import Icon from '/@/components/Icon';
-  import { Popover } from 'ant-design-vue';
-  import { isBoolean, isObject } from '/@/utils/is';
-  import mitt from '/@/utils/mitt';
-
-  const DELAY = 200;
-  export default defineComponent({
-    name: 'SubMenu',
-    components: {
-      Icon,
-      CollapseTransition,
-      Popover,
-    },
-    props: {
-      name: {
-        type: [String, Number] as PropType<string | number>,
-        required: true,
-      },
-      disabled: propTypes.bool,
-      collapsedShowTitle: propTypes.bool,
-    },
-    setup(props) {
-      const instance = getCurrentInstance();
-
-      const state = reactive({
-        active: false,
-        opened: false,
-      });
-
-      const data = reactive({
-        timeout: null as TimeoutHandle | null,
-        mouseInChild: false,
-        isChild: false,
-      });
-
-      const { getParentSubMenu, getItemStyle, getParentMenu, getParentList } = useMenuItem(instance);
-
-      const { prefixCls } = useDesign('menu');
-
-      const subMenuEmitter = mitt();
-
-      const { rootMenuEmitter } = useSimpleRootMenuContext();
-
-      const {
-        addSubMenu: parentAddSubmenu,
-        removeSubMenu: parentRemoveSubmenu,
-        removeAll: parentRemoveAll,
-        getOpenNames: parentGetOpenNames,
-        isRemoveAllPopup,
-        sliceIndex,
-        level,
-        props: rootProps,
-        handleMouseleave: parentHandleMouseleave,
-      } = inject<SubMenuProvider>(`subMenu:${getParentMenu.value?.uid}`)!;
-
-      const getClass = computed(() => {
-        return [
-          `${prefixCls}-submenu`,
-          {
-            [`${prefixCls}-item-active`]: state.active,
-            [`${prefixCls}-opened`]: state.opened,
-            [`${prefixCls}-submenu-disabled`]: props.disabled,
-            [`${prefixCls}-submenu-has-parent-submenu`]: unref(getParentSubMenu),
-            [`${prefixCls}-child-item-active`]: state.active,
-          },
-        ];
-      });
-
-      const getAccordion = computed(() => rootProps.accordion);
-      const getCollapse = computed(() => rootProps.collapse);
-      const getTheme = computed(() => rootProps.theme);
-
-      const getOverlayStyle = computed((): CSSProperties => {
-        return {
-          minWidth: '200px',
-        };
-      });
-
-      const getIsOpend = computed(() => {
-        const name = props.name;
-        if (unref(getCollapse)) {
-          return parentGetOpenNames().includes(name);
-        }
-        return state.opened;
-      });
-
-      const getSubClass = computed(() => {
-        const isActive = rootProps.activeSubMenuNames.includes(props.name);
-        return [
-          `${prefixCls}-submenu-title`,
-          {
-            [`${prefixCls}-submenu-active`]: isActive,
-            [`${prefixCls}-submenu-active-border`]: isActive && level === 0,
-            [`${prefixCls}-submenu-collapse`]: unref(getCollapse) && level === 0,
-          },
-        ];
-      });
-
-      function getEvents(deep: boolean) {
-        if (!unref(getCollapse)) {
-          return {};
-        }
-        return {
-          onMouseenter: handleMouseenter,
-          onMouseleave: () => handleMouseleave(deep),
-        };
-      }
-
-      function handleClick() {
-        const { disabled } = props;
-        if (disabled || unref(getCollapse)) return;
-        const opened = state.opened;
-
-        if (unref(getAccordion)) {
-          const { uidList } = getParentList();
-          rootMenuEmitter.emit('on-update-opened', {
-            opend: false,
-            parent: instance?.parent,
-            uidList: uidList,
-          });
-        } else {
-          rootMenuEmitter.emit('open-name-change', {
-            name: props.name,
-            opened: !opened,
-          });
-        }
-        state.opened = !opened;
-      }
-
-      function handleMouseenter() {
-        const disabled = props.disabled;
-        if (disabled) return;
-
-        subMenuEmitter.emit('submenu:mouse-enter-child');
-
-        const index = parentGetOpenNames().findIndex((item) => item === props.name);
-
-        sliceIndex(index);
-
-        const isRoot = level === 0 && parentGetOpenNames().length === 2;
-        if (isRoot) {
-          parentRemoveAll();
-        }
-        data.isChild = parentGetOpenNames().includes(props.name);
-        clearTimeout(data.timeout!);
-        data.timeout = setTimeout(() => {
-          parentAddSubmenu(props.name);
-        }, DELAY);
-      }
-
-      function handleMouseleave(deepDispatch = false) {
-        const parentName = getParentMenu.value?.props.name;
-        if (!parentName) {
-          isRemoveAllPopup.value = true;
-        }
-
-        if (parentGetOpenNames().slice(-1)[0] === props.name) {
-          data.isChild = false;
-        }
-
-        subMenuEmitter.emit('submenu:mouse-leave-child');
-        if (data.timeout) {
-          clearTimeout(data.timeout!);
-          data.timeout = setTimeout(() => {
-            if (isRemoveAllPopup.value) {
-              parentRemoveAll();
-            } else if (!data.mouseInChild) {
-              parentRemoveSubmenu(props.name);
-            }
-          }, DELAY);
-        }
-        if (deepDispatch) {
-          if (getParentSubMenu.value) {
-            parentHandleMouseleave?.(true);
-          }
-        }
-      }
-
-      onBeforeMount(() => {
-        subMenuEmitter.on('submenu:mouse-enter-child', () => {
-          data.mouseInChild = true;
-          isRemoveAllPopup.value = false;
-          clearTimeout(data.timeout!);
-        });
-        subMenuEmitter.on('submenu:mouse-leave-child', () => {
-          if (data.isChild) return;
-          data.mouseInChild = false;
-          clearTimeout(data.timeout!);
-        });
-
-        rootMenuEmitter.on('on-update-opened', (data: boolean | (string | number)[] | Recordable) => {
-          if (unref(getCollapse)) return;
-          if (isBoolean(data)) {
-            state.opened = data;
-            return;
-          }
-          if (isObject(data) && rootProps.accordion) {
-            const { opend, parent, uidList } = data as Recordable;
-            if (parent === instance?.parent) {
-              state.opened = opend;
-            } else if (!uidList.includes(instance?.uid)) {
-              state.opened = false;
-            }
-            return;
-          }
-
-          if (props.name && Array.isArray(data)) {
-            state.opened = (data as (string | number)[]).includes(props.name);
-          }
-        });
-
-        rootMenuEmitter.on('on-update-active-name:submenu', (data: number[]) => {
-          if (instance?.uid) {
-            state.active = data.includes(instance?.uid);
-          }
-        });
-      });
-
-      function handleVisibleChange(visible: boolean) {
-        state.opened = visible;
-      }
-
-      // provide
-      provide<SubMenuProvider>(`subMenu:${instance?.uid}`, {
-        addSubMenu: parentAddSubmenu,
-        removeSubMenu: parentRemoveSubmenu,
-        getOpenNames: parentGetOpenNames,
-        removeAll: parentRemoveAll,
-        isRemoveAllPopup,
-        sliceIndex,
-        level: level + 1,
-        handleMouseleave,
-        props: rootProps,
-      });
-
-      return {
-        getClass,
-        prefixCls,
-        getCollapse,
-        getItemStyle,
-        handleClick,
-        handleVisibleChange,
-        getParentSubMenu,
-        getOverlayStyle,
-        getTheme,
-        getIsOpend,
-        getEvents,
-        getSubClass,
-        ...toRefs(state),
-        ...toRefs(data),
-      };
-    },
-  });
-</script>
diff --git a/src/components/SimpleMenu/src/components/menu.less b/src/components/SimpleMenu/src/components/menu.less
deleted file mode 100644
index 84ff2da..0000000
--- a/src/components/SimpleMenu/src/components/menu.less
+++ /dev/null
@@ -1,309 +0,0 @@
-@menu-prefix-cls: ~'@{namespace}-menu';
-@menu-popup-prefix-cls: ~'@{namespace}-menu-popup';
-@submenu-popup-prefix-cls: ~'@{namespace}-menu-submenu-popup';
-
-@transition-time: 0.2s;
-@menu-dark-subsidiary-color: rgba(255, 255, 255, 0.7);
-
-.light-border {
-  &::after {
-    position: absolute;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    display: block;
-    width: 2px;
-    background-color: @primary-color;
-    content: '';
-  }
-}
-
-.@{menu-prefix-cls}-menu-popover {
-  .ant-popover-arrow {
-    display: none;
-  }
-
-  .ant-popover-inner-content {
-    padding: 0;
-  }
-
-  .@{menu-prefix-cls} {
-    &-opened > * > &-submenu-title-icon {
-      transform: translateY(-50%) rotate(90deg) !important;
-    }
-
-    &-item,
-    &-submenu-title {
-      position: relative;
-      z-index: 1;
-      padding: 12px 20px;
-      color: @menu-dark-subsidiary-color;
-      cursor: pointer;
-      transition: all @transition-time @ease-in-out;
-
-      &-icon {
-        position: absolute;
-        top: 50%;
-        right: 18px;
-        transform: translateY(-50%) rotate(-90deg);
-        transition: transform @transition-time @ease-in-out;
-      }
-    }
-
-    &-dark {
-      .@{menu-prefix-cls}-item,
-      .@{menu-prefix-cls}-submenu-title {
-        color: @menu-dark-subsidiary-color;
-        // background: @menu-dark-active-bg;
-
-        &:hover {
-          color: #fff;
-        }
-
-        &-selected {
-          color: #fff;
-          background-color: @primary-color !important;
-        }
-      }
-    }
-
-    &-light {
-      .@{menu-prefix-cls}-item,
-      .@{menu-prefix-cls}-submenu-title {
-        color: @text-color-base;
-
-        &:hover {
-          color: @primary-color;
-        }
-
-        &-selected {
-          z-index: 2;
-          color: @primary-color;
-          background-color: fade(@primary-color, 10);
-
-          .light-border();
-        }
-      }
-    }
-  }
-}
-
-.content();
-.content() {
-  .@{menu-prefix-cls} {
-    position: relative;
-    display: block;
-    width: 100%;
-    padding: 0;
-    margin: 0;
-    font-size: @font-size-base;
-    color: @text-color-base;
-    list-style: none;
-    outline: none;
-
-    // .collapse-transition {
-    //   transition: @transition-time height ease-in-out, @transition-time padding-top ease-in-out,
-    //     @transition-time padding-bottom ease-in-out;
-    // }
-
-    &-light {
-      background-color: #fff;
-
-      .@{menu-prefix-cls}-submenu-active {
-        color: @primary-color !important;
-
-        &-border {
-          .light-border();
-        }
-      }
-    }
-
-    &-dark {
-      .@{menu-prefix-cls}-submenu-active {
-        color: #fff !important;
-      }
-    }
-
-    &-item {
-      position: relative;
-      z-index: 1;
-      display: flex;
-      font-size: @font-size-base;
-      color: inherit;
-      list-style: none;
-      cursor: pointer;
-      outline: none;
-      align-items: center;
-
-      &:hover,
-      &:active {
-        color: inherit;
-      }
-    }
-
-    &-item > i {
-      margin-right: 6px;
-    }
-
-    &-submenu-title > i,
-    &-submenu-title span > i {
-      margin-right: 8px;
-    }
-
-    // vertical
-    &-vertical &-item,
-    &-vertical &-submenu-title {
-      position: relative;
-      z-index: 1;
-      padding: 14px 24px;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      white-space: nowrap;
-      cursor: pointer;
-
-      &:hover {
-        color: @primary-color;
-      }
-
-      .@{menu-prefix-cls}-tooltip {
-        width: calc(100% - 0px);
-        padding: 12px 0;
-        text-align: center;
-      }
-      .@{menu-prefix-cls}-submenu-popup {
-        padding: 12px 0;
-      }
-    }
-
-    &-vertical &-submenu-collapse {
-      .@{submenu-popup-prefix-cls} {
-        display: flex;
-        justify-content: center;
-        align-items: center;
-      }
-      .@{menu-prefix-cls}-submenu-collapsed-show-tit {
-        flex-direction: column;
-      }
-    }
-
-    &-vertical&-collapse &-item,
-    &-vertical&-collapse &-submenu-title {
-      padding: 0 0;
-    }
-
-    &-vertical &-submenu-title-icon {
-      position: absolute;
-      top: 50%;
-      right: 18px;
-      transform: translateY(-50%);
-    }
-
-    &-submenu-title-icon {
-      transition: transform @transition-time @ease-in-out;
-    }
-
-    &-vertical &-opened > * > &-submenu-title-icon {
-      transform: translateY(-50%) rotate(180deg);
-    }
-
-    &-vertical &-submenu {
-      &-nested {
-        padding-left: 20px;
-      }
-      .@{menu-prefix-cls}-item {
-        padding-left: 43px;
-      }
-    }
-
-    &-light&-vertical &-item {
-      &-active:not(.@{menu-prefix-cls}-submenu) {
-        z-index: 2;
-        color: @primary-color;
-        background-color: fade(@primary-color, 10);
-
-        .light-border();
-      }
-      &-active.@{menu-prefix-cls}-submenu {
-        color: @primary-color;
-      }
-    }
-
-    &-light&-vertical&-collapse {
-      > li.@{menu-prefix-cls}-item-active,
-      .@{menu-prefix-cls}-submenu-active {
-        position: relative;
-        background-color: fade(@primary-color, 5);
-
-        &::after {
-          display: none;
-        }
-
-        &::before {
-          position: absolute;
-          top: 0;
-          left: 0;
-          width: 3px;
-          height: 100%;
-          background-color: @primary-color;
-          content: '';
-        }
-      }
-    }
-
-    &-dark&-vertical &-item,
-    &-dark&-vertical &-submenu-title {
-      color: @menu-dark-subsidiary-color;
-      &-active:not(.@{menu-prefix-cls}-submenu) {
-        color: #fff !important;
-        background-color: @primary-color !important;
-      }
-
-      &:hover {
-        color: #fff;
-      }
-    }
-
-    &-dark&-vertical&-collapse {
-      > li.@{menu-prefix-cls}-item-active,
-      .@{menu-prefix-cls}-submenu-active {
-        position: relative;
-        color: #fff !important;
-        background-color: @sider-dark-darken-bg-color !important;
-
-        &::before {
-          position: absolute;
-          top: 0;
-          left: 0;
-          width: 3px;
-          height: 100%;
-          background-color: @primary-color;
-          content: '';
-        }
-
-        .@{menu-prefix-cls}-submenu-collapse {
-          background-color: transparent;
-        }
-      }
-    }
-
-    &-dark&-vertical &-submenu &-item {
-      &-active,
-      &-active:hover {
-        color: #fff;
-        border-right: none;
-      }
-    }
-
-    &-dark&-vertical &-child-item-active > &-submenu-title {
-      color: #fff;
-    }
-
-    &-dark&-vertical &-opened {
-      .@{menu-prefix-cls}-submenu-has-parent-submenu {
-        .@{menu-prefix-cls}-submenu-title {
-          background-color: transparent;
-        }
-      }
-    }
-  }
-}
diff --git a/src/components/SimpleMenu/src/components/types.ts b/src/components/SimpleMenu/src/components/types.ts
deleted file mode 100644
index d828e89..0000000
--- a/src/components/SimpleMenu/src/components/types.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Ref } from 'vue';
-
-export interface Props {
-  theme: string;
-  activeName?: string | number | undefined;
-  openNames: string[];
-  accordion: boolean;
-  width: string;
-  collapsedWidth: string;
-  indentSize: number;
-  collapse: boolean;
-  activeSubMenuNames: (string | number)[];
-}
-
-export interface SubMenuProvider {
-  addSubMenu: (name: string | number, update?: boolean) => void;
-  removeSubMenu: (name: string | number, update?: boolean) => void;
-  removeAll: () => void;
-  sliceIndex: (index: number) => void;
-  isRemoveAllPopup: Ref<boolean>;
-  getOpenNames: () => (string | number)[];
-  handleMouseleave?: Fn;
-  level: number;
-  props: Props;
-}
diff --git a/src/components/SimpleMenu/src/components/useMenu.ts b/src/components/SimpleMenu/src/components/useMenu.ts
deleted file mode 100644
index 8830559..0000000
--- a/src/components/SimpleMenu/src/components/useMenu.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-import { computed, ComponentInternalInstance, unref } from 'vue';
-import type { CSSProperties } from 'vue';
-
-export function useMenuItem(instance: ComponentInternalInstance | null) {
-  const getParentMenu = computed(() => {
-    return findParentMenu(['Menu', 'SubMenu']);
-  });
-
-  const getParentRootMenu = computed(() => {
-    return findParentMenu(['Menu']);
-  });
-
-  const getParentSubMenu = computed(() => {
-    return findParentMenu(['SubMenu']);
-  });
-
-  const getItemStyle = computed((): CSSProperties => {
-    let parent = instance?.parent;
-    if (!parent) return {};
-    const indentSize = (unref(getParentRootMenu)?.props.indentSize as number) ?? 20;
-    let padding = indentSize;
-
-    if (unref(getParentRootMenu)?.props.collapse) {
-      padding = indentSize;
-    } else {
-      while (parent && parent.type.name !== 'Menu') {
-        if (parent.type.name === 'SubMenu') {
-          padding += indentSize;
-        }
-        parent = parent.parent;
-      }
-    }
-    return { paddingLeft: padding + 'px' };
-  });
-
-  function findParentMenu(name: string[]) {
-    let parent = instance?.parent;
-    if (!parent) return null;
-    while (parent && name.indexOf(parent.type.name!) === -1) {
-      parent = parent.parent;
-    }
-    return parent;
-  }
-
-  function getParentList() {
-    let parent = instance;
-    if (!parent)
-      return {
-        uidList: [],
-        list: [],
-      };
-    const ret: any[] = [];
-    while (parent && parent.type.name !== 'Menu') {
-      if (parent.type.name === 'SubMenu') {
-        ret.push(parent);
-      }
-      parent = parent.parent;
-    }
-    return {
-      uidList: ret.map((item) => item.uid),
-      list: ret,
-    };
-  }
-
-  function getParentInstance(instance: ComponentInternalInstance, name = 'SubMenu') {
-    let parent = instance.parent;
-    while (parent) {
-      if (parent.type.name !== name) {
-        return parent;
-      }
-      parent = parent.parent;
-    }
-    return parent;
-  }
-
-  return {
-    getParentMenu,
-    getParentInstance,
-    getParentRootMenu,
-    getParentList,
-    getParentSubMenu,
-    getItemStyle,
-  };
-}
diff --git a/src/components/SimpleMenu/src/components/useSimpleMenuContext.ts b/src/components/SimpleMenu/src/components/useSimpleMenuContext.ts
deleted file mode 100644
index f3d8100..0000000
--- a/src/components/SimpleMenu/src/components/useSimpleMenuContext.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import type { InjectionKey, Ref } from 'vue';
-import type { Emitter } from '/@/utils/mitt';
-import { createContext, useContext } from '/@/hooks/core/useContext';
-
-export interface SimpleRootMenuContextProps {
-  rootMenuEmitter: Emitter;
-  activeName: Ref<string | number>;
-}
-
-const key: InjectionKey<SimpleRootMenuContextProps> = Symbol();
-
-export function createSimpleRootMenuContext(context: SimpleRootMenuContextProps) {
-  return createContext<SimpleRootMenuContextProps>(context, key, { readonly: false, native: true });
-}
-
-export function useSimpleRootMenuContext() {
-  return useContext<SimpleRootMenuContextProps>(key);
-}
diff --git a/src/components/SimpleMenu/src/index.less b/src/components/SimpleMenu/src/index.less
deleted file mode 100644
index 4f9c9ce..0000000
--- a/src/components/SimpleMenu/src/index.less
+++ /dev/null
@@ -1,77 +0,0 @@
-@simple-prefix-cls: ~'@{namespace}-simple-menu';
-@prefix-cls: ~'@{namespace}-menu';
-
-.@{prefix-cls} {
-  &-dark&-vertical .@{simple-prefix-cls}__parent {
-    background-color: @sider-dark-bg-color;
-    > .@{prefix-cls}-submenu-title {
-      background-color: @sider-dark-bg-color;
-    }
-  }
-
-  &-dark&-vertical .@{simple-prefix-cls}__children,
-  &-dark&-popup .@{simple-prefix-cls}__children {
-    background-color: @sider-dark-lighten-bg-color;
-    > .@{prefix-cls}-submenu-title {
-      background-color: @sider-dark-lighten-bg-color;
-    }
-  }
-
-  .collapse-title {
-    overflow: hidden;
-    font-size: 12px;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-  }
-}
-
-.@{simple-prefix-cls} {
-  &-sub-title {
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    transition: all 0.3s;
-  }
-
-  &-tag {
-    position: absolute;
-    top: calc(50% - 8px);
-    right: 30px;
-    display: inline-block;
-    padding: 2px 3px;
-    margin-right: 4px;
-    font-size: 10px;
-    line-height: 14px;
-    color: #fff;
-    border-radius: 2px;
-
-    &--collapse {
-      top: 6px !important;
-      right: 2px;
-    }
-
-    &--dot {
-      top: calc(50% - 2px);
-      width: 6px;
-      height: 6px;
-      padding: 0;
-      border-radius: 50%;
-    }
-
-    &--primary {
-      background-color: @primary-color;
-    }
-
-    &--error {
-      background-color: @error-color;
-    }
-
-    &--success {
-      background-color: @success-color;
-    }
-
-    &--warn {
-      background-color: @warning-color;
-    }
-  }
-}
diff --git a/src/components/SimpleMenu/src/types.ts b/src/components/SimpleMenu/src/types.ts
deleted file mode 100644
index 2e292d4..0000000
--- a/src/components/SimpleMenu/src/types.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export interface MenuState {
-  activeName: string;
-  openNames: string[];
-  activeSubMenuNames: string[];
-}
diff --git a/src/components/SimpleMenu/src/useOpenKeys.ts b/src/components/SimpleMenu/src/useOpenKeys.ts
deleted file mode 100644
index c38b92c..0000000
--- a/src/components/SimpleMenu/src/useOpenKeys.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import type { Menu as MenuType } from '/@/router/types';
-import type { MenuState } from './types';
-
-import { computed, Ref, toRaw } from 'vue';
-
-import { unref } from 'vue';
-import { uniq } from 'lodash-es';
-import { getAllParentPath } from '/@/router/helper/menuHelper';
-
-import { useTimeoutFn } from '/@/hooks/core/useTimeout';
-import { useDebounceFn } from '@vueuse/core';
-
-export function useOpenKeys(menuState: MenuState, menus: Ref<MenuType[]>, accordion: Ref<boolean>, mixSider: Ref<boolean>, collapse: Ref<boolean>) {
-  const debounceSetOpenKeys = useDebounceFn(setOpenKeys, 50);
-  async function setOpenKeys(path: string) {
-    const native = !mixSider.value;
-    const menuList = toRaw(menus.value);
-    useTimeoutFn(
-      () => {
-        if (menuList?.length === 0) {
-          menuState.activeSubMenuNames = [];
-          menuState.openNames = [];
-          return;
-        }
-        const keys = getAllParentPath(menuList, path);
-
-        if (!unref(accordion)) {
-          menuState.openNames = uniq([...menuState.openNames, ...keys]);
-        } else {
-          menuState.openNames = keys;
-        }
-        menuState.activeSubMenuNames = menuState.openNames;
-      },
-      30,
-      native
-    );
-  }
-
-  const getOpenKeys = computed(() => {
-    return unref(collapse) ? [] : menuState.openNames;
-  });
-
-  return { setOpenKeys: debounceSetOpenKeys, getOpenKeys };
-}
diff --git a/src/components/StrengthMeter/index.ts b/src/components/StrengthMeter/index.ts
deleted file mode 100644
index 9763afa..0000000
--- a/src/components/StrengthMeter/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { withInstall } from '/@/utils';
-import strengthMeter from './src/StrengthMeter.vue';
-
-export const StrengthMeter = withInstall(strengthMeter);
diff --git a/src/components/StrengthMeter/src/StrengthMeter.vue b/src/components/StrengthMeter/src/StrengthMeter.vue
deleted file mode 100644
index ffb6548..0000000
--- a/src/components/StrengthMeter/src/StrengthMeter.vue
+++ /dev/null
@@ -1,135 +0,0 @@
-<template>
-  <div :class="prefixCls" class="relative">
-    <InputPassword v-if="showInput" v-bind="$attrs" allowClear :value="innerValueRef" @change="handleChange" :disabled="disabled">
-      <template #[item]="data" v-for="item in Object.keys($slots)">
-        <slot :name="item" v-bind="data || {}"></slot>
-      </template>
-    </InputPassword>
-    <div :class="`${prefixCls}-bar`">
-      <div :class="`${prefixCls}-bar--fill`" :data-score="getPasswordStrength"></div>
-    </div>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent, computed, ref, watch, unref, watchEffect } from 'vue';
-  import { Input } from 'ant-design-vue';
-  import { zxcvbn } from '@zxcvbn-ts/core';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { propTypes } from '/@/utils/propTypes';
-
-  export default defineComponent({
-    name: 'StrengthMeter',
-    components: { InputPassword: Input.Password },
-    props: {
-      value: propTypes.string,
-      showInput: propTypes.bool.def(true),
-      disabled: propTypes.bool,
-    },
-    emits: ['score-change', 'change'],
-    setup(props, { emit }) {
-      const innerValueRef = ref('');
-      const { prefixCls } = useDesign('strength-meter');
-
-      const getPasswordStrength = computed(() => {
-        const { disabled } = props;
-        if (disabled) return -1;
-        const innerValue = unref(innerValueRef);
-        const score = innerValue ? zxcvbn(unref(innerValueRef)).score : -1;
-        emit('score-change', score);
-        return score;
-      });
-
-      function handleChange(e: ChangeEvent) {
-        innerValueRef.value = e.target.value;
-      }
-
-      watchEffect(() => {
-        innerValueRef.value = props.value || '';
-      });
-
-      watch(
-        () => unref(innerValueRef),
-        (val) => {
-          emit('change', val);
-        }
-      );
-
-      return {
-        getPasswordStrength,
-        handleChange,
-        prefixCls,
-        innerValueRef,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-strength-meter';
-
-  .@{prefix-cls} {
-    &-bar {
-      position: relative;
-      height: 6px;
-      margin: 10px auto 6px;
-      background-color: @disabled-color;
-      border-radius: 6px;
-
-      &::before,
-      &::after {
-        position: absolute;
-        z-index: 10;
-        display: block;
-        width: 20%;
-        height: inherit;
-        background-color: transparent;
-        border-color: @white;
-        border-style: solid;
-        border-width: 0 5px 0 5px;
-        content: '';
-      }
-
-      &::before {
-        left: 20%;
-      }
-
-      &::after {
-        right: 20%;
-      }
-
-      &--fill {
-        position: absolute;
-        width: 0;
-        height: inherit;
-        background-color: transparent;
-        border-radius: inherit;
-        transition: width 0.5s ease-in-out, background 0.25s;
-
-        &[data-score='0'] {
-          width: 20%;
-          background-color: darken(@error-color, 10%);
-        }
-
-        &[data-score='1'] {
-          width: 40%;
-          background-color: @error-color;
-        }
-
-        &[data-score='2'] {
-          width: 60%;
-          background-color: @warning-color;
-        }
-
-        &[data-score='3'] {
-          width: 80%;
-          background-color: fade(@success-color, 50%);
-        }
-
-        &[data-score='4'] {
-          width: 100%;
-          background-color: @success-color;
-        }
-      }
-    }
-  }
-</style>
diff --git a/src/components/Table/index.ts b/src/components/Table/index.ts
deleted file mode 100644
index 7fe08c9..0000000
--- a/src/components/Table/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export { default as BasicTable } from './src/BasicTable.vue';
-export { default as TableAction } from './src/components/TableAction.vue';
-export { default as EditTableHeaderIcon } from './src/components/EditTableHeaderIcon.vue';
-export { default as TableImg } from './src/components/TableImg.vue';
-export * from './src/types/table';
-export * from './src/types/pagination';
-export * from './src/types/tableAction';
-export { useTable } from './src/hooks/useTable';
-export type { FormSchema, FormProps } from '/@/components/Form/src/types/form';
-export type { EditRecordRow } from './src/components/editable';
diff --git a/src/components/Table/src/BasicTable.vue b/src/components/Table/src/BasicTable.vue
deleted file mode 100644
index 69b6246..0000000
--- a/src/components/Table/src/BasicTable.vue
+++ /dev/null
@@ -1,425 +0,0 @@
-<template>
-  <div ref="wrapRef" :class="getWrapperClass">
-    <BasicForm
-      submitOnReset
-      v-bind="getFormProps"
-      v-if="getBindValues.useSearchForm"
-      :tableAction="tableAction"
-      @register="registerForm"
-      @submit="handleSearchInfoChange"
-      @advanced-change="redoHeight"
-    >
-      <template #[replaceFormSlotKey(item)]="data" v-for="item in getFormSlotKeys">
-        <slot :name="item" v-bind="data || {}"></slot>
-      </template>
-    </BasicForm>
-
-    <!-- antd v3 鍗囩骇鍏煎锛岄樆姝㈡暟鎹殑鏀堕泦锛岄槻姝㈡帶鍒跺彴鎶ラ敊 -->
-    <!-- https://antdv.com/docs/vue/migration-v3-cn -->
-    <a-form-item-rest>
-      <Table ref="tableElRef" v-bind="getBindValues" :rowClassName="getRowClassName" v-show="getEmptyDataIsShowTable" @resizeColumn="handleResizeColumn" @change="handleTableChange">
-        <template #[item]="data" v-for="item in Object.keys($slots)" :key="item">
-          <slot :name="item" v-bind="data || {}"></slot>
-        </template>
-        <template #headerCell="{ column }">
-          <HeaderCell :column="column" />
-        </template>
-        <!-- 澧炲姞瀵筧ntdv3.x鍏煎 -->
-        <template #bodyCell="data">
-          <slot name="bodyCell" v-bind="data || {}"></slot>
-        </template>
-      </Table>
-    </a-form-item-rest>
-  </div>
-</template>
-<script lang="ts">
-  import type { BasicTableProps, TableActionType, SizeType, ColumnChangeParam } from './types/table';
-
-  import { defineComponent, ref, computed, unref, toRaw, inject, watchEffect } from 'vue';
-  import { Table } from 'ant-design-vue';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { PageWrapperFixedHeightKey } from '/@/components/Page';
-  import expandIcon from './components/ExpandIcon';
-  import HeaderCell from './components/HeaderCell.vue';
-  import { InnerHandlers } from './types/table';
-  import { usePagination } from './hooks/usePagination';
-  import { useColumns } from './hooks/useColumns';
-  import { useDataSource } from './hooks/useDataSource';
-  import { useLoading } from './hooks/useLoading';
-  import { useRowSelection } from './hooks/useRowSelection';
-  import { useTableScroll } from './hooks/useTableScroll';
-  import { useCustomRow } from './hooks/useCustomRow';
-  import { useTableStyle } from './hooks/useTableStyle';
-  import { useTableHeader } from './hooks/useTableHeader';
-  import { useTableExpand } from './hooks/useTableExpand';
-  import { createTableContext } from './hooks/useTableContext';
-  import { useTableFooter } from './hooks/useTableFooter';
-  import { useTableForm } from './hooks/useTableForm';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  import { omit } from 'lodash-es';
-  import { basicProps } from './props';
-  import { isFunction } from '/@/utils/is';
-  import { warn } from '/@/utils/log';
-
-  export default defineComponent({
-    components: {
-      Table,
-      BasicForm,
-      HeaderCell,
-    },
-    props: basicProps,
-    emits: [
-      'fetch-success',
-      'fetch-error',
-      'selection-change',
-      'register',
-      'row-click',
-      'row-dbClick',
-      'row-contextmenu',
-      'row-mouseenter',
-      'row-mouseleave',
-      'edit-end',
-      'edit-cancel',
-      'edit-row-end',
-      'edit-change',
-      'expanded-rows-change',
-      'change',
-      'columns-change',
-      'table-redo',
-    ],
-    setup(props, { attrs, emit, slots, expose }) {
-      const tableElRef = ref(null);
-      const tableData = ref<Recordable[]>([]);
-
-      const wrapRef = ref(null);
-      const innerPropsRef = ref<Partial<BasicTableProps>>();
-
-      const { prefixCls } = useDesign('basic-table');
-      const [registerForm, formActions] = useForm();
-
-      const getProps = computed(() => {
-        return { ...props, ...unref(innerPropsRef) } as BasicTableProps;
-      });
-
-      const isFixedHeightPage = inject(PageWrapperFixedHeightKey, false);
-      watchEffect(() => {
-        unref(isFixedHeightPage) &&
-          props.canResize &&
-          warn("'canResize' of BasicTable may not work in PageWrapper with 'fixedHeight' (especially in hot updates)");
-      });
-
-      const { getLoading, setLoading } = useLoading(getProps);
-      const { getPaginationInfo, getPagination, setPagination, setShowPagination, getShowPagination } = usePagination(getProps);
-
-      const { getRowSelection, getRowSelectionRef, getSelectRows, clearSelectedRowKeys, getSelectRowKeys, deleteSelectRowByKey, setSelectedRowKeys } =
-        useRowSelection(getProps, tableData, emit);
-
-      const {
-        handleTableChange: onTableChange,
-        getDataSourceRef,
-        getDataSource,
-        getRawDataSource,
-        setTableData,
-        updateTableDataRecord,
-        deleteTableDataRecord,
-        insertTableDataRecord,
-        findTableDataRecord,
-        fetch,
-        getRowKey,
-        reload,
-        getAutoCreateKey,
-        updateTableData,
-      } = useDataSource(
-        getProps,
-        {
-          tableData,
-          getPaginationInfo,
-          setLoading,
-          setPagination,
-          validate: formActions.validate,
-          clearSelectedRowKeys,
-        },
-        emit
-      );
-
-      function handleTableChange(...args) {
-        onTableChange.call(undefined, ...args);
-        emit('change', ...args);
-        // 瑙e喅閫氳繃useTable娉ㄥ唽onChange鏃朵笉璧蜂綔鐢ㄧ殑闂
-        const { onChange } = unref(getProps);
-        onChange && isFunction(onChange) && onChange.call(undefined, ...args);
-      }
-
-      const { getViewColumns, getColumns, setCacheColumnsByField, setColumns, getColumnsRef, getCacheColumns } = useColumns(
-        getProps,
-        getPaginationInfo
-      );
-
-      const { getScrollRef, redoHeight } = useTableScroll(getProps, tableElRef, getColumnsRef, getRowSelectionRef, getDataSourceRef);
-
-      const { customRow } = useCustomRow(getProps, {
-        setSelectedRowKeys,
-        getSelectRowKeys,
-        clearSelectedRowKeys,
-        getAutoCreateKey,
-        emit,
-      });
-
-      const { getRowClassName } = useTableStyle(getProps, prefixCls);
-
-      const { getExpandOption, expandAll, collapseAll } = useTableExpand(getProps, tableData, emit);
-
-      const handlers: InnerHandlers = {
-        onColumnsChange: (data: ColumnChangeParam[]) => {
-          emit('columns-change', data);
-          // support useTable
-          unref(getProps).onColumnsChange?.(data);
-        },
-      };
-
-      const { getHeaderProps } = useTableHeader(getProps, slots, handlers);
-
-      const { getFooterProps } = useTableFooter(getProps, getScrollRef, tableElRef, getDataSourceRef);
-
-      const { getFormProps, replaceFormSlotKey, getFormSlotKeys, handleSearchInfoChange } = useTableForm(getProps, slots, fetch, getLoading);
-
-      const getBindValues = computed(() => {
-        const dataSource = unref(getDataSourceRef);
-        let propsData: Recordable = {
-          // ...(dataSource.length === 0 ? { getPopupContainer: () => document.body } : {}),
-          ...attrs,
-          customRow,
-          //鏍戝垪琛ㄥ睍寮�浣跨敤AntDesignVue榛樿鐨勫姞鍑忓浘鏍� author:scott date:20210914
-          //expandIcon: slots.expandIcon ? null : expandIcon(),
-          ...unref(getProps),
-          ...unref(getHeaderProps),
-          scroll: unref(getScrollRef),
-          loading: unref(getLoading),
-          tableLayout: 'fixed',
-          rowSelection: unref(getRowSelectionRef),
-          rowKey: unref(getRowKey),
-          columns: toRaw(unref(getViewColumns)),
-          pagination: toRaw(unref(getPaginationInfo)),
-          dataSource,
-          footer: unref(getFooterProps),
-          ...unref(getExpandOption),
-        };
-
-        //update-begin---author:wangshuai ---date:20230214  for锛歔QQYUN-4237]浠g爜鐢熸垚 鍐呭祵瀛愯〃妯″紡 娌℃湁婊氬姩鏉�------------
-        //棰濆鐨勫睍寮�琛屽瓨鍦ㄦ彃妲芥椂浼氬皢婊氬姩绉婚櫎鎺�,娉ㄩ噴鎺�
-        /*if (slots.expandedRowRender) {
-          propsData = omit(propsData, 'scroll');
-        }*/
-        //update-end---author:wangshuai ---date:20230214  for锛歔QQYUN-4237]浠g爜鐢熸垚 鍐呭祵瀛愯〃妯″紡 娌℃湁婊氬姩鏉�------------ 
-
-        propsData = omit(propsData, ['class', 'onChange']);
-        return propsData;
-      });
-
-      const getWrapperClass = computed(() => {
-        const values = unref(getBindValues);
-        return [
-          prefixCls,
-          attrs.class,
-          {
-            [`${prefixCls}-form-container`]: values.useSearchForm,
-            [`${prefixCls}--inset`]: values.inset,
-          },
-        ];
-      });
-
-      const getEmptyDataIsShowTable = computed(() => {
-        const { emptyDataIsShowTable, useSearchForm } = unref(getProps);
-        if (emptyDataIsShowTable || !useSearchForm) {
-          return true;
-        }
-        return !!unref(getDataSourceRef).length;
-      });
-
-      function setProps(props: Partial<BasicTableProps>) {
-        innerPropsRef.value = { ...unref(innerPropsRef), ...props };
-      }
-
-      const tableAction: TableActionType = {
-        reload,
-        getSelectRows,
-        clearSelectedRowKeys,
-        getSelectRowKeys,
-        deleteSelectRowByKey,
-        setPagination,
-        setTableData,
-        updateTableDataRecord,
-        deleteTableDataRecord,
-        insertTableDataRecord,
-        findTableDataRecord,
-        redoHeight,
-        setSelectedRowKeys,
-        setColumns,
-        setLoading,
-        getDataSource,
-        getRawDataSource,
-        setProps,
-        getRowSelection,
-        getPaginationRef: getPagination,
-        getColumns,
-        getCacheColumns,
-        emit,
-        updateTableData,
-        setShowPagination,
-        getShowPagination,
-        setCacheColumnsByField,
-        expandAll,
-        collapseAll,
-        getSize: () => {
-          return unref(getBindValues).size as SizeType;
-        },
-      };
-      createTableContext({ ...tableAction, wrapRef, getBindValues });
-
-      expose(tableAction);
-
-      emit('register', tableAction, formActions);
-
-      return {
-        tableElRef,
-        getBindValues,
-        getLoading,
-        registerForm,
-        handleSearchInfoChange,
-        getEmptyDataIsShowTable,
-        handleTableChange,
-        getRowClassName,
-        wrapRef,
-        tableAction,
-        redoHeight,
-        handleResizeColumn: (w, col) => {
-          col.width = w;
-        },
-        getFormProps: getFormProps as any,
-        replaceFormSlotKey,
-        getFormSlotKeys,
-        getWrapperClass,
-        columns: getViewColumns,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @border-color: #cecece4d;
-
-  @prefix-cls: ~'@{namespace}-basic-table';
-
-  [data-theme='dark'] {
-    .ant-table-tbody > tr:hover.ant-table-row-selected > td,
-    .ant-table-tbody > tr.ant-table-row-selected td {
-      background-color: #262626;
-    }
-
-    .@{prefix-cls} {
-      //琛ㄦ牸閫夋嫨宸ュ叿鏍忔牱寮�
-      .alert {
-        background-color: #323232;
-        border-color: #424242;
-      }
-    }
-  }
-
-  .@{prefix-cls} {
-    max-width: 100%;
-
-    &-row__striped {
-      td {
-        background-color: @app-content-background;
-      }
-    }
-
-    &-form-container {
-      padding: 10px;
-
-      .ant-form {
-        padding: 12px 10px 6px 10px;
-        margin-bottom: 8px;
-        background-color: @component-background;
-        border-radius: 2px;
-      }
-    }
-
-    .ant-tag {
-      margin-right: 0;
-    }
-
-    .ant-table-wrapper {
-      padding: 6px;
-      background-color: @component-background;
-      border-radius: 2px;
-
-      .ant-table-title {
-        min-height: 40px;
-        padding: 0 0 8px 0 !important;
-      }
-
-      .ant-table.ant-table-bordered .ant-table-title {
-        border: none !important;
-      }
-    }
-
-    .ant-table {
-      width: 100%;
-      overflow-x: hidden;
-
-      &-title {
-        display: flex;
-        padding: 8px 6px;
-        border-bottom: none;
-        justify-content: space-between;
-        align-items: center;
-      }
-      //瀹氫箟琛岄鑹�
-      .trcolor {
-        background-color: rgba(255, 192, 203, 0.31);
-        color: red;
-      }
-
-      //.ant-table-tbody > tr.ant-table-row-selected td {
-      //background-color: fade(@primary-color, 8%) !important;
-      //}
-    }
-
-    .ant-pagination {
-      margin: 10px 0 0 0;
-    }
-
-    .ant-table-footer {
-      padding: 0;
-
-      .ant-table-wrapper {
-        padding: 0;
-      }
-
-      table {
-        border: none !important;
-      }
-
-      .ant-table-content {
-        overflow-x: hidden !important;
-        //  overflow-y: scroll !important;
-      }
-
-      td {
-        padding: 12px 8px;
-      }
-    }
-    //琛ㄦ牸閫夋嫨宸ュ叿鏍忔牱寮�
-    .alert {
-      height: 38px;
-      background-color: #e6f7ff;
-      border-color: #91d5ff;
-    }
-    &--inset {
-      .ant-table-wrapper {
-        padding: 0;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Table/src/componentMap.ts b/src/components/Table/src/componentMap.ts
deleted file mode 100644
index 0578a60..0000000
--- a/src/components/Table/src/componentMap.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import type { Component } from 'vue';
-import { Input, Select, Checkbox, InputNumber, Switch, DatePicker, TimePicker } from 'ant-design-vue';
-import type { ComponentType } from './types/componentType';
-import { ApiSelect, ApiTreeSelect } from '/@/components/Form';
-
-const componentMap = new Map<ComponentType, Component>();
-
-componentMap.set('Input', Input);
-componentMap.set('InputNumber', InputNumber);
-componentMap.set('Select', Select);
-componentMap.set('ApiSelect', ApiSelect);
-componentMap.set('ApiTreeSelect', ApiTreeSelect);
-componentMap.set('Switch', Switch);
-componentMap.set('Checkbox', Checkbox);
-componentMap.set('DatePicker', DatePicker);
-componentMap.set('TimePicker', TimePicker);
-
-export function add(compName: ComponentType, component: Component) {
-  componentMap.set(compName, component);
-}
-
-export function del(compName: ComponentType) {
-  componentMap.delete(compName);
-}
-
-export { componentMap };
diff --git a/src/components/Table/src/components/EditTableHeaderIcon.vue b/src/components/Table/src/components/EditTableHeaderIcon.vue
deleted file mode 100644
index 369820e..0000000
--- a/src/components/Table/src/components/EditTableHeaderIcon.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-<template>
-  <span>
-    <slot></slot>
-    {{ title }}
-    <FormOutlined />
-  </span>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { FormOutlined } from '@ant-design/icons-vue';
-  export default defineComponent({
-    name: 'EditTableHeaderIcon',
-    components: { FormOutlined },
-    props: { title: { type: String, default: '' } },
-  });
-</script>
diff --git a/src/components/Table/src/components/ExpandIcon.tsx b/src/components/Table/src/components/ExpandIcon.tsx
deleted file mode 100644
index 3d1d98d..0000000
--- a/src/components/Table/src/components/ExpandIcon.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { BasicArrow } from '/@/components/Basic';
-
-export default () => {
-  return (props: Recordable) => {
-    if (!props.expandable) {
-      if (props.needIndentSpaced) {
-        return <span class="ant-table-row-expand-icon ant-table-row-spaced" />;
-      } else {
-        return <span />;
-      }
-    }
-    return (
-      <BasicArrow
-        style="margin-right: 8px"
-        iconStyle="margin-top: -2px;"
-        onClick={(e: Event) => {
-          props.onExpand(props.record, e);
-        }}
-        expand={props.expanded}
-      />
-    );
-  };
-};
diff --git a/src/components/Table/src/components/HeaderCell.vue b/src/components/Table/src/components/HeaderCell.vue
deleted file mode 100644
index c21bfd0..0000000
--- a/src/components/Table/src/components/HeaderCell.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-<template>
-  <EditTableHeaderCell v-if="getIsEdit">
-    {{ getTitle }}
-  </EditTableHeaderCell>
-  <span v-else>{{ getTitle }}</span>
-  <BasicHelp v-if="getHelpMessage" :text="getHelpMessage" :class="`${prefixCls}__help`" />
-</template>
-<script lang="ts">
-  import type { PropType } from 'vue';
-  import type { BasicColumn } from '../types/table';
-  import { defineComponent, computed } from 'vue';
-  import BasicHelp from '/@/components/Basic/src/BasicHelp.vue';
-  import EditTableHeaderCell from './EditTableHeaderIcon.vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  export default defineComponent({
-    name: 'TableHeaderCell',
-    components: {
-      EditTableHeaderCell,
-      BasicHelp,
-    },
-    props: {
-      column: {
-        type: Object as PropType<BasicColumn>,
-        default: () => ({}),
-      },
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('basic-table-header-cell');
-
-      const getIsEdit = computed(() => !!props.column?.edit);
-      const getTitle = computed(() => props.column?.customTitle || props.column?.title);
-      const getHelpMessage = computed(() => props.column?.helpMessage);
-
-      return { prefixCls, getIsEdit, getTitle, getHelpMessage };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-table-header-cell';
-
-  .@{prefix-cls} {
-    &__help {
-      margin-left: 8px;
-      color: rgb(0 0 0 / 65%) !important;
-    }
-  }
-</style>
diff --git a/src/components/Table/src/components/TableAction.vue b/src/components/Table/src/components/TableAction.vue
deleted file mode 100644
index 4fe82a6..0000000
--- a/src/components/Table/src/components/TableAction.vue
+++ /dev/null
@@ -1,201 +0,0 @@
-<template>
-  <div :class="[prefixCls, getAlign]" @click="onCellClick">
-    <template v-for="(action, index) in getActions" :key="`${index}-${action.label}`">
-      <template v-if="action.slot">
-        <slot name="customButton"></slot>
-      </template>
-      <template v-else>
-        <Tooltip v-if="action.tooltip" v-bind="getTooltip(action.tooltip)">
-          <PopConfirmButton v-bind="action">
-            <Icon :icon="action.icon" :class="{ 'mr-1': !!action.label }" v-if="action.icon" />
-            <template v-if="action.label">{{ action.label }}</template>
-          </PopConfirmButton>
-        </Tooltip>
-        <PopConfirmButton v-else v-bind="action">
-          <Icon :icon="action.icon" :class="{ 'mr-1': !!action.label }" v-if="action.icon" />
-          <template v-if="action.label">{{ action.label }}</template>
-        </PopConfirmButton>
-      </template>
-
-      <Divider type="vertical" class="action-divider" v-if="divider && index < getActions.length - 1" />
-    </template>
-    <Dropdown :trigger="['hover']" :dropMenuList="getDropdownList" popconfirm v-if="dropDownActions && getDropdownList.length > 0">
-      <slot name="more"></slot>
-      <a-button type="link" size="small" v-if="!$slots.more"> 鏇村 <Icon icon="mdi-light:chevron-down"></Icon> </a-button>
-    </Dropdown>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, computed, toRaw, unref } from 'vue';
-  import { MoreOutlined } from '@ant-design/icons-vue';
-  import { Divider, Tooltip, TooltipProps } from 'ant-design-vue';
-  import Icon from '/@/components/Icon/index';
-  import { ActionItem, TableActionType } from '/@/components/Table';
-  import { PopConfirmButton } from '/@/components/Button';
-  import { Dropdown } from '/@/components/Dropdown';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useTableContext } from '../hooks/useTableContext';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  import { isBoolean, isFunction, isString } from '/@/utils/is';
-  import { propTypes } from '/@/utils/propTypes';
-  import { ACTION_COLUMN_FLAG } from '../const';
-
-  export default defineComponent({
-    name: 'TableAction',
-    components: { Icon, PopConfirmButton, Divider, Dropdown, MoreOutlined, Tooltip },
-    props: {
-      actions: {
-        type: Array as PropType<ActionItem[]>,
-        default: null,
-      },
-      dropDownActions: {
-        type: Array as PropType<ActionItem[]>,
-        default: null,
-      },
-      divider: propTypes.bool.def(true),
-      outside: propTypes.bool,
-      stopButtonPropagation: propTypes.bool.def(false),
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('basic-table-action');
-      let table: Partial<TableActionType> = {};
-      if (!props.outside) {
-        table = useTableContext();
-      }
-
-      const { hasPermission } = usePermission();
-      function isIfShow(action: ActionItem): boolean {
-        const ifShow = action.ifShow;
-
-        let isIfShow = true;
-
-        if (isBoolean(ifShow)) {
-          isIfShow = ifShow;
-        }
-        if (isFunction(ifShow)) {
-          isIfShow = ifShow(action);
-        }
-        return isIfShow;
-      }
-
-      const getActions = computed(() => {
-        return (toRaw(props.actions) || [])
-          .filter((action) => {
-            return hasPermission(action.auth) && isIfShow(action);
-          })
-          .map((action) => {
-            const { popConfirm } = action;
-            return {
-              getPopupContainer: () => unref((table as any)?.wrapRef.value) ?? document.body,
-              type: 'link',
-              size: 'small',
-              ...action,
-              ...(popConfirm || {}),
-              onConfirm: popConfirm?.confirm,
-              onCancel: popConfirm?.cancel,
-              enable: !!popConfirm,
-            };
-          });
-      });
-
-      const getDropdownList = computed((): any[] => {
-        //杩囨护鎺夐殣钘忕殑dropdown,閬垮厤鍑虹幇澶氫綑鐨勫垎鍓茬嚎
-        const list = (toRaw(props.dropDownActions) || []).filter((action) => {
-          return hasPermission(action.auth) && isIfShow(action);
-        });
-        return list.map((action, index) => {
-          const { label, popConfirm } = action;
-          return {
-            ...action,
-            ...popConfirm,
-            onConfirm: popConfirm?.confirm,
-            onCancel: popConfirm?.cancel,
-            text: label,
-            divider: index < list.length - 1 ? props.divider : false,
-          };
-        });
-      });
-
-      const getAlign = computed(() => {
-        const columns = (table as TableActionType)?.getColumns?.() || [];
-        const actionColumn = columns.find((item) => item.flag === ACTION_COLUMN_FLAG);
-        return actionColumn?.align ?? 'left';
-      });
-
-      function getTooltip(data: string | TooltipProps): TooltipProps {
-        return {
-          getPopupContainer: () => unref((table as any)?.wrapRef.value) ?? document.body,
-          placement: 'bottom',
-          ...(isString(data) ? { title: data } : data),
-        };
-      }
-
-      function onCellClick(e: MouseEvent) {
-        if (!props.stopButtonPropagation) return;
-        const path = e.composedPath() as HTMLElement[];
-        const isInButton = path.find((ele) => {
-          return ele.tagName?.toUpperCase() === 'BUTTON';
-        });
-        isInButton && e.stopPropagation();
-      }
-
-      return { prefixCls, getActions, getDropdownList, getAlign, onCellClick, getTooltip };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-table-action';
-
-  .@{prefix-cls} {
-    display: flex;
-    align-items: center;
-    /* update-begin-author:taoyan date:2022-11-18 for: 琛ㄦ牸榛樿琛岄珮姣斿畼鏂圭ず渚嬪鍑�2px*/
-    height: 22px;
-    /* update-end-author:taoyan date:2022-11-18 for: 琛ㄦ牸榛樿琛岄珮姣斿畼鏂圭ず渚嬪鍑�2px*/
-    
-    .action-divider {
-      display: table;
-    }
-
-    &.left {
-      justify-content: flex-start;
-    }
-
-    &.center {
-      justify-content: center;
-    }
-
-    &.right {
-      justify-content: flex-end;
-    }
-
-    button {
-      display: flex;
-      align-items: center;
-
-      span {
-        margin-left: 0 !important;
-      }
-    }
-
-    button.ant-btn-circle {
-      span {
-        margin: auto !important;
-      }
-    }
-
-    .ant-divider,
-    .ant-divider-vertical {
-      margin: 0 2px;
-    }
-
-    .icon-more {
-      transform: rotate(90deg);
-
-      svg {
-        font-size: 1.1em;
-        font-weight: 700;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Table/src/components/TableFooter.vue b/src/components/Table/src/components/TableFooter.vue
deleted file mode 100644
index 68e556b..0000000
--- a/src/components/Table/src/components/TableFooter.vue
+++ /dev/null
@@ -1,94 +0,0 @@
-<template>
-  <Table
-    v-if="summaryFunc || summaryData"
-    :showHeader="false"
-    :bordered="false"
-    :pagination="false"
-    :dataSource="getDataSource"
-    :rowKey="(r) => r[rowKey]"
-    :columns="getColumns"
-    tableLayout="fixed"
-    :scroll="scroll"
-  />
-</template>
-<script lang="ts">
-  import type { PropType } from 'vue';
-  import { defineComponent, unref, computed, toRaw } from 'vue';
-  import { Table } from 'ant-design-vue';
-  import { cloneDeep } from 'lodash-es';
-  import { isFunction } from '/@/utils/is';
-  import type { BasicColumn } from '../types/table';
-  import { INDEX_COLUMN_FLAG } from '../const';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useTableContext } from '../hooks/useTableContext';
-
-  const SUMMARY_ROW_KEY = '_row';
-  const SUMMARY_INDEX_KEY = '_index';
-  export default defineComponent({
-    name: 'BasicTableFooter',
-    components: { Table },
-    props: {
-      summaryFunc: {
-        type: Function as PropType<Fn>,
-      },
-      summaryData: {
-        type: Array as PropType<Recordable[]>,
-      },
-      scroll: {
-        type: Object as PropType<Recordable>,
-      },
-      rowKey: propTypes.string.def('key'),
-    },
-    setup(props) {
-      const table = useTableContext();
-
-      const getDataSource = computed((): Recordable[] => {
-        const { summaryFunc, summaryData } = props;
-        if (summaryData?.length) {
-          summaryData.forEach((item, i) => (item[props.rowKey] = `${i}`));
-          return summaryData;
-        }
-        if (!isFunction(summaryFunc)) {
-          return [];
-        }
-        let dataSource = toRaw(unref(table.getDataSource()));
-        dataSource = summaryFunc(dataSource);
-        dataSource.forEach((item, i) => {
-          item[props.rowKey] = `${i}`;
-        });
-        return dataSource;
-      });
-
-      const getColumns = computed(() => {
-        const dataSource = unref(getDataSource);
-        const columns: BasicColumn[] = cloneDeep(table.getColumns());
-        const index = columns.findIndex((item) => item.flag === INDEX_COLUMN_FLAG);
-        const hasRowSummary = dataSource.some((item) => Reflect.has(item, SUMMARY_ROW_KEY));
-        const hasIndexSummary = dataSource.some((item) => Reflect.has(item, SUMMARY_INDEX_KEY));
-
-        if (index !== -1) {
-          if (hasIndexSummary) {
-            columns[index].customRender = ({ record }) => record[SUMMARY_INDEX_KEY];
-            columns[index].ellipsis = false;
-          } else {
-            Reflect.deleteProperty(columns[index], 'customRender');
-          }
-        }
-
-        if (table.getRowSelection() && hasRowSummary) {
-          const isFixed = columns.some((col) => col.fixed === 'left');
-          columns.unshift({
-            width: 60,
-            title: 'selection',
-            key: 'selectionKey',
-            align: 'center',
-            ...(isFixed ? { fixed: 'left' } : {}),
-            customRender: ({ record }) => record[SUMMARY_ROW_KEY],
-          });
-        }
-        return columns;
-      });
-      return { getColumns, getDataSource };
-    },
-  });
-</script>
diff --git a/src/components/Table/src/components/TableHeader.vue b/src/components/Table/src/components/TableHeader.vue
deleted file mode 100644
index 341cd40..0000000
--- a/src/components/Table/src/components/TableHeader.vue
+++ /dev/null
@@ -1,165 +0,0 @@
-<template>
-  <div style="width: 100%">
-    <div v-if="$slots.headerTop" style="margin: 5px">
-      <slot name="headerTop"></slot>
-    </div>
-    <div :class="`flex items-center ${prefixCls}__table-title-box`">
-      <div :class="`${prefixCls}__tableTitle`">
-        <slot name="tableTitle" v-if="$slots.tableTitle"></slot>
-        <!--淇敼鏍囬鎻掓Ы浣嶇疆-->
-        <TableTitle :helpMessage="titleHelpMessage" :title="title" v-if="!$slots.tableTitle && title" />
-      </div>
-
-      <div :class="`${prefixCls}__toolbar`">
-        <slot name="toolbar"></slot>
-        <Divider type="vertical" v-if="$slots.toolbar && showTableSetting" />
-        <TableSetting :class="`${prefixCls}__toolbar-desktop`" style="white-space: nowrap;" :setting="tableSetting" v-if="showTableSetting" @columns-change="handleColumnChange" />
-        <a-popover :overlayClassName="`${prefixCls}__toolbar-mobile`" trigger="click" placement="left" :getPopupContainer="(n) => n.parentElement">
-          <template #content>
-            <TableSetting mode="mobile" :setting="tableSetting" v-if="showTableSetting" @columns-change="handleColumnChange" />
-          </template>
-          <a-button :class="`${prefixCls}__toolbar-mobile`" v-if="showTableSetting" type="text" preIcon="ant-design:menu" shape="circle" />
-        </a-popover>
-      </div>
-    </div>
-    <!--娣诲姞tableTop鎻掓Ы-->
-    <div style="margin: -4px 0 -2px; padding-top: 5px">
-      <slot name="tableTop">
-        <a-alert type="info" show-icon class="alert" v-if="openRowSelection != null">
-          <template #message>
-            <template v-if="selectRowKeys.length > 0">
-              <span>
-                <span>宸查�変腑 {{ selectRowKeys.length }} 鏉¤褰�</span>
-                <span v-if="isAcrossPage">(鍙法椤�)</span>
-              </span>
-              <a-divider type="vertical" />
-              <a @click="setSelectedRowKeys([])">娓呯┖</a>
-              <slot name="alertAfter" />
-            </template>
-            <template v-else>
-              <span>鏈�変腑浠讳綍鏁版嵁</span>
-            </template>
-          </template>
-        </a-alert>
-      </slot>
-    </div>
-    <!--娣诲姞tableTop鎻掓Ы-->
-  </div>
-</template>
-<script lang="ts">
-  import type { TableSetting, ColumnChangeParam } from '../types/table';
-  import type { PropType } from 'vue';
-  import { defineComponent, computed } from 'vue';
-  import { Divider } from 'ant-design-vue';
-  import TableSettingComponent from './settings/index.vue';
-  import TableTitle from './TableTitle.vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useTableContext } from '../hooks/useTableContext';
-
-  export default defineComponent({
-    name: 'BasicTableHeader',
-    components: {
-      Divider,
-      TableTitle,
-      TableSetting: TableSettingComponent,
-    },
-    props: {
-      title: {
-        type: [Function, String] as PropType<string | ((data: Recordable) => string)>,
-      },
-      tableSetting: {
-        type: Object as PropType<TableSetting>,
-      },
-      showTableSetting: {
-        type: Boolean,
-      },
-      titleHelpMessage: {
-        type: [String, Array] as PropType<string | string[]>,
-        default: '',
-      },
-    },
-    emits: ['columns-change'],
-    setup(_, { emit }) {
-      const { prefixCls } = useDesign('basic-table-header');
-
-      function handleColumnChange(data: ColumnChangeParam[]) {
-        emit('columns-change', data);
-      }
-
-      const { getSelectRowKeys, setSelectedRowKeys, getRowSelection } = useTableContext();
-      const selectRowKeys = computed(() => getSelectRowKeys());
-      const openRowSelection = computed(() => getRowSelection());
-      // 鏄惁鍏佽璺ㄩ〉閫夋嫨
-      const isAcrossPage = computed(() => openRowSelection.value?.preserveSelectedRowKeys === true);
-
-      return { prefixCls, handleColumnChange, selectRowKeys, setSelectedRowKeys, openRowSelection, isAcrossPage };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-table-header';
-
-  .@{prefix-cls} {
-    &__toolbar {
-      //flex: 1;
-      width: 140px;
-      display: flex;
-      align-items: center;
-      justify-content: flex-end;
-
-      > * {
-        margin-right: 8px;
-      }
-
-      &-desktop {
-        display: block;
-      }
-
-      &-mobile {
-        display: none;
-      }
-    }
-    &__tableTitle {
-      flex: 1;
-      display: flex;
-      flex-wrap: wrap;
-      align-content: flex-start;
-
-      > * {
-        margin-right: 4px;
-        margin-bottom: 4px;
-      }
-    }
-
-    @media (max-width: @screen-lg) {
-      &__table-title-box {
-        align-items: flex-end;
-      }
-
-      &__toolbar {
-        width: 30px;
-        text-align: center;
-
-        > * {
-          margin-right: 0;
-        }
-
-        .table-settings > * {
-          margin-right: 0;
-          margin-bottom: 6px;
-        }
-        &-desktop {
-          display: none;
-        }
-
-        &-mobile {
-          display: block;
-          .table-settings > * {
-            margin-right: 6px;
-            margin-bottom: 0;
-          }
-        }
-      }
-    }
-  }
-</style>
diff --git a/src/components/Table/src/components/TableImg.vue b/src/components/Table/src/components/TableImg.vue
deleted file mode 100644
index 29a0907..0000000
--- a/src/components/Table/src/components/TableImg.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-<template>
-  <div :class="prefixCls" class="flex items-center mx-auto" v-if="imgList && imgList.length" :style="getWrapStyle">
-    <Badge :count="!showBadge || imgList.length == 1 ? 0 : imgList.length" v-if="simpleShow">
-      <div class="img-div">
-        <PreviewGroup>
-          <template v-for="(img, index) in imgList" :key="img">
-            <Image
-              :width="size"
-              :style="{
-                display: index === 0 ? '' : 'none !important',
-              }"
-              :src="srcPrefix + img"
-            />
-          </template>
-        </PreviewGroup>
-      </div>
-    </Badge>
-    <PreviewGroup v-else>
-      <template v-for="(img, index) in imgList" :key="img">
-        <Image :width="size" :style="{ marginLeft: index === 0 ? 0 : margin }" :src="srcPrefix + img" />
-      </template>
-    </PreviewGroup>
-  </div>
-</template>
-<script lang="ts">
-  import type { CSSProperties } from 'vue';
-  import { defineComponent, computed } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { Image, Badge } from 'ant-design-vue';
-  import { propTypes } from '/@/utils/propTypes';
-
-  export default defineComponent({
-    name: 'TableImage',
-    components: { Image, PreviewGroup: Image.PreviewGroup, Badge },
-    props: {
-      imgList: propTypes.arrayOf(propTypes.string),
-      size: propTypes.number.def(40),
-      // 鏄惁绠�鍗曟樉绀猴紙鍙樉绀虹涓�寮犲浘鐗囷級
-      simpleShow: propTypes.bool,
-      // 绠�鍗曟ā寮忎笅鏄惁鏄剧ず鍥剧墖鏁伴噺鐨刡adge
-      showBadge: propTypes.bool.def(true),
-      // 鍥剧墖闂磋窛
-      margin: propTypes.number.def(4),
-      // src鍓嶇紑锛屽皢浼氶檮鍔犲湪imgList涓瘡涓�椤逛箣鍓�
-      srcPrefix: propTypes.string.def(''),
-    },
-    setup(props) {
-      const getWrapStyle = computed((): CSSProperties => {
-        const { size } = props;
-        const s = `${size}px`;
-        return { height: s, width: s };
-      });
-
-      const { prefixCls } = useDesign('basic-table-img');
-      return { prefixCls, getWrapStyle };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-table-img';
-
-  .@{prefix-cls} {
-    .ant-image {
-      margin-right: 4px;
-      cursor: zoom-in;
-
-      img {
-        border-radius: 2px;
-      }
-    }
-
-    .img-div {
-      display: inline-grid;
-    }
-  }
-</style>
diff --git a/src/components/Table/src/components/TableTitle.vue b/src/components/Table/src/components/TableTitle.vue
deleted file mode 100644
index 0b797e1..0000000
--- a/src/components/Table/src/components/TableTitle.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <BasicTitle :class="prefixCls" v-if="getTitle" :helpMessage="helpMessage">
-    {{ getTitle }}
-  </BasicTitle>
-</template>
-<script lang="ts">
-  import { computed, defineComponent, PropType } from 'vue';
-  import { BasicTitle } from '/@/components/Basic/index';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { isFunction } from '/@/utils/is';
-
-  export default defineComponent({
-    name: 'BasicTableTitle',
-    components: { BasicTitle },
-    props: {
-      title: {
-        type: [Function, String] as PropType<string | ((data: Recordable) => string)>,
-      },
-      getSelectRows: {
-        type: Function as PropType<() => Recordable[]>,
-      },
-      helpMessage: {
-        type: [String, Array] as PropType<string | string[]>,
-      },
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('basic-table-title');
-
-      const getTitle = computed(() => {
-        const { title, getSelectRows = () => {} } = props;
-        let tit = title;
-
-        if (isFunction(title)) {
-          tit = title({
-            selectRows: getSelectRows(),
-          });
-        }
-        return tit;
-      });
-
-      return { getTitle, prefixCls };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-table-title';
-
-  .@{prefix-cls} {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-  }
-</style>
diff --git a/src/components/Table/src/components/editable/CellComponent.ts b/src/components/Table/src/components/editable/CellComponent.ts
deleted file mode 100644
index 8441715..0000000
--- a/src/components/Table/src/components/editable/CellComponent.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import type { FunctionalComponent, defineComponent } from 'vue';
-import type { ComponentType } from '../../types/componentType';
-import { componentMap } from '/@/components/Table/src/componentMap';
-
-import { Popover } from 'ant-design-vue';
-import { h } from 'vue';
-
-export interface ComponentProps {
-  component: ComponentType;
-  rule: boolean;
-  popoverVisible: boolean;
-  ruleMessage: string;
-  getPopupContainer?: Fn;
-}
-
-export const CellComponent: FunctionalComponent = (
-  { component = 'Input', rule = true, ruleMessage, popoverVisible, getPopupContainer }: ComponentProps,
-  { attrs }
-) => {
-  const Comp = componentMap.get(component) as typeof defineComponent;
-
-  const DefaultComp = h(Comp, attrs);
-  if (!rule) {
-    return DefaultComp;
-  }
-  return h(
-    Popover,
-    {
-      overlayClassName: 'edit-cell-rule-popover',
-      visible: !!popoverVisible,
-      ...(getPopupContainer ? { getPopupContainer } : {}),
-    },
-    {
-      default: () => DefaultComp,
-      content: () => ruleMessage,
-    }
-  );
-};
diff --git a/src/components/Table/src/components/editable/EditableCell.vue b/src/components/Table/src/components/editable/EditableCell.vue
deleted file mode 100644
index 24e1456..0000000
--- a/src/components/Table/src/components/editable/EditableCell.vue
+++ /dev/null
@@ -1,480 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <div v-show="!isEdit" :class="{ [`${prefixCls}__normal`]: true, 'ellipsis-cell': column.ellipsis }" @click="handleEdit">
-      <div class="cell-content" :title="column.ellipsis ? getValues ?? '' : ''">
-        {{ getValues ? getValues : '&nbsp;' }}
-      </div>
-      <FormOutlined :class="`${prefixCls}__normal-icon`" v-if="!column.editRow" />
-    </div>
-
-    <a-spin v-if="isEdit" :spinning="spinning">
-      <div :class="`${prefixCls}__wrapper`" v-click-outside="onClickOutside">
-        <CellComponent
-          v-bind="getComponentProps"
-          :component="getComponent"
-          :style="getWrapperStyle"
-          :popoverVisible="getRuleVisible"
-          :rule="getRule"
-          :ruleMessage="ruleMessage"
-          :class="getWrapperClass"
-          ref="elRef"
-          @change="handleChange"
-          @options-change="handleOptionsChange"
-          @pressEnter="handleEnter"
-        />
-        <div :class="`${prefixCls}__action`" v-if="!getRowEditable">
-          <CheckOutlined :class="[`${prefixCls}__icon`, 'mx-2']" @click="handleSubmitClick" />
-          <CloseOutlined :class="`${prefixCls}__icon `" @click="handleCancel" />
-        </div>
-      </div>
-    </a-spin>
-  </div>
-</template>
-<script lang="ts">
-  import type { CSSProperties, PropType } from 'vue';
-  import { computed, defineComponent, nextTick, ref, toRaw, unref, watchEffect } from 'vue';
-  import type { BasicColumn } from '../../types/table';
-  import type { EditRecordRow } from './index';
-  import { CheckOutlined, CloseOutlined, FormOutlined } from '@ant-design/icons-vue';
-  import { CellComponent } from './CellComponent';
-
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useTableContext } from '../../hooks/useTableContext';
-
-  import clickOutside from '/@/directives/clickOutside';
-
-  import { propTypes } from '/@/utils/propTypes';
-  import { isArray, isBoolean, isFunction, isNumber, isString } from '/@/utils/is';
-  import { createPlaceholderMessage } from './helper';
-  import { omit, pick, set } from 'lodash-es';
-  import { treeToList } from '/@/utils/helper/treeHelper';
-  import { Spin } from 'ant-design-vue';
-
-  export default defineComponent({
-    name: 'EditableCell',
-    components: { FormOutlined, CloseOutlined, CheckOutlined, CellComponent, ASpin: Spin },
-    directives: {
-      clickOutside,
-    },
-    props: {
-      value: {
-        type: [String, Number, Boolean, Object] as PropType<string | number | boolean | Recordable>,
-        default: '',
-      },
-      record: {
-        type: Object as PropType<EditRecordRow>,
-      },
-      column: {
-        type: Object as PropType<BasicColumn>,
-        default: () => ({}),
-      },
-      index: propTypes.number,
-    },
-    setup(props) {
-      const table = useTableContext();
-      const isEdit = ref(false);
-      const elRef = ref();
-      const ruleVisible = ref(false);
-      const ruleMessage = ref('');
-      const optionsRef = ref<LabelValueOptions>([]);
-      const currentValueRef = ref<any>(props.value);
-      const defaultValueRef = ref<any>(props.value);
-      const spinning = ref<boolean>(false);
-
-      const { prefixCls } = useDesign('editable-cell');
-
-      const getComponent = computed(() => props.column?.editComponent || 'Input');
-      const getRule = computed(() => props.column?.editRule);
-
-      const getRuleVisible = computed(() => {
-        return unref(ruleMessage) && unref(ruleVisible);
-      });
-
-      const getIsCheckComp = computed(() => {
-        const component = unref(getComponent);
-        return ['Checkbox', 'Switch'].includes(component);
-      });
-
-      const getComponentProps = computed(() => {
-        const compProps = props.column?.editComponentProps ?? {};
-        const component = unref(getComponent);
-        const apiSelectProps: Recordable = {};
-        if (component === 'ApiSelect') {
-          apiSelectProps.cache = true;
-        }
-
-        const isCheckValue = unref(getIsCheckComp);
-
-        const valueField = isCheckValue ? 'checked' : 'value';
-        const val = unref(currentValueRef);
-
-        const value = isCheckValue ? (isNumber(val) && isBoolean(val) ? val : !!val) : val;
-
-        return {
-          size: 'small',
-          getPopupContainer: () => unref(table?.wrapRef.value) ?? document.body,
-          getCalendarContainer: () => unref(table?.wrapRef.value) ?? document.body,
-          placeholder: createPlaceholderMessage(unref(getComponent)),
-          ...apiSelectProps,
-          ...omit(compProps, 'onChange'),
-          [valueField]: value,
-        };
-      });
-
-      const getValues = computed(() => {
-        const { editComponentProps, editValueMap } = props.column;
-
-        const value = unref(currentValueRef);
-
-        if (editValueMap && isFunction(editValueMap)) {
-          return editValueMap(value);
-        }
-
-        const component = unref(getComponent);
-        if (!component.includes('Select')) {
-          return value;
-        }
-
-        const options: LabelValueOptions = editComponentProps?.options ?? (unref(optionsRef) || []);
-        const option = options.find((item) => `${item.value}` === `${value}`);
-
-        return option?.label ?? value;
-      });
-
-      const getWrapperStyle = computed((): CSSProperties => {
-        if (unref(getIsCheckComp) || unref(getRowEditable)) {
-          return {};
-        }
-        return {
-          width: 'calc(100% - 48px)',
-        };
-      });
-
-      const getWrapperClass = computed(() => {
-        const { align = 'center' } = props.column;
-        return `edit-cell-align-${align}`;
-      });
-
-      const getRowEditable = computed(() => {
-        const { editable } = props.record || {};
-        return !!editable;
-      });
-
-      watchEffect(() => {
-        defaultValueRef.value = props.value;
-        currentValueRef.value = props.value;
-      });
-
-      watchEffect(() => {
-        const { editable } = props.column;
-        if (isBoolean(editable) || isBoolean(unref(getRowEditable))) {
-          isEdit.value = !!editable || unref(getRowEditable);
-        }
-      });
-
-      function handleEdit() {
-        if (unref(getRowEditable) || unref(props.column?.editRow)) return;
-        ruleMessage.value = '';
-        isEdit.value = true;
-        nextTick(() => {
-          const el = unref(elRef);
-          el?.focus?.();
-        });
-      }
-
-      async function handleChange(e: any) {
-        const component = unref(getComponent);
-        if (!e) {
-          currentValueRef.value = e;
-        } else if (e?.target && Reflect.has(e.target, 'value')) {
-          currentValueRef.value = (e as ChangeEvent).target.value;
-        } else if (component === 'Checkbox') {
-          currentValueRef.value = (e as ChangeEvent).target.checked;
-        } else if (isString(e) || isBoolean(e) || isNumber(e)) {
-          currentValueRef.value = e;
-        }
-        const onChange = props.column?.editComponentProps?.onChange;
-        if (onChange && isFunction(onChange)) onChange(...arguments);
-
-        table.emit?.('edit-change', {
-          column: props.column,
-          value: unref(currentValueRef),
-          record: toRaw(props.record),
-        });
-        handleSubmiRule();
-      }
-
-      async function handleSubmiRule() {
-        const { column, record } = props;
-        const { editRule } = column;
-        const currentValue = unref(currentValueRef);
-
-        if (editRule) {
-          if (isBoolean(editRule) && !currentValue && !isNumber(currentValue)) {
-            ruleVisible.value = true;
-            const component = unref(getComponent);
-            ruleMessage.value = createPlaceholderMessage(component);
-            return false;
-          }
-          if (isFunction(editRule)) {
-            const res = await editRule(currentValue, record as Recordable);
-            if (!!res) {
-              ruleMessage.value = res;
-              ruleVisible.value = true;
-              return false;
-            } else {
-              ruleMessage.value = '';
-              return true;
-            }
-          }
-        }
-        ruleMessage.value = '';
-        return true;
-      }
-
-      async function handleSubmit(needEmit = true, valid = true) {
-        if (valid) {
-          const isPass = await handleSubmiRule();
-          if (!isPass) return false;
-        }
-
-        const { column, index, record } = props;
-        if (!record) return false;
-        const { key, dataIndex } = column;
-        const value = unref(currentValueRef);
-        if (!key || !dataIndex) return;
-
-        const dataKey = (dataIndex || key) as string;
-
-        if (!record.editable) {
-          const { getBindValues } = table;
-
-          const { beforeEditSubmit, columns } = unref(getBindValues);
-
-          if (beforeEditSubmit && isFunction(beforeEditSubmit)) {
-            spinning.value = true;
-            const keys: string[] = columns.map((_column) => _column.dataIndex).filter((field) => !!field) as string[];
-            let result: any = true;
-            try {
-              result = await beforeEditSubmit({
-                record: pick(record, keys),
-                index,
-                key,
-                value,
-              });
-            } catch (e) {
-              result = false;
-            } finally {
-              spinning.value = false;
-            }
-            if (result === false) {
-              return;
-            }
-          }
-        }
-
-        set(record, dataKey, value);
-        //const record = await table.updateTableData(index, dataKey, value);
-        needEmit && table.emit?.('edit-end', { record, index, key, value });
-        isEdit.value = false;
-      }
-
-      async function handleEnter() {
-        if (props.column?.editRow) {
-          return;
-        }
-        handleSubmit();
-      }
-
-      function handleSubmitClick() {
-        handleSubmit();
-      }
-
-      function handleCancel() {
-        isEdit.value = false;
-        currentValueRef.value = defaultValueRef.value;
-        const { column, index, record } = props;
-        const { key, dataIndex } = column;
-        table.emit?.('edit-cancel', {
-          record,
-          index,
-          key: dataIndex || key,
-          value: unref(currentValueRef),
-        });
-      }
-
-      function onClickOutside() {
-        if (props.column?.editable || unref(getRowEditable)) {
-          return;
-        }
-        const component = unref(getComponent);
-
-        if (component.includes('Input')) {
-          handleCancel();
-        }
-      }
-
-      // only ApiSelect or TreeSelect
-      function handleOptionsChange(options: LabelValueOptions) {
-        const { replaceFields } = props.column?.editComponentProps ?? {};
-        const component = unref(getComponent);
-        if (component === 'ApiTreeSelect') {
-          const { title = 'title', value = 'value', children = 'children' } = replaceFields || {};
-          let listOptions: Recordable[] = treeToList(options, { children });
-          listOptions = listOptions.map((item) => {
-            return {
-              label: item[title],
-              value: item[value],
-            };
-          });
-          optionsRef.value = listOptions as LabelValueOptions;
-        } else {
-          optionsRef.value = options;
-        }
-      }
-
-      function initCbs(cbs: 'submitCbs' | 'validCbs' | 'cancelCbs', handle: Fn) {
-        if (props.record) {
-          /* eslint-disable  */
-          isArray(props.record[cbs]) ? props.record[cbs]?.push(handle) : (props.record[cbs] = [handle]);
-        }
-      }
-
-      if (props.record) {
-        initCbs('submitCbs', handleSubmit);
-        initCbs('validCbs', handleSubmiRule);
-        initCbs('cancelCbs', handleCancel);
-
-        if (props.column.dataIndex) {
-          if (!props.record.editValueRefs) props.record.editValueRefs = {};
-          props.record.editValueRefs[props.column.dataIndex] = currentValueRef;
-        }
-        /* eslint-disable  */
-        props.record.onCancelEdit = () => {
-          isArray(props.record?.cancelCbs) && props.record?.cancelCbs.forEach((fn) => fn());
-        };
-        /* eslint-disable */
-        props.record.onSubmitEdit = async () => {
-          if (isArray(props.record?.submitCbs)) {
-            if (!props.record?.onValid?.()) return;
-            const submitFns = props.record?.submitCbs || [];
-            submitFns.forEach((fn) => fn(false, false));
-            table.emit?.('edit-row-end');
-            return true;
-          }
-        };
-      }
-
-      return {
-        isEdit,
-        prefixCls,
-        handleEdit,
-        currentValueRef,
-        handleSubmit,
-        handleChange,
-        handleCancel,
-        elRef,
-        getComponent,
-        getRule,
-        onClickOutside,
-        ruleMessage,
-        getRuleVisible,
-        getComponentProps,
-        handleOptionsChange,
-        getWrapperStyle,
-        getWrapperClass,
-        getRowEditable,
-        getValues,
-        handleEnter,
-        handleSubmitClick,
-        spinning,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-editable-cell';
-
-  .edit-cell-align-left {
-    text-align: left;
-
-    input:not(.ant-calendar-picker-input, .ant-time-picker-input) {
-      text-align: left;
-    }
-  }
-
-  .edit-cell-align-center {
-    text-align: center;
-
-    input:not(.ant-calendar-picker-input, .ant-time-picker-input) {
-      text-align: center;
-    }
-  }
-
-  .edit-cell-align-right {
-    text-align: right;
-
-    input:not(.ant-calendar-picker-input, .ant-time-picker-input) {
-      text-align: right;
-    }
-  }
-
-  .edit-cell-rule-popover {
-    .ant-popover-inner-content {
-      padding: 4px 8px;
-      color: @error-color;
-      // border: 1px solid @error-color;
-      border-radius: 2px;
-    }
-  }
-  .@{prefix-cls} {
-    position: relative;
-
-    &__wrapper {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-
-      > .ant-select {
-        min-width: calc(100% - 50px);
-      }
-    }
-
-    &__icon {
-      &:hover {
-        transform: scale(1.2);
-
-        svg {
-          color: @primary-color;
-        }
-      }
-    }
-
-    .ellipsis-cell {
-      .cell-content {
-        overflow-wrap: break-word;
-        word-break: break-word;
-        overflow: hidden;
-        white-space: nowrap;
-        text-overflow: ellipsis;
-      }
-    }
-
-    &__normal {
-      &-icon {
-        position: absolute;
-        top: 4px;
-        right: 0;
-        display: none;
-        width: 20px;
-        cursor: pointer;
-      }
-    }
-
-    &:hover {
-      .@{prefix-cls}__normal-icon {
-        display: inline-block;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Table/src/components/editable/helper.ts b/src/components/Table/src/components/editable/helper.ts
deleted file mode 100644
index d901729..0000000
--- a/src/components/Table/src/components/editable/helper.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { ComponentType } from '../../types/componentType';
-import { useI18n } from '/@/hooks/web/useI18n';
-
-const { t } = useI18n();
-
-/**
- * @description: 鐢熸垚placeholder
- */
-export function createPlaceholderMessage(component: ComponentType) {
-  if (component.includes('Input')) {
-    return t('common.inputText');
-  }
-  if (component.includes('Picker')) {
-    return t('common.chooseText');
-  }
-
-  if (
-    component.includes('Select') ||
-    component.includes('Checkbox') ||
-    component.includes('Radio') ||
-    component.includes('Switch') ||
-    component.includes('DatePicker') ||
-    component.includes('TimePicker')
-  ) {
-    return t('common.chooseText');
-  }
-  return '';
-}
diff --git a/src/components/Table/src/components/editable/index.ts b/src/components/Table/src/components/editable/index.ts
deleted file mode 100644
index 4f7d4da..0000000
--- a/src/components/Table/src/components/editable/index.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import type { BasicColumn } from '/@/components/Table/src/types/table';
-
-import { h, Ref } from 'vue';
-
-import EditableCell from './EditableCell.vue';
-import { isArray } from '/@/utils/is';
-
-interface Params {
-  text: string;
-  record: Recordable;
-  index: number;
-}
-
-export function renderEditCell(column: BasicColumn) {
-  return ({ text: value, record, index }: Params) => {
-    record.onValid = async () => {
-      if (isArray(record?.validCbs)) {
-        const validFns = (record?.validCbs || []).map((fn) => fn());
-        const res = await Promise.all(validFns);
-        return res.every((item) => !!item);
-      } else {
-        return false;
-      }
-    };
-
-    record.onEdit = async (edit: boolean, submit = false) => {
-      if (!submit) {
-        record.editable = edit;
-      }
-
-      if (!edit && submit) {
-        if (!(await record.onValid())) return false;
-        const res = await record.onSubmitEdit?.();
-        if (res) {
-          record.editable = false;
-          return true;
-        }
-        return false;
-      }
-      // cancel
-      if (!edit && !submit) {
-        record.onCancelEdit?.();
-      }
-      return true;
-    };
-
-    return h(EditableCell, {
-      value,
-      record,
-      column,
-      index,
-    });
-  };
-}
-
-export type EditRecordRow<T = Recordable> = Partial<
-  {
-    onEdit: (editable: boolean, submit?: boolean) => Promise<boolean>;
-    onValid: () => Promise<boolean>;
-    editable: boolean;
-    onCancel: Fn;
-    onSubmit: Fn;
-    submitCbs: Fn[];
-    cancelCbs: Fn[];
-    validCbs: Fn[];
-    editValueRefs: Recordable<Ref>;
-  } & T
->;
diff --git a/src/components/Table/src/components/settings/ColumnSetting.vue b/src/components/Table/src/components/settings/ColumnSetting.vue
deleted file mode 100644
index 62d7972..0000000
--- a/src/components/Table/src/components/settings/ColumnSetting.vue
+++ /dev/null
@@ -1,505 +0,0 @@
-<template>
-  <Tooltip placement="top" v-bind="getBindProps">
-    <template #title>
-      <span>{{ t('component.table.settingColumn') }}</span>
-    </template>
-    <Popover
-      v-model:visible="popoverVisible"
-      placement="bottomLeft"
-      trigger="click"
-      @visible-change="handleVisibleChange"
-      :overlayClassName="`${prefixCls}__cloumn-list`"
-      :getPopupContainer="getPopupContainer"
-    >
-      <template #title>
-        <div :class="`${prefixCls}__popover-title`">
-          <Checkbox :indeterminate="indeterminate" v-model:checked="checkAll" @change="onCheckAllChange">
-            {{ t('component.table.settingColumnShow') }}
-          </Checkbox>
-
-          <Checkbox v-model:checked="checkIndex" @change="handleIndexCheckChange">
-            {{ t('component.table.settingIndexColumnShow') }}
-          </Checkbox>
-
-          <!--                    <Checkbox-->
-          <!--                            v-model:checked="checkSelect"-->
-          <!--                            @change="handleSelectCheckChange"-->
-          <!--                            :disabled="!defaultRowSelection"-->
-          <!--                    >-->
-          <!--                        {{ t('component.table.settingSelectColumnShow') }}-->
-          <!--                    </Checkbox>-->
-        </div>
-      </template>
-
-      <template #content>
-        <ScrollContainer>
-          <CheckboxGroup v-model:value="checkedList" @change="onChange" ref="columnListRef">
-            <template v-for="item in plainOptions" :key="item.value">
-              <div :class="`${prefixCls}__check-item`" v-if="!('ifShow' in item && !item.ifShow)">
-                <DragOutlined class="table-column-drag-icon" />
-                <Checkbox :value="item.value">
-                  {{ item.label }}
-                </Checkbox>
-
-                <Tooltip placement="bottomLeft" :mouseLeaveDelay="0.4" :getPopupContainer="getPopupContainer">
-                  <template #title>
-                    {{ t('component.table.settingFixedLeft') }}
-                  </template>
-                  <Icon
-                    icon="line-md:arrow-align-left"
-                    :class="[
-                      `${prefixCls}__fixed-left`,
-                      {
-                        active: item.fixed === 'left',
-                        disabled: !checkedList.includes(item.value),
-                      },
-                    ]"
-                    @click="handleColumnFixed(item, 'left')"
-                  />
-                </Tooltip>
-                <Divider type="vertical" />
-                <Tooltip placement="bottomLeft" :mouseLeaveDelay="0.4" :getPopupContainer="getPopupContainer">
-                  <template #title>
-                    {{ t('component.table.settingFixedRight') }}
-                  </template>
-                  <Icon
-                    icon="line-md:arrow-align-left"
-                    :class="[
-                      `${prefixCls}__fixed-right`,
-                      {
-                        active: item.fixed === 'right',
-                        disabled: !checkedList.includes(item.value),
-                      },
-                    ]"
-                    @click="handleColumnFixed(item, 'right')"
-                  />
-                </Tooltip>
-              </div>
-            </template>
-          </CheckboxGroup>
-        </ScrollContainer>
-        <div :class="`${prefixCls}__popover-footer`">
-          <a-button size="small" @click="reset">
-            {{ t('common.resetText') }}
-          </a-button>
-          <a-button size="small" type="primary" @click="saveSetting"> 淇濆瓨 </a-button>
-        </div>
-      </template>
-      <SettingOutlined />
-    </Popover>
-  </Tooltip>
-</template>
-<script lang="ts">
-  import type { BasicColumn, ColumnChangeParam } from '../../types/table';
-  import { defineComponent, ref, reactive, toRefs, watchEffect, nextTick, unref, computed } from 'vue';
-  import { Tooltip, Popover, Checkbox, Divider } from 'ant-design-vue';
-  import type { CheckboxChangeEvent } from 'ant-design-vue/lib/checkbox/interface';
-  import { SettingOutlined, DragOutlined } from '@ant-design/icons-vue';
-  import { Icon } from '/@/components/Icon';
-  import { ScrollContainer } from '/@/components/Container';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useTableContext } from '../../hooks/useTableContext';
-  import { useColumnsCache } from '../../hooks/useColumnsCache';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  // import { useSortable } from '/@/hooks/web/useSortable';
-  import { isFunction, isNullAndUnDef } from '/@/utils/is';
-  import { getPopupContainer as getParentContainer } from '/@/utils';
-  import { cloneDeep, omit } from 'lodash-es';
-  import Sortablejs from 'sortablejs';
-  import type Sortable from 'sortablejs';
-
-  interface State {
-    checkAll: boolean;
-    isInit?: boolean;
-    checkedList: string[];
-    defaultCheckList: string[];
-  }
-
-  interface Options {
-    label: string;
-    value: string;
-    fixed?: boolean | 'left' | 'right';
-  }
-
-  export default defineComponent({
-    name: 'ColumnSetting',
-    props: {
-      isMobile: Boolean,
-    },
-    components: {
-      SettingOutlined,
-      Popover,
-      Tooltip,
-      Checkbox,
-      CheckboxGroup: Checkbox.Group,
-      DragOutlined,
-      ScrollContainer,
-      Divider,
-      Icon,
-    },
-    emits: ['columns-change'],
-
-    setup(props, { emit, attrs }) {
-      const { t } = useI18n();
-      const table = useTableContext();
-      const popoverVisible = ref(true);
-      // update-begin--author:sunjianlei---date:20221101---for: 淇绗竴娆¤繘鍏ユ椂鍒楄〃閰嶇疆涓嶈兘鎷栨嫿
-      nextTick(() => popoverVisible.value = false);
-      // update-end--author:sunjianlei---date:20221101---for: 淇绗竴娆¤繘鍏ユ椂鍒楄〃閰嶇疆涓嶈兘鎷栨嫿
-      const defaultRowSelection = omit(table.getRowSelection(), 'selectedRowKeys');
-      let inited = false;
-
-      const cachePlainOptions = ref<Options[]>([]);
-      const plainOptions = ref<Options[] | any>([]);
-
-      const plainSortOptions = ref<Options[]>([]);
-
-      const columnListRef = ref<ComponentRef>(null);
-
-      const state = reactive<State>({
-        checkAll: true,
-        checkedList: [],
-        defaultCheckList: [],
-      });
-
-      const checkIndex = ref(false);
-      const checkSelect = ref(false);
-
-      const { prefixCls } = useDesign('basic-column-setting');
-
-      const getValues = computed(() => {
-        return unref(table?.getBindValues) || {};
-      });
-
-      const getBindProps = computed(() => {
-        let obj = {};
-        if (props.isMobile) {
-          obj['visible'] = false;
-        }
-        return obj;
-      });
-
-      let sortable: Sortable;
-      const sortableOrder = ref<string[]>();
-
-      // 鍒楄〃瀛楁閰嶇疆缂撳瓨
-      const { saveSetting, resetSetting } = useColumnsCache(
-        {
-          state,
-          popoverVisible,
-          plainOptions,
-          plainSortOptions,
-          sortableOrder,
-          checkIndex,
-        },
-        setColumns,
-        handleColumnFixed
-      );
-
-      watchEffect(() => {
-        setTimeout(() => {
-          const columns = table.getColumns();
-          if (columns.length && !state.isInit) {
-            init();
-          }
-        }, 0);
-      });
-
-      watchEffect(() => {
-        const values = unref(getValues);
-        checkIndex.value = !!values.showIndexColumn;
-        checkSelect.value = !!values.rowSelection;
-      });
-
-      function getColumns() {
-        const ret: Options[] = [];
-        table.getColumns({ ignoreIndex: true, ignoreAction: true }).forEach((item) => {
-          ret.push({
-            label: (item.title as string) || (item.customTitle as string),
-            value: (item.dataIndex || item.title) as string,
-            ...item,
-          });
-        });
-        return ret;
-      }
-
-      function init() {
-        const columns = getColumns();
-
-        const checkList = table
-          .getColumns({ ignoreAction: true })
-          .map((item) => {
-            if (item.defaultHidden) {
-              return '';
-            }
-            return item.dataIndex || item.title;
-          })
-          .filter(Boolean) as string[];
-
-        if (!plainOptions.value.length) {
-          plainOptions.value = columns;
-          plainSortOptions.value = columns;
-          cachePlainOptions.value = columns;
-          state.defaultCheckList = checkList;
-        } else {
-          // const fixedColumns = columns.filter((item) =>
-          //   Reflect.has(item, 'fixed')
-          // ) as BasicColumn[];
-
-          unref(plainOptions).forEach((item: BasicColumn) => {
-            const findItem = columns.find((col: BasicColumn) => col.dataIndex === item.dataIndex);
-            if (findItem) {
-              item.fixed = findItem.fixed;
-            }
-          });
-        }
-        state.isInit = true;
-        state.checkedList = checkList;
-      }
-
-      // checkAll change
-      function onCheckAllChange(e: CheckboxChangeEvent) {
-        const checkList = plainOptions.value.map((item) => item.value);
-        if (e.target.checked) {
-          state.checkedList = checkList;
-          setColumns(checkList);
-        } else {
-          state.checkedList = [];
-          setColumns([]);
-        }
-      }
-
-      const indeterminate = computed(() => {
-        const len = plainOptions.value.length;
-        let checkedLen = state.checkedList.length;
-        unref(checkIndex) && checkedLen--;
-        return checkedLen > 0 && checkedLen < len;
-      });
-
-      // Trigger when check/uncheck a column
-      function onChange(checkedList: string[]) {
-        const len = plainSortOptions.value.length;
-        state.checkAll = checkedList.length === len;
-        const sortList = unref(plainSortOptions).map((item) => item.value);
-        checkedList.sort((prev, next) => {
-          return sortList.indexOf(prev) - sortList.indexOf(next);
-        });
-        setColumns(checkedList);
-      }
-
-      // reset columns
-      function reset() {
-        state.checkedList = [...state.defaultCheckList];
-        state.checkAll = true;
-        plainOptions.value = unref(cachePlainOptions);
-        plainSortOptions.value = unref(cachePlainOptions);
-        setColumns(table.getCacheColumns());
-        if (sortableOrder.value) {
-          sortable.sort(sortableOrder.value);
-        }
-        resetSetting();
-      }
-
-      // Open the pop-up window for drag and drop initialization
-      function handleVisibleChange() {
-        if (inited) return;
-        nextTick(() => {
-          const columnListEl = unref(columnListRef);
-          if (!columnListEl) return;
-          const el = columnListEl.$el as any;
-          if (!el) return;
-          // Drag and drop sort
-          sortable = Sortablejs.create(unref(el), {
-            animation: 500,
-            delay: 400,
-            delayOnTouchOnly: true,
-            handle: '.table-column-drag-icon ',
-            onEnd: (evt) => {
-              const { oldIndex, newIndex } = evt;
-              if (isNullAndUnDef(oldIndex) || isNullAndUnDef(newIndex) || oldIndex === newIndex) {
-                return;
-              }
-              // Sort column
-              const columns = cloneDeep(plainSortOptions.value);
-
-              if (oldIndex > newIndex) {
-                columns.splice(newIndex, 0, columns[oldIndex]);
-                columns.splice(oldIndex + 1, 1);
-              } else {
-                columns.splice(newIndex + 1, 0, columns[oldIndex]);
-                columns.splice(oldIndex, 1);
-              }
-
-              plainSortOptions.value = columns;
-              setColumns(columns);
-            },
-          });
-          // 璁板綍鍘熷 order 搴忓垪
-          if (!sortableOrder.value) {
-            sortableOrder.value = sortable.toArray();
-          }
-          inited = true;
-        });
-      }
-
-      // Control whether the serial number column is displayed
-      function handleIndexCheckChange(e: CheckboxChangeEvent) {
-        table.setProps({
-          showIndexColumn: e.target.checked,
-        });
-      }
-
-      // Control whether the check box is displayed
-      function handleSelectCheckChange(e: CheckboxChangeEvent) {
-        table.setProps({
-          rowSelection: e.target.checked ? defaultRowSelection : undefined,
-        });
-      }
-
-      function handleColumnFixed(item: BasicColumn, fixed?: 'left' | 'right') {
-        if (!state.checkedList.includes(item.dataIndex as string)) return;
-
-        const columns = getColumns() as BasicColumn[];
-        const isFixed = item.fixed === fixed ? false : fixed;
-        const index = columns.findIndex((col) => col.dataIndex === item.dataIndex);
-        if (index !== -1) {
-          columns[index].fixed = isFixed;
-        }
-        item.fixed = isFixed;
-
-        if (isFixed && !item.width) {
-          item.width = 100;
-        }
-        table.setCacheColumnsByField?.(item.dataIndex as string, { fixed: isFixed });
-        setColumns(columns);
-      }
-
-      function setColumns(columns: BasicColumn[] | string[]) {
-        table.setColumns(columns);
-        const data: ColumnChangeParam[] = unref(plainSortOptions).map((col) => {
-          const visible =
-            columns.findIndex((c: BasicColumn | string) => c === col.value || (typeof c !== 'string' && c.dataIndex === col.value)) !== -1;
-          return { dataIndex: col.value, fixed: col.fixed, visible };
-        });
-
-        emit('columns-change', data);
-      }
-
-      function getPopupContainer() {
-        return isFunction(attrs.getPopupContainer) ? attrs.getPopupContainer() : getParentContainer();
-      }
-
-      return {
-        getBindProps,
-        t,
-        ...toRefs(state),
-        popoverVisible,
-        indeterminate,
-        onCheckAllChange,
-        onChange,
-        plainOptions,
-        reset,
-        saveSetting,
-        prefixCls,
-        columnListRef,
-        handleVisibleChange,
-        checkIndex,
-        checkSelect,
-        handleIndexCheckChange,
-        handleSelectCheckChange,
-        defaultRowSelection,
-        handleColumnFixed,
-        getPopupContainer,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-column-setting';
-
-  .table-column-drag-icon {
-    margin: 0 5px;
-    cursor: move;
-  }
-
-  .@{prefix-cls} {
-    &__popover-title {
-      position: relative;
-      display: flex;
-      align-items: center;
-      justify-content: space-between;
-    }
-
-    /* 鍗$墖搴曢儴鏍峰紡 */
-    &__popover-footer {
-      position: relative;
-      top: 7px;
-      text-align: right;
-      padding: 4px 0 0;
-      border-top: 1px solid #f0f0f0;
-
-      .ant-btn {
-        margin-right: 6px;
-      }
-    }
-
-    &__check-item {
-      display: flex;
-      align-items: center;
-      min-width: 100%;
-      padding: 4px 16px 8px 0;
-
-      .ant-checkbox-wrapper {
-        width: 100%;
-
-        &:hover {
-          color: @primary-color;
-        }
-      }
-    }
-
-    &__fixed-left,
-    &__fixed-right {
-      color: rgba(0, 0, 0, 0.45);
-      cursor: pointer;
-
-      &.active,
-      &:hover {
-        color: @primary-color;
-      }
-
-      &.disabled {
-        color: @disabled-color;
-        cursor: not-allowed;
-      }
-    }
-
-    &__fixed-right {
-      transform: rotate(180deg);
-    }
-
-    &__cloumn-list {
-      svg {
-        width: 1em !important;
-        height: 1em !important;
-      }
-
-      .ant-popover-inner-content {
-        // max-height: 360px;
-        padding-right: 0;
-        padding-left: 0;
-        // overflow: auto;
-      }
-
-      .ant-checkbox-group {
-        width: 100%;
-        min-width: 260px;
-        // flex-wrap: wrap;
-      }
-
-      .scrollbar {
-        height: 220px;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Table/src/components/settings/FullScreenSetting.vue b/src/components/Table/src/components/settings/FullScreenSetting.vue
deleted file mode 100644
index 046d647..0000000
--- a/src/components/Table/src/components/settings/FullScreenSetting.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-<template>
-  <Tooltip placement="top" v-bind="getBindProps">
-    <template #title>
-      <span>{{ t('component.table.settingFullScreen') }}</span>
-    </template>
-    <FullscreenOutlined @click="toggle" v-if="!isFullscreen" />
-    <FullscreenExitOutlined @click="toggle" v-else />
-  </Tooltip>
-</template>
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { Tooltip } from 'ant-design-vue';
-  import { FullscreenOutlined, FullscreenExitOutlined } from '@ant-design/icons-vue';
-  import { useFullscreen } from '@vueuse/core';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useTableContext } from '../../hooks/useTableContext';
-
-  export default defineComponent({
-    name: 'FullScreenSetting',
-    props: {
-      isMobile: Boolean,
-    },
-    components: {
-      FullscreenExitOutlined,
-      FullscreenOutlined,
-      Tooltip,
-    },
-
-    setup(props) {
-      const table = useTableContext();
-      const { t } = useI18n();
-      const { toggle, isFullscreen } = useFullscreen(table.wrapRef);
-      const getBindProps = computed(() => {
-        let obj = {};
-        if (props.isMobile) {
-          obj['visible'] = false;
-        }
-        return obj;
-      });
-      return {
-        getBindProps,
-        toggle,
-        isFullscreen,
-        t,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Table/src/components/settings/RedoSetting.vue b/src/components/Table/src/components/settings/RedoSetting.vue
deleted file mode 100644
index e584c13..0000000
--- a/src/components/Table/src/components/settings/RedoSetting.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<template>
-  <Tooltip placement="top" v-bind="getBindProps">
-    <template #title>
-      <span>{{ t('common.redo') }}</span>
-    </template>
-    <RedoOutlined @click="redo" />
-  </Tooltip>
-</template>
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { Tooltip } from 'ant-design-vue';
-  import { RedoOutlined } from '@ant-design/icons-vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useTableContext } from '../../hooks/useTableContext';
-
-  export default defineComponent({
-    name: 'RedoSetting',
-    props: {
-      isMobile: Boolean,
-    },
-    components: {
-      RedoOutlined,
-      Tooltip,
-    },
-    setup(props) {
-      const table = useTableContext();
-      const { t } = useI18n();
-
-      const getBindProps = computed(() => {
-        let obj = {};
-        if (props.isMobile) {
-          obj['visible'] = false;
-        }
-        return obj;
-      });
-
-      function redo() {
-        table.reload();
-        table.emit!('table-redo');
-      }
-
-      return { getBindProps, redo, t };
-    },
-  });
-</script>
diff --git a/src/components/Table/src/components/settings/SizeSetting.vue b/src/components/Table/src/components/settings/SizeSetting.vue
deleted file mode 100644
index e681747..0000000
--- a/src/components/Table/src/components/settings/SizeSetting.vue
+++ /dev/null
@@ -1,74 +0,0 @@
-<template>
-  <Tooltip placement="top" v-bind="getBindProps">
-    <template #title>
-      <span>{{ t('component.table.settingDens') }}</span>
-    </template>
-
-    <Dropdown placement="bottom" :trigger="['click']" :getPopupContainer="getPopupContainer">
-      <ColumnHeightOutlined />
-      <template #overlay>
-        <Menu @click="handleTitleClick" selectable v-model:selectedKeys="selectedKeysRef">
-          <MenuItem key="default">
-            <span>{{ t('component.table.settingDensDefault') }}</span>
-          </MenuItem>
-          <MenuItem key="middle">
-            <span>{{ t('component.table.settingDensMiddle') }}</span>
-          </MenuItem>
-          <MenuItem key="small">
-            <span>{{ t('component.table.settingDensSmall') }}</span>
-          </MenuItem>
-        </Menu>
-      </template>
-    </Dropdown>
-  </Tooltip>
-</template>
-<script lang="ts">
-  import type { SizeType } from '../../types/table';
-  import { computed, defineComponent, ref } from 'vue';
-  import { Tooltip, Dropdown, Menu } from 'ant-design-vue';
-  import { ColumnHeightOutlined } from '@ant-design/icons-vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useTableContext } from '../../hooks/useTableContext';
-  import { getPopupContainer } from '/@/utils';
-
-  export default defineComponent({
-    name: 'SizeSetting',
-    props: {
-      isMobile: Boolean,
-    },
-    components: {
-      ColumnHeightOutlined,
-      Tooltip,
-      Dropdown,
-      Menu,
-      MenuItem: Menu.Item,
-    },
-    setup(props) {
-      const table = useTableContext();
-      const { t } = useI18n();
-
-      const selectedKeysRef = ref<SizeType[]>([table.getSize()]);
-      const getBindProps = computed(() => {
-        let obj = {};
-        if (props.isMobile) {
-          obj['visible'] = false;
-        }
-        return obj;
-      });
-      function handleTitleClick({ key }: { key: SizeType }) {
-        selectedKeysRef.value = [key];
-        table.setProps({
-          size: key,
-        });
-      }
-
-      return {
-        getBindProps,
-        handleTitleClick,
-        selectedKeysRef,
-        getPopupContainer,
-        t,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Table/src/components/settings/index.vue b/src/components/Table/src/components/settings/index.vue
deleted file mode 100644
index 3a615ad..0000000
--- a/src/components/Table/src/components/settings/index.vue
+++ /dev/null
@@ -1,74 +0,0 @@
-<template>
-  <div class="table-settings">
-    <RedoSetting v-if="getSetting.redo" :isMobile="isMobile" :getPopupContainer="getTableContainer" />
-    <SizeSetting v-if="getSetting.size" :isMobile="isMobile" :getPopupContainer="getTableContainer" />
-    <ColumnSetting v-if="getSetting.setting" :isMobile="isMobile" @columns-change="handleColumnChange" :getPopupContainer="getTableContainer" />
-    <FullScreenSetting v-if="getSetting.fullScreen" :isMobile="isMobile" :getPopupContainer="getTableContainer" />
-  </div>
-</template>
-<script lang="ts">
-  import type { PropType } from 'vue';
-  import type { TableSetting, ColumnChangeParam } from '../../types/table';
-  import { defineComponent, computed, unref } from 'vue';
-  import ColumnSetting from './ColumnSetting.vue';
-  import SizeSetting from './SizeSetting.vue';
-  import RedoSetting from './RedoSetting.vue';
-  import FullScreenSetting from './FullScreenSetting.vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useTableContext } from '../../hooks/useTableContext';
-
-  export default defineComponent({
-    name: 'TableSetting',
-    components: {
-      ColumnSetting,
-      SizeSetting,
-      RedoSetting,
-      FullScreenSetting,
-    },
-    props: {
-      setting: {
-        type: Object as PropType<TableSetting>,
-        default: () => ({}),
-      },
-      mode: String,
-    },
-    emits: ['columns-change'],
-    setup(props, { emit }) {
-      const { t } = useI18n();
-      const table = useTableContext();
-
-      const getSetting = computed((): TableSetting => {
-        return {
-          redo: true,
-          size: true,
-          setting: true,
-          fullScreen: false,
-          ...props.setting,
-        };
-      });
-      const isMobile = computed(() => props.mode === 'mobile');
-
-      function handleColumnChange(data: ColumnChangeParam[]) {
-        emit('columns-change', data);
-      }
-
-      function getTableContainer() {
-        return table ? unref(table.wrapRef) : document.body;
-      }
-
-      return { getSetting, t, handleColumnChange, getTableContainer, isMobile };
-    },
-  });
-</script>
-<style lang="less">
-  .table-settings {
-    & > * {
-      margin-right: 12px;
-    }
-
-    svg {
-      width: 1.3em;
-      height: 1.3em;
-    }
-  }
-</style>
diff --git a/src/components/Table/src/const.ts b/src/components/Table/src/const.ts
deleted file mode 100644
index 9968ec5..0000000
--- a/src/components/Table/src/const.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import componentSetting from '/@/settings/componentSetting';
-
-const { table } = componentSetting;
-
-const { pageSizeOptions, defaultPageSize, defaultSize, fetchSetting, defaultSortFn, defaultFilterFn } = table;
-
-export const ROW_KEY = 'key';
-
-// Optional display number per page;
-export const PAGE_SIZE_OPTIONS = pageSizeOptions;
-
-// Number of items displayed per page
-export const PAGE_SIZE = defaultPageSize;
-
-// Common interface field settings
-export const FETCH_SETTING = fetchSetting;
-
-// Configure general sort function
-export const DEFAULT_SORT_FN = defaultSortFn;
-
-export const DEFAULT_FILTER_FN = defaultFilterFn;
-
-//  Default layout of table cells
-export const DEFAULT_ALIGN = 'center';
-// Default Size
-export const DEFAULT_SIZE = defaultSize;
-
-export const INDEX_COLUMN_FLAG = 'INDEX';
-
-export const ACTION_COLUMN_FLAG = 'ACTION';
diff --git a/src/components/Table/src/hooks/useColumns.ts b/src/components/Table/src/hooks/useColumns.ts
deleted file mode 100644
index ee805d0..0000000
--- a/src/components/Table/src/hooks/useColumns.ts
+++ /dev/null
@@ -1,310 +0,0 @@
-import type { BasicColumn, BasicTableProps, CellFormat, GetColumnsParams } from '../types/table';
-import type { PaginationProps } from '../types/pagination';
-import type { ComputedRef } from 'vue';
-import { computed, Ref, ref, toRaw, unref, watch, reactive } from 'vue';
-import { renderEditCell } from '../components/editable';
-import { usePermission } from '/@/hooks/web/usePermission';
-import { useI18n } from '/@/hooks/web/useI18n';
-import { isArray, isBoolean, isFunction, isMap, isString } from '/@/utils/is';
-import { cloneDeep, isEqual } from 'lodash-es';
-import { formatToDate } from '/@/utils/dateUtil';
-import { ACTION_COLUMN_FLAG, DEFAULT_ALIGN, INDEX_COLUMN_FLAG, PAGE_SIZE } from '../const';
-
-function handleItem(item: BasicColumn, ellipsis: boolean) {
-  const { key, dataIndex, children } = item;
-  item.align = item.align || DEFAULT_ALIGN;
-  if (ellipsis) {
-    if (!key) {
-      item.key = dataIndex;
-    }
-    if (!isBoolean(item.ellipsis)) {
-      Object.assign(item, {
-        ellipsis,
-      });
-    }
-  }
-  if (children && children.length) {
-    handleChildren(children, !!ellipsis);
-  }
-}
-
-function handleChildren(children: BasicColumn[] | undefined, ellipsis: boolean) {
-  if (!children) return;
-  children.forEach((item) => {
-    const { children } = item;
-    handleItem(item, ellipsis);
-    handleChildren(children, ellipsis);
-  });
-}
-
-function handleIndexColumn(propsRef: ComputedRef<BasicTableProps>, getPaginationRef: ComputedRef<boolean | PaginationProps>, columns: BasicColumn[]) {
-  const { t } = useI18n();
-
-  const { showIndexColumn, indexColumnProps, isTreeTable } = unref(propsRef);
-
-  let pushIndexColumns = false;
-  if (unref(isTreeTable)) {
-    return;
-  }
-  columns.forEach(() => {
-    const indIndex = columns.findIndex((column) => column.flag === INDEX_COLUMN_FLAG);
-    if (showIndexColumn) {
-      pushIndexColumns = indIndex === -1;
-    } else if (!showIndexColumn && indIndex !== -1) {
-      columns.splice(indIndex, 1);
-    }
-  });
-
-  if (!pushIndexColumns) return;
-
-  const isFixedLeft = columns.some((item) => item.fixed === 'left');
-
-  columns.unshift({
-    flag: INDEX_COLUMN_FLAG,
-    width: 50,
-    title: t('component.table.index'),
-    align: 'center',
-    customRender: ({ index }) => {
-      const getPagination = unref(getPaginationRef);
-      if (isBoolean(getPagination)) {
-        return `${index + 1}`;
-      }
-      const { current = 1, pageSize = PAGE_SIZE } = getPagination;
-      return ((current < 1 ? 1 : current) - 1) * pageSize + index + 1;
-    },
-    ...(isFixedLeft
-      ? {
-          fixed: 'left',
-        }
-      : {}),
-    ...indexColumnProps,
-  });
-}
-
-function handleActionColumn(propsRef: ComputedRef<BasicTableProps>, columns: BasicColumn[]) {
-  const { actionColumn, showActionColumn } = unref(propsRef);
-  if (!actionColumn || !showActionColumn) return;
-
-  const hasIndex = columns.findIndex((column) => column.flag === ACTION_COLUMN_FLAG);
-  if (hasIndex === -1) {
-    columns.push({
-      ...columns[hasIndex],
-      ...actionColumn,
-      flag: ACTION_COLUMN_FLAG,
-    });
-  }
-}
-
-export function useColumns(propsRef: ComputedRef<BasicTableProps>, getPaginationRef: ComputedRef<boolean | PaginationProps>) {
-  const columnsRef = ref(unref(propsRef).columns) as unknown as Ref<BasicColumn[]>;
-  let cacheColumns = unref(propsRef).columns;
-
-  const getColumnsRef = computed(() => {
-    const columns = cloneDeep(unref(columnsRef));
-
-    handleIndexColumn(propsRef, getPaginationRef, columns);
-    handleActionColumn(propsRef, columns);
-    if (!columns) {
-      return [];
-    }
-    const { ellipsis } = unref(propsRef);
-
-    columns.forEach((item) => {
-      const { customRender, slots } = item;
-
-      handleItem(item, Reflect.has(item, 'ellipsis') ? !!item.ellipsis : !!ellipsis && !customRender && !slots);
-    });
-    return columns;
-  });
-
-  function isIfShow(column: BasicColumn): boolean {
-    const ifShow = column.ifShow;
-
-    let isIfShow = true;
-
-    if (isBoolean(ifShow)) {
-      isIfShow = ifShow;
-    }
-    if (isFunction(ifShow)) {
-      isIfShow = ifShow(column);
-    }
-    return isIfShow;
-  }
-  const { hasPermission } = usePermission();
-
-  const getViewColumns = computed(() => {
-    const viewColumns = sortFixedColumn(unref(getColumnsRef));
-
-    const columns = cloneDeep(viewColumns);
-    return columns
-      .filter((column) => {
-        return hasPermission(column.auth) && isIfShow(column);
-      })
-      .map((column) => {
-        const { slots, customRender, format, edit, editRow, flag, title: metaTitle } = column;
-
-        if (!slots || !slots?.title) {
-          // column.slots = { title: `header-${dataIndex}`, ...(slots || {}) };
-          column.customTitle = column.title as string;
-          Reflect.deleteProperty(column, 'title');
-        }
-        //update-begin-author:taoyan date:20211203 for:銆恛nline鎶ヨ〃銆戝垎缁勬爣棰樻樉绀洪敊璇紝閮芥樉绀烘垚浜嗚仈绯讳俊鎭� LOWCOD-2343
-        if (column.children) {
-          column.title = metaTitle;
-        }
-        //update-end-author:taoyan date:20211203 for:銆恛nline鎶ヨ〃銆戝垎缁勬爣棰樻樉绀洪敊璇紝閮芥樉绀烘垚浜嗚仈绯讳俊鎭� LOWCOD-2343
-
-        const isDefaultAction = [INDEX_COLUMN_FLAG, ACTION_COLUMN_FLAG].includes(flag!);
-        if (!customRender && format && !edit && !isDefaultAction) {
-          column.customRender = ({ text, record, index }) => {
-            return formatCell(text, format, record, index);
-          };
-        }
-
-        // edit table
-        if ((edit || editRow) && !isDefaultAction) {
-          column.customRender = renderEditCell(column);
-        }
-        return reactive(column);
-      });
-  });
-
-  watch(
-    () => unref(propsRef).columns,
-    (columns) => {
-      columnsRef.value = columns;
-      cacheColumns = columns?.filter((item) => !item.flag) ?? [];
-    }
-  );
-
-  function setCacheColumnsByField(dataIndex: string | undefined, value: Partial<BasicColumn>) {
-    if (!dataIndex || !value) {
-      return;
-    }
-    cacheColumns.forEach((item) => {
-      if (item.dataIndex === dataIndex) {
-        Object.assign(item, value);
-        return;
-      }
-    });
-  }
-
-  // update-begin--author:sunjianlei---date:20220523---for: 銆怴UEN-1089銆戝悎骞秜ben鏈�鏂扮増浠g爜锛岃В鍐宠〃鏍煎瓧娈垫帓搴忛棶棰�
-  /**
-   * set columns
-   * @param columnList key锝渃olumn
-   */
-  function setColumns(columnList: Partial<BasicColumn>[] | (string | string[])[]) {
-    const columns = cloneDeep(columnList);
-    if (!isArray(columns)) return;
-
-    if (columns.length <= 0) {
-      columnsRef.value = [];
-      return;
-    }
-
-    const firstColumn = columns[0];
-
-    const cacheKeys = cacheColumns.map((item) => item.dataIndex);
-
-    if (!isString(firstColumn) && !isArray(firstColumn)) {
-      columnsRef.value = columns as BasicColumn[];
-    } else {
-      const columnKeys = (columns as (string | string[])[]).map((m) => m.toString());
-      const newColumns: BasicColumn[] = [];
-      cacheColumns.forEach((item) => {
-        newColumns.push({
-          ...item,
-          defaultHidden: !columnKeys.includes(item.dataIndex?.toString() || (item.key as string)),
-        });
-      });
-      // Sort according to another array
-      if (!isEqual(cacheKeys, columns)) {
-        newColumns.sort((prev, next) => {
-          return columnKeys.indexOf(prev.dataIndex?.toString() as string) - columnKeys.indexOf(next.dataIndex?.toString() as string);
-        });
-      }
-      columnsRef.value = newColumns;
-    }
-  }
-  // update-end--author:sunjianlei---date:20220523---for: 銆怴UEN-1089銆戝悎骞秜ben鏈�鏂扮増浠g爜锛岃В鍐宠〃鏍煎瓧娈垫帓搴忛棶棰�
-
-  function getColumns(opt?: GetColumnsParams) {
-    const { ignoreIndex, ignoreAction, sort } = opt || {};
-    let columns = toRaw(unref(getColumnsRef));
-    if (ignoreIndex) {
-      columns = columns.filter((item) => item.flag !== INDEX_COLUMN_FLAG);
-    }
-    if (ignoreAction) {
-      columns = columns.filter((item) => item.flag !== ACTION_COLUMN_FLAG);
-    }
-
-    if (sort) {
-      columns = sortFixedColumn(columns);
-    }
-
-    return columns;
-  }
-  function getCacheColumns() {
-    return cacheColumns;
-  }
-
-  return {
-    getColumnsRef,
-    getCacheColumns,
-    getColumns,
-    setColumns,
-    getViewColumns,
-    setCacheColumnsByField,
-  };
-}
-
-function sortFixedColumn(columns: BasicColumn[]) {
-  const fixedLeftColumns: BasicColumn[] = [];
-  const fixedRightColumns: BasicColumn[] = [];
-  const defColumns: BasicColumn[] = [];
-  for (const column of columns) {
-    if (column.fixed === 'left') {
-      fixedLeftColumns.push(column);
-      continue;
-    }
-    if (column.fixed === 'right') {
-      fixedRightColumns.push(column);
-      continue;
-    }
-    defColumns.push(column);
-  }
-  return [...fixedLeftColumns, ...defColumns, ...fixedRightColumns].filter((item) => !item.defaultHidden);
-}
-
-// format cell
-export function formatCell(text: string, format: CellFormat, record: Recordable, index: number) {
-  if (!format) {
-    return text;
-  }
-
-  // custom function
-  if (isFunction(format)) {
-    return format(text, record, index);
-  }
-
-  try {
-    // date type
-    const DATE_FORMAT_PREFIX = 'date|';
-    if (isString(format) && format.startsWith(DATE_FORMAT_PREFIX)) {
-      const dateFormat = format.replace(DATE_FORMAT_PREFIX, '');
-
-      if (!dateFormat) {
-        return text;
-      }
-      return formatToDate(text, dateFormat);
-    }
-
-    // Map
-    if (isMap(format)) {
-      return format.get(text);
-    }
-  } catch (error) {
-    return text;
-  }
-}
diff --git a/src/components/Table/src/hooks/useColumnsCache.ts b/src/components/Table/src/hooks/useColumnsCache.ts
deleted file mode 100644
index 1650608..0000000
--- a/src/components/Table/src/hooks/useColumnsCache.ts
+++ /dev/null
@@ -1,137 +0,0 @@
-import { computed, nextTick, unref, watchEffect } from 'vue';
-import { router } from '/@/router';
-import { createLocalStorage } from '/@/utils/cache';
-import { useTableContext } from './useTableContext';
-import { useMessage } from '/@/hooks/web/useMessage';
-
-/**
- * 鍒楄〃閰嶇疆缂撳瓨
- */
-export function useColumnsCache(opt, setColumns, handleColumnFixed) {
-  let isInit = false;
-  const table = useTableContext();
-  const $ls = createLocalStorage();
-  const { createMessage: $message } = useMessage();
-  // 鍒楄〃閰嶇疆缂撳瓨key
-  const cacheKey = computed(() => {
-    let { fullPath } = router.currentRoute.value;
-    let key = fullPath.replace(/[\/\\]/g, '_');
-    let cacheKey = table.getBindValues.value.tableSetting?.cacheKey;
-    if (cacheKey) {
-      key += ':' + cacheKey;
-    }
-    return 'columnCache:' + key;
-  });
-
-  watchEffect(() => {
-    const columns = table.getColumns();
-    if (columns.length) {
-      init();
-    }
-  });
-
-  async function init() {
-    if (isInit) {
-      return;
-    }
-    isInit = true;
-    let columnCache = $ls.get(cacheKey.value);
-    if (columnCache && columnCache.checkedList) {
-      const { checkedList, sortedList, sortableOrder, checkIndex } = columnCache;
-      await nextTick();
-      // checkbox鐨勬帓搴忕紦瀛�
-      opt.sortableOrder.value = sortableOrder;
-      // checkbox鐨勯�変腑缂撳瓨
-      opt.state.checkedList = checkedList;
-      // tableColumn鐨勬帓搴忕紦瀛�
-      opt.plainSortOptions.value.sort((prev, next) => {
-        return sortedList.indexOf(prev.value) - sortedList.indexOf(next.value);
-      });
-      // 閲嶆柊鎺掑簭tableColumn
-      checkedList.sort((prev, next) => sortedList.indexOf(prev) - sortedList.indexOf(next));
-      // 鏄惁鏄剧ず琛屽彿鍒�
-      if (checkIndex) {
-        table.setProps({ showIndexColumn: true });
-      }
-      setColumns(checkedList);
-      // 璁剧疆鍥哄畾鍒�
-      setColumnFixed(columnCache);
-    }
-  }
-
-  /** 璁剧疆琚浐瀹氱殑鍒� */
-  async function setColumnFixed(columnCache) {
-    const { fixedColumns } = columnCache;
-    const columns = opt.plainOptions.value;
-    for (const column of columns) {
-      let fixedCol = fixedColumns.find((fc) => fc.key === (column.key || column.dataIndex));
-      if (fixedCol) {
-        await nextTick();
-        handleColumnFixed(column, fixedCol.fixed);
-      }
-    }
-  }
-
-  // 鍒ゆ柇鍒楀浐瀹氱姸鎬�
-  const fixedReg = /^(true|left|right)$/;
-
-  /** 鑾峰彇琚浐瀹氱殑鍒� */
-  function getFixedColumns() {
-    let fixedColumns: any[] = [];
-    const columns = opt.plainOptions.value;
-    for (const column of columns) {
-      if (fixedReg.test((column.fixed ?? '').toString())) {
-        fixedColumns.push({
-          key: column.key || column.dataIndex,
-          fixed: column.fixed === true ? 'left' : column.fixed,
-        });
-      }
-    }
-    return fixedColumns;
-  }
-
-  /** 淇濆瓨鍒楅厤缃� */
-  function saveSetting() {
-    const { checkedList } = opt.state;
-    const sortedList = unref(opt.plainSortOptions).map((item) => item.value);
-    $ls.set(cacheKey.value, {
-      // 淇濆瓨鐨勫垪
-      checkedList,
-      // 鎺掑簭鍚庣殑鍒�
-      sortedList,
-      // 鏄惁鏄剧ず琛屽彿鍒�
-      checkIndex: unref(opt.checkIndex),
-      // checkbox鍘熷鎺掑簭
-      sortableOrder: unref(opt.sortableOrder),
-      // 鍥哄畾鍒�
-      fixedColumns: getFixedColumns(),
-    });
-    $message.success('淇濆瓨鎴愬姛');
-    // 淇濆瓨涔嬪悗鐩存帴鍏抽棴
-    opt.popoverVisible.value = false;
-  }
-
-  /** 閲嶇疆锛堝垹闄わ級鍒楅厤缃� */
-  async function resetSetting() {
-    // 閲嶇疆鍥哄畾鍒�
-    await resetFixedColumn();
-    $ls.remove(cacheKey.value);
-    $message.success('閲嶇疆鎴愬姛');
-  }
-
-  async function resetFixedColumn() {
-    const columns = opt.plainOptions.value;
-    for (const column of columns) {
-      column.fixed;
-      if (fixedReg.test((column.fixed ?? '').toString())) {
-        await nextTick();
-        handleColumnFixed(column, null);
-      }
-    }
-  }
-
-  return {
-    saveSetting,
-    resetSetting,
-  };
-}
diff --git a/src/components/Table/src/hooks/useCustomRow.ts b/src/components/Table/src/hooks/useCustomRow.ts
deleted file mode 100644
index d7230f4..0000000
--- a/src/components/Table/src/hooks/useCustomRow.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import type { ComputedRef } from 'vue';
-import type { BasicTableProps } from '../types/table';
-import { unref } from 'vue';
-import { ROW_KEY } from '../const';
-import { isString, isFunction } from '/@/utils/is';
-
-interface Options {
-  setSelectedRowKeys: (keys: string[]) => void;
-  getSelectRowKeys: () => string[];
-  clearSelectedRowKeys: () => void;
-  emit: EmitType;
-  getAutoCreateKey: ComputedRef<boolean | undefined>;
-}
-
-function getKey(record: Recordable, rowKey: string | ((record: Record<string, any>) => string) | undefined, autoCreateKey?: boolean) {
-  if (!rowKey || autoCreateKey) {
-    return record[ROW_KEY];
-  }
-  if (isString(rowKey)) {
-    return record[rowKey];
-  }
-  if (isFunction(rowKey)) {
-    return record[rowKey(record)];
-  }
-  return null;
-}
-
-export function useCustomRow(
-  propsRef: ComputedRef<BasicTableProps>,
-  { setSelectedRowKeys, getSelectRowKeys, getAutoCreateKey, clearSelectedRowKeys, emit }: Options
-) {
-  const customRow = (record: Recordable, index: number) => {
-    return {
-      onClick: (e: Event) => {
-        e?.stopPropagation();
-        function handleClick() {
-          const { rowSelection, rowKey, clickToRowSelect } = unref(propsRef);
-          if (!rowSelection || !clickToRowSelect) return;
-          const keys = getSelectRowKeys();
-          const key = getKey(record, rowKey, unref(getAutoCreateKey));
-          if (!key) return;
-
-          const isCheckbox = rowSelection.type === 'checkbox';
-          if (isCheckbox) {
-            // 鎵惧埌tr
-            const tr: HTMLElement = (e as MouseEvent).composedPath?.().find((dom: HTMLElement) => dom.tagName === 'TR') as HTMLElement;
-            if (!tr) return;
-            // 鎵惧埌Checkbox锛屾鏌ユ槸鍚︿负disabled
-            const checkBox = tr.querySelector('input[type=checkbox]');
-            if (!checkBox || checkBox.hasAttribute('disabled')) return;
-            if (!keys.includes(key)) {
-              setSelectedRowKeys([...keys, key]);
-              return;
-            }
-            const keyIndex = keys.findIndex((item) => item === key);
-            keys.splice(keyIndex, 1);
-            setSelectedRowKeys(keys);
-            return;
-          }
-
-          const isRadio = rowSelection.type === 'radio';
-          if (isRadio) {
-            if (!keys.includes(key)) {
-              if (keys.length) {
-                clearSelectedRowKeys();
-              }
-              setSelectedRowKeys([key]);
-              return;
-            }
-            clearSelectedRowKeys();
-          }
-        }
-        handleClick();
-        emit('row-click', record, index, e);
-      },
-      onDblclick: (event: Event) => {
-        emit('row-dbClick', record, index, event);
-      },
-      onContextmenu: (event: Event) => {
-        emit('row-contextmenu', record, index, event);
-      },
-      onMouseenter: (event: Event) => {
-        emit('row-mouseenter', record, index, event);
-      },
-      onMouseleave: (event: Event) => {
-        emit('row-mouseleave', record, index, event);
-      },
-    };
-  };
-
-  return {
-    customRow,
-  };
-}
diff --git a/src/components/Table/src/hooks/useDataSource.ts b/src/components/Table/src/hooks/useDataSource.ts
deleted file mode 100644
index 4b805ec..0000000
--- a/src/components/Table/src/hooks/useDataSource.ts
+++ /dev/null
@@ -1,338 +0,0 @@
-import type { BasicTableProps, FetchParams, SorterResult } from '../types/table';
-import type { PaginationProps } from '../types/pagination';
-import { ref, unref, ComputedRef, computed, onMounted, watch, reactive, Ref, watchEffect } from 'vue';
-import { useTimeoutFn } from '/@/hooks/core/useTimeout';
-import { buildUUID } from '/@/utils/uuid';
-import { isFunction, isBoolean } from '/@/utils/is';
-import { get, cloneDeep } from 'lodash-es';
-import { FETCH_SETTING, ROW_KEY, PAGE_SIZE } from '../const';
-
-interface ActionType {
-  getPaginationInfo: ComputedRef<boolean | PaginationProps>;
-  setPagination: (info: Partial<PaginationProps>) => void;
-  setLoading: (loading: boolean) => void;
-  // update-begin--author:sunjianlei---date:220220419---for锛氱敱浜� getFieldsValue 杩斿洖鐨勪笉鏄�楀彿鍒嗗壊鐨勬暟鎹紝鎵�浠ユ敼鐢� validate
-  validate: () => Recordable;
-  // update-end--author:sunjianlei---date:220220419---for锛氱敱浜� getFieldsValue 杩斿洖鐨勪笉鏄�楀彿鍒嗗壊鐨勬暟鎹紝鎵�浠ユ敼鐢� validate
-  clearSelectedRowKeys: () => void;
-  tableData: Ref<Recordable[]>;
-}
-
-interface SearchState {
-  sortInfo: Recordable;
-  filterInfo: Record<string, string[]>;
-}
-export function useDataSource(
-  propsRef: ComputedRef<BasicTableProps>,
-  { getPaginationInfo, setPagination, setLoading, validate, clearSelectedRowKeys, tableData }: ActionType,
-  emit: EmitType
-) {
-  const searchState = reactive<SearchState>({
-    sortInfo: {},
-    filterInfo: {},
-  });
-  const dataSourceRef = ref<Recordable[]>([]);
-  const rawDataSourceRef = ref<Recordable>({});
-
-  watchEffect(() => {
-    tableData.value = unref(dataSourceRef);
-  });
-
-  watch(
-    () => unref(propsRef).dataSource,
-    () => {
-      const { dataSource, api } = unref(propsRef);
-      !api && dataSource && (dataSourceRef.value = dataSource);
-    },
-    {
-      immediate: true,
-    }
-  );
-
-  function handleTableChange(pagination: PaginationProps, filters: Partial<Recordable<string[]>>, sorter: SorterResult) {
-    const { clearSelectOnPageChange, sortFn, filterFn } = unref(propsRef);
-    if (clearSelectOnPageChange) {
-      clearSelectedRowKeys();
-    }
-    setPagination(pagination);
-
-    const params: Recordable = {};
-    if (sorter && isFunction(sortFn)) {
-      const sortInfo = sortFn(sorter);
-      searchState.sortInfo = sortInfo;
-      params.sortInfo = sortInfo;
-    }
-
-    if (filters && isFunction(filterFn)) {
-      const filterInfo = filterFn(filters);
-      searchState.filterInfo = filterInfo;
-      params.filterInfo = filterInfo;
-    }
-    fetch(params);
-  }
-
-  function setTableKey(items: any[]) {
-    if (!items || !Array.isArray(items)) return;
-    items.forEach((item) => {
-      if (!item[ROW_KEY]) {
-        item[ROW_KEY] = buildUUID();
-      }
-      if (item.children && item.children.length) {
-        setTableKey(item.children);
-      }
-    });
-  }
-
-  const getAutoCreateKey = computed(() => {
-    return unref(propsRef).autoCreateKey && !unref(propsRef).rowKey;
-  });
-
-  const getRowKey = computed(() => {
-    const { rowKey } = unref(propsRef);
-    return unref(getAutoCreateKey) ? ROW_KEY : rowKey;
-  });
-
-  const getDataSourceRef = computed(() => {
-    const dataSource = unref(dataSourceRef);
-    if (!dataSource || dataSource.length === 0) {
-      return unref(dataSourceRef);
-    }
-    if (unref(getAutoCreateKey)) {
-      const firstItem = dataSource[0];
-      const lastItem = dataSource[dataSource.length - 1];
-
-      if (firstItem && lastItem) {
-        if (!firstItem[ROW_KEY] || !lastItem[ROW_KEY]) {
-          const data = cloneDeep(unref(dataSourceRef));
-          data.forEach((item) => {
-            if (!item[ROW_KEY]) {
-              item[ROW_KEY] = buildUUID();
-            }
-            if (item.children && item.children.length) {
-              setTableKey(item.children);
-            }
-          });
-          dataSourceRef.value = data;
-        }
-      }
-    }
-    return unref(dataSourceRef);
-  });
-
-  async function updateTableData(index: number, key: string, value: any) {
-    const record = dataSourceRef.value[index];
-    if (record) {
-      dataSourceRef.value[index][key] = value;
-    }
-    return dataSourceRef.value[index];
-  }
-
-  function updateTableDataRecord(rowKey: string | number, record: Recordable): Recordable | undefined {
-    const row = findTableDataRecord(rowKey);
-
-    if (row) {
-      for (const field in row) {
-        if (Reflect.has(record, field)) row[field] = record[field];
-      }
-      return row;
-    }
-  }
-  function deleteTableDataRecord(rowKey: string | number | string[] | number[]) {
-    if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
-    const rowKeyName = unref(getRowKey);
-    if (!rowKeyName) return;
-    const rowKeys = !Array.isArray(rowKey) ? [rowKey] : rowKey;
-    for (const key of rowKeys) {
-      let index: number | undefined = dataSourceRef.value.findIndex((row) => {
-        let targetKeyName: string;
-        if (typeof rowKeyName === 'function') {
-          targetKeyName = rowKeyName(row);
-        } else {
-          targetKeyName = rowKeyName as string;
-        }
-        return row[targetKeyName] === key;
-      });
-      if (index >= 0) {
-        dataSourceRef.value.splice(index, 1);
-      }
-      index = unref(propsRef).dataSource?.findIndex((row) => {
-        let targetKeyName: string;
-        if (typeof rowKeyName === 'function') {
-          targetKeyName = rowKeyName(row);
-        } else {
-          targetKeyName = rowKeyName as string;
-        }
-        return row[targetKeyName] === key;
-      });
-      if (typeof index !== 'undefined' && index !== -1) unref(propsRef).dataSource?.splice(index, 1);
-    }
-    setPagination({
-      total: unref(propsRef).dataSource?.length,
-    });
-  }
-
-  function insertTableDataRecord(record: Recordable, index: number): Recordable | undefined {
-    //銆恑ssues/136銆戝悓姝ben锛欱asicTable 璋冪敤鎻掑叆鍑芥暟寮傚父鎻掑叆涓ゆ潯璁板綍]
-    // if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
-    index = index ?? dataSourceRef.value?.length;
-    unref(dataSourceRef).splice(index, 0, record);
-    return unref(dataSourceRef);
-  }
-  function findTableDataRecord(rowKey: string | number) {
-    if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
-
-    const rowKeyName = unref(getRowKey);
-    if (!rowKeyName) return;
-
-    const { childrenColumnName = 'children' } = unref(propsRef);
-
-    const findRow = (array: any[]) => {
-      let ret;
-      array.some(function iter(r) {
-        if (typeof rowKeyName === 'function') {
-          if ((rowKeyName(r) as string) === rowKey) {
-            ret = r;
-            return true;
-          }
-        } else {
-          if (Reflect.has(r, rowKeyName) && r[rowKeyName] === rowKey) {
-            ret = r;
-            return true;
-          }
-        }
-        return r[childrenColumnName] && r[childrenColumnName].some(iter);
-      });
-      return ret;
-    };
-
-    // const row = dataSourceRef.value.find(r => {
-    //   if (typeof rowKeyName === 'function') {
-    //     return (rowKeyName(r) as string) === rowKey
-    //   } else {
-    //     return Reflect.has(r, rowKeyName) && r[rowKeyName] === rowKey
-    //   }
-    // })
-    return findRow(dataSourceRef.value);
-  }
-
-  async function fetch(opt?: FetchParams) {
-    const { api, searchInfo, defSort, fetchSetting, beforeFetch, afterFetch, useSearchForm, pagination } = unref(propsRef);
-    if (!api || !isFunction(api)) return;
-    try {
-      setLoading(true);
-      const { pageField, sizeField, listField, totalField } = Object.assign({}, FETCH_SETTING, fetchSetting);
-      let pageParams: Recordable = {};
-
-      const { current = 1, pageSize = PAGE_SIZE } = unref(getPaginationInfo) as PaginationProps;
-
-      if ((isBoolean(pagination) && !pagination) || isBoolean(getPaginationInfo)) {
-        pageParams = {};
-      } else {
-        pageParams[pageField] = (opt && opt.page) || current;
-        pageParams[sizeField] = pageSize;
-      }
-
-      const { sortInfo = {}, filterInfo } = searchState;
-
-      let params: Recordable = {
-        ...pageParams,
-        // 鐢变簬 getFieldsValue 杩斿洖鐨勪笉鏄�楀彿鍒嗗壊鐨勬暟鎹紝鎵�浠ユ敼鐢� validate
-        ...(useSearchForm ? await validate() : {}),
-        ...searchInfo,
-        ...defSort,
-        ...(opt?.searchInfo ?? {}),
-        ...sortInfo,
-        ...filterInfo,
-        ...(opt?.sortInfo ?? {}),
-        ...(opt?.filterInfo ?? {}),
-      };
-      if (beforeFetch && isFunction(beforeFetch)) {
-        params = (await beforeFetch(params)) || params;
-      }
-
-      const res = await api(params);
-      rawDataSourceRef.value = res;
-
-      const isArrayResult = Array.isArray(res);
-
-      let resultItems: Recordable[] = isArrayResult ? res : get(res, listField);
-      const resultTotal: number = isArrayResult ? 0 : get(res, totalField);
-
-      // 鍋囧鏁版嵁鍙樺皯锛屽鑷存�婚〉鏁板彉灏戝苟灏忎簬褰撳墠閫変腑椤电爜锛岄�氳繃getPaginationRef鑾峰彇鍒扮殑椤电爜鏄笉姝g‘鐨勶紝闇�鑾峰彇姝g‘鐨勯〉鐮佸啀娆℃墽琛�
-      if (resultTotal) {
-        const currentTotalPage = Math.ceil(Number(resultTotal) / pageSize);
-        if (current > currentTotalPage) {
-          setPagination({
-            current: currentTotalPage,
-          });
-          return await fetch(opt);
-        }
-      }
-
-      if (afterFetch && isFunction(afterFetch)) {
-        resultItems = (await afterFetch(resultItems)) || resultItems;
-      }
-      dataSourceRef.value = resultItems;
-      setPagination({
-        total: Number(resultTotal) || 0,
-      });
-      if (opt && opt.page) {
-        setPagination({
-          current: opt.page || 1,
-        });
-      }
-      emit('fetch-success', {
-        items: unref(resultItems),
-        total: Number(resultTotal),
-      });
-      return resultItems;
-    } catch (error) {
-      emit('fetch-error', error);
-      dataSourceRef.value = [];
-      setPagination({
-        total: 0,
-      });
-    } finally {
-      setLoading(false);
-    }
-  }
-
-  function setTableData<T = Recordable>(values: T[]) {
-    dataSourceRef.value = values;
-  }
-
-  function getDataSource<T = Recordable>() {
-    return getDataSourceRef.value as T[];
-  }
-
-  function getRawDataSource<T = Recordable>() {
-    return rawDataSourceRef.value as T;
-  }
-
-  async function reload(opt?: FetchParams) {
-    return await fetch(opt);
-  }
-
-  onMounted(() => {
-    useTimeoutFn(() => {
-      unref(propsRef).immediate && fetch();
-    }, 16);
-  });
-
-  return {
-    getDataSourceRef,
-    getDataSource,
-    getRawDataSource,
-    getRowKey,
-    setTableData,
-    getAutoCreateKey,
-    fetch,
-    reload,
-    updateTableData,
-    updateTableDataRecord,
-    deleteTableDataRecord,
-    insertTableDataRecord,
-    findTableDataRecord,
-    handleTableChange,
-  };
-}
diff --git a/src/components/Table/src/hooks/useLoading.ts b/src/components/Table/src/hooks/useLoading.ts
deleted file mode 100644
index 0a670b0..0000000
--- a/src/components/Table/src/hooks/useLoading.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { ref, ComputedRef, unref, computed, watch } from 'vue';
-import type { BasicTableProps } from '../types/table';
-
-export function useLoading(props: ComputedRef<BasicTableProps>) {
-  const loadingRef = ref(unref(props).loading);
-
-  watch(
-    () => unref(props).loading,
-    (loading) => {
-      loadingRef.value = loading;
-    }
-  );
-
-  const getLoading = computed(() => unref(loadingRef));
-
-  function setLoading(loading: boolean) {
-    loadingRef.value = loading;
-  }
-
-  return { getLoading, setLoading };
-}
diff --git a/src/components/Table/src/hooks/usePagination.tsx b/src/components/Table/src/hooks/usePagination.tsx
deleted file mode 100644
index d90eb29..0000000
--- a/src/components/Table/src/hooks/usePagination.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-import type { PaginationProps } from '../types/pagination';
-import type { BasicTableProps } from '../types/table';
-import { computed, unref, ref, ComputedRef, watch } from 'vue';
-import { LeftOutlined, RightOutlined } from '@ant-design/icons-vue';
-import { isBoolean } from '/@/utils/is';
-import { PAGE_SIZE, PAGE_SIZE_OPTIONS } from '../const';
-import { useI18n } from '/@/hooks/web/useI18n';
-
-interface ItemRender {
-  page: number;
-  type: 'page' | 'prev' | 'next';
-  originalElement: any;
-}
-
-function itemRender({ page, type, originalElement }: ItemRender) {
-  if (type === 'prev') {
-    return page === 0 ? null : <LeftOutlined />;
-  } else if (type === 'next') {
-    return page === 1 ? null : <RightOutlined />;
-  }
-  return originalElement;
-}
-
-export function usePagination(refProps: ComputedRef<BasicTableProps>) {
-  const { t } = useI18n();
-
-  const configRef = ref<PaginationProps>({});
-  const show = ref(true);
-
-  watch(
-    () => unref(refProps).pagination,
-    (pagination) => {
-      if (!isBoolean(pagination) && pagination) {
-        configRef.value = {
-          ...unref(configRef),
-          ...(pagination ?? {}),
-        };
-      }
-    }
-  );
-
-  const getPaginationInfo = computed((): PaginationProps | boolean => {
-    const { pagination } = unref(refProps);
-
-    if (!unref(show) || (isBoolean(pagination) && !pagination)) {
-      return false;
-    }
-
-    return {
-      current: 1,
-      pageSize: PAGE_SIZE,
-      size: 'small',
-      defaultPageSize: PAGE_SIZE,
-      showTotal: (total) => t('component.table.total', { total }),
-      showSizeChanger: true,
-      pageSizeOptions: PAGE_SIZE_OPTIONS,
-      itemRender: itemRender,
-      showQuickJumper: true,
-      ...(isBoolean(pagination) ? {} : pagination),
-      ...unref(configRef),
-    };
-  });
-
-  function setPagination(info: Partial<PaginationProps>) {
-    const paginationInfo = unref(getPaginationInfo);
-    configRef.value = {
-      ...(!isBoolean(paginationInfo) ? paginationInfo : {}),
-      ...info,
-    };
-  }
-
-  function getPagination() {
-    return unref(getPaginationInfo);
-  }
-
-  function getShowPagination() {
-    return unref(show);
-  }
-
-  async function setShowPagination(flag: boolean) {
-    show.value = flag;
-  }
-
-  return { getPagination, getPaginationInfo, setShowPagination, getShowPagination, setPagination };
-}
diff --git a/src/components/Table/src/hooks/useRowSelection.ts b/src/components/Table/src/hooks/useRowSelection.ts
deleted file mode 100644
index dc0d2f2..0000000
--- a/src/components/Table/src/hooks/useRowSelection.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-import { isFunction } from '/@/utils/is';
-import type { BasicTableProps, TableRowSelection } from '../types/table';
-import { computed, ComputedRef, nextTick, Ref, ref, toRaw, unref, watch } from 'vue';
-import { ROW_KEY } from '../const';
-import { omit } from 'lodash-es';
-import { findNodeAll } from '/@/utils/helper/treeHelper';
-
-export function useRowSelection(propsRef: ComputedRef<BasicTableProps>, tableData: Ref<Recordable[]>, emit: EmitType) {
-  const selectedRowKeysRef = ref<string[]>([]);
-  const selectedRowRef = ref<Recordable[]>([]);
-
-  const getRowSelectionRef = computed((): TableRowSelection | null => {
-    const { rowSelection } = unref(propsRef);
-    if (!rowSelection) {
-      return null;
-    }
-
-    return {
-      // AntDV3.0 涔嬪悗浣跨敤杩滅▼鍔犺浇鏁版嵁杩涜鍒嗛〉鏃讹紝
-      // 榛樿浼氭竻绌轰笂涓�椤甸�夋嫨鐨勮鏁版嵁锛堝鑷存棤娉曡法椤甸�夋嫨锛夛紝
-      // 灏嗘灞炴�ц缃负 true 鍗冲彲瑙e喅銆�
-      preserveSelectedRowKeys: true,
-      selectedRowKeys: unref(selectedRowKeysRef),
-      onChange: (selectedRowKeys: string[]) => {
-        setSelectedRowKeys(selectedRowKeys);
-      },
-      ...omit(rowSelection, ['onChange']),
-    };
-  });
-
-  watch(
-    () => unref(propsRef).rowSelection?.selectedRowKeys,
-    (v: string[]) => {
-      setSelectedRowKeys(v);
-    }
-  );
-
-  watch(
-    () => unref(selectedRowKeysRef),
-    () => {
-      nextTick(() => {
-        const { rowSelection } = unref(propsRef);
-        if (rowSelection) {
-          const { onChange } = rowSelection;
-          if (onChange && isFunction(onChange)) onChange(getSelectRowKeys(), getSelectRows());
-        }
-        emit('selection-change', {
-          keys: getSelectRowKeys(),
-          rows: getSelectRows(),
-        });
-      });
-    },
-    { deep: true }
-  );
-
-  const getAutoCreateKey = computed(() => {
-    return unref(propsRef).autoCreateKey && !unref(propsRef).rowKey;
-  });
-
-  const getRowKey = computed(() => {
-    const { rowKey } = unref(propsRef);
-    return unref(getAutoCreateKey) ? ROW_KEY : rowKey;
-  });
-
-  function setSelectedRowKeys(rowKeys: string[]) {
-    selectedRowKeysRef.value = rowKeys;
-    const allSelectedRows = findNodeAll(
-      toRaw(unref(tableData)).concat(toRaw(unref(selectedRowRef))),
-      (item) => rowKeys.includes(item[unref(getRowKey) as string]),
-      {
-        children: propsRef.value.childrenColumnName ?? 'children',
-      }
-    );
-    const trueSelectedRows: any[] = [];
-    rowKeys.forEach((key: string) => {
-      const found = allSelectedRows.find((item) => item[unref(getRowKey) as string] === key);
-      found && trueSelectedRows.push(found);
-    });
-    selectedRowRef.value = trueSelectedRows;
-  }
-
-  function setSelectedRows(rows: Recordable[]) {
-    selectedRowRef.value = rows;
-  }
-
-  function clearSelectedRowKeys() {
-    selectedRowRef.value = [];
-    selectedRowKeysRef.value = [];
-  }
-
-  function deleteSelectRowByKey(key: string) {
-    const selectedRowKeys = unref(selectedRowKeysRef);
-    const index = selectedRowKeys.findIndex((item) => item === key);
-    if (index !== -1) {
-      unref(selectedRowKeysRef).splice(index, 1);
-    }
-  }
-
-  function getSelectRowKeys() {
-    return unref(selectedRowKeysRef);
-  }
-
-  function getSelectRows<T = Recordable>() {
-    // const ret = toRaw(unref(selectedRowRef)).map((item) => toRaw(item));
-    return unref(selectedRowRef) as T[];
-  }
-
-  function getRowSelection() {
-    return unref(getRowSelectionRef)!;
-  }
-
-  return {
-    getRowSelection,
-    getRowSelectionRef,
-    getSelectRows,
-    getSelectRowKeys,
-    setSelectedRowKeys,
-    clearSelectedRowKeys,
-    deleteSelectRowByKey,
-    setSelectedRows,
-  };
-}
diff --git a/src/components/Table/src/hooks/useTable.ts b/src/components/Table/src/hooks/useTable.ts
deleted file mode 100644
index 40575a3..0000000
--- a/src/components/Table/src/hooks/useTable.ts
+++ /dev/null
@@ -1,168 +0,0 @@
-import type { BasicTableProps, TableActionType, FetchParams, BasicColumn } from '../types/table';
-import type { PaginationProps } from '../types/pagination';
-import type { DynamicProps } from '/#/utils';
-import type { FormActionType } from '/@/components/Form';
-import type { WatchStopHandle } from 'vue';
-import { getDynamicProps } from '/@/utils';
-import { ref, onUnmounted, unref, watch, toRaw } from 'vue';
-import { isProdMode } from '/@/utils/env';
-import { error } from '/@/utils/log';
-
-type Props = Partial<DynamicProps<BasicTableProps>>;
-
-type UseTableMethod = TableActionType & {
-  getForm: () => FormActionType;
-};
-
-export function useTable(tableProps?: Props): [
-  (instance: TableActionType, formInstance: UseTableMethod) => void,
-  TableActionType & {
-    getForm: () => FormActionType;
-  }
-] {
-  const tableRef = ref<Nullable<TableActionType>>(null);
-  const loadedRef = ref<Nullable<boolean>>(false);
-  const formRef = ref<Nullable<UseTableMethod>>(null);
-
-  let stopWatch: WatchStopHandle;
-
-  function register(instance: TableActionType, formInstance: UseTableMethod) {
-    isProdMode() &&
-      onUnmounted(() => {
-        tableRef.value = null;
-        loadedRef.value = null;
-      });
-
-    if (unref(loadedRef) && isProdMode() && instance === unref(tableRef)) return;
-
-    tableRef.value = instance;
-    formRef.value = formInstance;
-    tableProps && instance.setProps(getDynamicProps(tableProps));
-    loadedRef.value = true;
-
-    stopWatch?.();
-
-    stopWatch = watch(
-      () => tableProps,
-      () => {
-        tableProps && instance.setProps(getDynamicProps(tableProps));
-      },
-      {
-        immediate: true,
-        deep: true,
-      }
-    );
-  }
-
-  function getTableInstance(): TableActionType {
-    const table = unref(tableRef);
-    if (!table) {
-      error('The table instance has not been obtained yet, please make sure the table is presented when performing the table operation!');
-    }
-    return table as TableActionType;
-  }
-  
-  function getTableRef(){
-    return tableRef;
-  }
-
-  const methods: TableActionType & {
-    getForm: () => FormActionType;
-  } & {
-    getTableRef: () => any;
-  } = {
-    reload: async (opt?: FetchParams) => {
-      return await getTableInstance().reload(opt);
-    },
-    setProps: (props: Partial<BasicTableProps>) => {
-      getTableInstance().setProps(props);
-    },
-    redoHeight: () => {
-      getTableInstance().redoHeight();
-    },
-    setLoading: (loading: boolean) => {
-      getTableInstance().setLoading(loading);
-    },
-    getDataSource: () => {
-      return getTableInstance().getDataSource();
-    },
-    getRawDataSource: () => {
-      return getTableInstance().getRawDataSource();
-    },
-    getColumns: ({ ignoreIndex = false }: { ignoreIndex?: boolean } = {}) => {
-      const columns = getTableInstance().getColumns({ ignoreIndex }) || [];
-      return toRaw(columns);
-    },
-    setColumns: (columns: BasicColumn[]) => {
-      getTableInstance().setColumns(columns);
-    },
-    setTableData: (values: any[]) => {
-      return getTableInstance().setTableData(values);
-    },
-    setPagination: (info: Partial<PaginationProps>) => {
-      return getTableInstance().setPagination(info);
-    },
-    deleteSelectRowByKey: (key: string) => {
-      getTableInstance().deleteSelectRowByKey(key);
-    },
-    getSelectRowKeys: () => {
-      return toRaw(getTableInstance().getSelectRowKeys());
-    },
-    getSelectRows: () => {
-      return toRaw(getTableInstance().getSelectRows());
-    },
-    clearSelectedRowKeys: () => {
-      getTableInstance().clearSelectedRowKeys();
-    },
-    setSelectedRowKeys: (keys: string[] | number[]) => {
-      getTableInstance().setSelectedRowKeys(keys);
-    },
-    getPaginationRef: () => {
-      return getTableInstance().getPaginationRef();
-    },
-    getSize: () => {
-      return toRaw(getTableInstance().getSize());
-    },
-    updateTableData: (index: number, key: string, value: any) => {
-      return getTableInstance().updateTableData(index, key, value);
-    },
-    deleteTableDataRecord: (rowKey: string | number | string[] | number[]) => {
-      return getTableInstance().deleteTableDataRecord(rowKey);
-    },
-    insertTableDataRecord: (record: Recordable | Recordable[], index?: number) => {
-      return getTableInstance().insertTableDataRecord(record, index);
-    },
-    updateTableDataRecord: (rowKey: string | number, record: Recordable) => {
-      return getTableInstance().updateTableDataRecord(rowKey, record);
-    },
-    findTableDataRecord: (rowKey: string | number) => {
-      return getTableInstance().findTableDataRecord(rowKey);
-    },
-    getRowSelection: () => {
-      return toRaw(getTableInstance().getRowSelection());
-    },
-    getCacheColumns: () => {
-      return toRaw(getTableInstance().getCacheColumns());
-    },
-    getForm: () => {
-      return unref(formRef) as unknown as FormActionType;
-    },
-    setShowPagination: async (show: boolean) => {
-      getTableInstance().setShowPagination(show);
-    },
-    getShowPagination: () => {
-      return toRaw(getTableInstance().getShowPagination());
-    },
-    expandAll: () => {
-      getTableInstance().expandAll();
-    },
-    collapseAll: () => {
-      getTableInstance().collapseAll();
-    },
-    getTableRef: () => {
-      return getTableRef();
-    }
-  };
-
-  return [register, methods];
-}
diff --git a/src/components/Table/src/hooks/useTableContext.ts b/src/components/Table/src/hooks/useTableContext.ts
deleted file mode 100644
index b657bb2..0000000
--- a/src/components/Table/src/hooks/useTableContext.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import type { Ref } from 'vue';
-import type { BasicTableProps, TableActionType } from '../types/table';
-import { provide, inject, ComputedRef } from 'vue';
-
-const key = Symbol('basic-table');
-
-type Instance = TableActionType & {
-  wrapRef: Ref<Nullable<HTMLElement>>;
-  getBindValues: ComputedRef<Recordable>;
-};
-
-type RetInstance = Omit<Instance, 'getBindValues'> & {
-  getBindValues: ComputedRef<BasicTableProps>;
-};
-
-export function createTableContext(instance: Instance) {
-  provide(key, instance);
-}
-
-export function useTableContext(): RetInstance {
-  return inject(key) as RetInstance;
-}
diff --git a/src/components/Table/src/hooks/useTableExpand.ts b/src/components/Table/src/hooks/useTableExpand.ts
deleted file mode 100644
index 8008690..0000000
--- a/src/components/Table/src/hooks/useTableExpand.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import type { ComputedRef, Ref } from 'vue';
-import type { BasicTableProps } from '../types/table';
-import { computed, unref, ref, toRaw } from 'vue';
-import { ROW_KEY } from '../const';
-
-export function useTableExpand(propsRef: ComputedRef<BasicTableProps>, tableData: Ref<Recordable[]>, emit: EmitType) {
-  const expandedRowKeys = ref<string[]>([]);
-
-  const getAutoCreateKey = computed(() => {
-    return unref(propsRef).autoCreateKey && !unref(propsRef).rowKey;
-  });
-
-  const getRowKey = computed(() => {
-    const { rowKey } = unref(propsRef);
-    return unref(getAutoCreateKey) ? ROW_KEY : rowKey;
-  });
-
-  const getExpandOption = computed(() => {
-    const { isTreeTable } = unref(propsRef);
-    if (!isTreeTable) return {};
-
-    return {
-      expandedRowKeys: unref(expandedRowKeys),
-      onExpandedRowsChange: (keys: string[]) => {
-        expandedRowKeys.value = keys;
-        emit('expanded-rows-change', keys);
-      },
-    };
-  });
-
-  function expandAll() {
-    const keys = getAllKeys();
-    expandedRowKeys.value = keys;
-  }
-
-  function getAllKeys(data?: Recordable[]) {
-    const keys: string[] = [];
-    const { childrenColumnName } = unref(propsRef);
-    toRaw(data || unref(tableData)).forEach((item) => {
-      keys.push(item[unref(getRowKey) as string]);
-      const children = item[childrenColumnName || 'children'];
-      if (children?.length) {
-        keys.push(...getAllKeys(children));
-      }
-    });
-    return keys;
-  }
-
-  function collapseAll() {
-    expandedRowKeys.value = [];
-  }
-
-  return { getExpandOption, expandAll, collapseAll };
-}
diff --git a/src/components/Table/src/hooks/useTableFooter.ts b/src/components/Table/src/hooks/useTableFooter.ts
deleted file mode 100644
index bc1f32f..0000000
--- a/src/components/Table/src/hooks/useTableFooter.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import type { ComputedRef, Ref } from 'vue';
-import type { BasicTableProps } from '../types/table';
-import { unref, computed, h, nextTick, watchEffect } from 'vue';
-import TableFooter from '../components/TableFooter.vue';
-import { useEventListener } from '/@/hooks/event/useEventListener';
-
-export function useTableFooter(
-  propsRef: ComputedRef<BasicTableProps>,
-  scrollRef: ComputedRef<{
-    x: string | number | true;
-    y: Nullable<number>;
-    scrollToFirstRowOnChange: boolean;
-  }>,
-  tableElRef: Ref<ComponentRef>,
-  getDataSourceRef: ComputedRef<Recordable>
-) {
-  const getIsEmptyData = computed(() => {
-    return (unref(getDataSourceRef) || []).length === 0;
-  });
-
-  const getFooterProps = computed((): Recordable | undefined => {
-    const { summaryFunc, showSummary, summaryData } = unref(propsRef);
-    return showSummary && !unref(getIsEmptyData) ? () => h(TableFooter, { summaryFunc, summaryData, scroll: unref(scrollRef) }) : undefined;
-  });
-
-  watchEffect(() => {
-    handleSummary();
-  });
-
-  function handleSummary() {
-    const { showSummary } = unref(propsRef);
-    if (!showSummary || unref(getIsEmptyData)) return;
-
-    nextTick(() => {
-      const tableEl = unref(tableElRef);
-      if (!tableEl) return;
-      const bodyDom = tableEl.$el.querySelector('.ant-table-content');
-      useEventListener({
-        el: bodyDom,
-        name: 'scroll',
-        listener: () => {
-          const footerBodyDom = tableEl.$el.querySelector('.ant-table-footer .ant-table-content') as HTMLDivElement;
-          if (!footerBodyDom || !bodyDom) return;
-          footerBodyDom.scrollLeft = bodyDom.scrollLeft;
-        },
-        wait: 0,
-        options: true,
-      });
-    });
-  }
-  return { getFooterProps };
-}
diff --git a/src/components/Table/src/hooks/useTableForm.ts b/src/components/Table/src/hooks/useTableForm.ts
deleted file mode 100644
index a2a215d..0000000
--- a/src/components/Table/src/hooks/useTableForm.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import type { ComputedRef, Slots } from 'vue';
-import type { BasicTableProps, FetchParams } from '../types/table';
-import { unref, computed } from 'vue';
-import type { FormProps } from '/@/components/Form';
-import { isFunction } from '/@/utils/is';
-
-export function useTableForm(
-  propsRef: ComputedRef<BasicTableProps>,
-  slots: Slots,
-  fetch: (opt?: FetchParams | undefined) => Promise<void>,
-  getLoading: ComputedRef<boolean | undefined>
-) {
-  const getFormProps = computed((): Partial<FormProps> => {
-    const { formConfig } = unref(propsRef);
-    const { submitButtonOptions } = formConfig || {};
-    return {
-      showAdvancedButton: true,
-      ...formConfig,
-      submitButtonOptions: { loading: unref(getLoading), ...submitButtonOptions },
-      compact: true,
-      autoSubmitOnEnter: true,
-    };
-  });
-
-  const getFormSlotKeys: ComputedRef<string[]> = computed(() => {
-    const keys = Object.keys(slots);
-    return keys.map((item) => (item.startsWith('form-') ? item : null)).filter((item) => !!item) as string[];
-  });
-
-  function replaceFormSlotKey(key: string) {
-    if (!key) return '';
-    return key?.replace?.(/form\-/, '') ?? '';
-  }
-
-  function handleSearchInfoChange(info: Recordable) {
-    const { handleSearchInfoFn } = unref(propsRef);
-    if (handleSearchInfoFn && isFunction(handleSearchInfoFn)) {
-      info = handleSearchInfoFn(info) || info;
-    }
-    fetch({ searchInfo: info, page: 1 });
-  }
-
-  return {
-    getFormProps,
-    replaceFormSlotKey,
-    getFormSlotKeys,
-    handleSearchInfoChange,
-  };
-}
diff --git a/src/components/Table/src/hooks/useTableHeader.ts b/src/components/Table/src/hooks/useTableHeader.ts
deleted file mode 100644
index 597b5ec..0000000
--- a/src/components/Table/src/hooks/useTableHeader.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import type { ComputedRef, Slots } from 'vue';
-import type { BasicTableProps, InnerHandlers } from '../types/table';
-import { unref, computed, h } from 'vue';
-import TableHeader from '../components/TableHeader.vue';
-import { isString } from '/@/utils/is';
-import { getSlot } from '/@/utils/helper/tsxHelper';
-
-export function useTableHeader(propsRef: ComputedRef<BasicTableProps>, slots: Slots, handlers: InnerHandlers) {
-  const getHeaderProps = computed((): Recordable => {
-    const { title, showTableSetting, titleHelpMessage, tableSetting } = unref(propsRef);
-    const hideTitle = !slots.tableTitle && !title && !slots.toolbar && !showTableSetting;
-    if (hideTitle && !isString(title)) {
-      return {};
-    }
-
-    return {
-      title: hideTitle
-        ? null
-        : () =>
-            h(
-              TableHeader,
-              {
-                title,
-                titleHelpMessage,
-                showTableSetting,
-                tableSetting,
-                onColumnsChange: handlers.onColumnsChange,
-              } as Recordable,
-              {
-                ...(slots.toolbar
-                  ? {
-                      toolbar: () => getSlot(slots, 'toolbar'),
-                    }
-                  : {}),
-                ...(slots.tableTitle
-                  ? {
-                      tableTitle: () => getSlot(slots, 'tableTitle'),
-                    }
-                  : {}),
-                ...(slots.headerTop
-                  ? {
-                      headerTop: () => getSlot(slots, 'headerTop'),
-                    }
-                  : {}),
-                //娣诲姞tableTop鎻掓Ы
-                ...(slots.tableTop
-                  ? {
-                      tableTop: () => getSlot(slots, 'tableTop'),
-                    }
-                  : {}),
-                // 娣诲姞alertAfter鎻掓Ы
-                ...(slots.alertAfter ? { alertAfter: () => getSlot(slots, 'alertAfter') } : {}),
-              }
-            ),
-    };
-  });
-  return { getHeaderProps };
-}
diff --git a/src/components/Table/src/hooks/useTableScroll.ts b/src/components/Table/src/hooks/useTableScroll.ts
deleted file mode 100644
index d9bb192..0000000
--- a/src/components/Table/src/hooks/useTableScroll.ts
+++ /dev/null
@@ -1,188 +0,0 @@
-import type { BasicTableProps, TableRowSelection, BasicColumn } from '../types/table';
-import type { Ref, ComputedRef } from 'vue';
-import { computed, unref, ref, nextTick, watch } from 'vue';
-import { getViewportOffset } from '/@/utils/domUtils';
-import { isBoolean } from '/@/utils/is';
-import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
-import { useModalContext } from '/@/components/Modal';
-import { onMountedOrActivated } from '/@/hooks/core/onMountedOrActivated';
-import { useDebounceFn } from '@vueuse/core';
-
-export function useTableScroll(
-  propsRef: ComputedRef<BasicTableProps>,
-  tableElRef: Ref<ComponentRef>,
-  columnsRef: ComputedRef<BasicColumn[]>,
-  rowSelectionRef: ComputedRef<TableRowSelection<any> | null>,
-  getDataSourceRef: ComputedRef<Recordable[]>
-) {
-  const tableHeightRef: Ref<Nullable<number>> = ref(null);
-
-  const modalFn = useModalContext();
-
-  // Greater than animation time 280
-  const debounceRedoHeight = useDebounceFn(redoHeight, 100);
-
-  const getCanResize = computed(() => {
-    const { canResize, scroll } = unref(propsRef);
-    return canResize && !(scroll || {}).y;
-  });
-
-  watch(
-    () => [unref(getCanResize), unref(getDataSourceRef)?.length],
-    () => {
-      debounceRedoHeight();
-    },
-    {
-      flush: 'post',
-    }
-  );
-
-  function redoHeight() {
-    nextTick(() => {
-      calcTableHeight();
-    });
-  }
-
-  function setHeight(heigh: number) {
-    tableHeightRef.value = heigh;
-    //  Solve the problem of modal adaptive height calculation when the form is placed in the modal
-    modalFn?.redoModalHeight?.();
-  }
-
-  // No need to repeat queries
-  let paginationEl: HTMLElement | null;
-  let footerEl: HTMLElement | null;
-  let bodyEl: HTMLElement | null;
-
-  async function calcTableHeight() {
-    const { resizeHeightOffset, pagination, maxHeight, minHeight } = unref(propsRef);
-    const tableData = unref(getDataSourceRef);
-
-    const table = unref(tableElRef);
-    if (!table) return;
-
-    const tableEl: Element = table.$el;
-    if (!tableEl) return;
-
-    if (!bodyEl) {
-      //update-begin-author:taoyan date:2023-2-11 for: issues/355 鍓嶇-jeecgboot-vue3 3.4.4鐗堟湰,BasicTable楂樺害鑷�傚簲鍔熻兘澶辨晥,璁剧疆BasicTable缁勪欢maxHeight澶辨晥; 鍘熷洜宸叉壘鍒�,璇风湅璇︽儏
-      bodyEl = tableEl.querySelector('.ant-table-tbody');
-      //update-end-author:taoyan date:2023-2-11 for: issues/355 鍓嶇-jeecgboot-vue3 3.4.4鐗堟湰,BasicTable楂樺害鑷�傚簲鍔熻兘澶辨晥,璁剧疆BasicTable缁勪欢maxHeight澶辨晥; 鍘熷洜宸叉壘鍒�,璇风湅璇︽儏
-      if (!bodyEl) return;
-    }
-
-    const hasScrollBarY = bodyEl.scrollHeight > bodyEl.clientHeight;
-    const hasScrollBarX = bodyEl.scrollWidth > bodyEl.clientWidth;
-
-    if (hasScrollBarY) {
-      tableEl.classList.contains('hide-scrollbar-y') && tableEl.classList.remove('hide-scrollbar-y');
-    } else {
-      !tableEl.classList.contains('hide-scrollbar-y') && tableEl.classList.add('hide-scrollbar-y');
-    }
-
-    if (hasScrollBarX) {
-      tableEl.classList.contains('hide-scrollbar-x') && tableEl.classList.remove('hide-scrollbar-x');
-    } else {
-      !tableEl.classList.contains('hide-scrollbar-x') && tableEl.classList.add('hide-scrollbar-x');
-    }
-
-    bodyEl!.style.height = 'unset';
-
-    if (!unref(getCanResize) || tableData.length === 0) return;
-
-    await nextTick();
-    //Add a delay to get the correct bottomIncludeBody paginationHeight footerHeight headerHeight
-
-    const headEl = tableEl.querySelector('.ant-table-thead');
-
-    if (!headEl) return;
-
-    // Table height from bottom
-    const { bottomIncludeBody } = getViewportOffset(headEl);
-    // Table height from bottom height-custom offset
-
-    const paddingHeight = 32;
-    // Pager height
-    let paginationHeight = 2;
-    if (!isBoolean(pagination)) {
-      paginationEl = tableEl.querySelector('.ant-pagination') as HTMLElement;
-      if (paginationEl) {
-        const offsetHeight = paginationEl.offsetHeight;
-        paginationHeight += offsetHeight || 0;
-      } else {
-        // TODO First fix 24
-        paginationHeight += 24;
-      }
-    } else {
-      paginationHeight = -8;
-    }
-
-    let footerHeight = 0;
-    if (!isBoolean(pagination)) {
-      if (!footerEl) {
-        footerEl = tableEl.querySelector('.ant-table-footer') as HTMLElement;
-      } else {
-        const offsetHeight = footerEl.offsetHeight;
-        footerHeight += offsetHeight || 0;
-      }
-    }
-
-    let headerHeight = 0;
-    if (headEl) {
-      headerHeight = (headEl as HTMLElement).offsetHeight;
-    }
-
-    let height = bottomIncludeBody - (resizeHeightOffset || 0) - paddingHeight - paginationHeight - footerHeight - headerHeight;
-
-    height = (height < minHeight! ? (minHeight as number) : height) ?? height;
-    height = (height > maxHeight! ? (maxHeight as number) : height) ?? height;
-    setHeight(height);
-
-    bodyEl!.style.height = `${height}px`;
-  }
-  useWindowSizeFn(calcTableHeight, 280);
-  onMountedOrActivated(() => {
-    calcTableHeight();
-    nextTick(() => {
-      debounceRedoHeight();
-    });
-  });
-
-  const getScrollX = computed(() => {
-    let width = 0;
-    if (unref(rowSelectionRef)) {
-      width += 60;
-    }
-
-    // TODO props ?? 0;
-    const NORMAL_WIDTH = 150;
-
-    const columns = unref(columnsRef).filter((item) => !item.defaultHidden);
-    columns.forEach((item) => {
-      width += Number.parseInt(item.width as string) || 0;
-    });
-    const unsetWidthColumns = columns.filter((item) => !Reflect.has(item, 'width'));
-
-    const len = unsetWidthColumns.length;
-    if (len !== 0) {
-      width += len * NORMAL_WIDTH;
-    }
-
-    const table = unref(tableElRef);
-    const tableWidth = table?.$el?.offsetWidth ?? 0;
-    return tableWidth > width ? '100%' : width;
-  });
-
-  const getScrollRef = computed(() => {
-    const tableHeight = unref(tableHeightRef);
-    const { canResize, scroll } = unref(propsRef);
-    return {
-      x: unref(getScrollX),
-      y: canResize ? tableHeight : null,
-      scrollToFirstRowOnChange: false,
-      ...scroll,
-    };
-  });
-
-  return { getScrollRef, redoHeight };
-}
diff --git a/src/components/Table/src/hooks/useTableStyle.ts b/src/components/Table/src/hooks/useTableStyle.ts
deleted file mode 100644
index 292187d..0000000
--- a/src/components/Table/src/hooks/useTableStyle.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import type { ComputedRef } from 'vue';
-import type { BasicTableProps, TableCustomRecord } from '../types/table';
-import { unref } from 'vue';
-import { isFunction } from '/@/utils/is';
-
-export function useTableStyle(propsRef: ComputedRef<BasicTableProps>, prefixCls: string) {
-  function getRowClassName(record: TableCustomRecord, index: number) {
-    const { striped, rowClassName } = unref(propsRef);
-    const classNames: string[] = [];
-    if (striped) {
-      classNames.push((index || 0) % 2 === 1 ? `${prefixCls}-row__striped` : '');
-    }
-    if (rowClassName && isFunction(rowClassName)) {
-      classNames.push(rowClassName(record, index));
-    }
-    return classNames.filter((cls) => !!cls).join(' ');
-  }
-
-  return { getRowClassName };
-}
diff --git a/src/components/Table/src/props.ts b/src/components/Table/src/props.ts
deleted file mode 100644
index 2d409fc..0000000
--- a/src/components/Table/src/props.ts
+++ /dev/null
@@ -1,139 +0,0 @@
-import type { PropType } from 'vue';
-import type { PaginationProps } from './types/pagination';
-import type { BasicColumn, FetchSetting, TableSetting, SorterResult, TableCustomRecord, TableRowSelection, SizeType } from './types/table';
-import type { FormProps } from '/@/components/Form';
-import { DEFAULT_FILTER_FN, DEFAULT_SORT_FN, FETCH_SETTING, DEFAULT_SIZE } from './const';
-import { propTypes } from '/@/utils/propTypes';
-
-export const basicProps = {
-  clickToRowSelect: propTypes.bool.def(true),
-  isTreeTable: propTypes.bool.def(false),
-  tableSetting: propTypes.shape<TableSetting>({}),
-  inset: propTypes.bool,
-  sortFn: {
-    type: Function as PropType<(sortInfo: SorterResult) => any>,
-    default: DEFAULT_SORT_FN,
-  },
-  filterFn: {
-    type: Function as PropType<(data: Partial<Recordable<string[]>>) => any>,
-    default: DEFAULT_FILTER_FN,
-  },
-  showTableSetting: propTypes.bool,
-  autoCreateKey: propTypes.bool.def(true),
-  striped: propTypes.bool.def(false),
-  showSummary: propTypes.bool,
-  summaryFunc: {
-    type: [Function, Array] as PropType<(...arg: any[]) => any[]>,
-    default: null,
-  },
-  summaryData: {
-    type: Array as PropType<Recordable[]>,
-    default: null,
-  },
-  indentSize: propTypes.number.def(24),
-  canColDrag: propTypes.bool.def(true),
-  api: {
-    type: Function as PropType<(...arg: any[]) => Promise<any>>,
-    default: null,
-  },
-  beforeFetch: {
-    type: Function as PropType<Fn>,
-    default: null,
-  },
-  afterFetch: {
-    type: Function as PropType<Fn>,
-    default: null,
-  },
-  handleSearchInfoFn: {
-    type: Function as PropType<Fn>,
-    default: null,
-  },
-  fetchSetting: {
-    type: Object as PropType<FetchSetting>,
-    default: () => {
-      return FETCH_SETTING;
-    },
-  },
-  // 绔嬪嵆璇锋眰鎺ュ彛
-  immediate: propTypes.bool.def(true),
-  emptyDataIsShowTable: propTypes.bool.def(true),
-  // 棰濆鐨勮姹傚弬鏁�
-  searchInfo: {
-    type: Object as PropType<Recordable>,
-    default: null,
-  },
-  // 榛樿鐨勬帓搴忓弬鏁�
-  defSort: {
-    type: Object as PropType<Recordable>,
-    default: null,
-  },
-  // 浣跨敤鎼滅储琛ㄥ崟
-  useSearchForm: propTypes.bool,
-  // 琛ㄥ崟閰嶇疆
-  formConfig: {
-    type: Object as PropType<Partial<FormProps>>,
-    default: null,
-  },
-  columns: {
-    type: [Array] as PropType<BasicColumn[]>,
-    default: () => [],
-  },
-  showIndexColumn: propTypes.bool.def(true),
-  indexColumnProps: {
-    type: Object as PropType<BasicColumn>,
-    default: null,
-  },
-  showActionColumn: {
-    type: Boolean,
-    default: true,
-  },
-  actionColumn: {
-    type: Object as PropType<BasicColumn>,
-    default: null,
-  },
-  ellipsis: propTypes.bool.def(true),
-  canResize: propTypes.bool.def(true),
-  clearSelectOnPageChange: propTypes.bool,
-  resizeHeightOffset: propTypes.number.def(0),
-  rowSelection: {
-    type: Object as PropType<TableRowSelection | null>,
-    default: null,
-  },
-  title: {
-    type: [String, Function] as PropType<string | ((data: Recordable) => string)>,
-    default: null,
-  },
-  titleHelpMessage: {
-    type: [String, Array] as PropType<string | string[]>,
-  },
-  minHeight: propTypes.number,
-  maxHeight: propTypes.number,
-  dataSource: {
-    type: Array as PropType<Recordable[]>,
-    default: null,
-  },
-  rowKey: {
-    type: [String, Function] as PropType<string | ((record: Recordable) => string)>,
-    default: '',
-  },
-  bordered: propTypes.bool,
-  pagination: {
-    type: [Object, Boolean] as PropType<PaginationProps | boolean>,
-    default: null,
-  },
-  loading: propTypes.bool,
-  rowClassName: {
-    type: Function as PropType<(record: TableCustomRecord<any>, index: number) => string>,
-  },
-  scroll: {
-    type: Object as PropType<{ x: number | true; y: number }>,
-    default: null,
-  },
-  beforeEditSubmit: {
-    type: Function as PropType<(data: { record: Recordable; index: number; key: string | number; value: any }) => Promise<any>>,
-  },
-  size: {
-    type: String as PropType<SizeType>,
-    default: DEFAULT_SIZE,
-  },
-};
diff --git a/src/components/Table/src/types/column.ts b/src/components/Table/src/types/column.ts
deleted file mode 100644
index 437e4c2..0000000
--- a/src/components/Table/src/types/column.ts
+++ /dev/null
@@ -1,195 +0,0 @@
-import { VNodeChild } from 'vue';
-
-export interface ColumnFilterItem {
-  text?: string;
-  value?: string;
-  children?: any;
-}
-
-export declare type SortOrder = 'ascend' | 'descend';
-
-export interface RecordProps<T> {
-  text: any;
-  record: T;
-  index: number;
-}
-
-export interface FilterDropdownProps {
-  prefixCls?: string;
-  setSelectedKeys?: (selectedKeys: string[]) => void;
-  selectedKeys?: string[];
-  confirm?: () => void;
-  clearFilters?: () => void;
-  filters?: ColumnFilterItem[];
-  getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
-  visible?: boolean;
-}
-
-export declare type CustomRenderFunction<T> = (record: RecordProps<T>) => VNodeChild | JSX.Element;
-
-export interface ColumnProps<T> {
-  /**
-   * specify how content is aligned
-   * @default 'left'
-   * @type string
-   */
-  align?: 'left' | 'right' | 'center';
-
-  /**
-   * ellipsize cell content, not working with sorter and filters for now.
-   * tableLayout would be fixed when ellipsis is true.
-   * @default false
-   * @type boolean
-   */
-  ellipsis?: boolean;
-
-  /**
-   * Span of this column's title
-   * @type number
-   */
-  colSpan?: number;
-
-  /**
-   * Display field of the data record, could be set like a.b.c
-   * @type string
-   */
-  dataIndex?: string;
-
-  /**
-   * Default filtered values
-   * @type string[]
-   */
-  defaultFilteredValue?: string[];
-
-  /**
-   * Default order of sorted values: 'ascend' 'descend' null
-   * @type string
-   */
-  defaultSortOrder?: SortOrder;
-
-  /**
-   * Customized filter overlay
-   * @type any (slot)
-   */
-  filterDropdown?: VNodeChild | JSX.Element | ((props: FilterDropdownProps) => VNodeChild | JSX.Element);
-
-  /**
-   * Whether filterDropdown is visible
-   * @type boolean
-   */
-  filterDropdownVisible?: boolean;
-
-  /**
-   * Whether the dataSource is filtered
-   * @default false
-   * @type boolean
-   */
-  filtered?: boolean;
-
-  /**
-   * Controlled filtered value, filter icon will highlight
-   * @type string[]
-   */
-  filteredValue?: string[];
-
-  /**
-   * Customized filter icon
-   * @default false
-   * @type any
-   */
-  filterIcon?: boolean | VNodeChild | JSX.Element;
-
-  /**
-   * Whether multiple filters can be selected
-   * @default true
-   * @type boolean
-   */
-  filterMultiple?: boolean;
-
-  /**
-   * Filter menu config
-   * @type object[]
-   */
-  filters?: ColumnFilterItem[];
-
-  /**
-   * Set column to be fixed: true(same as left) 'left' 'right'
-   * @default false
-   * @type boolean | string
-   */
-  fixed?: boolean | 'left' | 'right';
-
-  /**
-   * Unique key of this column, you can ignore this prop if you've set a unique dataIndex
-   * @type string
-   */
-  key?: string;
-
-  /**
-   * Renderer of the table cell. The return value should be a VNode, or an object for colSpan/rowSpan config
-   * @type Function | ScopedSlot
-   */
-  customRender?: CustomRenderFunction<T> | VNodeChild | JSX.Element;
-
-  /**
-   * Sort function for local sort, see Array.sort's compareFunction. If you need sort buttons only, set to true
-   * @type boolean | Function
-   */
-  sorter?: boolean | Function;
-
-  /**
-   * Order of sorted values: 'ascend' 'descend' false
-   * @type boolean | string
-   */
-  sortOrder?: boolean | SortOrder;
-
-  /**
-   * supported sort way, could be 'ascend', 'descend'
-   * @default ['ascend', 'descend']
-   * @type string[]
-   */
-  sortDirections?: SortOrder[];
-
-  /**
-   * Title of this column
-   * @type any (string | slot)
-   */
-  title?: VNodeChild | JSX.Element;
-
-  /**
-   * Width of this column
-   * @type string | number
-   */
-  width?: string | number;
-
-  /**
-   * Set props on per cell
-   * @type Function
-   */
-  customCell?: (record: T, rowIndex: number) => object;
-
-  /**
-   * Set props on per header cell
-   * @type object
-   */
-  customHeaderCell?: (column: ColumnProps<T>) => object;
-
-  /**
-   * Callback executed when the confirm filter button is clicked, Use as a filter event when using template or jsx
-   * @type Function
-   */
-  onFilter?: (value: any, record: T) => boolean;
-
-  /**
-   * Callback executed when filterDropdownVisible is changed, Use as a filterDropdownVisible event when using template or jsx
-   * @type Function
-   */
-  onFilterDropdownVisibleChange?: (visible: boolean) => void;
-
-  /**
-   * When using columns, you can setting this property to configure the properties that support the slot,
-   * such as slots: { filterIcon: 'XXX'}
-   * @type object
-   */
-  slots?: Recordable<string>;
-}
diff --git a/src/components/Table/src/types/componentType.ts b/src/components/Table/src/types/componentType.ts
deleted file mode 100644
index 6e66af6..0000000
--- a/src/components/Table/src/types/componentType.ts
+++ /dev/null
@@ -1 +0,0 @@
-export type ComponentType = 'Input' | 'InputNumber' | 'Select' | 'ApiSelect' | 'ApiTreeSelect' | 'Checkbox' | 'Switch' | 'DatePicker' | 'TimePicker';
diff --git a/src/components/Table/src/types/pagination.ts b/src/components/Table/src/types/pagination.ts
deleted file mode 100644
index fd2ecbe..0000000
--- a/src/components/Table/src/types/pagination.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-import Pagination from 'ant-design-vue/lib/pagination';
-import { VNodeChild } from 'vue';
-
-interface PaginationRenderProps {
-  page: number;
-  type: 'page' | 'prev' | 'next';
-  originalElement: any;
-}
-
-export declare class PaginationConfig extends Pagination {
-  position?: 'top' | 'bottom' | 'both';
-}
-export interface PaginationProps {
-  /**
-   * total number of data items
-   * @default 0
-   * @type number
-   */
-  total?: number;
-
-  /**
-   * default initial page number
-   * @default 1
-   * @type number
-   */
-  defaultCurrent?: number;
-
-  /**
-   * current page number
-   * @type number
-   */
-  current?: number;
-
-  /**
-   * default number of data items per page
-   * @default 10
-   * @type number
-   */
-  defaultPageSize?: number;
-
-  /**
-   * number of data items per page
-   * @type number
-   */
-  pageSize?: number;
-
-  /**
-   * Whether to hide pager on single page
-   * @default false
-   * @type boolean
-   */
-  hideOnSinglePage?: boolean;
-
-  /**
-   * determine whether pageSize can be changed
-   * @default false
-   * @type boolean
-   */
-  showSizeChanger?: boolean;
-
-  /**
-   * specify the sizeChanger options
-   * @default ['10', '20', '30', '40']
-   * @type string[]
-   */
-  pageSizeOptions?: string[];
-
-  /**
-   * determine whether you can jump to pages directly
-   * @default false
-   * @type boolean
-   */
-  showQuickJumper?: boolean | object;
-
-  /**
-   * to display the total number and range
-   * @type Function
-   */
-  showTotal?: (total: number, range: [number, number]) => any;
-
-  /**
-   * specify the size of Pagination, can be set to small
-   * @default ''
-   * @type string
-   */
-  size?: string;
-
-  /**
-   * whether to setting simple mode
-   * @type boolean
-   */
-  simple?: boolean;
-
-  /**
-   * to customize item innerHTML
-   * @type Function
-   */
-  itemRender?: (props: PaginationRenderProps) => VNodeChild | JSX.Element;
-}
diff --git a/src/components/Table/src/types/table.ts b/src/components/Table/src/types/table.ts
deleted file mode 100644
index 7193f04..0000000
--- a/src/components/Table/src/types/table.ts
+++ /dev/null
@@ -1,462 +0,0 @@
-import type { VNodeChild } from 'vue';
-import type { PaginationProps } from './pagination';
-import type { FormProps } from '/@/components/Form';
-import type { TableRowSelection as ITableRowSelection } from 'ant-design-vue/lib/table/interface';
-import type { ColumnProps } from 'ant-design-vue/lib/table';
-
-import { ComponentType } from './componentType';
-import { VueNode } from '/@/utils/propTypes';
-import { RoleEnum } from '/@/enums/roleEnum';
-
-export declare type SortOrder = 'ascend' | 'descend';
-
-export interface TableCurrentDataSource<T = Recordable> {
-  currentDataSource: T[];
-}
-
-export interface TableRowSelection<T = any> extends ITableRowSelection {
-  /**
-   * Callback executed when selected rows change
-   * @type Function
-   */
-  onChange?: (selectedRowKeys: string[] | number[], selectedRows: T[]) => any;
-
-  /**
-   * Callback executed when select/deselect one row
-   * @type Function
-   */
-  onSelect?: (record: T, selected: boolean, selectedRows: Object[], nativeEvent: Event) => any;
-
-  /**
-   * Callback executed when select/deselect all rows
-   * @type Function
-   */
-  onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => any;
-
-  /**
-   * Callback executed when row selection is inverted
-   * @type Function
-   */
-  onSelectInvert?: (selectedRows: string[] | number[]) => any;
-}
-
-export interface TableCustomRecord<T> {
-  record?: T;
-  index?: number;
-}
-
-export interface ExpandedRowRenderRecord<T> extends TableCustomRecord<T> {
-  indent?: number;
-  expanded?: boolean;
-}
-
-export interface ColumnFilterItem {
-  text?: string;
-  value?: string;
-  children?: any;
-}
-
-export interface TableCustomRecord<T = Recordable> {
-  record?: T;
-  index?: number;
-}
-
-export interface SorterResult {
-  column: ColumnProps;
-  order: SortOrder;
-  field: string;
-  columnKey: string;
-}
-
-export interface FetchParams {
-  searchInfo?: Recordable;
-  page?: number;
-  sortInfo?: Recordable;
-  filterInfo?: Recordable;
-}
-
-export interface GetColumnsParams {
-  ignoreIndex?: boolean;
-  ignoreAction?: boolean;
-  sort?: boolean;
-}
-
-export type SizeType = 'default' | 'middle' | 'small' | 'large';
-
-export interface TableActionType {
-  reload: (opt?: FetchParams) => Promise<void>;
-  getSelectRows: <T = Recordable>() => T[];
-  clearSelectedRowKeys: () => void;
-  expandAll: () => void;
-  collapseAll: () => void;
-  getSelectRowKeys: () => string[];
-  deleteSelectRowByKey: (key: string) => void;
-  setPagination: (info: Partial<PaginationProps>) => void;
-  setTableData: <T = Recordable>(values: T[]) => void;
-  updateTableDataRecord: (rowKey: string | number, record: Recordable) => Recordable | void;
-  deleteTableDataRecord: (rowKey: string | number | string[] | number[]) => void;
-  insertTableDataRecord: (record: Recordable, index?: number) => Recordable | void;
-  findTableDataRecord: (rowKey: string | number) => Recordable | void;
-  getColumns: (opt?: GetColumnsParams) => BasicColumn[];
-  setColumns: (columns: BasicColumn[] | string[]) => void;
-  getDataSource: <T = Recordable>() => T[];
-  getRawDataSource: <T = Recordable>() => T;
-  setLoading: (loading: boolean) => void;
-  setProps: (props: Partial<BasicTableProps>) => void;
-  redoHeight: () => void;
-  setSelectedRowKeys: (rowKeys: string[] | number[]) => void;
-  getPaginationRef: () => PaginationProps | boolean;
-  getSize: () => SizeType;
-  getRowSelection: () => TableRowSelection<Recordable>;
-  getCacheColumns: () => BasicColumn[];
-  emit?: EmitType;
-  updateTableData: (index: number, key: string, value: any) => Recordable;
-  setShowPagination: (show: boolean) => Promise<void>;
-  getShowPagination: () => boolean;
-  setCacheColumnsByField?: (dataIndex: string | undefined, value: BasicColumn) => void;
-}
-
-export interface FetchSetting {
-  // 璇锋眰鎺ュ彛褰撳墠椤垫暟
-  pageField: string;
-  // 姣忛〉鏄剧ず澶氬皯鏉�
-  sizeField: string;
-  // 璇锋眰缁撴灉鍒楄〃瀛楁  鏀寔 a.b.c
-  listField: string;
-  // 璇锋眰缁撴灉鎬绘暟瀛楁  鏀寔 a.b.c
-  totalField: string;
-}
-
-export interface TableSetting {
-  // 鏄惁鏄剧ず鍒锋柊鎸夐挳
-  redo?: boolean;
-  // 鏄惁鏄剧ず灏哄璋冩暣鎸夐挳
-  size?: boolean;
-  // 鏄惁鏄剧ず瀛楁璋冩暣鎸夐挳
-  setting?: boolean;
-  // 缂撳瓨鈥滃瓧娈佃皟鏁粹�濋厤缃殑key锛岀敤浜庨〉闈笂鏈夊涓〃鏍奸渶瑕佸尯鍒嗙殑鎯呭喌
-  cacheKey?: string;
-  // 鏄惁鏄剧ず鍏ㄥ睆鎸夐挳
-  fullScreen?: boolean;
-}
-
-export interface BasicTableProps<T = any> {
-  // 鐐瑰嚮琛岄�変腑
-  clickToRowSelect?: boolean;
-  isTreeTable?: boolean;
-  // 鑷畾涔夋帓搴忔柟娉�
-  sortFn?: (sortInfo: SorterResult) => any;
-  // 鎺掑簭鏂规硶
-  filterFn?: (data: Partial<Recordable<string[]>>) => any;
-  // 鍙栨秷琛ㄦ牸鐨勯粯璁adding
-  inset?: boolean;
-  // 鏄剧ず琛ㄦ牸璁剧疆
-  showTableSetting?: boolean;
-  tableSetting?: TableSetting;
-  // 鏂戦┈绾�
-  striped?: boolean;
-  // 鏄惁鑷姩鐢熸垚key
-  autoCreateKey?: boolean;
-  // 璁$畻鍚堣琛岀殑鏂规硶
-  summaryFunc?: (...arg: any) => Recordable[];
-  // 鑷畾涔夊悎璁¤〃鏍煎唴瀹�
-  summaryData?: Recordable[];
-  // 鏄惁鏄剧ず鍚堣琛�
-  showSummary?: boolean;
-  // 鏄惁鍙嫋鎷藉垪
-  canColDrag?: boolean;
-  // 鎺ュ彛璇锋眰瀵硅薄
-  api?: (...arg: any) => Promise<any>;
-  // 璇锋眰涔嬪墠澶勭悊鍙傛暟
-  beforeFetch?: Fn;
-  // 鑷畾涔夊鐞嗘帴鍙h繑鍥炲弬鏁�
-  afterFetch?: Fn;
-  // 鏌ヨ鏉′欢璇锋眰涔嬪墠澶勭悊
-  handleSearchInfoFn?: Fn;
-  // 璇锋眰鎺ュ彛閰嶇疆
-  fetchSetting?: Partial<FetchSetting>;
-  // 绔嬪嵆璇锋眰鎺ュ彛
-  immediate?: boolean;
-  // 鍦ㄥ紑璧锋悳绱㈣〃鍗曠殑鏃跺�欙紝濡傛灉娌℃湁鏁版嵁鏄惁鏄剧ず琛ㄦ牸
-  emptyDataIsShowTable?: boolean;
-  // 棰濆鐨勮姹傚弬鏁�
-  searchInfo?: Recordable;
-  // 榛樿鐨勬帓搴忓弬鏁�
-  defSort?: Recordable;
-  // 浣跨敤鎼滅储琛ㄥ崟
-  useSearchForm?: boolean;
-  // 琛ㄥ崟閰嶇疆
-  formConfig?: Partial<FormProps>;
-  // 鍒楅厤缃�
-  columns: BasicColumn[];
-  // 鏄惁鏄剧ず搴忓彿鍒�
-  showIndexColumn?: boolean;
-  // 搴忓彿鍒楅厤缃�
-  indexColumnProps?: BasicColumn;
-  // 鏄惁鏄剧ず鎿嶄綔鍒�
-  showActionColumn?: boolean;
-  // 鎿嶄綔鍒楅厤缃�
-  actionColumn?: BasicColumn;
-  // 鏂囨湰瓒呰繃瀹藉害鏄惁鏄剧ず銆傘�傘��
-  ellipsis?: boolean;
-  // 鏄惁鍙互鑷�傚簲楂樺害
-  canResize?: boolean;
-  // 鑷�傚簲楂樺害鍋忕Щ锛� 璁$畻缁撴灉-鍋忕Щ閲�
-  resizeHeightOffset?: number;
-
-  // 鍦ㄥ垎椤垫敼鍙樼殑鏃跺�欐竻绌洪�夐」
-  clearSelectOnPageChange?: boolean;
-  //
-  rowKey?: string | ((record: Recordable) => string);
-  // 鏁版嵁
-  dataSource?: Recordable[];
-  // 鏍囬鍙充晶鎻愮ず
-  titleHelpMessage?: string | string[];
-  // 琛ㄦ牸鏈�灏忛珮搴�
-  minHeight?: number;
-  // 琛ㄦ牸婊氬姩鏈�澶ч珮搴�
-  maxHeight?: number;
-  // 鏄惁鏄剧ず杈规
-  bordered?: boolean;
-  // 鍒嗛〉閰嶇疆
-  pagination?: PaginationProps | boolean;
-  // loading鍔犺浇
-  loading?: boolean;
-
-  /**
-   * The column contains children to display
-   * @default 'children'
-   * @type string | string[]
-   */
-  childrenColumnName?: string;
-
-  /**
-   * Override default table elements
-   * @type object
-   */
-  components?: object;
-
-  /**
-   * Expand all rows initially
-   * @default false
-   * @type boolean
-   */
-  defaultExpandAllRows?: boolean;
-
-  /**
-   * Initial expanded row keys
-   * @type string[]
-   */
-  defaultExpandedRowKeys?: string[];
-
-  /**
-   * Current expanded row keys
-   * @type string[]
-   */
-  expandedRowKeys?: string[];
-
-  /**
-   * Expanded container render for each row
-   * @type Function
-   */
-  expandedRowRender?: (record?: ExpandedRowRenderRecord<T>) => VNodeChild | JSX.Element;
-
-  /**
-   * Customize row expand Icon.
-   * @type Function | VNodeChild
-   */
-  expandIcon?: Function | VNodeChild | JSX.Element;
-
-  /**
-   * Whether to expand row by clicking anywhere in the whole row
-   * @default false
-   * @type boolean
-   */
-  expandRowByClick?: boolean;
-
-  /**
-   * The index of `expandIcon` which column will be inserted when `expandIconAsCell` is false. default 0
-   */
-  expandIconColumnIndex?: number;
-
-  /**
-   * Table footer renderer
-   * @type Function | VNodeChild
-   */
-  footer?: Function | VNodeChild | JSX.Element;
-
-  /**
-   * Indent size in pixels of tree data
-   * @default 15
-   * @type number
-   */
-  indentSize?: number;
-
-  /**
-   * i18n text including filter, sort, empty text, etc
-   * @default { filterConfirm: 'Ok', filterReset: 'Reset', emptyText: 'No Data' }
-   * @type object
-   */
-  locale?: object;
-
-  /**
-   * Row's className
-   * @type Function
-   */
-  rowClassName?: (record: TableCustomRecord<T>, index: number) => string;
-
-  /**
-   * Row selection config
-   * @type object
-   */
-  rowSelection?: TableRowSelection;
-
-  /**
-   * Set horizontal or vertical scrolling, can also be used to specify the width and height of the scroll area.
-   * It is recommended to set a number for x, if you want to set it to true,
-   * you need to add style .ant-table td { white-space: nowrap; }.
-   * @type object
-   */
-  scroll?: { x?: number | true; y?: number };
-
-  /**
-   * Whether to show table header
-   * @default true
-   * @type boolean
-   */
-  showHeader?: boolean;
-
-  /**
-   * Size of table
-   * @default 'default'
-   * @type string
-   */
-  size?: SizeType;
-
-  /**
-   * Table title renderer
-   * @type Function | ScopedSlot
-   */
-  title?: VNodeChild | JSX.Element | string | ((data: Recordable) => string);
-
-  /**
-   * Set props on per header row
-   * @type Function
-   */
-  customHeaderRow?: (column: ColumnProps, index: number) => object;
-
-  /**
-   * Set props on per row
-   * @type Function
-   */
-  customRow?: (record: T, index: number) => object;
-
-  /**
-   * `table-layout` attribute of table element
-   * `fixed` when header/columns are fixed, or using `column.ellipsis`
-   *
-   * @see https://developer.mozilla.org/en-US/docs/Web/CSS/table-layout
-   * @version 1.5.0
-   */
-  tableLayout?: 'auto' | 'fixed' | string;
-
-  /**
-   * the render container of dropdowns in table
-   * @param triggerNode
-   * @version 1.5.0
-   */
-  getPopupContainer?: (triggerNode?: HTMLElement) => HTMLElement;
-
-  /**
-   * Data can be changed again before rendering.
-   * The default configuration of general user empty data.
-   * You can configured globally through [ConfigProvider](https://antdv.com/components/config-provider-cn/)
-   *
-   * @version 1.5.4
-   */
-  transformCellText?: Function;
-
-  /**
-   * Callback executed before editable cell submit value, not for row-editor
-   *
-   * The cell will not submit data while callback return false
-   */
-  beforeEditSubmit?: (data: { record: Recordable; index: number; key: string | number; value: any }) => Promise<any>;
-
-  /**
-   * Callback executed when pagination, filters or sorter is changed
-   * @param pagination
-   * @param filters
-   * @param sorter
-   * @param currentDataSource
-   */
-  onChange?: (pagination: any, filters: any, sorter: any, extra: any) => void;
-
-  /**
-   * Callback executed when the row expand icon is clicked
-   *
-   * @param expanded
-   * @param record
-   */
-  onExpand?: (expande: boolean, record: T) => void;
-
-  /**
-   * Callback executed when the expanded rows change
-   * @param expandedRows
-   */
-  onExpandedRowsChange?: (expandedRows: string[] | number[]) => void;
-
-  onColumnsChange?: (data: ColumnChangeParam[]) => void;
-}
-
-export type CellFormat = string | ((text: string, record: Recordable, index: number) => string | number) | Map<string | number, any>;
-
-// @ts-ignore
-export interface BasicColumn extends ColumnProps {
-  children?: BasicColumn[];
-  filters?: {
-    text: string;
-    value: string;
-    children?: unknown[] | (((props: Record<string, unknown>) => unknown[]) & (() => unknown[]) & (() => unknown[]));
-  }[];
-
-  //
-  flag?: 'INDEX' | 'DEFAULT' | 'CHECKBOX' | 'RADIO' | 'ACTION';
-  customTitle?: VueNode;
-
-  slots?: Recordable;
-
-  // Whether to hide the column by default, it can be displayed in the column configuration
-  defaultHidden?: boolean;
-
-  // Help text for table column header
-  helpMessage?: string | string[];
-
-  format?: CellFormat;
-
-  // Editable
-  edit?: boolean;
-  editRow?: boolean;
-  editable?: boolean;
-  editComponent?: ComponentType;
-  editComponentProps?: Recordable;
-  editRule?: boolean | ((text: string, record: Recordable) => Promise<string>);
-  editValueMap?: (value: any) => string;
-  onEditRow?: () => void;
-  // 鏉冮檺缂栫爜鎺у埗鏄惁鏄剧ず
-  auth?: RoleEnum | RoleEnum[] | string | string[];
-  // 涓氬姟鎺у埗鏄惁鏄剧ず
-  ifShow?: boolean | ((column: BasicColumn) => boolean);
-  //compType-鐢ㄤ簬璁板綍绫诲瀷
-  compType?: string;
-}
-
-export type ColumnChangeParam = {
-  dataIndex: string;
-  fixed: boolean | 'left' | 'right' | undefined;
-  visible: boolean;
-};
-
-export interface InnerHandlers {
-  onColumnsChange: (data: ColumnChangeParam[]) => void;
-}
diff --git a/src/components/Table/src/types/tableAction.ts b/src/components/Table/src/types/tableAction.ts
deleted file mode 100644
index 5bd1ce6..0000000
--- a/src/components/Table/src/types/tableAction.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes';
-import { TooltipProps } from 'ant-design-vue/es/tooltip/Tooltip';
-import { RoleEnum } from '/@/enums/roleEnum';
-export interface ActionItem extends ButtonProps {
-  onClick?: Fn;
-  label?: string;
-  color?: 'success' | 'error' | 'warning';
-  icon?: string;
-  popConfirm?: PopConfirm;
-  disabled?: boolean;
-  divider?: boolean;
-  // 鏉冮檺缂栫爜鎺у埗鏄惁鏄剧ず
-  auth?: RoleEnum | RoleEnum[] | string | string[];
-  // 涓氬姟鎺у埗鏄惁鏄剧ず
-  ifShow?: boolean | ((action: ActionItem) => boolean);
-  tooltip?: string | TooltipProps;
-  // 鑷畾涔夌被鍚�
-  class?: string | Record<string, boolean> | any[];
-  // 鑷畾涔夊浘鏍囬鑹�
-  iconColor?: string;
-}
-
-export interface PopConfirm {
-  title: string;
-  okText?: string;
-  cancelText?: string;
-  confirm: Fn;
-  cancel?: Fn;
-  icon?: string;
-  placement?: string;
-}
diff --git a/src/components/Time/index.ts b/src/components/Time/index.ts
deleted file mode 100644
index 7e2f4c0..0000000
--- a/src/components/Time/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { withInstall } from '/@/utils/index';
-import time from './src/Time.vue';
-
-export const Time = withInstall(time);
diff --git a/src/components/Time/src/Time.vue b/src/components/Time/src/Time.vue
deleted file mode 100644
index be49ba3..0000000
--- a/src/components/Time/src/Time.vue
+++ /dev/null
@@ -1,107 +0,0 @@
-<template>
-  <span>{{ date }}</span>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, watch } from 'vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useIntervalFn } from '@vueuse/core';
-  import { formatToDateTime, formatToDate, dateUtil } from '/@/utils/dateUtil';
-  import { isNumber, isObject, isString } from '/@/utils/is';
-  import { propTypes } from '/@/utils/propTypes';
-
-  const ONE_SECONDS = 1000;
-  const ONE_MINUTES = ONE_SECONDS * 60;
-  const ONE_HOUR = ONE_MINUTES * 60;
-  const ONE_DAY = ONE_HOUR * 24;
-
-  export default defineComponent({
-    name: 'Time',
-    props: {
-      value: propTypes.oneOfType([propTypes.number, propTypes.instanceOf(Date), propTypes.string]).isRequired,
-      step: propTypes.number.def(60),
-      mode: propTypes.oneOf(['date', 'datetime', 'relative']).def('relative'),
-    },
-    setup(props) {
-      const date = ref('');
-
-      const { t } = useI18n();
-
-      useIntervalFn(setTime, props.step * ONE_SECONDS);
-
-      watch(
-        () => props.value,
-        () => {
-          setTime();
-        },
-        { immediate: true }
-      );
-
-      function getTime() {
-        const { value } = props;
-        let time = 0;
-        if (isNumber(value)) {
-          const timestamp = value.toString().length > 10 ? value : value * 1000;
-          time = new Date(timestamp).getTime();
-        } else if (isString(value)) {
-          time = new Date(value).getTime();
-        } else if (isObject(value)) {
-          time = value.getTime();
-        }
-        return time;
-      }
-
-      function setTime() {
-        const { mode, value } = props;
-        const time = getTime();
-        if (mode === 'relative') {
-          date.value = getRelativeTime(time);
-        } else {
-          if (mode === 'datetime') {
-            date.value = formatToDateTime(value);
-          } else if (mode === 'date') {
-            date.value = formatToDate(value);
-          }
-        }
-      }
-
-      function getRelativeTime(timeStamp: number) {
-        const currentTime = new Date().getTime();
-
-        // Determine whether the incoming timestamp is earlier than the current timestamp
-        const isBefore = dateUtil(timeStamp).isBefore(currentTime);
-
-        let diff = currentTime - timeStamp;
-        if (!isBefore) {
-          diff = -diff;
-        }
-
-        let resStr = '';
-        let dirStr = isBefore ? t('component.time.before') : t('component.time.after');
-
-        if (diff < ONE_SECONDS) {
-          resStr = t('component.time.just');
-          // Less than or equal to 59 seconds
-        } else if (diff < ONE_MINUTES) {
-          resStr = parseInt(diff / ONE_SECONDS) + t('component.time.seconds') + dirStr;
-          // More than 59 seconds, less than or equal to 59 minutes and 59 seconds
-        } else if (diff >= ONE_MINUTES && diff < ONE_HOUR) {
-          resStr = Math.floor(diff / ONE_MINUTES) + t('component.time.minutes') + dirStr;
-          // More than 59 minutes and 59 seconds, less than or equal to 23 hours, 59 minutes and 59 seconds
-        } else if (diff >= ONE_HOUR && diff < ONE_DAY) {
-          resStr = Math.floor(diff / ONE_HOUR) + t('component.time.hours') + dirStr;
-          // More than 23 hours, 59 minutes and 59 seconds, less than or equal to 29 days, 59 minutes and 59 seconds
-        } else if (diff >= ONE_DAY && diff < 2623860000) {
-          resStr = Math.floor(diff / ONE_DAY) + t('component.time.days') + dirStr;
-          // More than 29 days, 59 minutes, 59 seconds, less than 364 days, 23 hours, 59 minutes, 59 seconds, and the incoming timestamp is earlier than the current
-        } else if (diff >= 2623860000 && diff <= 31567860000 && isBefore) {
-          resStr = dateUtil(timeStamp).format('MM-DD-HH-mm');
-        } else {
-          resStr = dateUtil(timeStamp).format('YYYY');
-        }
-        return resStr;
-      }
-
-      return { date };
-    },
-  });
-</script>
diff --git a/src/components/Tinymce/index.ts b/src/components/Tinymce/index.ts
deleted file mode 100644
index ce07f95..0000000
--- a/src/components/Tinymce/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { withInstall } from '/@/utils/index';
-import tinymce from './src/Editor.vue';
-
-export const Tinymce = withInstall(tinymce);
diff --git a/src/components/Tinymce/src/Editor.vue b/src/components/Tinymce/src/Editor.vue
deleted file mode 100644
index ff9279b..0000000
--- a/src/components/Tinymce/src/Editor.vue
+++ /dev/null
@@ -1,360 +0,0 @@
-<template>
-  <div :class="prefixCls" :style="{ width: containerWidth }">
-    <ImgUpload
-      :fullscreen="fullscreen"
-      @uploading="handleImageUploading"
-      @done="handleDone"
-      v-if="showImageUpload"
-      v-show="editorRef"
-      :disabled="disabled"
-    />
-    <textarea :id="tinymceId" ref="elRef" :style="{ visibility: 'hidden' }" v-if="!initOptions.inline"></textarea>
-    <slot v-else></slot>
-  </div>
-</template>
-
-<script lang="ts">
-  import type { Editor, RawEditorSettings } from 'tinymce';
-  import tinymce from 'tinymce/tinymce';
-  import 'tinymce/themes/silver';
-  import 'tinymce/icons/default/icons';
-  import 'tinymce/plugins/advlist';
-  import 'tinymce/plugins/anchor';
-  import 'tinymce/plugins/autolink';
-  import 'tinymce/plugins/autosave';
-  import 'tinymce/plugins/code';
-  import 'tinymce/plugins/codesample';
-  import 'tinymce/plugins/directionality';
-  import 'tinymce/plugins/fullscreen';
-  import 'tinymce/plugins/hr';
-  import 'tinymce/plugins/insertdatetime';
-  import 'tinymce/plugins/link';
-  import 'tinymce/plugins/lists';
-  import 'tinymce/plugins/media';
-  import 'tinymce/plugins/nonbreaking';
-  import 'tinymce/plugins/noneditable';
-  import 'tinymce/plugins/pagebreak';
-  import 'tinymce/plugins/paste';
-  import 'tinymce/plugins/preview';
-  import 'tinymce/plugins/print';
-  import 'tinymce/plugins/save';
-  import 'tinymce/plugins/searchreplace';
-  import 'tinymce/plugins/spellchecker';
-  import 'tinymce/plugins/tabfocus';
-  // import 'tinymce/plugins/table';
-  import 'tinymce/plugins/template';
-  import 'tinymce/plugins/textpattern';
-  import 'tinymce/plugins/visualblocks';
-  import 'tinymce/plugins/visualchars';
-  import 'tinymce/plugins/wordcount';
-  import 'tinymce/plugins/image';
-  import 'tinymce/plugins/table';
-  import 'tinymce/plugins/textcolor';
-  import 'tinymce/plugins/contextmenu';
-  import { defineComponent, computed, nextTick, ref, unref, watch, onDeactivated, onBeforeUnmount } from 'vue';
-  import ImgUpload from './ImgUpload.vue';
-  import { toolbar, plugins, simplePlugins, simpleToolbar, menubar } from './tinymce';
-  import { buildShortUUID } from '/@/utils/uuid';
-  import { bindHandlers } from './helper';
-  import { onMountedOrActivated } from '/@/hooks/core/onMountedOrActivated';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { isNumber } from '/@/utils/is';
-  import { useLocale } from '/@/locales/useLocale';
-  import { useAppStore } from '/@/store/modules/app';
-  import { uploadFile } from '/@/api/common/api';
-  import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-  const tinymceProps = {
-    options: {
-      type: Object as PropType<Partial<RawEditorSettings>>,
-      default: {},
-    },
-    value: {
-      type: String,
-    },
-
-    toolbar: {
-      type: [Array as PropType<string[]>, String],
-      default: toolbar,
-    },
-    plugins: {
-      type: Array as PropType<string[]>,
-      default: plugins,
-    },
-    menubar: {
-      type: [Object, String],
-      default: menubar,
-    },
-    modelValue: {
-      type: String,
-    },
-    height: {
-      type: [Number, String] as PropType<string | number>,
-      required: false,
-      default: 400,
-    },
-    width: {
-      type: [Number, String] as PropType<string | number>,
-      required: false,
-      default: 'auto',
-    },
-    showImageUpload: {
-      type: Boolean,
-      default: true,
-    },
-  };
-
-  export default defineComponent({
-    name: 'Tinymce',
-    components: { ImgUpload },
-    inheritAttrs: false,
-    props: tinymceProps,
-    emits: ['change', 'update:modelValue', 'inited', 'init-error'],
-    setup(props, { emit, attrs }) {
-      const editorRef = ref<Nullable<Editor>>(null);
-      const fullscreen = ref(false);
-      const tinymceId = ref<string>(buildShortUUID('tiny-vue'));
-      const elRef = ref<Nullable<HTMLElement>>(null);
-
-      const { prefixCls } = useDesign('tinymce-container');
-
-      const appStore = useAppStore();
-
-      const tinymceContent = computed(() => props.modelValue);
-
-      const containerWidth = computed(() => {
-        const width = props.width;
-        if (isNumber(width)) {
-          return `${width}px`;
-        }
-        return width;
-      });
-
-      const skinName = computed(() => {
-        return appStore.getDarkMode === 'light' ? 'jeecg' : 'oxide-dark';
-      });
-
-      const langName = computed(() => {
-        const lang = useLocale().getLocale.value;
-        return ['zh_CN', 'en'].includes(lang) ? lang : 'zh_CN';
-      });
-
-      const initOptions = computed((): RawEditorSettings => {
-        const { height, options, toolbar, plugins, menubar } = props;
-        const publicPath = import.meta.env.VITE_PUBLIC_PATH || '/';
-        return {
-          selector: `#${unref(tinymceId)}`,
-          height,
-          toolbar,
-          menubar: menubar,
-          plugins,
-          language_url: publicPath + 'resource/tinymce/langs/' + langName.value + '.js',
-          language: langName.value,
-          branding: false,
-          default_link_target: '_blank',
-          link_title: false,
-          object_resizing: true,
-          toolbar_mode: 'sliding',
-          auto_focus: true,
-          toolbar_groups: true,
-          skin: skinName.value,
-          skin_url: publicPath + 'resource/tinymce/skins/ui/' + skinName.value,
-          images_upload_handler: (blobInfo, success) => {
-            let params = {
-              file: blobInfo.blob(),
-              filename: blobInfo.filename(),
-              data: { biz: 'jeditor', jeditor: '1' },
-            };
-            const uploadSuccess = (res) => {
-              if (res.success) {
-                if (res.message == 'local') {
-                  const img = 'data:image/jpeg;base64,' + blobInfo.base64();
-                  success(img);
-                } else {
-                  let img = getFileAccessHttpUrl(res.message);
-                  success(img);
-                }
-              }
-            };
-            uploadFile(params, uploadSuccess);
-          },
-          content_css: publicPath + 'resource/tinymce/skins/ui/' + skinName.value + '/content.min.css',
-          ...options,
-          setup: (editor: Editor) => {
-            editorRef.value = editor;
-            editor.on('init', (e) => initSetup(e));
-          },
-        };
-      });
-
-      const disabled = computed(() => {
-        const { options } = props;
-        const getdDisabled = options && Reflect.get(options, 'readonly');
-        const editor = unref(editorRef);
-        // update-begin-author:taoyan date:20220407 for: 璁剧疆disabled锛屽浘鐗囦笂浼犳病鏈夎绂佺敤
-        if (editor) {
-          editor.setMode(getdDisabled || attrs.disabled === true ? 'readonly' : 'design');
-        }
-        if (attrs.disabled === true) {
-          return true;
-        }
-        // update-end-author:taoyan date:20220407 for: 璁剧疆disabled锛屽浘鐗囦笂浼犳病鏈夎绂佺敤
-        return getdDisabled ?? false;
-      });
-
-      watch(
-        () => attrs.disabled,
-        () => {
-          const editor = unref(editorRef);
-          if (!editor) {
-            return;
-          }
-          editor.setMode(attrs.disabled ? 'readonly' : 'design');
-        }
-      );
-
-      onMountedOrActivated(() => {
-        if (!initOptions.value.inline) {
-          tinymceId.value = buildShortUUID('tiny-vue');
-        }
-        nextTick(() => {
-          setTimeout(() => {
-            initEditor();
-          }, 30);
-        });
-      });
-
-      onBeforeUnmount(() => {
-        destory();
-      });
-
-      onDeactivated(() => {
-        destory();
-      });
-
-      function destory() {
-        if (tinymce !== null) {
-          tinymce?.remove?.(unref(initOptions).selector!);
-        }
-      }
-
-      function initEditor() {
-        const el = unref(elRef);
-        if (el) {
-          el.style.visibility = '';
-        }
-        tinymce
-          .init(unref(initOptions))
-          .then((editor) => {
-            emit('inited', editor);
-          })
-          .catch((err) => {
-            emit('init-error', err);
-          });
-      }
-
-      function initSetup(e) {
-        const editor = unref(editorRef);
-        if (!editor) {
-          return;
-        }
-        const value = props.modelValue || '';
-
-        editor.setContent(value);
-        bindModelHandlers(editor);
-        bindHandlers(e, attrs, unref(editorRef));
-      }
-
-      function setValue(editor: Recordable, val: string, prevVal?: string) {
-        if (editor && typeof val === 'string' && val !== prevVal && val !== editor.getContent({ format: attrs.outputFormat })) {
-          editor.setContent(val);
-        }
-      }
-
-      function bindModelHandlers(editor: any) {
-        const modelEvents = attrs.modelEvents ? attrs.modelEvents : null;
-        const normalizedEvents = Array.isArray(modelEvents) ? modelEvents.join(' ') : modelEvents;
-
-        watch(
-          () => props.modelValue,
-          (val: string, prevVal: string) => {
-            setValue(editor, val, prevVal);
-          }
-        );
-
-        watch(
-          () => props.value,
-          (val: string, prevVal: string) => {
-            setValue(editor, val, prevVal);
-          },
-          {
-            immediate: true,
-          }
-        );
-
-        editor.on(normalizedEvents ? normalizedEvents : 'change keyup undo redo', () => {
-          const content = editor.getContent({ format: attrs.outputFormat });
-          emit('update:modelValue', content);
-          emit('change', content);
-        });
-
-        editor.on('FullscreenStateChanged', (e) => {
-          fullscreen.value = e.state;
-        });
-      }
-
-      function handleImageUploading(name: string) {
-        const editor = unref(editorRef);
-        if (!editor) {
-          return;
-        }
-        editor.execCommand('mceInsertContent', false, getUploadingImgName(name));
-        const content = editor?.getContent() ?? '';
-        setValue(editor, content);
-      }
-
-      function handleDone(name: string, url: string) {
-        const editor = unref(editorRef);
-        if (!editor) {
-          return;
-        }
-        const content = editor?.getContent() ?? '';
-        const val = content?.replace(getUploadingImgName(name), `<img src="${url}"/>`) ?? '';
-        setValue(editor, val);
-      }
-
-      function getUploadingImgName(name: string) {
-        return `[uploading:${name}]`;
-      }
-
-      return {
-        prefixCls,
-        containerWidth,
-        initOptions,
-        tinymceContent,
-        elRef,
-        tinymceId,
-        handleImageUploading,
-        handleDone,
-        editorRef,
-        fullscreen,
-        disabled,
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped></style>
-
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-tinymce-container';
-
-  .@{prefix-cls} {
-    position: relative;
-    line-height: normal;
-
-    textarea {
-      z-index: -1;
-      visibility: hidden;
-    }
-  }
-</style>
diff --git a/src/components/Tinymce/src/ImgUpload.vue b/src/components/Tinymce/src/ImgUpload.vue
deleted file mode 100644
index e0e532f..0000000
--- a/src/components/Tinymce/src/ImgUpload.vue
+++ /dev/null
@@ -1,118 +0,0 @@
-<template>
-  <div :class="[prefixCls, { fullscreen }]">
-    <Upload
-      name="file"
-      multiple
-      @change="handleChange"
-      :action="uploadUrl"
-      :showUploadList="false"
-      :data="getBizData()"
-      :headers="getheader()"
-      accept=".jpg,.jpeg,.gif,.png,.webp"
-    >
-      <a-button type="primary" v-bind="{ ...getButtonProps }">
-        {{ t('component.upload.imgUpload') }}
-      </a-button>
-    </Upload>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, computed } from 'vue';
-
-  import { Upload } from 'ant-design-vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { getToken } from '/@/utils/auth';
-  import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-
-  export default defineComponent({
-    name: 'TinymceImageUpload',
-    components: { Upload },
-    props: {
-      fullscreen: {
-        type: Boolean,
-      },
-      disabled: {
-        type: Boolean,
-        default: false,
-      },
-    },
-    emits: ['uploading', 'done', 'error'],
-    setup(props, { emit }) {
-      let uploading = false;
-
-      //update-begin-author:taoyan date:2022-5-13 for: 瀵屾枃鏈笂浼犲浘鐗囦笉鏀寔
-      function getheader() {
-        return { 'X-Access-Token': getToken() };
-      }
-
-      function getBizData() {
-        return {
-          biz: 'jeditor',
-          jeditor: '1',
-        };
-      }
-      const { domainUrl } = useGlobSetting();
-      const uploadUrl = domainUrl + '/sys/common/upload';
-      //update-end-author:taoyan date:2022-5-13 for: 瀵屾枃鏈笂浼犲浘鐗囦笉鏀寔
-      const { t } = useI18n();
-      const { prefixCls } = useDesign('tinymce-img-upload');
-
-      const getButtonProps = computed(() => {
-        const { disabled } = props;
-        return {
-          disabled,
-        };
-      });
-
-      function handleChange(info: Recordable) {
-        const file = info.file;
-        const status = file?.status;
-        //const url = file?.response?.url;
-        const name = file?.name;
-
-        if (status === 'uploading') {
-          if (!uploading) {
-            emit('uploading', name);
-            uploading = true;
-          }
-        } else if (status === 'done') {
-          //update-begin-author:taoyan date:2022-5-13 for: 瀵屾枃鏈笂浼犲浘鐗囦笉鏀寔
-          let realUrl = getFileAccessHttpUrl(file.response.message);
-          emit('done', name, realUrl);
-          //update-end-author:taoyan date:2022-5-13 for: 瀵屾枃鏈笂浼犲浘鐗囦笉鏀寔
-          uploading = false;
-        } else if (status === 'error') {
-          emit('error');
-          uploading = false;
-        }
-      }
-
-      return {
-        prefixCls,
-        handleChange,
-        uploadUrl,
-        getheader,
-        getBizData,
-        t,
-        getButtonProps,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-tinymce-img-upload';
-
-  .@{prefix-cls} {
-    position: absolute;
-    top: 4px;
-    right: 10px;
-    z-index: 20;
-
-    &.fullscreen {
-      position: fixed;
-      z-index: 10000;
-    }
-  }
-</style>
diff --git a/src/components/Tinymce/src/helper.ts b/src/components/Tinymce/src/helper.ts
deleted file mode 100644
index 2526ae7..0000000
--- a/src/components/Tinymce/src/helper.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-const validEvents = [
-  'onActivate',
-  'onAddUndo',
-  'onBeforeAddUndo',
-  'onBeforeExecCommand',
-  'onBeforeGetContent',
-  'onBeforeRenderUI',
-  'onBeforeSetContent',
-  'onBeforePaste',
-  'onBlur',
-  'onChange',
-  'onClearUndos',
-  'onClick',
-  'onContextMenu',
-  'onCopy',
-  'onCut',
-  'onDblclick',
-  'onDeactivate',
-  'onDirty',
-  'onDrag',
-  'onDragDrop',
-  'onDragEnd',
-  'onDragGesture',
-  'onDragOver',
-  'onDrop',
-  'onExecCommand',
-  'onFocus',
-  'onFocusIn',
-  'onFocusOut',
-  'onGetContent',
-  'onHide',
-  'onInit',
-  'onKeyDown',
-  'onKeyPress',
-  'onKeyUp',
-  'onLoadContent',
-  'onMouseDown',
-  'onMouseEnter',
-  'onMouseLeave',
-  'onMouseMove',
-  'onMouseOut',
-  'onMouseOver',
-  'onMouseUp',
-  'onNodeChange',
-  'onObjectResizeStart',
-  'onObjectResized',
-  'onObjectSelected',
-  'onPaste',
-  'onPostProcess',
-  'onPostRender',
-  'onPreProcess',
-  'onProgressState',
-  'onRedo',
-  'onRemove',
-  'onReset',
-  'onSaveContent',
-  'onSelectionChange',
-  'onSetAttrib',
-  'onSetContent',
-  'onShow',
-  'onSubmit',
-  'onUndo',
-  'onVisualAid',
-];
-
-const isValidKey = (key: string) => validEvents.indexOf(key) !== -1;
-
-export const bindHandlers = (initEvent: Event, listeners: any, editor: any): void => {
-  Object.keys(listeners)
-    .filter(isValidKey)
-    .forEach((key: string) => {
-      const handler = listeners[key];
-      if (typeof handler === 'function') {
-        if (key === 'onInit') {
-          handler(initEvent, editor);
-        } else {
-          editor.on(key.substring(2), (e: any) => handler(e, editor));
-        }
-      }
-    });
-};
diff --git a/src/components/Tinymce/src/tinymce.ts b/src/components/Tinymce/src/tinymce.ts
deleted file mode 100644
index 6a3d97a..0000000
--- a/src/components/Tinymce/src/tinymce.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-// Any plugins you want to setting has to be imported
-// Detail plugins list see https://www.tinymce.com/docs/plugins/
-// Custom builds see https://www.tinymce.com/download/custom-builds/
-// colorpicker/contextmenu/textcolor plugin is now built in to the core editor, please remove it from your editor configuration
-
-export const plugins = [
-  'advlist anchor autolink autosave code codesample  directionality  fullscreen hr insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus  template  textpattern visualblocks visualchars wordcount image',
-];
-
-export const toolbar =
-  'fullscreen code preview | undo redo | bold italic underline strikethrough | fontselect fontsizeselect formatselect | alignleft aligncenter alignright alignjustify | outdent indent lineheight|subscript superscript blockquote| numlist bullist checklist | forecolor backcolor casechange permanentpen formatpainter removeformat | pagebreak | charmap emoticons   | insertfile image media pageembed  link anchor  codesample insertdatetime hr| a11ycheck ltr rtl';
-
-export const simplePlugins = ['lists image link media table textcolor wordcount contextmenu fullscreen'];
-
-export const simpleToolbar = [
-  'undo redo  formatselect bold italic alignleft aligncenter alignright alignjustify bullist numlist outdent indent',
-  'lists link unlink image media table removeformat fullscreen',
-];
-
-export const menubar = 'file edit insert view format table';
diff --git a/src/components/Transition/index.ts b/src/components/Transition/index.ts
deleted file mode 100644
index 55cbe54..0000000
--- a/src/components/Transition/index.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { createSimpleTransition, createJavascriptTransition } from './src/CreateTransition';
-
-import ExpandTransitionGenerator from './src/ExpandTransition';
-
-export { default as CollapseTransition } from './src/CollapseTransition.vue';
-
-export const FadeTransition = createSimpleTransition('fade-transition');
-export const ScaleTransition = createSimpleTransition('scale-transition');
-export const SlideYTransition = createSimpleTransition('slide-y-transition');
-export const ScrollYTransition = createSimpleTransition('scroll-y-transition');
-export const SlideYReverseTransition = createSimpleTransition('slide-y-reverse-transition');
-export const ScrollYReverseTransition = createSimpleTransition('scroll-y-reverse-transition');
-export const SlideXTransition = createSimpleTransition('slide-x-transition');
-export const ScrollXTransition = createSimpleTransition('scroll-x-transition');
-export const SlideXReverseTransition = createSimpleTransition('slide-x-reverse-transition');
-export const ScrollXReverseTransition = createSimpleTransition('scroll-x-reverse-transition');
-export const ScaleRotateTransition = createSimpleTransition('scale-rotate-transition');
-
-export const ExpandXTransition = createJavascriptTransition('expand-x-transition', ExpandTransitionGenerator('', true));
-
-export const ExpandTransition = createJavascriptTransition('expand-transition', ExpandTransitionGenerator(''));
diff --git a/src/components/Transition/src/CollapseTransition.vue b/src/components/Transition/src/CollapseTransition.vue
deleted file mode 100644
index 6b50fa1..0000000
--- a/src/components/Transition/src/CollapseTransition.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-<template>
-  <transition mode="out-in" v-on="on">
-    <slot></slot>
-  </transition>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { addClass, removeClass } from '/@/utils/domUtils';
-
-  export default defineComponent({
-    name: 'CollapseTransition',
-    setup() {
-      return {
-        on: {
-          beforeEnter(el) {
-            addClass(el, 'collapse-transition');
-            if (!el.dataset) el.dataset = {};
-
-            el.dataset.oldPaddingTop = el.style.paddingTop;
-            el.dataset.oldPaddingBottom = el.style.paddingBottom;
-
-            el.style.height = '0';
-            el.style.paddingTop = 0;
-            el.style.paddingBottom = 0;
-          },
-
-          enter(el) {
-            el.dataset.oldOverflow = el.style.overflow;
-            if (el.scrollHeight !== 0) {
-              el.style.height = el.scrollHeight + 'px';
-              el.style.paddingTop = el.dataset.oldPaddingTop;
-              el.style.paddingBottom = el.dataset.oldPaddingBottom;
-            } else {
-              el.style.height = '';
-              el.style.paddingTop = el.dataset.oldPaddingTop;
-              el.style.paddingBottom = el.dataset.oldPaddingBottom;
-            }
-
-            el.style.overflow = 'hidden';
-          },
-
-          afterEnter(el) {
-            removeClass(el, 'collapse-transition');
-            el.style.height = '';
-            el.style.overflow = el.dataset.oldOverflow;
-          },
-
-          beforeLeave(el) {
-            if (!el.dataset) el.dataset = {};
-            el.dataset.oldPaddingTop = el.style.paddingTop;
-            el.dataset.oldPaddingBottom = el.style.paddingBottom;
-            el.dataset.oldOverflow = el.style.overflow;
-
-            el.style.height = el.scrollHeight + 'px';
-            el.style.overflow = 'hidden';
-          },
-
-          leave(el) {
-            if (el.scrollHeight !== 0) {
-              addClass(el, 'collapse-transition');
-              el.style.height = 0;
-              el.style.paddingTop = 0;
-              el.style.paddingBottom = 0;
-            }
-          },
-
-          afterLeave(el) {
-            removeClass(el, 'collapse-transition');
-            el.style.height = '';
-            el.style.overflow = el.dataset.oldOverflow;
-            el.style.paddingTop = el.dataset.oldPaddingTop;
-            el.style.paddingBottom = el.dataset.oldPaddingBottom;
-          },
-        },
-      };
-    },
-  });
-</script>
diff --git a/src/components/Transition/src/CreateTransition.tsx b/src/components/Transition/src/CreateTransition.tsx
deleted file mode 100644
index bad23b5..0000000
--- a/src/components/Transition/src/CreateTransition.tsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import type { PropType } from 'vue';
-
-import { defineComponent, Transition, TransitionGroup } from 'vue';
-import { getSlot } from '/@/utils/helper/tsxHelper';
-
-type Mode = 'in-out' | 'out-in' | 'default' | undefined;
-
-export function createSimpleTransition(name: string, origin = 'top center 0', mode?: Mode) {
-  return defineComponent({
-    name,
-    props: {
-      group: {
-        type: Boolean as PropType<boolean>,
-        default: false,
-      },
-      mode: {
-        type: String as PropType<Mode>,
-        default: mode,
-      },
-      origin: {
-        type: String as PropType<string>,
-        default: origin,
-      },
-    },
-    setup(props, { slots, attrs }) {
-      const onBeforeEnter = (el: HTMLElement) => {
-        el.style.transformOrigin = props.origin;
-      };
-
-      return () => {
-        const Tag = !props.group ? Transition : TransitionGroup;
-        return (
-          <Tag name={name} mode={props.mode} {...attrs} onBeforeEnter={onBeforeEnter}>
-            {() => getSlot(slots)}
-          </Tag>
-        );
-      };
-    },
-  });
-}
-export function createJavascriptTransition(name: string, functions: Recordable, mode: Mode = 'in-out') {
-  return defineComponent({
-    name,
-    props: {
-      mode: {
-        type: String as PropType<Mode>,
-        default: mode,
-      },
-    },
-    setup(props, { attrs, slots }) {
-      return () => {
-        return (
-          <Transition
-            name={name}
-            mode={props.mode}
-            {...attrs}
-            onBeforeEnter={functions.beforeEnter}
-            onEnter={functions.enter}
-            onLeave={functions.leave}
-            onAfterLeave={functions.afterLeave}
-            onLeaveCancelled={functions.afterLeave}
-          >
-            {() => getSlot(slots)}
-          </Transition>
-        );
-      };
-    },
-  });
-}
diff --git a/src/components/Transition/src/ExpandTransition.ts b/src/components/Transition/src/ExpandTransition.ts
deleted file mode 100644
index 2aaef9a..0000000
--- a/src/components/Transition/src/ExpandTransition.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Makes the first character of a string uppercase
- */
-export function upperFirst(str: string): string {
-  return str.charAt(0).toUpperCase() + str.slice(1);
-}
-
-interface HTMLExpandElement extends HTMLElement {
-  _parent?: (Node & ParentNode & HTMLElement) | null;
-  _initialStyle: {
-    transition: string;
-    overflow: string | null;
-    height?: string | null;
-    width?: string | null;
-  };
-}
-
-export default function (expandedParentClass = '', x = false) {
-  const sizeProperty = x ? 'width' : ('height' as 'width' | 'height');
-  const offsetProperty = `offset${upperFirst(sizeProperty)}` as 'offsetHeight' | 'offsetWidth';
-
-  return {
-    beforeEnter(el: HTMLExpandElement) {
-      el._parent = el.parentNode as (Node & ParentNode & HTMLElement) | null;
-      el._initialStyle = {
-        transition: el.style.transition,
-        overflow: el.style.overflow,
-        [sizeProperty]: el.style[sizeProperty],
-      };
-    },
-
-    enter(el: HTMLExpandElement) {
-      const initialStyle = el._initialStyle;
-
-      el.style.setProperty('transition', 'none', 'important');
-      el.style.overflow = 'hidden';
-      // const offset = `${el[offsetProperty]}px`;
-
-      // el.style[sizeProperty] = '0';
-
-      void el.offsetHeight; // force reflow
-
-      el.style.transition = initialStyle.transition;
-
-      if (expandedParentClass && el._parent) {
-        el._parent.classList.add(expandedParentClass);
-      }
-
-      requestAnimationFrame(() => {
-        // el.style[sizeProperty] = offset;
-      });
-    },
-
-    afterEnter: resetStyles,
-    enterCancelled: resetStyles,
-
-    leave(el: HTMLExpandElement) {
-      el._initialStyle = {
-        transition: '',
-        overflow: el.style.overflow,
-        [sizeProperty]: el.style[sizeProperty],
-      };
-
-      el.style.overflow = 'hidden';
-      el.style[sizeProperty] = `${el[offsetProperty]}px`;
-      /* eslint-disable-next-line */
-      void el.offsetHeight; // force reflow
-
-      requestAnimationFrame(() => (el.style[sizeProperty] = '0'));
-    },
-
-    afterLeave,
-    leaveCancelled: afterLeave,
-  };
-
-  function afterLeave(el: HTMLExpandElement) {
-    if (expandedParentClass && el._parent) {
-      el._parent.classList.remove(expandedParentClass);
-    }
-    resetStyles(el);
-  }
-
-  function resetStyles(el: HTMLExpandElement) {
-    const size = el._initialStyle[sizeProperty];
-    el.style.overflow = el._initialStyle.overflow!;
-    if (size != null) el.style[sizeProperty] = size;
-    Reflect.deleteProperty(el, '_initialStyle');
-  }
-}
diff --git a/src/components/Tree/index.ts b/src/components/Tree/index.ts
deleted file mode 100644
index 169035a..0000000
--- a/src/components/Tree/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import BasicTree from './src/BasicTree.vue';
-import './style';
-
-export { BasicTree };
-export type { ContextMenuItem } from '/@/hooks/web/useContextMenu';
-export * from './src/types/tree';
diff --git a/src/components/Tree/src/BasicTree.vue b/src/components/Tree/src/BasicTree.vue
deleted file mode 100644
index c1d52f5..0000000
--- a/src/components/Tree/src/BasicTree.vue
+++ /dev/null
@@ -1,456 +0,0 @@
-<script lang="tsx">
-  import type { CSSProperties } from 'vue';
-  import type {
-    FieldNames,
-    TreeState,
-    TreeItem,
-    KeyType,
-    CheckKeys,
-    TreeActionType,
-  } from './types/tree';
-
-  import {
-    defineComponent,
-    reactive,
-    computed,
-    unref,
-    ref,
-    watchEffect,
-    toRaw,
-    watch,
-    onMounted,
-  } from 'vue';
-  import TreeHeader from './components/TreeHeader.vue';
-  import { Tree, Spin, Empty } from 'ant-design-vue';
-  import { TreeIcon } from './TreeIcon';
-  import { ScrollContainer } from '/@/components/Container';
-  import { omit, get, difference, cloneDeep } from 'lodash-es';
-  import { isArray, isBoolean, isEmpty, isFunction } from '/@/utils/is';
-  import { extendSlots, getSlot } from '/@/utils/helper/tsxHelper';
-  import { filter, treeToList, eachTree } from '/@/utils/helper/treeHelper';
-  import { useTree } from './hooks/useTree';
-  import { useContextMenu } from '/@/hooks/web/useContextMenu';
-  import { CreateContextOptions } from '/@/components/ContextMenu';
-  import { treeEmits, treeProps } from './types/tree';
-  import { createBEM } from '/@/utils/bem';
-
-  export default defineComponent({
-    name: 'BasicTree',
-    inheritAttrs: false,
-    props: treeProps,
-    emits: treeEmits,
-    setup(props, { attrs, slots, emit, expose }) {
-      const [bem] = createBEM('tree');
-
-      const state = reactive<TreeState>({
-        checkStrictly: props.checkStrictly,
-        expandedKeys: props.expandedKeys || [],
-        selectedKeys: props.selectedKeys || [],
-        checkedKeys: props.checkedKeys || [],
-      });
-
-      const searchState = reactive({
-        startSearch: false,
-        searchText: '',
-        searchData: [] as TreeItem[],
-      });
-
-      const treeDataRef = ref<TreeItem[]>([]);
-
-      const [createContextMenu] = useContextMenu();
-
-      const getFieldNames = computed((): Required<FieldNames> => {
-        const { fieldNames } = props;
-        return {
-          children: 'children',
-          title: 'title',
-          key: 'key',
-          ...fieldNames,
-        };
-      });
-
-      const getBindValues = computed(() => {
-        let propsData = {
-          blockNode: true,
-          ...attrs,
-          ...props,
-          expandedKeys: state.expandedKeys,
-          selectedKeys: state.selectedKeys,
-          checkedKeys: state.checkedKeys,
-          checkStrictly: state.checkStrictly,
-          fieldNames: unref(getFieldNames),
-          'onUpdate:expandedKeys': (v: KeyType[]) => {
-            state.expandedKeys = v;
-            emit('update:expandedKeys', v);
-          },
-          'onUpdate:selectedKeys': (v: KeyType[]) => {
-            state.selectedKeys = v;
-            emit('update:selectedKeys', v);
-          },
-          onCheck: (v: CheckKeys, e) => {
-            let currentValue = toRaw(state.checkedKeys) as KeyType[];
-            if (isArray(currentValue) && searchState.startSearch) {
-              const { key } = unref(getFieldNames);
-              currentValue = difference(currentValue, getChildrenKeys(e.node.$attrs.node[key]));
-              if (e.checked) {
-                currentValue.push(e.node.$attrs.node[key]);
-              }
-              state.checkedKeys = currentValue;
-            } else {
-              state.checkedKeys = v;
-            }
-
-            const rawVal = toRaw(state.checkedKeys);
-            emit('update:value', rawVal);
-            emit('check', rawVal, e);
-          },
-          onRightClick: handleRightClick,
-        };
-        return omit(propsData, 'treeData', 'class');
-      });
-
-      const getTreeData = computed((): TreeItem[] =>
-        searchState.startSearch ? searchState.searchData : unref(treeDataRef),
-      );
-
-      const getNotFound = computed((): boolean => {
-        return !getTreeData.value || getTreeData.value.length === 0;
-      });
-
-      const {
-        deleteNodeByKey,
-        insertNodeByKey,
-        insertNodesByKey,
-        filterByLevel,
-        updateNodeByKey,
-        getAllKeys,
-        getChildrenKeys,
-        getEnabledKeys,
-        getSelectedNode,
-      } = useTree(treeDataRef, getFieldNames);
-
-      function getIcon(params: Recordable, icon?: string) {
-        if (!icon) {
-          if (props.renderIcon && isFunction(props.renderIcon)) {
-            return props.renderIcon(params);
-          }
-        }
-        return icon;
-      }
-
-      async function handleRightClick({ event, node }: Recordable) {
-        const { rightMenuList: menuList = [], beforeRightClick } = props;
-        let contextMenuOptions: CreateContextOptions = { event, items: [] };
-
-        if (beforeRightClick && isFunction(beforeRightClick)) {
-          let result = await beforeRightClick(node, event);
-          if (Array.isArray(result)) {
-            contextMenuOptions.items = result;
-          } else {
-            Object.assign(contextMenuOptions, result);
-          }
-        } else {
-          contextMenuOptions.items = menuList;
-        }
-        if (!contextMenuOptions.items?.length) return;
-        contextMenuOptions.items = contextMenuOptions.items.filter((item) => !item.hidden);
-        createContextMenu(contextMenuOptions);
-      }
-
-      function setExpandedKeys(keys: KeyType[]) {
-        state.expandedKeys = keys;
-      }
-
-      function getExpandedKeys() {
-        return state.expandedKeys;
-      }
-      function setSelectedKeys(keys: KeyType[]) {
-        state.selectedKeys = keys;
-      }
-
-      function getSelectedKeys() {
-        return state.selectedKeys;
-      }
-
-      function setCheckedKeys(keys: CheckKeys) {
-        state.checkedKeys = keys;
-      }
-
-      function getCheckedKeys() {
-        return state.checkedKeys;
-      }
-
-      function checkAll(checkAll: boolean) {
-        state.checkedKeys = checkAll ? getEnabledKeys() : ([] as KeyType[]);
-      }
-
-      function expandAll(expandAll: boolean) {
-        state.expandedKeys = expandAll ? getAllKeys() : ([] as KeyType[]);
-      }
-
-      function onStrictlyChange(strictly: boolean) {
-        state.checkStrictly = strictly;
-      }
-
-      watch(
-        () => props.searchValue,
-        (val) => {
-          if (val !== searchState.searchText) {
-            searchState.searchText = val;
-          }
-        },
-        {
-          immediate: true,
-        },
-      );
-
-      watch(
-        () => props.treeData,
-        (val) => {
-          if (val) {
-            handleSearch(searchState.searchText);
-          }
-        },
-      );
-
-      function handleSearch(searchValue: string) {
-        if (searchValue !== searchState.searchText) searchState.searchText = searchValue;
-        emit('update:searchValue', searchValue);
-        if (!searchValue) {
-          searchState.startSearch = false;
-          return;
-        }
-        const { filterFn, checkable, expandOnSearch, checkOnSearch, selectedOnSearch } =
-          unref(props);
-        searchState.startSearch = true;
-        const { title: titleField, key: keyField } = unref(getFieldNames);
-
-        const matchedKeys: string[] = [];
-        searchState.searchData = filter(
-          unref(treeDataRef),
-          (node) => {
-            const result = filterFn
-              ? filterFn(searchValue, node, unref(getFieldNames))
-              : node[titleField]?.includes(searchValue) ?? false;
-            if (result) {
-              matchedKeys.push(node[keyField]);
-            }
-            return result;
-          },
-          unref(getFieldNames),
-        );
-
-        if (expandOnSearch) {
-          const expandKeys = treeToList(searchState.searchData).map((val) => {
-            return val[keyField];
-          });
-          if (expandKeys && expandKeys.length) {
-            setExpandedKeys(expandKeys);
-          }
-        }
-
-        if (checkOnSearch && checkable && matchedKeys.length) {
-          setCheckedKeys(matchedKeys);
-        }
-
-        if (selectedOnSearch && matchedKeys.length) {
-          setSelectedKeys(matchedKeys);
-        }
-      }
-
-      function handleClickNode(key: string, children: TreeItem[]) {
-        if (!props.clickRowToExpand || !children || children.length === 0) return;
-        if (!state.expandedKeys.includes(key)) {
-          setExpandedKeys([...state.expandedKeys, key]);
-        } else {
-          const keys = [...state.expandedKeys];
-          const index = keys.findIndex((item) => item === key);
-          if (index !== -1) {
-            keys.splice(index, 1);
-          }
-          setExpandedKeys(keys);
-        }
-      }
-
-      watchEffect(() => {
-        treeDataRef.value = props.treeData as TreeItem[];
-      });
-
-      onMounted(() => {
-        const level = parseInt(props.defaultExpandLevel);
-        if (level > 0) {
-          state.expandedKeys = filterByLevel(level);
-        } else if (props.defaultExpandAll) {
-          expandAll(true);
-        }
-      });
-
-      watchEffect(() => {
-        state.expandedKeys = props.expandedKeys;
-      });
-
-      watchEffect(() => {
-        state.selectedKeys = props.selectedKeys;
-      });
-
-      watchEffect(() => {
-        state.checkedKeys = props.checkedKeys;
-      });
-
-      watch(
-        () => props.value,
-        () => {
-          state.checkedKeys = toRaw(props.value || []);
-        },
-        { immediate: true },
-      );
-
-      watch(
-        () => state.checkedKeys,
-        () => {
-          const v = toRaw(state.checkedKeys);
-          emit('update:value', v);
-          emit('change', v);
-        },
-      );
-
-      watchEffect(() => {
-        state.checkStrictly = props.checkStrictly;
-      });
-
-      const instance: TreeActionType = {
-        setExpandedKeys,
-        getExpandedKeys,
-        setSelectedKeys,
-        getSelectedKeys,
-        setCheckedKeys,
-        getCheckedKeys,
-        insertNodeByKey,
-        insertNodesByKey,
-        deleteNodeByKey,
-        updateNodeByKey,
-        getSelectedNode,
-        checkAll,
-        expandAll,
-        filterByLevel: (level: number) => {
-          state.expandedKeys = filterByLevel(level);
-        },
-        setSearchValue: (value: string) => {
-          handleSearch(value);
-        },
-        getSearchValue: () => {
-          return searchState.searchText;
-        },
-      };
-
-      function renderAction(node: TreeItem) {
-        const { actionList } = props;
-        if (!actionList || actionList.length === 0) return;
-        return actionList.map((item, index) => {
-          let nodeShow = true;
-          if (isFunction(item.show)) {
-            nodeShow = item.show?.(node);
-          } else if (isBoolean(item.show)) {
-            nodeShow = item.show;
-          }
-
-          if (!nodeShow) return null;
-
-          return (
-            <span key={index} class={bem('action')}>
-              {item.render(node)}
-            </span>
-          );
-        });
-      }
-
-      const treeData = computed(() => {
-        const data = cloneDeep(getTreeData.value);
-        eachTree(data, (item, _parent) => {
-          const searchText = searchState.searchText;
-          const { highlight } = unref(props);
-          const {
-            title: titleField,
-            key: keyField,
-            children: childrenField,
-          } = unref(getFieldNames);
-
-          const icon = getIcon(item, item.icon);
-          const title = get(item, titleField);
-
-          const searchIdx = searchText ? title.indexOf(searchText) : -1;
-          const isHighlight =
-            searchState.startSearch && !isEmpty(searchText) && highlight && searchIdx !== -1;
-          const highlightStyle = `color: ${isBoolean(highlight) ? '#f50' : highlight}`;
-
-          const titleDom = isHighlight ? (
-            <span class={unref(getBindValues)?.blockNode ? `${bem('content')}` : ''}>
-              <span>{title.substr(0, searchIdx)}</span>
-              <span style={highlightStyle}>{searchText}</span>
-              <span>{title.substr(searchIdx + (searchText as string).length)}</span>
-            </span>
-          ) : (
-            title
-          );
-          item[titleField] = (
-            <span
-              class={`${bem('title')} pl-2`}
-              onClick={handleClickNode.bind(null, item[keyField], item[childrenField])}
-            >
-              {slots?.title ? (
-                getSlot(slots, 'title', item)
-              ) : (
-                <>
-                  {icon && <TreeIcon icon={icon} />}
-                  {titleDom}
-                  <span class={bem('actions')}>{renderAction(item)}</span>
-                </>
-              )}
-            </span>
-          );
-          return item;
-        });
-        return data;
-      });
-
-      expose(instance);
-
-      return () => {
-        const { title, helpMessage, toolbar, search, checkable } = props;
-        const showTitle = title || toolbar || search || slots.headerTitle;
-        const scrollStyle: CSSProperties = { height: 'calc(100% - 38px)' };
-        return (
-          <div class={[bem(), 'h-full', attrs.class]}>
-            {showTitle && (
-              <TreeHeader
-                checkable={checkable}
-                checkAll={checkAll}
-                expandAll={expandAll}
-                title={title}
-                search={search}
-                toolbar={toolbar}
-                helpMessage={helpMessage}
-                onStrictlyChange={onStrictlyChange}
-                onSearch={handleSearch}
-                onClickSearch={($event) => emit('search', $event)}
-                searchText={searchState.searchText}
-              >
-                {extendSlots(slots)}
-              </TreeHeader>
-            )}
-            <Spin spinning={unref(props.loading)} tip="鍔犺浇涓�...">
-              <ScrollContainer style={scrollStyle} v-show={!unref(getNotFound)}>
-                <Tree {...unref(getBindValues)} showIcon={false} treeData={treeData.value} />
-              </ScrollContainer>
-              <Empty
-                v-show={unref(getNotFound)}
-                image={Empty.PRESENTED_IMAGE_SIMPLE}
-                class="!mt-4"
-              />
-            </Spin>
-          </div>
-        );
-      };
-    },
-  });
-</script>
diff --git a/src/components/Tree/src/TreeIcon.ts b/src/components/Tree/src/TreeIcon.ts
deleted file mode 100644
index 900d6bf..0000000
--- a/src/components/Tree/src/TreeIcon.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import type { VNode, FunctionalComponent } from 'vue';
-
-import { h } from 'vue';
-import { isString } from '@vue/shared';
-import { Icon } from '/@/components/Icon';
-
-export const TreeIcon: FunctionalComponent = ({ icon }: { icon: VNode | string }) => {
-  if (!icon) return null;
-  if (isString(icon)) {
-    return h(Icon, { icon, class: 'mr-1' });
-  }
-  return Icon;
-};
diff --git a/src/components/Tree/src/components/TreeHeader.vue b/src/components/Tree/src/components/TreeHeader.vue
deleted file mode 100644
index a1792d2..0000000
--- a/src/components/Tree/src/components/TreeHeader.vue
+++ /dev/null
@@ -1,171 +0,0 @@
-<template>
-  <div :class="bem()" class="flex px-2 py-1.5 items-center">
-    <slot name="headerTitle" v-if="slots.headerTitle"></slot>
-    <BasicTitle :helpMessage="helpMessage" v-if="!slots.headerTitle && title">
-      {{ title }}
-    </BasicTitle>
-    <div
-      class="flex items-center flex-1 cursor-pointer justify-self-stretch justify-end"
-      v-if="search || toolbar"
-    >
-      <div :class="getInputSearchCls" v-if="search">
-        <InputSearch
-          :placeholder="t('common.searchText')"
-          size="small"
-          allowClear
-          v-model:value="searchValue"
-          @search="$emit('clickSearch', $event)"
-        />
-      </div>
-      <Dropdown @click.prevent v-if="toolbar">
-        <Icon icon="ion:ellipsis-vertical" />
-        <template #overlay>
-          <Menu @click="handleMenuClick">
-            <template v-for="item in toolbarList" :key="item.value">
-              <MenuItem v-bind="{ key: item.value }">
-                {{ item.label }}
-              </MenuItem>
-              <MenuDivider v-if="item.divider" />
-            </template>
-          </Menu>
-        </template>
-      </Dropdown>
-    </div>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { computed, ref, watch, useSlots } from 'vue';
-  import { Dropdown, Menu, MenuItem, MenuDivider, InputSearch } from 'ant-design-vue';
-  import { Icon } from '/@/components/Icon';
-  import { BasicTitle } from '/@/components/Basic';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useDebounceFn } from '@vueuse/core';
-  import { createBEM } from '/@/utils/bem';
-  import { ToolbarEnum } from '../types/tree';
-
-  const searchValue = ref('');
-
-  const [bem] = createBEM('tree-header');
-
-  const props = defineProps({
-    helpMessage: {
-      type: [String, Array] as PropType<string | string[]>,
-      default: '',
-    },
-    title: {
-      type: String,
-      default: '',
-    },
-    toolbar: {
-      type: Boolean,
-      default: false,
-    },
-    checkable: {
-      type: Boolean,
-      default: false,
-    },
-    search: {
-      type: Boolean,
-      default: false,
-    },
-    searchText: {
-      type: String,
-      default: '',
-    },
-    checkAll: {
-      type: Function,
-      default: undefined,
-    },
-    expandAll: {
-      type: Function,
-      default: undefined,
-    },
-  } as const);
-  const emit = defineEmits(['strictly-change', 'search', 'clickSearch']);
-
-  const slots = useSlots();
-  const { t } = useI18n();
-
-  const getInputSearchCls = computed(() => {
-    const titleExists = slots.headerTitle || props.title;
-    return [
-      'mr-1',
-      'w-full',
-      {
-        ['ml-5']: titleExists,
-      },
-    ];
-  });
-
-  const toolbarList = computed(() => {
-    const { checkable } = props;
-    const defaultToolbarList = [
-      { label: t('component.tree.expandAll'), value: ToolbarEnum.EXPAND_ALL },
-      {
-        label: t('component.tree.unExpandAll'),
-        value: ToolbarEnum.UN_EXPAND_ALL,
-        divider: checkable,
-      },
-    ];
-
-    return checkable
-      ? [
-          { label: t('component.tree.selectAll'), value: ToolbarEnum.SELECT_ALL },
-          {
-            label: t('component.tree.unSelectAll'),
-            value: ToolbarEnum.UN_SELECT_ALL,
-            divider: checkable,
-          },
-          ...defaultToolbarList,
-          { label: t('component.tree.checkStrictly'), value: ToolbarEnum.CHECK_STRICTLY },
-          { label: t('component.tree.checkUnStrictly'), value: ToolbarEnum.CHECK_UN_STRICTLY },
-        ]
-      : defaultToolbarList;
-  });
-
-  function handleMenuClick(e: { key: ToolbarEnum }) {
-    const { key } = e;
-    switch (key) {
-      case ToolbarEnum.SELECT_ALL:
-        props.checkAll?.(true);
-        break;
-      case ToolbarEnum.UN_SELECT_ALL:
-        props.checkAll?.(false);
-        break;
-      case ToolbarEnum.EXPAND_ALL:
-        props.expandAll?.(true);
-        break;
-      case ToolbarEnum.UN_EXPAND_ALL:
-        props.expandAll?.(false);
-        break;
-      case ToolbarEnum.CHECK_STRICTLY:
-        emit('strictly-change', false);
-        break;
-      case ToolbarEnum.CHECK_UN_STRICTLY:
-        emit('strictly-change', true);
-        break;
-    }
-  }
-
-  function emitChange(value?: string): void {
-    emit('search', value);
-  }
-
-  const debounceEmitChange = useDebounceFn(emitChange, 200);
-
-  watch(
-    () => searchValue.value,
-    (v) => {
-      debounceEmitChange(v);
-    },
-  );
-
-  watch(
-    () => props.searchText,
-    (v) => {
-      if (v !== searchValue.value) {
-        searchValue.value = v;
-      }
-    },
-  );
-</script>
diff --git a/src/components/Tree/src/hooks/useTree.ts b/src/components/Tree/src/hooks/useTree.ts
deleted file mode 100644
index 17345a2..0000000
--- a/src/components/Tree/src/hooks/useTree.ts
+++ /dev/null
@@ -1,207 +0,0 @@
-import type { InsertNodeParams, KeyType, FieldNames, TreeItem } from '../types/tree';
-import type { Ref, ComputedRef } from 'vue';
-import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
-
-import { cloneDeep } from 'lodash-es';
-import { unref } from 'vue';
-import { forEach } from '/@/utils/helper/treeHelper';
-
-export function useTree(treeDataRef: Ref<TreeDataItem[]>, getFieldNames: ComputedRef<FieldNames>) {
-  function getAllKeys(list?: TreeDataItem[]) {
-    const keys: string[] = [];
-    const treeData = list || unref(treeDataRef);
-    const { key: keyField, children: childrenField } = unref(getFieldNames);
-    if (!childrenField || !keyField) return keys;
-
-    for (let index = 0; index < treeData.length; index++) {
-      const node = treeData[index];
-      keys.push(node[keyField]!);
-      const children = node[childrenField];
-      if (children && children.length) {
-        keys.push(...(getAllKeys(children) as string[]));
-      }
-    }
-    return keys as KeyType[];
-  }
-
-  // get keys that can be checked and selected
-  function getEnabledKeys(list?: TreeDataItem[]) {
-    const keys: string[] = [];
-    const treeData = list || unref(treeDataRef);
-    const { key: keyField, children: childrenField } = unref(getFieldNames);
-    if (!childrenField || !keyField) return keys;
-
-    for (let index = 0; index < treeData.length; index++) {
-      const node = treeData[index];
-      node.disabled !== true && node.selectable !== false && keys.push(node[keyField]!);
-      const children = node[childrenField];
-      if (children && children.length) {
-        keys.push(...(getEnabledKeys(children) as string[]));
-      }
-    }
-    return keys as KeyType[];
-  }
-
-  function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]) {
-    const keys: KeyType[] = [];
-    const treeData = list || unref(treeDataRef);
-    const { key: keyField, children: childrenField } = unref(getFieldNames);
-    if (!childrenField || !keyField) return keys;
-    for (let index = 0; index < treeData.length; index++) {
-      const node = treeData[index];
-      const children = node[childrenField];
-      if (nodeKey === node[keyField]) {
-        keys.push(node[keyField]!);
-        if (children && children.length) {
-          keys.push(...(getAllKeys(children) as string[]));
-        }
-      } else {
-        if (children && children.length) {
-          keys.push(...getChildrenKeys(nodeKey, children));
-        }
-      }
-    }
-    return keys as KeyType[];
-  }
-
-  // Update node
-  function updateNodeByKey(key: string, node: TreeDataItem, list?: TreeDataItem[]) {
-    if (!key) return;
-    const treeData = list || unref(treeDataRef);
-    const { key: keyField, children: childrenField } = unref(getFieldNames);
-
-    if (!childrenField || !keyField) return;
-
-    for (let index = 0; index < treeData.length; index++) {
-      const element: any = treeData[index];
-      const children = element[childrenField];
-
-      if (element[keyField] === key) {
-        treeData[index] = { ...treeData[index], ...node };
-        break;
-      } else if (children && children.length) {
-        updateNodeByKey(key, node, element[childrenField]);
-      }
-    }
-  }
-
-  // Expand the specified level
-  function filterByLevel(level = 1, list?: TreeDataItem[], currentLevel = 1) {
-    if (!level) {
-      return [];
-    }
-    const res: (string | number)[] = [];
-    const data = list || unref(treeDataRef) || [];
-    for (let index = 0; index < data.length; index++) {
-      const item = data[index];
-
-      const { key: keyField, children: childrenField } = unref(getFieldNames);
-      const key = keyField ? item[keyField] : '';
-      const children = childrenField ? item[childrenField] : [];
-      res.push(key);
-      if (children && children.length && currentLevel < level) {
-        currentLevel += 1;
-        res.push(...filterByLevel(level, children, currentLevel));
-      }
-    }
-    return res as string[] | number[];
-  }
-
-  /**
-   * 娣诲姞鑺傜偣
-   */
-  function insertNodeByKey({ parentKey = null, node, push = 'push' }: InsertNodeParams) {
-    const treeData: any = cloneDeep(unref(treeDataRef));
-    if (!parentKey) {
-      treeData[push](node);
-      treeDataRef.value = treeData;
-      return;
-    }
-    const { key: keyField, children: childrenField } = unref(getFieldNames);
-    if (!childrenField || !keyField) return;
-
-    forEach(treeData, (treeItem) => {
-      if (treeItem[keyField] === parentKey) {
-        treeItem[childrenField] = treeItem[childrenField] || [];
-        treeItem[childrenField][push](node);
-        return true;
-      }
-    });
-    treeDataRef.value = treeData;
-  }
-  /**
-   * 鎵归噺娣诲姞鑺傜偣
-   */
-  function insertNodesByKey({ parentKey = null, list, push = 'push' }: InsertNodeParams) {
-    const treeData: any = cloneDeep(unref(treeDataRef));
-    if (!list || list.length < 1) {
-      return;
-    }
-    if (!parentKey) {
-      for (let i = 0; i < list.length; i++) {
-        treeData[push](list[i]);
-      }
-    } else {
-      const { key: keyField, children: childrenField } = unref(getFieldNames);
-      if (!childrenField || !keyField) return;
-
-      forEach(treeData, (treeItem) => {
-        if (treeItem[keyField] === parentKey) {
-          treeItem[childrenField] = treeItem[childrenField] || [];
-          for (let i = 0; i < list.length; i++) {
-            treeItem[childrenField][push](list[i]);
-          }
-          treeDataRef.value = treeData;
-          return true;
-        }
-      });
-    }
-  }
-  // Delete node
-  function deleteNodeByKey(key: string, list?: TreeDataItem[]) {
-    if (!key) return;
-    const treeData = list || unref(treeDataRef);
-    const { key: keyField, children: childrenField } = unref(getFieldNames);
-    if (!childrenField || !keyField) return;
-
-    for (let index = 0; index < treeData.length; index++) {
-      const element: any = treeData[index];
-      const children = element[childrenField];
-
-      if (element[keyField] === key) {
-        treeData.splice(index, 1);
-        break;
-      } else if (children && children.length) {
-        deleteNodeByKey(key, element[childrenField]);
-      }
-    }
-  }
-
-  // Get selected node
-  function getSelectedNode(key: KeyType, list?: TreeItem[], selectedNode?: TreeItem | null) {
-    if (!key && key !== 0) return null;
-    const treeData = list || unref(treeDataRef);
-    treeData.forEach((item) => {
-      if (selectedNode?.key || selectedNode?.key === 0) return selectedNode;
-      if (item.key === key) {
-        selectedNode = item;
-        return;
-      }
-      if (item.children && item.children.length) {
-        selectedNode = getSelectedNode(key, item.children, selectedNode);
-      }
-    });
-    return selectedNode || null;
-  }
-  return {
-    deleteNodeByKey,
-    insertNodeByKey,
-    insertNodesByKey,
-    filterByLevel,
-    updateNodeByKey,
-    getAllKeys,
-    getChildrenKeys,
-    getEnabledKeys,
-    getSelectedNode,
-  };
-}
diff --git a/src/components/Tree/src/types/tree.ts b/src/components/Tree/src/types/tree.ts
deleted file mode 100644
index 691daae..0000000
--- a/src/components/Tree/src/types/tree.ts
+++ /dev/null
@@ -1,195 +0,0 @@
-import type { ExtractPropTypes } from 'vue';
-import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
-
-import { buildProps } from '/@/utils/props';
-
-export enum ToolbarEnum {
-  SELECT_ALL,
-  UN_SELECT_ALL,
-  EXPAND_ALL,
-  UN_EXPAND_ALL,
-  CHECK_STRICTLY,
-  CHECK_UN_STRICTLY,
-}
-
-export const treeEmits = [
-  'update:expandedKeys',
-  'update:selectedKeys',
-  'update:value',
-  'change',
-  'check',
-  'search',
-  'update:searchValue',
-];
-
-export interface TreeState {
-  expandedKeys: KeyType[];
-  selectedKeys: KeyType[];
-  checkedKeys: CheckKeys;
-  checkStrictly: boolean;
-}
-
-export interface FieldNames {
-  children?: string;
-  title?: string;
-  key?: string;
-}
-
-export type KeyType = string | number;
-
-export type CheckKeys =
-  | KeyType[]
-  | { checked: string[] | number[]; halfChecked: string[] | number[] };
-
-export const treeProps = buildProps({
-  value: {
-    type: [Object, Array] as PropType<KeyType[] | CheckKeys>,
-  },
-
-  renderIcon: {
-    type: Function as PropType<(params: Recordable) => string>,
-  },
-
-  helpMessage: {
-    type: [String, Array] as PropType<string | string[]>,
-    default: '',
-  },
-
-  title: {
-    type: String,
-    default: '',
-  },
-  toolbar: Boolean,
-  search: Boolean,
-  searchValue: {
-    type: String,
-    default: '',
-  },
-  checkStrictly: Boolean,
-  clickRowToExpand: {
-    type: Boolean,
-    default: false,
-  },
-  checkable: Boolean,
-  defaultExpandLevel: {
-    type: [String, Number] as PropType<string | number>,
-    default: '',
-  },
-  defaultExpandAll: Boolean,
-
-  fieldNames: {
-    type: Object as PropType<FieldNames>,
-  },
-
-  treeData: {
-    type: Array as PropType<TreeDataItem[]>,
-  },
-
-  actionList: {
-    type: Array as PropType<TreeActionItem[]>,
-    default: () => [],
-  },
-
-  expandedKeys: {
-    type: Array as PropType<KeyType[]>,
-    default: () => [],
-  },
-
-  selectedKeys: {
-    type: Array as PropType<KeyType[]>,
-    default: () => [],
-  },
-
-  checkedKeys: {
-    type: Array as PropType<CheckKeys>,
-    default: () => [],
-  },
-
-  beforeRightClick: {
-    type: Function as PropType<(...arg: any) => ContextMenuItem[] | ContextMenuOptions>,
-    default: undefined,
-  },
-
-  rightMenuList: {
-    type: Array as PropType<ContextMenuItem[]>,
-  },
-  // 鑷畾涔夋暟鎹繃婊ゅ垽鏂柟娉�(娉�: 涓嶆槸鏁翠釜杩囨护鏂规硶锛岃�屾槸鍐呯疆杩囨护鐨勫垽鏂柟娉曪紝鐢ㄤ簬澧炲己鍘熸湰浠呰兘閫氳繃title杩涜杩囨护鐨勬柟寮�)
-  filterFn: {
-    type: Function as PropType<
-      (searchValue: any, node: TreeItem, fieldNames: FieldNames) => boolean
-    >,
-    default: undefined,
-  },
-  // 楂樹寒鎼滅储鍊硷紝浠呴珮浜叿浣撳尮閰嶅�硷紙閫氳繃title锛夊�间负true鏃朵娇鐢ㄩ粯璁よ壊鍊硷紝鍊间负#xxx鏃朵娇鐢ㄦ鍊兼浛浠d笖楂樹寒寮�鍚�
-  highlight: {
-    type: [Boolean, String] as PropType<Boolean | String>,
-    default: false,
-  },
-  // 鎼滅储瀹屾垚鏃惰嚜鍔ㄥ睍寮�缁撴灉
-  expandOnSearch: Boolean,
-  // 鎼滅储瀹屾垚鑷姩閫変腑鎵�鏈夌粨鏋�,褰撲笖浠呭綋 checkable===true 鏃剁敓鏁�
-  checkOnSearch: Boolean,
-  // 鎼滅储瀹屾垚鑷姩select鎵�鏈夌粨鏋�
-  selectedOnSearch: Boolean,
-  loading: {
-    type: Boolean,
-    default: false,
-  },
-});
-
-export type TreeProps = ExtractPropTypes<typeof treeProps>;
-
-export interface ContextMenuItem {
-  label: string;
-  icon?: string;
-  hidden?: boolean;
-  disabled?: boolean;
-  handler?: Fn;
-  divider?: boolean;
-  children?: ContextMenuItem[];
-}
-
-export interface ContextMenuOptions {
-  icon?: string;
-  styles?: any;
-  items?: ContextMenuItem[];
-}
-
-export interface TreeItem extends TreeDataItem {
-  icon?: any;
-}
-
-export interface TreeActionItem {
-  render: (record: Recordable) => any;
-  show?: boolean | ((record: Recordable) => boolean);
-}
-
-export interface InsertNodeParams {
-  parentKey: string | null;
-  node: TreeDataItem;
-  list?: TreeDataItem[];
-  push?: 'push' | 'unshift';
-}
-
-export interface TreeActionType {
-  checkAll: (checkAll: boolean) => void;
-  expandAll: (expandAll: boolean) => void;
-  setExpandedKeys: (keys: KeyType[]) => void;
-  getExpandedKeys: () => KeyType[];
-  setSelectedKeys: (keys: KeyType[]) => void;
-  getSelectedKeys: () => KeyType[];
-  setCheckedKeys: (keys: CheckKeys) => void;
-  getCheckedKeys: () => CheckKeys;
-  filterByLevel: (level: number) => void;
-  insertNodeByKey: (opt: InsertNodeParams) => void;
-  insertNodesByKey: (opt: InsertNodeParams) => void;
-  deleteNodeByKey: (key: string) => void;
-  updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void;
-  setSearchValue: (value: string) => void;
-  getSearchValue: () => string;
-  getSelectedNode: (
-    key: KeyType,
-    treeList?: TreeItem[],
-    selectNode?: TreeItem | null,
-  ) => TreeItem | null;
-}
diff --git a/src/components/Tree/style/index.less b/src/components/Tree/style/index.less
deleted file mode 100644
index 472d4ca..0000000
--- a/src/components/Tree/style/index.less
+++ /dev/null
@@ -1,52 +0,0 @@
-@tree-prefix-cls: ~'@{namespace}-tree';
-
-.@{tree-prefix-cls} {
-  background-color: @component-background;
-
-  .ant-tree-node-content-wrapper {
-    position: relative;
-
-    .ant-tree-title {
-      position: absolute;
-      left: 0;
-      width: 100%;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      white-space: nowrap;
-    }
-  }
-
-  &__title {
-    position: relative;
-    display: flex;
-    align-items: center;
-    width: 100%;
-    padding-right: 10px;
-
-    &:hover {
-      .@{tree-prefix-cls}__action {
-        visibility: visible;
-      }
-    }
-  }
-
-  &__content {
-    overflow: hidden;
-  }
-
-  &__actions {
-    position: absolute;
-    //top: 2px;
-    right: 3px;
-    display: flex;
-  }
-
-  &__action {
-    margin-left: 4px;
-    visibility: hidden;
-  }
-
-  &-header {
-    border-bottom: 1px solid @border-color-base;
-  }
-}
diff --git a/src/components/Tree/style/index.ts b/src/components/Tree/style/index.ts
deleted file mode 100644
index d74e52e..0000000
--- a/src/components/Tree/style/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-import './index.less';
diff --git a/src/components/Tree_backup/index.ts b/src/components/Tree_backup/index.ts
deleted file mode 100644
index f47820d..0000000
--- a/src/components/Tree_backup/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import BasicTree from './src/Tree.vue';
-
-export { BasicTree };
-export type { ContextMenuItem } from '/@/hooks/web/useContextMenu';
-export * from './src/typing';
diff --git a/src/components/Tree_backup/src/Tree.vue b/src/components/Tree_backup/src/Tree.vue
deleted file mode 100644
index e1eb8f3..0000000
--- a/src/components/Tree_backup/src/Tree.vue
+++ /dev/null
@@ -1,449 +0,0 @@
-<script lang="tsx">
-  import type { ReplaceFields, Keys, CheckKeys, TreeActionType, TreeItem } from './typing';
-
-  import { defineComponent, reactive, computed, unref, ref, watchEffect, toRaw, watch, CSSProperties, onMounted } from 'vue';
-  import { Tree, Empty } from 'ant-design-vue';
-  import { TreeIcon } from './TreeIcon';
-  import TreeHeader from './TreeHeader.vue';
-  import { ScrollContainer } from '/@/components/Container';
-
-  import { omit, get, difference } from 'lodash-es';
-  import { isArray, isBoolean, isFunction } from '/@/utils/is';
-  import { extendSlots, getSlot } from '/@/utils/helper/tsxHelper';
-  import { filter } from '/@/utils/helper/treeHelper';
-
-  import { useTree } from './useTree';
-  import { useContextMenu } from '/@/hooks/web/useContextMenu';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  import { basicProps } from './props';
-  import { CreateContextOptions } from '/@/components/ContextMenu';
-
-  import { CheckEvent } from './typing';
-
-  interface State {
-    expandedKeys: Keys;
-    selectedKeys: Keys;
-    checkedKeys: CheckKeys;
-    checkStrictly: boolean;
-  }
-
-  export default defineComponent({
-    name: 'BasicTree',
-    inheritAttrs: false,
-    props: basicProps,
-    emits: ['update:expandedKeys', 'update:selectedKeys', 'update:value', 'change', 'check', 'search', 'update:searchValue'],
-    setup(props, { attrs, slots, emit, expose }) {
-      const state = reactive<State>({
-        checkStrictly: props.checkStrictly,
-        expandedKeys: props.expandedKeys || [],
-        selectedKeys: props.selectedKeys || [],
-        checkedKeys: props.checkedKeys || [],
-      });
-
-      const searchState = reactive({
-        startSearch: false,
-        searchData: [] as TreeItem[],
-      });
-
-      const treeDataRef = ref<TreeItem[]>([]);
-
-      const [createContextMenu] = useContextMenu();
-      const { prefixCls } = useDesign('basic-tree');
-
-      const getReplaceFields = computed((): Required<ReplaceFields> => {
-        const { replaceFields } = props;
-        return {
-          children: 'children',
-          title: 'title',
-          key: 'key',
-          ...replaceFields,
-        };
-      });
-
-      const getBindValues = computed(() => {
-        let propsData = {
-          blockNode: true,
-          ...attrs,
-          ...props,
-          expandedKeys: state.expandedKeys,
-          selectedKeys: state.selectedKeys,
-          checkedKeys: state.checkedKeys,
-          checkStrictly: state.checkStrictly,
-          replaceFields: unref(getReplaceFields),
-          'onUpdate:expandedKeys': (v: Keys) => {
-            state.expandedKeys = v;
-            emit('update:expandedKeys', v);
-          },
-          'onUpdate:selectedKeys': (v: Keys) => {
-            state.selectedKeys = v;
-            emit('update:selectedKeys', v);
-          },
-          onCheck: (v: CheckKeys, e: CheckEvent) => {
-            let currentValue = toRaw(state.checkedKeys) as Keys;
-            if (isArray(currentValue) && searchState.startSearch) {
-              const { key } = unref(getReplaceFields);
-              currentValue = difference(currentValue, getChildrenKeys(e.node.$attrs.node[key]));
-              if (e.checked) {
-                currentValue.push(e.node.$attrs.node[key]);
-              }
-              state.checkedKeys = currentValue;
-            } else {
-              state.checkedKeys = v;
-            }
-
-            const rawVal = toRaw(state.checkedKeys);
-            emit('update:value', rawVal);
-            emit('check', rawVal, e);
-          },
-          onRightClick: handleRightClick,
-        };
-        return omit(propsData, 'treeData', 'class');
-      });
-
-      const getTreeData = computed((): TreeItem[] => (searchState.startSearch ? searchState.searchData : unref(treeDataRef)));
-
-      const getNotFound = computed((): boolean => {
-        return !getTreeData.value || getTreeData.value.length === 0;
-      });
-
-      const { deleteNodeByKey, insertNodeByKey, insertNodesByKey, filterByLevel, updateNodeByKey, getAllKeys, getChildrenKeys, getEnabledKeys } =
-        useTree(treeDataRef, getReplaceFields);
-
-      function getIcon(params: Recordable, icon?: string) {
-        if (!icon) {
-          if (props.renderIcon && isFunction(props.renderIcon)) {
-            return props.renderIcon(params);
-          }
-        }
-        return icon;
-      }
-
-      async function handleRightClick({ event, node }: Recordable) {
-        const { rightMenuList: menuList = [], beforeRightClick } = props;
-        let contextMenuOptions: CreateContextOptions = { event, items: [] };
-
-        if (beforeRightClick && isFunction(beforeRightClick)) {
-          let result = await beforeRightClick(node, event);
-          if (Array.isArray(result)) {
-            contextMenuOptions.items = result;
-          } else {
-            Object.assign(contextMenuOptions, result);
-          }
-        } else {
-          contextMenuOptions.items = menuList;
-        }
-        if (!contextMenuOptions.items?.length) return;
-        createContextMenu(contextMenuOptions);
-      }
-
-      function setExpandedKeys(keys: Keys) {
-        state.expandedKeys = keys;
-      }
-
-      function getExpandedKeys() {
-        return state.expandedKeys;
-      }
-
-      function setSelectedKeys(keys: Keys) {
-        state.selectedKeys = keys;
-      }
-
-      function getSelectedKeys() {
-        return state.selectedKeys;
-      }
-
-      function setCheckedKeys(keys: CheckKeys) {
-        state.checkedKeys = keys;
-      }
-
-      function getCheckedKeys() {
-        return state.checkedKeys;
-      }
-
-      function checkAll(checkAll: boolean) {
-        state.checkedKeys = checkAll ? getEnabledKeys() : ([] as Keys);
-      }
-
-      function expandAll(expandAll: boolean) {
-        state.expandedKeys = expandAll ? getAllKeys() : ([] as Keys);
-      }
-
-      function onStrictlyChange(strictly: boolean) {
-        state.checkStrictly = strictly;
-      }
-
-      const searchText = ref('');
-      watchEffect(() => {
-        if (props.searchValue !== searchText.value) searchText.value = props.searchValue;
-      });
-
-      function handleSearch(searchValue: string) {
-        if (searchValue !== searchText.value) searchText.value = searchValue;
-        emit('update:searchValue', searchValue);
-        if (!searchValue) {
-          searchState.startSearch = false;
-          return;
-        }
-        const { filterFn, checkable, expandOnSearch, checkOnSearch } = unref(props);
-        searchState.startSearch = true;
-        const { title: titleField, key: keyField } = unref(getReplaceFields);
-
-        const searchKeys: string[] = [];
-        searchState.searchData = filter(
-          unref(treeDataRef),
-          (node) => {
-            const result = filterFn ? filterFn(searchValue, node, unref(getReplaceFields)) : node[titleField]?.includes(searchValue) ?? false;
-            if (result) {
-              searchKeys.push(node[keyField]);
-            }
-            return result;
-          },
-          unref(getReplaceFields)
-        );
-
-        if (expandOnSearch && searchKeys.length > 0) {
-          setExpandedKeys(searchKeys);
-        }
-
-        if (checkOnSearch && checkable && searchKeys.length > 0) {
-          setCheckedKeys(searchKeys);
-        }
-      }
-
-      function handleClickNode(key: string, children: TreeItem[]) {
-        if (!props.clickRowToExpand || !children || children.length === 0) return;
-        if (!state.expandedKeys.includes(key)) {
-          setExpandedKeys([...state.expandedKeys, key]);
-        } else {
-          const keys = [...state.expandedKeys];
-          const index = keys.findIndex((item) => item === key);
-          if (index !== -1) {
-            keys.splice(index, 1);
-          }
-          setExpandedKeys(keys);
-        }
-      }
-
-      watchEffect(() => {
-        treeDataRef.value = props.treeData as TreeItem[];
-        handleSearch(unref(searchText));
-      });
-
-      onMounted(() => {
-        const level = parseInt(props.defaultExpandLevel);
-        if (level > 0) {
-          state.expandedKeys = filterByLevel(level);
-        } else if (props.defaultExpandAll) {
-          expandAll(true);
-        }
-      });
-
-      watchEffect(() => {
-        state.expandedKeys = props.expandedKeys;
-      });
-
-      watchEffect(() => {
-        state.selectedKeys = props.selectedKeys;
-      });
-
-      watchEffect(() => {
-        state.checkedKeys = props.checkedKeys;
-      });
-
-      watch(
-        () => props.value,
-        () => {
-          state.checkedKeys = toRaw(props.value || []);
-        }
-      );
-
-      watch(
-        () => state.checkedKeys,
-        () => {
-          const v = toRaw(state.checkedKeys);
-          emit('update:value', v);
-          emit('change', v);
-        }
-      );
-
-      // watchEffect(() => {
-      //   console.log('======================');
-      //   console.log(props.value);
-      //   console.log('======================');
-      //   if (props.value) {
-      //     state.checkedKeys = props.value;
-      //   }
-      // });
-
-      watchEffect(() => {
-        state.checkStrictly = props.checkStrictly;
-      });
-
-      const instance: TreeActionType = {
-        setExpandedKeys,
-        getExpandedKeys,
-        setSelectedKeys,
-        getSelectedKeys,
-        setCheckedKeys,
-        getCheckedKeys,
-        insertNodeByKey,
-        insertNodesByKey,
-        deleteNodeByKey,
-        updateNodeByKey,
-        checkAll,
-        expandAll,
-        filterByLevel: (level: number) => {
-          state.expandedKeys = filterByLevel(level);
-        },
-        setSearchValue: (value: string) => {
-          handleSearch(value);
-        },
-        getSearchValue: () => {
-          return searchText.value;
-        },
-      };
-
-      expose(instance);
-
-      function renderAction(node: TreeItem) {
-        const { actionList } = props;
-        if (!actionList || actionList.length === 0) return;
-        return actionList.map((item, index) => {
-          let nodeShow = true;
-          if (isFunction(item.show)) {
-            nodeShow = item.show?.(node);
-          } else if (isBoolean(item.show)) {
-            nodeShow = item.show;
-          }
-
-          if (!nodeShow) return null;
-
-          return (
-            <span key={index} class={`${prefixCls}__action`}>
-              {item.render(node)}
-            </span>
-          );
-        });
-      }
-
-      function renderTreeNode({ data, level }: { data: TreeItem[] | undefined; level: number }) {
-        if (!data) {
-          return null;
-        }
-        return data.map((item) => {
-          const { title: titleField, key: keyField, children: childrenField } = unref(getReplaceFields);
-
-          const propsData = omit(item, 'title');
-          const icon = getIcon({ ...item, level }, item.icon);
-          const children = get(item, childrenField) || [];
-          return (
-            <Tree.TreeNode {...propsData} node={toRaw(item)} key={get(item, keyField)}>
-              {{
-                title: () => (
-                  <span class={`${prefixCls}-title pl-2`} onclick={handleClickNode.bind(null, item[keyField], item[childrenField])}>
-                    {slots?.title ? (
-                      getSlot(slots, 'title', item)
-                    ) : (
-                      <>
-                        {icon && <TreeIcon icon={icon} />}
-                        <span class={unref(getBindValues)?.blockNode ? `${prefixCls}__content` : ''}>{get(item, titleField)}</span>
-                        <span class={`${prefixCls}__actions`}>{renderAction({ ...item, level })}</span>
-                      </>
-                    )}
-                  </span>
-                ),
-                default: () => renderTreeNode({ data: children, level: level + 1 }),
-              }}
-            </Tree.TreeNode>
-          );
-        });
-      }
-
-      return () => {
-        const { title, helpMessage, toolbar, search, checkable } = props;
-        const showTitle = title || toolbar || search || slots.headerTitle;
-        const scrollStyle: CSSProperties = { height: 'calc(100% - 38px)' };
-        return (
-          <div class={[prefixCls, 'h-full', attrs.class]}>
-            {showTitle && (
-              <TreeHeader
-                checkable={checkable}
-                checkAll={checkAll}
-                expandAll={expandAll}
-                title={title}
-                search={search}
-                toolbar={toolbar}
-                helpMessage={helpMessage}
-                onStrictlyChange={onStrictlyChange}
-                onSearch={handleSearch}
-                onClickSearch={($event) => emit('search', $event)}
-                searchText={unref(searchText)}
-              >
-                {extendSlots(slots)}
-              </TreeHeader>
-            )}
-            <ScrollContainer style={scrollStyle} v-show={!unref(getNotFound)}>
-              <Tree {...unref(getBindValues)} showIcon={false}>
-                {{
-                  // switcherIcon: () => <DownOutlined />,
-                  default: () => renderTreeNode({ data: unref(getTreeData), level: 1 }),
-                  ...extendSlots(slots),
-                }}
-              </Tree>
-            </ScrollContainer>
-
-            <Empty v-show={unref(getNotFound)} image={Empty.PRESENTED_IMAGE_SIMPLE} class="!mt-4" />
-          </div>
-        );
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-basic-tree';
-
-  .@{prefix-cls} {
-    background-color: @component-background;
-
-    .ant-tree-node-content-wrapper {
-      position: relative;
-
-      .ant-tree-title {
-        position: absolute;
-        left: 0;
-        width: 100%;
-      }
-    }
-
-    &-title {
-      position: relative;
-      display: flex;
-      align-items: center;
-      width: 100%;
-      padding-right: 10px;
-
-      &:hover {
-        .@{prefix-cls}__action {
-          visibility: visible;
-        }
-      }
-    }
-
-    &__content {
-      overflow: hidden;
-    }
-
-    &__actions {
-      position: absolute;
-      top: 2px;
-      right: 3px;
-      display: flex;
-    }
-
-    &__action {
-      margin-left: 4px;
-      visibility: hidden;
-    }
-  }
-</style>
diff --git a/src/components/Tree_backup/src/TreeHeader.vue b/src/components/Tree_backup/src/TreeHeader.vue
deleted file mode 100644
index fbe36cf..0000000
--- a/src/components/Tree_backup/src/TreeHeader.vue
+++ /dev/null
@@ -1,181 +0,0 @@
-<template>
-  <div class="flex px-2 py-1.5 items-center basic-tree-header">
-    <slot name="headerTitle" v-if="$slots.headerTitle"></slot>
-    <BasicTitle :helpMessage="helpMessage" v-if="!$slots.headerTitle && title">
-      {{ title }}
-    </BasicTitle>
-
-    <div class="flex flex-1 justify-end items-center cursor-pointer" v-if="search || toolbar">
-      <div :class="getInputSearchCls" v-if="search">
-        <InputSearch
-          :placeholder="t('common.searchText')"
-          size="small"
-          allowClear
-          v-model:value="searchValue"
-          @search="$emit('clickSearch', $event)"
-        />
-      </div>
-      <Dropdown @click.prevent v-if="toolbar">
-        <Icon icon="ion:ellipsis-vertical" />
-        <template #overlay>
-          <Menu @click="handleMenuClick">
-            <template v-for="item in toolbarList" :key="item.value">
-              <MenuItem v-bind="{ key: item.value }">
-                {{ item.label }}
-              </MenuItem>
-              <MenuDivider v-if="item.divider" />
-            </template>
-          </Menu>
-        </template>
-      </Dropdown>
-    </div>
-  </div>
-</template>
-<script lang="ts">
-  import { PropType } from 'vue';
-  import { defineComponent, computed, ref, watch } from 'vue';
-
-  import { Dropdown, Menu, Input } from 'ant-design-vue';
-  import { Icon } from '/@/components/Icon';
-  import { BasicTitle } from '/@/components/Basic';
-
-  import { propTypes } from '/@/utils/propTypes';
-
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useDebounceFn } from '@vueuse/core';
-
-  enum ToolbarEnum {
-    SELECT_ALL,
-    UN_SELECT_ALL,
-    EXPAND_ALL,
-    UN_EXPAND_ALL,
-    CHECK_STRICTLY,
-    CHECK_UN_STRICTLY,
-  }
-
-  interface MenuInfo {
-    key: ToolbarEnum;
-  }
-
-  export default defineComponent({
-    name: 'BasicTreeHeader',
-    components: {
-      BasicTitle,
-      Icon,
-      Dropdown,
-      Menu,
-      MenuItem: Menu.Item,
-      MenuDivider: Menu.Divider,
-      InputSearch: Input.Search,
-    },
-    props: {
-      helpMessage: {
-        type: [String, Array] as PropType<string | string[]>,
-        default: '',
-      },
-      title: propTypes.string,
-      toolbar: propTypes.bool,
-      checkable: propTypes.bool,
-      search: propTypes.bool,
-      checkAll: propTypes.func,
-      expandAll: propTypes.func,
-      searchText: propTypes.string,
-    },
-    emits: ['strictly-change', 'search', 'clickSearch'],
-    setup(props, { emit, slots }) {
-      const { t } = useI18n();
-      const searchValue = ref('');
-      const getInputSearchCls = computed(() => {
-        const titleExists = slots.headerTitle || props.title;
-        return [
-          'mr-1',
-          'w-full',
-          // titleExists ? 'w-2/3' : 'w-full',
-          {
-            ['ml-5']: titleExists,
-          },
-        ];
-      });
-      const toolbarList = computed(() => {
-        const { checkable } = props;
-        const defaultToolbarList = [
-          { label: t('component.tree.expandAll'), value: ToolbarEnum.EXPAND_ALL },
-          {
-            label: t('component.tree.unExpandAll'),
-            value: ToolbarEnum.UN_EXPAND_ALL,
-            divider: checkable,
-          },
-        ];
-
-        return checkable
-          ? [
-              { label: t('component.tree.selectAll'), value: ToolbarEnum.SELECT_ALL },
-              {
-                label: t('component.tree.unSelectAll'),
-                value: ToolbarEnum.UN_SELECT_ALL,
-                divider: checkable,
-              },
-              ...defaultToolbarList,
-              { label: t('component.tree.checkStrictly'), value: ToolbarEnum.CHECK_STRICTLY },
-              { label: t('component.tree.checkUnStrictly'), value: ToolbarEnum.CHECK_UN_STRICTLY },
-            ]
-          : defaultToolbarList;
-      });
-
-      function handleMenuClick(e: MenuInfo) {
-        const { key } = e;
-        switch (key) {
-          case ToolbarEnum.SELECT_ALL:
-            props.checkAll?.(true);
-            break;
-          case ToolbarEnum.UN_SELECT_ALL:
-            props.checkAll?.(false);
-            break;
-          case ToolbarEnum.EXPAND_ALL:
-            props.expandAll?.(true);
-            break;
-          case ToolbarEnum.UN_EXPAND_ALL:
-            props.expandAll?.(false);
-            break;
-          case ToolbarEnum.CHECK_STRICTLY:
-            emit('strictly-change', false);
-            break;
-          case ToolbarEnum.CHECK_UN_STRICTLY:
-            emit('strictly-change', true);
-            break;
-        }
-      }
-
-      function emitChange(value?: string): void {
-        emit('search', value);
-      }
-
-      const debounceEmitChange = useDebounceFn(emitChange, 200);
-
-      watch(
-        () => searchValue.value,
-        (v) => {
-          debounceEmitChange(v);
-        }
-      );
-      watch(
-        () => props.searchText,
-        (v) => {
-          if (v !== searchValue.value) {
-            searchValue.value = v;
-          }
-        }
-      );
-      // function handleSearch(e: ChangeEvent): void {
-      //   debounceEmitChange(e.target.value);
-      // }
-
-      return { t, toolbarList, handleMenuClick, searchValue, getInputSearchCls };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .basic-tree-header {
-    border-bottom: 1px solid @border-color-base;
-  }
-</style>
diff --git a/src/components/Tree_backup/src/TreeIcon.ts b/src/components/Tree_backup/src/TreeIcon.ts
deleted file mode 100644
index 69e7cd0..0000000
--- a/src/components/Tree_backup/src/TreeIcon.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import type { VNode, FunctionalComponent } from 'vue';
-
-import { h } from 'vue';
-import { isString } from '/@/utils/is';
-import { Icon } from '/@/components/Icon';
-
-export interface ComponentProps {
-  icon: VNode | string;
-}
-
-export const TreeIcon: FunctionalComponent = ({ icon }: ComponentProps) => {
-  if (!icon) return null;
-  if (isString(icon)) {
-    return h(Icon, { icon, class: 'mr-1' });
-  }
-  return Icon;
-};
diff --git a/src/components/Tree_backup/src/props.ts b/src/components/Tree_backup/src/props.ts
deleted file mode 100644
index e6f6d73..0000000
--- a/src/components/Tree_backup/src/props.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-import type { PropType } from 'vue';
-import type { ReplaceFields, ActionItem, Keys, CheckKeys, ContextMenuOptions, TreeItem } from './typing';
-import type { ContextMenuItem } from '/@/hooks/web/useContextMenu';
-import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
-import { propTypes } from '/@/utils/propTypes';
-
-export const basicProps = {
-  value: {
-    type: [Object, Array] as PropType<Keys | CheckKeys>,
-  },
-  renderIcon: {
-    type: Function as PropType<(params: Recordable) => string>,
-  },
-
-  helpMessage: {
-    type: [String, Array] as PropType<string | string[]>,
-    default: '',
-  },
-
-  title: propTypes.string,
-  toolbar: propTypes.bool,
-  search: propTypes.bool,
-  searchValue: propTypes.string,
-  checkStrictly: propTypes.bool,
-  clickRowToExpand: propTypes.bool.def(true),
-  checkable: propTypes.bool.def(false),
-  defaultExpandLevel: {
-    type: [String, Number] as PropType<string | number>,
-    default: '',
-  },
-  // 楂樹寒鎼滅储鍊硷紝浠呴珮浜叿浣撳尮閰嶅�硷紙閫氳繃title锛夊�间负true鏃朵娇鐢ㄩ粯璁よ壊鍊硷紝鍊间负#xxx鏃朵娇鐢ㄦ鍊兼浛浠d笖楂樹寒寮�鍚�
-  highlight: {
-    type: [Boolean, String] as PropType<Boolean | String>,
-    default: false,
-  },
-  defaultExpandAll: propTypes.bool.def(false),
-
-  replaceFields: {
-    type: Object as PropType<ReplaceFields>,
-  },
-
-  treeData: {
-    type: Array as PropType<TreeDataItem[]>,
-  },
-
-  actionList: {
-    type: Array as PropType<ActionItem[]>,
-    default: () => [],
-  },
-
-  expandedKeys: {
-    type: Array as PropType<Keys>,
-    default: () => [],
-  },
-
-  selectedKeys: {
-    type: Array as PropType<Keys>,
-    default: () => [],
-  },
-
-  checkedKeys: {
-    type: Array as PropType<CheckKeys>,
-    default: () => [],
-  },
-
-  beforeRightClick: {
-    type: Function as PropType<(...arg: any) => ContextMenuItem[] | ContextMenuOptions>,
-    default: null,
-  },
-
-  rightMenuList: {
-    type: Array as PropType<ContextMenuItem[]>,
-  },
-  // 鑷畾涔夋暟鎹繃婊ゅ垽鏂柟娉�(娉�: 涓嶆槸鏁翠釜杩囨护鏂规硶锛岃�屾槸鍐呯疆杩囨护鐨勫垽鏂柟娉曪紝鐢ㄤ簬澧炲己鍘熸湰浠呰兘閫氳繃title杩涜杩囨护鐨勬柟寮�)
-  filterFn: {
-    type: Function as PropType<(searchValue: any, node: TreeItem, replaceFields: ReplaceFields) => boolean>,
-    default: null,
-  },
-  // 鎼滅储瀹屾垚鏃惰嚜鍔ㄥ睍寮�缁撴灉
-  expandOnSearch: propTypes.bool.def(false),
-  // 鎼滅储瀹屾垚鑷姩閫変腑鎵�鏈夌粨鏋�,褰撲笖浠呭綋 checkable===true 鏃剁敓鏁�
-  checkOnSearch: propTypes.bool.def(false),
-  // 鎼滅储瀹屾垚鑷姩select鎵�鏈夌粨鏋�
-  selectedOnSearch: propTypes.bool.def(false),
-};
-
-export const treeNodeProps = {
-  actionList: {
-    type: Array as PropType<ActionItem[]>,
-    default: () => [],
-  },
-  replaceFields: {
-    type: Object as PropType<ReplaceFields>,
-  },
-  treeData: {
-    type: Array as PropType<TreeDataItem[]>,
-    default: () => [],
-  },
-};
diff --git a/src/components/Tree_backup/src/typing.ts b/src/components/Tree_backup/src/typing.ts
deleted file mode 100644
index c606d4d..0000000
--- a/src/components/Tree_backup/src/typing.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import type { TreeDataItem, CheckEvent as CheckEventOrigin } from 'ant-design-vue/es/tree/Tree';
-import { ContextMenuItem } from '/@/hooks/web/useContextMenu';
-
-export interface ActionItem {
-  render: (record: Recordable) => any;
-  show?: boolean | ((record: Recordable) => boolean);
-}
-
-export interface TreeItem extends TreeDataItem {
-  icon?: any;
-}
-
-export interface ReplaceFields {
-  children?: string;
-  title?: string;
-  key?: string;
-}
-
-export type Keys = (string | number)[];
-export type CheckKeys = (string | number)[] | { checked: (string | number)[]; halfChecked: (string | number)[] };
-
-export interface TreeActionType {
-  checkAll: (checkAll: boolean) => void;
-  expandAll: (expandAll: boolean) => void;
-  setExpandedKeys: (keys: Keys) => void;
-  getExpandedKeys: () => Keys;
-  setSelectedKeys: (keys: Keys) => void;
-  getSelectedKeys: () => Keys;
-  setCheckedKeys: (keys: CheckKeys) => void;
-  getCheckedKeys: () => CheckKeys;
-  filterByLevel: (level: number) => void;
-  insertNodeByKey: (opt: InsertNodeParams) => void;
-  insertNodesByKey: (opt: InsertNodeParams) => void;
-  deleteNodeByKey: (key: string) => void;
-  updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void;
-  setSearchValue: (value: string) => void;
-  getSearchValue: () => string;
-}
-
-export interface InsertNodeParams {
-  parentKey: string | null;
-  node: TreeDataItem;
-  list?: TreeDataItem[];
-  push?: 'push' | 'unshift';
-}
-
-export interface ContextMenuOptions {
-  icon?: string;
-  styles?: any;
-  items?: ContextMenuItem[];
-}
-
-export type CheckEvent = CheckEventOrigin;
diff --git a/src/components/Tree_backup/src/useTree.ts b/src/components/Tree_backup/src/useTree.ts
deleted file mode 100644
index 1ba6f69..0000000
--- a/src/components/Tree_backup/src/useTree.ts
+++ /dev/null
@@ -1,192 +0,0 @@
-import type { InsertNodeParams, Keys, ReplaceFields } from './typing';
-import type { Ref, ComputedRef } from 'vue';
-import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
-
-import { cloneDeep } from 'lodash-es';
-import { unref } from 'vue';
-import { forEach } from '/@/utils/helper/treeHelper';
-
-export function useTree(treeDataRef: Ref<TreeDataItem[]>, getReplaceFields: ComputedRef<ReplaceFields>) {
-  function getAllKeys(list?: TreeDataItem[]) {
-    const keys: string[] = [];
-    const treeData = list || unref(treeDataRef);
-    const { key: keyField, children: childrenField } = unref(getReplaceFields);
-    if (!childrenField || !keyField) return keys;
-
-    for (let index = 0; index < treeData.length; index++) {
-      const node = treeData[index];
-      keys.push(node[keyField]!);
-      const children = node[childrenField];
-      if (children && children.length) {
-        keys.push(...(getAllKeys(children) as string[]));
-      }
-    }
-    return keys as Keys;
-  }
-
-  // get keys that can be checked and selected
-  function getEnabledKeys(list?: TreeDataItem[]) {
-    const keys: string[] = [];
-    const treeData = list || unref(treeDataRef);
-    const { key: keyField, children: childrenField } = unref(getReplaceFields);
-    if (!childrenField || !keyField) return keys;
-
-    for (let index = 0; index < treeData.length; index++) {
-      const node = treeData[index];
-      node.disabled !== true && node.selectable !== false && keys.push(node[keyField]!);
-      const children = node[childrenField];
-      if (children && children.length) {
-        keys.push(...(getEnabledKeys(children) as string[]));
-      }
-    }
-    return keys as Keys;
-  }
-
-  function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]): Keys {
-    const keys: Keys = [];
-    const treeData = list || unref(treeDataRef);
-    const { key: keyField, children: childrenField } = unref(getReplaceFields);
-    if (!childrenField || !keyField) return keys;
-    for (let index = 0; index < treeData.length; index++) {
-      const node = treeData[index];
-      const children = node[childrenField];
-      if (nodeKey === node[keyField]) {
-        keys.push(node[keyField]!);
-        if (children && children.length) {
-          keys.push(...(getAllKeys(children) as string[]));
-        }
-      } else {
-        if (children && children.length) {
-          keys.push(...getChildrenKeys(nodeKey, children));
-        }
-      }
-    }
-    return keys as Keys;
-  }
-
-  // Update node
-  function updateNodeByKey(key: string, node: TreeDataItem, list?: TreeDataItem[]) {
-    if (!key) return;
-    const treeData = list || unref(treeDataRef);
-    const { key: keyField, children: childrenField } = unref(getReplaceFields);
-
-    if (!childrenField || !keyField) return;
-
-    for (let index = 0; index < treeData.length; index++) {
-      const element: any = treeData[index];
-      const children = element[childrenField];
-
-      if (element[keyField] === key) {
-        treeData[index] = { ...treeData[index], ...node };
-        break;
-      } else if (children && children.length) {
-        updateNodeByKey(key, node, element[childrenField]);
-      }
-    }
-  }
-
-  // Expand the specified level
-  function filterByLevel(level = 1, list?: TreeDataItem[], currentLevel = 1) {
-    if (!level) {
-      return [];
-    }
-    const res: (string | number)[] = [];
-    const data = list || unref(treeDataRef) || [];
-    for (let index = 0; index < data.length; index++) {
-      const item = data[index];
-
-      const { key: keyField, children: childrenField } = unref(getReplaceFields);
-      const key = keyField ? item[keyField] : '';
-      const children = childrenField ? item[childrenField] : [];
-      res.push(key);
-      if (children && children.length && currentLevel < level) {
-        currentLevel += 1;
-        res.push(...filterByLevel(level, children, currentLevel));
-      }
-    }
-    return res as string[] | number[];
-  }
-
-  /**
-   * 娣诲姞鑺傜偣
-   */
-  function insertNodeByKey({ parentKey = null, node, push = 'push' }: InsertNodeParams) {
-    const treeData: any = cloneDeep(unref(treeDataRef));
-    if (!parentKey) {
-      treeData[push](node);
-      treeDataRef.value = treeData;
-      return;
-    }
-    const { key: keyField, children: childrenField } = unref(getReplaceFields);
-    if (!childrenField || !keyField) return;
-
-    forEach(treeData, (treeItem) => {
-      if (treeItem[keyField] === parentKey) {
-        treeItem[childrenField] = treeItem[childrenField] || [];
-        treeItem[childrenField][push](node);
-        return true;
-      }
-    });
-    treeDataRef.value = treeData;
-  }
-
-  /**
-   * 鎵归噺娣诲姞鑺傜偣
-   */
-  function insertNodesByKey({ parentKey = null, list, push = 'push' }: InsertNodeParams) {
-    const treeData: any = cloneDeep(unref(treeDataRef));
-    if (!list || list.length < 1) {
-      return;
-    }
-    if (!parentKey) {
-      for (let i = 0; i < list.length; i++) {
-        treeData[push](list[i]);
-      }
-    } else {
-      const { key: keyField, children: childrenField } = unref(getReplaceFields);
-      if (!childrenField || !keyField) return;
-
-      forEach(treeData, (treeItem) => {
-        if (treeItem[keyField] === parentKey) {
-          treeItem[childrenField] = treeItem[childrenField] || [];
-          for (let i = 0; i < list.length; i++) {
-            treeItem[childrenField][push](list[i]);
-          }
-          treeDataRef.value = treeData;
-          return true;
-        }
-      });
-    }
-  }
-
-  // Delete node
-  function deleteNodeByKey(key: string, list?: TreeDataItem[]) {
-    if (!key) return;
-    const treeData = list || unref(treeDataRef);
-    const { key: keyField, children: childrenField } = unref(getReplaceFields);
-    if (!childrenField || !keyField) return;
-
-    for (let index = 0; index < treeData.length; index++) {
-      const element: any = treeData[index];
-      const children = element[childrenField];
-
-      if (element[keyField] === key) {
-        treeData.splice(index, 1);
-        break;
-      } else if (children && children.length) {
-        deleteNodeByKey(key, element[childrenField]);
-      }
-    }
-  }
-
-  return {
-    deleteNodeByKey,
-    insertNodeByKey,
-    insertNodesByKey,
-    filterByLevel,
-    updateNodeByKey,
-    getAllKeys,
-    getChildrenKeys,
-    getEnabledKeys,
-  };
-}
diff --git a/src/components/Upload/index.ts b/src/components/Upload/index.ts
deleted file mode 100644
index 568a7d9..0000000
--- a/src/components/Upload/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { withInstall } from '/@/utils';
-import basicUpload from './src/BasicUpload.vue';
-
-export const BasicUpload = withInstall(basicUpload);
diff --git a/src/components/Upload/src/BasicUpload.vue b/src/components/Upload/src/BasicUpload.vue
deleted file mode 100644
index 7e2f4c5..0000000
--- a/src/components/Upload/src/BasicUpload.vue
+++ /dev/null
@@ -1,113 +0,0 @@
-<template>
-  <div>
-    <a-button-group>
-      <a-button type="primary" @click="openUploadModal" preIcon="carbon:cloud-upload">
-        {{ t('component.upload.upload') }}
-      </a-button>
-      <Tooltip placement="bottom" v-if="showPreview">
-        <template #title>
-          {{ t('component.upload.uploaded') }}
-          <template v-if="fileList.length">
-            {{ fileList.length }}
-          </template>
-        </template>
-        <a-button @click="openPreviewModal">
-          <Icon icon="bi:eye" />
-          <template v-if="fileList.length && showPreviewNumber">
-            {{ fileList.length }}
-          </template>
-        </a-button>
-      </Tooltip>
-    </a-button-group>
-
-    <UploadModal v-bind="bindValue" :previewFileList="fileList" @register="registerUploadModal" @change="handleChange" @delete="handleDelete" />
-
-    <UploadPreviewModal :value="fileList" @register="registerPreviewModal" @list-change="handlePreviewChange" @delete="handlePreviewDelete" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, watch, unref, computed } from 'vue';
-  import UploadModal from './UploadModal.vue';
-  import UploadPreviewModal from './UploadPreviewModal.vue';
-  import { Icon } from '/@/components/Icon';
-  import { Tooltip } from 'ant-design-vue';
-  import { useModal } from '/@/components/Modal';
-  import { uploadContainerProps } from './props';
-  import { omit } from 'lodash-es';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { isArray } from '/@/utils/is';
-
-  export default defineComponent({
-    name: 'BasicUpload',
-    components: { UploadModal, UploadPreviewModal, Icon, Tooltip },
-    props: uploadContainerProps,
-    emits: ['change', 'delete', 'preview-delete', 'update:value'],
-
-    setup(props, { emit, attrs }) {
-      const { t } = useI18n();
-      // 涓婁紶modal
-      const [registerUploadModal, { openModal: openUploadModal }] = useModal();
-
-      //   棰勮modal
-      const [registerPreviewModal, { openModal: openPreviewModal }] = useModal();
-
-      const fileList = ref<string[]>([]);
-
-      const showPreview = computed(() => {
-        const { emptyHidePreview } = props;
-        if (!emptyHidePreview) return true;
-        return emptyHidePreview ? fileList.value.length > 0 : true;
-      });
-
-      const bindValue = computed(() => {
-        const value = { ...attrs, ...props };
-        return omit(value, 'onChange');
-      });
-
-      watch(
-        () => props.value,
-        (value = []) => {
-          fileList.value = isArray(value) ? value : [];
-        },
-        { immediate: true }
-      );
-
-      // 涓婁紶modal淇濆瓨鎿嶄綔
-      function handleChange(urls: string[]) {
-        fileList.value = [...unref(fileList), ...(urls || [])];
-        emit('update:value', fileList.value);
-        emit('change', fileList.value);
-      }
-
-      // 棰勮modal淇濆瓨鎿嶄綔
-      function handlePreviewChange(urls: string[]) {
-        fileList.value = [...(urls || [])];
-        emit('update:value', fileList.value);
-        emit('change', fileList.value);
-      }
-
-      function handleDelete(record: Recordable) {
-        emit('delete', record);
-      }
-
-      function handlePreviewDelete(url: string) {
-        emit('preview-delete', url);
-      }
-
-      return {
-        registerUploadModal,
-        openUploadModal,
-        handleChange,
-        handlePreviewChange,
-        registerPreviewModal,
-        openPreviewModal,
-        fileList,
-        showPreview,
-        bindValue,
-        handleDelete,
-        handlePreviewDelete,
-        t,
-      };
-    },
-  });
-</script>
diff --git a/src/components/Upload/src/FileList.vue b/src/components/Upload/src/FileList.vue
deleted file mode 100644
index 19ffb57..0000000
--- a/src/components/Upload/src/FileList.vue
+++ /dev/null
@@ -1,102 +0,0 @@
-<script lang="tsx">
-  import { defineComponent, CSSProperties, watch, nextTick } from 'vue';
-  import { fileListProps } from './props';
-  import { isFunction } from '/@/utils/is';
-  import { useModalContext } from '/@/components/Modal/src/hooks/useModalContext';
-
-  export default defineComponent({
-    name: 'FileList',
-    props: fileListProps,
-    setup(props) {
-      const modalFn = useModalContext();
-      watch(
-        () => props.dataSource,
-        () => {
-          nextTick(() => {
-            modalFn?.redoModalHeight?.();
-          });
-        }
-      );
-      return () => {
-        const { columns, actionColumn, dataSource } = props;
-        const columnList = [...columns, actionColumn];
-        return (
-          <table class="file-table">
-            <colgroup>
-              {columnList.map((item) => {
-                const { width = 0, dataIndex } = item;
-                const style: CSSProperties = {
-                  width: `${width}px`,
-                  minWidth: `${width}px`,
-                };
-                return <col style={width ? style : {}} key={dataIndex} />;
-              })}
-            </colgroup>
-            <thead>
-              <tr class="file-table-tr">
-                {columnList.map((item) => {
-                  const { title = '', align = 'center', dataIndex } = item;
-                  return (
-                    <th class={['file-table-th', align]} key={dataIndex}>
-                      {title}
-                    </th>
-                  );
-                })}
-              </tr>
-            </thead>
-            <tbody>
-              {dataSource.map((record = {}, index) => {
-                return (
-                  <tr class="file-table-tr" key={`${index + record.name || ''}`}>
-                    {columnList.map((item) => {
-                      const { dataIndex = '', customRender, align = 'center' } = item;
-                      const render = customRender && isFunction(customRender);
-                      return (
-                        <td class={['file-table-td', align]} key={dataIndex}>
-                          {render ? customRender?.({ text: record[dataIndex], record }) : record[dataIndex]}
-                        </td>
-                      );
-                    })}
-                  </tr>
-                );
-              })}
-            </tbody>
-          </table>
-        );
-      };
-    },
-  });
-</script>
-<style lang="less">
-  .file-table {
-    width: 100%;
-    border-collapse: collapse;
-
-    .center {
-      text-align: center;
-    }
-
-    .left {
-      text-align: left;
-    }
-
-    .right {
-      text-align: right;
-    }
-
-    &-th,
-    &-td {
-      padding: 12px 8px;
-    }
-
-    thead {
-      background-color: @background-color-light;
-    }
-
-    table,
-    td,
-    th {
-      border: 1px solid @border-color-base;
-    }
-  }
-</style>
diff --git a/src/components/Upload/src/ThumbUrl.vue b/src/components/Upload/src/ThumbUrl.vue
deleted file mode 100644
index 80fb203..0000000
--- a/src/components/Upload/src/ThumbUrl.vue
+++ /dev/null
@@ -1,29 +0,0 @@
-<template>
-  <span class="thumb">
-    <Image v-if="fileUrl" :src="fileUrl" :width="104" />
-  </span>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { Image } from 'ant-design-vue';
-
-  export default defineComponent({
-    components: { Image },
-    props: {
-      fileUrl: propTypes.string.def(''),
-      fileName: propTypes.string.def(''),
-    },
-  });
-</script>
-<style lang="less">
-  .thumb {
-    img {
-      position: static;
-      display: block;
-      cursor: zoom-in;
-      border-radius: 4px;
-      object-fit: cover;
-    }
-  }
-</style>
diff --git a/src/components/Upload/src/UploadModal.vue b/src/components/Upload/src/UploadModal.vue
deleted file mode 100644
index 66e5982..0000000
--- a/src/components/Upload/src/UploadModal.vue
+++ /dev/null
@@ -1,309 +0,0 @@
-<template>
-  <BasicModal
-    width="800px"
-    :title="t('component.upload.upload')"
-    :okText="t('component.upload.save')"
-    v-bind="$attrs"
-    @register="register"
-    @ok="handleOk"
-    :closeFunc="handleCloseFunc"
-    :maskClosable="false"
-    :keyboard="false"
-    wrapClassName="upload-modal"
-    :okButtonProps="getOkButtonProps"
-    :cancelButtonProps="{ disabled: isUploadingRef }"
-  >
-    <template #centerFooter>
-      <a-button @click="handleStartUpload" color="success" :disabled="!getIsSelectFile" :loading="isUploadingRef">
-        {{ getUploadBtnText }}
-      </a-button>
-    </template>
-
-    <div class="upload-modal-toolbar">
-      <Alert :message="getHelpText" type="info" banner class="upload-modal-toolbar__text" />
-
-      <Upload :accept="getStringAccept" :multiple="multiple" :before-upload="beforeUpload" class="upload-modal-toolbar__btn">
-        <a-button type="primary">
-          {{ t('component.upload.choose') }}
-        </a-button>
-      </Upload>
-    </div>
-    <FileList :dataSource="fileListRef" :columns="columns" :actionColumn="actionColumn" />
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, reactive, ref, toRefs, unref, computed, PropType } from 'vue';
-  import { Upload, Alert } from 'ant-design-vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  //   import { BasicTable, useTable } from '/@/components/Table';
-  // hooks
-  import { useUploadType } from './useUpload';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  //   types
-  import { FileItem, UploadResultStatus } from './typing';
-  import { basicProps } from './props';
-  import { createTableColumns, createActionColumn } from './data';
-  // utils
-  import { checkFileType, checkImgType, getBase64WithFile } from './helper';
-  import { buildUUID } from '/@/utils/uuid';
-  import { isFunction } from '/@/utils/is';
-  import { warn } from '/@/utils/log';
-  import FileList from './FileList.vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  export default defineComponent({
-    components: { BasicModal, Upload, Alert, FileList },
-    props: {
-      ...basicProps,
-      previewFileList: {
-        type: Array as PropType<string[]>,
-        default: () => [],
-      },
-    },
-    emits: ['change', 'register', 'delete'],
-    setup(props, { emit }) {
-      const state = reactive<{ fileList: FileItem[] }>({
-        fileList: [],
-      });
-
-      //   鏄惁姝e湪涓婁紶
-      const isUploadingRef = ref(false);
-      const fileListRef = ref<FileItem[]>([]);
-      const { accept, helpText, maxNumber, maxSize } = toRefs(props);
-
-      const { t } = useI18n();
-      const [register, { closeModal }] = useModalInner();
-
-      const { getAccept, getStringAccept, getHelpText } = useUploadType({
-        acceptRef: accept,
-        helpTextRef: helpText,
-        maxNumberRef: maxNumber,
-        maxSizeRef: maxSize,
-      });
-
-      const { createMessage } = useMessage();
-
-      const getIsSelectFile = computed(() => {
-        return fileListRef.value.length > 0 && !fileListRef.value.every((item) => item.status === UploadResultStatus.SUCCESS);
-      });
-
-      const getOkButtonProps = computed(() => {
-        const someSuccess = fileListRef.value.some((item) => item.status === UploadResultStatus.SUCCESS);
-        return {
-          disabled: isUploadingRef.value || fileListRef.value.length === 0 || !someSuccess,
-        };
-      });
-
-      const getUploadBtnText = computed(() => {
-        const someError = fileListRef.value.some((item) => item.status === UploadResultStatus.ERROR);
-        return isUploadingRef.value
-          ? t('component.upload.uploading')
-          : someError
-          ? t('component.upload.reUploadFailed')
-          : t('component.upload.startUpload');
-      });
-
-      // 涓婁紶鍓嶆牎楠�
-      function beforeUpload(file: File) {
-        const { size, name } = file;
-        const { maxSize } = props;
-        const accept = unref(getAccept);
-        // 璁剧疆鏈�澶у�硷紝鍒欏垽鏂�
-        if (maxSize && file.size / 1024 / 1024 >= maxSize) {
-          createMessage.error(t('component.upload.maxSizeMultiple', [maxSize]));
-          return false;
-        }
-
-        // 璁剧疆绫诲瀷,鍒欏垽鏂�
-        if (accept.length > 0 && !checkFileType(file, accept)) {
-          createMessage.error!(t('component.upload.acceptUpload', [accept.join(',')]));
-          return false;
-        }
-        const commonItem = {
-          uuid: buildUUID(),
-          file,
-          size,
-          name,
-          percent: 0,
-          type: name.split('.').pop(),
-        };
-        // 鐢熸垚鍥剧墖缂╃暐鍥�
-        if (checkImgType(file)) {
-          // beforeUpload锛屽鏋滃紓姝ヤ細璋冪敤鑷甫涓婁紶鏂规硶
-          // file.thumbUrl = await getBase64(file);
-          getBase64WithFile(file).then(({ result: thumbUrl }) => {
-            fileListRef.value = [
-              ...unref(fileListRef),
-              {
-                thumbUrl,
-                ...commonItem,
-              },
-            ];
-          });
-        } else {
-          fileListRef.value = [...unref(fileListRef), commonItem];
-        }
-        return false;
-      }
-
-      // 鍒犻櫎
-      function handleRemove(record: FileItem) {
-        const index = fileListRef.value.findIndex((item) => item.uuid === record.uuid);
-        index !== -1 && fileListRef.value.splice(index, 1);
-        emit('delete', record);
-      }
-
-      // 棰勮
-      // function handlePreview(record: FileItem) {
-      //   const { thumbUrl = '' } = record;
-      //   createImgPreview({
-      //     imageList: [thumbUrl],
-      //   });
-      // }
-
-      async function uploadApiByItem(item: FileItem) {
-        const { api } = props;
-        if (!api || !isFunction(api)) {
-          return warn('upload api must exist and be a function');
-        }
-        try {
-          item.status = UploadResultStatus.UPLOADING;
-          const { data } = await props.api?.(
-            {
-              data: {
-                ...(props.uploadParams || {}),
-              },
-              file: item.file,
-              name: props.name,
-              filename: props.filename,
-            },
-            function onUploadProgress(progressEvent: ProgressEvent) {
-              const complete = ((progressEvent.loaded / progressEvent.total) * 100) | 0;
-              item.percent = complete;
-            }
-          );
-          item.status = UploadResultStatus.SUCCESS;
-          item.responseData = data;
-          return {
-            success: true,
-            error: null,
-          };
-        } catch (e) {
-          console.log(e);
-          item.status = UploadResultStatus.ERROR;
-          return {
-            success: false,
-            error: e,
-          };
-        }
-      }
-
-      // 鐐瑰嚮寮�濮嬩笂浼�
-      async function handleStartUpload() {
-        const { maxNumber } = props;
-        if ((fileListRef.value.length + props.previewFileList?.length ?? 0) > maxNumber) {
-          return createMessage.warning(t('component.upload.maxNumber', [maxNumber]));
-        }
-        try {
-          isUploadingRef.value = true;
-          // 鍙笂浼犱笉鏄垚鍔熺姸鎬佺殑
-          const uploadFileList = fileListRef.value.filter((item) => item.status !== UploadResultStatus.SUCCESS) || [];
-          const data = await Promise.all(
-            uploadFileList.map((item) => {
-              return uploadApiByItem(item);
-            })
-          );
-          isUploadingRef.value = false;
-          // 鐢熶骇鐜:鎶涘嚭閿欒
-          const errorList = data.filter((item: any) => !item.success);
-          if (errorList.length > 0) throw errorList;
-        } catch (e) {
-          isUploadingRef.value = false;
-          throw e;
-        }
-      }
-
-      //   鐐瑰嚮淇濆瓨
-      function handleOk() {
-        const { maxNumber } = props;
-
-        if (fileListRef.value.length > maxNumber) {
-          return createMessage.warning(t('component.upload.maxNumber', [maxNumber]));
-        }
-        if (isUploadingRef.value) {
-          return createMessage.warning(t('component.upload.saveWarn'));
-        }
-        const fileList: string[] = [];
-
-        for (const item of fileListRef.value) {
-          const { status, responseData } = item;
-          if (status === UploadResultStatus.SUCCESS && responseData) {
-            fileList.push(responseData.url);
-          }
-        }
-        // 瀛樺湪涓�涓笂浼犳垚鍔熺殑鍗冲彲淇濆瓨
-        if (fileList.length <= 0) {
-          return createMessage.warning(t('component.upload.saveError'));
-        }
-        fileListRef.value = [];
-        closeModal();
-        emit('change', fileList);
-      }
-
-      // 鐐瑰嚮鍏抽棴锛氬垯鎵�鏈夋搷浣滀笉淇濆瓨锛屽寘鎷笂浼犵殑
-      async function handleCloseFunc() {
-        if (!isUploadingRef.value) {
-          fileListRef.value = [];
-          return true;
-        } else {
-          createMessage.warning(t('component.upload.uploadWait'));
-          return false;
-        }
-      }
-
-      return {
-        columns: createTableColumns() as any[],
-        actionColumn: createActionColumn(handleRemove) as any,
-        register,
-        closeModal,
-        getHelpText,
-        getStringAccept,
-        getOkButtonProps,
-        beforeUpload,
-        // registerTable,
-        fileListRef,
-        state,
-        isUploadingRef,
-        handleStartUpload,
-        handleOk,
-        handleCloseFunc,
-        getIsSelectFile,
-        getUploadBtnText,
-        t,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  .upload-modal {
-    .ant-upload-list {
-      display: none;
-    }
-
-    .ant-table-wrapper .ant-spin-nested-loading {
-      padding: 0;
-    }
-
-    &-toolbar {
-      display: flex;
-      align-items: center;
-      margin-bottom: 8px;
-
-      &__btn {
-        margin-left: 8px;
-        text-align: right;
-        flex: 1;
-      }
-    }
-  }
-</style>
diff --git a/src/components/Upload/src/UploadPreviewModal.vue b/src/components/Upload/src/UploadPreviewModal.vue
deleted file mode 100644
index 0e51cb9..0000000
--- a/src/components/Upload/src/UploadPreviewModal.vue
+++ /dev/null
@@ -1,99 +0,0 @@
-<template>
-  <BasicModal
-    width="800px"
-    :title="t('component.upload.preview')"
-    wrapClassName="upload-preview-modal"
-    v-bind="$attrs"
-    @register="register"
-    :showOkBtn="false"
-  >
-    <FileList :dataSource="fileListRef" :columns="columns" :actionColumn="actionColumn" />
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, watch, ref } from 'vue';
-  //   import { BasicTable, useTable } from '/@/components/Table';
-  import FileList from './FileList.vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { previewProps } from './props';
-  import { PreviewFileItem } from './typing';
-  import { downloadByUrl } from '/@/utils/file/download';
-  import { createPreviewColumns, createPreviewActionColumn } from './data';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { isArray } from '/@/utils/is';
-
-  export default defineComponent({
-    components: { BasicModal, FileList },
-    props: previewProps,
-    emits: ['list-change', 'register', 'delete'],
-    setup(props, { emit }) {
-      const [register, { closeModal }] = useModalInner();
-      const { t } = useI18n();
-
-      const fileListRef = ref<PreviewFileItem[]>([]);
-      watch(
-        () => props.value,
-        (value) => {
-          if (!isArray(value)) value = [];
-          fileListRef.value = value
-            .filter((item) => !!item)
-            .map((item) => {
-              return {
-                url: item,
-                type: item.split('.').pop() || '',
-                name: item.split('/').pop() || '',
-              };
-            });
-        },
-        { immediate: true }
-      );
-
-      // 鍒犻櫎
-      function handleRemove(record: PreviewFileItem) {
-        const index = fileListRef.value.findIndex((item) => item.url === record.url);
-        if (index !== -1) {
-          const removed = fileListRef.value.splice(index, 1);
-          emit('delete', removed[0].url);
-          emit(
-            'list-change',
-            fileListRef.value.map((item) => item.url)
-          );
-        }
-      }
-
-      // // 棰勮
-      // function handlePreview(record: PreviewFileItem) {
-      //   const { url = '' } = record;
-      //   createImgPreview({
-      //     imageList: [url],
-      //   });
-      // }
-
-      // 涓嬭浇
-      function handleDownload(record: PreviewFileItem) {
-        const { url = '' } = record;
-        downloadByUrl({ url });
-      }
-
-      return {
-        t,
-        register,
-        closeModal,
-        fileListRef,
-        columns: createPreviewColumns() as any[],
-        actionColumn: createPreviewActionColumn({ handleRemove, handleDownload }) as any,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  .upload-preview-modal {
-    .ant-upload-list {
-      display: none;
-    }
-
-    .ant-table-wrapper .ant-spin-nested-loading {
-      padding: 0;
-    }
-  }
-</style>
diff --git a/src/components/Upload/src/data.tsx b/src/components/Upload/src/data.tsx
deleted file mode 100644
index 5480788..0000000
--- a/src/components/Upload/src/data.tsx
+++ /dev/null
@@ -1,147 +0,0 @@
-import type { BasicColumn, ActionItem } from '/@/components/Table';
-import { FileItem, PreviewFileItem, UploadResultStatus } from './typing';
-import {
-  // checkImgType,
-  isImgTypeByName,
-} from './helper';
-import { Progress, Tag } from 'ant-design-vue';
-import TableAction from '/@/components/Table/src/components/TableAction.vue';
-import ThumbUrl from './ThumbUrl.vue';
-import { useI18n } from '/@/hooks/web/useI18n';
-
-const { t } = useI18n();
-
-// 鏂囦欢涓婁紶鍒楄〃
-export function createTableColumns(): BasicColumn[] {
-  return [
-    {
-      dataIndex: 'thumbUrl',
-      title: t('component.upload.legend'),
-      width: 100,
-      customRender: ({ record }) => {
-        const { thumbUrl } = (record as FileItem) || {};
-        return thumbUrl && <ThumbUrl fileUrl={thumbUrl} />;
-      },
-    },
-    {
-      dataIndex: 'name',
-      title: t('component.upload.fileName'),
-      align: 'left',
-      customRender: ({ text, record }) => {
-        const { percent, status: uploadStatus } = (record as FileItem) || {};
-        let status: 'normal' | 'exception' | 'active' | 'success' = 'normal';
-        if (uploadStatus === UploadResultStatus.ERROR) {
-          status = 'exception';
-        } else if (uploadStatus === UploadResultStatus.UPLOADING) {
-          status = 'active';
-        } else if (uploadStatus === UploadResultStatus.SUCCESS) {
-          status = 'success';
-        }
-        return (
-          <span>
-            <p class="truncate mb-1" title={text}>
-              {text}
-            </p>
-            <Progress percent={percent} size="small" status={status} />
-          </span>
-        );
-      },
-    },
-    {
-      dataIndex: 'size',
-      title: t('component.upload.fileSize'),
-      width: 100,
-      customRender: ({ text = 0 }) => {
-        return text && (text / 1024).toFixed(2) + 'KB';
-      },
-    },
-    // {
-    //   dataIndex: 'type',
-    //   title: '鏂囦欢绫诲瀷',
-    //   width: 100,
-    // },
-    {
-      dataIndex: 'status',
-      title: t('component.upload.fileStatue'),
-      width: 100,
-      customRender: ({ text }) => {
-        if (text === UploadResultStatus.SUCCESS) {
-          return <Tag color="green">{() => t('component.upload.uploadSuccess')}</Tag>;
-        } else if (text === UploadResultStatus.ERROR) {
-          return <Tag color="red">{() => t('component.upload.uploadError')}</Tag>;
-        } else if (text === UploadResultStatus.UPLOADING) {
-          return <Tag color="blue">{() => t('component.upload.uploading')}</Tag>;
-        }
-
-        return text;
-      },
-    },
-  ];
-}
-export function createActionColumn(handleRemove: Function): BasicColumn {
-  return {
-    width: 120,
-    title: t('component.upload.operating'),
-    dataIndex: 'action',
-    fixed: false,
-    customRender: ({ record }) => {
-      const actions: ActionItem[] = [
-        {
-          label: t('component.upload.del'),
-          color: 'error',
-          onClick: handleRemove.bind(null, record),
-        },
-      ];
-      // if (checkImgType(record)) {
-      //   actions.unshift({
-      //     label: t('component.upload.preview'),
-      //     onClick: handlePreview.bind(null, record),
-      //   });
-      // }
-      return <TableAction actions={actions} outside={true} />;
-    },
-  };
-}
-// 鏂囦欢棰勮鍒楄〃
-export function createPreviewColumns(): BasicColumn[] {
-  return [
-    {
-      dataIndex: 'url',
-      title: t('component.upload.legend'),
-      width: 100,
-      customRender: ({ record }) => {
-        const { url } = (record as PreviewFileItem) || {};
-        return isImgTypeByName(url) && <ThumbUrl fileUrl={url} />;
-      },
-    },
-    {
-      dataIndex: 'name',
-      title: t('component.upload.fileName'),
-      align: 'left',
-    },
-  ];
-}
-
-export function createPreviewActionColumn({ handleRemove, handleDownload }: { handleRemove: Fn; handleDownload: Fn }): BasicColumn {
-  return {
-    width: 160,
-    title: t('component.upload.operating'),
-    dataIndex: 'action',
-    fixed: false,
-    customRender: ({ record }) => {
-      const actions: ActionItem[] = [
-        {
-          label: t('component.upload.del'),
-          color: 'error',
-          onClick: handleRemove.bind(null, record),
-        },
-        {
-          label: t('component.upload.download'),
-          onClick: handleDownload.bind(null, record),
-        },
-      ];
-
-      return <TableAction actions={actions} outside={true} />;
-    },
-  };
-}
diff --git a/src/components/Upload/src/helper.ts b/src/components/Upload/src/helper.ts
deleted file mode 100644
index a0c574b..0000000
--- a/src/components/Upload/src/helper.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-export function checkFileType(file: File, accepts: string[]) {
-  const newTypes = accepts.join('|');
-  // const reg = /\.(jpg|jpeg|png|gif|txt|doc|docx|xls|xlsx|xml)$/i;
-  const reg = new RegExp('\\.(' + newTypes + ')$', 'i');
-
-  return reg.test(file.name);
-}
-
-export function checkImgType(file: File) {
-  return isImgTypeByName(file.name);
-}
-
-export function isImgTypeByName(name: string) {
-  return /\.(jpg|jpeg|png|gif)$/i.test(name);
-}
-
-export function getBase64WithFile(file: File) {
-  return new Promise<{
-    result: string;
-    file: File;
-  }>((resolve, reject) => {
-    const reader = new FileReader();
-    reader.readAsDataURL(file);
-    reader.onload = () => resolve({ result: reader.result as string, file });
-    reader.onerror = (error) => reject(error);
-  });
-}
diff --git a/src/components/Upload/src/props.ts b/src/components/Upload/src/props.ts
deleted file mode 100644
index 413b95d..0000000
--- a/src/components/Upload/src/props.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import type { PropType } from 'vue';
-import { FileBasicColumn } from './typing';
-
-export const basicProps = {
-  helpText: {
-    type: String as PropType<string>,
-    default: '',
-  },
-  // 鏂囦欢鏈�澶у灏慚B
-  maxSize: {
-    type: Number as PropType<number>,
-    default: 2,
-  },
-  // 鏈�澶ф暟閲忕殑鏂囦欢锛孖nfinity涓嶉檺鍒�
-  maxNumber: {
-    type: Number as PropType<number>,
-    default: Infinity,
-  },
-  // 鏍规嵁鍚庣紑锛屾垨鑰呭叾浠�
-  accept: {
-    type: Array as PropType<string[]>,
-    default: () => [],
-  },
-  multiple: {
-    type: Boolean as PropType<boolean>,
-    default: true,
-  },
-  uploadParams: {
-    type: Object as PropType<any>,
-    default: {},
-  },
-  api: {
-    type: Function as PropType<PromiseFn>,
-    default: null,
-    required: true,
-  },
-  name: {
-    type: String as PropType<string>,
-    default: 'file',
-  },
-  filename: {
-    type: String as PropType<string>,
-    default: null,
-  },
-};
-
-export const uploadContainerProps = {
-  value: {
-    type: Array as PropType<string[]>,
-    default: () => [],
-  },
-  ...basicProps,
-  showPreviewNumber: {
-    type: Boolean as PropType<boolean>,
-    default: true,
-  },
-  emptyHidePreview: {
-    type: Boolean as PropType<boolean>,
-    default: false,
-  },
-};
-
-export const previewProps = {
-  value: {
-    type: Array as PropType<string[]>,
-    default: () => [],
-  },
-};
-
-export const fileListProps = {
-  columns: {
-    type: [Array] as PropType<FileBasicColumn[]>,
-    default: null,
-  },
-  actionColumn: {
-    type: Object as PropType<FileBasicColumn>,
-    default: null,
-  },
-  dataSource: {
-    type: Array as PropType<any[]>,
-    default: null,
-  },
-};
diff --git a/src/components/Upload/src/typing.ts b/src/components/Upload/src/typing.ts
deleted file mode 100644
index c630110..0000000
--- a/src/components/Upload/src/typing.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { UploadApiResult } from '/@/api/sys/model/uploadModel';
-
-export enum UploadResultStatus {
-  SUCCESS = 'success',
-  ERROR = 'error',
-  UPLOADING = 'uploading',
-}
-
-export interface FileItem {
-  thumbUrl?: string;
-  name: string;
-  size: string | number;
-  type?: string;
-  percent: number;
-  file: File;
-  status?: UploadResultStatus;
-  responseData?: UploadApiResult;
-  uuid: string;
-}
-
-export interface PreviewFileItem {
-  url: string;
-  name: string;
-  type: string;
-}
-
-export interface FileBasicColumn {
-  /**
-   * Renderer of the table cell. The return value should be a VNode, or an object for colSpan/rowSpan config
-   * @type Function | ScopedSlot
-   */
-  customRender?: Function;
-  /**
-   * Title of this column
-   * @type any (string | slot)
-   */
-  title: string;
-
-  /**
-   * Width of this column
-   * @type string | number
-   */
-  width?: number;
-  /**
-   * Display field of the data record, could be set like a.b.c
-   * @type string
-   */
-  dataIndex: string;
-  /**
-   * specify how content is aligned
-   * @default 'left'
-   * @type string
-   */
-  align?: 'left' | 'right' | 'center';
-}
diff --git a/src/components/Upload/src/useUpload.ts b/src/components/Upload/src/useUpload.ts
deleted file mode 100644
index 694cc27..0000000
--- a/src/components/Upload/src/useUpload.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { Ref, unref, computed } from 'vue';
-import { useI18n } from '/@/hooks/web/useI18n';
-const { t } = useI18n();
-export function useUploadType({
-  acceptRef,
-  helpTextRef,
-  maxNumberRef,
-  maxSizeRef,
-}: {
-  acceptRef: Ref<string[]>;
-  helpTextRef: Ref<string>;
-  maxNumberRef: Ref<number>;
-  maxSizeRef: Ref<number>;
-}) {
-  // 鏂囦欢绫诲瀷闄愬埗
-  const getAccept = computed(() => {
-    const accept = unref(acceptRef);
-    if (accept && accept.length > 0) {
-      return accept;
-    }
-    return [];
-  });
-  const getStringAccept = computed(() => {
-    return unref(getAccept)
-      .map((item) => {
-        if (item.indexOf('/') > 0 || item.startsWith('.')) {
-          return item;
-        } else {
-          return `.${item}`;
-        }
-      })
-      .join(',');
-  });
-
-  // 鏀寔jpg銆乯peg銆乸ng鏍煎紡锛屼笉瓒呰繃2M锛屾渶澶氬彲閫夋嫨10寮犲浘鐗囷紝銆�
-  const getHelpText = computed(() => {
-    const helpText = unref(helpTextRef);
-    if (helpText) {
-      return helpText;
-    }
-    const helpTexts: string[] = [];
-
-    const accept = unref(acceptRef);
-    if (accept.length > 0) {
-      helpTexts.push(t('component.upload.accept', [accept.join(',')]));
-    }
-
-    const maxSize = unref(maxSizeRef);
-    if (maxSize) {
-      helpTexts.push(t('component.upload.maxSize', [maxSize]));
-    }
-
-    const maxNumber = unref(maxNumberRef);
-    if (maxNumber && maxNumber !== Infinity) {
-      helpTexts.push(t('component.upload.maxNumber', [maxNumber]));
-    }
-    return helpTexts.join('锛�');
-  });
-  return { getAccept, getStringAccept, getHelpText };
-}
diff --git a/src/components/Verify/index.ts b/src/components/Verify/index.ts
deleted file mode 100644
index 7c67101..0000000
--- a/src/components/Verify/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { withInstall } from '/@/utils/index';
-import basicDragVerify from './src/DragVerify.vue';
-import rotateDragVerify from './src/ImgRotate.vue';
-
-export const BasicDragVerify = withInstall(basicDragVerify);
-export const RotateDragVerify = withInstall(rotateDragVerify);
-export * from './src/typing';
diff --git a/src/components/Verify/src/DragVerify.vue b/src/components/Verify/src/DragVerify.vue
deleted file mode 100644
index 26ce84a..0000000
--- a/src/components/Verify/src/DragVerify.vue
+++ /dev/null
@@ -1,361 +0,0 @@
-<script lang="tsx">
-  import type { Ref } from 'vue';
-  import { defineComponent, ref, computed, unref, reactive, watch, watchEffect } from 'vue';
-  import { useTimeoutFn } from '/@/hooks/core/useTimeout';
-  import { useEventListener } from '/@/hooks/event/useEventListener';
-  import { basicProps } from './props';
-  import { getSlot } from '/@/utils/helper/tsxHelper';
-  import { CheckOutlined, DoubleRightOutlined } from '@ant-design/icons-vue';
-
-  export default defineComponent({
-    name: 'BaseDargVerify',
-    props: basicProps,
-    emits: ['success', 'update:value', 'change', 'start', 'move', 'end'],
-    setup(props, { emit, slots, expose }) {
-      const state = reactive({
-        isMoving: false,
-        isPassing: false,
-        moveDistance: 0,
-        toLeft: false,
-        startTime: 0,
-        endTime: 0,
-      });
-
-      const wrapElRef = ref<HTMLDivElement | null>(null);
-      const barElRef = ref<HTMLDivElement | null>(null);
-      const contentElRef = ref<HTMLDivElement | null>(null);
-      const actionElRef = ref(null) as Ref<HTMLDivElement | null>;
-
-      useEventListener({
-        el: document,
-        name: 'mouseup',
-        listener: () => {
-          if (state.isMoving) {
-            resume();
-          }
-        },
-      });
-
-      const getActionStyleRef = computed(() => {
-        const { height, actionStyle } = props;
-        const h = `${parseInt(height as string)}px`;
-        return {
-          left: 0,
-          width: h,
-          height: h,
-          ...actionStyle,
-        };
-      });
-
-      const getWrapStyleRef = computed(() => {
-        const { height, width, circle, wrapStyle } = props;
-        const h = parseInt(height as string);
-        const w = `${parseInt(width as string)}px`;
-        return {
-          width: w,
-          height: `${h}px`,
-          lineHeight: `${h}px`,
-          borderRadius: circle ? h / 2 + 'px' : 0,
-          ...wrapStyle,
-        };
-      });
-
-      const getBarStyleRef = computed(() => {
-        const { height, circle, barStyle } = props;
-        const h = parseInt(height as string);
-        return {
-          height: `${h}px`,
-          borderRadius: circle ? h / 2 + 'px 0 0 ' + h / 2 + 'px' : 0,
-          ...barStyle,
-        };
-      });
-
-      const getContentStyleRef = computed(() => {
-        const { height, width, contentStyle } = props;
-        const h = `${parseInt(height as string)}px`;
-        const w = `${parseInt(width as string)}px`;
-
-        return {
-          height: h,
-          width: w,
-          ...contentStyle,
-        };
-      });
-
-      watch(
-        () => state.isPassing,
-        (isPassing) => {
-          if (isPassing) {
-            const { startTime, endTime } = state;
-            const time = (endTime - startTime) / 1000;
-            emit('success', { isPassing, time: time.toFixed(1) });
-            emit('update:value', isPassing);
-            emit('change', isPassing);
-          }
-        }
-      );
-
-      watchEffect(() => {
-        state.isPassing = !!props.value;
-      });
-
-      function getEventPageX(e: MouseEvent | TouchEvent) {
-        return (e as MouseEvent).pageX || (e as TouchEvent).touches[0].pageX;
-      }
-
-      function handleDragStart(e: MouseEvent | TouchEvent) {
-        if (state.isPassing) {
-          return;
-        }
-        const actionEl = unref(actionElRef);
-        if (!actionEl) return;
-        emit('start', e);
-        state.moveDistance = getEventPageX(e) - parseInt(actionEl.style.left.replace('px', ''), 10);
-        state.startTime = new Date().getTime();
-        state.isMoving = true;
-      }
-
-      function getOffset(el: HTMLDivElement) {
-        const actionWidth = parseInt(el.style.width);
-        const { width } = props;
-        const widthNum = parseInt(width as string);
-        const offset = widthNum - actionWidth - 6;
-        return { offset, widthNum, actionWidth };
-      }
-
-      function handleDragMoving(e: MouseEvent | TouchEvent) {
-        const { isMoving, moveDistance } = state;
-        if (isMoving) {
-          const actionEl = unref(actionElRef);
-          const barEl = unref(barElRef);
-          if (!actionEl || !barEl) return;
-          const { offset, widthNum, actionWidth } = getOffset(actionEl);
-          const moveX = getEventPageX(e) - moveDistance;
-
-          emit('move', {
-            event: e,
-            moveDistance,
-            moveX,
-          });
-          if (moveX > 0 && moveX <= offset) {
-            actionEl.style.left = `${moveX}px`;
-            barEl.style.width = `${moveX + actionWidth / 2}px`;
-          } else if (moveX > offset) {
-            actionEl.style.left = `${widthNum - actionWidth}px`;
-            barEl.style.width = `${widthNum - actionWidth / 2}px`;
-            if (!props.isSlot) {
-              checkPass();
-            }
-          }
-        }
-      }
-
-      function handleDragOver(e: MouseEvent | TouchEvent) {
-        const { isMoving, isPassing, moveDistance } = state;
-        if (isMoving && !isPassing) {
-          emit('end', e);
-          const actionEl = unref(actionElRef);
-          const barEl = unref(barElRef);
-          if (!actionEl || !barEl) return;
-          const moveX = getEventPageX(e) - moveDistance;
-          const { offset, widthNum, actionWidth } = getOffset(actionEl);
-          if (moveX < offset) {
-            if (!props.isSlot) {
-              resume();
-            } else {
-              setTimeout(() => {
-                if (!props.value) {
-                  resume();
-                } else {
-                  const contentEl = unref(contentElRef);
-                  if (contentEl) {
-                    contentEl.style.width = `${parseInt(barEl.style.width)}px`;
-                  }
-                }
-              }, 0);
-            }
-          } else {
-            actionEl.style.left = `${widthNum - actionWidth}px`;
-            barEl.style.width = `${widthNum - actionWidth / 2}px`;
-            checkPass();
-          }
-          state.isMoving = false;
-        }
-      }
-
-      function checkPass() {
-        if (props.isSlot) {
-          resume();
-          return;
-        }
-        state.endTime = new Date().getTime();
-        state.isPassing = true;
-        state.isMoving = false;
-      }
-
-      function resume() {
-        state.isMoving = false;
-        state.isPassing = false;
-        state.moveDistance = 0;
-        state.toLeft = false;
-        state.startTime = 0;
-        state.endTime = 0;
-        const actionEl = unref(actionElRef);
-        const barEl = unref(barElRef);
-        const contentEl = unref(contentElRef);
-        if (!actionEl || !barEl || !contentEl) return;
-        state.toLeft = true;
-        useTimeoutFn(() => {
-          state.toLeft = false;
-          actionEl.style.left = '0';
-          barEl.style.width = '0';
-          //  The time is consistent with the animation time
-        }, 300);
-        contentEl.style.width = unref(getContentStyleRef).width;
-      }
-
-      expose({
-        resume,
-      });
-
-      return () => {
-        const renderBar = () => {
-          const cls = [`darg-verify-bar`];
-          if (state.toLeft) {
-            cls.push('to-left');
-          }
-          return <div class={cls} ref={barElRef} style={unref(getBarStyleRef)} />;
-        };
-
-        const renderContent = () => {
-          const cls = [`darg-verify-content`];
-          const { isPassing } = state;
-          const { text, successText } = props;
-
-          isPassing && cls.push('success');
-
-          return (
-            <div class={cls} ref={contentElRef} style={unref(getContentStyleRef)}>
-              {getSlot(slots, 'text', isPassing) || (isPassing ? successText : text)}
-            </div>
-          );
-        };
-
-        const renderAction = () => {
-          const cls = [`darg-verify-action`];
-          const { toLeft, isPassing } = state;
-          if (toLeft) {
-            cls.push('to-left');
-          }
-          return (
-            <div class={cls} onMousedown={handleDragStart} onTouchstart={handleDragStart} style={unref(getActionStyleRef)} ref={actionElRef}>
-              {getSlot(slots, 'actionIcon', isPassing) ||
-                (isPassing ? <CheckOutlined class={`darg-verify-action__icon`} /> : <DoubleRightOutlined class={`darg-verify-action__icon`} />)}
-            </div>
-          );
-        };
-
-        return (
-          <div
-            class="darg-verify"
-            ref={wrapElRef}
-            style={unref(getWrapStyleRef)}
-            onMousemove={handleDragMoving}
-            onTouchmove={handleDragMoving}
-            onMouseleave={handleDragOver}
-            onMouseup={handleDragOver}
-            onTouchend={handleDragOver}
-          >
-            {renderBar()}
-            {renderContent()}
-            {renderAction()}
-          </div>
-        );
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @radius: 4px;
-
-  .darg-verify {
-    position: relative;
-    overflow: hidden;
-    text-align: center;
-    background-color: rgb(238, 238, 238);
-    border: 1px solid #ddd;
-    border-radius: @radius;
-
-    &-bar {
-      position: absolute;
-      width: 0;
-      height: 36px;
-      background-color: @success-color;
-      border-radius: @radius;
-
-      &.to-left {
-        width: 0 !important;
-        transition: width 0.3s;
-      }
-    }
-
-    &-content {
-      position: absolute;
-      top: 0;
-      font-size: 12px;
-      -webkit-text-size-adjust: none;
-      background-color: -webkit-gradient(
-        linear,
-        left top,
-        right top,
-        color-stop(0, #333),
-        color-stop(0.4, #333),
-        color-stop(0.5, #fff),
-        color-stop(0.6, #333),
-        color-stop(1, #333)
-      );
-      animation: slidetounlock 3s infinite;
-      background-clip: text;
-      user-select: none;
-
-      &.success {
-        -webkit-text-fill-color: @white;
-      }
-
-      & > * {
-        -webkit-text-fill-color: #333;
-      }
-    }
-
-    &-action {
-      position: absolute;
-      top: 0;
-      left: 0;
-      display: flex;
-      cursor: move;
-      background-color: @white;
-      border-radius: @radius;
-      justify-content: center;
-      align-items: center;
-
-      &__icon {
-        cursor: inherit;
-      }
-
-      &.to-left {
-        left: 0 !important;
-        transition: left 0.3s;
-      }
-    }
-  }
-
-  @keyframes slidetounlock {
-    0% {
-      background-position: -120px 0;
-    }
-
-    100% {
-      background-position: 120px 0;
-    }
-  }
-</style>
diff --git a/src/components/Verify/src/ImgRotate.vue b/src/components/Verify/src/ImgRotate.vue
deleted file mode 100644
index e900188..0000000
--- a/src/components/Verify/src/ImgRotate.vue
+++ /dev/null
@@ -1,216 +0,0 @@
-<script lang="tsx">
-  import type { MoveData, DragVerifyActionType } from './typing';
-  import { defineComponent, computed, unref, reactive, watch, ref } from 'vue';
-  import { useTimeoutFn } from '/@/hooks/core/useTimeout';
-  import BasicDragVerify from './DragVerify.vue';
-  import { hackCss } from '/@/utils/domUtils';
-  import { rotateProps } from './props';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  export default defineComponent({
-    name: 'ImgRotateDragVerify',
-    inheritAttrs: false,
-    props: rotateProps,
-    emits: ['success', 'change', 'update:value'],
-    setup(props, { emit, attrs, expose }) {
-      const basicRef = ref<Nullable<DragVerifyActionType>>(null);
-      const state = reactive({
-        showTip: false,
-        isPassing: false,
-        imgStyle: {},
-        randomRotate: 0,
-        currentRotate: 0,
-        toOrigin: false,
-        startTime: 0,
-        endTime: 0,
-        draged: false,
-      });
-      const { t } = useI18n();
-
-      watch(
-        () => state.isPassing,
-        (isPassing) => {
-          if (isPassing) {
-            const { startTime, endTime } = state;
-            const time = (endTime - startTime) / 1000;
-            emit('success', { isPassing, time: time.toFixed(1) });
-            emit('change', isPassing);
-            emit('update:value', isPassing);
-          }
-        }
-      );
-
-      const getImgWrapStyleRef = computed(() => {
-        const { imgWrapStyle, imgWidth } = props;
-        return {
-          width: `${imgWidth}px`,
-          height: `${imgWidth}px`,
-          ...imgWrapStyle,
-        };
-      });
-
-      const getFactorRef = computed(() => {
-        const { minDegree, maxDegree } = props;
-        if (minDegree === maxDegree) {
-          return Math.floor(1 + Math.random() * 1) / 10 + 1;
-        }
-        return 1;
-      });
-
-      function handleStart() {
-        state.startTime = new Date().getTime();
-      }
-
-      function handleDragBarMove(data: MoveData) {
-        state.draged = true;
-        const { imgWidth, height, maxDegree } = props;
-        const { moveX } = data;
-        const currentRotate = Math.ceil((moveX / (imgWidth! - parseInt(height as string))) * maxDegree! * unref(getFactorRef));
-        state.currentRotate = currentRotate;
-        state.imgStyle = hackCss('transform', `rotateZ(${state.randomRotate - currentRotate}deg)`);
-      }
-
-      function handleImgOnLoad() {
-        const { minDegree, maxDegree } = props;
-        const ranRotate = Math.floor(minDegree! + Math.random() * (maxDegree! - minDegree!)); // 鐢熸垚闅忔満瑙掑害
-        state.randomRotate = ranRotate;
-        state.imgStyle = hackCss('transform', `rotateZ(${ranRotate}deg)`);
-      }
-
-      function handleDragEnd() {
-        const { randomRotate, currentRotate } = state;
-        const { diffDegree } = props;
-
-        if (Math.abs(randomRotate - currentRotate) >= (diffDegree || 20)) {
-          state.imgStyle = hackCss('transform', `rotateZ(${randomRotate}deg)`);
-          state.toOrigin = true;
-          useTimeoutFn(() => {
-            state.toOrigin = false;
-            state.showTip = true;
-            //  鏃堕棿涓庡姩鐢绘椂闂翠繚鎸佷竴鑷�
-          }, 300);
-        } else {
-          checkPass();
-        }
-        state.showTip = true;
-      }
-
-      function checkPass() {
-        state.isPassing = true;
-        state.endTime = new Date().getTime();
-      }
-
-      function resume() {
-        state.showTip = false;
-        const basicEl = unref(basicRef);
-        if (!basicEl) {
-          return;
-        }
-        state.isPassing = false;
-
-        basicEl.resume();
-        handleImgOnLoad();
-      }
-
-      expose({ resume });
-
-      // handleImgOnLoad();
-      return () => {
-        const { src } = props;
-        const { toOrigin, isPassing, startTime, endTime } = state;
-        const imgCls: string[] = [];
-        if (toOrigin) {
-          imgCls.push('to-origin');
-        }
-        const time = (endTime - startTime) / 1000;
-
-        return (
-          <div class="ir-dv">
-            <div class={`ir-dv-img__wrap`} style={unref(getImgWrapStyleRef)}>
-              <img
-                src={src}
-                onLoad={handleImgOnLoad}
-                width={parseInt(props.width as string)}
-                class={imgCls}
-                style={state.imgStyle}
-                onClick={() => {
-                  resume();
-                }}
-                alt="verify"
-              />
-              {state.showTip && (
-                <span class={[`ir-dv-img__tip`, state.isPassing ? 'success' : 'error']}>
-                  {state.isPassing ? t('component.verify.time', { time: time.toFixed(1) }) : t('component.verify.error')}
-                </span>
-              )}
-              {!state.showTip && !state.draged && <span class={[`ir-dv-img__tip`, 'normal']}>{t('component.verify.redoTip')}</span>}
-            </div>
-            <BasicDragVerify
-              class={`ir-dv-drag__bar`}
-              onMove={handleDragBarMove}
-              onEnd={handleDragEnd}
-              onStart={handleStart}
-              ref={basicRef}
-              {...{ ...attrs, ...props }}
-              value={isPassing}
-              isSlot={true}
-            />
-          </div>
-        );
-      };
-    },
-  });
-</script>
-<style lang="less">
-  .ir-dv {
-    position: relative;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-
-    &-img__wrap {
-      position: relative;
-      overflow: hidden;
-      border-radius: 50%;
-
-      img {
-        width: 100%;
-        border-radius: 50%;
-
-        &.to-origin {
-          transition: transform 0.3s;
-        }
-      }
-    }
-
-    &-img__tip {
-      position: absolute;
-      bottom: 10px;
-      left: 0;
-      z-index: 1;
-      display: block;
-      width: 100%;
-      height: 30px;
-      font-size: 12px;
-      line-height: 30px;
-      color: @white;
-      text-align: center;
-
-      &.success {
-        background-color: fade(@success-color, 60%);
-      }
-
-      &.error {
-        background-color: fade(@error-color, 60%);
-      }
-
-      &.normal {
-        background-color: rgba(0, 0, 0, 0.3);
-      }
-    }
-
-    &-drag__bar {
-      margin-top: 20px;
-    }
-  }
-</style>
diff --git a/src/components/Verify/src/props.ts b/src/components/Verify/src/props.ts
deleted file mode 100644
index 1e14970..0000000
--- a/src/components/Verify/src/props.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-import type { PropType } from 'vue';
-import { useI18n } from '/@/hooks/web/useI18n';
-
-const { t } = useI18n();
-export const basicProps = {
-  value: {
-    type: Boolean as PropType<boolean>,
-    default: false,
-  },
-
-  isSlot: {
-    type: Boolean as PropType<boolean>,
-    default: false,
-  },
-
-  text: {
-    type: [String] as PropType<string>,
-    default: t('component.verify.dragText'),
-  },
-  successText: {
-    type: [String] as PropType<string>,
-    default: t('component.verify.successText'),
-  },
-  height: {
-    type: [Number, String] as PropType<number | string>,
-    default: 40,
-  },
-
-  width: {
-    type: [Number, String] as PropType<number | string>,
-    default: 220,
-  },
-
-  circle: {
-    type: Boolean as PropType<boolean>,
-    default: false,
-  },
-
-  wrapStyle: {
-    type: Object as PropType<any>,
-    default: {},
-  },
-  contentStyle: {
-    type: Object as PropType<any>,
-    default: {},
-  },
-  barStyle: {
-    type: Object as PropType<any>,
-    default: {},
-  },
-  actionStyle: {
-    type: Object as PropType<any>,
-    default: {},
-  },
-};
-
-export const rotateProps = {
-  ...basicProps,
-  src: {
-    type: String as PropType<string>,
-  },
-
-  imgWidth: {
-    type: Number as PropType<number>,
-    default: 260,
-  },
-
-  imgWrapStyle: {
-    type: Object as PropType<any>,
-    default: {},
-  },
-
-  minDegree: {
-    type: Number as PropType<number>,
-    default: 90,
-  },
-
-  maxDegree: {
-    type: Number as PropType<number>,
-    default: 270,
-  },
-
-  diffDegree: {
-    type: Number as PropType<number>,
-    default: 20,
-  },
-};
diff --git a/src/components/Verify/src/typing.ts b/src/components/Verify/src/typing.ts
deleted file mode 100644
index 48f7d4c..0000000
--- a/src/components/Verify/src/typing.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-export interface DragVerifyActionType {
-  resume: () => void;
-}
-
-export interface PassingData {
-  isPassing: boolean;
-  time: number;
-}
-
-export interface MoveData {
-  event: MouseEvent | TouchEvent;
-  moveDistance: number;
-  moveX: number;
-}
diff --git a/src/components/VirtualScroll/index.ts b/src/components/VirtualScroll/index.ts
deleted file mode 100644
index a4c6089..0000000
--- a/src/components/VirtualScroll/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { withInstall } from '/@/utils/index';
-import vScroll from './src/VirtualScroll.vue';
-
-export const VScroll = withInstall(vScroll);
diff --git a/src/components/VirtualScroll/src/VirtualScroll.vue b/src/components/VirtualScroll/src/VirtualScroll.vue
deleted file mode 100644
index e010423..0000000
--- a/src/components/VirtualScroll/src/VirtualScroll.vue
+++ /dev/null
@@ -1,180 +0,0 @@
-<script lang="tsx">
-  import { defineComponent, computed, ref, unref, reactive, onMounted, watch, nextTick, CSSProperties } from 'vue';
-  import { useEventListener } from '/@/hooks/event/useEventListener';
-  import { getSlot } from '/@/utils/helper/tsxHelper';
-
-  type NumberOrNumberString = PropType<string | number | undefined>;
-
-  const props = {
-    height: [Number, String] as NumberOrNumberString,
-    maxHeight: [Number, String] as NumberOrNumberString,
-    maxWidth: [Number, String] as NumberOrNumberString,
-    minHeight: [Number, String] as NumberOrNumberString,
-    minWidth: [Number, String] as NumberOrNumberString,
-    width: [Number, String] as NumberOrNumberString,
-    bench: {
-      type: [Number, String] as NumberOrNumberString,
-      default: 0,
-    },
-    itemHeight: {
-      type: [Number, String] as NumberOrNumberString,
-      required: true,
-    },
-    items: {
-      type: Array as PropType<any[]>,
-      default: () => [],
-    },
-  };
-
-  const prefixCls = 'virtual-scroll';
-
-  function convertToUnit(str: string | number | null | undefined, unit = 'px'): string | undefined {
-    if (str == null || str === '') {
-      return undefined;
-    } else if (isNaN(+str!)) {
-      return String(str);
-    } else {
-      return `${Number(str)}${unit}`;
-    }
-  }
-
-  export default defineComponent({
-    name: 'VirtualScroll',
-    props,
-    setup(props, { slots }) {
-      const wrapElRef = ref<HTMLDivElement | null>(null);
-      const state = reactive({
-        first: 0,
-        last: 0,
-        scrollTop: 0,
-      });
-
-      const getBenchRef = computed(() => {
-        return parseInt(props.bench as string, 10);
-      });
-
-      const getItemHeightRef = computed(() => {
-        return parseInt(props.itemHeight as string, 10);
-      });
-
-      const getFirstToRenderRef = computed(() => {
-        return Math.max(0, state.first - unref(getBenchRef));
-      });
-
-      const getLastToRenderRef = computed(() => {
-        return Math.min((props.items || []).length, state.last + unref(getBenchRef));
-      });
-
-      const getContainerStyleRef = computed((): CSSProperties => {
-        return {
-          height: convertToUnit((props.items || []).length * unref(getItemHeightRef)),
-        };
-      });
-
-      const getWrapStyleRef = computed((): CSSProperties => {
-        const styles: Recordable<string> = {};
-        const height = convertToUnit(props.height);
-        const minHeight = convertToUnit(props.minHeight);
-        const minWidth = convertToUnit(props.minWidth);
-        const maxHeight = convertToUnit(props.maxHeight);
-        const maxWidth = convertToUnit(props.maxWidth);
-        const width = convertToUnit(props.width);
-
-        if (height) styles.height = height;
-        if (minHeight) styles.minHeight = minHeight;
-        if (minWidth) styles.minWidth = minWidth;
-        if (maxHeight) styles.maxHeight = maxHeight;
-        if (maxWidth) styles.maxWidth = maxWidth;
-        if (width) styles.width = width;
-        return styles;
-      });
-
-      watch([() => props.itemHeight, () => props.height], () => {
-        onScroll();
-      });
-
-      function getLast(first: number): number {
-        const wrapEl = unref(wrapElRef);
-        if (!wrapEl) {
-          return 0;
-        }
-        const height = parseInt(props.height || 0, 10) || wrapEl.clientHeight;
-
-        return first + Math.ceil(height / unref(getItemHeightRef));
-      }
-
-      function getFirst(): number {
-        return Math.floor(state.scrollTop / unref(getItemHeightRef));
-      }
-
-      function onScroll() {
-        const wrapEl = unref(wrapElRef);
-        if (!wrapEl) {
-          return;
-        }
-        state.scrollTop = wrapEl.scrollTop;
-        state.first = getFirst();
-        state.last = getLast(state.first);
-      }
-
-      function renderChildren() {
-        const { items = [] } = props;
-        return items.slice(unref(getFirstToRenderRef), unref(getLastToRenderRef)).map(genChild);
-      }
-
-      function genChild(item: any, index: number) {
-        index += unref(getFirstToRenderRef);
-        const top = convertToUnit(index * unref(getItemHeightRef));
-        return (
-          <div class={`${prefixCls}__item`} style={{ top }} key={index}>
-            {getSlot(slots, 'default', { index, item })}
-          </div>
-        );
-      }
-
-      onMounted(() => {
-        state.last = getLast(0);
-        nextTick(() => {
-          const wrapEl = unref(wrapElRef);
-          if (!wrapEl) {
-            return;
-          }
-          useEventListener({
-            el: wrapEl,
-            name: 'scroll',
-            listener: onScroll,
-            wait: 0,
-          });
-        });
-      });
-
-      return () => (
-        <div class={prefixCls} style={unref(getWrapStyleRef)} ref={wrapElRef}>
-          <div class={`${prefixCls}__container`} style={unref(getContainerStyleRef)}>
-            {renderChildren()}
-          </div>
-        </div>
-      );
-    },
-  });
-</script>
-<style scoped lang="less">
-  .virtual-scroll {
-    position: relative;
-    display: block;
-    width: 100%;
-    max-width: 100%;
-    overflow: auto;
-    flex: 1 1 auto;
-
-    &__container {
-      display: block;
-    }
-
-    &__item {
-      position: absolute;
-      right: 0;
-      left: 0;
-    }
-  }
-</style>
diff --git a/src/components/chart/Bar.vue b/src/components/chart/Bar.vue
deleted file mode 100644
index 3822eaa..0000000
--- a/src/components/chart/Bar.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, reactive, watchEffect } from 'vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  export default defineComponent({
-    name: 'bar',
-    props: {
-      chartData: {
-        type: Array,
-        default: () => [],
-      },
-      option: {
-        type: Object,
-        default: () => ({}),
-      },
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup(props) {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions, echarts } = useECharts(chartRef as Ref<HTMLDivElement>);
-      const option = reactive({
-        tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow',
-            label: {
-              show: true,
-              backgroundColor: '#333',
-            },
-          },
-        },
-        xAxis: {
-          type: 'category',
-          data: [],
-        },
-        yAxis: {
-          type: 'value',
-        },
-        series: [
-          {
-            name: 'bar',
-            type: 'bar',
-            data: [],
-          },
-        ],
-      });
-
-      watchEffect(() => {
-        props.chartData && initCharts();
-      });
-
-      function initCharts() {
-        if (props.option) {
-          Object.assign(option, props.option);
-        }
-        let seriesData = props.chartData.map((item) => {
-          return item.value;
-        });
-        let xAxisData = props.chartData.map((item) => {
-          return item.name;
-        });
-        option.series[0].data = seriesData;
-        option.xAxis.data = xAxisData;
-        setOptions(option);
-      }
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/components/chart/BarAndLine.vue b/src/components/chart/BarAndLine.vue
deleted file mode 100644
index 2c4cd34..0000000
--- a/src/components/chart/BarAndLine.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, reactive, watchEffect } from 'vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  export default defineComponent({
-    name: 'barAndLine',
-    props: {
-      chartData: {
-        type: Array,
-        default: () => [],
-      },
-      option: {
-        type: Object,
-        default: () => ({}),
-      },
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup(props) {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions, echarts } = useECharts(chartRef as Ref<HTMLDivElement>);
-      const option = reactive({
-        tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow',
-            label: {
-              show: true,
-              backgroundColor: '#333',
-            },
-          },
-        },
-        xAxis: {
-          type: 'category',
-          data: [],
-        },
-        yAxis: {
-          type: 'value',
-        },
-        series: [
-          {
-            name: 'bar',
-            type: 'bar',
-            data: [],
-          },
-        ],
-      });
-
-      watchEffect(() => {
-        props.chartData && initCharts();
-      });
-
-      function initCharts() {
-        if (props.option) {
-          Object.assign(option, props.option);
-        }
-        //鍥句緥绫诲瀷
-        let typeArr = Array.from(new Set(props.chartData.map((item) => item.type)));
-        //杞存暟鎹�
-        let xAxisData = Array.from(new Set(props.chartData.map((item) => item.name)));
-        let seriesData = [];
-        typeArr.forEach((type) => {
-          let obj = { name: type };
-          let chartArr = props.chartData.filter((item) => type === item.type);
-          //data鏁版嵁
-          obj['data'] = chartArr.map((item) => item.value);
-          obj['type'] = chartArr[0].seriesType;
-          seriesData.push(obj);
-        });
-        option.series = seriesData;
-        option.xAxis.data = xAxisData;
-        setOptions(option);
-      }
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/components/chart/BarMulti.vue b/src/components/chart/BarMulti.vue
deleted file mode 100644
index a094f3f..0000000
--- a/src/components/chart/BarMulti.vue
+++ /dev/null
@@ -1,98 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, reactive, watchEffect } from 'vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  export default defineComponent({
-    name: 'barMulti',
-    props: {
-      chartData: {
-        type: Array,
-        default: () => [],
-        required: true,
-      },
-      option: {
-        type: Object,
-        default: () => ({}),
-      },
-      type: {
-        type: String as PropType<string>,
-        default: 'bar',
-      },
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    emits: ['click'],
-    setup(props, { emit }) {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions, getInstance } = useECharts(chartRef as Ref<HTMLDivElement>);
-      const option = reactive({
-        tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow',
-            label: {
-              show: true,
-              backgroundColor: '#333',
-            },
-          },
-        },
-        legend: {
-          top: 30,
-        },
-        grid: {
-          top: 60,
-        },
-        xAxis: {
-          type: 'category',
-          data: [],
-        },
-        yAxis: {
-          type: 'value',
-        },
-        series: [],
-      });
-
-      watchEffect(() => {
-        props.chartData && initCharts();
-      });
-
-      function initCharts() {
-        if (props.option) {
-          Object.assign(option, props.option);
-        }
-        //鍥句緥绫诲瀷
-        let typeArr = Array.from(new Set(props.chartData.map((item) => item.type)));
-        //杞存暟鎹�
-        let xAxisData = Array.from(new Set(props.chartData.map((item) => item.name)));
-        let seriesData = [];
-        typeArr.forEach((type) => {
-          let obj = { name: type, type: props.type };
-          let chartArr = props.chartData.filter((item) => type === item.type);
-          //data鏁版嵁
-          obj['data'] = chartArr.map((item) => item.value);
-          seriesData.push(obj);
-        });
-        option.series = seriesData;
-        option.xAxis.data = xAxisData;
-        setOptions(option);
-        getInstance()?.off('click', onClick);
-        getInstance()?.on('click', onClick);
-      }
-
-      function onClick(params) {
-        emit('click', params);
-      }
-
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/components/chart/ChartCard.vue b/src/components/chart/ChartCard.vue
deleted file mode 100644
index ea8ad19..0000000
--- a/src/components/chart/ChartCard.vue
+++ /dev/null
@@ -1,110 +0,0 @@
-<template>
-  <a-card :loading="loading" :body-style="{ padding: '20px 24px 8px' }" :bordered="false">
-    <div class="chart-card-header">
-      <div class="meta">
-        <span class="chart-card-title">{{ title }}</span>
-        <span class="chart-card-action">
-          <slot name="action"></slot>
-        </span>
-      </div>
-      <div class="total"
-        ><span>{{ total }}</span></div
-      >
-    </div>
-    <div class="chart-card-content">
-      <div class="content-fix">
-        <slot></slot>
-      </div>
-    </div>
-    <div class="chart-card-footer">
-      <div class="field">
-        <slot name="footer"></slot>
-      </div>
-    </div>
-  </a-card>
-</template>
-
-<script lang="ts" setup>
-  defineProps({
-    title: {
-      type: String,
-      default: '',
-    },
-    total: {
-      type: [Number, String],
-      default: '',
-    },
-    loading: {
-      type: Boolean,
-      default: false,
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .chart-card-header {
-    position: relative;
-    overflow: hidden;
-    width: 100%;
-
-    .meta {
-      position: relative;
-      overflow: hidden;
-      width: 100%;
-      color: rgba(0, 0, 0, 0.45);
-      font-size: 14px;
-      line-height: 22px;
-    }
-  }
-
-  .chart-card-action {
-    cursor: pointer;
-    position: absolute;
-    top: 0;
-    right: 0;
-  }
-
-  .chart-card-footer {
-    border-top: 1px solid #e8e8e8;
-    padding-top: 9px;
-    margin-top: 8px;
-
-    > * {
-      position: relative;
-    }
-
-    .field {
-      white-space: nowrap;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      margin: 0;
-    }
-  }
-
-  .chart-card-content {
-    margin-bottom: 12px;
-    position: relative;
-    height: 46px;
-    width: 100%;
-
-    .content-fix {
-      position: absolute;
-      left: 0;
-      bottom: 0;
-      width: 100%;
-    }
-  }
-
-  .total {
-    overflow: hidden;
-    text-overflow: ellipsis;
-    word-break: break-all;
-    white-space: nowrap;
-    color: #000;
-    margin-top: 4px;
-    margin-bottom: 0;
-    font-size: 30px;
-    line-height: 38px;
-    height: 38px;
-  }
-</style>
diff --git a/src/components/chart/Gauge.vue b/src/components/chart/Gauge.vue
deleted file mode 100644
index 2cf852e..0000000
--- a/src/components/chart/Gauge.vue
+++ /dev/null
@@ -1,100 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, reactive, watchEffect } from 'vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-  import { GaugeChart } from 'echarts/charts';
-  export default defineComponent({
-    name: 'Gauge',
-    props: {
-      chartData: {
-        type: Object as PropType<Object>,
-        default: () => [],
-      },
-      option: {
-        type: Object,
-        default: () => ({}),
-      },
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup(props) {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions, echarts } = useECharts(chartRef as Ref<HTMLDivElement>);
-      const option = reactive({
-        series: [
-          {
-            type: 'gauge',
-            progress: {
-              show: true,
-              width: 12,
-            },
-            axisLine: {
-              lineStyle: {
-                width: 12,
-              },
-            },
-            axisTick: {
-              show: false,
-            },
-            splitLine: {
-              length: 12,
-              lineStyle: {
-                width: 1,
-                color: '#999',
-              },
-            },
-            axisLabel: {
-              distance: 25,
-              color: '#999',
-              fontSize: 12,
-            },
-            anchor: {
-              show: true,
-              showAbove: true,
-              size: 20,
-              itemStyle: {
-                borderWidth: 5,
-              },
-            },
-            title: {},
-            detail: {
-              valueAnimation: true,
-              fontSize: 25,
-              formatter: '{value}%',
-              offsetCenter: [0, '80%'],
-            },
-            data: [
-              {
-                value: 70,
-                name: '鏈湴纾佺洏',
-              },
-            ],
-          },
-        ],
-      });
-
-      watchEffect(() => {
-        props.chartData && initCharts();
-      });
-
-      function initCharts() {
-        echarts.use(GaugeChart);
-        if (props.option) {
-          Object.assign(option, props.option);
-        }
-        option.series[0].data[0].name = props.chartData.name;
-        option.series[0].data[0].value = props.chartData.value;
-        setOptions(option);
-      }
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/components/chart/HeadInfo.vue b/src/components/chart/HeadInfo.vue
deleted file mode 100644
index 741745c..0000000
--- a/src/components/chart/HeadInfo.vue
+++ /dev/null
@@ -1,75 +0,0 @@
-<template>
-  <div class="head-info" :class="center && 'center'">
-    <span>{{ title }}</span>
-    <p>{{ content }} <a-icon :type="icon" style="font-size: 24px; color: #2b99ff" /></p>
-    <em v-if="bordered" />
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-
-  export default defineComponent({
-    name: 'HeadInfo',
-    props: {
-      title: {
-        type: String,
-        default: '',
-      },
-      content: {
-        type: String,
-        default: '',
-      },
-      bordered: {
-        type: Boolean,
-        default: false,
-      },
-      center: {
-        type: Boolean,
-        default: true,
-      },
-      icon: {
-        type: String,
-        default: false,
-      },
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .head-info {
-    position: relative;
-    text-align: left;
-    padding: 0 32px 0 0;
-    min-width: 125px;
-
-    &.center {
-      text-align: center;
-      padding: 0 32px;
-    }
-
-    span {
-      color: rgba(0, 0, 0, 0.45);
-      display: inline-block;
-      font-size: 14px;
-      line-height: 22px;
-      margin-bottom: 4px;
-    }
-
-    p {
-      color: rgba(0, 0, 0, 0.85);
-      font-size: 24px;
-      line-height: 32px;
-      margin: 0;
-    }
-
-    em {
-      background-color: #e8e8e8;
-      position: absolute;
-      height: 56px;
-      width: 1px;
-      top: 0;
-      right: 0;
-    }
-  }
-</style>
diff --git a/src/components/chart/Line.vue b/src/components/chart/Line.vue
deleted file mode 100644
index 3a2443f..0000000
--- a/src/components/chart/Line.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, reactive, watchEffect } from 'vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  export default defineComponent({
-    name: 'line',
-    props: {
-      chartData: {
-        type: Array,
-        default: () => [],
-      },
-      option: {
-        type: Object,
-        default: () => ({}),
-      },
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup(props) {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions, echarts } = useECharts(chartRef as Ref<HTMLDivElement>);
-      const option = reactive({
-        tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow',
-            label: {
-              show: true,
-              backgroundColor: '#333',
-            },
-          },
-        },
-        xAxis: {
-          type: 'category',
-          data: [],
-        },
-        yAxis: {
-          type: 'value',
-        },
-        series: [
-          {
-            type: 'line',
-            showSymbol: false,
-            smooth: true,
-            areaStyle: {},
-            data: [],
-          },
-        ],
-      });
-
-      watchEffect(() => {
-        props.chartData && initCharts();
-      });
-
-      function initCharts() {
-        if (props.option) {
-          Object.assign(option, props.option);
-        }
-        let seriesData = props.chartData.map((item) => {
-          return item.value;
-        });
-        let xAxisData = props.chartData.map((item) => {
-          return item.name;
-        });
-        option.series[0].data = seriesData;
-        option.xAxis.data = xAxisData;
-        setOptions(option);
-      }
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/components/chart/LineMulti.vue b/src/components/chart/LineMulti.vue
deleted file mode 100644
index 73a9a28..0000000
--- a/src/components/chart/LineMulti.vue
+++ /dev/null
@@ -1,98 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, reactive, watchEffect } from 'vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  export default defineComponent({
-    name: 'lineMulti',
-    props: {
-      chartData: {
-        type: Array,
-        default: () => [],
-        required: true,
-      },
-      option: {
-        type: Object,
-        default: () => ({}),
-      },
-      type: {
-        type: String as PropType<string>,
-        default: 'bar',
-      },
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    emits: ['click'],
-    setup(props, { emit }) {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions, getInstance } = useECharts(chartRef as Ref<HTMLDivElement>);
-      const option = reactive({
-        tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow',
-            label: {
-              show: true,
-              backgroundColor: '#333',
-            },
-          },
-        },
-        legend: {
-          top: 30,
-        },
-        grid: {
-          top: 60,
-        },
-        xAxis: {
-          type: 'category',
-          data: [],
-        },
-        yAxis: {
-          type: 'value',
-        },
-        series: [],
-      });
-
-      watchEffect(() => {
-        props.chartData && initCharts();
-      });
-
-      function initCharts() {
-        if (props.option) {
-          Object.assign(option, props.option);
-        }
-        //鍥句緥绫诲瀷
-        let typeArr = Array.from(new Set(props.chartData.map((item) => item.type)));
-        //杞存暟鎹�
-        let xAxisData = Array.from(new Set(props.chartData.map((item) => item.name)));
-        let seriesData = [];
-        typeArr.forEach((type) => {
-          let obj = { name: type, type: props.type };
-          let chartArr = props.chartData.filter((item) => type === item.type);
-          //data鏁版嵁
-          obj['data'] = chartArr.map((item) => item.value);
-          seriesData.push(obj);
-        });
-        option.series = seriesData;
-        option.xAxis.data = xAxisData;
-        setOptions(option);
-        getInstance()?.off('click', onClick);
-        getInstance()?.on('click', onClick);
-      }
-
-      function onClick(params) {
-        emit('click', params);
-      }
-
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/components/chart/Pie.vue b/src/components/chart/Pie.vue
deleted file mode 100644
index 6dafddc..0000000
--- a/src/components/chart/Pie.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, watchEffect, reactive, watch } from 'vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  export default defineComponent({
-    name: 'Pie',
-    props: {
-      chartData: {
-        type: Array,
-        default: () => [],
-      },
-      size: {
-        type: Object,
-        default: () => {},
-      },
-      option: {
-        type: Object,
-        default: () => ({}),
-      },
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    emits: ['click'],
-    setup(props, { emit }) {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions, getInstance, resize } = useECharts(chartRef as Ref<HTMLDivElement>);
-      const option = reactive({
-        tooltip: {
-          formatter: '{b} ({c})',
-        },
-        series: [
-          {
-            type: 'pie',
-            radius: '72%',
-            center: ['50%', '55%'],
-            data: [],
-            labelLine: { show: true },
-            label: {
-              show: true,
-              formatter: '{b} \n ({d}%)',
-              color: '#B1B9D3',
-            },
-          },
-        ],
-      });
-
-      watchEffect(() => {
-        props.chartData && initCharts();
-      });
-      /**
-       * 鐩戝惉鎷栨嫿澶у皬鍙樺寲
-       */
-      watch(
-        () => props.size,
-        () => {
-          resize();
-        },
-        {
-          immediate: true,
-        }
-      );
-      function initCharts() {
-        if (props.option) {
-          Object.assign(option, props.option);
-        }
-        option.series[0].data = props.chartData;
-        setOptions(option);
-        resize();
-        getInstance()?.off('click', onClick);
-        getInstance()?.on('click', onClick);
-      }
-
-      function onClick(params) {
-        emit('click', params);
-      }
-
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/components/chart/README.md b/src/components/chart/README.md
deleted file mode 100644
index ee301ef..0000000
--- a/src/components/chart/README.md
+++ /dev/null
@@ -1,282 +0,0 @@
-# 鎶ヨ〃缁勪欢鏂囨。
-
-## 鏌辩姸鍥�
-
-##### 寮曠敤鏂瑰紡
-
-```js
-import Bar from '/@/components/chart/Bar.vue';
-```
-
-##### 鍙傛暟鍒楄〃
-
-| 鍙傛暟鍚�    | 绫诲瀷   | 蹇呭~ | 璇存槑       |
-| --------- | ------ | ---- | ---------- |
-| chartData | array  | 鉁旓笍   | 鎶ヨ〃鏁版嵁婧� |
-| width     | number |      | 鎶ヨ〃瀹藉害   |
-| height    | number |      | 鎶ヨ〃楂樺害   |
-
-##### chartData 绀轰緥
-
-```json
-[
-  {
-    "name": "1鏈�",
-    "value": 320
-  },
-  {
-    "name": "2鏈�",
-    "value": 457
-  },
-  {
-    "name": "3鏈�",
-    "value": 182
-  }
-]
-```
-
-##### 浠g爜绀轰緥
-
-```html
-<template>
-  <Bar :chartData="chartData"></Bar>
-</template>
-
-<script lang="ts" setup>
-  import Bar from '/@/components/chart/Bar.vue';
-  const chartData = [
-    {
-      name: '1鏈�',
-      value: 320,
-    },
-    {
-      name: '2鏈�',
-      value: 457,
-    },
-    {
-      name: '3鏈�',
-      value: 182,
-    },
-  ];
-</script>
-
-<style></style>
-```
-
-## 澶氬垪鏌辩姸鍥�
-
-##### 寮曠敤鏂瑰紡
-
-```js
-import BarMulti from '/@/components/chart/BarMulti.vue';
-```
-
-##### 鍙傛暟鍒楄〃
-
-| 鍙傛暟鍚�    | 绫诲瀷   | 蹇呭~ | 璇存槑       |
-| --------- | ------ | ---- | ---------- |
-| chartData | array  | 鉁旓笍   | 鎶ヨ〃鏁版嵁婧� |
-| width     | number |      | 鎶ヨ〃瀹藉害   |
-| height    | number |      | 鎶ヨ〃楂樺害   |
-
-##### chartData 绀轰緥
-
-```json
-[
-  {
-    "name": "1鏈�",
-    "value": 320,
-    "type": "2021"
-  },
-  {
-    "name": "2鏈�",
-    "value": 457,
-    "type": "2021"
-  },
-  {
-    "name": "3鏈�",
-    "value": 182,
-    "type": "2021"
-  },
-  {
-    "name": "1鏈�",
-    "value": 240,
-    "type": "2022"
-  },
-  {
-    "name": "2鏈�",
-    "value": 357,
-    "type": "2022"
-  },
-  {
-    "name": "3鏈�",
-    "value": 456,
-    "type": "2022"
-  }
-]
-```
-
-## 杩蜂綘鏌辩姸鍥�
-
-鍚屾煴褰㈠浘锛屼慨鏀归厤缃嵆鍙�
-
-## 闈㈢Н鍥�
-
-##### 寮曠敤鏂瑰紡
-
-```js
-import Line from '/@/components/chart/Line.vue';
-```
-
-##### 鍙傛暟鍒楄〃
-
-| 鍙傛暟鍚�    | 绫诲瀷   | 蹇呭~ | 璇存槑       |
-| --------- | ------ | ---- | ---------- |
-| chartData | array  | 鉁旓笍   | 鎶ヨ〃鏁版嵁婧� |
-| width     | number |      | 鎶ヨ〃瀹藉害   |
-| height    | number |      | 鎶ヨ〃楂樺害   |
-| option    | object |      | 閰嶇疆椤�     |
-
-##### chartData 绀轰緥
-
-```json
-[
-  {
-    "name": "1鏈�",
-    "value": 320
-  },
-  {
-    "name": "2鏈�",
-    "value": 457
-  },
-  {
-    "name": "3鏈�",
-    "value": 182
-  }
-]
-```
-
-## 澶氳鎶樼嚎鍥�
-
-##### 寮曠敤鏂瑰紡
-
-```js
-import LineMulti from '/@/components/chart/LineMulti.vue';
-```
-
-##### 鍙傛暟鍒楄〃
-
-| 鍙傛暟鍚�    | 绫诲瀷   | 蹇呭~ | 璇存槑       |
-| --------- | ------ | ---- | ---------- |
-| chartData | array  | 鉁旓笍   | 鎶ヨ〃鏁版嵁婧� |
-| width     | number |      | 鎶ヨ〃瀹藉害   |
-| height    | number |      | 鎶ヨ〃楂樺害   |
-| option    | object |      | 閰嶇疆椤�     |
-
-##### chartData 绀轰緥
-
-鍚屾煴褰㈠浘
-
-## 楗肩姸鍥�
-
-##### 寮曠敤鏂瑰紡
-
-```js
-import Pie from '/@/components/chart/Pie';
-```
-
-##### 鍙傛暟鍒楄〃
-
-| 鍙傛暟鍚�    | 绫诲瀷   | 蹇呭~ | 璇存槑       |
-| --------- | ------ | ---- | ---------- |
-| chartData | array  | 鉁旓笍   | 鎶ヨ〃鏁版嵁婧� |
-| width     | number |      | 鎶ヨ〃瀹藉害   |
-| height    | number |      | 鎶ヨ〃楂樺害   |
-| option    | object |      | 閰嶇疆椤�     |
-
-##### chartData 绀轰緥
-
-```json
-[
-  { "name": "涓�鏈�", "value": 40 },
-  { "name": "浜屾湀", "value": 21 },
-  { "name": "涓夋湀", "value": 17 },
-  { "name": "鍥涙湀", "value": 13 },
-  { "name": "浜旀湀", "value": 9 }
-]
-```
-
-## 闆疯揪鍥�
-
-##### 寮曠敤鏂瑰紡
-
-```js
-import Radar from '/@/components/chart/Radar';
-```
-
-##### 鍙傛暟鍒楄〃
-
-| 鍙傛暟鍚�    | 绫诲瀷   | 蹇呭~ | 璇存槑       |
-| --------- | ------ | ---- | ---------- |
-| chartData | array  | 鉁旓笍   | 鎶ヨ〃鏁版嵁婧� |
-| width     | number |      | 鎶ヨ〃瀹藉害   |
-| height    | number |      | 鎶ヨ〃楂樺害   |
-| option    | object |      | 閰嶇疆椤�     |
-
-##### chartData 绀轰緥
-
-```json
-[
-  { "item": "涓�鏈�", "score": 40 },
-  { "item": "浜屾湀", "score": 20 },
-  { "item": "涓夋湀", "score": 67 },
-  { "item": "鍥涙湀", "score": 43 },
-  { "item": "浜旀湀", "score": 90 }
-]
-```
-
-## 浠〃鐩�
-
-##### 寮曠敤鏂瑰紡
-
-```js
-import Gauge from '/@/components/chart/Gauge';
-```
-
-##### 鍙傛暟鍒楄〃
-
-| 鍙傛暟鍚�    | 绫诲瀷   | 蹇呭~ | 璇存槑       |
-| --------- | ------ | ---- | ---------- |
-| chartData | array  | 鉁旓笍   | 鎶ヨ〃鏁版嵁婧� |
-| width     | number |      | 鎶ヨ〃瀹藉害   |
-| height    | number |      | 鎶ヨ〃楂樺害   |
-| option    | object |      | 閰嶇疆椤�     |
-
-## 鎺掑悕鍒楄〃
-
-##### 寮曠敤鏂瑰紡
-
-```js
-import RankList from '@/components/chart/RankList';
-```
-
-##### 鍙傛暟鍒楄〃
-
-| 鍙傛暟鍚� | 绫诲瀷   | 蹇呭~ | 璇存槑                     |
-| ------ | ------ | ---- | ------------------------ |
-| title  | string |      | 鎶ヨ〃鏍囬                 |
-| list   | array  |      | 鎺掑悕鍒楄〃鏁版嵁             |
-| height | number |      | 鎶ヨ〃楂樺害锛岄粯璁よ嚜閫傚簲楂樺害 |
-
-##### list 绀轰緥
-
-```json
-[
-  { "name": "鍖椾含鏈濋槼 1 鍙峰簵", "total": 1981 },
-  { "name": "鍖椾含鏈濋槼 2 鍙峰簵", "total": 1359 },
-  { "name": "鍖椾含鏈濋槼 3 鍙峰簵", "total": 1354 },
-  { "name": "鍖椾含鏈濋槼 4 鍙峰簵", "total": 263 },
-  { "name": "鍖椾含鏈濋槼 5 鍙峰簵", "total": 446 },
-  { "name": "鍖椾含鏈濋槼 6 鍙峰簵", "total": 796 }
-]
-```
diff --git a/src/components/chart/Radar.vue b/src/components/chart/Radar.vue
deleted file mode 100644
index e4ef64c..0000000
--- a/src/components/chart/Radar.vue
+++ /dev/null
@@ -1,96 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, reactive, watchEffect } from 'vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  export default defineComponent({
-    name: 'Radar',
-    props: {
-      chartData: {
-        type: Array,
-        default: () => [],
-      },
-      option: {
-        type: Object,
-        default: () => ({}),
-      },
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup(props) {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions, echarts } = useECharts(chartRef as Ref<HTMLDivElement>);
-      const option = reactive({
-        title: {
-          text: '鍩虹闆疯揪鍥�',
-        },
-        legend: {
-          data: ['鏂囩患', '鐞嗙患'],
-        },
-        radar: {
-          indicator: [
-            { name: '鍘嗗彶', max: 100 },
-            { name: '鍦扮悊', max: 110 },
-            { name: '鐢熺墿', max: 120 },
-            { name: '鍖栧', max: 130 },
-            { name: '鐗╃悊', max: 140 },
-            { name: '鏀挎不', max: 150 },
-          ],
-        },
-        series: [
-          {
-            type: 'radar',
-            data: [
-              {
-                value: [82, 70, 60, 55, 90, 66],
-                name: '鏂囩患',
-              },
-            ],
-          },
-        ],
-      });
-
-      watchEffect(() => {
-        props.chartData && initCharts();
-      });
-
-      function initCharts() {
-        if (props.option) {
-          Object.assign(option, props.option);
-        }
-        //鍥句緥绫诲瀷
-        let typeArr = Array.from(new Set(props.chartData.map((item) => item.type)));
-        //闆疯揪鏁版嵁
-        let indicator = Array.from(
-          new Set(
-            props.chartData.map((item) => {
-              let { name, max } = item;
-              return { name, max };
-            })
-          )
-        );
-
-        let data = [];
-        typeArr.forEach((type) => {
-          let obj = { name: type };
-          let chartArr = props.chartData.filter((item) => type === item.type);
-          obj['value'] = chartArr.map((item) => item.value);
-          //data鏁版嵁
-          data.push(obj);
-        });
-        option.radar.indicator = indicator;
-        option.series[0]['data'] = data;
-        setOptions(option);
-      }
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/components/chart/RankList.vue b/src/components/chart/RankList.vue
deleted file mode 100644
index e2022a4..0000000
--- a/src/components/chart/RankList.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<template>
-  <div class="rank">
-    <h4 class="title">{{ title }}</h4>
-    <ul class="list" :style="{ height: height ? `${height}px` : 'auto', overflow: 'auto' }">
-      <li :key="index" v-for="(item, index) in list">
-        <span :class="index < 3 ? 'active' : null">{{ index + 1 }}</span>
-        <span>{{ item.name }}</span>
-        <span>{{ item.total }}</span>
-      </li>
-    </ul>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  export default defineComponent({
-    name: 'RankList',
-    props: {
-      title: {
-        type: String,
-        default: '',
-      },
-      list: {
-        type: Array,
-        default: null,
-      },
-      height: {
-        type: Number,
-        default: null,
-      },
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .rank {
-    padding: 0 32px 32px 72px;
-
-    .list {
-      margin: 25px 0 0;
-      padding: 0;
-      list-style: none;
-
-      li {
-        margin-top: 16px;
-
-        span {
-          color: rgba(0, 0, 0, 0.65);
-          font-size: 14px;
-          line-height: 22px;
-
-          &:first-child {
-            background-color: #f5f5f5;
-            border-radius: 20px;
-            display: inline-block;
-            font-size: 12px;
-            font-weight: 600;
-            margin-right: 24px;
-            height: 20px;
-            line-height: 20px;
-            width: 20px;
-            text-align: center;
-          }
-          &.active {
-            background-color: #314659;
-            color: #fff;
-          }
-          &:last-child {
-            float: right;
-          }
-        }
-      }
-    }
-  }
-
-  .mobile .rank {
-    padding: 0 32px 32px 32px;
-  }
-</style>
diff --git a/src/components/chart/StackBar.vue b/src/components/chart/StackBar.vue
deleted file mode 100644
index 30b2f3d..0000000
--- a/src/components/chart/StackBar.vue
+++ /dev/null
@@ -1,107 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, reactive, watchEffect, watch } from 'vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  export default defineComponent({
-    name: 'StackBar',
-    props: {
-      chartData: {
-        type: Array,
-        default: () => [],
-        required: true,
-      },
-      size: {
-        type: Object,
-        default: () => {},
-      },
-      option: {
-        type: Object,
-        default: () => ({}),
-      },
-      type: {
-        type: String as PropType<string>,
-        default: 'bar',
-      },
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup(props) {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions, echarts, resize } = useECharts(chartRef as Ref<HTMLDivElement>);
-      const option = reactive({
-        tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow',
-            label: {
-              show: true,
-              backgroundColor: '#333',
-            },
-          },
-        },
-        legend: {
-          top: 30,
-        },
-        grid: {
-          top: 60,
-        },
-        xAxis: {
-          type: 'value',
-        },
-        yAxis: {
-          type: 'category',
-          data: [],
-        },
-        series: [],
-      });
-
-      watchEffect(() => {
-        props.chartData && initCharts();
-      });
-      /**
-       * 鐩戝惉鎷栨嫿澶у皬鍙樺寲
-       */
-      watch(
-        () => props.size,
-        () => {
-          console.log('props.size', props.size);
-          resize();
-        },
-        {
-          immediate: true,
-        }
-      );
-      function initCharts() {
-        if (props.option) {
-          Object.assign(option, props.option);
-        }
-        //鍥句緥绫诲瀷
-        let typeArr = Array.from(new Set(props.chartData.map((item) => item.type)));
-        //杞存暟鎹�
-        let yAxisData = Array.from(new Set(props.chartData.map((item) => item.name)));
-        let seriesData = [];
-        typeArr.forEach((type) => {
-          let obj = { name: type, type: props.type, stack: 'total' };
-          let chartArr = props.chartData.filter((item) => type === item.type);
-          //data鏁版嵁
-          obj['data'] = chartArr.map((item) => item.value);
-          seriesData.push(obj);
-        });
-        option.series = seriesData;
-        option.yAxis.data = yAxisData;
-        setOptions(option);
-      }
-
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/components/chart/Trend.vue b/src/components/chart/Trend.vue
deleted file mode 100644
index 9294219..0000000
--- a/src/components/chart/Trend.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-<template>
-  <div class="chart-trend">
-    {{ term }}
-    <span>{{ rate }}%</span>
-    <span :class="['trend-icon', trend]"><Icon :icon="'ant-design:caret-' + trend + '-outlined'" /></span>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent, computed } from 'vue';
-
-  export default defineComponent({
-    name: 'Trend',
-    props: {
-      // 鍚宼itle
-      term: {
-        type: String,
-        default: '',
-        required: true,
-      },
-      // 鐧惧垎姣�
-      percentage: {
-        type: Number,
-        default: null,
-      },
-      type: {
-        type: Boolean,
-        default: null,
-      },
-      target: {
-        type: Number,
-        default: 0,
-      },
-      value: {
-        type: Number,
-        default: 0,
-      },
-      fixed: {
-        type: Number,
-        default: 2,
-      },
-    },
-    setup(props) {
-      const trend = computed(() => {
-        let type = props.type === null ? props.value >= props.target : props.type;
-        return type ? 'up' : 'down';
-      });
-      const rate = computed(() =>
-        (props.percentage === null ? (Math.abs(props.value - props.target) * 100) / props.target : props.percentage).toFixed(props.fixed)
-      );
-      return {
-        trend,
-        rate,
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .chart-trend {
-    display: inline-block;
-    font-size: 14px;
-    line-height: 22px;
-
-    .trend-icon {
-      font-size: 12px;
-
-      &.up,
-      &.down {
-        margin-left: 4px;
-        position: relative;
-        top: 1px;
-
-        i {
-          font-size: 12px;
-          transform: scale(0.83);
-        }
-      }
-
-      &.up {
-        color: #f5222d;
-      }
-
-      &.down {
-        color: #52c41a;
-        top: -1px;
-      }
-    }
-  }
-</style>
diff --git a/src/components/jeecg/AIcon.vue b/src/components/jeecg/AIcon.vue
deleted file mode 100644
index 699f5ce..0000000
--- a/src/components/jeecg/AIcon.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-<template>
-  <Icon :icon="icon" :size="size"></Icon>
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { Icon } from '/@/components/Icon';
-  import { isEmpty } from '/@/utils/is';
-  import { propTypes } from '/@/utils/propTypes';
-
-  export default defineComponent({
-    name: 'AIcon',
-    components: { Icon },
-    props: {
-      icon: String,
-      type: String,
-      // 鍥炬爣澶у皬锛岄粯璁� 16
-      size: propTypes.any,
-      // 鏍峰紡
-      theme: propTypes.any,
-    },
-    setup(props) {
-      const icon = computed(() => {
-        if (props.icon && !isEmpty(props.icon)) {
-          return props.icon;
-        }
-        let iconTheme = props.theme ? `-${props.theme}` : '';
-        return `ant-design:${props.type}${iconTheme}`;
-      });
-
-      return {
-        icon,
-      };
-    },
-  });
-</script>
-
-<style scoped></style>
diff --git a/src/components/jeecg/ExcelButton.vue b/src/components/jeecg/ExcelButton.vue
deleted file mode 100644
index 98d5fec..0000000
--- a/src/components/jeecg/ExcelButton.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-<template>
-  <a-button type="primary" v-if="hasExportAuth() && config.export" preIcon="ant-design:export-outlined" @click="onExportXls()"> 瀵煎嚭</a-button>
-  <a-upload name="file" :showUploadList="false" v-if="hasImportAuth() && config.import" :customRequest="(file) => onImportXls(file)">
-    <a-button type="primary" preIcon="ant-design:import-outlined">瀵煎叆</a-button>
-  </a-upload>
-</template>
-
-<script lang="ts" setup name="ExcelButton">
-  import { PropType } from 'vue';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  import { useMethods } from '/@/hooks/system/useMethods';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  // 瀹氫箟 excel 鏂规硶鎵�闇�鍙傛暟
-  interface ExcelConfig {
-    // 瀵煎嚭閰嶇疆
-    exportConfig: {
-      url: string;
-      // 瀵煎嚭鏂囦欢鍚�
-      name?: string | (() => string);
-      //鎸夐挳鏉冮檺
-      auth?: string | string[];
-    };
-    // 瀵煎叆閰嶇疆
-    importConfig: {
-      url: string;
-      // 瀵煎嚭鎴愬姛鍚庣殑鍥炶皟
-      success?: (fileInfo?: any) => void;
-      //鎸夐挳鏉冮檺
-      auth?: string | string[];
-    };
-  }
-  /**
-   * 瀹氫箟缁勪欢鍙傛暟
-   */
-  const props = defineProps({
-    config: {
-      type: Object as PropType<ExcelConfig>,
-      default: null,
-    },
-  });
-  //鎸夐挳鏉冮檺闂
-  const { hasPermission } = usePermission();
-  //瀵煎叆瀵煎嚭鏂规硶
-  const { handleExportXls, handleImportXls } = useMethods();
-
-  const $message = useMessage();
-  // 瀵煎嚭 excel
-  function onExportXls() {
-    let { url, name } = props.config?.export ?? {};
-    if (url) {
-      let title = typeof name === 'function' ? name() : name;
-      return handleExportXls(title as string, url);
-    } else {
-      $message.createMessage.warn('娌℃湁浼犻�� export.url 鍙傛暟');
-      return Promise.reject();
-    }
-  }
-
-  // 瀵煎叆 excel
-  function onImportXls(file) {
-    let { url, success } = props.config?.import ?? {};
-    if (url) {
-      return handleImportXls(file, url, success);
-    } else {
-      $message.createMessage.warn('娌℃湁浼犻�� import.url 鍙傛暟');
-      return Promise.reject();
-    }
-  }
-
-  // 瀵煎叆鎸夐挳鏉冮檺
-  function hasImportAuth() {
-    let auth = props.config?.import?.auth;
-    return auth && auth.length > 0 ? hasPermission(auth) : true;
-  }
-
-  // 瀵煎嚭鎸夐挳鏉冮檺
-  function hasExportAuth() {
-    let auth = props.config?.export?.auth;
-    return auth && auth.length > 0 ? hasPermission(auth) : true;
-  }
-</script>
-
-<style scoped lang="less"></style>
diff --git a/src/components/jeecg/JPrompt/JPrompt.vue b/src/components/jeecg/JPrompt/JPrompt.vue
deleted file mode 100644
index 146df0a..0000000
--- a/src/components/jeecg/JPrompt/JPrompt.vue
+++ /dev/null
@@ -1,160 +0,0 @@
-<template>
-  <ConfigProvider :locale="getAntdLocale">
-    <Modal v-bind="getProps">
-      <Spin :spinning="loading">
-        <div style="padding: 20px;">
-          <div v-html="options.content" style="margin-bottom: 8px"></div>
-          <BasicForm @register="registerForm">
-            <template #customInput="{ model, field }">
-              <Input ref="inputRef" v-model:value="model[field]" :placeholder="placeholder" @pressEnter="onSubmit" @input="onChange" />
-            </template>
-          </BasicForm>
-        </div>
-      </Spin>
-    </Modal>
-  </ConfigProvider>
-</template>
-
-<script lang="ts">
-  import type { JPromptProps } from './typing';
-  import type { ModalProps } from '/@/components/Modal';
-  import { ref, defineComponent, computed, unref, onMounted, nextTick } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form';
-  import { Modal, Spin, Input, ConfigProvider } from 'ant-design-vue';
-  import { useLocale } from '/@/locales/useLocale';
-
-  export default defineComponent({
-    name: 'JPrompt',
-    components: {
-      Modal,
-      Spin,
-      Input,
-      BasicForm,
-      ConfigProvider,
-    },
-    emits: ['register'],
-    setup(props, { emit }) {
-      const inputRef = ref();
-      const { getAntdLocale } = useLocale();
-      const visible = ref(false);
-      // 褰撳墠鏄惁姝e湪鍔犺浇涓�
-      const loading = ref(false);
-      const options = ref<JPromptProps>({});
-      const placeholder = computed(() => options.value.placeholder ?? '璇疯緭鍏ュ唴瀹�');
-      // 娉ㄥ唽琛ㄥ崟
-      const [registerForm, { clearValidate, setFieldsValue, validate, updateSchema }] = useForm({
-        compact: true,
-        wrapperCol: { span: 24 },
-        schemas: [
-          {
-            label: '',
-            field: 'input',
-            component: 'Input',
-            slot: 'customInput',
-          },
-        ],
-        showActionButtonGroup: false,
-      });
-
-      // 寮圭獥鏈�缁坧rops
-      const getProps = computed(() => {
-        let opt = options.value;
-        let modalProps: Partial<ModalProps> = {
-          width: (opt.width ?? 500) as number,
-          title: (opt.title ?? 'prompt') as string,
-          visible: unref(visible),
-          confirmLoading: unref(loading),
-        };
-        let finalProps: Recordable = {
-          ...modalProps,
-          ...props,
-          ...opt,
-          onOk: onSubmit,
-          onCancel() {
-            if (typeof options.value.onCancel === 'function') {
-              options.value.onCancel();
-            }
-            close();
-          },
-        };
-        return finalProps;
-      });
-
-      onMounted(() => {
-        emit('register', {
-          openModal,
-          setLoading,
-          getVisible: visible,
-        });
-      });
-
-      /** 寮圭獥寮�鍚� */
-      async function openModal(opt: any) {
-        document.body.focus();
-
-        options.value = opt;
-        visible.value = true;
-        await nextTick();
-        await updateSchema({
-          field: 'input',
-          required: options.value.required,
-          rules: options.value.rules,
-          dynamicRules: options.value.dynamicRules,
-        } as any);
-        await setFieldsValue({
-          input: options.value.defaultValue ?? '',
-        });
-        await clearValidate();
-        inputRef.value?.focus();
-      }
-
-      /** 寮圭獥鍏抽棴 */
-      function close() {
-        visible.value = false;
-      }
-
-      function onChange() {
-        validate()
-      }
-      
-      /** 鎻愪氦琛ㄥ崟 */
-      async function onSubmit() {
-        try {
-          const { onOk } = options.value;
-          // 琛ㄥ崟楠岃瘉
-          let values = await validate();
-          setLoading(true);
-          if (typeof onOk === 'function') {
-            let flag = await onOk(values.input);
-            // 鍙湁杩斿洖 false 鎵嶉樆姝㈠叧闂脊绐�
-            if (!(flag === false)) {
-              close();
-            }
-          } else {
-            close();
-          }
-        } finally {
-          setLoading(false);
-        }
-      }
-
-      /** 璁剧疆鍔犺浇鐘舵��*/
-      function setLoading(flag) {
-        loading.value = flag;
-      }
-
-      return {
-        inputRef,
-        getProps,
-        loading,
-        options,
-        placeholder,
-        getAntdLocale,
-        onChange,
-        onSubmit,
-
-        registerForm,
-      };
-    },
-  });
-</script>
diff --git a/src/components/jeecg/JPrompt/hooks/useJPrompt.ts b/src/components/jeecg/JPrompt/hooks/useJPrompt.ts
deleted file mode 100644
index 4f7cd21..0000000
--- a/src/components/jeecg/JPrompt/hooks/useJPrompt.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import type { JPromptProps } from '../typing';
-import { render, createVNode, nextTick } from 'vue';
-import { error } from '/@/utils/log';
-import JPrompt from '../JPrompt.vue';
-
-export function useJPrompt() {
-
-  function createJPrompt(options: JPromptProps) {
-    let instance = null;
-    const box = document.createElement('div');
-    const vm = createVNode(JPrompt, {
-      // 娉ㄥ唽
-      async onRegister(ins) {
-        instance = ins;
-        await nextTick();
-        ins.openModal(options);
-      },
-      // 閿�姣�
-      afterClose() {
-        render(null, box);
-        document.body.removeChild(box);
-      },
-    });
-    // 鎸傝浇鍒� body
-    render(vm, box);
-    document.body.appendChild(box);
-
-    function getInstance(): any {
-      if (instance == null) {
-        error('useJPrompt instance is undefined!');
-      }
-      return instance;
-    }
-
-    function updateModal(options: JPromptProps) {
-      getInstance()?.updateModal(options);
-    }
-
-    function closeModal() {
-      getInstance()?.closeModal();
-    }
-
-    function setLoading(loading) {
-      getInstance()?.setLoading(loading);
-    }
-
-    return {
-      closeModal,
-      updateModal,
-      setLoading,
-    };
-  }
-
-  return {
-    createJPrompt,
-  };
-}
diff --git a/src/components/jeecg/JPrompt/index.ts b/src/components/jeecg/JPrompt/index.ts
deleted file mode 100644
index 850fc09..0000000
--- a/src/components/jeecg/JPrompt/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { useJPrompt } from './hooks/useJPrompt';
-export { default as JPrompt } from './JPrompt.vue';
diff --git a/src/components/jeecg/JPrompt/typing.ts b/src/components/jeecg/JPrompt/typing.ts
deleted file mode 100644
index 785efe0..0000000
--- a/src/components/jeecg/JPrompt/typing.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { ModalOptionsPartial } from '/@/hooks/web/useMessage';
-import { RenderCallbackParams, Rule } from '/@/components/Form';
-
-export interface JPromptProps extends ModalOptionsPartial {
-  // 杈撳叆妗嗘槸鍚﹀繀濉�
-  required?: boolean;
-  // 鏍¢獙
-  rules?: Rule[];
-  // 鍔ㄦ�佹牎楠�
-  dynamicRules?: (renderCallbackParams: RenderCallbackParams) => Rule[];
-  // 鍗犱綅瀛楃
-  placeholder?: string;
-  // 杈撳叆妗嗛粯璁ゅ��
-  defaultValue?: string;
-}
diff --git a/src/components/jeecg/JVxeTable/hooks.ts b/src/components/jeecg/JVxeTable/hooks.ts
deleted file mode 100644
index 54c46fa..0000000
--- a/src/components/jeecg/JVxeTable/hooks.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { useJVxeCompProps, useJVxeComponent } from './src/hooks/useJVxeComponent';
-export { useResolveComponent } from './src/hooks/useData';
diff --git a/src/components/jeecg/JVxeTable/index.ts b/src/components/jeecg/JVxeTable/index.ts
deleted file mode 100644
index b288fbb..0000000
--- a/src/components/jeecg/JVxeTable/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export { default as JVxeTable } from './src/JVxeTable';
-export { registerJVxeTable } from './src/install';
-export { deleteComponent } from './src/componentMap';
-export { registerComponent, registerAsyncComponent } from './src/utils/registerUtils';
diff --git a/src/components/jeecg/JVxeTable/src/JVxeTable.ts b/src/components/jeecg/JVxeTable/src/JVxeTable.ts
deleted file mode 100644
index a6da7bf..0000000
--- a/src/components/jeecg/JVxeTable/src/JVxeTable.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import { defineComponent, h, ref, useSlots } from 'vue';
-import { vxeEmits, vxeProps } from './vxe.data';
-import { useData, useRefs, useResolveComponent as rc } from './hooks/useData';
-import { useColumns } from './hooks/useColumns';
-import { useMethods } from './hooks/useMethods';
-import { useDataSource } from './hooks/useDataSource';
-import { useDragSort } from './hooks/useDragSort';
-import { useRenderComponents } from './hooks/useRenderComponents';
-import { useFinallyProps } from './hooks/useFinallyProps';
-import { JVxeTableProps } from './types';
-import './style/index.less';
-
-export default defineComponent({
-  name: 'JVxeTable',
-  inheritAttrs: false,
-  props: vxeProps(),
-  emits: [...vxeEmits],
-  setup(props: JVxeTableProps, context) {
-    const instanceRef = ref();
-    const refs = useRefs();
-    const slots = useSlots();
-    const data = useData(props);
-    const { methods, publicMethods, created } = useMethods(props, context, data, refs, instanceRef);
-    created();
-    useColumns(props, data, methods, slots);
-    useDataSource(props, data, methods, refs);
-    useDragSort(props, methods);
-    // 鏈�缁堜紶鍏ュ埌 template 閲岀殑 props
-    const finallyProps = useFinallyProps(props, data, methods);
-    // 娓叉煋瀛愮粍浠�
-    const renderComponents = useRenderComponents(props, data, methods, slots);
-    return {
-      instanceRef,
-      ...refs,
-      ...publicMethods,
-      ...finallyProps,
-      ...renderComponents,
-      vxeDataSource: data.vxeDataSource,
-    };
-  },
-  render() {
-    return h(
-      'div',
-      {
-        class: this.$attrs.class,
-        style: this.$attrs.style,
-      },
-      h(
-        rc('a-spin'),
-        {
-          spinning: this.loading,
-          wrapperClassName: this.prefixCls,
-        },
-        {
-          default: () => [
-            this.renderSubPopover(),
-            this.renderToolbar(),
-            this.renderToolbarAfterSlot(),
-            h(
-              rc('vxe-grid'),
-              {
-                ...this.vxeProps,
-                data: this.vxeDataSource,
-              },
-              this.$slots
-            ),
-            this.renderPagination(),
-            this.renderDetailsModal(),
-          ],
-        }
-      )
-    );
-  },
-  created() {
-    this.instanceRef = this;
-  },
-});
diff --git a/src/components/jeecg/JVxeTable/src/componentMap.ts b/src/components/jeecg/JVxeTable/src/componentMap.ts
deleted file mode 100644
index 72dcf75..0000000
--- a/src/components/jeecg/JVxeTable/src/componentMap.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import type { JVxeVueComponent } from './types';
-import { JVxeTypes } from './types/JVxeTypes';
-
-import JVxeSlotCell from './components/cells/JVxeSlotCell';
-import JVxeNormalCell from './components/cells/JVxeNormalCell.vue';
-import JVxeDragSortCell from './components/cells/JVxeDragSortCell.vue';
-
-import JVxeInputCell from './components/cells/JVxeInputCell.vue';
-import JVxeDateCell from './components/cells/JVxeDateCell.vue';
-import JVxeTimeCell from './components/cells/JVxeTimeCell.vue';
-import JVxeSelectCell from './components/cells/JVxeSelectCell.vue';
-import JVxeRadioCell from './components/cells/JVxeRadioCell.vue';
-import JVxeCheckboxCell from './components/cells/JVxeCheckboxCell.vue';
-import JVxeUploadCell from './components/cells/JVxeUploadCell.vue';
-// import { TagsInputCell, TagsSpanCell } from './components/cells/JVxeTagsCell.vue'
-import JVxeProgressCell from './components/cells/JVxeProgressCell.vue';
-import JVxeTextareaCell from './components/cells/JVxeTextareaCell.vue';
-// import JVxeDepartSelectCell from './components/cells/JVxeDepartSelectCell.vue'
-// import JVxeUserSelectCell from './components/cells/JVxeUserSelectCell.vue'
-
-const componentMap = new Map<JVxeTypes | string, JVxeVueComponent>();
-
-/** span 缁勪欢缁撳熬 */
-export const spanEnds: string = ':span';
-
-/** 瀹氫箟涓嶈兘鐢ㄤ簬娉ㄥ唽鐨勫叧閿瓧 */
-export const excludeKeywords: Array<JVxeTypes> = [
-  JVxeTypes.hidden,
-  JVxeTypes.rowNumber,
-  JVxeTypes.rowCheckbox,
-  JVxeTypes.rowRadio,
-  JVxeTypes.rowExpand,
-];
-
-/**
- * 娉ㄥ唽缁勪欢
- *
- * @param type 缁勪欢 type
- * @param component Vue缁勪欢
- * @param spanComponent 鏄剧ず缁勪欢锛屽彲绌猴紝榛樿涓� JVxeNormalCell 缁勪欢
- */
-export function addComponent(type: JVxeTypes, component: JVxeVueComponent, spanComponent?: JVxeVueComponent) {
-  if (excludeKeywords.includes(type)) {
-    throw new Error(`銆恆ddComponent銆戜笉鑳戒娇鐢�"${type}"浣滀负缁勪欢鐨刵ame锛屽洜涓鸿繖鏄叧閿瓧銆俙);
-  }
-  if (componentMap.has(type)) {
-    throw new Error(`銆恆ddComponent銆戠粍浠�"${type}"宸插瓨鍦╜);
-  }
-  componentMap.set(type, component);
-  if (spanComponent) {
-    componentMap.set(type + spanEnds, spanComponent);
-  }
-}
-
-export function deleteComponent(type: JVxeTypes) {
-  componentMap.delete(type);
-  componentMap.delete(type + spanEnds);
-}
-
-/** 瀹氫箟鍐呯疆鑷畾涔夌粍浠� */
-export function definedComponent() {
-  addComponent(JVxeTypes.slot, JVxeSlotCell);
-  addComponent(JVxeTypes.normal, JVxeNormalCell);
-  addComponent(JVxeTypes.rowDragSort, JVxeDragSortCell);
-
-  addComponent(JVxeTypes.input, JVxeInputCell);
-  addComponent(JVxeTypes.inputNumber, JVxeInputCell);
-  addComponent(JVxeTypes.radio, JVxeRadioCell);
-  addComponent(JVxeTypes.checkbox, JVxeCheckboxCell);
-  addComponent(JVxeTypes.select, JVxeSelectCell);
-  addComponent(JVxeTypes.selectSearch, JVxeSelectCell); // 涓嬫媺鎼滅储
-  addComponent(JVxeTypes.selectMultiple, JVxeSelectCell); // 涓嬫媺澶氶��
-  addComponent(JVxeTypes.date, JVxeDateCell);
-  addComponent(JVxeTypes.datetime, JVxeDateCell);
-  addComponent(JVxeTypes.time, JVxeTimeCell);
-  addComponent(JVxeTypes.upload, JVxeUploadCell);
-  addComponent(JVxeTypes.textarea, JVxeTextareaCell);
-
-  // addComponent(JVxeTypes.tags, TagsInputCell, TagsSpanCell)
-  addComponent(JVxeTypes.progress, JVxeProgressCell);
-
-  // addComponent(JVxeTypes.departSelect, JVxeDepartSelectCell)
-  // addComponent(JVxeTypes.userSelect, JVxeUserSelectCell)
-}
-
-export { componentMap };
diff --git a/src/components/jeecg/JVxeTable/src/components/JVxeDetailsModal.vue b/src/components/jeecg/JVxeTable/src/components/JVxeDetailsModal.vue
deleted file mode 100644
index 48d63d0..0000000
--- a/src/components/jeecg/JVxeTable/src/components/JVxeDetailsModal.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-<template>
-  <BasicModal @register="registerModel" title="璇︾粏淇℃伅" :width="1200" :keyboard="true" @ok="handleOk" @cancel="close">
-    <transition name="fade">
-      <div v-if="getVisible">
-        <slot name="mainForm" :row="row" :column="column" />
-      </div>
-    </transition>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { ref, defineComponent } from 'vue';
-  import { cloneDeep } from 'lodash-es';
-  import { useModal } from '/@/components/Modal/src/hooks/useModal';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-
-  export default defineComponent({
-    components: {
-      BasicModal: createAsyncComponent(() => import('/@/components/Modal/src/BasicModal.vue'), {
-        loading: true,
-      }),
-    },
-    props: {
-      trigger: {
-        type: Function,
-        required: true,
-      },
-    },
-    setup(props) {
-      const row = ref(null);
-      const column = ref(null);
-
-      const [registerModel, { openModal, closeModal, getVisible }] = useModal();
-
-      function open(event) {
-        let { row: $row, column: $column } = event;
-        row.value = cloneDeep($row);
-        column.value = $column;
-        openModal();
-      }
-
-      function close() {
-        closeModal();
-      }
-
-      function handleOk() {
-        props.trigger('detailsConfirm', {
-          row: row.value,
-          column: column.value,
-          callback: (success) => {
-            success ? closeModal() : openModal();
-          },
-        });
-      }
-
-      return {
-        getVisible,
-        row,
-        column,
-        open,
-        close,
-        handleOk,
-        registerModel,
-      };
-    },
-  });
-</script>
-<style scoped lang="less">
-  .fade-enter-active,
-  .fade-leave-active {
-    opacity: 1;
-    transition: opacity 0.5s;
-  }
-
-  .fade-enter,
-  .fade-leave-to {
-    opacity: 0;
-  }
-</style>
diff --git a/src/components/jeecg/JVxeTable/src/components/JVxeReloadEffect.ts b/src/components/jeecg/JVxeTable/src/components/JVxeReloadEffect.ts
deleted file mode 100644
index 7dd3276..0000000
--- a/src/components/jeecg/JVxeTable/src/components/JVxeReloadEffect.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-import { defineComponent, h, ref, watch } from 'vue';
-import { randomString } from '/@/utils/common/compUtils';
-import '../style/reload-effect.less';
-
-// 淇敼鏁版嵁鐗规晥
-export default defineComponent({
-  props: {
-    vNode: null,
-    // 鏄惁鍚敤鐗规晥
-    effect: Boolean,
-  },
-  emits: ['effectBegin', 'effectEnd'],
-  setup(props, { emit }) {
-    // vNode: null,
-    const innerEffect = ref(props.effect);
-    // 搴斾粯鍚屾椂澶氫釜鐗规晥
-    const effectIdx = ref(0);
-    const effectList = ref<any[]>([]);
-
-    watch(
-      () => props.effect,
-      () => (innerEffect.value = props.effect)
-    );
-    watch(
-      () => props.vNode,
-      (_vNode, old) => {
-        if (props.effect && old != null) {
-          let topLayer = renderSpan(old, 'top');
-          effectList.value.push(topLayer);
-        }
-      },
-      { deep: true, immediate: true }
-    );
-
-    // 鏉′欢娓叉煋鍐呭 span
-    function renderVNode() {
-      if (props.vNode == null) {
-        return null;
-      }
-      let bottom = renderSpan(props.vNode, 'bottom');
-      // 鍚敤浜嗙壒鏁堬紝骞朵笖鏈夋棫鏁版嵁锛屽氨娓叉煋鐗规晥椤跺眰
-      if (innerEffect.value && effectList.value.length > 0) {
-        emit('effectBegin');
-        // 1.4s 浠ュ悗鍏抽棴鐗规晥
-        window.setTimeout(() => {
-          let item = effectList.value[effectIdx.value];
-          if (item && item.elm) {
-            // 鐗规晥缁撴潫鍚庯紝灞曠ず鍏堟妸 display 璁句负 none锛岃�屼笉鏄洿鎺ュ垹鎺夎鍏冪礌锛�
-            // 鐩殑鏄负浜嗛槻姝㈤〉闈㈤噸鏂版覆鏌擄紝瀵艰嚧鍔ㄧ敾閲嶇疆
-            item.elm.style.display = 'none';
-          }
-          // 褰撴墍鏈夌殑灞傜骇鍔ㄧ敾閮界粨鏉熸椂锛屽啀鍒犳帀鎵�鏈夊厓绱�
-          if (++effectIdx.value === effectList.value.length) {
-            innerEffect.value = false;
-            effectIdx.value = 0;
-            effectList.value = [];
-            emit('effectEnd');
-          }
-        }, 1400);
-        return [effectList.value, bottom];
-      } else {
-        return bottom;
-      }
-    }
-
-    // 娓叉煋鍐呭 span
-    function renderSpan(vNode, layer) {
-      let options = {
-        key: layer + effectIdx.value + randomString(6),
-        class: ['j-vxe-reload-effect-span', `layer-${layer}`],
-        style: {},
-      };
-      if (layer === 'top') {
-        // 鏈�鏂版覆鏌撶殑鍦ㄤ笅闈�
-        options.style['z-index'] = 9999 - effectIdx.value;
-      }
-      return h('span', options, [vNode]);
-    }
-
-    return () =>
-      h(
-        'div',
-        {
-          class: ['j-vxe-reload-effect-box'],
-        },
-        [renderVNode()]
-      );
-  },
-});
diff --git a/src/components/jeecg/JVxeTable/src/components/JVxeSubPopover.vue b/src/components/jeecg/JVxeTable/src/components/JVxeSubPopover.vue
deleted file mode 100644
index 21698ff..0000000
--- a/src/components/jeecg/JVxeTable/src/components/JVxeSubPopover.vue
+++ /dev/null
@@ -1,207 +0,0 @@
-<template>
-  <a-popover :visible="visible" :placement="placement" overlayClassName="j-vxe-popover-overlay" :overlayStyle="overlayStyle">
-    <template #title>
-      <div class="j-vxe-popover-title">
-        <div>瀛愯〃</div>
-        <div class="j-vxe-popover-title-close" @click="close">
-          <a-icon type="close" />
-        </div>
-      </div>
-    </template>
-
-    <template #content>
-      <transition name="fade">
-        <slot v-if="visible" name="subForm" :row="row" :column="column" />
-      </transition>
-    </template>
-
-    <div ref="divRef" class="j-vxe-popover-div"></div>
-  </a-popover>
-</template>
-<script lang="ts">
-  import { ref, reactive, nextTick, defineComponent } from 'vue';
-  import domAlign from 'dom-align';
-  import { getParentNodeByTagName } from '../utils/vxeUtils';
-  import { triggerWindowResizeEvent } from '/@/utils/common/compUtils';
-  import { cloneDeep } from 'lodash-es';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { isString } from '/@/utils/is';
-
-  export default defineComponent({
-    name: 'JVxeSubPopover',
-    setup() {
-      const visible = ref(false);
-      const row = ref<any>(null);
-      const column = ref<any>(null);
-      const overlayStyle = reactive<{
-        width?: number | string;
-        maxWidth?: number | string;
-        zIndex: number;
-      }>({
-        zIndex: 100,
-      });
-      const placement = ref('bottom');
-      const divRef = ref<HTMLElement>();
-      const { createMessage } = useMessage();
-
-      function toggle(event) {
-        if (document.body.clientHeight - event.$event.clientY > 350) {
-          placement.value = 'bottom';
-        } else {
-          placement.value = 'top';
-        }
-        if (row.value == null) {
-          open(event);
-        } else {
-          row.value.id === event.row.id ? close() : reopen(event);
-        }
-      }
-
-      function open(event, level = 0) {
-        if (level > 3) {
-          createMessage.error('鎵撳紑瀛愯〃澶辫触');
-          console.warn('銆怞VxeSubPopover銆戞墦寮�瀛愯〃澶辫触');
-          return;
-        }
-
-        let {
-          row: $row,
-          column: $column,
-          $table,
-          $event: { target },
-        } = event;
-        row.value = cloneDeep($row);
-        column.value = $column;
-
-        let className = target.className || '';
-        className = isString(className) ? className : className.toString();
-
-        // 鑾峰彇 td 鐖剁骇
-        let td = getParentNodeByTagName(target, 'td');
-        // 鐐瑰嚮鐨勬槸鎷栨嫿鎺掑簭鍒楋紝涓嶅仛澶勭悊
-        if (td && td.querySelector('.j-vxe-drag-box')) {
-          return;
-        }
-        // 鐐瑰嚮鐨勬槸expand锛屼笉鍋氬鐞�
-        if (className.includes('vxe-table--expand-btn')) {
-          return;
-        }
-        // 鐐瑰嚮鐨勬槸checkbox锛屼笉鍋氬鐞�
-        if (className.includes('vxe-checkbox--icon') || className.includes('vxe-cell--checkbox')) {
-          return;
-        }
-        // 鐐瑰嚮鐨勬槸radio锛屼笉鍋氬鐞�
-        if (className.includes('vxe-radio--icon') || className.includes('vxe-cell--radio')) {
-          return;
-        }
-        let parentElem = $table.getParentElem();
-        let tr = getParentNodeByTagName(target, 'tr');
-        if (parentElem && tr) {
-          let clientWidth = parentElem.clientWidth;
-          let clientHeight = tr.clientHeight;
-          divRef.value!.style.width = clientWidth + 'px';
-          divRef.value!.style.height = clientHeight + 'px';
-          overlayStyle.width = Number.parseInt(`${clientWidth - clientWidth * 0.04}`) + 'px';
-          overlayStyle.maxWidth = overlayStyle.width;
-          //let realTable = getParentNodeByTagName(tr, 'table')
-          //let left = realTable.parentNode.scrollLeft
-          let h = event.$event.clientY;
-          if (h) {
-            h = h - 140;
-          }
-          let toolbar = divRef.value!.nextElementSibling;
-          domAlign(divRef.value, toolbar, {
-            points: ['tl', 'tl'],
-            offset: [0, h],
-            overflow: {
-              alwaysByViewport: true,
-            },
-          });
-          nextTick(() => {
-            visible.value = true;
-            nextTick(() => {
-              triggerWindowResizeEvent();
-            });
-          });
-        } else {
-          let num = ++level;
-          console.warn('銆怞VxeSubPopover銆憈able or tr 鑾峰彇澶辫触锛屾鍦ㄨ繘琛岀 ' + num + '娆¢噸璇�', {
-            event,
-            table: parentElem,
-            tr,
-          });
-          window.setTimeout(() => open(event, num), 100);
-        }
-      }
-
-      function close() {
-        if (visible.value) {
-          row.value = null;
-          visible.value = false;
-        }
-      }
-
-      function reopen(event) {
-        open(event);
-      }
-
-      return {
-        divRef,
-        row,
-        column,
-        visible,
-        placement,
-        overlayStyle,
-        close,
-        toggle,
-      };
-    },
-  });
-</script>
-<style scoped lang="less">
-  .j-vxe-popover-title {
-    .j-vxe-popover-title-close {
-      position: absolute;
-      right: 0;
-      top: 0;
-      width: 31px;
-      height: 31px;
-      text-align: center;
-      line-height: 31px;
-      color: rgba(0, 0, 0, 0.45);
-      cursor: pointer;
-      transition: color 300ms;
-
-      &:hover {
-        color: rgba(0, 0, 0, 0.8);
-      }
-    }
-  }
-
-  .j-vxe-popover-div {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    height: 31px;
-    z-index: -1;
-  }
-</style>
-<style lang="less">
-  .j-vxe-popover-overlay.ant-popover {
-    .ant-popover-title {
-      position: relative;
-    }
-  }
-
-  .fade-enter-active,
-  .fade-leave-active {
-    opacity: 1;
-    transition: opacity 0.5s;
-  }
-
-  .fade-enter,
-  .fade-leave-to {
-    opacity: 0;
-  }
-</style>
diff --git a/src/components/jeecg/JVxeTable/src/components/JVxeToolbar.vue b/src/components/jeecg/JVxeTable/src/components/JVxeToolbar.vue
deleted file mode 100644
index 6a9fc8e..0000000
--- a/src/components/jeecg/JVxeTable/src/components/JVxeToolbar.vue
+++ /dev/null
@@ -1,117 +0,0 @@
-<template>
-  <div :class="boxClass">
-    <vxe-toolbar ref="xToolbarRef" custom>
-      <!-- 宸ュ叿鎸夐挳 -->
-      <template #buttons>
-        <div :class="`${prefixCls}-button div`" :size="btnSize">
-          <slot v-if="showPrefix" name="toolbarPrefix" :size="btnSize" />
-          <a-button v-if="showAdd" type="primary" preIcon="ant-design:plus-outlined" :disabled="disabled" @click="trigger('add')">
-            <span>鏂板</span>
-          </a-button>
-          <a-button v-if="showSave" preIcon="ant-design:save-outlined" :disabled="disabled" @click="trigger('save')">
-            <span>淇濆瓨</span>
-          </a-button>
-          <template v-if="selectedRowIds.length > 0">
-            <Popconfirm v-if="showRemove" :title="`纭畾瑕佸垹闄よ繖 ${selectedRowIds.length} 椤瑰悧?`" @confirm="trigger('remove')">
-              <a-button preIcon="ant-design:minus-outlined" :disabled="disabled">鍒犻櫎</a-button>
-            </Popconfirm>
-            <template v-if="showClearSelection">
-              <a-button preIcon="ant-design:delete-outlined" @click="trigger('clearSelection')">娓呯┖閫夋嫨</a-button>
-            </template>
-          </template>
-          <slot v-if="showSuffix" name="toolbarSuffix" :size="btnSize" />
-          <a v-if="showCollapse" style="margin-left: 4px" @click="toggleCollapse">
-            <span>{{ collapsed ? '灞曞紑' : '鏀惰捣' }}</span>
-            <Icon :icon="collapsed ? 'ant-design:down-outlined' : 'ant-design:up-outlined'" />
-          </a>
-        </div>
-      </template>
-    </vxe-toolbar>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { computed, inject, ref, onMounted } from 'vue';
-  // noinspection ES6UnusedImports
-  import { Popconfirm } from 'ant-design-vue';
-  import { VxeToolbarInstance } from 'vxe-table';
-  import { Icon } from '/@/components/Icon';
-  import { propTypes } from '/@/utils/propTypes';
-
-  const props = defineProps({
-    size: propTypes.string,
-    disabled: propTypes.bool.def(false),
-    toolbarConfig: propTypes.object,
-    disabledRows: propTypes.object,
-    hasBtnAuth: propTypes.func,
-    selectedRowIds: propTypes.array.def(() => []),
-  });
-  const emit = defineEmits(['save', 'add', 'remove', 'clearSelection', 'register']);
-  const xToolbarRef = ref({} as VxeToolbarInstance);
-  const prefixCls = `${inject('prefixCls')}-toolbar`;
-  const boxClass = computed(() => [
-    prefixCls,
-    {
-      [`${prefixCls}-collapsed`]: collapsed.value,
-    },
-  ]);
-  // 鏄惁鏀惰捣
-  const collapsed = ref(true);
-  // 閰嶇疆鐨勬寜閽�
-  const btns = computed(() => {
-    let { btn, btns } = props.toolbarConfig || {};
-    btns = btn || btns || ['add', 'remove', 'clearSelection'];
-    // 鎺掗櫎鎺夋病鏈夋巿鏉冪殑鎸夐挳
-    return btns.filter((btn) => {
-      // 绯荤粺榛樿鐨勬壒閲忓垹闄ょ紪鐮侀厤缃负 batch_delete 姝ゅ闇�瑕佸吋瀹逛竴涓�
-      if (btn === 'remove') {
-        //update-begin-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒�
-        return hasBtnAuth(btn) && hasBtnAuth('batch_delete');
-        //update-end-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒�
-      }
-      return hasBtnAuth(btn);
-    });
-  });
-  const showAdd = computed(() => btns.value.includes('add'));
-  const showSave = computed(() => btns.value.includes('save'));
-  const showRemove = computed(() => btns.value.includes('remove'));
-  // 閰嶇疆鐨勬彃妲�
-  const slots = computed(() => props.toolbarConfig?.slot || ['prefix', 'suffix']);
-  const showPrefix = computed(() => slots.value.includes('prefix'));
-  const showSuffix = computed(() => slots.value.includes('suffix'));
-  // 鏄惁鏄剧ず娓呴櫎閫夋嫨鎸夐挳
-  const showClearSelection = computed(() => {
-    if (btns.value.includes('clearSelection')) {
-      // 鏈夌鐢ㄨ鏃舵墠鏄剧ず娓呯┖閫夋嫨鎸夐挳
-      // 鍥犱负绂佺敤琛屼細闃绘閫夋嫨琛岋紝瀵艰嚧鏃犳硶鍙栨秷鍏ㄩ��
-      // return Object.keys(props.disabledRows).length > 0
-    }
-    return false;
-  });
-  // 鏄惁鏄剧ず灞曞紑鏀惰捣鎸夐挳
-  const showCollapse = computed(() => btns.value.includes('collapse'));
-  // 鎸夐挳 size
-  const btnSize = computed(() => (props.size === 'tiny' ? 'small' : null));
-
-  onMounted(() => {
-    // 娉ㄥ唽 vxe-toolbar
-    emit('register', {
-      xToolbarRef,
-    });
-  });
-
-  // 鍒ゆ柇鎸夐挳鏄惁宸叉巿鏉�
-  function hasBtnAuth(key: string) {
-    return props.hasBtnAuth ? props.hasBtnAuth(key) : true;
-  }
-
-  /** 瑙﹀彂浜嬩欢 */
-  function trigger(name) {
-    emit(name);
-  }
-
-  // 鍒囨崲灞曞紑鏀惰捣
-  function toggleCollapse() {
-    collapsed.value = !collapsed.value;
-  }
-</script>
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeCheckboxCell.vue b/src/components/jeecg/JVxeTable/src/components/cells/JVxeCheckboxCell.vue
deleted file mode 100644
index 683abfb..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeCheckboxCell.vue
+++ /dev/null
@@ -1,116 +0,0 @@
-<template>
-  <div :class="boxClass" :style="boxStyle">
-    <a-checkbox :checked="innerValue" v-bind="cellProps" @change="handleChange" />
-  </div>
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-  import { isArray, isBoolean } from '/@/utils/is';
-
-  export default defineComponent({
-    name: 'JVxeCheckboxCell',
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, cellProps, originColumn, scrolling, handleChangeCommon } = useJVxeComponent(props);
-      // 鏄惁鍚敤杈规
-      const bordered = computed(() => !!props.renderOptions.bordered);
-      // box 绫诲悕
-      const boxClass = computed(() => {
-        return {
-          'j-vxe-checkbox': true,
-          'no-animation': scrolling.value,
-        };
-      });
-      // box 琛屽唴鏍峰紡
-      const boxStyle = computed(() => {
-        const style = {};
-        // 濡傛灉鏈夎竟妗嗕笖鏈缃產lign灞炴�э紝灏卞己鍒跺眳涓�
-        if (bordered.value && !originColumn.value.align) {
-          style['text-align'] = 'center';
-        }
-        return style;
-      });
-
-      // onChange 浜嬩欢
-      function handleChange(event) {
-        handleChangeCommon(event.target.checked);
-      }
-
-      return {
-        cellProps,
-        innerValue,
-        boxClass,
-        boxStyle,
-        handleChange,
-      };
-    },
-
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-    enhanced: {
-      switches: {
-        visible: true,
-      },
-      getValue(value, ctx) {
-        let { context } = ctx!;
-        let { originColumn } = context;
-        // 澶勭悊 customValue
-        if (isArray(originColumn.value.customValue)) {
-          let customValue = getCustomValue(originColumn.value);
-          if (isBoolean(value)) {
-            return value ? customValue[0] : customValue[1];
-          } else {
-            return value;
-          }
-        } else {
-          return value;
-        }
-      },
-      setValue(value, ctx) {
-        let { context } = ctx!;
-        let { originColumn } = context;
-        // 鍒ゆ柇鏄惁璁惧畾浜哻ustomValue锛堣嚜瀹氫箟鍊硷級
-        if (isArray(originColumn.value.customValue)) {
-          let customValue = getCustomValue(originColumn.value);
-          return neverNull(value).toString() === customValue[0].toString();
-        } else {
-          return !!value;
-        }
-      },
-      createValue(_defaultValue, ctx) {
-        let { context } = ctx!;
-        let {
-          column: { params: col },
-        } = context;
-        if (isArray(col.customValue)) {
-          let customValue = getCustomValue(col);
-          return col.defaultChecked ? customValue[0] : customValue[1];
-        } else {
-          return !!col.defaultChecked;
-        }
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-
-  function neverNull(value, def?) {
-    return value == null ? neverNull(def, '') : value;
-  }
-
-  function getCustomValue(col) {
-    let customTrue = neverNull(col.customValue[0], true);
-    let customFalse = neverNull(col.customValue[1], false);
-    return [customTrue, customFalse];
-  }
-</script>
-
-<style lang="less">
-  // 鍏抽棴鍔ㄧ敾锛岄槻姝㈡粴鍔ㄦ椂鍔ㄦ�佽祴鍊煎嚭鐜伴棶棰�
-  .j-vxe-checkbox.no-animation {
-    .ant-checkbox-inner,
-    .ant-checkbox-inner::after {
-      transition: none !important;
-    }
-  }
-</style>
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeDateCell.vue b/src/components/jeecg/JVxeTable/src/components/cells/JVxeDateCell.vue
deleted file mode 100644
index f8a1b2a..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeDateCell.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-<template>
-  <a-date-picker
-    :value="innerDateValue"
-    allowClear
-    :format="dateFormat"
-    :showTime="isDatetime"
-    dropdownClassName="j-vxe-date-picker"
-    style="min-width: 0"
-    v-model:open="openPicker"
-    v-bind="cellProps"
-    @change="handleChange"
-  />
-</template>
-
-<script lang="ts">
-  import { ref, computed, watch, defineComponent } from 'vue';
-  import dayjs from 'dayjs';
-  import { JVxeComponent, JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-  import { isEmpty } from '/@/utils/is';
-
-  export default defineComponent({
-    name: 'JVxeDateCell',
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, cellProps, originColumn, handleChangeCommon } = useJVxeComponent(props);
-      const innerDateValue = ref<any>(null);
-      const isDatetime = computed(() => props.type === JVxeTypes.datetime);
-      const dateFormat = computed(() => {
-        let format = originColumn.value.format;
-        return format ? format : isDatetime.value ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD';
-      });
-      const openPicker = ref(true);
-      watch(
-        innerValue,
-        (val) => {
-          if (val == null || isEmpty(val)) {
-            innerDateValue.value = null;
-          } else {
-            innerDateValue.value = dayjs(val, dateFormat.value);
-          }
-        },
-        { immediate: true }
-      );
-
-      function handleChange(_mom, dateStr) {
-        handleChangeCommon(dateStr);
-      }
-
-      return {
-        cellProps,
-        isDatetime,
-        dateFormat,
-        innerDateValue,
-        openPicker,
-        handleChange,
-      };
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-    enhanced: {
-      aopEvents: {
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeDragSortCell.vue b/src/components/jeecg/JVxeTable/src/components/cells/JVxeDragSortCell.vue
deleted file mode 100644
index c32efe3..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeDragSortCell.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-<template>
-  <div class="j-vxe-drag-box">
-    <a-dropdown :trigger="['click']">
-      <span
-        ><span class="drag-btn"> <Icon icon="mi:drag" /> </span
-      ></span>
-      <template #overlay>
-        <a-menu>
-          <a-menu-item key="0" :disabled="disabledMoveUp" @click="handleRowMoveUp">鍚戜笂绉�</a-menu-item>
-          <a-menu-item key="1" :disabled="disabledMoveDown" @click="handleRowMoveDown">鍚戜笅绉�</a-menu-item>
-          <a-menu-divider />
-          <a-menu-item key="3" @click="handleRowInsertDown">鎻掑叆涓�琛�</a-menu-item>
-        </a-menu>
-      </template>
-    </a-dropdown>
-  </div>
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { Icon } from '/@/components/Icon';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-
-  export default defineComponent({
-    name: 'JVxeDragSortCell',
-    components: { Icon },
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { rowIndex, fullDataLength, trigger } = useJVxeComponent(props);
-
-      const disabledMoveUp = computed(() => rowIndex.value === 0);
-      const disabledMoveDown = computed(() => rowIndex.value === fullDataLength.value - 1);
-
-      /** 鍚戜笂绉� */
-      function handleRowMoveUp() {
-        if (!disabledMoveUp.value) {
-          trigger('rowResort', {
-            oldIndex: rowIndex.value,
-            newIndex: rowIndex.value - 1,
-          });
-        }
-      }
-
-      /** 鍚戜笅绉� */
-      function handleRowMoveDown() {
-        if (!disabledMoveDown.value) {
-          trigger('rowResort', {
-            oldIndex: rowIndex.value,
-            newIndex: rowIndex.value + 1,
-          });
-        }
-      }
-
-      /** 鎻掑叆涓�琛� */
-      function handleRowInsertDown() {
-        trigger('rowInsertDown', rowIndex.value);
-      }
-
-      return {
-        disabledMoveUp,
-        disabledMoveDown,
-        handleRowMoveUp,
-        handleRowMoveDown,
-        handleRowInsertDown,
-      };
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-    enhanced: {
-      // 銆愬姛鑳藉紑鍏炽��
-      switches: {
-        editRender: false,
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
-
-<style lang="less">
-  .j-vxe-drag-box {
-    .app-iconify {
-      cursor: move;
-    }
-  }
-
-  .vxe-table--fixed-wrapper {
-    .j-vxe-drag-box {
-      .app-iconify {
-        cursor: pointer;
-      }
-    }
-  }
-</style>
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeInputCell.vue b/src/components/jeecg/JVxeTable/src/components/cells/JVxeInputCell.vue
deleted file mode 100644
index f54fb45..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeInputCell.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-<template>
-  <a-input ref="input" :value="innerValue" v-bind="cellProps" @blur="handleBlur" @change="handleChange" />
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { isString } from '/@/utils/is';
-  import { JVxeComponent, JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-
-  const NumberRegExp = /^-?\d+\.?\d*$/;
-  export default defineComponent({
-    name: 'JVxeInputCell',
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, cellProps, handleChangeCommon } = useJVxeComponent(props);
-
-      /** 澶勭悊change浜嬩欢 */
-      function handleChange(event) {
-        let { target } = event;
-        let { value, selectionStart } = target;
-        let change = true;
-        if (props.type === JVxeTypes.inputNumber) {
-          // 鍒ゆ柇杈撳叆鐨勫�兼槸鍚﹀尮閰嶆暟瀛楁鍒欒〃杈惧紡锛屼笉鍖归厤灏辫繕鍘�
-          if (!NumberRegExp.test(value) && value !== '' && value !== '-') {
-            change = false;
-            value = innerValue.value;
-            target.value = value || '';
-            if (typeof selectionStart === 'number') {
-              target.selectionStart = selectionStart - 1;
-              target.selectionEnd = selectionStart - 1;
-            }
-          }
-        }
-        // 瑙﹀彂浜嬩欢锛屽瓨鍌ㄨ緭鍏ョ殑鍊�
-        if (change) {
-          handleChangeCommon(value);
-        }
-      }
-
-      /** 澶勭悊blur澶卞幓鐒︾偣浜嬩欢 */
-      function handleBlur(event) {
-        let { target } = event;
-        // 鍒ゆ柇杈撳叆鐨勫�兼槸鍚﹀尮閰嶆暟瀛楁鍒欒〃杈惧紡锛屼笉鍖归厤灏辩疆绌�
-        if (props.type === JVxeTypes.inputNumber) {
-          if (!NumberRegExp.test(target.value)) {
-            target.value = '';
-          } else {
-            target.value = Number.parseFloat(target.value);
-          }
-          handleChangeCommon(target.value);
-        }
-        handleChangeCommon(target.value);
-      }
-
-      return {
-        innerValue,
-        cellProps,
-        handleChange,
-        handleBlur,
-      };
-    },
-    enhanced: {
-      installOptions: {
-        autofocus: '.ant-input',
-      },
-      getValue(value, ctx) {
-        if (ctx?.props?.type === JVxeTypes.inputNumber && isString(value)) {
-          if (NumberRegExp.test(value)) {
-            // 銆恑ssues/I5IHN7銆戜慨澶嶆棤娉曡緭鍏ュ皬鏁扮偣鐨刡ug
-            if (/\.0*$/.test(value)) {
-              return value;
-            }
-            return Number.parseFloat(value);
-          }
-        }
-        return value;
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
\ No newline at end of file
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeNormalCell.vue b/src/components/jeecg/JVxeTable/src/components/cells/JVxeNormalCell.vue
deleted file mode 100644
index d6107f1..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeNormalCell.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <JVxeReloadEffect :vNode="innerValue" :effect="isEffect" @effectEnd="handleEffectEnd" />
-</template>
-
-<script lang="ts">
-  import { ref, defineComponent } from 'vue';
-  import JVxeReloadEffect from '../JVxeReloadEffect';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-  import { watch } from 'vue';
-
-  export default defineComponent({
-    name: 'JVxeNormalCell',
-    components: { JVxeReloadEffect },
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const setup = useJVxeComponent(props);
-      const { innerValue, row } = setup;
-
-      const reloadEffect = props.renderOptions.reloadEffect;
-      const isEffect = ref<boolean>(false);
-
-      watch(
-        innerValue,
-        () => {
-          if (reloadEffect.enabled) {
-            if (reloadEffect.isEffect(row.value.id)) {
-              isEffect.value = true;
-            }
-          }
-        },
-        { immediate: true }
-      );
-
-      // 鐗规晥缁撴潫
-      function handleEffectEnd() {
-        isEffect.value = false;
-        reloadEffect.removeEffect(row.value.id);
-      }
-
-      return {
-        innerValue,
-        isEffect,
-        handleEffectEnd,
-      };
-    },
-    enhanced: {
-      switches: { editRender: false },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
-
-<style scoped></style>
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeProgressCell.vue b/src/components/jeecg/JVxeTable/src/components/cells/JVxeProgressCell.vue
deleted file mode 100644
index 39a3a56..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeProgressCell.vue
+++ /dev/null
@@ -1,52 +0,0 @@
-<template>
-  <Progress :class="clazz" :percent="innerValue" size="small" v-bind="cellProps" />
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { Progress } from 'ant-design-vue';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-
-  export default defineComponent({
-    name: 'JVxeCheckboxCell',
-    components: { Progress },
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, cellProps, scrolling } = useJVxeComponent(props);
-      const clazz = computed(() => {
-        return {
-          'j-vxe-progress': true,
-          'no-animation': scrolling.value,
-        };
-      });
-      return { innerValue, cellProps, clazz };
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細锛欽VxeComponent.Enhanced
-    enhanced: {
-      switches: {
-        editRender: false,
-      },
-      setValue(value) {
-        try {
-          if (typeof value !== 'number') {
-            return Number.parseFloat(value);
-          } else {
-            return value;
-          }
-        } catch {
-          return 0;
-        }
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
-
-<style scoped lang="less">
-  // 鍏抽棴杩涘害鏉$殑鍔ㄧ敾锛岄槻姝㈡粴鍔ㄦ椂鍔ㄦ�佽祴鍊煎嚭鐜伴棶棰�
-  .j-vxe-progress.no-animation {
-    :deep(.ant-progress-bg) {
-      transition: none !important;
-    }
-  }
-</style>
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeRadioCell.vue b/src/components/jeecg/JVxeTable/src/components/cells/JVxeRadioCell.vue
deleted file mode 100644
index 503adf5..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeRadioCell.vue
+++ /dev/null
@@ -1,60 +0,0 @@
-<template>
-  <a-radio-group :class="clazz" :value="innerValue" v-bind="cellProps" @change="(e) => handleChangeCommon(e.target.value)">
-    <a-radio v-for="item of originColumn.options" :key="item.value" :value="item.value" @click="(e) => handleRadioClick(item, e)"
-      >{{ item.text || item.label || item.title || item.value }}
-    </a-radio>
-  </a-radio-group>
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-
-  export default defineComponent({
-    name: 'JVxeRadioCell',
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, cellProps, originColumn, handleChangeCommon } = useJVxeComponent(props);
-      const scrolling = computed(() => !!props.renderOptions.scrolling);
-      const clazz = computed(() => {
-        return {
-          'j-vxe-radio': true,
-          'no-animation': scrolling.value,
-        };
-      });
-
-      function handleRadioClick(item) {
-        if (originColumn.value.allowClear === true) {
-          // 鍙栨秷閫夋嫨
-          if (item.value === innerValue.value) {
-            handleChangeCommon(null);
-          }
-        }
-      }
-
-      return {
-        clazz,
-        innerValue,
-        originColumn,
-        cellProps,
-        handleRadioClick,
-        handleChangeCommon,
-      };
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-    enhanced: {
-      switches: { visible: true },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
-
-<style lang="less">
-  // 鍏抽棴鍔ㄧ敾锛岄槻姝㈡粴鍔ㄦ椂鍔ㄦ�佽祴鍊煎嚭鐜伴棶棰�
-  .j-vxe-radio.no-animation {
-    .ant-radio-inner,
-    .ant-radio-inner::after {
-      transition: none !important;
-    }
-  }
-</style>
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeSelectCell.vue b/src/components/jeecg/JVxeTable/src/components/cells/JVxeSelectCell.vue
deleted file mode 100644
index d48696c..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeSelectCell.vue
+++ /dev/null
@@ -1,234 +0,0 @@
-<template>
-  <a-select :value="innerValue" v-bind="selectProps">
-    <template v-if="loading" #notFoundContent>
-      <LoadingOutlined />
-      <span>&nbsp;鍔犺浇涓��</span>
-    </template>
-    <template v-for="option of selectOptions" :key="option.value">
-      <a-select-option :value="option.value" :disabled="option.disabled">
-        <span>{{ option.text || option.label || option.title || option.value }}</span>
-      </a-select-option>
-    </template>
-  </a-select>
-</template>
-
-<script lang="ts">
-  import { ref, computed, defineComponent } from 'vue';
-  import { LoadingOutlined } from '@ant-design/icons-vue';
-  import { filterDictText } from '/@/utils/dict/JDictSelectUtil';
-  import { JVxeComponent, JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-  import { dispatchEvent } from '/@/components/jeecg/JVxeTable/utils';
-  import { isPromise } from '/@/utils/is';
-
-  export default defineComponent({
-    name: 'JVxeSelectCell',
-    components: { LoadingOutlined },
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, cellProps, row, originColumn, handleChangeCommon, handleBlurCommon } = useJVxeComponent(props);
-      const loading = ref(false);
-      // 寮傛鍔犺浇鐨刼ptions锛堢敤浜庡绾ц仈鍔級
-      const asyncOptions = ref<any[] | null>(null);
-      // 涓嬫媺妗� props
-      const selectProps = computed(() => {
-        let selProps = {
-          ...cellProps.value,
-          allowClear: true,
-          autofocus: true,
-          defaultOpen: true,
-          style: { width: '100%' },
-          filterOption: handleSelectFilterOption,
-          onBlur: handleBlur,
-          onChange: handleChange,
-        };
-        // 鍒ゆ柇select鏄惁鍏佽杈撳叆
-        let { allowSearch, allowInput } = originColumn.value;
-        if (allowInput === true || allowSearch === true) {
-          selProps['showSearch'] = true;
-          selProps['onSearch'] = handleSearchSelect;
-        }
-        return selProps;
-      });
-      // 涓嬫媺閫夐」
-      const selectOptions = computed(() => {
-        if (asyncOptions.value) {
-          return asyncOptions.value;
-        }
-        let { linkage } = props.renderOptions;
-        if (linkage) {
-          let { getLinkageOptionsSibling, config } = linkage;
-          let res = getLinkageOptionsSibling(row.value, originColumn.value, config, true);
-          // 褰撹繑鍥濸romise鏃讹紝璇存槑鏄绾ц仈鍔�
-          if (res instanceof Promise) {
-            loading.value = true;
-            res
-              .then((opt) => {
-                asyncOptions.value = opt;
-                loading.value = false;
-              })
-              .catch((e) => {
-                console.error(e);
-                loading.value = false;
-              });
-          } else {
-            asyncOptions.value = null;
-            return res;
-          }
-        }
-        return originColumn.value.options;
-      });
-
-      // --------- created ---------
-
-      // 澶氶�夈�佹悳绱ype
-      let multipleTypes = [JVxeTypes.selectMultiple, 'list_multi'];
-      let searchTypes = [JVxeTypes.selectSearch, 'sel_search'];
-      if (multipleTypes.includes(props.type)) {
-        // 澶勭悊澶氶��
-        let props = originColumn.value.props || {};
-        props['mode'] = 'multiple';
-        props['maxTagCount'] = 1;
-        //update-begin-author:taoyan date:2022-12-5 for: issues/271 Online琛ㄥ崟涓诲瓙琛ㄥ崟涓嬫媺澶氶�夋棤娉曟悳绱�
-        originColumn.value.allowSearch = true;
-        //update-end-author:taoyan date:2022-12-5 for: issues/271 Online琛ㄥ崟涓诲瓙琛ㄥ崟涓嬫媺澶氶�夋棤娉曟悳绱�
-        originColumn.value.props = props;
-      } else if (searchTypes.includes(props.type)) {
-        // 澶勭悊鎼滅储
-        originColumn.value.allowSearch = true;
-      }
-
-      /** 澶勭悊 change 浜嬩欢 */
-      function handleChange(value) {
-        // 澶勭悊涓嬬骇鑱斿姩
-        let linkage = props.renderOptions.linkage;
-        if (linkage) {
-          linkage.handleLinkageSelectChange(row.value, originColumn.value, linkage.config, value);
-        }
-        handleChangeCommon(value);
-      }
-
-      /** 澶勭悊blur澶卞幓鐒︾偣浜嬩欢 */
-      function handleBlur(value) {
-        let { allowInput, options } = originColumn.value;
-        if (allowInput === true) {
-          // 鍒犻櫎鏃犵敤鐨勫洜鎼滅储锛堢敤鎴疯緭鍏ワ級鑰屽垱寤虹殑椤�
-          if (typeof value === 'string') {
-            let indexes: number[] = [];
-            options.forEach((option, index) => {
-              if (option.value.toLocaleString() === value.toLocaleString()) {
-                delete option.searchAdd;
-              } else if (option.searchAdd === true) {
-                indexes.push(index);
-              }
-            });
-            // 缈昏浆鍒犻櫎鏁扮粍涓殑椤�
-            for (let index of indexes.reverse()) {
-              options.splice(index, 1);
-            }
-          }
-        }
-        handleBlurCommon(value);
-      }
-
-      /** 鐢ㄤ簬鎼滅储涓嬫媺妗嗕腑鐨勫唴瀹� */
-      function handleSelectFilterOption(input, option) {
-        let { allowSearch, allowInput } = originColumn.value;
-        if (allowSearch === true || allowInput === true) {
-          return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0;
-        }
-        return true;
-      }
-
-      /** select 鎼滅储鏃剁殑浜嬩欢锛岀敤浜庡姩鎬佹坊鍔爋ptions */
-      function handleSearchSelect(value) {
-        let { allowSearch, allowInput, options } = originColumn.value;
-
-        if (allowSearch !== true && allowInput === true) {
-          // 鏄惁鎵惧埌浜嗗搴旂殑椤癸紝鎵句笉鍒板垯娣诲姞杩欎竴椤�
-          let flag = false;
-          for (let option of options) {
-            if (option.value.toLocaleString() === value.toLocaleString()) {
-              flag = true;
-              break;
-            }
-          }
-          // !!value 锛氫笉娣诲姞绌哄��
-          if (!flag && !!value) {
-            // searchAdd 鏄惁鏄�氳繃鎼滅储娣诲姞鐨�
-            options.push({ title: value, value: value, searchAdd: true });
-          }
-        }
-      }
-
-      return {
-        loading,
-        innerValue,
-        selectProps,
-        selectOptions,
-        handleChange,
-        handleBlur,
-      };
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-    enhanced: {
-      aopEvents: {
-        editActived({ $event, row, column }) {
-          dispatchEvent({
-            $event,
-            row,
-            column,
-            props: this.props,
-            instance: this,
-            className: '.ant-select .ant-select-selection-search-input',
-            isClick: false,
-            handler: (el) => el.focus(),
-          });
-        },
-      },
-      translate: {
-        enabled: true,
-        async handler(value, ctx) {
-          let { props, context } = ctx!;
-          let { row, originColumn } = context;
-          let options;
-          let linkage = props?.renderOptions.linkage;
-          // 鍒ゆ柇鏄惁鏄绾ц仈鍔紝濡傛灉鏄氨閫氳繃鎺ュ彛寮傛缈昏瘧
-          if (linkage) {
-            let { getLinkageOptionsSibling, config } = linkage;
-            let linkageOptions = getLinkageOptionsSibling(row.value, originColumn.value, config, true);
-            options = isPromise(linkageOptions) ? await linkageOptions : linkageOptions;
-          } else if (isPromise(originColumn.value.optionsPromise)) {
-            options = await originColumn.value.optionsPromise;
-          } else {
-            options = originColumn.value.options;
-          }
-          return filterDictText(options, value);
-        },
-      },
-      getValue(value) {
-        if (Array.isArray(value)) {
-          return value.join(',');
-        } else {
-          return value;
-        }
-      },
-      setValue(value, ctx) {
-        let { context } = ctx!;
-        let { originColumn } = context;
-        // 鍒ゆ柇鏄惁鏄閫�
-        if ((originColumn.value.props || {})['mode'] === 'multiple') {
-          originColumn.value.props['maxTagCount'] = 1;
-        }
-        if (value != null && value !== '') {
-          if (typeof value === 'string') {
-            return value === '' ? [] : value.split(',');
-          }
-          return value;
-        } else {
-          return undefined;
-        }
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeSlotCell.ts b/src/components/jeecg/JVxeTable/src/components/cells/JVxeSlotCell.ts
deleted file mode 100644
index 35fcb9f..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeSlotCell.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { computed, defineComponent, h } from 'vue';
-import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/src/hooks/useJVxeComponent';
-import { JVxeComponent } from '/@/components/jeecg/JVxeTable/src/types/JVxeComponent';
-
-export default defineComponent({
-  name: 'JVxeSlotCell',
-  props: useJVxeCompProps(),
-  setup(props: JVxeComponent.Props) {
-    const data = useJVxeComponent(props);
-    const slotProps = computed(() => {
-      return {
-        value: data.innerValue.value,
-        row: data.row.value,
-        column: data.originColumn.value,
-        params: props.params,
-        $table: props.params.$table,
-        rowId: props.params.rowid,
-        index: props.params.rowIndex,
-        rowIndex: props.params.rowIndex,
-        columnIndex: props.params.columnIndex,
-        scrolling: props.renderOptions.scrolling,
-        reloadEffect: props.renderOptions.reloadEffect.enabled,
-        triggerChange: (v) => data.handleChangeCommon(v),
-      };
-    });
-    return () => {
-      let { slot } = props.renderOptions;
-      if (slot) {
-        return h('div', {}, slot(slotProps.value));
-      } else {
-        return h('div');
-      }
-    };
-  },
-  // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-  enhanced: {
-    switches: {
-      editRender: false,
-    },
-  } as JVxeComponent.EnhancedPartial,
-});
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeTextareaCell.vue b/src/components/jeecg/JVxeTable/src/components/cells/JVxeTextareaCell.vue
deleted file mode 100644
index fa892ef..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeTextareaCell.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <JInputPop
-    :value="innerValue"
-    :width="300"
-    :height="210"
-    :pop-container="getPopupContainer"
-    v-bind="cellProps"
-    style="width: 100%"
-    @blur="handleBlurCommon"
-    @change="handleChangeCommon"
-  />
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import JInputPop from '/@/components/Form/src/jeecg/components/JInputPop.vue';
-  import { dispatchEvent } from '/@/components/jeecg/JVxeTable/utils';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-
-  export default defineComponent({
-    name: 'JVxeTextareaCell',
-    components: { JInputPop },
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, cellProps, handleChangeCommon, handleBlurCommon } = useJVxeComponent(props);
-
-      function getPopupContainer() {
-        return document.body;
-      }
-
-      return { innerValue, cellProps, handleChangeCommon, handleBlurCommon, getPopupContainer };
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-    enhanced: {
-      installOptions: {
-        autofocus: '.ant-input',
-      },
-      aopEvents: {
-        editActived({ $event, row, column }) {
-          // 鏄惁榛樿鎵撳紑鍙充晶寮圭獥
-          if (column.params.defaultOpen ?? false) {
-            dispatchEvent({
-              $event,
-              row,
-              column,
-              props: this.props,
-              instance: this,
-              className: '.ant-input-suffix .app-iconify',
-              isClick: true,
-            });
-          }
-        },
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeTimeCell.vue b/src/components/jeecg/JVxeTable/src/components/cells/JVxeTimeCell.vue
deleted file mode 100644
index 4a6e1dc..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeTimeCell.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-<template>
-  <TimePicker
-    :value="innerTimeValue"
-    allowClear
-    :format="format"
-    dropdownClassName="j-vxe-time-picker"
-    style="min-width: 0"
-    v-model:open="openPicker"
-    v-bind="cellProps"
-    @change="handleChange"
-    :getPopupContainer="(node) => node.parentNode"
-  />
-</template>
-
-<script lang="ts">
-  import { ref, computed, watch, defineComponent } from 'vue';
-  import dayjs from 'dayjs';
-  import { TimePicker } from 'ant-design-vue';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-  import { isEmpty } from '/@/utils/is';
-
-  export default defineComponent({
-    name: 'JVxeTimeCell',
-    components: { TimePicker },
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const { innerValue, cellProps, originColumn, handleChangeCommon } = useJVxeComponent(props);
-      const innerTimeValue = ref<any>(null);
-      const format = computed(() => {
-        let format = originColumn.value.format;
-        return format ? format : 'HH:mm:ss';
-      });
-      const openPicker = ref(true);
-      watch(
-        innerValue,
-        (val) => {
-          if (val == null || isEmpty(val)) {
-            innerTimeValue.value = null;
-          } else {
-            innerTimeValue.value = dayjs(val, format.value);
-          }
-        },
-        { immediate: true }
-      );
-
-      function handleChange(_mom, dateStr) {
-        handleChangeCommon(dateStr);
-      }
-
-      return {
-        cellProps,
-        format,
-        innerTimeValue,
-        openPicker,
-        handleChange,
-      };
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細JVxeComponent.Enhanced
-    enhanced: {
-      aopEvents: {
-      },
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
diff --git a/src/components/jeecg/JVxeTable/src/components/cells/JVxeUploadCell.vue b/src/components/jeecg/JVxeTable/src/components/cells/JVxeUploadCell.vue
deleted file mode 100644
index 0c8f0d3..0000000
--- a/src/components/jeecg/JVxeTable/src/components/cells/JVxeUploadCell.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-<template>
-  <div>
-    <template v-if="hasFile" v-for="(file, fileKey) of [innerFile || {}]" :key="fileKey">
-      <a-input :readOnly="true" :value="file.name">
-        <template #addonBefore style="width: 30px">
-          <a-tooltip v-if="file.status === 'uploading'" :title="`涓婁紶涓�(${Math.floor(file.percent)}%)`">
-            <LoadingOutlined />
-          </a-tooltip>
-          <a-tooltip v-else-if="file.status === 'done'" title="涓婁紶瀹屾垚">
-            <Icon icon="ant-design:check-circle-outlined" style="color: #00db00" />
-          </a-tooltip>
-          <a-tooltip v-else :title="file.message || '涓婁紶澶辫触'">
-            <Icon icon="ant-design:exclamation-circle-outlined" style="color: red" />
-          </a-tooltip>
-        </template>
-        <span v-if="file.status === 'uploading'" slot="addonAfter">{{ Math.floor(file.percent) }}%</span>
-        <template v-if="originColumn.allowDownload !== false || originColumn.allowRemove !== false" #addonAfter>
-          <Dropdown :trigger="['click']" placement="bottomRight">
-            <a-tooltip title="鎿嶄綔">
-              <Icon icon="ant-design:setting-outlined" style="cursor: pointer" />
-            </a-tooltip>
-            <template #overlay>
-              <a-menu>
-                <a-menu-item v-if="originColumn.allowDownload !== false" @click="handleClickDownloadFile">
-                  <span><Icon icon="ant-design:download-outlined" />&nbsp;涓嬭浇</span>
-                </a-menu-item>
-                <a-menu-item v-if="originColumn.allowRemove !== false" @click="handleClickDeleteFile">
-                  <span><Icon icon="ant-design:delete-outlined" />&nbsp;鍒犻櫎</span>
-                </a-menu-item>
-              </a-menu>
-            </template>
-          </Dropdown>
-        </template>
-      </a-input>
-    </template>
-    <a-upload
-      v-show="!hasFile"
-      name="file"
-      :data="{ isup: 1 }"
-      :multiple="false"
-      :action="originColumn.action"
-      :headers="uploadHeaders"
-      :showUploadList="false"
-      v-bind="cellProps"
-      @change="handleChangeUpload"
-    >
-      <a-button preIcon="ant-design:upload-outlined">{{ originColumn.btnText || '鐐瑰嚮涓婁紶' }}</a-button>
-    </a-upload>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Icon } from '/@/components/Icon';
-  import { Dropdown } from 'ant-design-vue';
-  import { LoadingOutlined } from '@ant-design/icons-vue';
-  import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types';
-  import { useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-  import { useJVxeUploadCell, fileGetValue, fileSetValue } from '../../hooks/cells/useJVxeUploadCell';
-
-  export default defineComponent({
-    name: 'JVxeUploadCell',
-    components: { Icon, Dropdown, LoadingOutlined },
-    props: useJVxeCompProps(),
-    setup(props: JVxeComponent.Props) {
-      const setup = useJVxeUploadCell(props);
-      return { ...setup };
-    },
-    // 銆愮粍浠跺寮恒�戞敞閲婅瑙侊細锛欽VxeComponent.Enhanced
-    enhanced: {
-      switches: { visible: true },
-      getValue: (value) => fileGetValue(value),
-      setValue: (value) => fileSetValue(value),
-    } as JVxeComponent.EnhancedPartial,
-  });
-</script>
diff --git a/src/components/jeecg/JVxeTable/src/hooks/cells/useJVxeUploadCell.ts b/src/components/jeecg/JVxeTable/src/hooks/cells/useJVxeUploadCell.ts
deleted file mode 100644
index 707d89d..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/cells/useJVxeUploadCell.ts
+++ /dev/null
@@ -1,137 +0,0 @@
-import { ref, computed, watch } from 'vue';
-
-import { getToken } from '/@/utils/auth';
-import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-import { JVxeComponent } from '../../types/JVxeComponent';
-import { useJVxeComponent } from '../useJVxeComponent';
-
-/**
- * use 鍏叡涓婁紶缁勪欢
- * @param props
- * @param options 缁勪欢閫夐」锛宼oken锛氶粯璁ゆ槸鍚︿紶閫抰oken锛宎ction锛氶粯璁や笂浼犺矾寰勶紝multiple锛氭槸鍚﹀厑璁稿鏂囦欢
- */
-export function useJVxeUploadCell(props: JVxeComponent.Props, options?) {
-  const setup = useJVxeComponent(props);
-  const { innerValue, originColumn, handleChangeCommon } = setup;
-
-  const innerFile = ref<any>(null);
-
-  /** upload headers */
-  const uploadHeaders = computed(() => {
-    let headers = {};
-    if ((originColumn.value.token ?? options?.token ?? false) === true) {
-      headers['X-Access-Token'] = getToken();
-    }
-    return headers;
-  });
-
-  /** 涓婁紶璇锋眰鍦板潃 */
-  const uploadAction = computed(() => {
-    if (!originColumn.value.action) {
-      return options?.action ?? '';
-    } else {
-      return originColumn.value.action;
-    }
-  });
-  const hasFile = computed(() => innerFile.value != null);
-  const responseName = computed(() => originColumn.value.responseName ?? 'message');
-
-  watch(
-    innerValue,
-    (val) => {
-      if (val) {
-        innerFile.value = val;
-      } else {
-        innerFile.value = null;
-      }
-    },
-    { immediate: true }
-  );
-
-  function handleChangeUpload(info) {
-    let { file } = info;
-    let value = {
-      name: file.name,
-      type: file.type,
-      size: file.size,
-      status: file.status,
-      percent: file.percent,
-      path: innerFile.value?.path ?? '',
-    };
-    if (file.response) {
-      value['responseName'] = file.response[responseName.value];
-    }
-    let paths: string[] = [];
-    if (options?.multiple && innerFile.value && innerFile.value.path) {
-      paths = innerFile.value.path.split(',');
-    }
-    if (file.status === 'done') {
-      if (typeof file.response.success === 'boolean') {
-        if (file.response.success) {
-          paths.push(file.response[responseName.value]);
-          value['path'] = paths.join(',');
-          handleChangeCommon(value);
-        } else {
-          value['status'] = 'error';
-          value['message'] = file.response.message || '鏈煡閿欒';
-        }
-      } else {
-        // 鑰冭檻鍒板鏋滆缃產ction涓婁紶璺緞涓洪潪jeecg-boot鍚庡彴锛屽彲鑳戒笉浼氳繑鍥� success 灞炴�х殑鎯呭喌锛屽氨榛樿涓烘垚鍔�
-        paths.push(file.response[responseName.value]);
-        value['path'] = paths.join(',');
-        handleChangeCommon(value);
-      }
-    } else if (file.status === 'error') {
-      value['message'] = file.response.message || '鏈煡閿欒';
-    }
-    innerFile.value = value;
-  }
-
-  function handleClickDownloadFile() {
-    let { url, path } = innerFile.value || {};
-    if (!url || url.length === 0) {
-      if (path && path.length > 0) {
-        url = getFileAccessHttpUrl(path.split(',')[0]);
-      }
-    }
-    if (url) {
-      window.open(url);
-    }
-  }
-
-  function handleClickDeleteFile() {
-    handleChangeCommon(null);
-  }
-
-  return {
-    ...setup,
-    innerFile,
-    uploadAction,
-    uploadHeaders,
-    hasFile,
-    responseName,
-    handleChangeUpload,
-    handleClickDownloadFile,
-    handleClickDeleteFile,
-  };
-}
-
-export function fileGetValue(value) {
-  if (value && value.path) {
-    return value.path;
-  }
-  return value;
-}
-
-export function fileSetValue(value) {
-  if (value) {
-    let first = value.split(',')[0];
-    let name = first.substring(first.lastIndexOf('/') + 1);
-    return {
-      name: name,
-      path: value,
-      status: 'done',
-    };
-  }
-  return value;
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useColumns.ts b/src/components/jeecg/JVxeTable/src/hooks/useColumns.ts
deleted file mode 100644
index cba07a2..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useColumns.ts
+++ /dev/null
@@ -1,361 +0,0 @@
-import type { JVxeColumn, JVxeDataProps, JVxeTableProps } from '../types';
-import { computed, nextTick } from 'vue';
-import { isArray, isEmpty, isPromise } from '/@/utils/is';
-import { cloneDeep } from 'lodash-es';
-import { JVxeTypePrefix, JVxeTypes } from '../types/JVxeTypes';
-import { initDictOptions } from '/@/utils/dict';
-import { pushIfNotExist } from '/@/utils/common/compUtils';
-import { getEnhanced } from '../utils/enhancedUtils';
-import { isRegistered } from '../utils/registerUtils';
-import { JVxeComponent } from '../types/JVxeComponent';
-import { useValidateRules } from './useValidateRules';
-import { JVxeTableMethods } from '../types';
-
-// handle 鏂规硶鍙傛暟
-export interface HandleArgs {
-  props: JVxeTableProps;
-  slots: any;
-  data: JVxeDataProps;
-  methods: JVxeTableMethods;
-  col?: JVxeColumn;
-  columns: JVxeColumn[];
-  renderOptions?: any;
-  enhanced?: JVxeComponent.Enhanced;
-}
-
-export function useColumns(props: JVxeTableProps, data: JVxeDataProps, methods: JVxeTableMethods, slots) {
-  data.vxeColumns = computed(() => {
-    let columns: JVxeColumn[] = [];
-    if (isArray(props.columns)) {
-      // handle 鏂规硶鍙傛暟
-      const args: HandleArgs = { props, slots, data, methods, columns };
-      let seqColumn, selectionColumn, expandColumn, dragSortColumn;
-      props.columns.forEach((column: JVxeColumn) => {
-        // 鎺掗櫎鏈巿鏉冪殑鍒� 1 = 鏄剧ず/闅愯棌锛� 2 = 绂佺敤
-        let auth = methods.getColAuth(column.key);
-        if (auth?.type == '1' && !auth.isAuth) {
-          return;
-        } else if (auth?.type == '2' && !auth.isAuth) {
-          column.disabled = true;
-        }
-        // type 涓嶅~锛岄粯璁や负 normal
-        if (column.type == null || isEmpty(column.type)) {
-          column.type = JVxeTypes.normal;
-        }
-        let col: JVxeColumn = cloneDeep(column);
-        // 澶勭悊闅愯棌鍒�
-        if (col.type === JVxeTypes.hidden) {
-          return handleInnerColumn(args, col, handleHiddenColumn);
-        }
-        // 缁勪欢鏈敞鍐岋紝鑷姩璁剧疆涓� normal
-        if (!isRegistered(col.type)) {
-          col.type = JVxeTypes.normal;
-        }
-        args.enhanced = getEnhanced(col.type);
-        args.col = col;
-        args.renderOptions = {
-          bordered: props.bordered,
-          disabled: props.disabled,
-          scrolling: data.scrolling,
-          isDisabledRow: methods.isDisabledRow,
-          listeners: {
-            trigger: (name, event) => methods.trigger(name, event),
-            valueChange: (event) => methods.trigger('valueChange', event),
-            /** 閲嶆柊鎺掑簭琛� */
-            rowResort: (event) => {
-              methods.doSort(event.oldIndex, event.newIndex);
-              methods.trigger('dragged', event);
-            },
-            /** 鍦ㄥ綋鍓嶈涓嬮潰鎻掑叆涓�琛� */
-            rowInsertDown: (rowIndex) => methods.insertRows({}, rowIndex + 1),
-          },
-        };
-        if (col.type === JVxeTypes.rowNumber) {
-          seqColumn = col;
-          columns.push(col);
-        } else if (col.type === JVxeTypes.rowRadio || col.type === JVxeTypes.rowCheckbox) {
-          selectionColumn = col;
-          columns.push(col);
-        } else if (col.type === JVxeTypes.rowExpand) {
-          expandColumn = col;
-          columns.push(col);
-        } else if (col.type === JVxeTypes.rowDragSort) {
-          dragSortColumn = col;
-          columns.push(col);
-        } else {
-          col.params = column;
-          handlerCol(args);
-        }
-      });
-      handleInnerColumn(args, seqColumn, handleSeqColumn);
-      handleInnerColumn(args, selectionColumn, handleSelectionColumn);
-      handleInnerColumn(args, expandColumn, handleExpandColumn);
-      handleInnerColumn(args, dragSortColumn, handleDragSortColumn, true);
-    }
-    return columns;
-  });
-}
-
-/** 澶勭悊鍐呯疆鍒� */
-function handleInnerColumn(args: HandleArgs, col: JVxeColumn, handler: (args: HandleArgs) => void, assign?: boolean) {
-  let renderOptions = col?.editRender || col?.cellRender;
-  return handler({
-    ...args,
-    col: col,
-    renderOptions: assign ? Object.assign({}, args.renderOptions, renderOptions) : renderOptions,
-  });
-}
-
-/**
- * 澶勭悊闅愯棌鍒�
- */
-function handleHiddenColumn({ col, columns }: HandleArgs) {
-  delete col!.type;
-  col!.visible = false;
-  columns.push(col!);
-}
-
-/**
- * 澶勭悊琛屽彿鍒�
- */
-function handleSeqColumn({ props, col, columns }: HandleArgs) {
-  // 鍒ゆ柇鏄惁寮�鍚簡琛屽彿鍒�
-  if (props.rowNumber) {
-    let column = {
-      type: 'seq',
-      title: '#',
-      width: 60,
-      fixed: 'left',
-      align: 'center',
-    };
-    if (col) {
-      Object.assign(col, column);
-    } else {
-      columns.unshift(column as any);
-    }
-  }
-}
-
-/**
- * 澶勭悊鍙�夋嫨鍒�
- */
-function handleSelectionColumn({ props, data, col, columns }: HandleArgs) {
-  // 鍒ゆ柇鏄惁寮�鍚簡鍙�夋嫨琛�
-  if (props.rowSelection) {
-    let width = 40;
-    if (data.statistics.has && !props.rowExpand && !props.dragSort) {
-      width = 60;
-    }
-    let column = {
-      type: props.rowSelectionType,
-      width: width,
-      fixed: 'left',
-      align: 'center',
-    };
-    if (col) {
-      Object.assign(col, column);
-    } else {
-      columns.unshift(column as any);
-    }
-  }
-}
-
-/**
- * 澶勭悊鍙睍寮�琛�
- */
-function handleExpandColumn({ props, data, col, columns }: HandleArgs) {
-  // 鏄惁鍙睍寮�琛�
-  if (props.rowExpand) {
-    let width = 40;
-    if (data.statistics.has && !props.dragSort) {
-      width = 60;
-    }
-    let column = {
-      type: 'expand',
-      title: '',
-      width: width,
-      fixed: 'left',
-      align: 'center',
-      slots: { content: 'expandContent' },
-    };
-    if (col) {
-      Object.assign(col, column);
-    } else {
-      columns.unshift(column as any);
-    }
-  }
-}
-
-/** 澶勭悊鍙帓搴忓垪 */
-function handleDragSortColumn({ props, data, col, columns, renderOptions }: HandleArgs) {
-  // 鏄惁鍙嫋鍔ㄦ帓搴�
-  if (props.dragSort) {
-    let width = 40;
-    if (data.statistics.has) {
-      width = 60;
-    }
-    let column: any = {
-      title: '',
-      width: width,
-      fixed: 'left',
-      align: 'center',
-    };
-    let cellRender = {
-      name: JVxeTypePrefix + JVxeTypes.rowDragSort,
-      sortKey: props.sortKey,
-    };
-    if (renderOptions) {
-      column.cellRender = Object.assign(renderOptions, cellRender);
-    } else {
-      column.cellRender = cellRender;
-    }
-    if (col) {
-      Object.assign(col, column);
-    } else {
-      columns.unshift(column);
-    }
-  }
-}
-
-/** 澶勭悊鑷畾涔夌粍浠跺垪 */
-function handlerCol(args: HandleArgs) {
-  const { props, col, columns, enhanced } = args;
-  if (!col) return;
-  let { type } = col;
-  col.field = col.key;
-  delete col.type;
-  let renderName = 'cellRender';
-  // 娓叉煋閫夐」
-  let $renderOptions: any = { name: JVxeTypePrefix + type };
-  if (enhanced?.switches.editRender) {
-    if (!(enhanced.switches.visible || props.alwaysEdit)) {
-      renderName = 'editRender';
-    }
-    // $renderOptions.type = (enhanced.switches.visible || props.alwaysEdit) ? 'visible' : 'default'
-  }
-  col[renderName] = $renderOptions;
-
-  handleDict(args);
-  handleRules(args);
-  handleStatistics(args);
-  handleSlots(args);
-  handleLinkage(args);
-  handleReloadEffect(args);
-
-  if (col.editRender) {
-    Object.assign(col.editRender, args.renderOptions);
-  }
-  if (col.cellRender) {
-    Object.assign(col.cellRender, args.renderOptions);
-  }
-
-  columns.push(col);
-}
-
-/**
- * 澶勭悊瀛楀吀
- */
-async function handleDict({ col, methods }: HandleArgs) {
-  if (col && col.params.dictCode) {
-    /** 鍔犺浇鏁版嵁瀛楀吀骞跺悎骞跺埌 options */
-    try {
-      // 鏌ヨ瀛楀吀
-      if (!isPromise(col.params.optionsPromise)) {
-        col.params.optionsPromise = new Promise(async (resolve) => {
-          //update-begin-author:taoyan date:2022-6-1 for: VUEN-1180 銆愪唬鐮佺敓鎴愩�戝瓙琛ㄤ笉鏀寔甯︽潯浠讹紵
-          let dictCodeString = col.params.dictCode;
-          if (dictCodeString) {
-            dictCodeString = encodeURI(dictCodeString);
-          }
-          const dictOptions: any = await initDictOptions(dictCodeString);
-          //update-end-author:taoyan date:2022-6-1 for: VUEN-1180 銆愪唬鐮佺敓鎴愩�戝瓙琛ㄤ笉鏀寔甯︽潯浠讹紵
-          let options = col.params.options ?? [];
-          dictOptions.forEach((dict) => {
-            // 杩囨护閲嶅鏁版嵁
-            if (options.findIndex((o) => o.value === dict.value) === -1) {
-              options.push(dict);
-            }
-          });
-          resolve(options);
-        });
-      }
-      col.params.options = await col.params.optionsPromise;
-      await nextTick();
-      await methods.getXTable().updateData();
-    } catch (e) {
-      console.group(`[JVxeTable] 鏌ヨ瀛楀吀 "${col.params.dictCode}" 鏃跺彂鐢熷紓甯革紒`);
-      console.warn(e);
-      console.groupEnd();
-    }
-  }
-}
-
-/**
- * 澶勭悊鏍¢獙
- */
-function handleRules(args: HandleArgs) {
-  if (isArray(args.col?.validateRules)) {
-    useValidateRules(args);
-  }
-}
-
-/**
- * 澶勭悊缁熻鍒�
- */
-function handleStatistics({ col, data }: HandleArgs) {
-  // sum = 姹傚拰銆乤verage = 骞冲潎鍊�
-  if (col && isArray(col.statistics)) {
-    data.statistics.has = true;
-    col.statistics.forEach((item) => {
-      if (!isEmpty(item)) {
-        let arr = data.statistics[(item as string).toLowerCase()];
-        if (isArray(arr)) {
-          pushIfNotExist(arr, col.key);
-        }
-      }
-    });
-  }
-}
-
-/**
- * 澶勭悊鎻掓Ы
- */
-function handleSlots({ slots, col, renderOptions }: HandleArgs) {
-  // slot 缁勪欢鐗规畩澶勭悊
-  if (col && col.params.type === JVxeTypes.slot) {
-    if (!isEmpty(col.slotName) && slots.hasOwnProperty(col.slotName)) {
-      renderOptions.slot = slots[col.slotName];
-    }
-  }
-}
-
-/** 澶勭悊鑱斿姩鍒� */
-function handleLinkage({ data, col, renderOptions, methods }: HandleArgs) {
-  // 澶勭悊鑱斿姩鍒楋紝鑱斿姩鍒楀彧鑳戒綔鐢ㄤ簬 select 缁勪欢
-  if (col && col.params.type === JVxeTypes.select && data.innerLinkageConfig != null) {
-    // 鍒ゆ柇褰撳墠鍒楁槸鍚︽槸鑱斿姩鍒�
-    if (data.innerLinkageConfig.has(col.key)) {
-      renderOptions.linkage = {
-        config: data.innerLinkageConfig.get(col.key),
-        getLinkageOptionsAsync: methods.getLinkageOptionsAsync,
-        getLinkageOptionsSibling: methods.getLinkageOptionsSibling,
-        handleLinkageSelectChange: methods.handleLinkageSelectChange,
-      };
-    }
-  }
-}
-
-function handleReloadEffect({ props, data, renderOptions }: HandleArgs) {
-  renderOptions.reloadEffect = {
-    enabled: props.reloadEffect,
-    getMap() {
-      return data.reloadEffectRowKeysMap;
-    },
-    isEffect(rowId) {
-      return data.reloadEffectRowKeysMap[rowId] === true;
-    },
-    removeEffect(rowId) {
-      return (data.reloadEffectRowKeysMap[rowId] = false);
-    },
-  };
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useData.ts b/src/components/jeecg/JVxeTable/src/hooks/useData.ts
deleted file mode 100644
index a10cb78..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useData.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-import { ref, reactive, provide, resolveComponent } from 'vue';
-import { useDesign } from '/@/hooks/web/useDesign';
-import { JVxeDataProps, JVxeRefs, JVxeTableProps } from '../types';
-import { VxeGridInstance } from 'vxe-table';
-import { randomString } from '/@/utils/common/compUtils';
-
-export function useData(props: JVxeTableProps): JVxeDataProps {
-  const { prefixCls } = useDesign('j-vxe-table');
-  provide('prefixCls', prefixCls);
-  return {
-    prefixCls: prefixCls,
-    caseId: `j-vxe-${randomString(8)}`,
-    vxeDataSource: ref([]),
-    scroll: reactive({ top: 0, left: 0 }),
-    scrolling: ref(false),
-    defaultVxeProps: reactive({
-      rowId: props.rowKey,
-      // 楂樹寒hover鐨勮
-      highlightHoverRow: true,
-      // 婧㈠嚭闅愯棌骞舵樉绀簍ooltip
-      showOverflow: true,
-      // 琛ㄥご婧㈠嚭闅愯棌骞舵樉绀簍ooltip
-      showHeaderOverflow: true,
-      showFooterOverflow: true,
-      // 鍙紪杈戦厤缃�
-      editConfig: {
-        trigger: 'click',
-        mode: 'cell',
-        activeMethod: () => !props.disabled,
-      },
-      expandConfig: {
-        iconClose: 'ant-table-row-expand-icon ant-table-row-expand-icon-collapsed',
-        iconOpen: 'ant-table-row-expand-icon ant-table-row-expand-icon-expanded',
-      },
-      // 铏氭嫙婊氬姩閰嶇疆锛寉杞村ぇ浜巟x鏉℃暟鎹椂鍚敤铏氭嫙婊氬姩
-      scrollY: {
-        gt: 30,
-      },
-      scrollX: {
-        gt: 20,
-        // 鏆傛椂鍏抽棴宸﹀彸铏氭嫙婊氬姩
-        enabled: false,
-      },
-      radioConfig: { highlight: true },
-      checkboxConfig: { highlight: true },
-      mouseConfig: { selected: false },
-      keyboardConfig: {
-        // 鍒犻櫎閿姛鑳�
-        isDel: false,
-        // Esc閿叧闂紪杈戝姛鑳�
-        isEsc: true,
-        // Tab 閿姛鑳�
-        isTab: true,
-        // 浠绘剰閿繘鍏ョ紪杈戯紙鍔熻兘閿櫎澶栵級
-        isEdit: true,
-        // 鏂瑰悜閿姛鑳�
-        isArrow: true,
-        // 鍥炶溅閿姛鑳�
-        isEnter: true,
-        // 濡傛灉鍔熻兘琚敮鎸侊紝鐢ㄤ簬 column.type=checkbox|radio锛屽紑鍚┖鏍奸敭鍒囨崲澶嶉�夋鎴栧崟閫夋鐘舵�佸姛鑳�
-        isChecked: true,
-      },
-    }),
-    selectedRows: ref<any[]>([]),
-    selectedRowIds: ref<string[]>([]),
-    disabledRowIds: [],
-    statistics: reactive({
-      has: false,
-      sum: [],
-      average: [],
-    }),
-    authsMap: ref(null),
-    innerEditRules: {},
-    innerLinkageConfig: new Map<string, any>(),
-    reloadEffectRowKeysMap: reactive({}),
-  };
-}
-
-export function useRefs(): JVxeRefs {
-  return {
-    gridRef: ref<VxeGridInstance>(),
-    subPopoverRef: ref<any>(),
-    detailsModalRef: ref<any>(),
-  };
-}
-
-export function useResolveComponent(...t: any[]): any {
-  // @ts-ignore
-  return resolveComponent(...t);
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useDataSource.ts b/src/components/jeecg/JVxeTable/src/hooks/useDataSource.ts
deleted file mode 100644
index eeb9328..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useDataSource.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { nextTick, watch } from 'vue';
-import { JVxeDataProps, JVxeRefs, JVxeTableMethods } from '../types';
-import { cloneDeep } from 'lodash-es';
-
-export function useDataSource(props, data: JVxeDataProps, methods: JVxeTableMethods, refs: JVxeRefs) {
-  watch(
-    () => props.dataSource,
-    async () => {
-      data.disabledRowIds = [];
-      data.vxeDataSource.value = cloneDeep(props.dataSource);
-      data.vxeDataSource.value.forEach((row) => {
-        // 鍒ゆ柇鏄惁鏄鐢ㄨ
-        if (methods.isDisabledRow(row)) {
-          data.disabledRowIds.push(row.id);
-        }
-        // 澶勭悊鑱斿姩鍥炴樉鏁版嵁
-        methods.handleLinkageBackData(row);
-      });
-      await waitRef(refs.gridRef);
-      methods.recalcSortNumber();
-    },
-    { immediate: true }
-  );
-}
-
-function waitRef($ref) {
-  return new Promise<any>((resolve) => {
-    (function next() {
-      if ($ref.value) {
-        resolve($ref);
-      } else {
-        nextTick(() => next());
-      }
-    })();
-  });
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useDragSort.ts b/src/components/jeecg/JVxeTable/src/hooks/useDragSort.ts
deleted file mode 100644
index 5d8dd63..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useDragSort.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import { onMounted, onUnmounted, nextTick } from 'vue';
-import { JVxeTableMethods, JVxeTableProps } from '/@/components/jeecg/JVxeTable/src/types';
-import Sortable from 'sortablejs';
-
-export function useDragSort(props: JVxeTableProps, methods: JVxeTableMethods) {
-  if (props.dragSort) {
-    let sortable2: Sortable;
-    let initTime: any;
-
-    onMounted(() => {
-      // 鍔犺浇瀹屾垚涔嬪悗鍐嶇粦瀹氭嫋鍔ㄤ簨浠�
-      initTime = setTimeout(createSortable, 300);
-    });
-
-    onUnmounted(() => {
-      clearTimeout(initTime);
-      if (sortable2) {
-        sortable2.destroy();
-      }
-    });
-
-    function createSortable() {
-      let xTable = methods.getXTable();
-      // let dom = xTable.$el.querySelector('.vxe-table--fixed-wrapper .vxe-table--body tbody')
-      let dom = xTable.$el.querySelector('.body--wrapper>.vxe-table--body tbody');
-      let startChildren = [];
-      sortable2 = Sortable.create(dom as HTMLElement, {
-        handle: '.drag-btn',
-        direction: 'vertical',
-        animation: 300,
-        onStart(e) {
-          let from = e.from;
-          // @ts-ignore
-          startChildren = [...from.children];
-        },
-        onEnd(e) {
-          let oldIndex = e.oldIndex as number;
-          let newIndex = e.newIndex as number;
-          if (oldIndex === newIndex) {
-            return;
-          }
-          // 銆怴UEN-2505銆戣幏鍙栧綋鍓嶈鏁版嵁
-          let rowNode = xTable.getRowNode(e.item);
-          if (!rowNode) {
-            return;
-          }
-          let from = e.from;
-          let element = startChildren[oldIndex];
-          let target = null;
-          if (oldIndex > newIndex) {
-            // 鍚戜笂绉诲姩
-            if (oldIndex + 1 < startChildren.length) {
-              target = startChildren[oldIndex + 1];
-            }
-          } else {
-            // 鍚戜笅绉诲姩
-            target = startChildren[oldIndex + 1];
-          }
-          from.removeChild(element);
-          from.insertBefore(element, target);
-          nextTick(() => {
-            // 銆怴UEN-2505銆戠畻鍑哄洜铏氭嫙婊氬姩瀵艰嚧鐨勫亸绉婚噺
-            let diffIndex = rowNode!.index - oldIndex;
-            if (diffIndex > 0) {
-              oldIndex = oldIndex + diffIndex;
-              newIndex = newIndex + diffIndex;
-            }
-            methods.doSort(oldIndex, newIndex);
-            methods.trigger('dragged', { oldIndex, newIndex });
-          });
-        },
-      });
-    }
-  }
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useFinallyProps.ts b/src/components/jeecg/JVxeTable/src/hooks/useFinallyProps.ts
deleted file mode 100644
index 11db9f7..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useFinallyProps.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import { unref, computed } from 'vue';
-import { merge } from 'lodash-es';
-import { isArray } from '/@/utils/is';
-import { useAttrs } from '/@/hooks/core/useAttrs';
-import { useKeyboardEdit } from '../hooks/useKeyboardEdit';
-import { JVxeDataProps, JVxeTableMethods, JVxeTableProps } from '../types';
-
-export function useFinallyProps(props: JVxeTableProps, data: JVxeDataProps, methods: JVxeTableMethods) {
-  const attrs = useAttrs();
-  // vxe 閿洏鎿嶄綔閰嶇疆
-  const { keyboardEditConfig } = useKeyboardEdit(props);
-  // vxe 鏈�缁� editRules
-  const vxeEditRules = computed(() => merge({}, props.editRules, data.innerEditRules));
-  // vxe 鏈�缁� events
-  const vxeEvents = computed(() => {
-    let listeners = { ...unref(attrs) };
-    let events = {
-      onScroll: methods.handleVxeScroll,
-      onCellClick: methods.handleCellClick,
-      onEditClosed: methods.handleEditClosed,
-      onEditActived: methods.handleEditActived,
-      onRadioChange: methods.handleVxeRadioChange,
-      onCheckboxAll: methods.handleVxeCheckboxAll,
-      onCheckboxChange: methods.handleVxeCheckboxChange,
-    };
-    // 鐢ㄦ埛浼犻�掔殑浜嬩欢锛岃繘琛屽悎骞舵搷浣�
-    Object.keys(listeners).forEach((key) => {
-      let listen = listeners[key];
-      if (events.hasOwnProperty(key)) {
-        if (isArray(listen)) {
-          listen.push(events[key]);
-        } else {
-          listen = [events[key], listen];
-        }
-      }
-      events[key] = listen;
-    });
-    return events;
-  });
-  // vxe 鏈�缁� props
-  const vxeProps = computed(() => {
-    return merge(
-      {},
-      data.defaultVxeProps,
-      {
-        showFooter: data.statistics.has,
-      },
-      unref(attrs),
-      {
-        ref: 'gridRef',
-        size: props.size,
-        loading: false,
-        disabled: props.disabled,
-        columns: unref(data.vxeColumns),
-        editRules: unref(vxeEditRules),
-        height: props.height === 'auto' ? null : props.height,
-        maxHeight: props.maxHeight,
-        border: props.bordered,
-        footerMethod: methods.handleFooterMethod,
-        // 灞曞紑琛岄厤缃�
-        expandConfig: {
-          toggleMethod: methods.handleExpandToggleMethod,
-        },
-        // 鍙紪杈戦厤缃�
-        editConfig: {
-          activeMethod: methods.handleActiveMethod,
-        },
-        radioConfig: {
-          checkMethod: methods.handleCheckMethod,
-        },
-        checkboxConfig: {
-          checkMethod: methods.handleCheckMethod,
-        },
-      },
-      unref(vxeEvents),
-      unref(keyboardEditConfig)
-    );
-  });
-  return {
-    vxeProps,
-    prefixCls: data.prefixCls,
-  };
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useJVxeComponent.ts b/src/components/jeecg/JVxeTable/src/hooks/useJVxeComponent.ts
deleted file mode 100644
index 7bc5cbd..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useJVxeComponent.ts
+++ /dev/null
@@ -1,252 +0,0 @@
-import { computed, nextTick, ref, unref, watch } from 'vue';
-import { propTypes } from '/@/utils/propTypes';
-import { useDesign } from '/@/hooks/web/useDesign';
-import { getEnhanced, replaceProps, vModel } from '../utils/enhancedUtils';
-import { JVxeRenderType } from '../types/JVxeTypes';
-import { isBoolean, isFunction, isObject, isPromise } from '/@/utils/is';
-import { JVxeComponent } from '../types/JVxeComponent';
-import { filterDictText } from '/@/utils/dict/JDictSelectUtil';
-
-export function useJVxeCompProps() {
-  return {
-    // 缁勪欢绫诲瀷
-    type: propTypes.string,
-    // 娓叉煋绫诲瀷
-    renderType: propTypes.string.def('default'),
-    // 娓叉煋鍙傛暟
-    params: propTypes.object,
-    // 娓叉煋鑷畾涔夐�夐」
-    renderOptions: propTypes.object,
-  };
-}
-
-export function useJVxeComponent(props: JVxeComponent.Props) {
-  const value = computed(() => props.params.row[props.params.column.property]);
-  const innerValue = ref(value.value);
-  const row = computed(() => props.params.row);
-  const rows = computed(() => props.params.data);
-  const column = computed(() => props.params.column);
-  // 鐢ㄦ埛閰嶇疆鐨勫師濮� column
-  const originColumn = computed(() => column.value.params);
-  const rowIndex = computed(() => props.params._rowIndex);
-  const columnIndex = computed(() => props.params._columnIndex);
-  // 琛ㄦ牸鏁版嵁闀垮害
-  const fullDataLength = computed(() => props.params.$table.internalData.tableFullData.length);
-  // 鏄惁姝e湪婊氬姩涓�
-  const scrolling = computed(() => !!props.renderOptions.scrolling);
-  const cellProps = computed(() => {
-    let renderOptions = props.renderOptions;
-    let col = originColumn.value;
-
-    let cellProps = {};
-
-    // 杈撳叆鍗犱綅绗�
-    cellProps['placeholder'] = replaceProps(col, col.placeholder);
-
-    // 瑙f瀽props
-    if (isObject(col.props)) {
-      Object.keys(col.props).forEach((key) => {
-        cellProps[key] = replaceProps(col, col.props[key]);
-      });
-    }
-
-    // 鍒ゆ柇鏄惁鏄鐢ㄧ殑鍒�
-    cellProps['disabled'] = isBoolean(col['disabled']) ? col['disabled'] : cellProps['disabled'];
-    // 鍒ゆ柇鏄惁绂佺敤琛�
-    if (renderOptions.isDisabledRow(row.value)) {
-      cellProps['disabled'] = true;
-    }
-    // 鍒ゆ柇鏄惁绂佺敤鎵�鏈夌粍浠�
-    if (renderOptions.disabled === true) {
-      cellProps['disabled'] = true;
-    }
-    //update-begin-author:taoyan date:2022-5-25 for: VUEN-1111 涓�瀵瑰瀛愯〃 閮ㄩ棬閫夋嫨 涓嶅簲璇ョ骇鑱�
-    if (col.checkStrictly === true) {
-      cellProps['checkStrictly'] = true;
-    }
-    //update-end-author:taoyan date:2022-5-25 for: VUEN-1111 涓�瀵瑰瀛愯〃 閮ㄩ棬閫夋嫨 涓嶅簲璇ョ骇鑱�
-
-    //update-begin-author:taoyan date:2022-5-27 for: 鐢ㄦ埛缁勪欢 鎺у埗鍗曢�夊閫夋柊鐨勫弬鏁伴厤缃�
-    if (col.isRadioSelection === true) {
-      cellProps['isRadioSelection'] = true;
-    } else if (col.isRadioSelection === false) {
-      cellProps['isRadioSelection'] = false;
-    }
-    //update-end-author:taoyan date:2022-5-27 for: 鐢ㄦ埛缁勪欢 鎺у埗鍗曢�夊閫夋柊鐨勫弬鏁伴厤缃�
-
-    return cellProps;
-  });
-
-  const listeners = computed(() => {
-    let listeners = Object.assign({}, props.renderOptions.listeners || {});
-    // 榛樿change浜嬩欢
-    if (!listeners.change) {
-      listeners.change = async (event) => {
-        vModel(event.value, row, column);
-        await nextTick();
-        // 澶勭悊 change 浜嬩欢鐩稿叧閫昏緫锛堜緥濡傛牎楠岋級
-        props.params.$table.updateStatus(props.params);
-      };
-    }
-    return listeners;
-  });
-  const context = {
-    innerValue,
-    row,
-    rows,
-    rowIndex,
-    column,
-    columnIndex,
-    originColumn,
-    fullDataLength,
-    cellProps,
-    scrolling,
-    handleChangeCommon,
-    handleBlurCommon,
-  };
-  const ctx = { props, context };
-
-  // 鑾峰彇缁勪欢澧炲己
-  const enhanced = getEnhanced(props.type);
-
-  watch(
-    value,
-    (newValue) => {
-      // 楠岃瘉鍊兼牸寮�
-      let getValue = enhanced.getValue(newValue, ctx);
-      if (newValue !== getValue) {
-        // 鍊兼牸寮忎笉姝g‘锛岄噸鏂拌祴鍊�
-        newValue = getValue;
-        vModel(newValue, row, column);
-      }
-      innerValue.value = enhanced.setValue(newValue, ctx);
-      // 鍒ゆ柇鏄惁鍚敤缈昏瘧
-      if (props.renderType === JVxeRenderType.spaner && enhanced.translate.enabled === true) {
-        if (isFunction(enhanced.translate.handler)) {
-          let res = enhanced.translate.handler(newValue, ctx);
-          // 寮傛缈昏瘧锛屽彲瑙e喅瀛楀吀鏌ヨ鎱㈢殑闂
-          if (isPromise(res)) {
-            res.then((v) => (innerValue.value = v));
-          } else {
-            innerValue.value = res;
-          }
-        }
-      }
-    },
-    { immediate: true }
-  );
-
-  /** 閫氱敤澶勭悊 change 浜嬩欢 */
-  function handleChangeCommon($value) {
-    let newValue = enhanced.getValue($value, ctx);
-    let oldValue = value.value
-    trigger('change', { value: newValue });
-    // 瑙﹀彂valueChange浜嬩欢
-    parentTrigger('valueChange', {
-      type: props.type,
-      value: newValue,
-      oldValue: oldValue,
-      col: originColumn.value,
-      rowIndex: rowIndex.value,
-      columnIndex: columnIndex.value,
-    });
-  }
-
-  /** 閫氱敤澶勭悊 blur 浜嬩欢 */
-  function handleBlurCommon(value) {
-    trigger('blur', { value });
-  }
-
-  /**
-   * 濡傛灉浜嬩欢瀛樺湪鐨勮瘽锛屽氨瑙﹀彂
-   * @param name 浜嬩欢鍚�
-   * @param event 浜嬩欢鍙傛暟
-   * @param args 鍏朵粬闄勫甫鍙傛暟
-   */
-  function trigger(name, event?, args: any[] = []) {
-    let listener = listeners.value[name];
-    if (isFunction(listener)) {
-      if (isObject(event)) {
-        event = packageEvent(name, event);
-      }
-      listener(event, ...args);
-    }
-  }
-
-  function parentTrigger(name, event, args: any[] = []) {
-    args.unshift(packageEvent(name, event));
-    trigger('trigger', name, args);
-  }
-
-  function packageEvent(name, event: any = {}) {
-    event.row = row.value;
-    event.column = column.value;
-    // online澧炲己鍙傛暟鍏煎
-    event.column['key'] = column.value['property'];
-    // event.cellTarget = this
-    if (!event.type) {
-      event.type = name;
-    }
-    if (!event.cellType) {
-      event.cellType = props.type;
-    }
-    // 鏄惁鏍¢獙琛ㄥ崟锛岄粯璁や负true
-    if (isBoolean(event.validate)) {
-      event.validate = true;
-    }
-    return event;
-  }
-
-  /**
-   * 闃叉牱寮忓啿绐佺被鍚嶇敓鎴愬櫒
-   * @param scope
-   */
-  function useCellDesign(scope: string) {
-    return useDesign(`vxe-cell-${scope}`);
-  }
-
-  return {
-    ...context,
-    enhanced,
-    trigger,
-    useCellDesign,
-  };
-}
-
-/**
- * 鑾峰彇缁勪欢榛樿澧炲己
- */
-export function useDefaultEnhanced(): JVxeComponent.EnhancedPartial {
-  return {
-    installOptions: {
-      autofocus: '',
-    },
-    interceptor: {
-      'event.clearActived': () => true,
-      'event.clearActived.className': () => true,
-    },
-    switches: {
-      editRender: true,
-      visible: false,
-    },
-    aopEvents: {
-      editActived() {},
-      editClosed() {},
-      activeMethod: () => true,
-    },
-    translate: {
-      enabled: false,
-      handler(value, ctx) {
-        // 榛樿缈昏瘧鏂规硶
-        if (ctx) {
-          return filterDictText(unref(ctx.context.column).params.options, value);
-        } else {
-          return value;
-        }
-      },
-    },
-    getValue: (value) => value,
-    setValue: (value) => value,
-    createValue: (defaultValue) => defaultValue,
-  } as JVxeComponent.Enhanced;
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useKeyboardEdit.ts b/src/components/jeecg/JVxeTable/src/hooks/useKeyboardEdit.ts
deleted file mode 100644
index a6bb9b9..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useKeyboardEdit.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * JVxeTable 閿洏鎿嶄綔
- */
-import type { VxeTablePropTypes } from 'vxe-table';
-import type { JVxeTableProps } from '../types';
-import { computed } from 'vue';
-
-/**
- * JVxeTable 閿洏鎿嶄綔
- *
- * @param props
- */
-export function useKeyboardEdit(props: JVxeTableProps) {
-  // 鏄惁寮�鍚簡閿洏鎿嶄綔
-  const enabledKeyboard = computed(() => props.keyboardEdit ?? false);
-  // 閲嶅啓 keyboardConfig
-  const keyboardConfig: VxeTablePropTypes.KeyboardConfig = {
-    editMethod({ row, column, $table }) {
-      // 閲嶅啓榛樿鐨勮鐩栧紡锛屾敼涓鸿拷鍔犲紡
-      $table.setActiveCell(row, column);
-      return true;
-    },
-  };
-  // 閿洏鎿嶄綔閰嶇疆
-  const keyboardEditConfig = computed(() => {
-    return {
-      mouseConfig: {
-        selected: enabledKeyboard.value,
-      },
-      keyboardConfig,
-    };
-  });
-
-  return {
-    keyboardEditConfig,
-  };
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useLinkage.ts b/src/components/jeecg/JVxeTable/src/hooks/useLinkage.ts
deleted file mode 100644
index f5916d1..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useLinkage.ts
+++ /dev/null
@@ -1,145 +0,0 @@
-import { watch } from 'vue';
-import { isFunction, isPromise, isArray } from '/@/utils/is';
-import { JVxeColumn, JVxeDataProps, JVxeTableProps, JVxeLinkageConfig } from '../types';
-
-/**
- * 澶氱骇鑱斿姩
- */
-export function useLinkage(props: JVxeTableProps, data: JVxeDataProps, methods) {
-  // 鏁寸悊澶氱骇鑱斿姩閰嶇疆
-  watch(
-    () => props.linkageConfig,
-    (linkageConfig: JVxeLinkageConfig[]) => {
-      data.innerLinkageConfig.clear();
-      if (isArray(linkageConfig) && linkageConfig.length > 0) {
-        linkageConfig.forEach((config) => {
-          let keys = getLinkageKeys(config.key, []);
-          // 澶氫釜key鍏变韩涓�涓紝寮曠敤鍦板潃
-          let configItem = {
-            ...config,
-            keys,
-            optionsMap: new Map(),
-          };
-          keys.forEach((k) => data.innerLinkageConfig.set(k, configItem));
-        });
-      }
-    },
-    { immediate: true }
-  );
-
-  // 鑾峰彇鑱斿姩鐨刱ey椤哄簭
-  function getLinkageKeys(key: string, keys: string[]): string[] {
-    let col = props.columns?.find((col: JVxeColumn) => col.key === key) as JVxeColumn;
-    if (col) {
-      keys.push(col.key);
-      // 瀵绘壘涓嬬骇
-      if (col.linkageKey) {
-        return getLinkageKeys(col.linkageKey, keys);
-      }
-    }
-    return keys;
-  }
-
-  // 澶勭悊鑱斿姩鍥炴樉鏁版嵁
-  function handleLinkageBackData(row) {
-    if (data.innerLinkageConfig.size > 0) {
-      for (let configItem of data.innerLinkageConfig.values()) {
-        autoSetLinkageOptionsByData(row, '', configItem, 0);
-      }
-    }
-  }
-
-  /** 銆愬绾ц仈鍔ㄣ�戣幏鍙栧悓绾ц仈鍔ㄤ笅鎷夐�夐」 */
-  function getLinkageOptionsSibling(row, col, config, request) {
-    // 濡傛灉褰撳墠鍒椾笉鏄《绾у垪
-    let key = '';
-    if (col.key !== config.key) {
-      // 灏辨壘鍑鸿仈鍔ㄤ笂绾у垪
-      let idx = config.keys.findIndex((k) => col.key === k);
-      let parentKey = config.keys[idx - 1];
-      key = row[parentKey];
-      // 濡傛灉鑱斿姩涓婄骇鍒楁病鏈夐�夋嫨鏁版嵁锛屽氨鐩存帴杩斿洖绌烘暟缁�
-      if (key === '' || key == null) {
-        return [];
-      }
-    } else {
-      key = 'root';
-    }
-    let options = config.optionsMap.get(key);
-    if (!Array.isArray(options)) {
-      if (request) {
-        let parent = key === 'root' ? '' : key;
-        return getLinkageOptionsAsync(config, parent);
-      } else {
-        options = [];
-      }
-    }
-    return options;
-  }
-
-  /** 銆愬绾ц仈鍔ㄣ�戣幏鍙栬仈鍔ㄤ笅鎷夐�夐」锛堝紓姝ワ級 */
-  function getLinkageOptionsAsync(config, parent) {
-    return new Promise((resolve) => {
-      let key = parent ? parent : 'root';
-      let options;
-      if (config.optionsMap.has(key)) {
-        options = config.optionsMap.get(key);
-        if (isPromise(options)) {
-          options.then((opt) => {
-            config.optionsMap.set(key, opt);
-            resolve(opt);
-          });
-        } else {
-          resolve(options);
-        }
-      } else if (isFunction(config.requestData)) {
-        // 璋冪敤requestData鏂规硶锛岄�氳繃浼犲叆parent鏉ヨ幏鍙栧瓙绾�
-        // noinspection JSVoidFunctionReturnValueUsed,TypeScriptValidateJSTypes
-        let promise = config.requestData(parent);
-        config.optionsMap.set(key, promise);
-        promise.then((opt) => {
-          config.optionsMap.set(key, opt);
-          resolve(opt);
-        });
-      } else {
-        resolve([]);
-      }
-    });
-  }
-
-  // 銆愬绾ц仈鍔ㄣ�� 鐢ㄤ簬鍥炴樉鏁版嵁锛岃嚜鍔ㄥ~鍏� optionsMap
-  function autoSetLinkageOptionsByData(data, parent, config, level) {
-    if (level === 0) {
-      getLinkageOptionsAsync(config, '');
-    } else {
-      getLinkageOptionsAsync(config, parent);
-    }
-    if (config.keys.length - 1 > level) {
-      let value = data[config.keys[level]];
-      if (value) {
-        autoSetLinkageOptionsByData(data, value, config, level + 1);
-      }
-    }
-  }
-
-  // 銆愬绾ц仈鍔ㄣ�戣仈鍔ㄧ粍浠禼hange鏃讹紝娓呯┖涓嬬骇缁勪欢
-  function handleLinkageSelectChange(row, col, config, value) {
-    if (col.linkageKey) {
-      getLinkageOptionsAsync(config, value);
-      let idx = config.keys.findIndex((k) => k === col.key);
-      let values = {};
-      for (let i = idx; i < config.keys.length; i++) {
-        values[config.keys[i]] = '';
-      }
-      // 娓呯┖鍚庡嚑鍒楃殑鏁版嵁
-      methods.setValues([{ rowKey: row.id, values }]);
-    }
-  }
-
-  return {
-    getLinkageOptionsAsync,
-    getLinkageOptionsSibling,
-    handleLinkageSelectChange,
-    handleLinkageBackData,
-  };
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useMethods.ts b/src/components/jeecg/JVxeTable/src/hooks/useMethods.ts
deleted file mode 100644
index 4d042e0..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useMethods.ts
+++ /dev/null
@@ -1,818 +0,0 @@
-import { Ref, watch } from 'vue';
-import XEUtils from 'xe-utils';
-import { simpleDebounce } from '/@/utils/common/compUtils';
-import { JVxeDataProps, JVxeRefs, JVxeTableProps, JVxeTypes } from '../types';
-import { getEnhanced } from '../utils/enhancedUtils';
-import { VxeTableInstance, VxeTablePrivateMethods } from 'vxe-table';
-import { cloneDeep } from 'lodash-es';
-import { isArray, isEmpty, isNull, isString } from '/@/utils/is';
-import { useLinkage } from './useLinkage';
-import { useWebSocket } from './useWebSocket';
-import { getPrefix, getJVxeAuths } from '../utils/authUtils';
-
-export function useMethods(props: JVxeTableProps, { emit }, data: JVxeDataProps, refs: JVxeRefs, instanceRef: Ref) {
-  let xTableTemp: VxeTableInstance & VxeTablePrivateMethods;
-
-  function getXTable() {
-    if (!xTableTemp) {
-      // !. 涓� typescript 鐨勯潪绌烘柇瑷�
-      xTableTemp = refs.gridRef.value!.getRefMaps().refTable.value;
-    }
-    return xTableTemp;
-  }
-
-  // noinspection JSUnusedGlobalSymbols
-  const hookMethods = {
-    getXTable,
-    addRows,
-    pushRows,
-    insertRows,
-    addOrInsert,
-    setValues,
-    getValues,
-    getTableData,
-    getNewData,
-    getNewDataWithId,
-    getIfRowById,
-    getNewRowById,
-    getDeleteData,
-    getSelectionData,
-    getSelectedData,
-    removeRows,
-    removeRowsById,
-    removeSelection,
-    resetScrollTop,
-    validateTable,
-    fullValidateTable,
-    clearSelection,
-    filterNewRows,
-    isDisabledRow,
-    recalcDisableRows,
-    rowResort,
-  };
-
-  // 澶氱骇鑱斿姩
-  const linkageMethods = useLinkage(props, data, hookMethods);
-  // WebSocket 鏃犵棔鍒锋柊
-  const socketMethods = useWebSocket(props, data, hookMethods);
-
-  // 鍙樉寮忎緵澶栭儴璋冪敤鐨勬柟娉�
-  const publicMethods = {
-    ...hookMethods,
-    ...linkageMethods,
-    ...socketMethods,
-  };
-
-  /** 鐩戝惉vxe婊氬姩鏉′綅缃� */
-  function handleVxeScroll(event) {
-    let { scroll } = data;
-
-    // 璁板綍婊氬姩鏉$殑浣嶇疆
-    scroll.top = event.scrollTop;
-    scroll.left = event.scrollLeft;
-
-    refs.subPopoverRef.value?.close();
-    data.scrolling.value = true;
-    closeScrolling();
-  }
-
-  // 褰撴墜鍔ㄥ嬀閫夊崟閫夋椂瑙﹀彂鐨勪簨浠�
-  function handleVxeRadioChange(event) {
-    let row = event.$table.getRadioRecord();
-    data.selectedRows.value = row ? [row] : [];
-    handleSelectChange('radio', data.selectedRows.value, event);
-  }
-
-  // 褰撴墜鍔ㄥ嬀閫夊叏閫夋椂瑙﹀彂鐨勪簨浠�
-  function handleVxeCheckboxAll(event) {
-    data.selectedRows.value = event.$table.getCheckboxRecords();
-    handleSelectChange('checkbox-all', data.selectedRows.value, event);
-  }
-
-  // 褰撴墜鍔ㄥ嬀閫夊苟涓斿�煎彂鐢熸敼鍙樻椂瑙﹀彂鐨勪簨浠�
-  function handleVxeCheckboxChange(event) {
-    data.selectedRows.value = event.$table.getCheckboxRecords();
-    handleSelectChange('checkbox', data.selectedRows.value, event);
-  }
-
-  // 琛岄�夋嫨change浜嬩欢
-  function handleSelectChange(type, selectedRows, $event) {
-    let action;
-    if (type === 'radio') {
-      action = 'selected';
-    } else if (type === 'checkbox') {
-      action = selectedRows.includes($event.row) ? 'selected' : 'unselected';
-    } else {
-      action = 'selected-all';
-    }
-
-    data.selectedRowIds.value = selectedRows.map((row) => row.id);
-    trigger('selectRowChange', {
-      type: type,
-      action: action,
-      $event: $event,
-      row: $event.row,
-      selectedRows: data.selectedRows.value,
-      selectedRowIds: data.selectedRowIds.value,
-    });
-  }
-
-  // 鐐瑰嚮鍗曞厓鏍兼椂瑙﹀彂鐨勪簨浠�
-  function handleCellClick(event) {
-    let { row, column, $event, $table } = event;
-
-    // 鐐瑰嚮浜嗗彲缂栬緫鐨�
-    if (column.editRender) {
-      refs.subPopoverRef.value?.close();
-      return;
-    }
-
-    // 鏄剧ず璇︾粏淇℃伅
-    if (column.params?.showDetails) {
-      refs.detailsModalRef.value?.open(event);
-    } else if (refs.subPopoverRef.value) {
-      refs.subPopoverRef.value.toggle(event);
-    } else if (props.clickSelectRow) {
-      let className = $event.target.className || '';
-      className = isString(className) ? className : className.toString();
-      // 鐐瑰嚮鐨勬槸expand锛屼笉鍋氬鐞�
-      if (className.includes('vxe-table--expand-btn')) {
-        return;
-      }
-      // 鐐瑰嚮鐨勬槸checkbox锛屼笉鍋氬鐞�
-      if (className.includes('vxe-checkbox--icon') || className.includes('vxe-cell--checkbox')) {
-        return;
-      }
-      // 鐐瑰嚮鐨勬槸radio锛屼笉鍋氬鐞�
-      if (className.includes('vxe-radio--icon') || className.includes('vxe-cell--radio')) {
-        return;
-      }
-      if (props.rowSelectionType === 'radio') {
-        $table.setRadioRow(row);
-        handleVxeRadioChange(event);
-      } else {
-        $table.toggleCheckboxRow(row);
-        handleVxeCheckboxChange(event);
-      }
-    }
-  }
-
-  // 鍗曞厓鏍艰婵�娲荤紪杈戞椂浼氳Е鍙戣浜嬩欢
-  function handleEditActived({ column }) {
-    // 鎵ц澧炲己
-    getEnhanced(column.params.type).aopEvents.editActived!.apply(instanceRef.value, arguments as any);
-  }
-
-  // 鍗曞厓鏍肩紪杈戠姸鎬佷笅琚叧闂椂浼氳Е鍙戣浜嬩欢
-  function handleEditClosed({ column }) {
-    // 鎵ц澧炲己
-    getEnhanced(column.params.type).aopEvents.editClosed!.apply(instanceRef.value, arguments as any);
-  }
-
-  // 杩斿洖鍊煎喅瀹氳鏄惁鍙�変腑
-  function handleCheckMethod({ row }) {
-    if (props.disabled) {
-      return false;
-    }
-    return !data.disabledRowIds.includes(row.id);
-  }
-
-  // 杩斿洖鍊煎喅瀹氬崟鍏冩牸鏄惁鍙互缂栬緫
-  function handleActiveMethod({ row, column }) {
-    let flag = (() => {
-      if (props.disabled) {
-        return false;
-      }
-      if (data.disabledRowIds.includes(row.id)) {
-        return false;
-      }
-      if (column.params?.disabled) {
-        return false;
-      }
-      // 鎵ц澧炲己
-      return getEnhanced(column.params.type).aopEvents.activeMethod!.apply(instanceRef.value, arguments as any) ?? true;
-    })();
-    if (!flag) {
-      getXTable().clearActived();
-    }
-    return flag;
-  }
-
-  /**
-   * 鍒ゆ柇鏄惁鏄鐢ㄨ
-   * @param row 琛屾暟鎹�
-   * @param force 鏄惁寮哄埗鍒ゆ柇
-   */
-  function isDisabledRow(row, force = true) {
-    if (!force) {
-      return !data.disabledRowIds.includes(row.id);
-    }
-    if (props.disabledRows == null || isEmpty(props.disabledRows)) {
-      return false;
-    }
-    let disabled: boolean = false;
-    let keys: string[] = Object.keys(props.disabledRows);
-    for (const key of keys) {
-      // 鍒ゆ柇鏄惁鏈夎灞炴��
-      if (row.hasOwnProperty(key)) {
-        let temp: any = props.disabledRows![key];
-        // 绂佺敤瑙勫垯鍙互鏄竴涓暟缁�
-        if (isArray(temp)) {
-          disabled = temp.includes(row[key]);
-        } else {
-          disabled = temp === row[key];
-        }
-        if (disabled) {
-          break;
-        }
-      }
-    }
-    return disabled;
-  }
-
-  // 閲嶆柊璁$畻绂佺敤琛�
-  function recalcDisableRows() {
-    let xTable = getXTable();
-    data.disabledRowIds = [];
-    const { tableFullData } = xTable.internalData;
-    tableFullData.forEach((row) => {
-      // 鍒ゆ柇鏄惁鏄鐢ㄨ
-      if (isDisabledRow(row)) {
-        data.disabledRowIds.push(row.id);
-      }
-    });
-    xTable.updateData();
-  }
-
-  // 鐩戝惉 disabledRows锛屾洿鏀规椂閲嶆柊璁$畻绂佺敤琛�
-  watch(
-    () => props.disabledRows,
-    () => recalcDisableRows()
-  );
-
-  // 杩斿洖鍊煎喅瀹氭槸鍚﹀厑璁稿睍寮�銆佹敹璧疯
-  function handleExpandToggleMethod({ expanded }) {
-    return !(expanded && props.disabled);
-  }
-
-  // 璁剧疆 data.scrolling 闃叉姈妯″紡
-  const closeScrolling = simpleDebounce(function () {
-    data.scrolling.value = false;
-  }, 100);
-
-  /** 琛ㄥ熬鏁版嵁澶勭悊鏂规硶锛岀敤浜庢樉绀虹粺璁′俊鎭� */
-  function handleFooterMethod({ columns, data: $data }) {
-    const { statistics } = data;
-    let footers: any[] = [];
-    if (statistics.has) {
-      if (statistics.sum.length > 0) {
-        footers.push(
-          getFooterStatisticsMap({
-            columns: columns,
-            title: '鍚堣',
-            checks: statistics.sum,
-            method: (column) => XEUtils.sum($data, column.property),
-          })
-        );
-      }
-      if (statistics.average.length > 0) {
-        footers.push(
-          getFooterStatisticsMap({
-            columns: columns,
-            title: '骞冲潎',
-            checks: statistics.average,
-            method: (column) => XEUtils.mean($data, column.property),
-          })
-        );
-      }
-    }
-    return footers;
-  }
-
-  /** 鑾峰彇搴曢儴缁熻Map */
-  function getFooterStatisticsMap({ columns, title, checks, method }) {
-    return columns.map((column, columnIndex) => {
-      if (columnIndex === 0) {
-        return title;
-      }
-      if (checks.includes(column.property)) {
-        return method(column, columnIndex);
-      }
-      return null;
-    });
-  }
-
-  // 鍒涘缓鏂拌锛岃嚜鍔ㄦ坊鍔犻粯璁ゅ��
-  function createRow(record: Recordable = {}) {
-    let xTable = getXTable();
-    // 娣诲姞榛樿鍊�
-    xTable.internalData.tableFullColumn.forEach((column) => {
-      let col = column.params;
-      if (col) {
-        if (col.key && (record[col.key] == null || record[col.key] === '')) {
-          // 璁剧疆榛樿鍊�
-          let createValue = getEnhanced(col.type).createValue;
-          let defaultValue = col.defaultValue ?? '';
-          let ctx = { context: { row: record, column, $table: xTable } };
-          record[col.key] = createValue(defaultValue, ctx);
-        }
-        // 澶勭悊鑱斿姩鍒�
-        if (col.type === JVxeTypes.select && data.innerLinkageConfig.size > 0) {
-          // 鍒ゆ柇褰撳墠鍒楁槸鍚︽槸鑱斿姩鍒�
-          if (data.innerLinkageConfig.has(col.key)) {
-            let configItem = data.innerLinkageConfig.get(col.key);
-            linkageMethods.getLinkageOptionsAsync(configItem, '');
-          }
-        }
-      }
-    });
-    return record;
-  }
-
-  async function addOrInsert(rows: Recordable | Recordable[] = {}, index, triggerName, options?: IAddRowsOptions) {
-    let xTable = getXTable();
-    let records;
-    if (isArray(rows)) {
-      records = rows;
-    } else {
-      records = [rows];
-    }
-    // 閬嶅巻娣诲姞榛樿鍊�
-    records.forEach((record) => createRow(record));
-    let setActive = options?.setActive ?? props.addSetActive ?? true;
-    let result = await pushRows(records, { index: index, setActive });
-    // 閬嶅巻鎻掑叆鐨勮
-    // online js澧炲己鏃朵互浼犺繃鏉ュ�间负鍑嗭紝涓嶅啀璧嬮粯璁ゅ��
-    if (!(options?.isOnlineJS ?? false)) {
-      if (triggerName != null) {
-        for (let i = 0; i < result.rows.length; i++) {
-          let row = result.rows[i];
-          trigger(triggerName, {
-            row: row,
-            rows: result.rows,
-            insertIndex: index,
-            $table: xTable,
-            target: instanceRef.value,
-            isModalData: options?.isModalData
-          });
-        }
-      }
-    }
-    return result;
-  }
-
-  // 鏂板銆佹彃鍏ヤ竴琛屾椂鐨勫彲閫夊弬鏁�
-  interface IAddRowsOptions {
-    // 鏄惁鏄� onlineJS澧炲己 瑙﹀彂鐨�
-    isOnlineJS?: boolean;
-    // 鏄惁婵�娲荤紪杈戠姸鎬�
-    setActive?: boolean;
-    //鏄惁闇�瑕佽Е鍙慶hange浜嬩欢
-    emitChange?:boolean
-    // 鏄惁鏄痬odal寮圭獥娣诲姞鐨勬暟鎹�
-    isModalData?:boolean
-  }
-
-  /**
-   * 娣诲姞涓�琛屾垨澶氳
-   *
-   * @param rows
-   * @param options 鍙傛暟
-   * @return
-   */
-  async function addRows(rows: Recordable | Recordable[] = {}, options?: IAddRowsOptions) {
-    //update-begin-author:taoyan date:2022-8-12 for: VUEN-1892銆恛nline瀛愯〃寮规銆戞湁涓讳粠鍏宠仈js鏃讹紝瀛愯〃寮规淇敼浜嗘暟鎹紝涓昏〃瀛楁鏈慨鏀�
-    let result = await addOrInsert(rows, -1, 'added', options);
-    if(options && options!.emitChange==true){
-      trigger('valueChange', {column: 'all', row: result.row})
-    }
-    return result;
-    //update-end-author:taoyan date:2022-8-12 for: VUEN-1892銆恛nline瀛愯〃寮规銆戞湁涓讳粠鍏宠仈js鏃讹紝瀛愯〃寮规淇敼浜嗘暟鎹紝涓昏〃瀛楁鏈慨鏀�
-  }
-
-  /**
-   * 娣诲姞涓�琛屾垨澶氳涓存椂鏁版嵁锛屼笉浼氬~鍏呴粯璁ゅ�硷紝浼犱粈涔堝氨娣诲姞杩涘幓浠�涔�
-   * @param rows
-   * @param options 閫夐」
-   * @param options.setActive 鏄惁婵�娲绘渶鍚庝竴琛岀殑缂栬緫妯″紡
-   */
-  async function pushRows(rows: Recordable | Recordable[] = {}, options = { setActive: false, index: -1 }) {
-    let xTable = getXTable();
-    let { setActive, index } = options;
-    index = index === -1 ? index : xTable.internalData.tableFullData[index];
-    // 鎻掑叆琛�
-    let result = await xTable.insertAt(rows, index);
-    if (setActive) {
-      // 婵�娲绘渶鍚庝竴琛岀殑缂栬緫妯″紡
-      xTable.setActiveRow(result.rows[result.rows.length - 1]);
-    }
-    await recalcSortNumber();
-    return result;
-  }
-
-  /**
-   * 鎻掑叆涓�琛屾垨澶氳涓存椂鏁版嵁
-   *
-   * @param rows
-   * @param index 娣诲姞涓嬫爣锛屾暟瀛楋紝蹇呭~
-   * @param options 鍙傛暟
-   * @return
-   */
-  function insertRows(rows: Recordable | Recordable[] = {}, index: number, options?: IAddRowsOptions) {
-    if (index < 0) {
-      console.warn(`銆怞VxeTable銆慽nsertRows锛歩ndex蹇呴』浼犻�掓暟瀛楋紝涓斿ぇ浜�-1`);
-      return;
-    }
-    return addOrInsert(rows, index, 'inserted', options);
-  }
-
-  /** 鑾峰彇琛ㄦ牸琛ㄥ崟閲岀殑鍊� */
-  function getValues(callback, rowIds) {
-    let tableData = getTableData({ rowIds: rowIds });
-    callback('', tableData);
-  }
-
-  /** 鑾峰彇琛ㄦ牸鏁版嵁 */
-  function getTableData(options: any = {}) {
-    let { rowIds } = options;
-    let tableData;
-    // 浠呮煡璇㈡寚瀹歩d鐨勮
-    if (isArray(rowIds) && rowIds.length > 0) {
-      tableData = [];
-      rowIds.forEach((rowId) => {
-        let { row } = getIfRowById(rowId);
-        if (row) {
-          tableData.push(row);
-        }
-      });
-    } else {
-      // 鏌ヨ鎵�鏈夎
-      tableData = getXTable().getTableData().fullData;
-    }
-    return filterNewRows(tableData, false);
-  }
-
-  /** 浠呰幏鍙栨柊澧炵殑鏁版嵁 */
-  function getNewData() {
-    let newData = getNewDataWithId();
-    newData.forEach((row) => delete row.id);
-    return newData;
-  }
-
-  /** 浠呰幏鍙栨柊澧炵殑鏁版嵁,甯︽湁id */
-  function getNewDataWithId() {
-    let xTable = getXTable();
-    return cloneDeep(xTable.getInsertRecords());
-  }
-
-  /** 鏍规嵁ID鑾峰彇琛岋紝鏂板鐨勮涔熻兘鏌ュ嚭鏉� */
-  function getIfRowById(id) {
-    let xTable = getXTable();
-    let row = xTable.getRowById(id),
-      isNew = false;
-    if (!row) {
-      row = getNewRowById(id);
-      if (!row) {
-        console.warn(`JVxeTable.getIfRowById锛氭病鏈夋壘鍒癷d涓�"${id}"鐨勮`);
-        return { row: null };
-      }
-      isNew = true;
-    }
-    return { row, isNew };
-  }
-
-  /** 閫氳繃涓存椂ID鑾峰彇鏂板鐨勮 */
-  function getNewRowById(id) {
-    let records = getXTable().getInsertRecords();
-    for (let record of records) {
-      if (record.id === id) {
-        return record;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * 杩囨护娣诲姞鐨勮
-   * @param rows 瑕佺瓫閫夌殑琛屾暟鎹�
-   * @param remove true = 鍒犻櫎鏂板锛宖alse=鍙垹闄d
-   * @param handler function
-   */
-  function filterNewRows(rows, remove = true, handler?: Fn) {
-    let insertRecords = getXTable().getInsertRecords();
-    let records: Recordable[] = [];
-    for (let row of rows) {
-      let item = cloneDeep(row);
-      if (insertRecords.includes(row)) {
-        handler ? handler({ item, row, insertRecords }) : null;
-        if (remove) {
-          continue;
-        }
-        delete item.id;
-      }
-      records.push(item);
-    }
-    return records;
-  }
-
-  /**
-   * 閲嶇疆婊氬姩鏉op浣嶇疆
-   * @param top 鏂皌op浣嶇疆锛岀暀绌哄垯婊氬姩鍒颁笂娆¤褰曠殑浣嶇疆锛岀敤浜庤В鍐冲垏鎹ab閫夐」鍗℃椂瀵艰嚧鐧藉睆浠ュ強鑷姩灏嗘粴鍔ㄦ潯婊氬姩鍒伴《閮ㄧ殑闂
-   */
-  function resetScrollTop(top?) {
-    let xTable = getXTable();
-    xTable.scrollTo(null, top == null || top === '' ? data.scroll.top : top);
-  }
-
-  /** 鏍¢獙table锛屽け璐ヨ繑鍥瀍rrMap锛屾垚鍔熻繑鍥瀗ull */
-  async function validateTable(rows?) {
-    let xTable = getXTable();
-    const errMap = await xTable.validate(rows ?? true).catch((errMap) => errMap);
-    return errMap ? errMap : null;
-  }
-
-  /** 瀹屾暣鏍¢獙 */
-  async function fullValidateTable(rows?) {
-    let xTable = getXTable();
-    const errMap = await xTable.fullValidate(rows ?? true).catch((errMap) => errMap);
-    return errMap ? errMap : null;
-  }
-
-  type setValuesParam = { rowKey: string; values: Recordable };
-
-  /**
-   * 璁剧疆鏌愯鏌愬垪鐨勫��
-   *
-   * @param values
-   * @return 杩斿洖鍙楀奖鍝嶇殑鍗曞厓鏍兼暟閲�
-   */
-  function setValues(values: setValuesParam[]): number {
-    if (!isArray(values)) {
-      console.warn(`[JVxeTable] setValues 蹇呴』浼犻�掓暟缁刞);
-      return 0;
-    }
-    let xTable = getXTable();
-    let count = 0;
-    values.forEach((item) => {
-      let { rowKey, values: record } = item;
-      let { row } = getIfRowById(rowKey);
-      if (!row) {
-        return;
-      }
-      Object.keys(record).forEach((colKey) => {
-        let column = xTable.getColumnByField(colKey);
-        if (column) {
-          let oldValue = row[colKey];
-          let newValue = record[colKey];
-          if (newValue !== oldValue) {
-            row[colKey] = newValue;
-            // 瑙﹀彂 valueChange 浜嬩欢
-            trigger('valueChange', {
-              type: column.params.type,
-              value: newValue,
-              oldValue: oldValue,
-              col: column.params,
-              column: column,
-              isSetValues: true,
-              row: {...row}
-            });
-            count++;
-          }
-        } else {
-          console.warn(`[JVxeTable] setValues 娌℃湁鎵惧埌key涓�"${colKey}"鐨勫垪`);
-        }
-      });
-    });
-    if (count > 0) {
-      xTable.updateData();
-    }
-    return count;
-  }
-
-  /** 娓呯┖閫夋嫨琛� */
-  async function clearSelection() {
-    const xTable = getXTable();
-    let event = { $table: xTable, target: instanceRef.value };
-    if (props.rowSelectionType === JVxeTypes.rowRadio) {
-      await xTable.clearRadioRow();
-      handleVxeRadioChange(event);
-    } else {
-      await xTable.clearCheckboxRow();
-      handleVxeCheckboxChange(event);
-    }
-  }
-
-  /**
-   * 鑾峰彇閫変腑鏁版嵁
-   * @param isFull 濡傛灉 isFull=true 鍒欒幏鍙栧叏琛ㄥ凡閫変腑鐨勬暟鎹�
-   */
-  function getSelectionData(isFull?: boolean) {
-    const xTable = getXTable();
-    if (props.rowSelectionType === JVxeTypes.rowRadio) {
-      let row = xTable.getRadioRecord(isFull);
-      if (isNull(row)) {
-        return [];
-      }
-      return filterNewRows([row], false);
-    } else {
-      return filterNewRows(xTable.getCheckboxRecords(isFull), false);
-    }
-  }
-
-  /** 浠呰幏鍙栬鍒犻櫎鐨勬暟鎹紙鏂板鍙堣鍒犻櫎鐨勬暟鎹笉浼氳鑾峰彇鍒帮級 */
-  function getDeleteData() {
-    return filterNewRows(getXTable().getRemoveRecords(), false);
-  }
-
-  /** 鍒犻櫎涓�琛屾垨澶氳鏁版嵁 */
-  async function removeRows(rows) {
-    const xTable = getXTable();
-    const res = await xTable.remove(rows);
-    let removeEvent: any = { deleteRows: rows, $table: xTable };
-    trigger('removed', removeEvent);
-    await recalcSortNumber();
-    return res;
-  }
-
-  /** 鏍规嵁id鍒犻櫎涓�琛屾垨澶氳 */
-  function removeRowsById(rowId) {
-    let rowIds;
-    if (isArray(rowId)) {
-      rowIds = rowId;
-    } else {
-      rowIds = [rowId];
-    }
-    let rows = rowIds
-      .map((id) => {
-        let { row } = getIfRowById(id);
-        if (!row) {
-          return;
-        }
-        if (row) {
-          return row;
-        } else {
-          console.warn(`銆怞VxeTable銆憆emoveRowsById锛�${id}涓嶅瓨鍦╜);
-          return null;
-        }
-      })
-      .filter((row) => row != null);
-    return removeRows(rows);
-  }
-
-  // 鍒犻櫎閫変腑鐨勬暟鎹�
-  async function removeSelection() {
-    let xTable = getXTable();
-    let res;
-    if (props.rowSelectionType === JVxeTypes.rowRadio) {
-      res = await xTable.removeRadioRow();
-    } else {
-      res = await xTable.removeCheckboxRow();
-    }
-    await clearSelection();
-    await recalcSortNumber();
-    return res;
-  }
-
-  /** 閲嶆柊璁$畻鎺掑簭瀛楁鐨勬暟鍊� */
-  async function recalcSortNumber(force = false) {
-    if (props.dragSort || force) {
-      let xTable = getXTable();
-      let sortKey = props.sortKey ?? 'orderNum';
-      let sortBegin = props.sortBegin ?? 0;
-      xTable.internalData.tableFullData.forEach((data) => (data[sortKey] = sortBegin++));
-      // 4.1.0
-      await xTable.updateCache();
-      // 4.1.1
-      // await xTable.cacheRowMap()
-      return await xTable.updateData();
-    }
-  }
-
-  /**
-   * 鎺掑簭琛ㄦ牸
-   * @param oldIndex
-   * @param newIndex
-   * @param force 寮哄埗鎺掑簭
-   */
-  async function doSort(oldIndex: number, newIndex: number, force = false) {
-    if (props.dragSort || force) {
-      let xTable = getXTable();
-      let sort = (array) => {
-        // 瀛樺偍old鏁版嵁锛屽苟鍒犻櫎璇ラ」
-        let row = array.splice(oldIndex, 1)[0];
-        // 鍚憂ewIndex澶勬坊鍔爋ld鏁版嵁
-        array.splice(newIndex, 0, row);
-      };
-      sort(xTable.internalData.tableFullData);
-      if (xTable.keepSource) {
-        sort(xTable.internalData.tableSourceData);
-      }
-      return await recalcSortNumber(force);
-    }
-  }
-
-  /** 琛岄噸鏂版帓搴� */
-  function rowResort(oldIndex: number, newIndex: number) {
-    return doSort(oldIndex, newIndex, true);
-  }
-
-  // ---------------- begin 鏉冮檺鎺у埗 ----------------
-  // 鍔犺浇鏉冮檺
-  function loadAuthsMap() {
-    if (!props.authPre || props.authPre.length == 0) {
-      data.authsMap.value = null;
-    } else {
-      data.authsMap.value = getJVxeAuths(props.authPre);
-    }
-  }
-
-  /**
-   * 鏍规嵁 鏉冮檺code 鑾峰彇鏉冮檺
-   * @param authCode
-   */
-  function getAuth(authCode) {
-    if (data.authsMap.value != null && props.authPre) {
-      let prefix = getPrefix(props.authPre);
-      return data.authsMap.value.get(prefix + authCode);
-    }
-    return null;
-  }
-
-  // 鑾峰彇鍒楁潈闄�
-  function getColAuth(key: string) {
-    return getAuth(key);
-  }
-
-  // 鍒ゆ柇鎸夐挳鏉冮檺
-  function hasBtnAuth(key: string) {
-    return getAuth('btn:' + key)?.isAuth ?? true;
-  }
-
-  // ---------------- end 鏉冮檺鎺у埗 ----------------
-
-  /* --- 杈呭姪鏂规硶 ---*/
-
-  function created() {
-    loadAuthsMap();
-  }
-
-  // 瑙﹀彂浜嬩欢
-  function trigger(name, event: any = {}) {
-    event.$target = instanceRef.value;
-    event.$table = getXTable();
-    //online澧炲己鍙傛暟鍏煎
-    event.target = instanceRef.value;
-    emit(name, event);
-  }
-
-
-  /**
-   * 鑾峰彇閫変腑鐨勮-鍜� getSelectionData 鍖哄埆鍦ㄤ簬瀵逛簬鏂板鐨勮涔熶細杩斿洖ID
-   * 鐢ㄤ簬onlinePopForm
-   * @param isFull
-   */
-  function getSelectedData(isFull?: boolean) {
-    const xTable = getXTable();
-    let rows:any[] = []
-    if (props.rowSelectionType === JVxeTypes.rowRadio) {
-      let row = xTable.getRadioRecord(isFull);
-      if (isNull(row)) {
-        return [];
-      }
-      rows = [row]
-    } else {
-      rows = xTable.getCheckboxRecords(isFull)
-    }
-    let records: Recordable[] = [];
-    for (let row of rows) {
-      let item = cloneDeep(row);
-      records.push(item);
-    }
-    return records;
-  }
-
-  return {
-    methods: {
-      trigger,
-      ...publicMethods,
-      closeScrolling,
-      doSort,
-      recalcSortNumber,
-      handleVxeScroll,
-      handleVxeRadioChange,
-      handleVxeCheckboxAll,
-      handleVxeCheckboxChange,
-      handleFooterMethod,
-      handleCellClick,
-      handleEditActived,
-      handleEditClosed,
-      handleCheckMethod,
-      handleActiveMethod,
-      handleExpandToggleMethod,
-      getColAuth,
-      hasBtnAuth,
-    },
-    publicMethods,
-    created,
-  };
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/usePagination.ts b/src/components/jeecg/JVxeTable/src/hooks/usePagination.ts
deleted file mode 100644
index 5bd6546..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/usePagination.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-import { computed, reactive, h } from 'vue';
-import { JVxeTableMethods, JVxeTableProps } from '/@/components/jeecg/JVxeTable/src/types';
-import { isEmpty } from '/@/utils/is';
-import { Pagination } from 'ant-design-vue';
-
-export function usePagination(props: JVxeTableProps, methods: JVxeTableMethods) {
-  const innerPagination = reactive({
-    current: 1,
-    pageSize: 10,
-    pageSizeOptions: ['10', '20', '30'],
-    showTotal: (total, range) => {
-      return range[0] + '-' + range[1] + ' 鍏� ' + total + ' 鏉�';
-    },
-    showQuickJumper: true,
-    showSizeChanger: true,
-    total: 100,
-  });
-
-  const bindProps = computed(() => {
-    return {
-      ...innerPagination,
-      ...props.pagination,
-      size: props.size === 'tiny' ? 'small' : '',
-    };
-  });
-
-  const boxClass = computed(() => {
-    return {
-      'j-vxe-pagination': true,
-      'show-quick-jumper': !!bindProps.value.showQuickJumper,
-    };
-  });
-
-  function handleChange(current, pageSize) {
-    innerPagination.current = current;
-    methods.trigger('pageChange', { current, pageSize });
-  }
-
-  function handleShowSizeChange(current, pageSize) {
-    innerPagination.pageSize = pageSize;
-    methods.trigger('pageChange', { current, pageSize });
-  }
-
-  /** 娓叉煋鍒嗛〉鍣� */
-  function renderPagination() {
-    if (props.pagination && !isEmpty(props.pagination)) {
-      return h(
-        'div',
-        {
-          class: boxClass.value,
-        },
-        [
-          h(Pagination, {
-            ...bindProps.value,
-            disabled: props.disabled,
-            onChange: handleChange,
-            onShowSizeChange: handleShowSizeChange,
-          }),
-        ]
-      );
-    }
-    return null;
-  }
-
-  return { renderPagination };
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useRenderComponents.ts b/src/components/jeecg/JVxeTable/src/hooks/useRenderComponents.ts
deleted file mode 100644
index e8ad036..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useRenderComponents.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { h } from 'vue';
-import { JVxeDataProps, JVxeTableMethods, JVxeTableProps } from '../types';
-import JVxeSubPopover from '../components/JVxeSubPopover.vue';
-import JVxeDetailsModal from '../components/JVxeDetailsModal.vue';
-import { useToolbar } from '/@/components/jeecg/JVxeTable/src/hooks/useToolbar';
-import { usePagination } from '/@/components/jeecg/JVxeTable/src/hooks/usePagination';
-
-export function useRenderComponents(props: JVxeTableProps, data: JVxeDataProps, methods: JVxeTableMethods, slots) {
-  // 娓叉煋 toolbar
-  const { renderToolbar } = useToolbar(props, data, methods, slots);
-  // 娓叉煋鍒嗛〉鍣�
-  const { renderPagination } = usePagination(props, methods);
-
-  // 娓叉煋 toolbarAfter 鎻掓Ы
-  function renderToolbarAfterSlot() {
-    if (slots['toolbarAfter']) {
-      return slots['toolbarAfter']();
-    }
-    return null;
-  }
-
-  // 娓叉煋鐐瑰嚮鏃跺脊鍑虹殑瀛愯〃
-  function renderSubPopover() {
-    if (props.clickRowShowSubForm && slots.subForm) {
-      return h(
-        JVxeSubPopover,
-        {
-          ref: 'subPopoverRef',
-        },
-        {
-          subForm: slots.subForm,
-        }
-      );
-    }
-    return null;
-  }
-
-  // 娓叉煋鐐瑰嚮鏃跺脊鍑虹殑璇︾粏淇℃伅
-  function renderDetailsModal() {
-    if (props.clickRowShowMainForm && slots.mainForm) {
-      return h(
-        JVxeDetailsModal,
-        {
-          ref: 'detailsModalRef',
-          trigger: methods.trigger,
-        },
-        {
-          mainForm: slots.mainForm,
-        }
-      );
-    }
-  }
-
-  return {
-    renderToolbar,
-    renderPagination,
-    renderSubPopover,
-    renderDetailsModal,
-    renderToolbarAfterSlot,
-  };
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useToolbar.ts b/src/components/jeecg/JVxeTable/src/hooks/useToolbar.ts
deleted file mode 100644
index 05b51c1..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useToolbar.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import { h } from 'vue';
-import JVxeToolbar from '../components/JVxeToolbar.vue';
-import { JVxeDataProps, JVxeTableMethods, JVxeTableProps } from '../types';
-
-export function useToolbar(props: JVxeTableProps, data: JVxeDataProps, methods: JVxeTableMethods, $slots) {
-  /** 娓叉煋宸ュ叿鏍� */
-  function renderToolbar() {
-    if (props.toolbar) {
-      return h(
-        JVxeToolbar,
-        {
-          size: props.size,
-          disabled: props.disabled,
-          toolbarConfig: props.toolbarConfig,
-          disabledRows: props.disabledRows,
-          hasBtnAuth: methods.hasBtnAuth,
-          selectedRowIds: data.selectedRowIds.value,
-          // 鏂板浜嬩欢
-          onAdd: () => methods.addRows(),
-          // 淇濆瓨浜嬩欢
-          onSave: () => methods.trigger('save'),
-          onRemove() {
-            let $table = methods.getXTable();
-            let deleteRows = methods.filterNewRows(data.selectedRows.value);
-            // 瑙﹀彂鍒犻櫎浜嬩欢
-            if (deleteRows.length > 0) {
-              let removeEvent: any = { deleteRows, $table};
-              if (props.asyncRemove) {
-                // 纭鍒犻櫎锛屽彧鏈夎皟鐢ㄨ繖涓柟娉曟墠浼氱湡鍒犻櫎
-                removeEvent.confirmRemove = () => methods.removeSelection();
-              } else {
-                methods.removeSelection();
-              }
-              methods.trigger('removed', removeEvent);
-            } else {
-              methods.removeSelection();
-            }
-          },
-          // 娓呴櫎閫夋嫨浜嬩欢
-          onClearSelection: () => methods.clearSelection(),
-          onRegister: ({ xToolbarRef }) => methods.getXTable().connect(xToolbarRef.value),
-        },
-        {
-          toolbarPrefix: $slots.toolbarPrefix,
-          toolbarSuffix: $slots.toolbarSuffix,
-        }
-      );
-    }
-    return null;
-  }
-
-  return { renderToolbar };
-}
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useValidateRules.ts b/src/components/jeecg/JVxeTable/src/hooks/useValidateRules.ts
deleted file mode 100644
index 2535b41..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useValidateRules.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-import { VxeTablePropTypes } from 'vxe-table';
-import { isArray } from '/@/utils/is';
-import { HandleArgs } from './useColumns';
-import { replaceProps } from '../utils/enhancedUtils';
-
-export function useValidateRules(args: HandleArgs) {
-  const { data } = args;
-  const col = args.col!;
-  let rules: VxeTablePropTypes.EditRules[] = [];
-  if (isArray(col.validateRules)) {
-    for (let rule of col.validateRules) {
-      let replace = {
-        message: replaceProps(col, rule.message),
-      };
-      if (rule.unique || rule.pattern === 'only') {
-        // 鍞竴鏍¢獙鍣�
-        rule.validator = uniqueValidator(args);
-      } else if (rule.pattern) {
-        // 闈炵┖
-        if (rule.pattern === fooPatterns[0].value) {
-          rule.required = true;
-          delete rule.pattern;
-        } else {
-          // 鍏煎Online琛ㄥ崟鐨勭壒娈婅鍒�
-          for (let foo of fooPatterns) {
-            if (foo.value === rule.pattern) {
-              rule.pattern = foo.pattern;
-              break;
-            }
-          }
-        }
-      } else if (typeof rule.handler === 'function') {
-        // 鑷畾涔夊嚱鏁版牎楠�
-        rule.validator = handlerConvertToValidator;
-      }
-      rules.push(Object.assign({}, rule, replace));
-    }
-  }
-  data.innerEditRules[col.key] = rules;
-}
-
-/** 鍞竴鏍¢獙鍣� */
-function uniqueValidator({ methods }: HandleArgs) {
-  return function (event) {
-    const { cellValue, column, rule } = event;
-    let tableData = methods.getTableData();
-    let findCount = 0;
-    for (let rowData of tableData) {
-      if (rowData[column.params.key] === cellValue) {
-        if (++findCount >= 2) {
-          return Promise.reject(new Error(rule.message));
-        }
-      }
-    }
-    return Promise.resolve();
-  };
-}
-
-/** 鏃х増handler杞负鏂扮増Validator */
-function handlerConvertToValidator(event) {
-  const { column, rule } = event;
-  return new Promise((resolve, reject) => {
-    rule.handler(event, (flag, msg) => {
-      let message = rule.message;
-      if (typeof msg === 'string') {
-        message = replaceProps(column.params, msg);
-      }
-      if (flag == null) {
-        resolve(message);
-      } else if (!!flag) {
-        resolve(message);
-      } else {
-        reject(new Error(message));
-      }
-    });
-  });
-}
-
-// 鍏煎 online 鐨勮鍒�
-const fooPatterns = [
-  { title: '闈炵┖', value: '*', pattern: /^.+$/ },
-  { title: '6鍒�16浣嶆暟瀛�', value: 'n6-16', pattern: /^\d{6,16}$/ },
-  { title: '6鍒�16浣嶄换鎰忓瓧绗�', value: '*6-16', pattern: /^.{6,16}$/ },
-  { title: '6鍒�18浣嶅瓧姣�', value: 's6-18', pattern: /^[a-z|A-Z]{6,18}$/ },
-  //update-begin-author:taoyan date:2022-6-1 for: VUEN-1160 瀵瑰瀛愯〃锛岀綉鍧�鏍¢獙涓嶆纭�
-  {
-    title: '缃戝潃',
-    value: 'url',
-    pattern: /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:\/~+#]*[\w\-@?^=%&\/~+#])?$/,
-  },
-  //update-end-author:taoyan date:2022-6-1 for: VUEN-1160 瀵瑰瀛愯〃锛岀綉鍧�鏍¢獙涓嶆纭�
-  { title: '鐢靛瓙閭欢', value: 'e', pattern: /^([\w]+\.*)([\w]+)@[\w]+\.\w{3}(\.\w{2}|)$/ },
-  { title: '鎵嬫満鍙风爜', value: 'm', pattern: /^1[3456789]\d{9}$/ },
-  { title: '閭斂缂栫爜', value: 'p', pattern: /^[1-9]\d{5}$/ },
-  { title: '瀛楁瘝', value: 's', pattern: /^[A-Z|a-z]+$/ },
-  { title: '鏁板瓧', value: 'n', pattern: /^-?\d+(\.?\d+|\d?)$/ },
-  { title: '鏁存暟', value: 'z', pattern: /^-?\d+$/ },
-  {
-    title: '閲戦',
-    value: 'money',
-    pattern: /^(([1-9][0-9]*)|([0]\.\d{0,2}|[1-9][0-9]*\.\d{0,5}))$/,
-  },
-];
diff --git a/src/components/jeecg/JVxeTable/src/hooks/useWebSocket.ts b/src/components/jeecg/JVxeTable/src/hooks/useWebSocket.ts
deleted file mode 100644
index ba0d355..0000000
--- a/src/components/jeecg/JVxeTable/src/hooks/useWebSocket.ts
+++ /dev/null
@@ -1,236 +0,0 @@
-import { watch, onUnmounted } from 'vue';
-import { buildUUID } from '/@/utils/uuid';
-import { useGlobSetting } from '/@/hooks/setting';
-import { useUserStore } from '/@/store/modules/user';
-import { JVxeDataProps, JVxeTableMethods, JVxeTableProps } from '../types';
-import { isArray } from '/@/utils/is';
-import { getToken } from '/@/utils/auth';
-
-// vxe socket
-const vs = {
-  // 椤甸潰鍞竴 id锛岀敤浜庢爣璇嗗悓涓�鐢ㄦ埛锛屼笉鍚岄〉闈㈢殑websocket
-  pageId: buildUUID(),
-  // webSocket 瀵硅薄
-  ws: null,
-  // 涓�浜涘父閲�
-  constants: {
-    // 娑堟伅绫诲瀷
-    TYPE: 'type',
-    // 娑堟伅鏁版嵁
-    DATA: 'data',
-    // 娑堟伅绫诲瀷锛氬績璺虫娴�
-    TYPE_HB: 'heart_beat',
-    // 娑堟伅绫诲瀷锛氭洿鏂皏xe table鏁版嵁
-    TYPE_UVT: 'update_vxe_table',
-  },
-  // 蹇冭烦妫�娴�
-  heartCheck: {
-    // 闂撮殧鏃堕棿锛岄棿闅斿涔呭彂閫佷竴娆″績璺虫秷鎭�
-    interval: 10000,
-    // 蹇冭烦娑堟伅瓒呮椂鏃堕棿锛屽績璺虫秷鎭涔呮病鏈夊洖澶嶅悗閲嶈繛
-    timeout: 6000,
-    timeoutTimer: -1,
-    clear() {
-      clearTimeout(this.timeoutTimer);
-      return this;
-    },
-    start() {
-      vs.sendMessage(vs.constants.TYPE_HB, '');
-      // 濡傛灉瓒呰繃涓�瀹氭椂闂磋繕娌¢噸缃紝璇存槑鍚庣涓诲姩鏂紑浜�
-      this.timeoutTimer = window.setTimeout(() => {
-        vs.reconnect();
-      }, this.timeout);
-      return this;
-    },
-    // 蹇冭烦娑堟伅杩斿洖
-    back() {
-      this.clear();
-      window.setTimeout(() => this.start(), this.interval);
-    },
-  },
-
-  /** 鍒濆鍖� WebSocket */
-  initialWebSocket() {
-    if (this.ws === null) {
-      const userId = useUserStore().getUserInfo?.id;
-      const domainURL = useGlobSetting().uploadUrl!;
-      const domain = domainURL.replace('https://', 'wss://').replace('http://', 'ws://');
-      const url = `${domain}/vxeSocket/${userId}/${this.pageId}`;
-      //update-begin-author:taoyan date:2022-4-24 for: v2.4.6 鐨� websocket 鏈嶅姟绔紝瀛樺湪鎬ц兘鍜屽畨鍏ㄩ棶棰樸�� #3278
-      let token = (getToken() || '') as string;
-      this.ws = new WebSocket(url, [token]);
-      //update-end-author:taoyan date:2022-4-24 for: v2.4.6 鐨� websocket 鏈嶅姟绔紝瀛樺湪鎬ц兘鍜屽畨鍏ㄩ棶棰樸�� #3278
-      this.ws.onopen = this.on.open.bind(this);
-      this.ws.onerror = this.on.error.bind(this);
-      this.ws.onmessage = this.on.message.bind(this);
-      this.ws.onclose = this.on.close.bind(this);
-    }
-  },
-
-  // 鍙戦�佹秷鎭�
-  sendMessage(type, message) {
-    try {
-      let ws = this.ws;
-      if (ws != null && ws.readyState === ws.OPEN) {
-        ws.send(
-          JSON.stringify({
-            type: type,
-            data: message,
-          })
-        );
-      }
-    } catch (err: any) {
-      console.warn('銆怞VxeWebSocket銆戝彂閫佹秷鎭け璐ワ細(' + err.code + ')');
-    }
-  },
-
-  /** 缁戝畾鍏ㄥ眬VXE琛ㄦ牸 */
-  tableMap: new Map(),
-  /** 娣诲姞缁戝畾 */
-  addBind(map, key, value: VmArgs) {
-    let binds = map.get(key);
-    if (isArray(binds)) {
-      binds.push(value);
-    } else {
-      map.set(key, [value]);
-    }
-  },
-  /** 绉婚櫎缁戝畾 */
-  removeBind(map, key, value: VmArgs) {
-    let binds = map.get(key);
-    if (isArray(binds)) {
-      for (let i = 0; i < binds.length; i++) {
-        let bind = binds[i];
-        if (bind === value) {
-          binds.splice(i, 1);
-          break;
-        }
-      }
-      if (binds.length === 0) {
-        map.delete(key);
-      }
-    } else {
-      map.delete(key);
-    }
-  },
-  // 鍛煎彨缁戝畾鐨勮〃鍗�
-  callBind(map, key, callback) {
-    let binds = map.get(key);
-    if (isArray(binds)) {
-      binds.forEach(callback);
-    }
-  },
-
-  lockReconnect: false,
-  /** 灏濊瘯閲嶈繛 */
-  reconnect() {
-    if (this.lockReconnect) return;
-    this.lockReconnect = true;
-    setTimeout(() => {
-      if (this.ws && this.ws.close) {
-        this.ws.close();
-      }
-      this.ws = null;
-      console.info('銆怞VxeWebSocket銆戝皾璇曢噸杩�...');
-      this.initialWebSocket();
-      this.lockReconnect = false;
-    }, 5000);
-  },
-
-  on: {
-    open() {
-      console.info('銆怞VxeWebSocket銆戣繛鎺ユ垚鍔�');
-      this.heartCheck.start();
-    },
-    error(e) {
-      console.warn('銆怞VxeWebSocket銆戣繛鎺ュ彂鐢熼敊璇�:', e);
-      this.reconnect();
-    },
-    message(e) {
-      // 瑙f瀽娑堟伅
-      let json;
-      try {
-        json = JSON.parse(e.data);
-      } catch (e: any) {
-        console.warn('銆怞VxeWebSocket銆戞敹鍒版棤娉曡В鏋愮殑娑堟伅:', e.data);
-        return;
-      }
-      let type = json[this.constants.TYPE];
-      let data = json[this.constants.DATA];
-      switch (type) {
-        // 蹇冭烦妫�娴�
-        case this.constants.TYPE_HB:
-          this.heartCheck.back();
-          break;
-        // 鏇存柊form鏁版嵁
-        case this.constants.TYPE_UVT:
-          this.callBind(this.tableMap, data.socketKey, (args) => this.onVM.onUpdateTable(args, ...data.args));
-          break;
-        default:
-          console.warn('銆怞VxeWebSocket銆戞敹鍒颁笉璇嗗埆鐨勬秷鎭被鍨�:' + type);
-          break;
-      }
-    },
-    close(e) {
-      console.info('銆怞VxeWebSocket銆戣繛鎺ヨ鍏抽棴:', e);
-      this.reconnect();
-    },
-  },
-
-  onVM: {
-    /** 鏀跺埌鏇存柊琛ㄦ牸鐨勬秷鎭� */
-    onUpdateTable({ props, data, methods }: VmArgs, row, caseId) {
-      if (data.caseId !== caseId) {
-        const tableRow = methods.getIfRowById(row.id).row;
-        // 灞�閮ㄤ繚鏇存柊鏁版嵁
-        if (tableRow) {
-          if (props.reloadEffect) {
-            data.reloadEffectRowKeysMap[row.id] = true;
-          }
-          Object.assign(tableRow, row, { id: tableRow.id });
-          methods.getXTable().reloadRow(tableRow);
-        }
-      }
-    },
-  },
-} as {
-  ws: Nullable<WebSocket>;
-} & Recordable;
-
-type VmArgs = {
-  props: JVxeTableProps;
-  data: JVxeDataProps;
-  methods: JVxeTableMethods;
-};
-
-export function useWebSocket(props: JVxeTableProps, data: JVxeDataProps, methods) {
-  const args: VmArgs = { props, data, methods };
-  watch(
-    () => props.socketReload,
-    (socketReload: boolean) => {
-      if (socketReload) {
-        vs.initialWebSocket();
-        vs.addBind(vs.tableMap, props.socketKey, args);
-      } else {
-        vs.removeBind(vs.tableMap, props.socketKey, args);
-      }
-    },
-    { immediate: true }
-  );
-
-  /** 鍙戦�乻ocket娑堟伅鏇存柊琛� */
-  function socketSendUpdateRow(row) {
-    vs.sendMessage(vs.constants.TYPE_UVT, {
-      socketKey: props.socketKey,
-      args: [row, data.caseId],
-    });
-  }
-
-  onUnmounted(() => {
-    vs.removeBind(vs.tableMap, props.socketKey, args);
-  });
-
-  return {
-    socketSendUpdateRow,
-  };
-}
diff --git a/src/components/jeecg/JVxeTable/src/install.ts b/src/components/jeecg/JVxeTable/src/install.ts
deleted file mode 100644
index fa85dea..0000000
--- a/src/components/jeecg/JVxeTable/src/install.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import type { App } from 'vue';
-// 寮曞叆 vxe-table
-import 'xe-utils';
-import VXETable /*Grid*/ from 'vxe-table';
-import VXETablePluginAntd from 'vxe-table-plugin-antd';
-import 'vxe-table/lib/style.css';
-
-import JVxeTable from './JVxeTable';
-import { getEventPath } from '/@/utils/common/compUtils';
-import { registerAllComponent } from './utils/registerUtils';
-import { getEnhanced } from './utils/enhancedUtils';
-
-export function registerJVxeTable(app: App) {
-  // VXETable 鍏ㄥ眬閰嶇疆
-  const VXETableSettings = {
-    // z-index 璧峰鍊�
-    zIndex: 1000,
-    table: {},
-  };
-
-  // 娣诲姞浜嬩欢鎷︽埅鍣� event.clearActived
-  // 姣斿鐐瑰嚮浜嗘煇涓粍浠剁殑寮瑰嚭灞傞潰鏉夸箣鍚庯紝姝ゆ椂琚縺娲诲崟鍏冩牸涓嶅簲璇ヨ鑷姩鍏抽棴锛岄�氳繃杩斿洖 false 鍙互闃绘榛樿鐨勮涓恒��
-  VXETable.interceptor.add('event.clearActived', function (this: any, params) {
-    // 鑾峰彇缁勪欢澧炲己
-    let col = params.column.params;
-    let { $event } = params;
-    const interceptor = getEnhanced(col.type).interceptor;
-    // 鎵ц澧炲己
-    let flag = interceptor['event.clearActived']?.call(this, ...arguments);
-    if (flag === false) {
-      return false;
-    }
-
-    let path = getEventPath($event);
-    for (let p of path) {
-      let className: any = p.className || '';
-      className = typeof className === 'string' ? className : className.toString();
-
-      /* --- 鐗规畩澶勭悊浠ヤ笅缁勪欢锛岀偣鍑讳互涓嬫爣绛炬椂涓嶆竻绌虹紪杈戠姸鎬� --- */
-
-      // 鐐瑰嚮鐨勬爣绛炬槸JInputPop
-      if (className.includes('j-input-pop')) {
-        return false;
-      }
-      // 鐐瑰嚮鐨勬爣绛炬槸JPopup鐨勫脊鍑哄眰銆侀儴闂ㄩ�夋嫨銆佺敤鎴烽�夋嫨
-      if (className.includes('j-popup-modal') || className.includes('j-depart-select-modal') || className.includes('j-user-select-modal')) {
-        return false;
-      }
-      // 鐐瑰嚮鐨勬槸鏃ユ湡閫夋嫨鍣�
-      if (className.includes('j-vxe-date-picker')) {
-        return false;
-      }
-      // 鎵ц澧炲己
-      let flag = interceptor['event.clearActived.className']?.call(this, className, ...arguments);
-      if (flag === false) {
-        return false;
-      }
-    }
-  });
-  // 娉ㄥ唽鎻掍欢
-  VXETable.use(VXETablePluginAntd);
-  // 娉ㄥ唽鑷畾涔夌粍浠�
-  registerAllComponent();
-  // 鎵ц娉ㄥ唽鏂规硶
-  app.use(VXETable, VXETableSettings);
-  app.component('JVxeTable', JVxeTable);
-}
diff --git a/src/components/jeecg/JVxeTable/src/style/index.less b/src/components/jeecg/JVxeTable/src/style/index.less
deleted file mode 100644
index 510209a..0000000
--- a/src/components/jeecg/JVxeTable/src/style/index.less
+++ /dev/null
@@ -1,102 +0,0 @@
-@import 'vxe.const';
-@import 'vxe.dark';
-
-.@{prefix-cls} {
-  // 缂栬緫鎸夐挳鏍峰紡
-  .vxe-cell--edit-icon {
-    border-color: #606266;
-  }
-
-  .sort--active {
-    border-color: @primary-color;
-  }
-
-  // toolbar 鏍峰紡
-  &-toolbar {
-    &-collapsed {
-      [data-collapse] {
-        display: none;
-      }
-    }
-
-    &-button.div .ant-btn {
-      margin-right: 8px;
-    }
-  }
-
-  // 鍒嗛〉鍣�
-  .j-vxe-pagination {
-    margin-top: 8px;
-    text-align: right;
-
-    .ant-pagination-options-size-changer.ant-select {
-      margin-right: 0;
-    }
-
-    &.show-quick-jumper {
-      .ant-pagination-options-size-changer.ant-select {
-        margin-right: 8px;
-      }
-    }
-  }
-
-  // 鏇存敼 header 搴曡壊
-  .vxe-table.border--default .vxe-table--header-wrapper,
-  .vxe-table.border--full .vxe-table--header-wrapper,
-  .vxe-table.border--outer .vxe-table--header-wrapper {
-    //background-color: #FFFFFF;
-  }
-
-  // 鏇存敼 tooltip 鏍¢獙澶辫触鐨勯鑹�
-  .vxe-table--tooltip-wrapper.vxe-table--valid-error {
-    background-color: #f5222d !important;
-  }
-
-  // 鏇存敼 杈撳叆妗� 鏍¢獙澶辫触鐨勯鑹�
-  .col--valid-error > .vxe-cell > .ant-input,
-  .col--valid-error > .vxe-cell > .ant-select .ant-input,
-  .col--valid-error > .vxe-cell > .ant-select .ant-select-selection,
-  .col--valid-error > .vxe-cell > .ant-input-number,
-  .col--valid-error > .vxe-cell > .ant-cascader-picker .ant-cascader-input,
-  .col--valid-error > .vxe-cell > .ant-calendar-picker .ant-calendar-picker-input,
-  .col--valid-error > .vxe-tree-cell > .ant-input,
-  .col--valid-error > .vxe-tree-cell > .ant-select .ant-input,
-  .col--valid-error > .vxe-tree-cell > .ant-select .ant-select-selection,
-  .col--valid-error > .vxe-tree-cell > .ant-input-number,
-  .col--valid-error > .vxe-tree-cell > .ant-cascader-picker .ant-cascader-input,
-  .col--valid-error > .vxe-tree-cell > .ant-calendar-picker .ant-calendar-picker-input {
-    border-color: #f5222d !important;
-  }
-
-  .vxe-body--row.sortable-ghost,
-  .vxe-body--row.sortable-chosen {
-    background-color: #dfecfb;
-  }
-
-  // ----------- 銆怴UEN-1691銆戦粯璁ら殣钘忔粴鍔ㄦ潯锛岄紶鏍囨斁涓婂幓鎵嶆樉绀� -------------------------------------------
-  .vxe-table {
-    //.vxe-table--footer-wrapper.body--wrapper,
-    .vxe-table--body-wrapper.body--wrapper {
-      overflow-x: hidden;
-    }
-    
-    &:hover {
-      //.vxe-table--footer-wrapper.body--wrapper,
-      .vxe-table--body-wrapper.body--wrapper {
-        overflow-x: auto;
-      }
-    }
-  }
-  // ----------- 銆怴UEN-1691銆戦粯璁ら殣钘忔粴鍔ㄦ潯锛岄紶鏍囨斁涓婂幓鎵嶆樉绀� -------------------------------------------
-
-  // 璋冩暣灞曞紑/鏀惰捣鍥炬爣鏍峰紡
-  .vxe-table--render-default .vxe-table--expanded .vxe-table--expand-btn {
-    width: 17px;
-    height: 17px;
-  }
-  /*銆愮編鍖栬〃鍗曘�戣缂栬緫table鐨則itle瀛椾綋鏀瑰皬涓�鍙�*/
-  .vxe-header--column.col--ellipsis>.vxe-cell .vxe-cell--title{
-    font-size: 13px;
-  }
-
-}
diff --git a/src/components/jeecg/JVxeTable/src/style/reload-effect.less b/src/components/jeecg/JVxeTable/src/style/reload-effect.less
deleted file mode 100644
index 0333c81..0000000
--- a/src/components/jeecg/JVxeTable/src/style/reload-effect.less
+++ /dev/null
@@ -1,44 +0,0 @@
-.j-vxe-reload-effect-box {
-  &,
-  .j-vxe-reload-effect-span {
-    display: inline;
-    height: 100%;
-    position: relative;
-  }
-
-  .j-vxe-reload-effect-span {
-    &.layer-top {
-      display: inline-block;
-      width: 100%;
-
-      position: absolute;
-      z-index: 2;
-      background-color: white;
-
-      transform-origin: 0 0;
-      animation: reload-effect 1.5s forwards;
-    }
-
-    &.layer-bottom {
-      z-index: 1;
-    }
-  }
-
-  // 瀹氫箟鍔ㄧ敾
-  @keyframes reload-effect {
-    0% {
-      opacity: 1;
-      transform: rotateX(0);
-    }
-    10% {
-      opacity: 1;
-    }
-    90% {
-      opacity: 0;
-    }
-    100% {
-      opacity: 0;
-      transform: rotateX(180deg);
-    }
-  }
-}
diff --git a/src/components/jeecg/JVxeTable/src/style/vxe.const.less b/src/components/jeecg/JVxeTable/src/style/vxe.const.less
deleted file mode 100644
index 49db4e3..0000000
--- a/src/components/jeecg/JVxeTable/src/style/vxe.const.less
+++ /dev/null
@@ -1,2 +0,0 @@
-//noinspection LessUnresolvedVariable
-@prefix-cls: ~'@{namespace}-j-vxe-table';
diff --git a/src/components/jeecg/JVxeTable/src/style/vxe.dark.less b/src/components/jeecg/JVxeTable/src/style/vxe.dark.less
deleted file mode 100644
index a33c872..0000000
--- a/src/components/jeecg/JVxeTable/src/style/vxe.dark.less
+++ /dev/null
@@ -1,112 +0,0 @@
-@import 'vxe.const';
-
-[data-theme='dark'] .@{prefix-cls} {
-  @fontColor: #c9d1d9;
-  @bgColor: #151515;
-  @borderColor: #606060;
-
-  .vxe-cell--item,
-  .vxe-cell--title,
-  .vxe-cell,
-  .vxe-body--expanded-cell {
-    color: @fontColor;
-  }
-
-  .vxe-toolbar {
-    background-color: @bgColor;
-  }
-
-  .vxe-table--render-default .vxe-table--body-wrapper,
-  .vxe-table--render-default .vxe-table--footer-wrapper {
-    background-color: @bgColor;
-  }
-
-  // 澶栬竟妗�
-  .vxe-table--render-default .vxe-table--border-line {
-    border-color: @borderColor;
-  }
-
-  // header 涓嬭竟妗�
-  .vxe-table .vxe-table--header-wrapper .vxe-table--header-border-line {
-    border-bottom-color: @borderColor;
-  }
-
-  // footer 涓婅竟妗�
-  .vxe-table--render-default .vxe-table--footer-wrapper {
-    border-top-color: @borderColor;
-  }
-
-  // 灞曞紑琛� 杈规
-  .vxe-table--render-default .vxe-body--expanded-column {
-    border-bottom-color: @borderColor;
-  }
-
-  // 琛屾枒椹汗
-  .vxe-table--render-default .vxe-body--row.row--stripe {
-    background-color: #1e1e1e;
-  }
-
-  // 琛宧over
-  .vxe-table--render-default .vxe-body--row.row--hover {
-    background-color: #262626;
-  }
-
-  // 閫変腑琛�
-  .vxe-table--render-default .vxe-body--row.row--checked {
-    background-color: #44403a;
-
-    &.row--hover {
-      background-color: #59524b;
-    }
-  }
-
-  .vxe-table--render-default.border--default .vxe-table--header-wrapper,
-  .vxe-table--render-default.border--full .vxe-table--header-wrapper,
-  .vxe-table--render-default.border--outer .vxe-table--header-wrapper {
-    background-color: #1d1d1d;
-  }
-
-  .vxe-table--render-default.border--default .vxe-body--column,
-  .vxe-table--render-default.border--default .vxe-footer--column,
-  .vxe-table--render-default.border--default .vxe-header--column,
-  .vxe-table--render-default.border--inner .vxe-body--column,
-  .vxe-table--render-default.border--inner .vxe-footer--column,
-  .vxe-table--render-default.border--inner .vxe-header--column {
-    background-image: linear-gradient(#1d1d1d, #1d1d1d);
-  }
-
-  // 鍒楀鎷栧姩
-  .vxe-header--column .vxe-resizable.is--line:before {
-    background-color: #505050;
-  }
-
-  // checkbox
-  .vxe-custom--option .vxe-checkbox--icon:before,
-  .vxe-export--panel-column-option .vxe-checkbox--icon:before,
-  .vxe-table--filter-option .vxe-checkbox--icon:before,
-  .vxe-table--render-default .vxe-cell--checkbox .vxe-checkbox--icon:before {
-    background-color: @bgColor;
-    border-color: @borderColor;
-  }
-
-  .vxe-toolbar .vxe-custom--option-wrapper {
-    background-color: @bgColor;
-  }
-
-  .vxe-button {
-    background-color: @bgColor;
-    border-color: @borderColor;
-  }
-
-  .vxe-button.type--button:not(.is--disabled):active {
-    background-color: @bgColor;
-  }
-
-  .vxe-toolbar .vxe-custom--wrapper.is--active > .vxe-button {
-    background-color: @bgColor;
-  }
-
-  .vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--footer button {
-    color: @fontColor;
-  }
-}
diff --git a/src/components/jeecg/JVxeTable/src/types/JVxeComponent.ts b/src/components/jeecg/JVxeTable/src/types/JVxeComponent.ts
deleted file mode 100644
index 1e7009a..0000000
--- a/src/components/jeecg/JVxeTable/src/types/JVxeComponent.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-import { ComponentInternalInstance, ExtractPropTypes } from 'vue';
-import { useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks';
-
-export namespace JVxeComponent {
-  export type Props = ExtractPropTypes<ReturnType<typeof useJVxeCompProps>>;
-
-  interface EnhancedCtx {
-    props?: JVxeComponent.Props;
-    context?: any;
-  }
-
-  /** 缁勪欢澧炲己绫诲瀷 */
-  export interface Enhanced {
-    // 娉ㄥ唽鍙傛暟锛堣瑙侊細https://xuliangzhan_admin.gitee.io/vxe-table/v4/table/renderer/edit锛�
-    installOptions: {
-      // 鑷姩鑱氱劍鐨� class 绫诲悕
-      autofocus?: string;
-    } & Recordable;
-    // 浜嬩欢鎷︽埅鍣紙鐢ㄤ簬鍏煎锛�
-    interceptor: {
-      // 宸插疄鐜帮細event.clearActived
-      // 璇存槑锛氭瘮濡傜偣鍑讳簡鏌愪釜缁勪欢鐨勫脊鍑哄眰闈㈡澘涔嬪悗锛屾鏃惰婵�娲诲崟鍏冩牸涓嶅簲璇ヨ鑷姩鍏抽棴锛岄�氳繃杩斿洖 false 鍙互闃绘榛樿鐨勮涓恒��
-      'event.clearActived'?: (params, event, target, ctx?: EnhancedCtx) => boolean;
-      // 鑷畾涔夛細event.clearActived.className
-      // 璇存槑锛氭瘮鍘熺敓鐨勫浜嗕竴涓弬鏁帮細className锛岀敤浜庡垽鏂偣鍑荤殑鍏冪礌鐨勬牱寮忓悕锛堥�掑綊鍒伴《灞傦級
-      'event.clearActived.className'?: (params, event, target, ctx?: EnhancedCtx) => boolean;
-    };
-    // 銆愬姛鑳藉紑鍏炽��
-    switches: {
-      // 鏄惁浣跨敤 editRender 妯″紡锛堜粎褰撳墠缁勪欢锛屽苟闈炲叏灞�锛�
-      // 濡傛灉璁句负true锛屽垯琛ㄥご涓婃柟浼氬嚭鐜颁竴涓彲缂栬緫鐨勫浘鏍�
-      editRender?: boolean;
-      // false = 缁勪欢瑙﹀彂鍚庡彲瑙嗭級锛泃rue = 缁勪欢涓�鐩村彲瑙�
-      visible?: boolean;
-    };
-    // 銆愬垏闈㈠寮恒�戝垏闈簨浠跺鐞嗭紝涓�鑸湪鏌愪簺鏂规硶鎵ц鍚庡悓姝ユ墽琛�
-    aopEvents: {
-      // 鍗曞厓鏍艰婵�娲荤紪杈戞椂浼氳Е鍙戣浜嬩欢
-      editActived?: (this: ComponentInternalInstance, ...args) => any;
-      // 鍗曞厓鏍肩紪杈戠姸鎬佷笅琚叧闂椂浼氳Е鍙戣浜嬩欢
-      editClosed?: (this: ComponentInternalInstance, ...args) => any;
-      // 杩斿洖鍊煎喅瀹氬崟鍏冩牸鏄惁鍙互缂栬緫
-      activeMethod?: (this: ComponentInternalInstance, ...args) => boolean;
-    };
-    // 銆愮炕璇戝寮恒�戝彲浠ュ疄鐜颁緥濡俿elect缁勪欢淇濆瓨鐨剉alue锛屼絾鏄痵pan妯″紡涓嬮渶瑕佹樉绀烘垚text
-    translate: {
-      // 鏄惁鍚敤缈昏瘧
-      enabled?: boolean;
-      /**
-       * 銆愮炕璇戝鐞嗘柟娉曘�戝鏋渉andler鐣欑┖锛屽垯浣跨敤榛樿鐨勭炕璇戞柟娉�
-       *
-       * @param value 闇�瑕佺炕璇戠殑鍊�
-       * @returns{*} 杩斿洖缈昏瘧鍚庣殑鏁版嵁
-       */
-      handler?: (value, ctx?: EnhancedCtx) => any;
-    };
-    /**
-     * 銆愯幏鍙栧�煎寮恒�戠粍浠舵姏鍑虹殑鍊�
-     *
-     * @param value 淇濆瓨鍒版暟鎹簱閲岀殑鍊�
-     * @returns{*} 杩斿洖澶勭悊鍚庣殑鍊�
-     */
-    getValue: (value, ctx?: EnhancedCtx) => any;
-    /**
-     * 銆愯缃�煎寮恒�戣缃粰缁勪欢鐨勫��
-     *
-     * @param value 缁勪欢瑙﹀彂鐨勫��
-     * @returns{*} 杩斿洖澶勭悊鍚庣殑鍊�
-     */
-    setValue: (value, ctx?: EnhancedCtx) => any;
-    /**
-     * 銆愭柊澧炶澧炲己銆戝湪鐢ㄦ埛鐐瑰嚮鏂板鏃惰Е鍙戠殑浜嬩欢锛岃繑鍥炴柊琛岀殑榛樿鍊�
-     *
-     * @param defaultValue 榛樿鍊�
-     * @param row 琛屾暟鎹�
-     * @param column 鍒楅厤缃紝.params 鏄敤鎴烽厤缃殑鍙傛暟
-     * @param $table vxe 瀹炰緥
-     * @param renderOptions 娓叉煋閫夐」
-     * @param params 鍙互鍦ㄨ繖閲岃幏鍙� $table
-     *
-     * @returns 杩斿洖鏂板��
-     */
-    createValue: (defaultValue: any, ctx?: EnhancedCtx) => any;
-  }
-
-  export type EnhancedPartial = Partial<Enhanced>;
-}
diff --git a/src/components/jeecg/JVxeTable/src/types/JVxeTypes.ts b/src/components/jeecg/JVxeTable/src/types/JVxeTypes.ts
deleted file mode 100644
index c6e7d7b..0000000
--- a/src/components/jeecg/JVxeTable/src/types/JVxeTypes.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-/** 缁勪欢绫诲瀷 */
-export enum JVxeTypes {
-  // 琛屽彿鍒�
-  rowNumber = 'row-number',
-  // 閫夋嫨鍒�
-  rowCheckbox = 'row-checkbox',
-  // 鍗曢�夊垪
-  rowRadio = 'row-radio',
-  // 灞曞紑鍒�
-  rowExpand = 'row-expand',
-  // 涓婁笅鎺掑簭
-  rowDragSort = 'row-drag-sort',
-
-  input = 'input',
-  inputNumber = 'input-number',
-  textarea = 'textarea',
-  select = 'select',
-  date = 'date',
-  datetime = 'datetime',
-  time = 'time',
-  checkbox = 'checkbox',
-  upload = 'upload',
-  // 涓嬫媺鎼滅储
-  selectSearch = 'select-search',
-  // 涓嬫媺澶氶��
-  selectMultiple = 'select-multiple',
-  // 杩涘害鏉�
-  progress = 'progress',
-  //閮ㄩ棬閫夋嫨
-  departSelect = 'depart-select',
-  //鐢ㄦ埛閫夋嫨
-  userSelect = 'user-select',
-
-  // 鎷栬疆Tags锛堟殏鏃犵敤锛�
-  tags = 'tags', // TODO 寰呭疄鐜�
-
-  slot = 'slot',
-  normal = 'normal',
-  hidden = 'hidden',
-
-  // 浠ヤ笅涓鸿嚜瀹氫箟缁勪欢
-  popup = 'popup',
-  selectDictSearch = 'selectDictSearch',
-  radio = 'radio',
-  image = 'image',
-  file = 'file',
-  // 鐪佸競鍖�
-  pca = 'pca',
-}
-
-// 涓轰簡闃叉鍜� vxe 鍐呯疆鐨勭被鍨嬪啿绐侊紝鎵�浠ュ姞涓婁竴涓墠缂�
-// 鍓嶇紑鏄嚜鍔ㄥ姞鐨勶紝浠g爜涓洿鎺ョ敤灏辫锛圝VxeTypes.input锛�
-export const JVxeTypePrefix = 'j-';
-
-/** VxeTable 娓叉煋绫诲瀷 */
-export enum JVxeRenderType {
-  editer = 'editer',
-  spaner = 'spaner',
-  default = 'default',
-}
diff --git a/src/components/jeecg/JVxeTable/src/types/index.ts b/src/components/jeecg/JVxeTable/src/types/index.ts
deleted file mode 100644
index a7dca8e..0000000
--- a/src/components/jeecg/JVxeTable/src/types/index.ts
+++ /dev/null
@@ -1,120 +0,0 @@
-import type { Component, Ref, ComputedRef, ExtractPropTypes } from 'vue';
-import type { VxeColumnProps } from 'vxe-table/types/column';
-import type { JVxeComponent } from './JVxeComponent';
-import type { VxeGridInstance, VxeTablePropTypes } from 'vxe-table';
-import { JVxeTypes } from './JVxeTypes';
-import { vxeProps } from '../vxe.data';
-import { useMethods } from '../hooks/useMethods';
-import { getJVxeAuths } from '../utils/authUtils';
-
-export type JVxeTableProps = Partial<ExtractPropTypes<ReturnType<typeof vxeProps>>>;
-export type JVxeTableMethods = ReturnType<typeof useMethods>['methods'];
-
-export type JVxeVueComponent = {
-  enhanced?: JVxeComponent.EnhancedPartial;
-} & Component;
-
-type statisticsTypes = 'sum' | 'average';
-
-export type JVxeColumn = IJVxeColumn & Recordable;
-
-/**
- * JVxe 鍒楅厤缃」
- */
-export interface IJVxeColumn extends VxeColumnProps {
-  type?: any;
-  // 琛屽敮涓�鏍囪瘑
-  key: string;
-  // 琛ㄥ崟棰勬湡鍊肩殑鎻愮ず淇℃伅锛屽彲浠ヤ娇鐢�${...}鍙橀噺鏇挎崲鏂囨湰
-  placeholder?: string;
-  // 榛樿鍊�
-  defaultValue?: any;
-  // 鏄惁绂佺敤褰撳墠鍒楋紝榛樿false
-  disabled?: boolean;
-  // 鏍¢獙瑙勫垯 TODO 绫诲瀷寰呭畾涔�
-  validateRules?: any;
-  // 鑱斿姩涓嬩竴绾х殑瀛楁key
-  linkageKey?: string;
-  // 鑷畾涔変紶鍏ョ粍浠剁殑鍏朵粬灞炴��
-  props?: Recordable;
-  allowClear?: boolean; // 鍏佽娓呴櫎
-  // 銆恑nputNumber銆戞槸鍚︽槸缁熻鍒楋紝鍙湁 inputNumber 鎵嶈兘璁剧疆缁熻鍒椼�傜粺璁″垪锛歴um 姹傚拰锛沘verage 骞冲潎鍊�
-  statistics?: boolean | [statisticsTypes, statisticsTypes?];
-  // 銆恠elect銆�
-  dictCode?: string; // 瀛楀吀 code
-  options?: { title?: string; label?: string; text?: string; value: any; disabled?: boolean }[]; // 涓嬫媺閫夐」鍒楄〃
-  allowInput?: boolean; // 鍏佽杈撳叆
-  allowSearch?: boolean; // 鍏佽鎼滅储
-  // 銆恠lot銆�
-  slotName?: string; // 鎻掓Ы鍚�
-  // 銆恈heckbox銆�
-  customValue?: [any, any]; // 鑷畾涔夊��
-  defaultChecked?: boolean; // 榛樿閫変腑
-  // 銆恥pload銆� upload
-  btnText?: string; // 涓婁紶鎸夐挳鏂囧瓧
-  token?: boolean; // 鏄惁浼犻�� token
-  responseName?: string; // 杩斿洖鍙栧�煎悕绉�
-  action?: string; // 涓婁紶鍦板潃
-  allowRemove?: boolean; // 鏄惁鍏佽鍒犻櫎
-  allowDownload?: boolean; // 鏄惁鍏佽涓嬭浇
-  // 銆愪笅鎷夊瓧鍏告悳绱€��
-  dict?: string; // 瀛楀吀琛ㄩ厤缃俊鎭細鏁版嵁搴撹〃鍚�,鏄剧ず瀛楁鍚�,瀛樺偍瀛楁鍚�
-  async?: boolean; // 鏄惁鍚屾妯″紡
-  tipsContent?: string;
-  // 銆恜opup銆�
-  popupCode?: string;
-  field?: string;
-  orgFields?: string;
-  destFields?: string;
-}
-
-export interface JVxeRefs {
-  gridRef: Ref<VxeGridInstance | undefined>;
-  subPopoverRef: Ref<any>;
-  detailsModalRef: Ref<any>;
-}
-
-export interface JVxeDataProps {
-  prefixCls: string;
-  // vxe 瀹炰緥ID
-  caseId: string;
-  // vxe 鏈�缁� columns
-  vxeColumns?: ComputedRef;
-  // vxe 鏈�缁� dataSource
-  vxeDataSource: Ref<Recordable[]>;
-  // 璁板綍婊氬姩鏉′綅缃�
-  scroll: { top: number; left: number };
-  // 褰撳墠鏄惁姝e湪婊氬姩
-  scrolling: Ref<boolean>;
-  // vxe 榛樿閰嶇疆
-  defaultVxeProps: object;
-  // 缁戝畾宸︿晶閫夋嫨妗�
-  selectedRows: Ref<any[]>;
-  // 缁戝畾宸︿晶閫夋嫨妗嗗凡閫夋嫨鐨刬d
-  selectedRowIds: Ref<string[]>;
-  disabledRowIds: string[];
-  // 缁熻鍒楅厤缃�
-  statistics: {
-    has: boolean;
-    sum: string[];
-    average: string[];
-  };
-  // 鎵�鏈夊拰褰撳墠琛ㄦ牸鐩稿叧鐨勬巿鏉冧俊鎭�
-  authsMap: Ref<Nullable<ReturnType<typeof getJVxeAuths>>>;
-  // 鍐呯疆 EditRules
-  innerEditRules: Recordable<VxeTablePropTypes.EditRules[]>;
-  // 鑱斿姩涓嬫媺閫夐」锛堢敤浜庨殧绂讳笉鍚岀殑涓嬫媺閫夐」锛�
-  // 鍐呴儴鑱斿姩閰嶇疆锛宮ap
-  innerLinkageConfig: Map<string, any>;
-  // 寮�鍚簡鏁版嵁鍒锋柊鏁堟灉鐨勮
-  reloadEffectRowKeysMap: Recordable;
-}
-
-export interface JVxeLinkageConfig {
-  // 鑱斿姩绗竴绾х殑 key
-  key: string;
-  // 鑾峰彇鏁版嵁鐨勬柟娉�
-  requestData: (parent: string) => Promise<any>;
-}
-
-export { JVxeTypes };
diff --git a/src/components/jeecg/JVxeTable/src/utils/authUtils.ts b/src/components/jeecg/JVxeTable/src/utils/authUtils.ts
deleted file mode 100644
index 1b4ca73..0000000
--- a/src/components/jeecg/JVxeTable/src/utils/authUtils.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-/* JVxeTable 琛岀紪杈� 鏉冮檺 */
-import { usePermissionStoreWithOut } from '/@/store/modules/permission';
-
-const permissionStore = usePermissionStoreWithOut();
-
-/**
- * JVxe 涓撶敤锛岃幏鍙栨潈闄�
- * @param prefix
- */
-export function getJVxeAuths(prefix) {
-  prefix = getPrefix(prefix);
-  let { authList, allAuthList } = permissionStore;
-  let authsMap = new Map<string, typeof allAuthList[0]>();
-  if (!prefix || prefix.length == 0) {
-    return authsMap;
-  }
-  // 灏嗘墍鏈塿xe鐢ㄥ埌鐨勬潈闄愬彇鍑烘潵
-  for (let auth of allAuthList) {
-    if (auth.status == '1' && (auth.action || '').startsWith(prefix)) {
-      authsMap.set(auth.action, { ...auth, isAuth: false });
-    }
-  }
-  // 璁剧疆鏄惁宸叉巿鏉�
-  for (let auth of authList) {
-    let getAuth = authsMap.get(auth.action);
-    if (getAuth != null) {
-      getAuth.isAuth = true;
-    }
-  }
-  //update-begin-author:taoyan date:2022-6-1 for:  VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒�
-  let onlineButtonAuths = permissionStore.getOnlineSubTableAuth(prefix);
-  if (onlineButtonAuths && onlineButtonAuths.length > 0) {
-    for (let auth of onlineButtonAuths) {
-      authsMap.set(prefix + 'btn:' + auth, { action: auth, type: 1, status: 1, isAuth: false });
-    }
-  }
-  //update-end-author:taoyan date:2022-6-1 for:  VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒�
-  return authsMap;
-}
-
-/**
- * 鑾峰彇鍓嶇紑
- * @param prefix
- */
-export function getPrefix(prefix: string) {
-  if (prefix && !prefix.endsWith(':')) {
-    return prefix + ':';
-  }
-  return prefix;
-}
diff --git a/src/components/jeecg/JVxeTable/src/utils/enhancedUtils.ts b/src/components/jeecg/JVxeTable/src/utils/enhancedUtils.ts
deleted file mode 100644
index 18b360a..0000000
--- a/src/components/jeecg/JVxeTable/src/utils/enhancedUtils.ts
+++ /dev/null
@@ -1,155 +0,0 @@
-import type { Ref, ComponentInternalInstance } from 'vue';
-import { unref, isRef } from 'vue';
-import { useDefaultEnhanced } from '../hooks/useJVxeComponent';
-import { isFunction, isObject, isString } from '/@/utils/is';
-import { JVxeTypes } from '../types';
-import { JVxeComponent } from '../types/JVxeComponent';
-import { componentMap } from '../componentMap';
-
-// 宸叉敞鍐岀殑缁勪欢澧炲己
-const enhancedMap = new Map<JVxeTypes, JVxeComponent.Enhanced>();
-
-/**
- * 鑾峰彇鏌愪釜缁勪欢鐨勫寮�
- * @param type JVxeTypes
- */
-export function getEnhanced(type: JVxeTypes | string): JVxeComponent.Enhanced {
-  let $type: JVxeTypes = <JVxeTypes>type;
-  if (!enhancedMap.has($type)) {
-    let defaultEnhanced = useDefaultEnhanced();
-    if (componentMap.has($type)) {
-      let enhanced = componentMap.get($type)?.enhanced ?? {};
-      if (isObject(enhanced)) {
-        Object.keys(defaultEnhanced).forEach((key) => {
-          let def = defaultEnhanced[key];
-          if (enhanced.hasOwnProperty(key)) {
-            // 鏂规硶濡傛灉瀛樺湪灏变笉瑕嗙洊
-            if (!isFunction(def) && !isString(def)) {
-              enhanced[key] = Object.assign({}, def, enhanced[key]);
-            }
-          } else {
-            enhanced[key] = def;
-          }
-        });
-        enhancedMap.set($type, <JVxeComponent.Enhanced>enhanced);
-        return <JVxeComponent.Enhanced>enhanced;
-      }
-    } else {
-      throw new Error(`[JVxeTable] ${$type} 缁勪欢灏氭湭娉ㄥ唽锛岃幏鍙栧寮哄け璐);
-    }
-    enhancedMap.set($type, <JVxeComponent.Enhanced>defaultEnhanced);
-  }
-  return <JVxeComponent.Enhanced>enhancedMap.get($type);
-}
-
-/** 杈呭姪鏂规硶锛氭浛鎹�${...}鍙橀噺 */
-export function replaceProps(col, value) {
-  if (value && typeof value === 'string') {
-    let text = value;
-    text = text.replace(/\${title}/g, col.title);
-    text = text.replace(/\${key}/g, col.key);
-    text = text.replace(/\${defaultValue}/g, col.defaultValue);
-    return text;
-  }
-  return value;
-}
-
-type dispatchEventOptions = {
-  // JVxeTable 鐨� props
-  props;
-  // 瑙﹀彂鐨� event 浜嬩欢瀵硅薄
-  $event;
-  // 琛屻�佸垪
-  row?;
-  column?;
-  // JVxeTable鐨剉ue3瀹炰緥
-  instance?: ComponentInternalInstance;
-  // 瑕佸鎵剧殑className
-  className: string;
-  // 閲嶅啓鎵惧埌dom鍚庣殑澶勭悊鏂规硶
-  handler?: Fn;
-  // 鏄惁鐩存帴鎵цclick鏂规硶鑰屼笉鏄ā鎷焎lick浜嬩欢
-  isClick?: boolean;
-};
-
-/** 妯℃嫙瑙﹀彂浜嬩欢 */
-export function dispatchEvent(options: dispatchEventOptions) {
-  const { props, $event, row, column, instance, className, handler, isClick } = options;
-  if ((!$event || !$event.path) && !instance) {
-    return;
-  }
-  // alwaysEdit 涓嬩笉妯℃嫙瑙﹀彂浜嬩欢锛屽惁鑰呬細瀵艰嚧瑙﹀彂涓ゆ
-  if (props && props.alwaysEdit) {
-    return;
-  }
-  let getCell = () => {
-    let paths: HTMLElement[] = [...($event?.path ?? [])];
-    // 閫氳繃 instance 鑾峰彇 cell dom瀵硅薄
-    if (row && column) {
-      let selector = `table.vxe-table--body tbody tr[rowid='${row.id}'] td[colid='${column.id}']`;
-      let cellDom = instance!.vnode?.el?.querySelector(selector);
-      if (cellDom) {
-        paths.unshift(cellDom);
-      }
-    }
-    for (const el of paths) {
-      if (el.classList?.contains('vxe-body--column')) {
-        return el;
-      }
-    }
-    return null;
-  };
-  let cell = getCell();
-  if (cell) {
-    window.setTimeout(() => {
-      let getElement = () => {
-        let classList = className.split(' ');
-        if (classList.length > 0) {
-          const getClassName = (cls: string) => {
-            if (cls.startsWith('.')) {
-              return cls.substring(1, cls.length);
-            }
-            return cls;
-          };
-          let get = (target, className, idx = 0) => {
-            let elements = target.getElementsByClassName(getClassName(className));
-            if (elements && elements.length > 0) {
-              return elements[idx];
-            }
-            return null;
-          };
-          let element: HTMLElement = get(cell, classList[0]);
-          for (let i = 1; i < classList.length; i++) {
-            if (!element) {
-              break;
-            }
-            element = get(element, classList[i]);
-          }
-          return element;
-        }
-        return null;
-      };
-      let element = getElement();
-      if (element) {
-        if (isFunction(handler)) {
-          handler(element);
-        } else {
-          // 妯℃嫙瑙﹀彂鐐瑰嚮浜嬩欢
-          if (isClick) {
-            element.click();
-          } else {
-            element.dispatchEvent($event);
-          }
-        }
-      }
-    }, 10);
-  } else {
-    console.warn('銆怞VxeTable銆慸ispatchEvent 鑾峰彇 cell 澶辫触');
-  }
-}
-
-/** 缁戝畾 VxeTable 鏁版嵁 */
-export function vModel(value, row, column: Ref<any> | string) {
-  let property = isRef(column) ? column.value.property : column;
-  unref(row)[property] = value;
-}
diff --git a/src/components/jeecg/JVxeTable/src/utils/registerUtils.ts b/src/components/jeecg/JVxeTable/src/utils/registerUtils.ts
deleted file mode 100644
index 374f5a6..0000000
--- a/src/components/jeecg/JVxeTable/src/utils/registerUtils.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-import type { Component } from 'vue';
-import { h } from 'vue';
-import VXETable from 'vxe-table';
-import { definedComponent, addComponent, componentMap, spanEnds, excludeKeywords } from '../componentMap';
-import { JVxeRenderType, JVxeTypePrefix, JVxeTypes } from '../types/JVxeTypes';
-import { getEnhanced } from './enhancedUtils';
-import { isFunction } from '/@/utils/is';
-
-/**
- * 鍒ゆ柇鏌愪釜缁勪欢鏄惁宸叉敞鍐�
- * @param type
- */
-export function isRegistered(type: JVxeTypes | string) {
-  if (excludeKeywords.includes(<JVxeTypes>type)) {
-    return true;
-  }
-  return componentMap.has(type);
-}
-
-/**
- * 娉ㄥ唽vxe鑷畾涔夌粍浠�
- *
- * @param type
- * @param component 缂栬緫鐘舵�佹樉绀虹殑缁勪欢
- * @param spanComponent 闈炵紪杈戠姸鎬佹樉绀虹殑缁勪欢锛屽彲浠ヤ负绌�
- */
-export function registerComponent(type: JVxeTypes, component: Component, spanComponent?: Component) {
-  addComponent(type, component, spanComponent);
-  registerOneComponent(type);
-}
-
-/**
- * 寮傛娉ㄥ唽vxe鑷畾涔夌粍浠�
- *
- * @param type
- * @param promise
- */
-export async function registerAsyncComponent(type: JVxeTypes, promise: Promise<any>) {
-  const result = await promise;
-  if (isFunction(result.installJVxe)) {
-    result.install((component: Component, spanComponent?: Component) => {
-      addComponent(type, component, spanComponent);
-      registerOneComponent(type);
-    });
-  } else {
-    addComponent(type, result.default);
-    registerOneComponent(type);
-  }
-}
-
-/**
- * 瀹夎鎵�鏈塿xe缁勪欢
- */
-export function registerAllComponent() {
-  definedComponent();
-  // 閬嶅巻鎵�鏈夌粍浠舵壒閲忔敞鍐�
-  const components = [...componentMap.keys()];
-  components.forEach((type) => {
-    if (!type.endsWith(spanEnds)) {
-      registerOneComponent(<JVxeTypes>type);
-    }
-  });
-}
-
-/**
- * 娉ㄥ唽鍗曚釜vxe缁勪欢
- *
- * @param type 缁勪欢 type
- */
-export function registerOneComponent(type: JVxeTypes) {
-  const component = componentMap.get(type);
-  if (component) {
-    const switches = getEnhanced(type).switches;
-    if (switches.editRender && !switches.visible) {
-      createEditRender(type, component);
-    } else {
-      createCellRender(type, component);
-    }
-  } else {
-    throw new Error(`銆恟egisterOneComponent銆�"${type}"涓嶅瓨鍦ㄤ簬componentMap涓璥);
-  }
-}
-
-/** 娉ㄥ唽鍙紪杈戠粍浠� */
-function createEditRender(type: JVxeTypes, component: Component, spanComponent?: Component) {
-  // 鑾峰彇褰撳墠缁勪欢鐨勫寮�
-  const enhanced = getEnhanced(type);
-  if (!spanComponent) {
-    if (componentMap.has(type + spanEnds)) {
-      spanComponent = componentMap.get(type + spanEnds);
-    } else {
-      // 榛樿鐨� span 缁勪欢涓� normal
-      spanComponent = componentMap.get(JVxeTypes.normal);
-    }
-  }
-  // 娣诲姞娓叉煋
-  VXETable.renderer.add(JVxeTypePrefix + type, {
-    // 鍙紪杈戞ā鏉�
-    renderEdit: createRender(type, component, JVxeRenderType.editer),
-    // 鏄剧ず妯℃澘
-    renderCell: createRender(type, spanComponent, JVxeRenderType.spaner),
-    // 澧炲己娉ㄥ唽
-    ...enhanced.installOptions,
-  });
-}
-
-/** 娉ㄥ唽鏅�氱粍浠� */
-function createCellRender(type: JVxeTypes, component: Component = <Component>componentMap.get(JVxeTypes.normal)) {
-  // 鑾峰彇褰撳墠缁勪欢鐨勫寮�
-  const enhanced = getEnhanced(type);
-  VXETable.renderer.add(JVxeTypePrefix + type, {
-    // 榛樿鏄剧ず妯℃澘
-    renderDefault: createRender(type, component, JVxeRenderType.default),
-    // 澧炲己娉ㄥ唽
-    ...enhanced.installOptions,
-  });
-}
-
-function createRender(type, component, renderType) {
-  return function (renderOptions, params) {
-    return [
-      h(component, {
-        type: type,
-        params: params,
-        renderOptions: renderOptions,
-        renderType: renderType,
-      }),
-    ];
-  };
-}
diff --git a/src/components/jeecg/JVxeTable/src/utils/vxeUtils.ts b/src/components/jeecg/JVxeTable/src/utils/vxeUtils.ts
deleted file mode 100644
index 108fd67..0000000
--- a/src/components/jeecg/JVxeTable/src/utils/vxeUtils.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- *
- * 鏍规嵁 tagName 鑾峰彇鐖剁骇鑺傜偣
- *
- * @param dom 涓�绾om鑺傜偣
- * @param tagName 鏍囩鍚嶏紝涓嶅尯鍒嗗ぇ灏忓啓
- */
-export function getParentNodeByTagName(dom: HTMLElement, tagName: string = 'body'): HTMLElement | null {
-  if (tagName === 'body') {
-    return document.body;
-  }
-  if (dom.parentElement) {
-    if (dom.parentElement.tagName.toLowerCase() === tagName.trim().toLowerCase()) {
-      return dom.parentElement;
-    } else {
-      return getParentNodeByTagName(dom.parentElement, tagName);
-    }
-  } else {
-    return null;
-  }
-}
diff --git a/src/components/jeecg/JVxeTable/src/vxe.data.ts b/src/components/jeecg/JVxeTable/src/vxe.data.ts
deleted file mode 100644
index 8a109c2..0000000
--- a/src/components/jeecg/JVxeTable/src/vxe.data.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import { propTypes } from '/@/utils/propTypes';
-
-export const vxeProps = () => ({
-  rowKey: propTypes.string.def('id'),
-  // 鍒椾俊鎭�
-  columns: {
-    type: Array,
-    required: true,
-  },
-  // 鏁版嵁婧�
-  dataSource: {
-    type: Array,
-    required: true,
-  },
-  authPre: {
-    type: String,
-    required: false,
-    default: '',
-  },
-  // 鏄惁鏄剧ず宸ュ叿鏍�
-  toolbar: propTypes.bool.def(false),
-  // 宸ュ叿鏍忛厤缃�
-  toolbarConfig: propTypes.object.def(() => ({
-    // prefix 鍓嶇紑锛泂uffix 鍚庣紑锛�
-    slots: ['prefix', 'suffix'],
-    // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳锛沜ollapse 灞曞紑鏀惰捣
-    btns: ['add', 'remove', 'clearSelection'],
-  })),
-  // 鏄惁鏄剧ず琛屽彿
-  rowNumber: propTypes.bool.def(false),
-  // 鏄惁鍙�夋嫨琛�
-  rowSelection: propTypes.bool.def(false),
-  // 閫夋嫨琛岀被鍨�
-  rowSelectionType: propTypes.oneOf(['checkbox', 'radio']).def('checkbox'),
-  // 鏄惁鍙睍寮�琛�
-  rowExpand: propTypes.bool.def(false),
-  // 灞曞紑琛岄厤缃�
-  expandConfig: propTypes.object.def(() => ({})),
-  // 椤甸潰鏄惁鍦ㄥ姞杞戒腑
-  loading: propTypes.bool.def(false),
-  // 琛ㄦ牸楂樺害
-  height: propTypes.oneOfType([propTypes.number, propTypes.string]).def('auto'),
-  // 鏈�澶ч珮搴�
-  maxHeight: {
-    type: Number,
-    default: () => null,
-  },
-  // 瑕佺鐢ㄧ殑琛�
-  disabledRows: propTypes.object.def(() => ({})),
-  // 鏄惁绂佺敤鍏ㄩ儴缁勪欢
-  disabled: propTypes.bool.def(false),
-  // 鏄惁鍙嫋鎷芥帓搴忥紙鏈夊浐瀹氬垪鐨勬儏鍐典笅鏃犳硶鎷栨嫿鎺掑簭锛屼粎鍙笂涓嬫帓搴忥級
-  dragSort: propTypes.bool.def(false),
-  // 鎺掑簭瀛楁淇濆瓨鐨凨ey
-  sortKey: propTypes.string.def('orderNum'),
-  // 鎺掑簭搴忓彿寮�濮嬪�硷紝榛樿涓� 0
-  sortBegin: propTypes.number.def(0),
-  // 澶у皬锛屽彲閫夊�兼湁锛歮edium锛堜腑锛夈�乻mall锛堝皬锛夈�乵ini锛堝井锛�
-  size: propTypes.oneOf(['medium', 'small', 'mini']).def('medium'),
-  // 鏄惁鏄剧ず杈规绾�
-  bordered: propTypes.bool.def(false),
-  // 鍒嗛〉鍣ㄥ弬鏁帮紝璁剧疆浜嗗嵆鍙樉绀哄垎椤靛櫒
-  pagination: propTypes.object.def(() => ({})),
-  // 鐐瑰嚮琛屾椂鏄惁鏄剧ず瀛愯〃鍗�
-  clickRowShowSubForm: propTypes.bool.def(false),
-  // 鐐瑰嚮琛屾椂鏄惁鏄剧ず涓昏〃鍗�
-  clickRowShowMainForm: propTypes.bool.def(false),
-  // 鏄惁鐐瑰嚮閫変腑琛岋紝浼樺厛绾ф渶浣�
-  clickSelectRow: propTypes.bool.def(false),
-  // 鏄惁寮�鍚� reload 鏁版嵁鏁堟灉
-  reloadEffect: propTypes.bool.def(false),
-  // 鏍¢獙瑙勫垯
-  editRules: propTypes.object.def(() => ({})),
-  // 鏄惁寮傛鍒犻櫎琛岋紝濡傛灉浣犺瀹炵幇寮傛鍒犻櫎锛岄偅涔堥渶瑕佹妸杩欎釜閫夐」寮�鍚紝
-  // 鍦╮emove浜嬩欢閲岃皟鐢╟onfirmRemove鏂规硶鎵嶄細鐪熸鍒犻櫎锛堥櫎闈炲垹闄ょ殑鍏ㄦ槸鏂板鐨勮锛�
-  asyncRemove: propTypes.bool.def(false),
-  // 鏄惁涓�鐩存樉绀虹粍浠讹紝濡傛灉涓篺alse鍒欏彧鏈夌偣鍑荤殑鏃跺�欐墠鍑虹幇缁勪欢
-  // 娉細璇ュ弬鏁颁笉鑳藉姩鎬佷慨鏀癸紱濡傛灉琛屻�佸垪瀛楁澶氱殑鎯呭喌涓嬶紝浼氭牴鎹満鍣ㄦ�ц兘閫犳垚涓嶅悓绋嬪害鐨勫崱椤裤��
-  // TODO 鏂扮増vxe-table鍙栨秷浜� visible 鍙傛暟锛屽鑷存棤娉曞疄鐜拌鍔熻兘
-  alwaysEdit: propTypes.bool.def(false),
-  // 鑱斿姩閰嶇疆锛屾暟缁勶紝璇︽儏閰嶇疆瑙佹枃妗�
-  linkageConfig: propTypes.array.def(() => []),
-  // 鏄惁寮�鍚娇鐢� webSocket 鏃犵棔鍒锋柊
-  socketReload: propTypes.bool.def(false),
-  // 鐩稿悓鐨剆ocketKey鏇存敼鏃朵細浜掔浉鍒锋柊
-  socketKey: propTypes.string.def('vxe-default'),
-  // 鏂板琛屾椂鍒囨崲琛岀殑婵�娲荤姸鎬�
-  addSetActive: propTypes.bool.def(true),
-  // 鏄惁寮�鍚敭鐩樼紪杈�
-  keyboardEdit: propTypes.bool.def(false),
-});
-
-export const vxeEmits = ['save', 'added', 'removed', 'inserted', 'dragged', 'selectRowChange', 'pageChange', 'valueChange'];
diff --git a/src/components/jeecg/JVxeTable/types.ts b/src/components/jeecg/JVxeTable/types.ts
deleted file mode 100644
index 7e668f7..0000000
--- a/src/components/jeecg/JVxeTable/types.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import JVxeTable from './src/JVxeTable';
-
-export type { JVxeComponent } from './src/types/JVxeComponent';
-export type { JVxeColumn, JVxeLinkageConfig } from './src/types';
-export { JVxeTypes } from './src/types/JVxeTypes';
-export type JVxeTableInstance = InstanceType<typeof JVxeTable>;
diff --git a/src/components/jeecg/JVxeTable/utils.ts b/src/components/jeecg/JVxeTable/utils.ts
deleted file mode 100644
index edd3e2c..0000000
--- a/src/components/jeecg/JVxeTable/utils.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { dispatchEvent, vModel } from './src/utils/enhancedUtils';
diff --git a/src/components/jeecg/OnLine/JPopupOnlReport.vue b/src/components/jeecg/OnLine/JPopupOnlReport.vue
deleted file mode 100644
index 37d2b15..0000000
--- a/src/components/jeecg/OnLine/JPopupOnlReport.vue
+++ /dev/null
@@ -1,249 +0,0 @@
-<template>
-  <div>
-    <div class="jeecg-basic-table-form-container" v-if="showSearchFlag">
-      <a-form ref="formRef" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol" @keyup.enter.native="searchQuery">
-        <a-row :gutter="24">
-          <template v-for="(item, index) in queryInfo">
-            <template v-if="item.hidden === '1'">
-              <a-col :md="6" :sm="24" :key="'query' + index" v-show="toggleSearchStatus">
-                <SearchFormItem :formElRef="formRef" :queryParam="queryParam" :item="item" :dictOptions="dictOptions"></SearchFormItem>
-              </a-col>
-            </template>
-            <template v-else>
-              <a-col :md="6" :sm="24" :key="'query' + index">
-                <SearchFormItem :formElRef="formRef" :queryParam="queryParam" :item="item" :dictOptions="dictOptions"></SearchFormItem>
-              </a-col>
-            </template>
-          </template>
-
-          <a-col :md="6" :sm="8">
-            <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
-              <a-col :lg="6">
-                <a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">鏌ヨ</a-button>
-                <a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">閲嶇疆</a-button>
-                <a @click="handleToggleSearch" style="margin-left: 8px">
-                  {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
-                  <Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
-                </a>
-              </a-col>
-            </span>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
-    <BasicTable
-      ref="tableRef"
-      :canResize="true"
-      :bordered="true"
-      :loading="loading"
-      :rowKey="combineRowKey"
-      :columns="columns"
-      :showIndexColumn="false"
-      :dataSource="dataSource"
-      :pagination="pagination"
-      :rowSelection="rowSelection"
-      @row-click="clickThenCheck"
-      @change="handleChangeInTable"
-    >
-      <template #tableTitle>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-      </template>
-    </BasicTable>
-
-    <!-- 璺宠浆Href鐨勫姩鎬佺粍浠舵柟寮� -->
-    <a-modal v-bind="hrefComponent.model" v-on="hrefComponent.on">
-      <component :is="hrefComponent.is" v-bind="hrefComponent.params" />
-    </a-modal>
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent, unref, ref, watch, watchEffect, reactive, computed } from 'vue';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { usePopBiz } from '/@/components/jeecg/OnLine/hooks/usePopBiz';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useRoute } from 'vue-router';
-  
-  export default defineComponent({
-    name: 'JPopupOnlReport',
-    components: {
-      SearchFormItem: createAsyncComponent(() => import('/@/components/jeecg/OnLine/SearchFormItem.vue'), { loading: true }),
-      BasicTable: createAsyncComponent(() => import('/@/components/Table/src/BasicTable.vue'), {
-        loading: true,
-      }),
-    },
-    props: ['multi', 'code', 'id', 'sorter', 'groupId', 'param', 'clickToRowSelect'],
-    emits: ['ok', 'register'],
-    setup(props, { emit, refs }) {
-      const { createMessage } = useMessage();
-      const labelCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 6 },
-      });
-      const wrapperCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 18 },
-      });
-      const formRef = ref();
-      const tableRef = ref();
-      const toggleSearchStatus = ref(false);
-      const attrs = useAttrs();
-      const tableScroll = ref({ x: true });
-      const route = useRoute();
-      console.log('route.query = ',route.query)
-      const getBindValue = Object.assign({}, {routeQuery: route.query}, unref(props), unref(attrs));
-      
-      const [
-        {
-          visibleChange,
-          loadColumnsInfo,
-          dynamicParamHandler,
-          loadData,
-          loadColumnsAndData,
-          handleChangeInTable,
-          combineRowKey,
-          clickThenCheck,
-          filterUnuseSelect,
-          handleExport,
-        },
-        {
-          hrefComponent,
-          visible,
-          rowSelection,
-          checkedKeys,
-          selectRows,
-          pagination,
-          dataSource,
-          columns,
-          loading,
-          title,
-          iSorter,
-          queryInfo,
-          queryParam,
-          dictOptions,
-        },
-      ] = usePopBiz(getBindValue, tableRef);
-
-      const showSearchFlag = computed(() => unref(queryInfo) && unref(queryInfo).length > 0);
-      /**
-       *鐩戝惉code
-       */
-      watch(
-        () => props.code,
-        () => {
-          loadColumnsAndData();
-        },
-        { immediate: true }
-      );
-      /**
-       *鐩戝惉popup鍔ㄦ�佸弬鏁� 鏀寔绯荤粺鍙橀噺璇硶
-       */
-      watch(
-        () => props.param,
-        () => {
-          if (visible) {
-            dynamicParamHandler();
-            //loadData();
-          }
-        }
-      );
-      /**
-       *鐩戝惉sorter鎺掑簭瀛楁
-       */
-      watchEffect(() => {
-        if (props.sorter) {
-          let arr = props.sorter.split('=');
-          if (arr.length === 2 && ['asc', 'desc'].includes(arr[1].toLowerCase())) {
-            iSorter.value = { column: arr[0], order: arr[1].toLowerCase() };
-            // 鎺掑簭瀛楁鍙楁帶
-            unref(columns).forEach((col) => {
-              if (col.dataIndex === unref(iSorter).column) {
-                col['sortOrder'] = unref(iSorter).order === 'asc' ? 'ascend' : 'descend';
-              } else {
-                col['sortOrder'] = false;
-              }
-            });
-          } else {
-            console.warn('銆怞Popup銆憇orter鍙傛暟涓嶅悎娉�');
-          }
-        }
-      });
-
-      function handleToggleSearch() {
-        toggleSearchStatus.value = !unref(toggleSearchStatus);
-      }
-
-      /**
-       * 瀵煎嚭excel
-       */
-      function onExportXls() {
-        handleExport!();
-      }
-
-      /**
-       * 鏌ヨ
-       */
-      function searchQuery() {
-        loadData(1);
-      }
-
-      /**
-       * 閲嶇疆
-       */
-      function searchReset() {
-        queryParam.value = {};
-        loadData(1);
-      }
-
-      return {
-        attrs,
-
-        tableScroll,
-        dataSource,
-        pagination,
-        columns,
-        rowSelection,
-        checkedKeys,
-        loading,
-        title,
-        hrefComponent,
-
-        clickThenCheck,
-        loadData,
-        combineRowKey,
-        handleChangeInTable,
-        visibleChange,
-        queryInfo,
-        queryParam,
-        tableRef,
-        formRef,
-        labelCol,
-        wrapperCol,
-        dictOptions,
-        showSearchFlag,
-        toggleSearchStatus,
-        handleToggleSearch,
-        searchQuery,
-        searchReset,
-        onExportXls,
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .jeecg-basic-table-form-container {
-    padding: 0px;
-
-    .table-page-search-submitButtons {
-      display: block;
-      margin-bottom: 0;
-      white-space: nowrap;
-    }
-  }
-
-  :deep .jeecg-basic-table .ant-table-wrapper .ant-table-title {
-    min-height: 0;
-  }
-</style>
diff --git a/src/components/jeecg/OnLine/SearchFormItem.vue b/src/components/jeecg/OnLine/SearchFormItem.vue
deleted file mode 100644
index e60d6b6..0000000
--- a/src/components/jeecg/OnLine/SearchFormItem.vue
+++ /dev/null
@@ -1,328 +0,0 @@
-<template>
-  <a-form-item v-if="item.view === DateTypeEnum.Date" :labelCol="labelCol" :class="'jeecg-online-search'">
-    <template #label>
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <template v-if="single_mode === item.mode">
-      <a-date-picker
-        :showTime="false"
-        valueFormat="YYYY-MM-DD"
-        :placeholder="'璇烽�夋嫨' + item.label"
-        v-model:value="queryParam[item.field]"
-      ></a-date-picker>
-    </template>
-    <template v-else>
-      <a-date-picker
-        :showTime="false"
-        valueFormat="YYYY-MM-DD"
-        placeholder="寮�濮嬫棩鏈�"
-        v-model:value="queryParam[item.field + '_begin']"
-        style="width: calc(50% - 15px)"
-      ></a-date-picker>
-      <span class="group-query-strig">~</span>
-      <a-date-picker
-        :showTime="false"
-        valueFormat="YYYY-MM-DD"
-        placeholder="缁撴潫鏃ユ湡"
-        v-model:value="queryParam[item.field + '_end']"
-        style="width: calc(50% - 15px)"
-      ></a-date-picker>
-    </template>
-  </a-form-item>
-
-  <a-form-item v-else-if="item.view === DateTypeEnum.Datetime" :labelCol="labelCol" :class="'jeecg-online-search'">
-    <template #label :title="item.label">
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <template v-if="single_mode === item.mode">
-      <a-date-picker
-        :placeholder="'璇烽�夋嫨' + item.label"
-        :show-time="true"
-        valueFormat="YYYY-MM-DD HH:mm:ss"
-        v-model:value="queryParam[item.field]"
-      ></a-date-picker>
-    </template>
-    <template v-else>
-      <a-date-picker
-        placeholder="閫夋嫨寮�濮嬫椂闂�"
-        :show-time="true"
-        valueFormat="YYYY-MM-DD HH:mm:ss"
-        v-model:value="queryParam[item.field + '_begin']"
-        style="width: calc(50% - 9px); min-width: 60px"
-      ></a-date-picker>
-      <span class="group-query-strig" style="width: auto; padding: 0 4px">~</span>
-      <a-date-picker
-        placeholder="閫夋嫨缁撴潫鏃堕棿"
-        :show-time="true"
-        valueFormat="YYYY-MM-DD HH:mm:ss"
-        v-model:value="queryParam[item.field + '_end']"
-        style="width: calc(50% - 9px); min-width: 60px"
-      ></a-date-picker>
-    </template>
-  </a-form-item>
-
-  <a-form-item v-else-if="item.view === DateTypeEnum.Time" :labelCol="labelCol" :class="'jeecg-online-search'">
-    <template #label>
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <template v-if="single_mode === item.mode">
-      <a-date-picker :placeholder="'璇烽�夋嫨' + item.label" mode="time" valueFormat="HH:mm:ss" v-model:value="queryParam[item.field]"></a-date-picker>
-    </template>
-    <template v-else>
-      <a-date-picker
-        placeholder="璇烽�夋嫨寮�濮嬫椂闂�"
-        mode="time"
-        valueFormat="HH:mm:ss"
-        v-model:value="queryParam[item.field + '_begin']"
-        style="width: calc(50% - 15px)"
-      ></a-date-picker>
-      <span class="group-query-strig">~</span>
-      <a-date-picker
-        placeholder="璇烽�夋嫨缁撴潫鏃堕棿"
-        mode="time"
-        valueFormat="HH:mm:ss"
-        v-model:value="queryParam[item.field + '_end']"
-        style="width: calc(50% - 15px)"
-      ></a-date-picker>
-    </template>
-  </a-form-item>
-
-  <a-form-item
-    v-else-if="item.view === CompTypeEnum.List || item.view === CompTypeEnum.Radio || item.view === CompTypeEnum.Switch"
-    :labelCol="labelCol"
-    :class="'jeecg-online-search'"
-  >
-    <template #label>
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <JDictSelectTag v-if="item.config === '1'" :placeholder="'璇烽�夋嫨' + item.label" v-model="queryParam[item.field]" :dictCode="getDictCode(item)">
-    </JDictSelectTag>
-    <a-select v-else :placeholder="'璇烽�夋嫨' + item.label" v-model:value="queryParam[item.field]">
-      <template v-for="(obj, index) in dictOptions[getDictOptionKey(item)]" :key="index">
-        <a-select-option :value="obj.value"> {{ obj.text }}</a-select-option>
-      </template>
-    </a-select>
-  </a-form-item>
-
-  <a-form-item v-else-if="item.view === CompTypeEnum.SelTree" :labelCol="labelCol" :class="'jeecg-online-search'">
-    <template #label>
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <JTreeSelect
-      :placeholder="'璇烽�夋嫨' + item.label"
-      v-model:value="queryParam[item.field]"
-      :dict="item.dict"
-      :pidField="item.pidField"
-      :pidValue="item.pidValue"
-      :hasChildField="item.hasChildField"
-      load-triggle-change
-    >
-    </JTreeSelect>
-  </a-form-item>
-
-  <a-form-item v-else-if="item.view === CompTypeEnum.CatTree" :labelCol="labelCol" :class="'jeecg-online-search'">
-    <template #label>
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <JCategorySelect :pcode="item.pcode" v-model:value="queryParam[item.field]" :placeholder="'璇烽�夋嫨' + item.label" />
-  </a-form-item>
-
-  <a-form-item v-else-if="item.view === CompTypeEnum.SelSearch" :labelCol="labelCol" :class="'jeecg-online-search'">
-    <template #label>
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <JOnlineSearchSelect v-model:value="queryParam[item.field]" :placeholder="'璇烽�夋嫨' + item.label" :sql="item.sql">
-  </JOnlineSearchSelect>
-  </a-form-item>
-
-  <a-form-item v-else-if="item.view === CompTypeEnum.SelUser" :labelCol="labelCol" :class="'jeecg-online-search'">
-    <template #label>
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <JSelectUserByDept v-model:value="queryParam[item.field]" :placeholder="'璇烽�夋嫨' + item.label"></JSelectUserByDept>
-  </a-form-item>
-
-  <a-form-item v-else-if="item.view == CompTypeEnum.SelDepart" :labelCol="labelCol" :class="'jeecg-online-search'">
-    <template #label>
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <JSelectDept v-model:value="queryParam[item.field]" :placeholder="'璇烽�夋嫨' + item.label" />
-  </a-form-item>
-
-  <a-form-item v-else-if="item.view === CompTypeEnum.Popup" :labelCol="labelCol" :class="'jeecg-online-search'">
-    <template #label>
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <JPopup
-      :placeholder="'璇烽�夋嫨' + item.label"
-      v-model:value="queryParam[item.field]"
-      :formElRef="formElRef"
-      :code="item.dictTable"
-      :field-config="item.dictCode"
-      :multi="true"
-    />
-  </a-form-item>
-
-  <a-form-item v-else-if="item.view === CompTypeEnum.Pca" :labelCol="labelCol" :class="'jeecg-online-search'">
-    <template #label>
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <JAreaLinkage :placeholder="'璇烽�夋嫨' + item.label" v-model:value="queryParam[item.field]" />
-  </a-form-item>
-  <!--TODO 缂哄皯鐨勭粍浠�-->
-  <a-form-item
-    v-else-if="item.view === CompTypeEnum.Checkbox || item.view === CompTypeEnum.ListMulti"
-    :labelCol="labelCol"
-    :label="item.label"
-    :class="'jeecg-online-search'"
-  >
-    <!-- <j-select-multiple
-                v-if="item.config==='1'"
-                :placeholder=" '璇烽�夋嫨'+item.label "
-                v-model="queryParam[item.field]"
-                :dictCode="getDictCode(item)">
-        </j-select-multiple>
-        <j-select-multiple
-                v-else
-                :placeholder=" '璇烽�夋嫨'+item.label "
-                :options="dictOptions[item.dbField]"
-                v-model="queryParam[item.field]">
-        </j-select-multiple>-->
-  </a-form-item>
-
-  <a-form-item v-else :labelCol="labelCol" :class="'jeecg-online-search'">
-    <template #label>
-      <span :title="item.label" class="label-text">{{ item.label }}</span>
-    </template>
-    <template v-if="single_mode === item.mode && 'string'== item.view">
-      <j-input :placeholder="'璇疯緭鍏�' + item.label" v-model:value="queryParam[item.field]"></j-input>
-    </template>
-    <template v-else-if="single_mode === item.mode">
-      <a-input :placeholder="'璇疯緭鍏�' + item.label" v-model:value="queryParam[item.field]"></a-input>
-    </template>
-    <template v-else>
-      <a-input :placeholder="'璇疯緭鍏ュ紑濮�' + item.label" v-model:value="queryParam[item.field + '_begin']" style="width: calc(50% - 15px)"></a-input>
-      <span class="group-query-strig">~</span>
-      <a-input :placeholder="'璇疯緭鍏ョ粨鏉�' + item.label" v-model:value="queryParam[item.field + '_end']" style="width: calc(50% - 15px)"></a-input>
-    </template>
-  </a-form-item>
-</template>
-
-<script lang="ts">
-  //import JOnlineSearchSelect from '@/components/online/autoform/comp/JOnlineSearchSelect'
-  import { defineComponent, ref } from 'vue';
-  import { DateTypeEnum } from '/@/enums/DateTypeEnum.ts';
-  import { CompTypeEnum } from '/@/enums/CompTypeEnum.ts';
-  import { JDictSelectTag, JTreeSelect, JCategorySelect, JSelectUserByDept, JSelectDept, JPopup, JAreaLinkage,JInput,JSearchSelect } from '/@/components/Form';
-  export default defineComponent({
-    name: 'JPopupOnlReport',
-    components: {
-      //JOnlineSearchSelect
-      JDictSelectTag,
-      JTreeSelect,
-      JCategorySelect,
-      JSelectUserByDept,
-      JSelectDept,
-      JPopup,
-      JAreaLinkage,
-      JInput,
-    },
-    props: {
-      formElRef: {
-        type: Object,
-        default: () => {},
-      },
-      item: {
-        type: Object,
-        default: () => {},
-        required: true,
-      },
-      dictOptions: {
-        type: Object,
-        default: () => {},
-        required: true,
-      },
-      queryParam: {
-        type: Object,
-        default: () => {},
-        required: true,
-      },
-    },
-    setup(props) {
-      const single_mode = ref('single');
-      console.log('dictOptions===>', props.dictOptions);
-      function getDictCode(item) {
-        if (item.dictTable && item.dictTable.length > 0) {
-          return item.dictTable + ',' + item.dictText + ',' + item.dictCode;
-        } else {
-          return item.dictCode;
-        }
-      }
-
-      function getSqlByDictCode(item) {
-        let { dictTable, dictCode, dictText } = item;
-        let temp = dictTable.toLowerCase();
-        let arr = temp.split('where');
-        let condition = '';
-        if (arr.length > 1) {
-          condition = ' where' + arr[1];
-        }
-        let sql = 'select ' + dictCode + " as 'value', " + dictText + " as 'text' from " + arr[0] + condition;
-        console.log('sql', sql);
-        return sql;
-      }
-
-      function getDictOptionKey(item) {
-        if (item.dbField) {
-          return item.dbField;
-        } else {
-          return item.field;
-        }
-      }
-
-      // 瀹氫箟鏌ヨ鏉′欢 鏂囨湰label鐨勬渶澶у搴� 姣旇捣鍗曠函鐨勬帶鍒跺瓧浣撲釜鏁版洿濂�
-      const labelTextMaxWidth = '120px';
-      const labelCol = {
-        style: {
-          'max-width': labelTextMaxWidth,
-        },
-      };
-      return {
-        labelTextMaxWidth,
-        labelCol,
-        single_mode,
-        getDictOptionKey,
-        getDictCode,
-        getSqlByDictCode,
-        DateTypeEnum,
-        CompTypeEnum,
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .group-query-strig {
-    width: 30px;
-    text-align: center;
-    display: inline-block;
-  }
-
-  /* 鏌ヨ鏉′欢宸﹀榻愭牱寮忚缃� */
-  .jeecg-online-search :deep(.ant-form-item-label) {
-    flex: 0 0 auto !important;
-    width: auto;
-  }
-  .jeecg-online-search :deep(.ant-form-item-control) {
-    max-width: 100%;
-  }
-
-  /* label鏄剧ず瀹藉害 瓒呭嚭鏄剧ず... */
-  .jeecg-online-search :deep(.label-text) {
-    max-width: v-bind(labelTextMaxWidth);
-    overflow: hidden;
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    overflow-wrap: break-word;
-  }
-</style>
diff --git a/src/components/jeecg/OnLine/hooks/usePopBiz.ts b/src/components/jeecg/OnLine/hooks/usePopBiz.ts
deleted file mode 100644
index e5fda66..0000000
--- a/src/components/jeecg/OnLine/hooks/usePopBiz.ts
+++ /dev/null
@@ -1,833 +0,0 @@
-import { reactive, ref, unref, defineAsyncComponent, toRaw, markRaw } from 'vue';
-import { httpGroupRequest } from '/@/components/Form/src/utils/GroupRequest';
-import { defHttp } from '/@/utils/http/axios';
-import { filterMultiDictText } from '/@/utils/dict/JDictSelectUtil.js';
-import { useMessage } from '/@/hooks/web/useMessage';
-import { OnlineColumn } from '/@/components/jeecg/OnLine/types/onlineConfig';
-import { h } from 'vue';
-import { useRouter } from 'vue-router';
-import { useMethods } from '/@/hooks/system/useMethods';
-import { importViewsFile } from '/@/utils';
-
-export function usePopBiz(props, tableRef?) {
-  const { createMessage } = useMessage();
-  //寮圭獥鍙鐘舵��
-  const visible = ref(false);
-  //琛ㄦ牸鍔犺浇
-  const loading = ref(false);
-  //cgRpConfigId
-  const cgRpConfigId = ref('');
-  //鏍囬
-  const title = ref('鍒楄〃');
-  // 鎺掑簭瀛楁锛岄粯璁ゆ棤鎺掑簭
-  const iSorter = ref<any>('');
-  // 鏌ヨ瀵硅薄
-  const queryInfo = ref([]);
-  // 鏌ヨ鍙傛暟
-  const queryParam = ref<any>({});
-  // 鍔ㄦ�佸弬鏁�
-  const dynamicParam = ref<any>({});
-  //瀛楀吀閰嶇疆椤�
-  const dictOptions = ref({});
-  //鏁版嵁闆�
-  const dataSource = ref<Array<object>>([]);
-  //瀹氫箟琛ㄦ牸淇℃伅
-  const columns = ref<Array<object>>([]);
-  //瀹氫箟璇锋眰url淇℃伅
-  const configUrl = reactive({
-    //鍒楄〃椤靛姞杞絚olumn鍜宒ata
-    getColumnsAndData: '/online/cgreport/api/getColumnsAndData/',
-    getColumns: '/online/cgreport/api/getRpColumns/',
-    getData: '/online/cgreport/api/getData/',
-    getQueryInfo: '/online/cgreport/api/getQueryInfo/',
-    export: '/online/cgreport/api/exportManySheetXls/',
-  });
-  //宸查�夋嫨鐨勫��
-  const checkedKeys = ref<Array<string | number>>([]);
-  //閫夋嫨鐨勮璁板綍
-  const selectRows = ref<Array<any>>([]);
-  // 鐐瑰嚮鍗曞厓鏍奸�変腑琛� popup闇�瑕� 浣嗘槸鎶ヨ〃棰勮涓嶉渶瑕�
-  let clickThenCheckFlag = true;
-  if (props.clickToRowSelect === false) {
-    clickThenCheckFlag = false;
-  }
-
-  /**
-   * 閫夋嫨鍒楅厤缃�
-   */
-  const rowSelection = {
-    fixed: true,
-    selectedRowKeys: checkedKeys,
-    selectionRows: selectRows,
-    onChange: onSelectChange,
-  };
-
-  /**
-   * 搴忓彿鍒楅厤缃�
-   */
-  const indexColumnProps = {
-    dataIndex: 'index',
-    width: '15px',
-  };
-  /**
-   * 鍒嗛〉閰嶇疆
-   */
-  const pagination = reactive({
-    current: 1,
-    pageSize: 10,
-    pageSizeOptions: ['10', '20', '30'],
-    // showTotal: (total, range) => {
-    //     return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
-    // },
-    showQuickJumper: true,
-    showSizeChanger: true,
-    total: 0,
-    // 鍚堣閫昏緫 [寰呬紭鍖� 3.0]
-    showTotal: (total) => onShowTotal(total),
-    realPageSize: 10,
-    realTotal: 0,
-    // 鏄惁鏈夊悎璁″垪锛岄粯璁や负""锛屽湪绗竴娆¤幏鍙栧埌鏁版嵁涔嬪悗浼氳璁′负ture鎴栬�協alse
-    isTotal: <string | boolean>'',
-    onShowSizeChange: (current, pageSize) => onSizeChange(current, pageSize),
-  });
-
-  /**
-   * 琛ㄦ牸閫夋嫨浜嬩欢
-   * @param selectedRowKeys
-   * @param selectRow
-   */
-  function onSelectChange(selectedRowKeys: (string | number)[]) {
-    if (!selectedRowKeys || selectedRowKeys.length == 0) {
-      selectRows.value = [];
-    } else {
-      for (let i = 0; i < selectedRowKeys.length; i++) {
-        let combineKey = combineRowKey(getRowByKey(selectedRowKeys[i]));
-        let keys = unref(checkedKeys);
-        if (combineKey && keys.indexOf(combineKey) < 0) {
-          let row = getRowByKey(selectedRowKeys[i]);
-          row && selectRows.value.push(row);
-        }
-      }
-    }
-    checkedKeys.value = selectedRowKeys;
-  }
-
-  /**
-   * 杩囨护娌$敤閫夐」
-   * @param selectedRowKeys
-   */
-  function filterUnuseSelect() {
-    selectRows.value = unref(selectRows).filter((item) => {
-      let combineKey = combineRowKey(item);
-      return unref(checkedKeys).indexOf(combineKey) >= 0;
-    });
-  }
-
-  /**
-   * 鏍规嵁key鑾峰彇row淇℃伅
-   * @param key
-   */
-  function getRowByKey(key) {
-    let row = unref(dataSource).filter((record) => combineRowKey(record) === key);
-    return row && row.length > 0 ? row[0] : '';
-  }
-
-  /**
-   * 鍔犺浇rowKey
-   */
-  function combineRowKey(record) {
-    let res = record?.id || '';
-    Object.keys(record).forEach((key) => {
-      res = key == 'rowIndex' ? record[key] + res : res + record[key];
-    });
-    res = res.length > 50 ? res.substring(0, 50) : res;
-    return res;
-  }
-
-  /**
-   * 鍔犺浇鍒椾俊鎭�
-   */
-  function loadColumnsInfo() {
-    let url = `${configUrl.getColumns}${props.code}`;
-    //缂撳瓨key
-    let groupIdKey = props.groupId ? `${props.groupId}${url}` : '';
-    httpGroupRequest(() => defHttp.get({ url }, { isTransformResponse: false, successMessageMode: 'none' }), groupIdKey).then((res) => {
-      if (res.success) {
-        initDictOptionData(res.result.dictOptions);
-        cgRpConfigId.value = res.result.cgRpConfigId;
-        title.value = res.result.cgRpConfigName;
-        let currColumns = res.result.columns;
-        for (let a = 0; a < currColumns.length; a++) {
-          if (currColumns[a].customRender) {
-            let dictCode = currColumns[a].customRender;
-            currColumns[a].customRender = ({ text }) => {
-              return filterMultiDictText(unref(dictOptions)[dictCode], text + '');
-            };
-          }
-          // 鎺掑簭瀛楁鍙楁帶
-          if (unref(iSorter) && currColumns[a].dataIndex === unref(iSorter).column) {
-            currColumns[a].sortOrder = unref(iSorter).order === 'asc' ? 'ascend' : 'descend';
-          }
-        }
-        if (currColumns[0].key !== 'rowIndex') {
-          currColumns.unshift({
-            title: '搴忓彿',
-            dataIndex: 'rowIndex',
-            key: 'rowIndex',
-            width: 60,
-            align: 'center',
-            customRender: function ({ text }) {
-              return parseInt(text) + 1;
-            },
-          });
-        }
-        columns.value = [...currColumns];
-        initQueryInfo(null);
-      }
-    });
-  }
-
-  /**
-   * 鍔犺浇鍒楀拰鏁版嵁[鍒楄〃涓撶敤]
-   */
-  function loadColumnsAndData() {
-    // 绗竴娆″姞杞� 缃┖isTotal 鍦ㄨ繖閲岃皟鐢ㄧ‘淇� 璇ユ柟娉曞彧鏄繘鍏ラ〉闈㈠悗 鍔犺浇涓�娆� 鍏朵綑鏌ヨ涓嶈蛋璇ユ柟娉�
-    pagination.isTotal = '';
-    let url = `${configUrl.getColumnsAndData}${props.id}`;
-    //缂撳瓨key
-    let groupIdKey = props.groupId ? `${props.groupId}${url}` : '';
-    httpGroupRequest(() => defHttp.get({ url }, { isTransformResponse: false, successMessageMode: 'none' }), groupIdKey).then((res) => {
-      if (res.success) {
-        initDictOptionData(res.result.dictOptions);
-        cgRpConfigId.value = props.id;
-        let { columns: metaColumnList, cgreportHeadName, fieldHrefSlots, isGroupTitle } = res.result;
-        title.value = cgreportHeadName;
-        // href 璺宠浆
-        const fieldHrefSlotKeysMap = {};
-        fieldHrefSlots.forEach((item) => (fieldHrefSlotKeysMap[item.slotName] = item));
-        let currColumns = handleColumnHrefAndDict(metaColumnList, fieldHrefSlotKeysMap);
-
-        // popup闇�瑕佸簭鍙凤紝 鏅�氬垪琛ㄤ笉闇�瑕�
-        if (clickThenCheckFlag === true) {
-          currColumns.unshift({
-            title: '搴忓彿',
-            dataIndex: 'rowIndex',
-            key: 'rowIndex',
-            width: 60,
-            align: 'center',
-            customRender: function ({ text }) {
-              return parseInt(text) + 1;
-            },
-          });
-        }
-
-        // 鍚堝苟琛ㄥご
-        if (isGroupTitle === true) {
-          currColumns = handleGroupTitle(currColumns);
-        }
-        columns.value = [...currColumns];
-        initQueryInfo(res.result.data);
-      } else {
-        //update-begin-author:taoyan date:20220401 for: VUEN-583銆恦ue3銆慗eecgBootException: sql榛戝悕鍗曟牎楠屼笉閫氳繃,璇疯仈绯荤鐞嗗憳!,鍓嶅彴鏃犳彁绀�
-        createMessage.warning(res.message);
-        //update-end-author:taoyan date:20220401 for: VUEN-583銆恦ue3銆慗eecgBootException: sql榛戝悕鍗曟牎楠屼笉閫氳繃,璇疯仈绯荤鐞嗗憳!,鍓嶅彴鏃犳彁绀�
-      }
-    });
-  }
-
-  /**
-   * 澶勭悊姹傚拰鐨勫垪 鍚堣閫昏緫 [寰呬紭鍖� 3.0]
-   */
-  function handleSumColumn(metaColumnList: OnlineColumn[], dataTotal: number): void {
-    // 鑾峰彇闇�瑕佸悎璁″垪鐨刣ataIndex
-    let sumColumnList = getNeedSumColumns(metaColumnList);
-    // 鍒ゆ柇鏄惁涓虹涓�娆¤幏鍙栨暟鎹紝濡傛灉鏄殑璇濓紝鍒欓渶瑕侀噸鏂拌缃畃ageSize
-    if (pagination.isTotal == '') {
-      if (sumColumnList.length > 0) {
-        pagination.isTotal = true;
-        // 鏈夊悎璁″瓧娈垫椂锛屾瘡娆℃渶澶氭煡璇㈠師pageSize-1鏉¤褰曪紝鍙﹀闇�瑕佺涓�娆℃椂灏嗘煡璇㈢殑10鏉′腑鍒犻櫎鏈�鍚庝竴鏉�
-        // 鍒犻櫎鏈�鍚庝竴鏉℃暟鎹� 濡傛灉绗竴娆″緱鍒扮殑鏁版嵁闀垮害绛変簬pageSize鐨勮瘽锛屽垯鍒犻櫎鏈�鍚庝竴鏉�
-        if (dataSource.value.length == pagination.pageSize) {
-          let remove_data = dataSource.value.pop();
-        }
-        pagination.realPageSize = pagination.pageSize - 1;
-      } else {
-        pagination.isTotal = false;
-      }
-    }
-    // 闇�瑕佹坊鍔犲悎璁″瓧娈�
-    if (pagination.isTotal) {
-      let totalRow = {};
-      sumColumnList.forEach((dataIndex) => {
-        let count = 0;
-        dataSource.value.forEach((row) => {
-          // 缁熻鍘婚櫎null鍙婄┖鏁版嵁
-          if (row[dataIndex] != null && row[dataIndex] != '') {
-            count += parseFloat(row[dataIndex]);
-          }
-        });
-        totalRow[dataIndex] = isNaN(count) ? '鍖呭惈闈炴暟瀛楀唴瀹�' : count.toFixed(2);
-
-        // 闀挎暣褰㈡椂鍚堣涓嶆樉绀�.00鍚庣紑
-        let v = metaColumnList.find((v) => v.dataIndex == dataIndex);
-        if (v && v.fieldType == 'Long') {
-          totalRow[dataIndex] = parseInt(totalRow[dataIndex]);
-        }
-      });
-      dataSource.value.push(totalRow);
-      pagination.realTotal = dataTotal;
-      pagination.total = Number(dataTotal) + Number(Math.floor(dataTotal / pagination.realPageSize));
-    }
-  }
-
-  /**
-   * 鑾峰彇闇�瑕佹眰鍜岀殑鍒� dataIndex
-   * @param columns
-   */
-  function getNeedSumColumns(columns: OnlineColumn[]): string[] {
-    let arr: string[] = [];
-    for (let column of columns) {
-      if (column.isTotal === '1') {
-        arr.push(column.dataIndex!);
-      }
-        // 銆怴UEN-1569銆戙�恛nline鎶ヨ〃銆戝悎璁℃棤鏁�
-      if (column.children && column.children.length > 0) {
-        let subArray = getNeedSumColumns(column.children);
-        if (subArray.length > 0) {
-          arr.push(...subArray);
-        }
-      }
-    }
-    return arr;
-  }
-
-  /**
-   * 澶勭悊鍒楃殑href鍜屽瓧鍏哥炕璇�
-   */
-  function handleColumnHrefAndDict(columns: OnlineColumn[], fieldHrefSlotKeysMap: {}): OnlineColumn[] {
-    for (let column of columns) {
-      let { customRender, hrefSlotName, fieldType } = column;
-      // online 鎶ヨ〃涓被鍨嬮厤缃负鏃ユ湡锛坹yyy-MM-dd 锛夛紝浣嗘槸瀹為檯灞曠ず涓烘棩鏈熸椂闂存牸寮�(yyyy-MM-dd HH:mm:ss) issues/3042
-      if (fieldType == 'Date') {
-        column.customRender = ({ text }) => {
-          if (!text) {
-            return '';
-          }
-          if (text.length > 10) {
-            return text.substring(0, 10);
-          }
-          return text;
-        };
-      } else {
-        if (!hrefSlotName && column.scopedSlots && column.scopedSlots.customRender) {
-          //銆怬nline鎶ヨ〃銆戝瓧鍏稿拰href浜掓枼 杩欓噷閫氳繃fieldHrefSlotKeysMap 鍏堟壘鍒版槸href鐨勫垪
-          if (fieldHrefSlotKeysMap.hasOwnProperty(column.scopedSlots.customRender)) {
-            hrefSlotName = column.scopedSlots.customRender;
-          }
-        }
-        // 濡傛灉 customRender 鏈夊�煎垯浠h〃浣跨敤浜嗗瓧鍏�
-        // 濡傛灉 hrefSlotName 鏈夊�煎垯浠h〃浣跨敤浜唄ref璺宠浆
-        // 涓よ�呭彲浠ュ吋瀹广�傚吋瀹圭殑鍏蜂綋鎬濊矾涓猴細鍏堣幏鍙栧埌瀛楀吀鏇挎崲鐨勫�硷紝鍐嶆坊鍔爃ref閾炬帴璺宠浆
-        if (customRender || hrefSlotName) {
-          let dictCode = customRender as string;
-          let replaceFlag = '_replace_text_';
-          column.customRender = ({ text, record }) => {
-            let value = text;
-            // 濡傛灉 dictCode 鏈夊�硷紝灏辫繘琛屽瓧鍏歌浆鎹�
-            if (dictCode) {
-              if (dictCode.startsWith(replaceFlag)) {
-                let textFieldName = dictCode.replace(replaceFlag, '');
-                value = record[textFieldName];
-              } else {
-                value = filterMultiDictText(unref(dictOptions)[dictCode], text + '');
-              }
-            }
-            // 鎵╁睍鍙傛暟璁剧疆鍒楃殑鍐呭闀垮害
-            if (column.showLength) {
-              if (value && value.length > column.showLength) {
-                value = value.substr(0, column.showLength) + '...';
-              }
-            }
-            // 濡傛灉 hrefSlotName 鏈夊�硷紝灏辩敓鎴愪竴涓� a 鏍囩锛屽寘瑁逛綇瀛楀吀鏇挎崲鍚庯紙鎴栧師鐢燂級鐨勫��
-            if (hrefSlotName) {
-              let field = fieldHrefSlotKeysMap[hrefSlotName];
-              if (field) {
-                return h(
-                  'a',
-                  {
-                    onClick: () => handleClickFieldHref(field, record),
-                  },
-                  value
-                );
-              }
-            }
-            return value;
-          };
-        }
-      }
-    }
-    return columns;
-  }
-
-  /**
-   * 澶勭悊鍚堝苟琛ㄥご
-   * @param columns
-   */
-  function handleGroupTitle(columns: OnlineColumn[]): OnlineColumn[] {
-    let newColumns: OnlineColumn[] = [];
-    for (let column of columns) {
-      //鎺掑簭瀛楁鍙楁帶  ---- 姝ら�昏緫涓烘柊澧為�昏緫 寰�
-      if (unref(iSorter) && column.dataIndex === unref(iSorter).column) {
-        column.sortOrder = unref(iSorter).order === 'asc' ? 'ascend' : 'descend';
-      }
-      //鍒ゆ柇瀛楁鏄惁闇�瑕佸悎骞惰〃澶�
-      if (column.groupTitle) {
-        let clIndex = newColumns.findIndex((im) => im.title === column.groupTitle);
-        if (clIndex !== -1) {
-          //琛ㄥご宸插瓨鍦ㄧ洿鎺ush children
-          newColumns[clIndex].children!.push(column);
-        } else {
-          //琛ㄥご涓嶅瓨鍦ㄧ粍瑁呰〃澶翠俊鎭�
-          let clGroup: OnlineColumn = {},
-            child: OnlineColumn[] = [];
-          child.push(column);
-          clGroup.title = column.groupTitle;
-          clGroup.align = 'center';
-          clGroup.children = child;
-          newColumns.push(clGroup);
-        }
-      } else {
-        newColumns.push(column);
-      }
-    }
-    return newColumns;
-  }
-
-  // 鑾峰彇璺敱鍣ㄥ璞� href璺宠浆鐢ㄥ埌
-  let router = useRouter();
-  /**
-   * href 鐐瑰嚮浜嬩欢
-   * @param field
-   * @param record
-   */
-  function handleClickFieldHref(field, record) {
-    let href = field.href;
-    let urlPattern = /(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?/;
-    let compPattern = /\.vue(\?.*)?$/;
-    let jsPattern = /{{([^}]+)}}/g; // {{ xxx }}
-    if (typeof href === 'string') {
-      href = href.trim().replace(/\${([^}]+)?}/g, (s1, s2) => record[s2]);
-      // 鎵ц {{...}} JS澧炲己璇彞
-      if (jsPattern.test(href)) {
-        href = href.replace(jsPattern, function (text, s0) {
-          try {
-            return eval(s0);
-          } catch (e) {
-            console.error(e);
-            return text;
-          }
-        });
-      }
-      if (urlPattern.test(href)) {
-        window.open(href, '_blank');
-      } else if (compPattern.test(href)) {
-        // 澶勭悊寮规
-        openHrefCompModal(href);
-      } else {
-        router.push(href);
-      }
-    }
-  }
-
-  /**
-   * 瀵煎嚭
-   */
-  function handleExport() {
-    const { handleExportXls } = useMethods();
-    let url = `${configUrl.export}${cgRpConfigId.value}`;
-    let params = getQueryParams(); //鏌ヨ鏉′欢
-    // 銆怴UEN-1568銆戝鏋滈�変腑浜嗘煇浜涜锛屽氨鍙鍑洪�変腑鐨勮
-    let keys = unref(checkedKeys);
-    if (keys.length > 0) {
-      params['force_id'] = keys
-        .map((i) => (getRowByKey(i) as any)?.id)
-        .filter((i) => i != null && i !== '')
-        .join(',');
-    }
-    handleExportXls(title.value, url, params);
-  }
-
-  /**
-   * 鍚堣閫昏緫 [寰呬紭鍖� 3.0]
-   * 鍒嗛〉 澶у皬鏀瑰彉浜嬩欢
-   * @param _current
-   * @param size
-   */
-  function onSizeChange(_current, size) {
-    pagination.isTotal = '';
-    pagination.pageSize = size;
-    if (pagination.isTotal) {
-      pagination.realPageSize = size - 1;
-    } else {
-      pagination.realPageSize = size;
-    }
-    pagination.current = 1;
-  }
-
-  /**
-   *  鍚堣閫昏緫 [寰呬紭鍖� 3.0]
-   * 鏄剧ず鎬绘潯鏁�
-   * @param total
-   */
-  function onShowTotal(total) {
-    // 閲嶆柊鏍规嵁鏄惁鏈夊悎璁¤绠楁瘡椤垫樉绀虹殑鏁版嵁
-    let start = (pagination.current - 1) * pagination.realPageSize + 1;
-    let end = start + (pagination.isTotal ? dataSource.value.length - 1 : dataSource.value.length) - 1;
-    let realTotal = pagination.isTotal ? pagination.realTotal : total;
-    return start + '-' + end + ' 鍏�' + realTotal + '鏉�';
-  }
-
-  /**
-   * 寮瑰嚭妗嗘樉绀洪殣钘忚Е鍙戜簨浠�
-   */
-  async function visibleChange($event) {
-    visible.value = $event;
-    $event && loadColumnsInfo();
-  }
-
-  /**
-   * 鍒濆鍖栨煡璇㈡潯浠�
-   * @param data 鏁版嵁缁撴灉闆�
-   */
-  function initQueryInfo(data) {
-    let url = `${configUrl.getQueryInfo}${unref(cgRpConfigId)}`;
-    //缂撳瓨key
-    let groupIdKey = props.groupId ? `${props.groupId}${url}` : '';
-    httpGroupRequest(() => defHttp.get({ url }, { isTransformResponse: false, successMessageMode: 'none' }), groupIdKey).then((res) => {
-      // console.log("鑾峰彇鏌ヨ鏉′欢", res);
-      if (res.success) {
-        dynamicParamHandler(res.result);
-        queryInfo.value = res.result;
-        console.log('queryInfo==>', queryInfo.value);
-        //鏌ヨ鏉′欢鍔犺浇鍚庡啀璇锋眰鏁版嵁
-        if (data) {
-          setDataSource(data);
-          //浼犻�掕矾鐢卞弬鏁板拰鍔ㄦ�佸弬鏁帮紝涓嶇敓鏁堬紝
-          loadData(1);
-        } else {
-          //娌℃湁浼犻�抎ata鏃舵煡璇㈡暟鎹�
-          loadData(1);
-        }
-      } else {
-        createMessage.warning(res.message);
-      }
-    });
-  }
-
-  /**
-   * 鍔犺浇琛ㄦ牸鏁版嵁
-   * @param arg
-   */
-  function loadData(arg?) {
-    if (arg == 1) {
-      pagination.current = 1;
-    }
-    let params = getQueryParams(); //鏌ヨ鏉′欢
-    console.log('params', params);
-    loading.value = true;
-    let url = `${configUrl.getData}${unref(cgRpConfigId)}`;
-    //缂撳瓨key
-    let groupIdKey = props.groupId ? `${props.groupId}${url}${JSON.stringify(params)}` : '';
-    httpGroupRequest(() => defHttp.get({ url, params }, { isTransformResponse: false, successMessageMode: 'none' }), groupIdKey).then((res) => {
-      loading.value = false;
-      let data = res.result;
-      console.log('琛ㄦ牸淇℃伅:', data);
-      setDataSource(data);
-    });
-  }
-
-  /**
-   * 璁剧疆dataSource
-   */
-  function setDataSource(data) {
-    if (data) {
-      pagination.total = Number(data.total);
-      let currentPage = pagination?.current ?? 1;
-      for (let a = 0; a < data.records.length; a++) {
-        if (!data.records[a].rowIndex) {
-          data.records[a].rowIndex = a + (currentPage - 1) * 10;
-        }
-      }
-      dataSource.value = data.records;
-      //update-begin-author:taoyan date:2023-2-11 for:issues/356 鍦ㄧ嚎鎶ヨ〃鍒嗛〉鏈夐棶棰�
-      tableRef.value && tableRef.value.setPagination({
-        total: Number(data.total)
-      })
-      //update-end-author:taoyan date:2023-2-11 for:issues/356 鍦ㄧ嚎鎶ヨ〃鍒嗛〉鏈夐棶棰�
-    } else {
-      pagination.total = 0;
-      dataSource.value = [];
-    }
-    // 鍚堣閫昏緫 [寰呬紭鍖� 3.0]
-    handleSumColumn(columns.value, pagination.total);
-  }
-
-  /**
-   * 鑾峰彇鏌ヨ鍙傛暟
-   */
-  function getQueryParams() {
-    let paramTarget = {};
-    if (unref(dynamicParam)) {
-      //澶勭悊鑷畾涔夊弬鏁�
-      Object.keys(unref(dynamicParam)).map((key) => {
-        paramTarget['self_' + key] = unref(dynamicParam)[key];
-      });
-    }
-    let param = Object.assign(paramTarget, unref(queryParam), unref(iSorter));
-    param.pageNo = pagination.current;
-    // 鍚堣閫昏緫 [寰呬紭鍖� 3.0]
-    //  瀹為檯鏌ヨ鏃朵笉浣跨敤table缁勪欢鐨刾ageSize锛岃�屼娇鐢ㄨ嚜瀹氫箟鐨剅ealPageSize,realPageSize浼氬湪绗竴娆¤幏鍙栧埌鏁版嵁鍚庡彉鍖�
-    param.pageSize = pagination.realPageSize;
-    return filterObj(param);
-  }
-
-  /**
-   * 澶勭悊鍔ㄦ�佸弬鏁�
-   */
-  function dynamicParamHandler(arr?) {
-    if (arr && arr.length > 0) {
-      //绗竴娆″姞杞芥煡璇㈡潯浠跺墠 鍒濆鍖杚ueryParam涓虹┖瀵硅薄
-      let queryTemp = {};
-      for (let item of arr) {
-        if (item.mode === 'single') {
-          queryTemp[item.field] = '';
-        }
-      }
-      queryParam.value = { ...queryTemp };
-    }
-    // 鍚堝苟璺敱鍙傛暟
-    if (props.routeQuery) {
-      queryParam.value = Object.assign(queryParam.value, props.routeQuery);
-    }
-
-    let dynamicTemp = {};
-    if (props.param) {
-      Object.keys(props.param).map((key) => {
-        let str = props.param[key];
-        if (key in queryParam) {
-          if (str && str.startsWith("'") && str.endsWith("'")) {
-            str = str.substring(1, str.length - 1);
-          }
-          //濡傛灉鏌ヨ鏉′欢鍖呭惈鍙傛暟 璁剧疆鍊�
-          unref(queryParam)[key] = str;
-        }
-        dynamicTemp[key] = props.param[key];
-      });
-    }
-    dynamicParam.value = { ...dynamicTemp };
-  }
-
-  /**
-   * 鍒嗛〉
-   * @param page
-   * @param filters
-   * @param sorter
-   */
-  function handleChangeInTable(page, filters, sorter) {
-    console.log(page, filters, sorter);
-    //鍒嗛〉銆佹帓搴忋�佺瓫閫夊彉鍖栨椂瑙﹀彂
-    if (Object.keys(sorter).length > 0) {
-      iSorter.value = {
-        column: sorter.field,
-        order: 'ascend' === sorter.order ? 'asc' : 'desc',
-      };
-      // 鎺掑簭瀛楁鍙楁帶
-      unref(columns).forEach((col) => {
-        if (col['dataIndex'] === sorter.field) {
-          col['sortOrder'] = sorter.order;
-        }
-      });
-    }
-    pagination.current = page.current;
-    pagination.pageSize = page.pageSize;
-    loadData();
-  }
-
-  /**
-   * 琛岀偣鍑讳簨浠�
-   * @param record
-   */
-  function clickThenCheck(record) {
-    if (clickThenCheckFlag === true) {
-      let rowKey = combineRowKey(record);
-      if (!unref(checkedKeys) || unref(checkedKeys).length == 0) {
-        let arr1: any[] = [],
-          arr2: any[] = [];
-        arr1.push(record);
-        arr2.push(rowKey);
-        checkedKeys.value = arr2;
-        selectRows.value = arr1;
-      } else {
-        if (unref(checkedKeys).indexOf(rowKey) < 0) {
-          //涓嶅瓨鍦ㄥ氨閫変腑
-          checkedKeys.value.push(rowKey);
-          selectRows.value.push(record);
-        } else {
-          //宸查�変腑灏卞彇娑�
-          let rowKey_index = unref(checkedKeys).indexOf(rowKey);
-          checkedKeys.value.splice(rowKey_index, 1);
-          selectRows.value.splice(rowKey_index, 1);
-        }
-      }
-    }
-  }
-
-  //闃叉瀛楀吀涓湁鍨冨溇鏁版嵁
-  function initDictOptionData(arr) {
-    let obj = {};
-    Object.keys(arr).map((k) => {
-      obj[k] = arr[k].filter((item) => {
-        return item != null;
-      });
-    });
-    dictOptions.value = obj;
-  }
-
-  /**
-   * 杩囨护瀵硅薄涓负绌虹殑灞炴��
-   * @param obj
-   * @returns {*}
-   */
-  function filterObj(obj) {
-    if (!(typeof obj == 'object')) {
-      return;
-    }
-
-    for (let key in obj) {
-      if (obj.hasOwnProperty(key) && (obj[key] == null || obj[key] == undefined || obj[key] === '')) {
-        delete obj[key];
-      }
-    }
-    return obj;
-  }
-
-  // 鏍峰紡
-  const dialogStyle = {
-    top: 0,
-    left: 0,
-    height: '100%',
-    margin: 0,
-    padding: 0,
-  };
-
-  // 寮圭獥灞炴�ч厤缃�
-  const hrefComponent = ref({
-    model: {
-      title: '',
-      okText: '鍏抽棴',
-      width: '100%',
-      visible: false,
-      destroyOnClose: true,
-      style: dialogStyle,
-      // dialogStyle: dialogStyle,
-      bodyStyle: {
-        padding: '8px',
-        height: 'calc(100vh - 108px)',
-        overflow: 'auto',
-        overflowX: 'hidden',
-      },
-      // 闅愯棌鎺夊彇娑堟寜閽�
-      cancelButtonProps: { style: { display: 'none' } },
-    },
-    on: {
-      ok: () => (hrefComponent.value.model.visible = false),
-      cancel: () => (hrefComponent.value.model.visible = false),
-    },
-    is: <any>null,
-    params: {},
-  });
-
-  // 瓒呴摼鐐瑰嚮浜嬩欢--> 鎵撳紑涓�涓猰odal绐楀彛
-  function openHrefCompModal(href) {
-    // 瑙f瀽 href 鍙傛暟
-    let index = href.indexOf('?');
-    let path = href;
-    if (index !== -1) {
-      path = href.substring(0, index);
-      let paramString = href.substring(index + 1, href.length);
-      let paramArray = paramString.split('&');
-      let params = {};
-      paramArray.forEach((paramObject) => {
-        let paramItem = paramObject.split('=');
-        params[paramItem[0]] = paramItem[1];
-      });
-      hrefComponent.value.params = params;
-    } else {
-      hrefComponent.value.params = {};
-    }
-    hrefComponent.value.model.visible = true;
-    hrefComponent.value.model.title = '鎿嶄綔';
-    hrefComponent.value.is = markRaw(defineAsyncComponent(() => importViewsFile(path)));
-  }
-
-  //update-begin-author:taoyan date:2022-5-31 for: VUEN-1155 popup 閫夋嫨鏁版嵁鏃讹紝浼氶�夋嫨澶氭潯閲嶅鏁版嵁
-  /**
-   * emit浜嬩欢 鑾峰彇閫変腑鐨勮鏁版嵁
-   */
-  function getOkSelectRows(): any[] {
-    let arr = unref(selectRows);
-    let selectedRowKeys = checkedKeys.value;
-    console.log('arr', arr);
-    if (!selectedRowKeys || selectedRowKeys.length <= 0) {
-      return [];
-    }
-    if (!arr || arr.length <= 0) {
-      return [];
-    }
-    let rows: any = [];
-    for (let key of selectedRowKeys) {
-      for (let i = 0; i < arr.length; i++) {
-        let combineKey = combineRowKey(arr[i]);
-        if (key === combineKey) {
-          rows.push(toRaw(arr[i]));
-          break;
-        }
-      }
-    }
-    return rows;
-  }
-  //update-end-author:taoyan date:2022-5-31 for: VUEN-1155 popup 閫夋嫨鏁版嵁鏃讹紝浼氶�夋嫨澶氭潯閲嶅鏁版嵁
-
-  return [
-    {
-      visibleChange,
-      loadColumnsInfo,
-      loadColumnsAndData,
-      dynamicParamHandler,
-      loadData,
-      handleChangeInTable,
-      combineRowKey,
-      clickThenCheck,
-      filterUnuseSelect,
-      handleExport,
-      getOkSelectRows,
-    },
-    {
-      hrefComponent,
-      visible,
-      rowSelection,
-      checkedKeys,
-      selectRows,
-      pagination,
-      dataSource,
-      columns,
-      indexColumnProps,
-      loading,
-      title,
-      iSorter,
-      queryInfo,
-      queryParam,
-      dictOptions,
-    },
-  ];
-}
diff --git a/src/components/jeecg/OnLine/types/onlineConfig.ts b/src/components/jeecg/OnLine/types/onlineConfig.ts
deleted file mode 100644
index d89d77f..0000000
--- a/src/components/jeecg/OnLine/types/onlineConfig.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-interface ScopedSlots {
-  customRender: string;
-}
-
-interface HrefSlots {
-  // 閾炬帴鍦板潃
-  href: string;
-  // fieldHref_瀛楁鍚�
-  slotName: string;
-}
-
-interface OnlineColumn {
-  dataIndex?: string;
-  title?: string;
-  key?: string;
-  fieldType?: string;
-  width?: number | string;
-  align?: string;
-  sorter?: string | boolean;
-  isTotal?: string | number | boolean;
-  groupTitle?: string;
-  // 瓒呴摼鐨勬椂鍊� 鍜孒refSlots涓殑slotName鍖归厤
-  scopedSlots?: ScopedSlots;
-  // 涓�鑸敤浜庡瓧鍏� 瀛楀吀浼犺繃鏉ョ殑鏄瓧鍏哥紪鐮佸瓧绗︿覆 鍚庤浆鍑芥暟
-  customRender?: string | Function;
-  // 杩欎釜绫诲瀷涓嶇煡閬撴湁浠�涔堢敤
-  hrefSlotName?: string;
-  showLength?: number | string;
-  children?: OnlineColumn[];
-  sortOrder?: string;
-  // 鎻掓Ы瀵瑰簲鎺т欢绫诲瀷(鍒楄〃)
-  slots?: ScopedSlots;
-  //瓒呰繃瀹藉害灏嗚嚜鍔ㄧ渷鐣ワ紝鏆備笉鏀寔鍜屾帓搴忕瓫閫変竴璧蜂娇鐢ㄣ��
-  ellipsis?: boolean;
-  // 鏄惁鍥哄畾鍒�
-  fixed?: boolean | 'left' | 'right';
-  //瀛楁绫诲瀷 int/string 
-  dbType?:string;
-  //浠栬〃瀛楁鐢�
-  linkField?:string;
-}
-
-export { OnlineColumn, HrefSlots };
diff --git a/src/components/jeecg/UserAvatar.vue b/src/components/jeecg/UserAvatar.vue
deleted file mode 100644
index e459fe8..0000000
--- a/src/components/jeecg/UserAvatar.vue
+++ /dev/null
@@ -1,142 +0,0 @@
-<template>
-  <div class="user-avatar-info">
-      <a-popover title="" :overlayStyle="{width: '250px'}">
-          <template #content>
-             <div style="display: flex;flex-direction: row;align-items: center">
-                 <div style="width: 60px;text-align: center">
-                     <a-avatar v-if="userAvatar" :src="userAvatar" :size="47"/>
-                     <a-avatar v-else :size="47">{{ getAvatarText() }}</a-avatar>
-                 </div>
-                 <div style="flex: 1;display: flex;flex-direction: column;margin-left: 12px">
-                     <div style="color: #000;display: inline-block;font-size: 15px;font-weight: 700;margin-top: 3px;vertical-align: top;width: 170px;">
-                         {{ userLabel }}
-                     </div>
-                     <div style="color: #757575;display: block;margin-top: 4px;">
-                         {{ phone }}
-                     </div>
-                 </div>
-             </div>
-          </template>
-          <span style="cursor: pointer">
-              <a-avatar v-if="userAvatar" :src="userAvatar" :loadError="loadError"/>
-              <a-avatar v-else>{{ getAvatarText() }}</a-avatar>
-          </span>
-      </a-popover>
-      <span class="realname-ellipsis">
-          {{ userLabel }}
-      </span>
-  </div>
-</template>
-
-<script lang="ts">
-  import { ref, watchEffect, defineComponent } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-  
-  export default defineComponent({
-    name: 'UserAvatar',
-    props: {
-      username: {
-        type: String,
-        default: '',
-      },
-      detail:{
-        type: Object,
-        default: ()=>{},
-      }
-    },
-    setup(props) {
-      const userAvatar = ref('');
-      const userLabel = ref('');
-      const phone = ref('');
-
-      watchEffect(async ()=>{
-        userAvatar.value = '';
-        userLabel.value = '';
-        phone.value = '';
-        let username = props.username;
-        if(username){
-          await initUserInfo(username);
-        }
-        let userInfo = props.detail;
-        if(userInfo){
-          if(userInfo.avatar){
-            userAvatar.value = getFileAccessHttpUrl(userInfo.avatar);
-          }
-          if(userInfo.realname){
-            userLabel.value = userInfo.realname;
-          }
-          if(userInfo.phone){
-            phone.value = userInfo.phone;
-          }
-        }
-      });
-
-      async function initUserInfo(val) {
-        const params = {
-          username: val,
-        };
-        const url = '/sys/user/getMultiUser';
-        const data = await defHttp.get({ url, params }, {isTransformResponse: false});
-        if(data && data.length > 0){
-          let temp = data[0].avatar;
-          if (temp) {
-            userAvatar.value = getFileAccessHttpUrl(temp)
-          }
-          userLabel.value = data[0].realname;
-          phone.value = data[0].phone;
-        }else{
-          console.log(data)
-        }
-      }
-
-      function getAvatarText() {
-        let text = userLabel.value;
-        if (!text) {
-          text = props.username;
-        }
-        if (text) {
-          if (text.length > 2) {
-            return text.substr(0, 2);
-          } else {
-            return text;
-          }
-        }
-        return '';
-      }
-      
-      function loadError() {
-        userAvatar.value = '';
-        return true;
-      }
-      
-
-      return {
-        userAvatar,
-        userLabel,
-        getAvatarText,
-        phone,
-        loadError
-      };
-    },
-  });
-</script>
-
-<style scoped lang="less">
-    .user-avatar-info{
-        .ant-avatar-image{
-            cursor: pointer;
-        }
-        .realname-ellipsis {
-            overflow: hidden;
-            text-overflow: ellipsis;
-            vertical-align: top;
-            white-space: nowrap;
-            height: 32px;
-            line-height: 32px;
-            display: inline-block;
-            margin-left: 10px;
-        }
-    }
-    
-</style>
diff --git a/src/components/jeecg/comment/CommentFiles.vue b/src/components/jeecg/comment/CommentFiles.vue
deleted file mode 100644
index e9e232a..0000000
--- a/src/components/jeecg/comment/CommentFiles.vue
+++ /dev/null
@@ -1,164 +0,0 @@
-<template>
-  <div>
-    <a-alert type="info" class="jeecg-comment-files">
-      <template #message>
-        <span class="j-icon">
-          <a-upload multiple v-model:file-list="selectFileList" :showUploadList="false" :before-upload="beforeUpload">
-            <span class="inner-button"><upload-outlined />涓婁紶</span>
-          </a-upload>
-        </span>
-        <span class="j-icon">
-          <span class="inner-button"><folder-outlined />浠庢枃浠跺簱閫夋嫨?</span>
-        </span>
-      </template>
-    </a-alert>
-
-    <!-- 姝e湪涓婁紶鐨勬枃浠� -->
-    <div class="selected-file-warp" v-if="selectFileList && selectFileList.length > 0">
-      <div class="selected-file-list">
-        <div class="item" v-for="item in selectFileList">
-          <div class="complex">
-            <div class="content" >
-              <!-- 鍥剧墖 -->
-              <div v-if="isImage(item)" class="content-top" style="height: 100%">
-                <div class="content-image" :style="getImageAsBackground(item)">
-                  <!--  <img style="height: 100%;" :src="getImageSrc(item)">-->
-                </div>
-              </div>
-              <!-- 鏂囦欢 -->
-              <template v-else>
-                <div class="content-top">
-                  <div class="content-icon" :style="{ background: 'url(' + getBackground(item) + ')  no-repeat' }"></div>
-                </div>
-                <div class="content-bottom" :title="item.name">
-                  <span>{{ item.name }}</span>
-                </div>
-              </template>
-            </div>
-            <div class="layer" :class="{'layer-image':isImage(item)}">
-              <div class="next" @click="viewImage(item)"><div class="text">{{ item.name }} </div></div>
-              <div class="buttons">
-                <div class="opt-icon">
-                  <Tooltip title="鍒犻櫎">
-                    <delete-outlined @click="handleRemove(item)" />
-                  </Tooltip>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
-        <div class="item empty"></div><div class="item empty"></div><div class="item empty"></div> <div class="item empty"></div><div class="item empty"></div><div class="item empty"></div>
-      </div>
-
-      <div style="margin-bottom: 24px; margin-top: 18px; text-align: right">
-        <a-button @click="quxiao">鍙栨秷</a-button>
-        <a-button type="primary" style="margin-left: 10px" @click="queding" :loading="buttonLoading">纭畾</a-button>
-      </div>
-    </div>
-
-    <!-- 鍘嗗彶鏂囦欢 -->
-    <history-file-list :dataList="dataList"></history-file-list>
-  </div>
-</template>
-
-<script>
-  import { UploadOutlined, FolderOutlined, DownloadOutlined, PaperClipOutlined, DeleteOutlined } from '@ant-design/icons-vue';
-  import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
-  import { uploadFileUrl } from './useComment';
-  import { propTypes } from '/@/utils/propTypes';
-  import { computed, watchEffect, unref, ref } from 'vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { fileList } from './useComment';
-  import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-  import { useUserStore } from '/@/store/modules/user';
-  import { saveOne, useCommentWithFile, useFileList } from './useComment';
-
-  import { Tooltip } from 'ant-design-vue';
-  import HistoryFileList from './HistoryFileList.vue';
-
-  export default {
-    name: 'CommentFiles',
-    components: {
-      UploadOutlined,
-      FolderOutlined,
-      JUpload,
-      DownloadOutlined,
-      PaperClipOutlined,
-      DeleteOutlined,
-      Tooltip,
-      HistoryFileList,
-    },
-    props: {
-      tableName: propTypes.string.def(''),
-      dataId: propTypes.string.def(''),
-      datetime:  propTypes.number.def(1)
-    },
-    setup(props) {
-      // const { createMessage } = useMessage();
-      const { userInfo } = useUserStore();
-      const dataList = ref([]);
-      const commentId = ref('');
-
-      async function loadFileList() {
-        const params = {
-          tableName: props.tableName,
-          tableDataId: props.dataId,
-        };
-        const data = await fileList(params);
-        console.log('1111', data)
-        if (!data || !data.records || data.records.length == 0) {
-          dataList.value = [];
-        } else {
-          let array = data.records;
-          console.log(123, array);
-          dataList.value = array;
-        }
-        commentId.value = '';
-      }
-
-      watchEffect(() => {
-        // 姣忔鍒囨崲tab閮戒細鍒锋柊鏂囦欢鍒楄〃--- VUEN-1884 璇勮閲屼笂浼犵殑鍥剧墖鏈湪鏂囦欢涓樉绀�
-        if(props.datetime){
-          if (props.tableName && props.dataId) {
-            loadFileList();
-          }
-        }
-      });
-
-      const { saveCommentAndFiles, buttonLoading } = useCommentWithFile(props);
-      const { selectFileList, beforeUpload, handleRemove, getBackground, isImage, getImageAsBackground, viewImage } = useFileList();
-
-      function quxiao() {
-        selectFileList.value = [];
-      }
-      async function queding() {
-        let obj = {
-          fromUserId: userInfo.id,
-          commentContent: '涓婁紶浜嗛檮浠�'
-        }
-        await saveCommentAndFiles(obj, selectFileList.value)
-        selectFileList.value = [];
-        await loadFileList();
-      }
-
-      return {
-        selectFileList,
-        beforeUpload,
-        handleRemove,
-        getBackground,
-        isImage,
-        dataList,
-        uploadFileUrl,
-        quxiao,
-        queding,
-        buttonLoading,
-        getImageAsBackground,
-        viewImage
-      };
-    },
-  };
-</script>
-
-<style lang="less" scoped>
-  @import 'comment.less';
-</style>
diff --git a/src/components/jeecg/comment/CommentList.vue b/src/components/jeecg/comment/CommentList.vue
deleted file mode 100644
index 5b02bba..0000000
--- a/src/components/jeecg/comment/CommentList.vue
+++ /dev/null
@@ -1,331 +0,0 @@
-<template>
-  <div :style="{ position: 'relative', height: allHeight + 'px' }">
-    <a-list class="jeecg-comment-list" header="" item-layout="horizontal" :data-source="dataList" :style="{ height: commentHeight + 'px' }">
-      <template #renderItem="{ item }">
-        <a-list-item style="padding-left: 10px; flex-direction: column" @click="handleClickItem">
-          <a-comment>
-            <template #avatar>
-              <a-avatar class="tx" :src="getAvatar(item)" :alt="getAvatarText(item)">{{ getAvatarText(item) }}</a-avatar>
-            </template>
-
-            <template #author>
-              <div class="comment-author">
-                <span>{{ item.fromUserId_dictText }}</span>
-
-                <template v-if="item.toUserId">
-                  <span>鍥炲</span>
-                  <span>{{ item.toUserId_dictText }}</span>
-                  <Tooltip class="comment-last-content" @visibleChange="(v)=>visibleChange(v, item)">
-                    <template #title>
-                      <div v-html="getHtml(item.commentId_dictText)"></div>
-                    </template>
-                    <message-outlined />
-                  </Tooltip>
-                </template>
-              </div>
-            </template>
-
-            <template #datetime>
-              <div>
-                <Tooltip :title="item.createTime">
-                  <span>{{ getDateDiff(item) }}</span>
-                </Tooltip>
-              </div>
-            </template>
-
-            <template #actions>
-              <span @click="showReply(item)">鍥炲</span>
-
-              <Popconfirm title="纭畾鍒犻櫎鍚楋紵" @confirm="deleteComment(item)">
-                <span>鍒犻櫎</span>
-              </Popconfirm>
-            </template>
-
-            <template #content>
-              <div v-html="getHtml(item.commentContent)" style="font-size: 15px">
-              </div>
-
-              <div v-if="item.fileList && item.fileList.length > 0">
-                <!-- 鍘嗗彶鏂囦欢 -->
-                <history-file-list :dataList="item.fileList" isComment></history-file-list>
-              </div>
-            </template>
-          </a-comment>
-          <div v-if="item.commentStatus" class="inner-comment">
-            <my-comment inner @cancel="item.commentStatus = false" @comment="(content, fileList) => replyComment(item, content, fileList)" :inputFocus="focusStatus"></my-comment>
-          </div>
-        </a-list-item>
-      </template>
-    </a-list>
-
-    <div style="position: absolute; bottom: 0; left: 0; width: 100%; background: #fff; border-top: 1px solid #eee">
-      <a-comment style="margin: 0 10px">
-        <template #avatar>
-          <a-avatar class="tx" :src="getMyAvatar()" :alt="getMyname()">{{ getMyname() }}</a-avatar>
-        </template>
-        <template #content>
-          <my-comment ref="bottomCommentRef" @comment="sendComment" :inputFocus="focusStatus"></my-comment>
-        </template>
-      </a-comment>
-    </div>
-  </div>
-</template>
-
-<script>
-  /**
-   * 璇勮鍒楄〃
-   */
-  import { defineComponent, ref, onMounted, watch, watchEffect ,inject } from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  // import dayjs from 'dayjs';
-  // import relativeTime from 'dayjs/plugin/relativeTime';
-  // import customParseFormat from 'dayjs/plugin/customParseFormat';
-  // dayjs.locale('zh');
-  // dayjs.extend(relativeTime);
-  // dayjs.extend(customParseFormat);
-  
-  import { MessageOutlined } from '@ant-design/icons-vue';
-  import { Comment, Tooltip } from 'ant-design-vue';
-  import { useUserStore } from '/@/store/modules/user';
-  import MyComment from './MyComment.vue';
-  import { list, saveOne, deleteOne, useCommentWithFile, useEmojiHtml, queryById } from './useComment';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import HistoryFileList from './HistoryFileList.vue';
-  import { Popconfirm } from 'ant-design-vue';
-  import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-
-  export default defineComponent({
-    name: 'CommentList',
-    components: {
-      MessageOutlined,
-      AComment: Comment,
-      Tooltip,
-      MyComment,
-      Popconfirm,
-      HistoryFileList,
-    },
-    props: {
-      tableName: propTypes.string.def(''),
-      dataId: propTypes.string.def(''),
-      datetime:  propTypes.number.def(1)
-    },
-    setup(props) {
-      const { createMessage } = useMessage();
-      const dataList = ref([]);
-      const { userInfo } = useUserStore();
-      const dayjs = inject('$dayjs')
-      
-      /**
-       * 鑾峰彇褰撳墠鐢ㄦ埛鍚嶇О
-       */
-      function getMyname() {
-        if (userInfo.realname) {
-          return userInfo.realname.substr(0, 2);
-        }
-        return '';
-      }
-      
-      function getMyAvatar(){
-        return userInfo.avatar;
-      }
-      
-      // 鑾峰彇澶村儚
-      function getAvatar(item) {
-        if (item.fromUserAvatar) {
-          return getFileAccessHttpUrl(item.fromUserAvatar)
-        }
-        return '';
-      }
-
-      // 澶村儚娌℃湁鑾峰彇 鐢ㄦ埛鍚嶅墠涓や綅
-      function getAvatarText(item){
-        if (item.fromUserId_dictText) {
-          return item.fromUserId_dictText.substr(0, 2);
-        }
-        return '鏈煡';
-      }
-
-      function getAuthor(item) {
-        if (item.toUser) {
-          return item.fromUserId_dictText + ' 鍥炲 ' + item.fromUserId_dictText;
-        } else {
-          return item.fromUserId_dictText;
-        }
-      }
-
-      function getDateDiff(item) {
-        if (item.createTime) {
-          const temp = dayjs(item.createTime, 'YYYY-MM-DD hh:mm:ss');
-          return temp.fromNow();
-        }
-        return '';
-      }
-      const commentHeight = ref(300);
-      const allHeight = ref(300);
-      onMounted(() => {
-        commentHeight.value = window.innerHeight - 57 - 46 - 70 - 160;
-        allHeight.value = window.innerHeight - 57 - 46 - 53 -20;
-      });
-
-      /**
-       * 鍔犺浇鏁版嵁
-       * @returns {Promise<void>}
-       */
-      async function loadData() {
-        const params = {
-          tableName: props.tableName,
-          tableDataId: props.dataId,
-          column: 'createTime',
-          order: 'desc',
-        };
-        const data = await list(params);
-        if (!data || !data.records || data.records.length == 0) {
-          dataList.value = [];
-        } else {
-          let array = data.records;
-          console.log(123, array);
-          dataList.value = array;
-        }
-      }
-
-      const { saveCommentAndFiles } = useCommentWithFile(props);
-      // 鍥炲
-      async function replyComment(item, content, fileList) {
-        console.log(content, item);
-        let obj = {
-          fromUserId: userInfo.id,
-          toUserId: item.fromUserId,
-          commentId: item.id,
-          commentContent: content
-        }
-        await saveCommentAndFiles(obj, fileList)
-        await loadData();
-      }
-      
-      //璇勮
-      async function sendComment(content, fileList) {
-        let obj = {
-          fromUserId: userInfo.id,
-          commentContent: content
-        }
-        await saveCommentAndFiles(obj, fileList)
-        await loadData();
-        focusStatus.value = false;
-        setTimeout(()=>{
-          focusStatus.value = true;
-        },100)
-      }
-
-      //鍒犻櫎
-      async function deleteComment(item) {
-        const params = { id: item.id };
-        await deleteOne(params);
-        await loadData();
-      }
-
-      /**
-       * 鎵撳紑鍥炲鏃惰Е鍙�
-       * @type {Ref<UnwrapRef<boolean>>}
-       */
-      const focusStatus = ref(false);
-      function showReply(item) {
-        let arr = dataList.value;
-        for (let temp of arr) {
-          temp.commentStatus = false;
-        }
-        item.commentStatus = true;
-        focusStatus.value = false;
-        focusStatus.value = true;
-      }
-
-      // 琛ㄥ崟鏀瑰彉 -閲嶆柊鍔犺浇璇勮鍒楄〃
-      watchEffect(() => {
-        if(props.datetime){
-          if (props.tableName && props.dataId) {
-            loadData();
-          }
-        }
-      });
-
-      const storageEmojiIndex = inject('$globalEmojiIndex')
-      const { getHtml } = useEmojiHtml(storageEmojiIndex);
-      const bottomCommentRef = ref()
-      function handleClickItem(){
-        bottomCommentRef.value.changeActive()
-      }
-
-
-      /**
-       * 鏍规嵁id鏌ヨ璇勮淇℃伅
-       */
-      async function visibleChange(v, item){
-        if(v==true){
-          if(!item.commentId_dictText){
-            const data = await queryById(item.commentId);
-            if(data.success == true){
-              item.commentId_dictText = data.result.commentContent
-            }else{
-              console.error(data.message)
-              item.commentId_dictText='璇ヨ瘎璁哄凡琚垹闄�';
-            }
-          }
-        }
-      }
-
-      return {
-        dataList,
-        getAvatar,
-        getAvatarText,
-        getAuthor,
-        getDateDiff,
-        commentHeight,
-        allHeight,
-        replyComment,
-        sendComment,
-        getMyname,
-        getMyAvatar,
-
-        focusStatus,
-        showReply,
-        deleteComment,
-        getHtml,
-        handleClickItem,
-        bottomCommentRef,
-        visibleChange
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .jeecg-comment-list {
-    overflow: auto;
-    /* border-bottom: 1px solid #eee;*/
-    .inner-comment {
-      width: 100%;
-      padding: 0 10px;
-    }
-    .ant-comment {
-      width: 100%;
-    }
-  }
-  .comment-author {
-    span {
-      margin: 3px;
-    }
-    .comment-last-content {
-      margin-left: 5px;
-      &:hover{
-        color: #1890ff;
-      }
-    }
-  }
-  .ant-list-items{
-    .ant-list-item:last-child{
-      margin-bottom: 46px;
-    }
-  }
-  .tx{
-    margin-top: 4px;
-  }
-</style>
diff --git a/src/components/jeecg/comment/CommentPanel.vue b/src/components/jeecg/comment/CommentPanel.vue
deleted file mode 100644
index 916230b..0000000
--- a/src/components/jeecg/comment/CommentPanel.vue
+++ /dev/null
@@ -1,99 +0,0 @@
-<template>
-  <div class="comment-tabs-warp" v-if="showStatus">
-    <a-tabs @change="handleChange" :animated="false">
-      <a-tab-pane v-if="showComment" tab="璇勮" key="comment" class="comment-list-tab">
-        <comment-list :tableName="tableName" :dataId="dataId" :datetime="datetime1"></comment-list>
-      </a-tab-pane>
-      <a-tab-pane v-if="showFiles" tab="鏂囦欢" key="file">
-        <comment-files :tableName="tableName" :dataId="dataId" :datetime="datetime2"></comment-files>
-      </a-tab-pane>
-      <a-tab-pane v-if="showDataLog" tab="鏃ュ織" key="log">
-        <data-log-list :tableName="tableName" :dataId="dataId" :datetime="datetime3"></data-log-list>
-      </a-tab-pane>
-    </a-tabs>
-  </div>
-  <a-empty v-else description="鏂板椤甸潰涓嶆敮鎸佽瘎璁�" />
-</template>
-
-<script>
-  /**
-   * 璇勮鍖哄煙
-   */
-  import { propTypes } from '/@/utils/propTypes';
-  import { computed, ref } from 'vue';
-  import CommentList from './CommentList.vue';
-  import CommentFiles from './CommentFiles.vue';
-  import DataLogList from './DataLogList.vue';
-
-  export default {
-    name: 'CommentPanel',
-    components: {
-      CommentList,
-      CommentFiles,
-      DataLogList,
-    },
-    props: {
-      tableName: propTypes.string.def(''),
-      dataId: propTypes.string.def(''),
-      // 鏄剧ず璇勮
-      showComment: propTypes.bool.def(true),
-      // 鏄剧ず鏂囦欢
-      showFiles: propTypes.bool.def(true),
-      // 鏄剧ず鏃ュ織
-      showDataLog: propTypes.bool.def(true),
-    },
-    setup(props) {
-      const showStatus = computed(() => {
-        if (props.dataId && props.tableName) {
-          return true;
-        }
-        return false;
-      });
-
-      const datetime1 = ref(1);
-      const datetime2 = ref(1);
-      const datetime3 = ref(1);
-      function handleChange(e) {
-        let temp = new Date().getTime();
-        if (e == 'comment') {
-          datetime1.value = temp;
-        } else if (e == 'file') {
-          datetime2.value = temp;
-        } else {
-          datetime3.value = temp;
-        }
-      }
-
-      // VUEN-1978銆恇ug銆憃nline鍏宠仈璁板綍鍜屼粬琛ㄥ瓧娈靛瓨鍦ㄩ棶棰�  20 淇敼瀹屾暟鎹紝鍐嶆鎵撳紑涓嶅垏鎹ab鐨勬椂鍊欙紝淇敼鏃ュ織娌℃湁鍙樺寲
-      function reload() {
-        let temp = new Date().getTime();
-        datetime1.value = temp;
-        datetime2.value = temp;
-        datetime3.value = temp;
-      }
-
-      return {
-        showStatus,
-        handleChange,
-        datetime1,
-        datetime2,
-        datetime3,
-        reload
-      };
-    },
-  };
-</script>
-
-<style lang="less" scoped>
-  .comment-tabs-warp {
-    height: 100%;
-    overflow: visible;
-    > .ant-tabs {
-      overflow: visible;
-    }
-  }
-  //antd3鍗囩骇鍚庯紝琛ㄥ崟鍙充晶璁ㄨ鏍峰紡璋冩暣
-  :deep(.ant-tabs-top  .ant-tabs-nav, .ant-tabs-bottom  .ant-tabs-nav, .ant-tabs-top  div  .ant-tabs-nav, .ant-tabs-bottom  div  .ant-tabs-nav) {
-    margin: 0 16px 0;
-  }
-</style>
diff --git a/src/components/jeecg/comment/DataLogList.vue b/src/components/jeecg/comment/DataLogList.vue
deleted file mode 100644
index 7cee493..0000000
--- a/src/components/jeecg/comment/DataLogList.vue
+++ /dev/null
@@ -1,177 +0,0 @@
-<template>
-    <div class="data-log-scroll" :style="{'height': height+'px'}">
-        <div class="data-log-content">
-            <div class="logbox">
-                
-                <div class="log-item" v-for="(item, index) in dataList">
-                    <span class="log-item-icon">
-                        <plus-outlined v-if="lastIndex == index" style="margin-top:3px"/>
-                        <edit-outlined v-else/>
-                    </span>
-                    <span class="log-item-content">
-                        <a @click="handleClickPerson">@{{item.createBy}}</a>
-                        {{ item.dataContent }}
-                    </span>
-                    <div class="log-item-date">
-                        <Tooltip :title="item.createTime">
-                            <span>{{ getDateDiff(item) }}</span>
-                        </Tooltip>
-                    </div>
-                </div>
-
-                
-            </div>
-        </div>
-    </div>
-</template>
-
-<script>
-  import { PlusOutlined, EditOutlined } from '@ant-design/icons-vue';
-  import { getModalHeight, getLogList } from './useComment'
-  import {inject, ref, watchEffect} from 'vue'
-  import { propTypes } from '/@/utils/propTypes';
-  import { Tooltip } from 'ant-design-vue';
-  // import dayjs from 'dayjs';
-  // import relativeTime from 'dayjs/plugin/relativeTime';
-  // import customParseFormat from 'dayjs/plugin/customParseFormat';
-  // dayjs.locale('zh');
-  // dayjs.extend(relativeTime);
-  // dayjs.extend(customParseFormat);
-  
-  export default {
-    name: "DataLogList",
-    components:{
-      PlusOutlined,
-      EditOutlined,
-      Tooltip
-    },
-    props: {
-      tableName: propTypes.string.def(''),
-      dataId: propTypes.string.def(''),
-      datetime:  propTypes.number.def(1),
-    },
-    setup(props){
-      const dayjs = inject('$dayjs')
-      const winHeight = getModalHeight();
-      const height = ref(300);
-      height.value = winHeight - 46 - 57 -53 - 30;
-
-      const dataList = ref([]);
-      const lastIndex = ref(0);
-      /**
-       * 鍔犺浇鏁版嵁
-       * @returns {Promise<void>}
-       */
-      async function loadData() {
-        const params = {
-          dataTable: props.tableName,
-          dataId: props.dataId,
-          type: 'comment'
-        };
-        const res = await getLogList(params);
-        if (!res || !res.result || res.result.length == 0) {
-          dataList.value = [];
-          lastIndex.value = -1;
-        } else {
-          let arr = res.result;
-          lastIndex.value = arr.length-1;
-          console.log('log-list', arr);
-          dataList.value = arr;
-        }
-      }
-      
-      watchEffect(() => {
-        if(props.datetime){
-          if (props.tableName && props.dataId) {
-            console.log(props.tableName, props.dataId)
-            loadData();
-          }
-        }
-      });
-      
-      
-
-      function getDateDiff(item) {
-        if (item.createTime) {
-          const temp = dayjs(item.createTime, 'YYYY-MM-DD hh:mm:ss');
-          return temp.fromNow();
-        }
-        return '';
-      }
-      
-      function handleClickPerson() {
-        console.log('姝ゅ姛鑳芥湭寮�鏀�')
-      }
-      
-      return {
-        height,
-        lastIndex,
-        dataList,
-        getDateDiff,
-        handleClickPerson
-      }
-    }
-  }
-</script>
-
-<style lang="less" scoped>
-.data-log-scroll{
-    box-sizing: border-box;
-    height: 100%;
-    padding-bottom: 16px;
-    width: 100%;
-    overflow: hidden;
-    position: relative;
-    overflow-y: auto;
-    .data-log-content{
- /*       right: -10px;
-        bottom: 0;
-        left: 0;
-        overflow: scroll;
-        overflow-x: hidden;
-        position: absolute;
-        top: 0;*/
-        -webkit-box-sizing: border-box;
-        box-sizing: border-box;
-        .logbox{
-            box-sizing: border-box;
-            padding-left: 16px;
-            .log-item{
-                box-sizing: border-box;
-                color: #9e9e9e;
-                margin-bottom: 20px;
-                padding-left: 20px;
-                padding-right: 25px;
-                position: relative;
-                .log-item-icon{
-                    left: 0;
-                    line-height: 16px;
-                    position: absolute;
-                    top: 3px;
-                    vertical-align: middle;
-                }
-                .log-item-content{
-                    word-wrap: break-word;
-                    display: inline-block;
-                    font-size: 13px;
-                    vertical-align: middle;
-                    width: 100%;
-                    word-break: break-word;
-                    box-sizing: border-box;
-                }
-                .log-item-date{
-                    word-wrap: break-word;
-                    display: inline-block;
-                    font-size: 13px;
-                    vertical-align: middle;
-                    width: 100%;
-                    word-break: break-word;
-                    box-sizing: border-box;
-                    margin-top: 5px;
-                }
-            }
-        }
-    }
-
-}
-</style>
diff --git a/src/components/jeecg/comment/HistoryFileList.vue b/src/components/jeecg/comment/HistoryFileList.vue
deleted file mode 100644
index ba039ee..0000000
--- a/src/components/jeecg/comment/HistoryFileList.vue
+++ /dev/null
@@ -1,88 +0,0 @@
-<template>
-  <div class="comment-file-his-list" :class="isComment === true ? 'in-comment' : ''">
-    <div class="selected-file-list">
-      <div class="item" v-for="item in dataList">
-        <div class="complex">
-          <div class="content">
-            <!-- 鍥剧墖 -->
-            <div v-if="isImage(item)" class="content-top" style="height: 100%">
-              <div class="content-image" :style="getImageAsBackground(item)">
-                <!--<img style="height: 100%;" :src="getImageSrc(item)"/>-->
-              </div>
-            </div>
-            <!-- 鏂囦欢 -->
-            <template v-else>
-              <div class="content-top">
-                <div class="content-icon" :style="{ background: 'url(' + getBackground(item) + ')  no-repeat' }"></div>
-              </div>
-              <div class="content-bottom" :title="item.name">
-                <span>{{ item.name }}</span>
-              </div>
-            </template>
-          </div>
-          <div class="layer" :class="{'layer-image':isImage(item)}">
-            <div class="next" @click="viewImage(item)">
-              <div class="text">
-                {{ item.name }}
-              </div>
-              <div class="text">
-                {{ getFileSize(item) }}
-              </div>
-            </div>
-            <div class="buttons">
-              <div class="opt-icon">
-                <Tooltip title="涓嬭浇">
-                  <download-outlined @click="downLoad(item)" />
-                </Tooltip>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div class="item empty"></div><div class="item empty"></div><div class="item empty"></div> <div class="item empty"></div><div class="item empty"></div><div class="item empty"></div>
-    </div>
-  </div>
-</template>
-
-<script>
-  import { Tooltip } from 'ant-design-vue';
-  import { UploadOutlined, FolderOutlined, DownloadOutlined, PaperClipOutlined, DeleteOutlined } from '@ant-design/icons-vue';
-  import { useFileList } from './useComment';
-
-  export default {
-    name: 'HistoryFileList',
-    props: {
-      dataList: {
-        type: Array,
-        default: () => [],
-      },
-      isComment: {
-        type: Boolean,
-        default: false,
-      },
-    },
-    components: {
-      UploadOutlined,
-      FolderOutlined,
-      DownloadOutlined,
-      PaperClipOutlined,
-      DeleteOutlined,
-      Tooltip,
-    },
-    setup() {
-      const { getBackground, getFileSize, downLoad, isImage, getImageAsBackground, viewImage } = useFileList();
-      return {
-        getBackground,
-        downLoad,
-        getFileSize,
-        isImage,
-        getImageAsBackground,
-        viewImage
-      };
-    },
-  };
-</script>
-
-<style lang="less" scoped>
-  @import 'comment.less';
-</style>
diff --git a/src/components/jeecg/comment/MyComment.vue b/src/components/jeecg/comment/MyComment.vue
deleted file mode 100644
index 874e1f4..0000000
--- a/src/components/jeecg/comment/MyComment.vue
+++ /dev/null
@@ -1,382 +0,0 @@
-<template>
-  <div :class="{'comment-active': commentActive}" style="border: 1px solid #eee; margin: 0; position: relative" @click="handleClickBlank">
-    <textarea ref="commentRef" v-model="myComment" @input="handleCommentChange" @blur="handleBlur" class="comment-content" :rows="3" placeholder="璇疯緭鍏ヤ綘鐨勮瘎璁猴紝鍙互@鎴愬憳" />
-    <div class="comment-content comment-html-shower" :class="{'no-content':noConent, 'top-div': showHtml, 'bottom-div': showHtml == false }" v-html="commentHtml" @click="handleClickHtmlShower"></div>
-    <div class="comment-buttons" v-if="commentActive">
-      <div style="cursor: pointer">
-        <Tooltip title="閫夋嫨@鐢ㄦ埛">
-          <user-add-outlined @click="openSelectUser" />
-        </Tooltip>
-
-        <Tooltip title="涓婁紶闄勪欢">
-          <PaperClipOutlined @click="uploadVisible = !uploadVisible" />
-        </Tooltip>
-
-        <span title="琛ㄦ儏" style="display: inline-block">
-          <SmileOutlined ref="emojiButton" @click="handleShowEmoji" />
-          <div style="position: relative" v-show=""> </div>
-        </span>
-      </div>
-      <div v-if="commentActive">
-        <a-button v-if="inner" @click="noComment" style="margin-right: 10px">鍙栨秷</a-button>
-        <a-button type="primary" @click="sendComment" :loading="buttonLoading" :disabled="disabledButton">鍙� 閫�</a-button>
-      </div>
-    </div>
-    <upload-chunk ref="uploadRef" :visible="uploadVisible" @select="selectFirstFile"></upload-chunk>
-  </div>
-  <UserSelectModal labelKey="realname" rowKey="username" @register="registerModal" @getSelectResult="setValue" isRadioSelection></UserSelectModal>
-  <a-modal v-model:visible="visibleEmoji" :footer="null" wrapClassName="emoji-modal" :closable="false" :width="490">
-    <template #title>
-      <span></span>
-    </template>
-    <Picker
-      :pickerStyles="pickerStyles" 
-      :i18n="optionsName" 
-      :data="emojiIndex"
-      emoji="grinning"
-      :showPreview="false" 
-      :infiniteScroll="false" 
-      :showSearch="false" 
-      :showSkinTones="false" 
-      set="apple" 
-      @select="showEmoji">
-    </Picker>
-  </a-modal>
-</template>
-
-<script lang="ts">
-  import {ref, watch, computed, inject} from 'vue';
-  import { propTypes } from '/@/utils/propTypes';
-  import { UserAddOutlined, PaperClipOutlined, SmileOutlined } from '@ant-design/icons-vue';
-  import { Tooltip } from 'ant-design-vue';
-  import UserSelectModal from '/@/components/Form/src/jeecg/components/modal/UserSelectModal.vue';
-  import { useModal } from '/@/components/Modal';
-  import UploadChunk from './UploadChunk.vue';
-  import 'emoji-mart-vue-fast/css/emoji-mart.css';
-  import { useEmojiHtml } from './useComment';
-
-  const optionsName = {
-    categories: {
-      recent: '鏈�甯哥敤鐨�',
-      smileys: '琛ㄦ儏閫夋嫨',
-      people: '浜虹墿&韬綋',
-      nature: '鍔ㄧ墿&鑷劧',
-      foods: '椋熺墿&楗枡',
-      activity: '娲诲姩',
-      places: '鏃呰&鍦扮偣',
-      objects: '鐗╁搧',
-      symbols: '绗﹀彿',
-      flags: '鏃楀笢',
-    },
-  };
-  export default {
-    name: 'MyComment',
-    components: {
-      UserAddOutlined,
-      Tooltip,
-      UserSelectModal,
-      PaperClipOutlined,
-      UploadChunk,
-      SmileOutlined,
-    },
-    props: {
-      inner: propTypes.bool.def(false),
-      inputFocus: {
-        type: Boolean,
-        default: false,
-      },
-    },
-    emits: ['cancel', 'comment'],
-    setup(props, { emit }) {
-      const uploadVisible = ref(false);
-      const uploadRef = ref();
-      //娉ㄥ唽model
-      const [registerModal, { openModal }] = useModal();
-      const buttonLoading = ref(false);
-      const myComment = ref<string>('');
-      function sendComment() {
-        console.log(myComment.value);
-        let content = myComment.value;
-        if (!content && content !== '0') {
-          disabledButton.value = true;
-        } else {
-          buttonLoading.value = true;
-          let fileList = [];
-          if (uploadVisible.value == true) {
-            fileList = uploadRef.value.getUploadFileList();
-          }
-          emit('comment', content, fileList);
-          setTimeout(() => {
-            buttonLoading.value = false;
-          }, 350);
-        }
-      }
-      const disabledButton = ref(false);
-      watch(myComment, () => {
-        let content = myComment.value;
-        if (!content && content !== '0') {
-          disabledButton.value = true;
-        } else {
-          disabledButton.value = false;
-        }
-      });
-
-      function noComment() {
-        emit('cancel');
-      }
-
-      const commentRef = ref();
-      watch(
-        () => props.inputFocus,
-        (val) => {
-          if (val == true) {
-            // commentRef.value.focus()
-            myComment.value = '';
-            if (uploadVisible.value == true) {
-              uploadRef.value.clear();
-              uploadVisible.value = false;
-            }
-          }
-        },
-        { deep: true, immediate: true }
-      );
-
-      function openSelectUser() {
-        openModal(true, {
-          isUpdate: false,
-        });
-      }
-      function setValue(options) {
-        console.log('setValue', options);
-        if (options && options.length > 0) {
-          const { label, value } = options[0];
-          if (label && value) {
-            let str = `${label}[${value}]`;
-            let temp = myComment.value;
-            if (!temp) {
-              myComment.value = '@' + str;
-            } else {
-              if (temp.endsWith('@')) {
-                myComment.value = temp + str;
-              } else {
-                myComment.value = '@' + str + ' ' + temp;
-              }
-            }
-          }
-        }
-      }
-
-      function handleCommentChange() {
-        //console.log(1,e)
-      }
-      watch(
-        () => myComment.value,
-        (val) => {
-          if (val && val.endsWith('@')) {
-            openSelectUser();
-          }
-        }
-      );
-
-      const emojiButton = ref();
-      function onSelectEmoji(emoji) {
-        let temp = myComment.value || '';
-        temp += emoji;
-        myComment.value = temp;
-        emojiButton.value.click();
-      }
-      
-      const visibleEmoji = ref(false);
-      function showEmoji(e) {
-        let temp = myComment.value || '';
-        let str = e.colons;
-        if (str.indexOf('::') > 0) {
-          str = str.substring(0, str.indexOf(':') + 1);
-        }
-        myComment.value = temp + str;
-        visibleEmoji.value = false;
-        handleBlur();
-      }
-
-      const pickerStyles = {
-        width: '490px'
-        /* height: '350px',
-        top: '0px',
-        left: '-75px',
-        position: 'absolute',
-        'z-index': 9999*/
-      };
-      function handleClickBlank(e) {
-        console.log('handleClickBlank');
-        e.preventDefault();
-        e.stopPropagation();
-        visibleEmoji.value = false;
-        commentActive.value = true;
-      }
-      function handleShowEmoji(e) {
-        console.log('handleShowEmoji');
-        e.preventDefault();
-        e.stopPropagation();
-        visibleEmoji.value = !visibleEmoji.value;
-      }
-      
-      const emojiIndex = inject('$globalEmojiIndex')
-      const { getHtml } = useEmojiHtml(emojiIndex);
-
-      const commentHtml = computed(() => {
-        let temp = myComment.value;
-        if (!temp) {
-          return '璇疯緭鍏ヤ綘鐨勮瘎璁猴紝鍙互@鎴愬憳';
-        }
-        return getHtml(temp);
-      });
-
-      const showHtml = ref(false);
-      function handleClickHtmlShower(e) {
-        e.preventDefault();
-        e.stopPropagation();
-        showHtml.value = false;
-        commentRef.value.focus();
-        console.log(234);
-        commentActive.value = true;
-      }
-      function handleBlur() {
-        showHtml.value = true;
-      }
-      
-      const commentActive = ref(false);
-      const noConent = computed(()=>{
-        if(myComment.value.length>0){
-          return false;
-        }
-        return true;
-      });
-      function changeActive(){
-        if(myComment.value.length==0){
-          commentActive.value = false
-          uploadVisible.value = false;
-        }
-      }
-      
-      function selectFirstFile(fileName){
-        if(myComment.value.length==0){
-          myComment.value = fileName;
-        }
-      }
-      
-      return {
-        myComment,
-        sendComment,
-        noComment,
-        disabledButton,
-        buttonLoading,
-        commentRef,
-        registerModal,
-        openSelectUser,
-        setValue,
-        handleCommentChange,
-        uploadRef,
-        uploadVisible,
-        onSelectEmoji,
-        optionsName,
-        emojiButton,
-        emojiIndex,
-        showEmoji,
-        pickerStyles,
-        visibleEmoji,
-        handleClickBlank,
-        handleShowEmoji,
-        commentHtml,
-        showHtml,
-        handleClickHtmlShower,
-        handleBlur,
-        commentActive,
-        noConent,
-        changeActive,
-        selectFirstFile
-      };
-    },
-  };
-</script>
-
-<style lang="less">
-  .comment-content {
-    box-sizing: border-box;
-    margin: 0;
-    padding: 0;
-    font-variant: tabular-nums;
-    list-style: none;
-    font-feature-settings: tnum;
-    position: relative;
-    display: inline-block;
-    width: 100%;
-    padding: 4px 11px;
-    color: rgba(0, 0, 0, 0.85);
-    font-size: 15px;
-    line-height: 1.5715;
-    background-color: #fff;
-    background-image: none;
-    border: 1px solid #d9d9d9;
-    border-radius: 2px;
-    transition: all 0.3s;
-    width: 100%;
-    border: solid 0px;
-    outline: none;
-
-    .emoji-item {
-      display: inline-block !important;
-      width: 0 !important;
-    }
-  }
-  .comment-buttons {
-    padding: 10px;
-    display: flex;
-    justify-content: space-between;
-    border-top: 1px solid #d9d9d9;
-    .anticon {
-      margin: 5px;
-    }
-  }
-  .comment-html-shower {
-    position: absolute;
-    top: 0;
-    left: 0;
-    height: 70px;
-    &.bottom-div {
-      z-index: -99;
-    }
-    &.top-div {
-      z-index: 9;
-    }
-  }
-
-  .emoji-modal  {
-   > .ant-modal{
-      right: 25% !important;
-      margin-right: 16px !important;
-    }
-    .ant-modal-header{
-      padding: 0 !important;
-    }
-    .emoji-mart-bar{
-      display: none;
-    }
-    h3.emoji-mart-category-label{
-    /*  display: none;*/
-      border-bottom: 1px solid #eee;
-    }
-  }
-  
-  .comment-active{
-    border-color: #1e88e5 !important;
-    box-shadow: 0 1px 1px 0 #90caf9, 0 1px 6px 0 #90caf9;
-  }
-  .no-content{
-    color: #a1a1a1
-  }
-  
-  /**鑱婂ぉ琛ㄦ儏鏈湴鍖�*/
-  .emoji-type-image.emoji-set-apple {
-    background-image: url("./image/emoji.png");
-  }
-</style>
diff --git a/src/components/jeecg/comment/UploadChunk.vue b/src/components/jeecg/comment/UploadChunk.vue
deleted file mode 100644
index 6d13bde..0000000
--- a/src/components/jeecg/comment/UploadChunk.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <div v-if="visible">
-    <a-alert type="info" class="jeecg-comment-files" style="margin: 0">
-      <template #message>
-        <span class="j-icon">
-          <a-upload multiple v-model:file-list="selectFileList" :showUploadList="false" :before-upload="beforeUpload">
-            <span class="inner-button"><upload-outlined />涓婁紶</span>
-          </a-upload>
-        </span>
-        <span class="j-icon">
-          <span class="inner-button"><folder-outlined />浠庢枃浠跺簱閫夋嫨?</span>
-        </span>
-      </template>
-    </a-alert>
-
-    <!-- 姝e湪涓婁紶鐨勬枃浠� -->
-    <div class="selected-file-warp" v-if="selectFileList && selectFileList.length > 0">
-      <div class="selected-file-list">
-        <div class="item" v-for="item in selectFileList">
-          <div class="complex">
-            <div class="content">
-              <!-- 鍥剧墖 -->
-              <div v-if="isImage(item)" class="content-top" style="height: 100%">
-                <div class="content-image" :style="{'height':'100%', 'backgroundImage': 'url('+getImageSrc(item)+')'}">
-                  <!--  <img style="height: 100%;" :src="getImageSrc(item)">-->
-                </div>
-              </div>
-              <!-- 鏂囦欢 -->
-              <template v-else>
-                <div class="content-top">
-                  <div class="content-icon" :style="{ background: 'url(' + getBackground(item) + ')  no-repeat' }"></div>
-                </div>
-                <div class="content-bottom" :title="item.name">
-                  <span>{{ item.name }}</span>
-                </div>
-              </template>
-            </div>
-            <div class="layer" :class="{'layer-image':isImage(item)}">
-              <div class="next" @click="viewImage(item)">
-                <div class="text">{{ item.name }} </div>
-              </div>
-              <div class="buttons">
-                <div class="opt-icon">
-                  <Tooltip title="鍒犻櫎">
-                    <delete-outlined @click="handleRemove(item)" />
-                  </Tooltip>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
-        <div class="item empty"></div><div class="item empty"></div><div class="item empty"></div> <div class="item empty"></div><div class="item empty"></div><div class="item empty"></div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script lang="ts">
-  import { toRaw, watch } from 'vue';
-  import { useFileList } from './useComment';
-  import { Tooltip } from 'ant-design-vue';
-  import { UploadOutlined, FolderOutlined, DownloadOutlined, PaperClipOutlined, DeleteOutlined } from '@ant-design/icons-vue';
-  export default {
-    name: 'UploadChunk',
-    components: {
-      Tooltip,
-      UploadOutlined,
-      FolderOutlined,
-      DownloadOutlined,
-      PaperClipOutlined,
-      DeleteOutlined,
-    },
-    props: {
-      visible: {
-        type: Boolean,
-        default: false,
-      },
-    },
-    emits:['select'],
-    setup(_p, {emit}) {
-      const { selectFileList, beforeUpload, handleRemove, getBackground, isImage, getImageSrc, viewImage } = useFileList();
-
-      function getUploadFileList() {
-        let list = toRaw(selectFileList.value);
-        console.log(list);
-        return list;
-      }
-      
-      function clear(){
-        selectFileList.value = [];
-      }
-      
-      watch(()=>selectFileList.value, (arr)=>{
-        if(arr && arr.length>0){
-          let name = arr[0].name;
-          if(name){
-            emit('select', name)
-          }
-        }
-      });
-
-      return {
-        selectFileList,
-        beforeUpload,
-        handleRemove,
-        getBackground,
-        getUploadFileList,
-        clear,
-        isImage, 
-        getImageSrc, 
-        viewImage
-      };
-    },
-  };
-</script>
-
-<style lang="less" scoped>
-  @import 'comment.less';
-</style>
diff --git a/src/components/jeecg/comment/comment.less b/src/components/jeecg/comment/comment.less
deleted file mode 100644
index 824390c..0000000
--- a/src/components/jeecg/comment/comment.less
+++ /dev/null
@@ -1,234 +0,0 @@
-/*鏂囦欢涓婁紶鍒楄〃-begin*/
-.selected-file-warp,
-.comment-file-his-list {
-  margin: 10px 20px;
-  &.in-comment{
-    margin: 10px 6px;
-  }
-}
-.selected-file-list {
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: space-between;
-  margin-right: -6px;
-  .item {
-    box-sizing: border-box;
-    display: inline-block;
-    flex: 1 1 0%;
-    height: 118px;
-    margin: 0 6px 6px 0;
-    min-width: 140px;
-    max-width: 200px;
-    width: 150px;
-    &.empty {
-      height: 0;
-      margin-bottom: 0;
-      margin-top: 0;
-    }
-    .complex {
-      border: 1px solid #e0e0e0;
-      box-sizing: border-box;
-      height: 100%;
-      position: relative;
-      .content {
-        display: flex;
-        flex-direction: column;
-        height: 100%;
-        box-sizing: border-box;
-        .content-top {
-          align-items: center;
-          background-color: #f5f5f5;
-          display: flex;
-          flex: 1 1 0%;
-          justify-content: center;
-          .content-icon {
-            background-position: 50%;
-            background-size: contain !important;
-            height: 55px;
-            width: 40px;
-            display: inline-block;
-            overflow: hidden;
-            text-align: left;
-            text-indent: -9999px;
-          }
-          .content-image{
-            background-position: 50%;
-            background-repeat: no-repeat;
-            background-size: cover;
-            height: 100%;
-            width: 100%;
-          }
-        }
-        .content-bottom {
-          align-items: center;
-          background-color: #fff;
-          display: flex;
-          flex-basis: 30px;
-          font-size: 13px;
-          justify-content: flex-start;
-          padding: 0 10px;
-          span {
-            overflow: hidden;
-            text-overflow: ellipsis;
-            white-space: nowrap;
-          }
-        }
-      }
-      .layer {
-        opacity: 0;
-        background-color: #f5f5f5;
-        cursor: pointer;
-        display: flex;
-        flex-direction: column;
-        height: 100%;
-        left: 0;
-        position: absolute;
-        top: 0;
-        transition: opacity 0.2s;
-        width: 100%;
-        &:hover {
-          opacity: 1;
-        }
-        .next {
-          height: 75px;
-          padding: 5px;
-          .text {
-            color: #1e88e5 !important;
-            align-items: center;
-            display: flex;
-            flex-basis: 30px;
-            font-size: 12px;
-            justify-content: flex-start;
-            padding: 3px 7px 4px;
-            word-break: break-all;
-            display: -webkit-box;
-            line-height: 14px;
-            overflow: hidden;
-            text-overflow: ellipsis;
-          }
-        }
-        .buttons {
-          flex-basis: 32px;
-          text-align: right;
-          display: flex;
-          align-items: flex-end;
-          padding-right: 5px;
-          justify-content: flex-end;
-          .opt-icon {
-            background-color: #fff;
-            border-radius: 2px;
-            cursor: pointer;
-            height: 24px;
-            width: 32px;
-            margin: 5px;
-            text-align: center;
-            .anticon-delete:hover {
-              color: red;
-            }
-            .anticon-download:hover{
-              color: #1e88e5 !important
-            }
-          }
-        }
-      }
-      .layer-image{
-        background: #000;
-        &:hover {
-          opacity: 0.6;
-        }
-        .next{
-          .text{
-            color: #fff !important;
-          }
-        }
-        .opt-icon{
-          color: #000 !important;
-          .anticon-delete:hover {
-            color: red;
-          }
-        }
-      }
-      
-    }
-  }
-}
-
-.jeecg-comment-files {
-  margin: 0 20px;
-  padding-top: 3px;
-  padding-bottom: 3px;
-  &.ant-alert-info{
-    background-color: #f5f5f5;
-    border: 1px solid #f5f5f5;
-  }
-  .j-icon {
-    cursor: pointer;
-    display: inline-block;
-    border: 1px solid #e6f7ff;
-    padding: 2px 7px;
-    margin: 0 10px;
-    &:hover,
-    &:focus,
-    &:active {
-      border-color: #fff;
-      color: #096dd9;
-    }
-    .inner-button {
-      display: inline-block;
-      color:#9e9e9e;
-      &:hover,
-      &:focus,
-      &:active {
-        /*border-color: #fff;*/
-       /* color: #096dd9;*/
-        color: #000;
-      }
-      span{
-        margin-right: 3px;
-      }
-    }
-  }
-}
-
-.comment-file-list {
-  .detail-item {
-    display: flex;
-    flex-direction: row;
-    align-items: stretch;
-    line-height: 24px;
-    border-bottom: 1px solid #f0f0f0;
-    height: 100%;
-
-    .item-title {
-      display: flex;
-      align-items: center;
-      justify-content: flex-end;
-      flex-shrink: 0;
-      flex-grow: 0;
-      min-width: 100px;
-      width: 20%;
-      max-width: 220px;
-      background-color: #fafafa;
-      border-right: 1px solid #f0f0f0;
-      /* border-left: 1px solid #f0f0f0;*/
-      padding: 10px 0;
-      white-space: nowrap;
-      text-overflow: ellipsis;
-      overflow: hidden;
-    }
-
-    .item-content {
-      border-right: 1px solid #f0f0f0;
-      flex-grow: 1;
-      padding-left: 10px;
-      display: flex;
-      align-items: center;
-      justify-content: flex-start;
-      .anticon {
-        &:hover {
-          color: #40a9ff;
-        }
-      }
-    }
-  }
-}
diff --git a/src/components/jeecg/comment/image/emoji.png b/src/components/jeecg/comment/image/emoji.png
deleted file mode 100644
index eaef1f3..0000000
--- a/src/components/jeecg/comment/image/emoji.png
+++ /dev/null
Binary files differ
diff --git a/src/components/jeecg/comment/image/emoji_native.png b/src/components/jeecg/comment/image/emoji_native.png
deleted file mode 100644
index 9efea64..0000000
--- a/src/components/jeecg/comment/image/emoji_native.png
+++ /dev/null
Binary files differ
diff --git a/src/components/jeecg/comment/useComment.ts b/src/components/jeecg/comment/useComment.ts
deleted file mode 100644
index 058f818..0000000
--- a/src/components/jeecg/comment/useComment.ts
+++ /dev/null
@@ -1,407 +0,0 @@
-import { useMessage } from '/@/hooks/web/useMessage';
-import { defHttp } from '/@/utils/http/axios';
-import { useGlobSetting } from '/@/hooks/setting';
-const globSetting = useGlobSetting();
-const baseUploadUrl = globSetting.uploadUrl;
-import { ref, toRaw, unref, reactive } from 'vue';
-import { uploadMyFile } from '/@/api/common/api';
-
-import excel from '/@/assets/svg/fileType/excel.svg';
-import other from '/@/assets/svg/fileType/other.svg';
-import pdf from '/@/assets/svg/fileType/pdf.svg';
-import txt from '/@/assets/svg/fileType/txt.svg';
-import word from '/@/assets/svg/fileType/word.svg';
-import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-import { createImgPreview } from '/@/components/Preview';
-
-enum Api {
-  list = '/sys/comment/listByForm',
-  addText = '/sys/comment/addText',
-  deleteOne = '/sys/comment/deleteOne',
-  fileList = '/sys/comment/fileList',
-  logList = '/sys/dataLog/queryDataVerList',
-  queryById = '/sys/comment/queryById',
-  getFileViewDomain = '/sys/comment/getFileViewDomain',
-}
-
-// 鏂囦欢棰勮鍦板潃鐨刣omain 鍦ㄥ悗鍙伴厤缃殑
-let onlinePreviewDomain = '';
-
-/**
- * 鑾峰彇鏂囦欢棰勮鐨刣omain
- */
-const getViewFileDomain = () => defHttp.get({ url: Api.getFileViewDomain });
-
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-
-/**
- * 鏌ヨ鍗曟潯璁板綍
- * @param params
- */
-export const queryById = (id) => {
-  let params = { id: id };
-  return defHttp.get({ url: Api.queryById, params },{ isTransformResponse: false });
-};
-
-/**
- * 鏂囦欢鍒楄〃鎺ュ彛
- * @param params
- */
-export const fileList = (params) => defHttp.get({ url: Api.fileList, params });
-
-/**
- * 鍒犻櫎鍗曚釜
- */
-export const deleteOne = (params) => {
-  return defHttp.delete({ url: Api.deleteOne, params }, { joinParamsToUrl: true });
-};
-
-/**
- * 淇濆瓨
- * @param params
- */
-export const saveOne = (params) => {
-  let url = Api.addText;
-  return defHttp.post({ url: url, params }, { isTransformResponse: false });
-};
-
-/**
- * 鏁版嵁鏃ュ織鍒楄〃鎺ュ彛
- * @param params
- */
-export const getLogList = (params) => defHttp.get({ url: Api.logList, params }, {isTransformResponse: false});
-
-
-/**
- * 鏂囦欢涓婁紶鎺ュ彛
- */
-export const uploadFileUrl = `${baseUploadUrl}/sys/comment/addFile`;
-
-export function useCommentWithFile(props) {
-  let uploadData = {
-    biz: 'comment',
-    commentId: '',
-  };
-  const { createMessage } = useMessage();
-  const buttonLoading = ref(false);
-
-  //纭畾鎸夐挳瑙﹀彂
-  async function saveCommentAndFiles(obj, fileList) {
-    buttonLoading.value = true;
-    setTimeout(() => {
-      buttonLoading.value = false;
-    }, 500);
-    await saveComment(obj);
-    await uploadFiles(fileList);
-  }
-
-  /**
-   * 淇濆瓨璇勮
-   */
-  async function saveComment(obj) {
-    const {fromUserId, toUserId, commentId, commentContent} = obj;
-    let commentData = {
-      tableName: props.tableName,
-      tableDataId: props.dataId,
-      fromUserId,
-      commentContent,
-      toUserId: '',
-      commentId: ''
-    };
-    if(toUserId){
-      commentData.toUserId = toUserId;
-    }
-    if(commentId){
-      commentData.commentId = commentId;
-    }
-    uploadData.commentId = '';
-    const res = await saveOne(commentData);
-    if (res.success) {
-      uploadData.commentId = res.result;
-    } else {
-      createMessage.warning(res.message);
-      return Promise.reject('淇濆瓨璇勮澶辫触');
-    }
-  }
-
-  async function uploadOne(file) {
-    let url = uploadFileUrl;
-    const formData = new FormData();
-    formData.append('file', file);
-    formData.append('tableName', props.tableName);
-    formData.append('tableDataId', props.dataId);
-    Object.keys(uploadData).map((k) => {
-      formData.append(k, uploadData[k]);
-    });
-    return new Promise((resolve, reject) => {
-      uploadMyFile(url, formData).then((res: any) => {
-        console.log('uploadMyFile', res);
-        if (res && res.data) {
-          if (res.data.result == 'success') {
-            resolve(1);
-          } else {
-            createMessage.warning(res.data.message);
-            reject();
-          }
-        } else {
-          reject();
-        }
-      });
-    });
-  }
-
-  async function uploadFiles(fileList) {
-    if (fileList && fileList.length > 0) {
-      for (let i = 0; i < fileList.length; i++) {
-        let file = toRaw(fileList[i]);
-        await uploadOne(file.originFileObj);
-      }
-    }
-  }
-
-  return {
-    saveCommentAndFiles,
-    buttonLoading,
-  };
-}
-
-export function uploadMu(fileList) {
-  const formData = new FormData();
-  // let arr = []
-  for(let file of fileList){
-    formData.append('files[]', file.originFileObj);
-  }
-  console.log(formData)
-  let url = `${baseUploadUrl}/sys/comment/addFile2`;
-  uploadMyFile(url, formData).then((res: any) => {
-    console.log('uploadMyFile', res);
-  });
-}
-
-/**
- * 鏄剧ず鏂囦欢鍒楄〃
- */
-export function useFileList() {
-  const imageSrcMap = reactive({});
-  const typeMap = {
-    xls: excel,
-    xlsx: excel,
-    pdf: pdf,
-    txt: txt,
-    docx: word,
-    doc: word,
-  };
-   function getBackground(item) {
-    console.log('鑾峰彇鏂囦欢鑳屾櫙鍥�', item);
-    if (isImage(item)) {
-      return 'none'
-    } else {
-      const name = item.name;
-      if(!name){
-        return 'none';
-      }
-      const suffix = name.substring(name.lastIndexOf('.') + 1);
-      console.log('suffix', suffix)
-      let bg = typeMap[suffix];
-      if (!bg) {
-        bg = other;
-      }
-      return bg;
-    }
-  }
-
-  function getBase64(file, id){
-    return new Promise((resolve, reject) => {
-      //澹版槑js鐨勬枃浠舵祦
-      let reader = new FileReader();
-      if(file){
-        //閫氳繃鏂囦欢娴佸皢鏂囦欢杞崲鎴怋ase64瀛楃涓�
-        reader.readAsDataURL(file);
-        //杞崲鎴愬姛鍚�
-        reader.onload = function () {
-          let base = reader.result;
-          console.log('base', base)
-          imageSrcMap[id] = base;
-          console.log('imageSrcMap', imageSrcMap)
-          resolve(base)
-        }
-      }else{
-        reject();
-      }
-    })
-  }
-  function handleImageSrc(file){
-    if(isImage(file)){
-      let id = file.uid;
-      getBase64(file, id);
-    }
-  }
-
-  function downLoad(file) {
-    let url = getFileAccessHttpUrl(file.url);
-    if (url) {
-      window.open(url);
-    }
-  }
-
-  function getFileSize(item) {
-    let size = item.fileSize;
-    if (!size) {
-      return '0B';
-    }
-    let temp = Math.round(size / 1024);
-    return temp + ' KB';
-  }
-
-  const selectFileList = ref<any[]>([]);
-  function beforeUpload(file) {
-    handleImageSrc(file);
-    selectFileList.value = [...selectFileList.value, file];
-    console.log('selectFileList', unref(selectFileList));
-    return false
-  }
-
-  function handleRemove(file) {
-    const index = selectFileList.value.indexOf(file);
-    const newFileList = selectFileList.value.slice();
-    newFileList.splice(index, 1);
-    selectFileList.value = newFileList;
-  }
-
-  function isImage(item){
-    const type = item.type||'';
-    if (type.indexOf('image') >= 0) {
-      return true;
-    }
-    return false;
-  }
-
-  function getImageSrc(file){
-    if(isImage(file)){
-      let id = file.uid;
-      if(id){
-        if(imageSrcMap[id]){
-          return imageSrcMap[id];
-        }
-      }else if(file.url){
-        //鏁版嵁搴撲腑鍦板潃
-        let url = getFileAccessHttpUrl(file.url);
-        return url;
-      }
-    }
-    return ''
-  }
-
-  /**
-   * 鏄剧ず鍥剧墖
-   * @param item
-   */
-  function getImageAsBackground(item){
-    let url = getImageSrc(item);
-    if(url){
-      return {
-        "backgroundImage": "url('"+url+"')"
-      }
-    }
-    return {}
-  }
-
-  /**
-   * 棰勮鍒楄〃 cell 鍥剧墖
-   * @param text
-   */
-  async function viewImage(file) {
-    if(isImage(file)){
-      let text = getImageSrc(file)
-      if (text) {
-        let imgList = [text];
-        createImgPreview({ imageList: imgList });
-      }
-    }else{
-      if(file.url){
-        //鏁版嵁搴撲腑鍦板潃
-        let url = getFileAccessHttpUrl(file.url);
-        await initViewDomain();
-        //鏈湴娴嬭瘯闇�瑕佸皢鏂囦欢鍦板潃鐨刲ocalhost/127.0.0.1鏇挎崲鎴怚P, 鎴栨槸鐩存帴淇敼鍏ㄥ眬domain
-        //url = url.replace('localhost', '192.168.1.100')
-        //濡傛灉闆嗘垚鐨凨kFileview-v3.3.0+ 闇�瑕佸url鍐嶅仛涓�灞俠ase64缂栫爜 encodeURIComponent(encryptByBase64(url))
-        window.open(onlinePreviewDomain+'?officePreviewType=pdf&url='+encodeURIComponent(url));
-      }
-    }
-  }
-
-  /**
-   * 鍒濆鍖杁omain
-   */
-  async function initViewDomain(){
-    if(!onlinePreviewDomain){
-      onlinePreviewDomain = await getViewFileDomain();
-    }
-    if(!onlinePreviewDomain.startsWith('http')){
-      onlinePreviewDomain = 'http://'+ onlinePreviewDomain;
-    }
-  }
-
-  return {
-    selectFileList,
-    getBackground,
-    getFileSize,
-    downLoad,
-    beforeUpload,
-    handleRemove,
-    isImage,
-    getImageSrc,
-    getImageAsBackground,
-    viewImage
-  };
-}
-
-/**
- * 鐢ㄤ簬emoji娓叉煋
- */
-export function useEmojiHtml(globalEmojiIndex){
-  const COLONS_REGEX = new RegExp('([^:]+)?(:[a-zA-Z0-9-_+]+:(:skin-tone-[2-6]:)?)','g');
-
-  function getHtml(text) {
-    if(!text){
-      return ''
-    }
-    return text.replace(COLONS_REGEX, function (match, p1, p2) {
-      const before = p1 || ''
-      if (endsWith(before, 'alt="') || endsWith(before, 'data-text="')) {
-        return match
-      }
-      let emoji = globalEmojiIndex.findEmoji(p2)
-      if (!emoji) {
-        return match
-      }
-      return before + emoji2Html(emoji)
-    })
-    return text;
-  }
-
-  function endsWith(str, temp){
-    return str.endsWith(temp)
-  }
-
-  function emoji2Html(emoji) {
-    let style = `position: absolute;top: -3px;left: 3px;width: 18px; height: 18px;background-position: ${emoji.getPosition()}`
-    return `<span style="width: 24px" class="emoji-mart-emoji"><span class="my-emoji-icon emoji-set-apple emoji-type-image" style="${style}"> </span> </span>`
-  }
-  
-  return {
-    globalEmojiIndex,
-    getHtml
-  }
-}
-
-/**
- * 鑾峰彇modal绐椾綋楂樺害
- */
-export function getModalHeight(){
-  return window.innerHeight;
-}
diff --git a/src/components/jeecg/thirdApp/JThirdAppButton.vue b/src/components/jeecg/thirdApp/JThirdAppButton.vue
deleted file mode 100644
index c6b7f79..0000000
--- a/src/components/jeecg/thirdApp/JThirdAppButton.vue
+++ /dev/null
@@ -1,180 +0,0 @@
-<template>
-  <template v-if="syncToApp || syncToLocal">
-    <JThirdAppDropdown v-if="enabledTypes.wechatEnterprise" type="wechatEnterprise" name="浼佸井" v-bind="bindAttrs" v-on="bindEvents" />
-    <JThirdAppDropdown v-if="enabledTypes.dingtalk" type="dingtalk" name="閽夐拤" v-bind="bindAttrs" v-on="bindEvents" />
-  </template>
-  <template v-else>鏈缃换浣曞悓姝ユ柟鍚�</template>
-</template>
-
-<script lang="ts" setup>
-  import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
-  import { ref, computed, createVNode, h, resolveComponent } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { backEndUrl, getEnabledTypes, doSyncThirdApp } from './jThirdApp.api';
-  import { Modal, Input } from 'ant-design-vue';
-  import JThirdAppDropdown from './JThirdAppDropdown.vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const { createMessage, createWarningModal } = useMessage();
-  const props = defineProps({
-    // 鍚屾绫诲瀷锛屽彲浠ユ槸 user銆乨epart
-    bizType: {
-      type: String,
-      required: true,
-    },
-    // 鏄惁鍏佽鍚屾鍒扮涓夋柟APP
-    syncToApp: Boolean,
-    // 鏄惁鍏佽绗笁鏂笰PP鍚屾鍒版湰鍦�
-    syncToLocal: Boolean,
-    // 閫夋嫨鐨勮
-    selectedRowKeys: Array,
-  });
-  // 澹版槑Emits
-  const emit = defineEmits(['sync-ok', 'sync-error', 'sync-finally']);
-
-  const enabledTypes = ref({});
-  // 缁戝畾灞炴��
-  const bindAttrs = computed(() => {
-    return {
-      syncToApp: props.syncToApp,
-      syncToLocal: props.syncToLocal,
-    };
-  });
-  // 缁戝畾鏂规硶
-  const bindEvents = computed(() => {
-    return {
-      'to-app': onToApp,
-      'to-local': onToLocal,
-    };
-  });
-
-  // 鍚屾鍒扮涓夋柟App
-  function onToApp(e) {
-    doSync(e.type, '/toApp');
-  }
-
-  // 鍚屾鍒版湰鍦�
-  function onToLocal(e) {
-    doSync(e.type, '/toLocal');
-  }
-
-  // 鑾峰彇鍚敤鐨勭涓夋柟App
-  async function loadEnabledTypes() {
-    enabledTypes.value = await getEnabledTypes();
-  }
-
-  // 寮�濮嬪悓姝ョ涓夋柟App
-  function doSync(type, direction) {
-    let urls = backEndUrl[type];
-    if (!(urls && urls[props.bizType])) {
-      console.warn('閰嶇疆鍑洪敊');
-      return;
-    }
-    let url = urls[props.bizType] + direction;
-    let selectedRowKeys = props.selectedRowKeys;
-    let content = '纭畾瑕佸紑濮嬪悓姝ュ叏閮ㄦ暟鎹悧锛熷彲鑳借姳璐硅緝闀挎椂闂达紒';
-
-    if (Array.isArray(selectedRowKeys) && selectedRowKeys.length > 0) {
-      content = `纭畾瑕佸紑濮嬪悓姝ヨ繖 ${selectedRowKeys.length} 椤瑰悧锛焋;
-    } else {
-      selectedRowKeys = [];
-    }
-    return new Promise((resolve, reject) => {
-      const model = Modal.confirm({
-        icon: createVNode(ExclamationCircleOutlined),
-        title: '鍚屾',
-        content,
-        onOk: () => {
-          model.update({
-            keyboard: false,
-            okText: '鍚屾涓��',
-            cancelButtonProps: { disabled: true },
-          });
-          let params = { ids: selectedRowKeys.join(',') };
-          return defHttp
-            .get({ url, params }, { isTransformResponse: false })
-            .then((res) => {
-              let options = {};
-              if (res.result) {
-                options = {
-                  width: 600,
-                  title: res.message,
-                  content: () => {
-                    let nodes;
-                    let successInfo = [`鎴愬姛淇℃伅濡備笅锛歚, renderTextarea(h, res.result.successInfo.map((v, i) => `${i + 1}. ${v}`).join('\n'))];
-                    if (res.success) {
-                      nodes = [...successInfo, h('br'), `鏃犲け璐ヤ俊鎭紒`];
-                    } else {
-                      nodes = [
-                        `澶辫触淇℃伅濡備笅锛歚,
-                        renderTextarea(h, res.result.failInfo.map((v, i) => `${i + 1}. ${v}`).join('\n')),
-                        h('br'),
-                        ...successInfo,
-                      ];
-                    }
-                    return nodes;
-                  },
-                };
-              }
-              if (res.success) {
-                if (options != null) {
-                  Modal.success(options);
-                } else {
-                  createMessage.warning(res.message);
-                }
-                emit('sync-ok');
-              } else {
-                if (options != null) {
-                  Modal.warning(options);
-                } else {
-                  createMessage.warning(res.message);
-                }
-                emit('sync-error');
-              }
-            })
-            .catch(() => model.destroy())
-            .finally(() => {
-              resolve();
-              emit('sync-finally', {
-                type,
-                direction,
-                isToApp: direction === '/toApp',
-                isToLocal: direction === '/toLocal',
-              });
-            });
-        },
-        onCancel() {
-          resolve();
-        },
-      });
-    });
-  }
-
-  function renderTextarea(h, value) {
-    return h(
-      'div',
-      {
-        id: 'box',
-        style: {
-          minHeight: '100px',
-          border: '1px solid #d9d9d9',
-          fontSize: '14px',
-          maxHeight: '250px',
-          whiteSpace: 'pre',
-          overflow: 'auto',
-          padding: '10px',
-        },
-      },
-      value
-    );
-  }
-
-  // 鑾峰彇鍚敤鐨勭涓夋柟App
-  loadEnabledTypes();
-</script>
-
-<style scoped>
-  #box:hover {
-    border-color: #40a9ff;
-  }
-</style>
diff --git a/src/components/jeecg/thirdApp/JThirdAppDropdown.vue b/src/components/jeecg/thirdApp/JThirdAppDropdown.vue
deleted file mode 100644
index bb4230c..0000000
--- a/src/components/jeecg/thirdApp/JThirdAppDropdown.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-<template>
-  <a-dropdown v-if="syncToApp && syncToLocal">
-    <a-button type="primary" preIcon="ant-design:sync-outlined">鍚屾{{ name }}</a-button>
-    <template #overlay>
-      <a-menu @click="handleMenuClick">
-        <a-menu-item v-if="syncToApp" key="to-app">鍚屾鍒皗{ name }}</a-menu-item>
-        <a-menu-item v-if="getSyncToLocal" key="to-local">鍚屾鍒版湰鍦�</a-menu-item>
-      </a-menu>
-    </template>
-  </a-dropdown>
-  <a-button v-else-if="syncToApp" type="primary" preIcon="ant-design:sync-outlined" @click="handleMenuClick({ key: 'to-app' })"
-    >鍚屾{{ name }}</a-button
-  >
-  <a-button v-else type="primary" preIcon="ant-design:sync-outlined" @click="handleMenuClick({ key: 'to-local' })">鍚屾{{ name }}鍒版湰鍦�</a-button>
-</template>
-
-<script lang="ts" setup>
-  /* JThirdAppButton 鐨勫瓙缁勪欢锛屼笉鍙崟鐙娇鐢� */
-  import { computed } from 'vue';
-
-  const props = defineProps({
-    type: String,
-    name: String,
-    syncToApp: Boolean,
-    syncToLocal: Boolean,
-  });
-  // 澹版槑Emits
-  const emit = defineEmits(['to-app', 'to-local']);
-
-  const getSyncToLocal = computed(() => {
-    // 鐢变簬浼佷笟寰俊鎺ュ彛鍙樻洿锛屽皢涓嶅啀鏀寔鍚屾鍒版湰鍦�
-    if (props.type === 'wechatEnterprise') {
-      return false;
-    }
-    return props.syncToLocal;
-  });
-
-  function handleMenuClick(event) {
-    emit(event.key, { type: props.type });
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/components/jeecg/thirdApp/jThirdApp.api.ts b/src/components/jeecg/thirdApp/jThirdApp.api.ts
deleted file mode 100644
index a3dfc04..0000000
--- a/src/components/jeecg/thirdApp/jThirdApp.api.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { cloneObject } from '/@/utils/index';
-
-export const backEndUrl = {
-  // 鑾峰彇鍚敤鐨勭涓夋柟App
-  getEnabledType: '/sys/thirdApp/getEnabledType',
-  // 浼佷笟寰俊
-  wechatEnterprise: {
-    user: '/sys/thirdApp/sync/wechatEnterprise/user',
-    depart: '/sys/thirdApp/sync/wechatEnterprise/depart',
-  },
-  // 閽夐拤
-  dingtalk: {
-    user: '/sys/thirdApp/sync/dingtalk/user',
-    depart: '/sys/thirdApp/sync/dingtalk/depart',
-  },
-};
-// 鍚敤浜嗗摢浜涚涓夋柟App锛堝湪姝ょ紦瀛橈級
-let enabledTypes = null;
-
-// 鑾峰彇鍚敤鐨勭涓夋柟App
-export const getEnabledTypes = async () => {
-  // 鑾峰彇缂撳瓨
-  if (enabledTypes != null) {
-    return cloneObject(enabledTypes);
-  } else {
-    let { success, result } = await defHttp.get({ url: backEndUrl.getEnabledType }, { isTransformResponse: false });
-    if (success) {
-      // 鍦ㄦ缂撳瓨
-      enabledTypes = cloneObject(result);
-      return result;
-    } else {
-      console.warn('getEnabledType鏌ヨ澶辫触锛�');
-    }
-  }
-  return {};
-};
diff --git a/src/components/registerGlobComp.ts b/src/components/registerGlobComp.ts
deleted file mode 100644
index c8cfb8c..0000000
--- a/src/components/registerGlobComp.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-import type { App } from 'vue';
-import { Icon } from './Icon';
-import AIcon from '/@/components/jeecg/AIcon.vue';
-import { Button, JUploadButton } from './Button';
-import {
-  // Need
-  Button as AntButton,
-  Select,
-  Alert,
-  Checkbox,
-  DatePicker,
-  TimePicker,
-  Calendar,
-  Radio,
-  Switch,
-  Card,
-  List,
-  Tabs,
-  Descriptions,
-  Tree,
-  Table,
-  Divider,
-  Modal,
-  Drawer,
-  TreeSelect,
-  Dropdown,
-  Tag,
-  Tooltip,
-  Badge,
-  Popover,
-  Upload,
-  Transfer,
-  Steps,
-  PageHeader,
-  Result,
-  Empty,
-  Avatar,
-  Menu,
-  Breadcrumb,
-  Form,
-  Input,
-  Row,
-  Col,
-  Spin,
-  Space,
-  Layout,
-  Collapse,
-  Slider,
-  InputNumber,
-  Carousel,
-  Popconfirm,
-  Skeleton,
-  Cascader,
-  Rate,
-} from 'ant-design-vue';
-
-const compList = [AntButton.Group, Icon, AIcon, JUploadButton];
-
-export function registerGlobComp(app: App) {
-  compList.forEach((comp) => {
-    app.component(comp.name || comp.displayName, comp);
-  });
-
-  app
-    .use(Select)
-    .use(Alert)
-    .use(Button)
-    .use(Breadcrumb)
-    .use(Checkbox)
-    .use(DatePicker)
-    .use(TimePicker)
-    .use(Calendar)
-    .use(Radio)
-    .use(Switch)
-    .use(Card)
-    .use(List)
-    .use(Descriptions)
-    .use(Tree)
-    .use(TreeSelect)
-    .use(Table)
-    .use(Divider)
-    .use(Modal)
-    .use(Drawer)
-    .use(Dropdown)
-    .use(Tag)
-    .use(Tooltip)
-    .use(Badge)
-    .use(Popover)
-    .use(Upload)
-    .use(Transfer)
-    .use(Steps)
-    .use(PageHeader)
-    .use(Result)
-    .use(Empty)
-    .use(Avatar)
-    .use(Menu)
-    .use(Tabs)
-    .use(Form)
-    .use(Input)
-    .use(Row)
-    .use(Col)
-    .use(Spin)
-    .use(Space)
-    .use(Layout)
-    .use(Collapse)
-    .use(Slider)
-    .use(InputNumber)
-    .use(Carousel)
-    .use(Popconfirm)
-    .use(Skeleton)
-    .use(Cascader)
-    .use(Rate);
-}
diff --git a/src/design/ant/btn.less b/src/design/ant/btn.less
deleted file mode 100644
index 2659f39..0000000
--- a/src/design/ant/btn.less
+++ /dev/null
@@ -1,317 +0,0 @@
-// button reset
-.ant-btn {
-  // display: inline-flex;
-  // justify-content: center;
-  // align-items: center;
-  // &.ant-btn-success:not(.ant-btn-link),
-  // &.ant-btn-error:not(.ant-btn-link),
-  // &.ant-btn-warning:not(.ant-btn-link),
-  // &.ant-btn-primary:not(.ant-btn-link) {
-  //   box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08) !important;
-  // }
-  // &-group {
-  //   .ant-btn:not(:first-child) {
-  //     bottom: 1px;
-  //   }
-  // }
-  &-link:hover,
-  &-link:focus,
-  &-link:active {
-    border-color: transparent !important;
-  }
-
-  &-primary {
-    color: @white;
-    background-color: @button-primary-color;
-
-    &:hover,
-    &:focus {
-      color: @white;
-      background-color: @button-primary-hover-color;
-    }
-    //
-    //&[disabled],
-    //&[disabled]:hover {
-    //  color: fade(@button-cancel-color, 40%) !important;
-    //  background-color: fade(@button-cancel-bg-color, 40%) !important;
-    //  border-color: fade(@button-cancel-border-color, 40%) !important;
-    //}
-  }
-
-  &-primary:not(&-background-ghost):not([disabled]) {
-    color: @white;
-  }
-
-  //&-primary:not(&-background-ghost) {
-  //  border-width: 0;
-  //}
-
-  &-default {
-    color: @button-cancel-color;
-    background-color: @button-cancel-bg-color;
-    border-color: @button-cancel-border-color;
-
-    &:hover,
-    &:focus {
-      color: @button-cancel-hover-color;
-      background-color: @button-cancel-hover-bg-color;
-      border-color: @button-cancel-hover-border-color;
-    }
-    //
-    //&[disabled],
-    //&[disabled]:hover {
-    //  color: fade(@button-cancel-color, 40%) !important;
-    //  background: fade(@button-cancel-bg-color, 40%) !important;
-    //  border-color: fade(@button-cancel-border-color, 40%) !important;
-    //}
-  }
-
-  [data-theme='light'] &.ant-btn-link.is-disabled {
-    color: rgba(0, 0, 0, 0.25);
-    text-shadow: none;
-    cursor: not-allowed !important;
-    background-color: transparent !important;
-    border-color: transparent !important;
-    box-shadow: none;
-  }
-
-  [data-theme='dark'] &.ant-btn-link.is-disabled {
-    color: rgba(255, 255, 255, 0.25) !important;
-    text-shadow: none;
-    cursor: not-allowed !important;
-    background-color: transparent !important;
-    border-color: transparent !important;
-    box-shadow: none;
-  }
-
-  // color: @white;
-
-  &-success.ant-btn-link:not([disabled='disabled']) {
-    color: @button-success-color;
-
-    &:hover,
-    &:focus {
-      color: @button-success-hover-color;
-      border-color: transparent;
-    }
-
-    &:active {
-      color: @button-success-active-color;
-    }
-  }
-
-  &-success.ant-btn-link.ant-btn-loading,
-  &-warning.ant-btn-link.ant-btn-loading,
-  &-error.ant-btn-link.ant-btn-loading,
-  &-background-ghost.ant-btn-link.ant-btn-loading,
-  &.ant-btn-link.ant-btn-loading {
-    &::before {
-      background: transparent;
-    }
-  }
-
-  &-success:not(.ant-btn-link, .is-disabled) {
-    color: @white;
-    background-color: @button-success-color;
-    border-color: @button-success-color;
-    //border-width: 0;
-
-    &:hover,
-    &:focus {
-      color: @white;
-      background-color: @button-success-hover-color;
-      border-color: @button-success-hover-color;
-    }
-
-    &:active {
-      background-color: @button-success-active-color;
-      border-color: @button-success-active-color;
-    }
-
-    //&[disabled],
-    //&[disabled]:hover {
-    //  color: @white;
-    //  background-color: fade(@button-success-color, 40%);
-    //  border-color: fade(@button-success-color, 40%);
-    //}
-  }
-
-  &-warning.ant-btn-link:not([disabled='disabled']) {
-    color: @button-warn-color;
-
-    &:hover,
-    &:focus {
-      color: @button-warn-hover-color;
-      border-color: transparent;
-    }
-
-    &:active {
-      color: @button-warn-active-color;
-    }
-  }
-
-  &-warning:not(.ant-btn-link, .is-disabled) {
-    color: @white;
-    background-color: @button-warn-color;
-    border-color: @button-warn-color;
-    //border-width: 0;
-
-    &:hover,
-    &:focus {
-      color: @white;
-      background-color: @button-warn-hover-color;
-      border-color: @button-warn-hover-color;
-    }
-
-    &:active {
-      background-color: @button-warn-active-color;
-      border-color: @button-warn-active-color;
-    }
-
-    //&[disabled],
-    //&[disabled]:hover {
-    //  color: @white;
-    //  background-color: fade(@button-warn-color, 40%);
-    //  border-color: fade(@button-warn-color, 40%);
-    //}
-  }
-
-  &-error.ant-btn-link:not([disabled='disabled']) {
-    color: @button-error-color;
-
-    &:hover,
-    &:focus {
-      color: @button-error-hover-color;
-      border-color: transparent;
-    }
-
-    &:active {
-      color: @button-error-active-color;
-    }
-  }
-
-  &-error:not(.ant-btn-link, .is-disabled) {
-    color: @white;
-    background-color: @button-error-color;
-    border-color: @button-error-color;
-    //border-width: 0;
-
-    &:hover,
-    &:focus {
-      color: @white;
-      background-color: @button-error-hover-color;
-      border-color: @button-error-hover-color;
-    }
-
-    &:active {
-      background-color: @button-error-active-color;
-      border-color: @button-error-active-color;
-    }
-
-    //&[disabled],
-    //&[disabled]:hover {
-    //  color: @white;
-    //  background-color: fade(@button-error-color, 40%);
-    //  border-color: fade(@button-error-color, 40%);
-    //}
-  }
-
-  &-background-ghost {
-    border-width: 1px;
-    background-color: transparent !important;
-
-    &[disabled],
-    &[disabled]:hover {
-      color: fade(@white, 40%) !important;
-      background-color: transparent !important;
-      border-color: fade(@white, 40%) !important;
-    }
-  }
-
-  &-dashed&-background-ghost,
-  &-default&-background-ghost {
-    color: @button-ghost-color;
-    border-color: @button-ghost-color;
-
-    &:hover,
-    &:focus {
-      color: @button-ghost-hover-color;
-      border-color: @button-ghost-hover-color;
-    }
-
-    &:active {
-      color: @button-ghost-active-color;
-      border-color: @button-ghost-active-color;
-    }
-
-    &[disabled],
-    &[disabled]:hover {
-      color: fade(@white, 40%) !important;
-      border-color: fade(@white, 40%) !important;
-    }
-  }
-
-  &-background-ghost&-success:not(.ant-btn-link) {
-    color: @button-success-color;
-    background-color: transparent;
-    border-color: @button-success-color;
-    border-width: 1px;
-
-    &:hover,
-    &:focus {
-      color: @button-success-hover-color !important;
-      border-color: @button-success-hover-color;
-    }
-
-    &:active {
-      color: @button-success-active-color;
-      border-color: @button-success-active-color;
-    }
-  }
-
-  &-background-ghost&-warning:not(.ant-btn-link) {
-    color: @button-warn-color;
-    background-color: transparent;
-    border-color: @button-warn-color;
-    border-width: 1px;
-
-    &:hover,
-    &:focus {
-      color: @button-warn-hover-color !important;
-      border-color: @button-warn-hover-color;
-    }
-
-    &:active {
-      color: @button-warn-active-color;
-      border-color: @button-warn-active-color;
-    }
-  }
-
-  &-background-ghost&-error:not(.ant-btn-link) {
-    color: @button-error-color;
-    background-color: transparent;
-    border-color: @button-error-color;
-    border-width: 1px;
-
-    &:hover,
-    &:focus {
-      color: @button-error-hover-color !important;
-      border-color: @button-error-hover-color;
-    }
-
-    &:active {
-      color: @button-error-active-color;
-      border-color: @button-error-active-color;
-    }
-  }
-
-  &-ghost.ant-btn-link:not([disabled='disabled']) {
-    color: @button-ghost-color;
-
-    &:hover,
-    &:focus {
-      color: @button-ghost-hover-color;
-      border-color: transparent;
-    }
-  }
-}
diff --git a/src/design/ant/index.less b/src/design/ant/index.less
deleted file mode 100644
index e9ed4f7..0000000
--- a/src/design/ant/index.less
+++ /dev/null
@@ -1,65 +0,0 @@
-@import './pagination.less';
-@import './input.less';
-@import './btn.less';
-// @import './table.less';
-
-// TODO beta.11 fix
-.ant-col {
-  width: 100%;
-}
-
-.ant-image-preview-root {
-  img {
-    display: unset;
-  }
-}
-
-span.anticon:not(.app-iconify) {
-  vertical-align: 0.125em !important;
-}
-
-.ant-back-top {
-  right: 20px;
-  bottom: 20px;
-}
-
-.collapse-container__body {
-  > .ant-descriptions {
-    margin-left: 6px;
-  }
-}
-
-.ant-image-preview-operations {
-  background-color: rgba(0, 0, 0, 0.3);
-}
-
-.ant-popover {
-  &-content {
-    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
-  }
-}
-
-// =================================
-// ==============modal message======
-// =================================
-.modal-icon-warning {
-  color: @warning-color !important;
-}
-
-.modal-icon-success {
-  color: @success-color !important;
-}
-
-.modal-icon-error {
-  color: @error-color !important;
-}
-
-.modal-icon-info {
-  color: @primary-color !important;
-}
-
-.ant-checkbox-checked .ant-checkbox-inner::after,
-.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after {
-  border-top: 0 !important;
-  border-left: 0 !important;
-}
diff --git a/src/design/ant/input.less b/src/design/ant/input.less
deleted file mode 100644
index 57f85e5..0000000
--- a/src/design/ant/input.less
+++ /dev/null
@@ -1,24 +0,0 @@
-@import (reference) '../color.less';
-
-// input
-.ant-input {
-  &-number {
-    min-width: 110px;
-  }
-}
-
-.ant-input-affix-wrapper .ant-input-suffix {
-  right: 9px;
-}
-
-.ant-input-clear-icon {
-  margin-right: 5px;
-}
-
-.ant-input-affix-wrapper-textarea-with-clear-btn {
-  padding: 0 !important;
-
-  textarea.ant-input {
-    padding: 4px;
-  }
-}
diff --git a/src/design/ant/pagination.less b/src/design/ant/pagination.less
deleted file mode 100644
index 388edcc..0000000
--- a/src/design/ant/pagination.less
+++ /dev/null
@@ -1,98 +0,0 @@
-html[data-theme='dark'] {
-  .ant-pagination {
-    &.mini {
-      .ant-pagination-prev,
-      .ant-pagination-next,
-      .ant-pagination-item {
-        background-color: rgb(255 255 255 / 4%) !important;
-
-        a {
-          color: #8b949e !important;
-        }
-      }
-
-      .ant-select-arrow {
-        color: @text-color-secondary !important;
-      }
-
-      .ant-pagination-item-active {
-        background-color: @primary-color !important;
-        border: none;
-        border-radius: none !important;
-
-        a {
-          color: @white !important;
-        }
-      }
-    }
-  }
-}
-
-.ant-pagination {
-  &.mini {
-    .ant-pagination-prev,
-    .ant-pagination-next {
-      font-size: 12px;
-      color: @text-color-base;
-      border: 1px solid;
-    }
-
-    .ant-pagination-prev:hover,
-    .ant-pagination-next:hover,
-    .ant-pagination-item:focus,
-    .ant-pagination-item:hover {
-      a {
-        color: @primary-color;
-      }
-    }
-
-    .ant-pagination-prev,
-    .ant-pagination-next,
-    .ant-pagination-item {
-      margin: 0 4px !important;
-      //update-begin---author:scott ---date:2022-09-30  for锛氥�愮編鍖栥�慣able鍒嗛〉椤甸潰榛樿鑳屾櫙鑹蹭笐锛屽幓鎺�-----------
-      //background-color: #f4f4f5 !important;
-      //update-end---author:scott ---date::2022-09-30  for锛氥�愮編鍖栥�慣able鍒嗛〉椤甸潰榛樿鑳屾櫙鑹蹭笐锛屽幓鎺�------------
-      border: none;
-      border-radius: none !important;
-
-      a {
-        margin-top: 1px;
-        color: #606266;
-      }
-
-      &:last-child {
-        margin-right: 0 !important;
-      }
-    }
-
-    .ant-pagination-item-active {
-      background-color: @primary-color !important;
-      border: none;
-      border-radius: none !important;
-
-      a {
-        color: @white !important;
-      }
-    }
-
-    .ant-pagination-options {
-      margin-left: 12px;
-    }
-
-    .ant-pagination-options-quick-jumper input {
-      height: 22px;
-      margin: 0 6px;
-      line-height: 22px;
-      text-align: center;
-    }
-
-    .ant-select-arrow {
-      color: @border-color-shallow-dark;
-    }
-  }
-
-  &-disabled {
-    display: none !important;
-  }
-}
diff --git a/src/design/ant/table.less b/src/design/ant/table.less
deleted file mode 100644
index fabe60e..0000000
--- a/src/design/ant/table.less
+++ /dev/null
@@ -1,76 +0,0 @@
-@prefix-cls: ~'@{namespace}-basic-table';
-
-// fix table unnecessary scrollbar
-.@{prefix-cls} {
-  .hide-scrollbar-y {
-    .ant-spin-nested-loading {
-      .ant-spin-container {
-        .ant-table {
-          .ant-table-content {
-            .ant-table-scroll {
-              .ant-table-hide-scrollbar {
-                overflow-y: auto !important;
-              }
-
-              .ant-table-content {
-                overflow-y: auto !important;
-              }
-            }
-
-            .ant-table-fixed-right {
-              .ant-table-body-outer {
-                .ant-table-body-inner {
-                  overflow-y: auto !important;
-                }
-              }
-            }
-
-            .ant-table-fixed-left {
-              .ant-table-body-outer {
-                .ant-table-body-inner {
-                  overflow-y: auto !important;
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-
-  .hide-scrollbar-x {
-    .ant-spin-nested-loading {
-      .ant-spin-container {
-        .ant-table {
-          .ant-table-content {
-            .ant-table-scroll {
-              .ant-table-hide-scrollbar {
-                //overflow-x: auto !important;
-              }
-
-              .ant-table-content {
-                overflow: auto !important;
-              }
-            }
-
-            .ant-table-fixed-right {
-              .ant-table-body-outer {
-                .ant-table-body-inner {
-                  overflow-x: auto !important;
-                }
-              }
-            }
-
-            .ant-table-fixed-left {
-              .ant-table-body-outer {
-                .ant-table-body-inner {
-                  overflow-x: auto !important;
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/src/design/color.less b/src/design/color.less
deleted file mode 100644
index 9d2138c..0000000
--- a/src/design/color.less
+++ /dev/null
@@ -1,138 +0,0 @@
-html {
-  // header
-  --header-bg-color: #394664;
-  --header-bg-hover-color: #273352;
-  --header-active-menu-bg-color: #273352;
-
-  // sider
-  --sider-dark-bg-color: #273352;
-  --sider-dark-darken-bg-color: #273352;
-  --sider-dark-lighten-bg-color: #273352;
-}
-
-@white: #fff;
-
-@content-bg: #f4f7f9;
-
-// :export {
-//   name: "less";
-//   mainColor: @mainColor;
-//   fontSize: @fontSize;
-// }
-@iconify-bg-color: #5551;
-
-// =================================
-// ==============border-color=======
-// =================================
-
-// Dark-dark
-@border-color-dark: #b6b7b9;
-
-// Dark-light
-@border-color-shallow-dark: #cececd;
-
-// Light-dark
-@border-color-light: @border-color-base;
-
-// =================================
-// ==============message==============
-// =================================
-
-// success-bg-color
-@success-background-color: #f1f9ec;
-// info-bg-color
-@info-background-color: #e8eff8;
-// warn-bg-color
-@warning-background-color: #fdf6ed;
-// danger-bg-color
-@danger-background-color: #fef0f0;
-
-// =================================
-// ==============Header=============
-// =================================
-
-@header-dark-bg-color: var(--header-bg-color);
-@header-dark-bg-hover-color: var(--header-bg-hover-color);
-@header-light-bg-hover-color: #f6f6f6;
-@header-light-desc-color: #7c8087;
-@header-light-bottom-border-color: #eee;
-// top-menu
-@top-menu-active-bg-color: var(--header-active-menu-bg-color);
-
-// =================================
-// ==============Menu============
-// =================================
-
-// let -menu
-@sider-dark-bg-color: var(--sider-dark-bg-color);
-@sider-dark-darken-bg-color: var(--sider-dark-darken-bg-color);
-@sider-dark-lighten-bg-color: var(--sider-dark-lighten-bg-color);
-
-// trigger
-@trigger-dark-hover-bg-color: rgba(255, 255, 255, 0.2);
-@trigger-dark-bg-color: rgba(255, 255, 255, 0.1);
-
-// =================================
-// ==============tree============
-// =================================
-// tree item hover background
-@tree-hover-background-color: #f5f7fa;
-// tree item hover font color
-@tree-hover-font-color: #f5f7fa;
-
-// =================================
-// ==============link============
-// =================================
-@link-hover-color: @primary-color;
-@link-active-color: darken(@primary-color, 10%);
-
-// =================================
-// ==============Text color-=============
-// =================================
-
-// Main text color
-@text-color-base: @text-color;
-
-// Label color
-@text-color-call-out: #606266;
-
-// Auxiliary information color-dark
-@text-color-help-dark: #909399;
-
-// =================================
-// ==============breadcrumb=========
-// =================================
-@breadcrumb-item-normal-color: #999;
-// =================================
-// ==============button=============
-// =================================
-
-@button-primary-color: @primary-color;
-@button-primary-hover-color: lighten(@primary-color, 5%);
-@button-primary-active-color: darken(@primary-color, 5%);
-
-@button-ghost-color: @white;
-@button-ghost-hover-color: lighten(@white, 10%);
-@button-ghost-hover-bg-color: #e1ebf6;
-@button-ghost-active-color: darken(@white, 10%);
-
-@button-success-color: @success-color;
-@button-success-hover-color: lighten(@success-color, 10%);
-@button-success-active-color: darken(@success-color, 10%);
-
-@button-warn-color: @warning-color;
-@button-warn-hover-color: lighten(@warning-color, 10%);
-@button-warn-active-color: darken(@warning-color, 10%);
-
-@button-error-color: @error-color;
-@button-error-hover-color: lighten(@error-color, 10%);
-@button-error-active-color: darken(@error-color, 10%);
-
-@button-cancel-color: @text-color-call-out;
-@button-cancel-bg-color: @white;
-@button-cancel-border-color: @border-color-shallow-dark;
-
-// Mouse over
-@button-cancel-hover-color: @primary-color;
-@button-cancel-hover-bg-color: @white;
-@button-cancel-hover-border-color: @primary-color;
diff --git a/src/design/config.less b/src/design/config.less
deleted file mode 100644
index 64c33f6..0000000
--- a/src/design/config.less
+++ /dev/null
@@ -1,2 +0,0 @@
-@import (reference) 'color.less';
-@import (reference) 'var/index.less';
diff --git a/src/design/index.less b/src/design/index.less
deleted file mode 100644
index 013e7b6..0000000
--- a/src/design/index.less
+++ /dev/null
@@ -1,48 +0,0 @@
-@import 'transition/index.less';
-@import 'var/index.less';
-@import 'public.less';
-@import 'ant/index.less';
-@import './theme.less';
-
-input:-webkit-autofill {
-  -webkit-box-shadow: 0 0 0 1000px white inset !important;
-}
-
-:-webkit-autofill {
-  transition: background-color 5000s ease-in-out 0s !important;
-}
-
-html {
-  overflow: hidden;
-  -webkit-text-size-adjust: 100%;
-}
-
-html,
-body {
-  width: 100%;
-  height: 100%;
-
-  &.color-weak {
-    filter: invert(80%);
-  }
-
-  &.gray-mode {
-    filter: grayscale(100%);
-    filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
-  }
-}
-
-/* 銆怢OWCOD-2300銆戙�恦ue3銆憃nline--online琛ㄥ崟寮�鍙戯紝涓嬫媺妗嗕綅缃潬涓嬫椂锛岀偣寮�涓嬫媺妗嗭紝鏁村睆璺� */
-body {
-  overflow: visible;
-  overflow-x: hidden;
-}
-
-a:focus,
-a:active,
-button,
-div,
-svg,
-span {
-  outline: none !important;
-}
diff --git a/src/design/public.less b/src/design/public.less
deleted file mode 100644
index eda1bbf..0000000
--- a/src/design/public.less
+++ /dev/null
@@ -1,113 +0,0 @@
-#app {
-  width: 100%;
-  height: 100%;
-}
-
-// =================================
-// ==============scrollbar==========
-// =================================
-
-::-webkit-scrollbar {
-  width: 7px;
-  height: 8px;
-}
-
-// ::-webkit-scrollbar-track {
-//   background: transparent;
-// }
-
-::-webkit-scrollbar-track {
-  background-color: rgba(0, 0, 0, 0.05);
-}
-
-::-webkit-scrollbar-thumb {
-  // background: rgba(0, 0, 0, 0.6);
-  background-color: rgba(144, 147, 153, 0.3);
-  // background-color: rgba(144, 147, 153, 0.3);
-  border-radius: 2px;
-  box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.2);
-}
-
-::-webkit-scrollbar-thumb:hover {
-  background-color: @border-color-dark;
-}
-
-[data-theme='dark'] {
-  ::-webkit-scrollbar-thumb:hover {
-    background-color: #5e6063;
-  }
-}
-
-// =================================
-// ==============nprogress==========
-// =================================
-#nprogress {
-  pointer-events: none;
-
-  .bar {
-    position: fixed;
-    top: 0;
-    left: 0;
-    z-index: 99999;
-    width: 100%;
-    height: 2px;
-    background-color: @primary-color;
-    opacity: 0.75;
-  }
-}
-
-// =======================================
-// ============ [sjl] 鎸夐挳缁勬牱寮� ==========
-// =======================================
-.j-table-operator {
-  // Button鎸夐挳闂磋窛
-  .ant-btn {
-    margin: 0 8px 8px 0;
-    transition: margin 0s;
-  }
-
-  & > .ant-btn:last-of-type {
-    margin: 0 0 8px 0;
-  }
-
-  .ant-btn-group,
-  &.ant-btn-group {
-    .ant-btn {
-      margin: 0;
-      transition: margin 0s;
-    }
-
-    & > .ant-btn:last-of-type {
-      margin: 0 8px 8px 0;
-    }
-  }
-}
-
-// ========================================
-// ============ [sjl] 搴曢儴鎸夐挳鏍峰紡 ==========
-// ========================================
-.j-box-bottom-button {
-  height: 28px;
-
-  &-float {
-    position: absolute;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    border-top: 1px solid #e8e8e8;
-    padding: 10px 16px;
-    text-align: right;
-    background: #fff;
-    border-radius: 0 0 2px 2px;
-
-    & .ant-btn {
-      margin-left: 8px;
-    }
-  }
-
-  &.offset-20 &-float {
-    left: -20px;
-    right: -20px;
-    bottom: -20px;
-  }
-}
diff --git a/src/design/theme.less b/src/design/theme.less
deleted file mode 100644
index aa1f1ad..0000000
--- a/src/design/theme.less
+++ /dev/null
@@ -1,65 +0,0 @@
-.bg-white {
-  background-color: @component-background !important;
-}
-
-html[data-theme='light'] {
-  .text-secondary {
-    color: rgba(0, 0, 0, 0.45);
-  }
-  /*銆愮編鍖栥�戣嚜瀹氫箟table瀛椾綋棰滆壊*/
-  .ant-table {
-    color: rgba(0, 0, 0, 0.65);
-  }
-  /*銆愮編鍖栥�戣嚜瀹氫箟table瀛椾綋棰滆壊*/
-  /*銆愮編鍖栥�戣嚜瀹氫箟form瀛椾綋棰滆壊*/
-  .ant-select-multiple .ant-select-selection-item-content {
-    color: rgba(0, 0, 0, 0.65);
-  }
-  .ant-input-affix-wrapper > input.ant-input {
-    color: rgba(0, 0, 0, 0.65);
-  }
-  .ant-select-single.ant-select-show-arrow .ant-select-selection-item, .ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder{
-    color: rgba(0, 0, 0, 0.65);
-  }
-  /*銆愮編鍖栥�戣嚜瀹氫箟form瀛椾綋棰滆壊*/
-  
-  .ant-alert-success {
-    background-color: #f6ffed;
-    border: 1px solid #b7eb8f;
-  }
-
-  .ant-alert-error {
-    background-color: #fff2f0;
-    border: 1px solid #ffccc7;
-  }
-
-  .ant-alert-warning {
-    background-color: #fffbe6;
-    border: 1px solid #ffe58f;
-  }
-  :not(:root):fullscreen::backdrop {
-    background-color: @layout-body-background !important;
-  }
-}
-
-[data-theme='dark'] {
-  .text-secondary {
-    color: #8b949e;
-  }
-
-  .ant-card-grid-hoverable:hover {
-    box-shadow: 0 3px 6px -4px rgb(0 0 0 / 48%), 0 6px 16px 0 rgb(0 0 0 / 32%), 0 9px 28px 8px rgb(0 0 0 / 20%);
-  }
-
-  .ant-card-grid {
-    box-shadow: 1px 0 0 0 #434343, 0 1px 0 0 #434343, 1px 1px 0 0 #434343, 1px 0 0 0 #434343 inset, 0 1px 0 0 #434343 inset;
-  }
-
-  .ant-calendar-selected-day .ant-calendar-date {
-    color: rgba(0, 0, 0, 0.8);
-  }
-
-  .ant-select-tree li .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected {
-    color: rgba(0, 0, 0, 0.9);
-  }
-}
diff --git a/src/design/transition/base.less b/src/design/transition/base.less
deleted file mode 100644
index 7944c8b..0000000
--- a/src/design/transition/base.less
+++ /dev/null
@@ -1,18 +0,0 @@
-.transition-default() {
-  &-enter-active,
-  &-leave-active {
-    transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1) !important;
-  }
-
-  &-move {
-    transition: transform 0.4s;
-  }
-}
-
-.expand-transition {
-  .transition-default();
-}
-
-.expand-x-transition {
-  .transition-default();
-}
diff --git a/src/design/transition/fade.less b/src/design/transition/fade.less
deleted file mode 100644
index 1f8e63e..0000000
--- a/src/design/transition/fade.less
+++ /dev/null
@@ -1,81 +0,0 @@
-.fade-enter-active,
-.fade-leave-active {
-  transition: opacity 0.2s ease-in-out;
-}
-
-.fade-enter-from,
-.fade-leave-to {
-  opacity: 0;
-}
-
-/* fade-slide */
-.fade-slide-leave-active,
-.fade-slide-enter-active {
-  transition: all 0.3s;
-}
-
-.fade-slide-enter-from {
-  opacity: 0;
-  transform: translateX(-30px);
-}
-
-.fade-slide-leave-to {
-  opacity: 0;
-  transform: translateX(30px);
-}
-
-// ///////////////////////////////////////////////
-// Fade Bottom
-// ///////////////////////////////////////////////
-
-// Speed: 1x
-.fade-bottom-enter-active,
-.fade-bottom-leave-active {
-  transition: opacity 0.25s, transform 0.3s;
-}
-
-.fade-bottom-enter-from {
-  opacity: 0;
-  transform: translateY(-10%);
-}
-
-.fade-bottom-leave-to {
-  opacity: 0;
-  transform: translateY(10%);
-}
-
-// fade-scale
-.fade-scale-leave-active,
-.fade-scale-enter-active {
-  transition: all 0.28s;
-}
-
-.fade-scale-enter-from {
-  opacity: 0;
-  transform: scale(1.2);
-}
-
-.fade-scale-leave-to {
-  opacity: 0;
-  transform: scale(0.8);
-}
-
-// ///////////////////////////////////////////////
-// Fade Top
-// ///////////////////////////////////////////////
-
-// Speed: 1x
-.fade-top-enter-active,
-.fade-top-leave-active {
-  transition: opacity 0.2s, transform 0.25s;
-}
-
-.fade-top-enter-from {
-  opacity: 0;
-  transform: translateY(8%);
-}
-
-.fade-top-leave-to {
-  opacity: 0;
-  transform: translateY(-8%);
-}
diff --git a/src/design/transition/index.less b/src/design/transition/index.less
deleted file mode 100644
index e372b25..0000000
--- a/src/design/transition/index.less
+++ /dev/null
@@ -1,10 +0,0 @@
-@import './base.less';
-@import './fade.less';
-@import './scale.less';
-@import './slide.less';
-@import './scroll.less';
-@import './zoom.less';
-
-.collapse-transition {
-  transition: 0.2s height ease-in-out, 0.2s padding-top ease-in-out, 0.2s padding-bottom ease-in-out;
-}
diff --git a/src/design/transition/scale.less b/src/design/transition/scale.less
deleted file mode 100644
index c965493..0000000
--- a/src/design/transition/scale.less
+++ /dev/null
@@ -1,21 +0,0 @@
-.scale-transition {
-  .transition-default();
-
-  &-enter-from,
-  &-leave,
-  &-leave-to {
-    opacity: 0;
-    transform: scale(0);
-  }
-}
-
-.scale-rotate-transition {
-  .transition-default();
-
-  &-enter-from,
-  &-leave,
-  &-leave-to {
-    opacity: 0;
-    transform: scale(0) rotate(-45deg);
-  }
-}
diff --git a/src/design/transition/scroll.less b/src/design/transition/scroll.less
deleted file mode 100644
index a5f45e4..0000000
--- a/src/design/transition/scroll.less
+++ /dev/null
@@ -1,67 +0,0 @@
-.scroll-y-transition {
-  .transition-default();
-
-  &-enter-from,
-  &-leave-to {
-    opacity: 0;
-  }
-
-  &-enter-from {
-    transform: translateY(-15px);
-  }
-
-  &-leave-to {
-    transform: translateY(15px);
-  }
-}
-
-.scroll-y-reverse-transition {
-  .transition-default();
-
-  &-enter-from,
-  &-leave-to {
-    opacity: 0;
-  }
-
-  &-enter-from {
-    transform: translateY(15px);
-  }
-
-  &-leave-to {
-    transform: translateY(-15px);
-  }
-}
-
-.scroll-x-transition {
-  .transition-default();
-
-  &-enter-from,
-  &-leave-to {
-    opacity: 0;
-  }
-
-  &-enter-from {
-    transform: translateX(-15px);
-  }
-
-  &-leave-to {
-    transform: translateX(15px);
-  }
-}
-
-.scroll-x-reverse-transition {
-  .transition-default();
-
-  &-enter-from,
-  &-leave-to {
-    opacity: 0;
-  }
-
-  &-enter-from {
-    transform: translateX(15px);
-  }
-
-  &-leave-to {
-    transform: translateX(-15px);
-  }
-}
diff --git a/src/design/transition/slide.less b/src/design/transition/slide.less
deleted file mode 100644
index 79b00df..0000000
--- a/src/design/transition/slide.less
+++ /dev/null
@@ -1,39 +0,0 @@
-.slide-y-transition {
-  .transition-default();
-
-  &-enter-from,
-  &-leave-to {
-    opacity: 0;
-    transform: translateY(-15px);
-  }
-}
-
-.slide-y-reverse-transition {
-  .transition-default();
-
-  &-enter-from,
-  &-leave-to {
-    opacity: 0;
-    transform: translateY(15px);
-  }
-}
-
-.slide-x-transition {
-  .transition-default();
-
-  &-enter-from,
-  &-leave-to {
-    opacity: 0;
-    transform: translateX(-15px);
-  }
-}
-
-.slide-x-reverse-transition {
-  .transition-default();
-
-  &-enter-from,
-  &-leave-to {
-    opacity: 0;
-    transform: translateX(15px);
-  }
-}
diff --git a/src/design/transition/zoom.less b/src/design/transition/zoom.less
deleted file mode 100644
index 2ea378c..0000000
--- a/src/design/transition/zoom.less
+++ /dev/null
@@ -1,27 +0,0 @@
-// zoom-out
-.zoom-out-enter-active,
-.zoom-out-leave-active {
-  transition: opacity 0.1 ease-in-out, transform 0.15s ease-out;
-}
-
-.zoom-out-enter-from,
-.zoom-out-leave-to {
-  opacity: 0;
-  transform: scale(0);
-}
-
-// zoom-fade
-.zoom-fade-enter-active,
-.zoom-fade-leave-active {
-  transition: transform 0.2s, opacity 0.3s ease-out;
-}
-
-.zoom-fade-enter-from {
-  opacity: 0;
-  transform: scale(0.92);
-}
-
-.zoom-fade-leave-to {
-  opacity: 0;
-  transform: scale(1.06);
-}
diff --git a/src/design/var/breakpoint.less b/src/design/var/breakpoint.less
deleted file mode 100644
index 793e826..0000000
--- a/src/design/var/breakpoint.less
+++ /dev/null
@@ -1,33 +0,0 @@
-// =================================
-// ==============灞忓箷鏂偣============
-// =================================
-
-// Extra small screen / phone
-@screen-xs: 480px;
-@screen-xs-min: @screen-xs;
-
-// Small screen / tablet
-@screen-sm: 576px;
-@screen-sm-min: @screen-sm;
-
-// Medium screen / desktop
-@screen-md: 768px;
-@screen-md-min: @screen-md;
-
-// Large screen / wide desktop
-@screen-lg: 992px;
-@screen-lg-min: @screen-lg;
-
-// Extra large screen / full hd
-@screen-xl: 1200px;
-@screen-xl-min: @screen-xl;
-
-// Extra extra large screen / large desktop
-@screen-2xl: 1600px;
-@screen-2xl-min: @screen-2xl;
-
-@screen-xs-max: (@screen-sm-min - 1px);
-@screen-sm-max: (@screen-md-min - 1px);
-@screen-md-max: (@screen-lg-min - 1px);
-@screen-lg-max: (@screen-xl-min - 1px);
-@screen-xl-max: (@screen-2xl-min - 1px);
diff --git a/src/design/var/easing.less b/src/design/var/easing.less
deleted file mode 100644
index e19735f..0000000
--- a/src/design/var/easing.less
+++ /dev/null
@@ -1,18 +0,0 @@
-// =================================
-// ==============鍔ㄧ敾鍑芥暟-===========
-// =================================
-
-@ease-base-out: cubic-bezier(0.7, 0.3, 0.1, 1);
-@ease-base-in: cubic-bezier(0.9, 0, 0.3, 0.7);
-@ease-out: cubic-bezier(0.215, 0.61, 0.355, 1);
-@ease-in: cubic-bezier(0.55, 0.055, 0.675, 0.19);
-@ease-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);
-@ease-out-back: cubic-bezier(0.12, 0.4, 0.29, 1.46);
-@ease-in-back: cubic-bezier(0.71, -0.46, 0.88, 0.6);
-@ease-in-out-back: cubic-bezier(0.71, -0.46, 0.29, 1.46);
-@ease-out-circ: cubic-bezier(0.08, 0.82, 0.17, 1);
-@ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.34);
-@ease-in-out-circ: cubic-bezier(0.78, 0.14, 0.15, 0.86);
-@ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);
-@ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);
-@ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);
diff --git a/src/design/var/index.less b/src/design/var/index.less
deleted file mode 100644
index 3fa2133..0000000
--- a/src/design/var/index.less
+++ /dev/null
@@ -1,42 +0,0 @@
-@import (reference) '../color.less';
-@import 'easing';
-@import 'breakpoint';
-
-@namespace: jeecg;
-
-// tabs
-// updateBy:sunjianlei---updateDate:2021-09-03---淇敼tab鍒囨崲鏍忔牱寮忥細鏇存敼楂樺害
-@multiple-height: 30px;
-@multiple-card-height: 50px;
-@multiple-smooth-height: 50px;
-
-// headers
-@header-height: 48px;
-
-// logo width
-@logo-width: 32px;
-
-//
-@side-drag-z-index: 200;
-
-@page-loading-z-index: 10000;
-
-@lock-page-z-index: 3000;
-
-@layout-header-fixed-z-index: 500;
-
-@multiple-tab-fixed-z-index: 505;
-
-@layout-sider-fixed-z-index: 510;
-
-@layout-mix-sider-fixed-z-index: 550;
-
-@preview-comp-z-index: 1000;
-
-@page-footer-z-index: 99;
-
-.bem(@n; @content) {
-  @{namespace}-@{n} {
-    @content();
-  }
-}
diff --git a/src/directives/clickOutside.ts b/src/directives/clickOutside.ts
deleted file mode 100644
index fa580c9..0000000
--- a/src/directives/clickOutside.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import { on } from '/@/utils/domUtils';
-import { isServer } from '/@/utils/is';
-import type { ComponentPublicInstance, DirectiveBinding, ObjectDirective } from 'vue';
-
-type DocumentHandler = <T extends MouseEvent>(mouseup: T, mousedown: T) => void;
-
-type FlushList = Map<
-  HTMLElement,
-  {
-    documentHandler: DocumentHandler;
-    bindingFn: (...args: unknown[]) => unknown;
-  }
->;
-
-const nodeList: FlushList = new Map();
-
-let startClick: MouseEvent;
-
-if (!isServer) {
-  on(document, 'mousedown', (e: MouseEvent) => (startClick = e));
-  on(document, 'mouseup', (e: MouseEvent) => {
-    for (const { documentHandler } of nodeList.values()) {
-      documentHandler(e, startClick);
-    }
-  });
-}
-
-function createDocumentHandler(el: HTMLElement, binding: DirectiveBinding): DocumentHandler {
-  let excludes: HTMLElement[] = [];
-  if (Array.isArray(binding.arg)) {
-    excludes = binding.arg;
-  } else {
-    // due to current implementation on binding type is wrong the type casting is necessary here
-    excludes.push(binding.arg as unknown as HTMLElement);
-  }
-  return function (mouseup, mousedown) {
-    const popperRef = (
-      binding.instance as ComponentPublicInstance<{
-        popperRef: Nullable<HTMLElement>;
-      }>
-    ).popperRef;
-    const mouseUpTarget = mouseup.target as Node;
-    const mouseDownTarget = mousedown.target as Node;
-    const isBound = !binding || !binding.instance;
-    const isTargetExists = !mouseUpTarget || !mouseDownTarget;
-    const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget);
-    const isSelf = el === mouseUpTarget;
-
-    const isTargetExcluded =
-      (excludes.length && excludes.some((item) => item?.contains(mouseUpTarget))) ||
-      (excludes.length && excludes.includes(mouseDownTarget as HTMLElement));
-    const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget));
-    if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) {
-      return;
-    }
-    binding.value();
-  };
-}
-
-const ClickOutside: ObjectDirective = {
-  beforeMount(el, binding) {
-    nodeList.set(el, {
-      documentHandler: createDocumentHandler(el, binding),
-      bindingFn: binding.value,
-    });
-  },
-  updated(el, binding) {
-    nodeList.set(el, {
-      documentHandler: createDocumentHandler(el, binding),
-      bindingFn: binding.value,
-    });
-  },
-  unmounted(el) {
-    nodeList.delete(el);
-  },
-};
-
-export default ClickOutside;
diff --git a/src/directives/index.ts b/src/directives/index.ts
deleted file mode 100644
index 0329eb6..0000000
--- a/src/directives/index.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Configure and register global directives
- */
-import type { App } from 'vue';
-import { setupPermissionDirective } from './permission';
-import { setupLoadingDirective } from './loading';
-
-export function setupGlobDirectives(app: App) {
-  setupPermissionDirective(app);
-  setupLoadingDirective(app);
-}
diff --git a/src/directives/loading.ts b/src/directives/loading.ts
deleted file mode 100644
index c2f25c6..0000000
--- a/src/directives/loading.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { createLoading } from '/@/components/Loading';
-import type { Directive, App } from 'vue';
-
-const loadingDirective: Directive = {
-  mounted(el, binding) {
-    const tip = el.getAttribute('loading-tip');
-    const background = el.getAttribute('loading-background');
-    const size = el.getAttribute('loading-size');
-    const fullscreen = !!binding.modifiers.fullscreen;
-    const instance = createLoading(
-      {
-        tip,
-        background,
-        size: size || 'large',
-        loading: !!binding.value,
-        absolute: !fullscreen,
-      },
-      fullscreen ? document.body : el
-    );
-    el.instance = instance;
-  },
-  updated(el, binding) {
-    const instance = el.instance;
-    if (!instance) return;
-    instance.setTip(el.getAttribute('loading-tip'));
-    if (binding.oldValue !== binding.value) {
-      if (binding.oldValue !== binding.value) {
-        instance.setLoading?.(binding.value && !instance.loading);
-      }
-    }
-  },
-  unmounted(el) {
-    el?.instance?.close();
-  },
-};
-
-export function setupLoadingDirective(app: App) {
-  app.directive('loading', loadingDirective);
-}
-
-export default loadingDirective;
diff --git a/src/directives/permission.ts b/src/directives/permission.ts
deleted file mode 100644
index ca5d0fc..0000000
--- a/src/directives/permission.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Global authority directive
- * Used for fine-grained control of component permissions
- * @Example v-auth="RoleEnum.TEST"
- */
-import type { App, Directive, DirectiveBinding } from 'vue';
-
-import { usePermission } from '/@/hooks/web/usePermission';
-
-function isAuth(el: Element, binding: any) {
-  const { hasPermission } = usePermission();
-
-  const value = binding.value;
-  if (!value) return;
-  if (!hasPermission(value)) {
-    el.parentNode?.removeChild(el);
-  }
-}
-
-const mounted = (el: Element, binding: DirectiveBinding<any>) => {
-  isAuth(el, binding);
-};
-
-const authDirective: Directive = {
-  mounted,
-};
-
-export function setupPermissionDirective(app: App) {
-  app.directive('auth', authDirective);
-}
-
-export default authDirective;
diff --git a/src/directives/repeatClick.ts b/src/directives/repeatClick.ts
deleted file mode 100644
index d4ef150..0000000
--- a/src/directives/repeatClick.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Prevent repeated clicks
- * @Example v-repeat-click="()=>{}"
- */
-import { on, once } from '/@/utils/domUtils';
-import type { Directive, DirectiveBinding } from 'vue';
-
-const repeatDirective: Directive = {
-  beforeMount(el: Element, binding: DirectiveBinding<any>) {
-    let interval: Nullable<IntervalHandle> = null;
-    let startTime = 0;
-    const handler = (): void => binding?.value();
-    const clear = (): void => {
-      if (Date.now() - startTime < 100) {
-        handler();
-      }
-      interval && clearInterval(interval);
-      interval = null;
-    };
-
-    on(el, 'mousedown', (e: MouseEvent): void => {
-      if ((e as any).button !== 0) return;
-      startTime = Date.now();
-      once(document as any, 'mouseup', clear);
-      interval && clearInterval(interval);
-      interval = setInterval(handler, 100);
-    });
-  },
-};
-
-export default repeatDirective;
diff --git a/src/directives/ripple/index.less b/src/directives/ripple/index.less
deleted file mode 100644
index 9c0718e..0000000
--- a/src/directives/ripple/index.less
+++ /dev/null
@@ -1,21 +0,0 @@
-.ripple-container {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 0;
-  height: 0;
-  overflow: hidden;
-  pointer-events: none;
-}
-
-.ripple-effect {
-  position: relative;
-  z-index: 9999;
-  width: 1px;
-  height: 1px;
-  margin-top: 0;
-  margin-left: 0;
-  pointer-events: none;
-  border-radius: 50%;
-  transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);
-}
diff --git a/src/directives/ripple/index.ts b/src/directives/ripple/index.ts
deleted file mode 100644
index 6932264..0000000
--- a/src/directives/ripple/index.ts
+++ /dev/null
@@ -1,180 +0,0 @@
-import type { Directive } from 'vue';
-import './index.less';
-export interface RippleOptions {
-  event: string;
-  transition: number;
-}
-
-export interface RippleProto {
-  background?: string;
-  zIndex?: string;
-}
-
-export type EventType = Event & MouseEvent & TouchEvent;
-
-const options: RippleOptions = {
-  event: 'mousedown',
-  transition: 400,
-};
-
-const RippleDirective: Directive & RippleProto = {
-  beforeMount: (el: HTMLElement, binding) => {
-    if (binding.value === false) return;
-
-    const bg = el.getAttribute('ripple-background');
-    setProps(Object.keys(binding.modifiers), options);
-
-    const background = bg || RippleDirective.background;
-    const zIndex = RippleDirective.zIndex;
-
-    el.addEventListener(options.event, (event: EventType) => {
-      rippler({
-        event,
-        el,
-        background,
-        zIndex,
-      });
-    });
-  },
-  updated(el, binding) {
-    if (!binding.value) {
-      el?.clearRipple?.();
-      return;
-    }
-    const bg = el.getAttribute('ripple-background');
-    el?.setBackground?.(bg);
-  },
-};
-
-function rippler({ event, el, zIndex, background }: { event: EventType; el: HTMLElement } & RippleProto) {
-  const targetBorder = parseInt(getComputedStyle(el).borderWidth.replace('px', ''));
-  const clientX = event.clientX || event.touches[0].clientX;
-  const clientY = event.clientY || event.touches[0].clientY;
-
-  const rect = el.getBoundingClientRect();
-  const { left, top } = rect;
-  const { offsetWidth: width, offsetHeight: height } = el;
-  const { transition } = options;
-  const dx = clientX - left;
-  const dy = clientY - top;
-  const maxX = Math.max(dx, width - dx);
-  const maxY = Math.max(dy, height - dy);
-  const style = window.getComputedStyle(el);
-  const radius = Math.sqrt(maxX * maxX + maxY * maxY);
-  const border = targetBorder > 0 ? targetBorder : 0;
-
-  const ripple = document.createElement('div');
-  const rippleContainer = document.createElement('div');
-
-  // Styles for ripple
-  ripple.className = 'ripple';
-
-  Object.assign(ripple.style ?? {}, {
-    marginTop: '0px',
-    marginLeft: '0px',
-    width: '1px',
-    height: '1px',
-    transition: `all ${transition}ms cubic-bezier(0.4, 0, 0.2, 1)`,
-    borderRadius: '50%',
-    pointerEvents: 'none',
-    position: 'relative',
-    zIndex: zIndex ?? '9999',
-    backgroundColor: background ?? 'rgba(0, 0, 0, 0.12)',
-  });
-
-  // Styles for rippleContainer
-  rippleContainer.className = 'ripple-container';
-  Object.assign(rippleContainer.style ?? {}, {
-    position: 'absolute',
-    left: `${0 - border}px`,
-    top: `${0 - border}px`,
-    height: '0',
-    width: '0',
-    pointerEvents: 'none',
-    overflow: 'hidden',
-  });
-
-  const storedTargetPosition = el.style.position.length > 0 ? el.style.position : getComputedStyle(el).position;
-
-  if (storedTargetPosition !== 'relative') {
-    el.style.position = 'relative';
-  }
-
-  rippleContainer.appendChild(ripple);
-  el.appendChild(rippleContainer);
-
-  Object.assign(ripple.style, {
-    marginTop: `${dy}px`,
-    marginLeft: `${dx}px`,
-  });
-
-  const { borderTopLeftRadius, borderTopRightRadius, borderBottomLeftRadius, borderBottomRightRadius } = style;
-  Object.assign(rippleContainer.style, {
-    width: `${width}px`,
-    height: `${height}px`,
-    direction: 'ltr',
-    borderTopLeftRadius,
-    borderTopRightRadius,
-    borderBottomLeftRadius,
-    borderBottomRightRadius,
-  });
-
-  setTimeout(() => {
-    const wh = `${radius * 2}px`;
-    Object.assign(ripple.style ?? {}, {
-      width: wh,
-      height: wh,
-      marginLeft: `${dx - radius}px`,
-      marginTop: `${dy - radius}px`,
-    });
-  }, 0);
-
-  function clearRipple() {
-    setTimeout(() => {
-      ripple.style.backgroundColor = 'rgba(0, 0, 0, 0)';
-    }, 250);
-
-    setTimeout(() => {
-      rippleContainer?.parentNode?.removeChild(rippleContainer);
-    }, 850);
-    el.removeEventListener('mouseup', clearRipple, false);
-    el.removeEventListener('mouseleave', clearRipple, false);
-    el.removeEventListener('dragstart', clearRipple, false);
-    setTimeout(() => {
-      let clearPosition = true;
-      for (let i = 0; i < el.childNodes.length; i++) {
-        if ((el.childNodes[i] as Recordable).className === 'ripple-container') {
-          clearPosition = false;
-        }
-      }
-
-      if (clearPosition) {
-        el.style.position = storedTargetPosition !== 'static' ? storedTargetPosition : '';
-      }
-    }, options.transition + 260);
-  }
-
-  if (event.type === 'mousedown') {
-    el.addEventListener('mouseup', clearRipple, false);
-    el.addEventListener('mouseleave', clearRipple, false);
-    el.addEventListener('dragstart', clearRipple, false);
-  } else {
-    clearRipple();
-  }
-
-  (el as Recordable).setBackground = (bgColor: string) => {
-    if (!bgColor) {
-      return;
-    }
-    ripple.style.backgroundColor = bgColor;
-  };
-}
-
-function setProps(modifiers: Recordable, props: Recordable) {
-  modifiers.forEach((item: Recordable) => {
-    if (isNaN(Number(item))) props.event = item;
-    else props.transition = item;
-  });
-}
-
-export default RippleDirective;
diff --git a/src/enums/CompTypeEnum.ts b/src/enums/CompTypeEnum.ts
deleted file mode 100644
index 2ac5a19..0000000
--- a/src/enums/CompTypeEnum.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 缁勪欢绫诲瀷
- */
-export enum CompTypeEnum {
-  //鍗曢��
-  Radio = 'radio',
-  //鎸夐挳鏍峰紡鍗曢��
-  RadioButton = 'radioButton',
-  //涓嬫媺妗�
-  Select = 'select',
-  //鍒楄〃
-  List = 'list',
-  //寮�鍏�
-  Switch = 'switch',
-  //涓嬫媺鏍�
-  SelTree = 'sel_tree',
-  //鍒嗙被瀛楀吀鏍�
-  CatTree = 'cat_tree',
-  //涓嬫媺鎼滅储
-  SelSearch = 'search',
-  //鐢ㄦ埛鐜板湪妗�
-  SelUser = 'sel_user',
-  //澶嶉�夋
-  Checkbox = 'checkbox',
-  //澶氶�夊垪琛�
-  ListMulti = 'list_multi',
-  //鍖哄煙閫夋嫨
-  Pca = 'pca',
-  Popup = 'popup',
-  //閮ㄩ棬閫夋嫨
-  SelDepart = 'sel_depart',
-}
diff --git a/src/enums/DateTypeEnum.ts b/src/enums/DateTypeEnum.ts
deleted file mode 100644
index 9ccf88c..0000000
--- a/src/enums/DateTypeEnum.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * 鏃ユ湡绫诲瀷
- */
-export enum DateTypeEnum {
-  Date = 'date',
-  Datetime = 'datetime',
-  Time = 'time',
-}
diff --git a/src/enums/appEnum.ts b/src/enums/appEnum.ts
deleted file mode 100644
index 5d4b1b1..0000000
--- a/src/enums/appEnum.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-export const SIDE_BAR_MINI_WIDTH = 48;
-export const SIDE_BAR_SHOW_TIT_MINI_WIDTH = 80;
-
-// 鏍囩椤垫牱寮�
-export enum TabsThemeEnum {
-  // 鍦嗘粦
-  SMOOTH = 'smooth',
-  // 鍗$墖
-  CARD = 'card',
-  // 鏋佺畝
-  SIMPLE = 'simple',
-}
-
-export enum ContentEnum {
-  // auto width
-  FULL = 'full',
-  // fixed width
-  FIXED = 'fixed',
-}
-
-// menu theme enum
-export enum ThemeEnum {
-  DARK = 'dark',
-  LIGHT = 'light',
-}
-
-export enum SettingButtonPositionEnum {
-  AUTO = 'auto',
-  HEADER = 'header',
-  FIXED = 'fixed',
-}
-
-export enum SessionTimeoutProcessingEnum {
-  ROUTE_JUMP,
-  PAGE_COVERAGE,
-}
-
-/**
- * 鏉冮檺妯″紡
- */
-export enum PermissionModeEnum {
-  // role
-  ROLE = 'ROLE',
-  // 鍚庡彴
-  BACK = 'BACK',
-  // route mapping
-  ROUTE_MAPPING = 'ROUTE_MAPPING',
-}
-
-//  Route switching animation
-export enum RouterTransitionEnum {
-  ZOOM_FADE = 'zoom-fade',
-  ZOOM_OUT = 'zoom-out',
-  FADE_SIDE = 'fade-slide',
-  FADE = 'fade',
-  FADE_BOTTOM = 'fade-bottom',
-  FADE_SCALE = 'fade-scale',
-}
diff --git a/src/enums/breakpointEnum.ts b/src/enums/breakpointEnum.ts
deleted file mode 100644
index 93acc1a..0000000
--- a/src/enums/breakpointEnum.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-export enum sizeEnum {
-  XS = 'XS',
-  SM = 'SM',
-  MD = 'MD',
-  LG = 'LG',
-  XL = 'XL',
-  XXL = 'XXL',
-}
-
-export enum screenEnum {
-  XS = 480,
-  SM = 576,
-  MD = 768,
-  LG = 992,
-  XL = 1200,
-  XXL = 1600,
-}
-
-const screenMap = new Map<sizeEnum, number>();
-
-screenMap.set(sizeEnum.XS, screenEnum.XS);
-screenMap.set(sizeEnum.SM, screenEnum.SM);
-screenMap.set(sizeEnum.MD, screenEnum.MD);
-screenMap.set(sizeEnum.LG, screenEnum.LG);
-screenMap.set(sizeEnum.XL, screenEnum.XL);
-screenMap.set(sizeEnum.XXL, screenEnum.XXL);
-
-export { screenMap };
diff --git a/src/enums/cacheEnum.ts b/src/enums/cacheEnum.ts
deleted file mode 100644
index c3bb4ae..0000000
--- a/src/enums/cacheEnum.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-// token key
-export const TOKEN_KEY = 'TOKEN__';
-
-export const LOCALE_KEY = 'LOCALE__';
-
-// user info key
-export const USER_INFO_KEY = 'USER__INFO__';
-
-// role info key
-export const ROLES_KEY = 'ROLES__KEY__';
-
-// dict info key
-export const DB_DICT_DATA_KEY = 'UI_CACHE_DB_DICT_DATA';
-
-// project config key
-export const PROJ_CFG_KEY = 'PROJ__CFG__KEY__';
-
-// lock info
-export const LOCK_INFO_KEY = 'LOCK__INFO__KEY__';
-
-export const MULTIPLE_TABS_KEY = 'MULTIPLE_TABS__KEY__';
-
-export const APP_DARK_MODE_KEY_ = '__APP__DARK__MODE__';
-
-// base global local key
-export const APP_LOCAL_CACHE_KEY = 'COMMON__LOCAL__KEY__';
-
-// base global session key
-export const APP_SESSION_CACHE_KEY = 'COMMON__SESSION__KEY__';
-// 绉熸埛 key
-export const TENANT_ID = 'TENANT_ID';
-// login info key
-export const LOGIN_INFO_KEY = 'LOGIN__INFO__';
-
-// 鑱婂ぉUID key
-export const JEECG_CHAT_UID = 'JEECG_CHAT_UID';
-
-export enum CacheTypeEnum {
-  SESSION,
-  LOCAL,
-}
diff --git a/src/enums/exceptionEnum.ts b/src/enums/exceptionEnum.ts
deleted file mode 100644
index d28f4d0..0000000
--- a/src/enums/exceptionEnum.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * @description: Exception related enumeration
- */
-export enum ExceptionEnum {
-  // page not access
-  PAGE_NOT_ACCESS = 403,
-
-  // page not found
-  PAGE_NOT_FOUND = 404,
-
-  // error
-  ERROR = 500,
-
-  // net work error
-  NET_WORK_ERROR = 10000,
-
-  // No data on the page. In fact, it is not an exception page
-  PAGE_NOT_DATA = 10100,
-}
-
-export enum ErrorTypeEnum {
-  VUE = 'vue',
-  SCRIPT = 'script',
-  RESOURCE = 'resource',
-  AJAX = 'ajax',
-  PROMISE = 'promise',
-}
diff --git a/src/enums/httpEnum.ts b/src/enums/httpEnum.ts
deleted file mode 100644
index 7ce5819..0000000
--- a/src/enums/httpEnum.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * @description: Request result set
- */
-export enum ResultEnum {
-  SUCCESS = 0,
-  ERROR = 1,
-  TIMEOUT = 401,
-  TYPE = 'success',
-}
-
-/**
- * @description: request method
- */
-export enum RequestEnum {
-  GET = 'GET',
-  POST = 'POST',
-  PUT = 'PUT',
-  DELETE = 'DELETE',
-}
-
-/**
- * @description:  contentTyp
- */
-export enum ContentTypeEnum {
-  // json
-  JSON = 'application/json;charset=UTF-8',
-  // form-data qs
-  FORM_URLENCODED = 'application/x-www-form-urlencoded;charset=UTF-8',
-  // form-data  upload
-  FORM_DATA = 'multipart/form-data;charset=UTF-8',
-}
-
-/**
- * 璇锋眰header
- * @description:  contentTyp
- */
-export enum ConfigEnum {
-  // TOKEN
-  TOKEN = 'X-Access-Token',
-  // TIMESTAMP
-  TIMESTAMP = 'X-TIMESTAMP',
-  // Sign
-  Sign = 'X-Sign',
-  // 绉熸埛id
-  TENANT_ID = 'X-Tenant-Id',
-  // 鐗堟湰
-  VERSION = 'X-Version',
-  // 浣庝唬鐮佸簲鐢↖D
-  X_LOW_APP_ID = 'X-Low-App-ID',
-}
diff --git a/src/enums/jeecgEnum.ts b/src/enums/jeecgEnum.ts
deleted file mode 100644
index 4239ea6..0000000
--- a/src/enums/jeecgEnum.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * JInput缁勪欢绫诲瀷
- */
-export enum JInputTypeEnum {
-  //妯$硦
-  JINPUT_QUERY_LIKE = 'like',
-  //闈�
-  JINPUT_QUERY_NE = 'ne',
-  //澶т簬绛変簬
-  JINPUT_QUERY_GE = 'ge',
-  //灏忎簬绛変簬
-  JINPUT_QUERY_LE = 'le',
-}
-
-/**
- * 闈㈡澘璁捐鍣ㄩ渶瑕佺殑甯搁噺瀹氫箟
- */
-export enum JDragConfigEnum {
-  //baseURL
-  DRAG_BASE_URL = 'drag-base-url',
-  //鎷栨嫿缂撳瓨鍓嶇紑
-  DRAG_CACHE_PREFIX = 'drag-cache:',
-}
diff --git a/src/enums/menuEnum.ts b/src/enums/menuEnum.ts
deleted file mode 100644
index 89cfa9f..0000000
--- a/src/enums/menuEnum.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * @description: menu type
- */
-export enum MenuTypeEnum {
-  // left menu
-  SIDEBAR = 'sidebar',
-
-  MIX_SIDEBAR = 'mix-sidebar',
-  // mixin menu
-  MIX = 'mix',
-  // top menu
-  TOP_MENU = 'top-menu',
-}
-
-// 鎶樺彔瑙﹀彂鍣ㄤ綅缃�
-export enum TriggerEnum {
-  // 涓嶆樉绀�
-  NONE = 'NONE',
-  // 鑿滃崟搴曢儴
-  FOOTER = 'FOOTER',
-  // 澶撮儴
-  HEADER = 'HEADER',
-}
-
-export type Mode = 'vertical' | 'vertical-right' | 'horizontal' | 'inline';
-
-// menu mode
-export enum MenuModeEnum {
-  VERTICAL = 'vertical',
-  HORIZONTAL = 'horizontal',
-  VERTICAL_RIGHT = 'vertical-right',
-  INLINE = 'inline',
-}
-
-export enum MenuSplitTyeEnum {
-  NONE,
-  TOP,
-  LEFT,
-}
-
-export enum TopMenuAlignEnum {
-  CENTER = 'center',
-  START = 'start',
-  END = 'end',
-}
-
-export enum MixSidebarTriggerEnum {
-  HOVER = 'hover',
-  CLICK = 'click',
-}
diff --git a/src/enums/pageEnum.ts b/src/enums/pageEnum.ts
deleted file mode 100644
index 7c48680..0000000
--- a/src/enums/pageEnum.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-export enum PageEnum {
-	// basic login path
-	BASE_LOGIN = '/login',
-	// basic home path
-	BASE_HOME = '/dashboard/workshop',
-	// error page path
-	ERROR_PAGE = '/exception',
-	// error log page path
-	ERROR_LOG_PAGE = '/error-log/list',
-	// auth2鐧诲綍璺敱璺緞
-	OAUTH2_LOGIN_PAGE_PATH = '/oauth2-app/login',
-	//鏂囦欢璺敱
-	SYS_FILES_PATH = '/file/share',
-}
diff --git a/src/enums/roleEnum.ts b/src/enums/roleEnum.ts
deleted file mode 100644
index 857868d..0000000
--- a/src/enums/roleEnum.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export enum RoleEnum {
-  // super admin
-  SUPER = 'super',
-
-  // tester
-  TEST = 'test',
-}
diff --git a/src/enums/sizeEnum.ts b/src/enums/sizeEnum.ts
deleted file mode 100644
index 4348c2c..0000000
--- a/src/enums/sizeEnum.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-export enum SizeEnum {
-  DEFAULT = 'default',
-  SMALL = 'small',
-  LARGE = 'large',
-}
-
-export enum SizeNumberEnum {
-  DEFAULT = 48,
-  SMALL = 16,
-  LARGE = 64,
-}
-
-export enum ScreenSizeEnum {
-  XS = 480,
-  SM = 576,
-  MD = 768,
-  LG = 992,
-  XL = 1200,
-}
-
-export const sizeMap: Map<SizeEnum, SizeNumberEnum> = (() => {
-  const map = new Map<SizeEnum, SizeNumberEnum>();
-  map.set(SizeEnum.DEFAULT, SizeNumberEnum.DEFAULT);
-  map.set(SizeEnum.SMALL, SizeNumberEnum.SMALL);
-  map.set(SizeEnum.LARGE, SizeNumberEnum.LARGE);
-  return map;
-})();
diff --git a/src/hooks/component/useFormItem.ts b/src/hooks/component/useFormItem.ts
deleted file mode 100644
index 8f9eeb9..0000000
--- a/src/hooks/component/useFormItem.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import type { UnwrapRef, Ref, WritableComputedRef, DeepReadonly } from 'vue';
-import { reactive, readonly, computed, getCurrentInstance, watchEffect, unref, nextTick, toRaw } from 'vue';
-import { Form } from 'ant-design-vue';
-import { FormItemContext } from 'ant-design-vue/es/form/FormItemContext';
-
-import { isEqual } from 'lodash-es';
-export function useRuleFormItem<T extends Recordable, K extends keyof T, V = UnwrapRef<T[K]>>(
-  props: T,
-  key?: K,
-  changeEvent?,
-  emitData?: Ref<any[] | undefined>
-): [WritableComputedRef<V>, (val: V) => void, DeepReadonly<V>, FormItemContext];
-export function useRuleFormItem<T extends Recordable>(props: T, key: keyof T = 'value', changeEvent = 'change', emitData?: Ref<any[]>) {
-  const instance = getCurrentInstance();
-  const emit = instance?.emit;
-  const formItemContext = Form.useInjectFormItemContext();
-
-  const innerState = reactive({
-    value: props[key],
-  });
-
-  const defaultState = readonly(innerState);
-
-  const setState = (val: UnwrapRef<T[keyof T]>): void => {
-    innerState.value = val as T[keyof T];
-  };
-
-  watchEffect(() => {
-    innerState.value = props[key];
-  });
-
-  const state: any = computed({
-    get() {
-      //淇澶氶�夋椂绌哄�兼樉绀洪棶棰橈紙鍏煎鍊间负0鐨勬儏鍐碉級
-      return innerState.value == null || innerState.value === '' ? [] : innerState.value;
-    },
-    set(value) {
-      if (isEqual(value, defaultState.value)) return;
-
-      innerState.value = value as T[keyof T];
-      nextTick(() => {
-        emit?.(changeEvent, value, ...(toRaw(unref(emitData)) || []));
-        // https://antdv.com/docs/vue/migration-v3-cn
-        // antDv3鍗囩骇鍚庨渶瑕佽皟鐢ㄨ繖涓柟娉曟洿鏂版牎楠岀殑鍊�
-        nextTick(() => formItemContext.onFieldChange());
-      });
-    },
-  });
-
-  return [state, setState, defaultState, formItemContext];
-}
diff --git a/src/hooks/component/usePageContext.ts b/src/hooks/component/usePageContext.ts
deleted file mode 100644
index 12cc160..0000000
--- a/src/hooks/component/usePageContext.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import type { InjectionKey, ComputedRef, Ref } from 'vue';
-import { createContext, useContext } from '/@/hooks/core/useContext';
-
-export interface PageContextProps {
-  contentHeight: ComputedRef<number>;
-  pageHeight: Ref<number>;
-  setPageHeight: (height: number) => Promise<void>;
-}
-
-const key: InjectionKey<PageContextProps> = Symbol();
-
-export function createPageContext(context: PageContextProps) {
-  return createContext<PageContextProps>(context, key, { native: true });
-}
-
-export function usePageContext() {
-  return useContext<PageContextProps>(key);
-}
diff --git a/src/hooks/core/onMountedOrActivated.ts b/src/hooks/core/onMountedOrActivated.ts
deleted file mode 100644
index ffabf18..0000000
--- a/src/hooks/core/onMountedOrActivated.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { nextTick, onMounted, onActivated } from 'vue';
-
-export function onMountedOrActivated(hook: Fn) {
-  let mounted: boolean;
-
-  onMounted(() => {
-    hook();
-    nextTick(() => {
-      mounted = true;
-    });
-  });
-
-  onActivated(() => {
-    if (mounted) {
-      hook();
-    }
-  });
-}
diff --git a/src/hooks/core/useAttrs.ts b/src/hooks/core/useAttrs.ts
deleted file mode 100644
index ea96575..0000000
--- a/src/hooks/core/useAttrs.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { getCurrentInstance, reactive, shallowRef, watchEffect } from 'vue';
-import type { Ref } from 'vue';
-
-interface Params {
-  excludeListeners?: boolean;
-  excludeKeys?: string[];
-  excludeDefaultKeys?: boolean;
-}
-
-const DEFAULT_EXCLUDE_KEYS = ['class', 'style'];
-const LISTENER_PREFIX = /^on[A-Z]/;
-
-export function entries<T>(obj: Recordable<T>): [string, T][] {
-  return Object.keys(obj).map((key: string) => [key, obj[key]]);
-}
-
-export function useAttrs(params: Params = {}): Ref<Recordable> | {} {
-  const instance = getCurrentInstance();
-  if (!instance) return {};
-
-  const { excludeListeners = false, excludeKeys = [], excludeDefaultKeys = true } = params;
-  const attrs = shallowRef({});
-  const allExcludeKeys = excludeKeys.concat(excludeDefaultKeys ? DEFAULT_EXCLUDE_KEYS : []);
-
-  // Since attrs are not reactive, make it reactive instead of doing in `onUpdated` hook for better performance
-  instance.attrs = reactive(instance.attrs);
-
-  watchEffect(() => {
-    const res = entries(instance.attrs).reduce((acm, [key, val]) => {
-      if (!allExcludeKeys.includes(key) && !(excludeListeners && LISTENER_PREFIX.test(key))) {
-        acm[key] = val;
-      }
-
-      return acm;
-    }, {} as Recordable);
-
-    attrs.value = res;
-  });
-
-  return attrs;
-}
diff --git a/src/hooks/core/useContext.ts b/src/hooks/core/useContext.ts
deleted file mode 100644
index 0f039eb..0000000
--- a/src/hooks/core/useContext.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import {
-  InjectionKey,
-  provide,
-  inject,
-  reactive,
-  readonly as defineReadonly,
-  // defineComponent,
-  UnwrapRef,
-} from 'vue';
-
-export interface CreateContextOptions {
-  readonly?: boolean;
-  createProvider?: boolean;
-  native?: boolean;
-}
-
-type ShallowUnwrap<T> = {
-  [P in keyof T]: UnwrapRef<T[P]>;
-};
-
-export function createContext<T>(context: any, key: InjectionKey<T> = Symbol(), options: CreateContextOptions = {}) {
-  const { readonly = true, createProvider = false, native = false } = options;
-
-  const state = reactive(context);
-  const provideData = readonly ? defineReadonly(state) : state;
-  !createProvider && provide(key, native ? context : provideData);
-
-  return {
-    state,
-  };
-}
-
-export function useContext<T>(key: InjectionKey<T>, native?: boolean): T;
-export function useContext<T>(key: InjectionKey<T>, defaultValue?: any, native?: boolean): T;
-
-export function useContext<T>(key: InjectionKey<T> = Symbol(), defaultValue?: any): ShallowUnwrap<T> {
-  return inject(key, defaultValue || {});
-}
diff --git a/src/hooks/core/useLockFn.ts b/src/hooks/core/useLockFn.ts
deleted file mode 100644
index 141073b..0000000
--- a/src/hooks/core/useLockFn.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { ref, unref } from 'vue';
-
-export function useLockFn<P extends any[] = any[], V extends any = any>(fn: (...args: P) => Promise<V>) {
-  const lockRef = ref(false);
-  return async function (...args: P) {
-    if (unref(lockRef)) return;
-    lockRef.value = true;
-    try {
-      const ret = await fn(...args);
-      lockRef.value = false;
-      return ret;
-    } catch (e) {
-      lockRef.value = false;
-      throw e;
-    }
-  };
-}
diff --git a/src/hooks/core/useRefs.ts b/src/hooks/core/useRefs.ts
deleted file mode 100644
index 180bb14..0000000
--- a/src/hooks/core/useRefs.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import type { Ref } from 'vue';
-import { ref, onBeforeUpdate } from 'vue';
-
-export function useRefs(): [Ref<HTMLElement[]>, (index: number) => (el: HTMLElement) => void] {
-  const refs = ref([]) as Ref<HTMLElement[]>;
-
-  onBeforeUpdate(() => {
-    refs.value = [];
-  });
-
-  const setRefs = (index: number) => (el: HTMLElement) => {
-    refs.value[index] = el;
-  };
-
-  return [refs, setRefs];
-}
diff --git a/src/hooks/core/useTimeout.ts b/src/hooks/core/useTimeout.ts
deleted file mode 100644
index a549ac2..0000000
--- a/src/hooks/core/useTimeout.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import { ref, watch } from 'vue';
-import { tryOnUnmounted } from '@vueuse/core';
-import { isFunction } from '/@/utils/is';
-
-export function useTimeoutFn(handle: Fn<any>, wait: number, native = false) {
-  if (!isFunction(handle)) {
-    throw new Error('handle is not Function!');
-  }
-
-  const { readyRef, stop, start } = useTimeoutRef(wait);
-  if (native) {
-    handle();
-  } else {
-    watch(
-      readyRef,
-      (maturity) => {
-        maturity && handle();
-      },
-      { immediate: false }
-    );
-  }
-  return { readyRef, stop, start };
-}
-
-export function useTimeoutRef(wait: number) {
-  const readyRef = ref(false);
-
-  let timer: TimeoutHandle;
-  function stop(): void {
-    readyRef.value = false;
-    timer && window.clearTimeout(timer);
-  }
-  function start(): void {
-    stop();
-    timer = setTimeout(() => {
-      readyRef.value = true;
-    }, wait);
-  }
-
-  start();
-
-  tryOnUnmounted(stop);
-
-  return { readyRef, stop, start };
-}
diff --git a/src/hooks/event/useBreakpoint.ts b/src/hooks/event/useBreakpoint.ts
deleted file mode 100644
index 01bbbec..0000000
--- a/src/hooks/event/useBreakpoint.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-import { ref, computed, ComputedRef, unref } from 'vue';
-import { useEventListener } from '/@/hooks/event/useEventListener';
-import { screenMap, sizeEnum, screenEnum } from '/@/enums/breakpointEnum';
-
-let globalScreenRef: ComputedRef<sizeEnum | undefined>;
-let globalWidthRef: ComputedRef<number>;
-let globalRealWidthRef: ComputedRef<number>;
-
-export interface CreateCallbackParams {
-  screen: ComputedRef<sizeEnum | undefined>;
-  width: ComputedRef<number>;
-  realWidth: ComputedRef<number>;
-  screenEnum: typeof screenEnum;
-  screenMap: Map<sizeEnum, number>;
-  sizeEnum: typeof sizeEnum;
-}
-
-export function useBreakpoint() {
-  return {
-    screenRef: computed(() => unref(globalScreenRef)),
-    widthRef: globalWidthRef,
-    screenEnum,
-    realWidthRef: globalRealWidthRef,
-  };
-}
-
-// Just call it once
-export function createBreakpointListen(fn?: (opt: CreateCallbackParams) => void) {
-  const screenRef = ref<sizeEnum>(sizeEnum.XL);
-  const realWidthRef = ref(window.innerWidth);
-
-  function getWindowWidth() {
-    const width = document.body.clientWidth;
-    const xs = screenMap.get(sizeEnum.XS)!;
-    const sm = screenMap.get(sizeEnum.SM)!;
-    const md = screenMap.get(sizeEnum.MD)!;
-    const lg = screenMap.get(sizeEnum.LG)!;
-    const xl = screenMap.get(sizeEnum.XL)!;
-    if (width < xs) {
-      screenRef.value = sizeEnum.XS;
-    } else if (width < sm) {
-      screenRef.value = sizeEnum.SM;
-    } else if (width < md) {
-      screenRef.value = sizeEnum.MD;
-    } else if (width < lg) {
-      screenRef.value = sizeEnum.LG;
-    } else if (width < xl) {
-      screenRef.value = sizeEnum.XL;
-    } else {
-      screenRef.value = sizeEnum.XXL;
-    }
-    realWidthRef.value = width;
-  }
-
-  useEventListener({
-    el: window,
-    name: 'resize',
-
-    listener: () => {
-      getWindowWidth();
-      resizeFn();
-    },
-    // wait: 100,
-  });
-
-  getWindowWidth();
-  globalScreenRef = computed(() => unref(screenRef));
-  globalWidthRef = computed((): number => screenMap.get(unref(screenRef)!)!);
-  globalRealWidthRef = computed((): number => unref(realWidthRef));
-
-  function resizeFn() {
-    fn?.({
-      screen: globalScreenRef,
-      width: globalWidthRef,
-      realWidth: globalRealWidthRef,
-      screenEnum,
-      screenMap,
-      sizeEnum,
-    });
-  }
-
-  resizeFn();
-  return {
-    screenRef: globalScreenRef,
-    screenEnum,
-    widthRef: globalWidthRef,
-    realWidthRef: globalRealWidthRef,
-  };
-}
diff --git a/src/hooks/event/useEventListener.ts b/src/hooks/event/useEventListener.ts
deleted file mode 100644
index 35e58be..0000000
--- a/src/hooks/event/useEventListener.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import type { Ref } from 'vue';
-import { ref, watch, unref } from 'vue';
-import { useThrottleFn, useDebounceFn } from '@vueuse/core';
-
-export type RemoveEventFn = () => void;
-export interface UseEventParams {
-  el?: Element | Ref<Element | undefined> | Window | any;
-  name: string;
-  listener: EventListener;
-  options?: boolean | AddEventListenerOptions;
-  autoRemove?: boolean;
-  isDebounce?: boolean;
-  wait?: number;
-}
-export function useEventListener({ el = window, name, listener, options, autoRemove = true, isDebounce = true, wait = 80 }: UseEventParams): {
-  removeEvent: RemoveEventFn;
-} {
-  /* eslint-disable-next-line */
-  let remove: RemoveEventFn = () => {};
-  const isAddRef = ref(false);
-
-  if (el) {
-    const element = ref(el as Element) as Ref<Element>;
-
-    const handler = isDebounce ? useDebounceFn(listener, wait) : useThrottleFn(listener, wait);
-    const realHandler = wait ? handler : listener;
-    const removeEventListener = (e: Element) => {
-      isAddRef.value = true;
-      e.removeEventListener(name, realHandler, options);
-    };
-    const addEventListener = (e: Element) => e.addEventListener(name, realHandler, options);
-
-    const removeWatch = watch(
-      element,
-      (v, _ov, cleanUp) => {
-        if (v) {
-          !unref(isAddRef) && addEventListener(v);
-          cleanUp(() => {
-            autoRemove && removeEventListener(v);
-          });
-        }
-      },
-      { immediate: true }
-    );
-
-    remove = () => {
-      removeEventListener(element.value);
-      removeWatch();
-    };
-  }
-  return { removeEvent: remove };
-}
diff --git a/src/hooks/event/useIntersectionObserver.ts b/src/hooks/event/useIntersectionObserver.ts
deleted file mode 100644
index 44ed699..0000000
--- a/src/hooks/event/useIntersectionObserver.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { Ref, watchEffect, ref } from 'vue';
-
-interface IntersectionObserverProps {
-  target: Ref<Element | null | undefined>;
-  root?: Ref<any>;
-  onIntersect: IntersectionObserverCallback;
-  rootMargin?: string;
-  threshold?: number;
-}
-
-export function useIntersectionObserver({ target, root, onIntersect, rootMargin = '0px', threshold = 0.1 }: IntersectionObserverProps) {
-  let cleanup = () => {};
-  const observer: Ref<Nullable<IntersectionObserver>> = ref(null);
-  const stopEffect = watchEffect(() => {
-    cleanup();
-
-    observer.value = new IntersectionObserver(onIntersect, {
-      root: root ? root.value : null,
-      rootMargin,
-      threshold,
-    });
-
-    const current = target.value;
-
-    current && observer.value.observe(current);
-
-    cleanup = () => {
-      if (observer.value) {
-        observer.value.disconnect();
-        target.value && observer.value.unobserve(target.value);
-      }
-    };
-  });
-
-  return {
-    observer,
-    stop: () => {
-      cleanup();
-      stopEffect();
-    },
-  };
-}
diff --git a/src/hooks/event/useScroll.ts b/src/hooks/event/useScroll.ts
deleted file mode 100644
index 2a4b7bc..0000000
--- a/src/hooks/event/useScroll.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import type { Ref } from 'vue';
-
-import { ref, onMounted, watch, onUnmounted } from 'vue';
-import { isWindow, isObject } from '/@/utils/is';
-import { useThrottleFn } from '@vueuse/core';
-
-export function useScroll(
-  refEl: Ref<Element | Window | null>,
-  options?: {
-    wait?: number;
-    leading?: boolean;
-    trailing?: boolean;
-  }
-) {
-  const refX = ref(0);
-  const refY = ref(0);
-  let handler = () => {
-    if (isWindow(refEl.value)) {
-      refX.value = refEl.value.scrollX;
-      refY.value = refEl.value.scrollY;
-    } else if (refEl.value) {
-      refX.value = (refEl.value as Element).scrollLeft;
-      refY.value = (refEl.value as Element).scrollTop;
-    }
-  };
-
-  if (isObject(options)) {
-    let wait = 0;
-    if (options.wait && options.wait > 0) {
-      wait = options.wait;
-      Reflect.deleteProperty(options, 'wait');
-    }
-
-    handler = useThrottleFn(handler, wait);
-  }
-
-  let stopWatch: () => void;
-  onMounted(() => {
-    stopWatch = watch(
-      refEl,
-      (el, prevEl, onCleanup) => {
-        if (el) {
-          el.addEventListener('scroll', handler);
-        } else if (prevEl) {
-          prevEl.removeEventListener('scroll', handler);
-        }
-        onCleanup(() => {
-          refX.value = refY.value = 0;
-          el && el.removeEventListener('scroll', handler);
-        });
-      },
-      { immediate: true }
-    );
-  });
-
-  onUnmounted(() => {
-    refEl.value && refEl.value.removeEventListener('scroll', handler);
-  });
-
-  function stop() {
-    stopWatch && stopWatch();
-  }
-
-  return { refX, refY, stop };
-}
diff --git a/src/hooks/event/useScrollTo.ts b/src/hooks/event/useScrollTo.ts
deleted file mode 100644
index f6d5dc6..0000000
--- a/src/hooks/event/useScrollTo.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import { isFunction, isUnDef } from '/@/utils/is';
-import { ref, unref } from 'vue';
-
-export interface ScrollToParams {
-  el: any;
-  to: number;
-  duration?: number;
-  callback?: () => any;
-}
-
-const easeInOutQuad = (t: number, b: number, c: number, d: number) => {
-  t /= d / 2;
-  if (t < 1) {
-    return (c / 2) * t * t + b;
-  }
-  t--;
-  return (-c / 2) * (t * (t - 2) - 1) + b;
-};
-const move = (el: HTMLElement, amount: number) => {
-  el.scrollTop = amount;
-};
-
-const position = (el: HTMLElement) => {
-  return el.scrollTop;
-};
-export function useScrollTo({ el, to, duration = 500, callback }: ScrollToParams) {
-  const isActiveRef = ref(false);
-  const start = position(el);
-  const change = to - start;
-  const increment = 20;
-  let currentTime = 0;
-  duration = isUnDef(duration) ? 500 : duration;
-
-  const animateScroll = function () {
-    if (!unref(isActiveRef)) {
-      return;
-    }
-    currentTime += increment;
-    const val = easeInOutQuad(currentTime, start, change, duration);
-    move(el, val);
-    if (currentTime < duration && unref(isActiveRef)) {
-      requestAnimationFrame(animateScroll);
-    } else {
-      if (callback && isFunction(callback)) {
-        callback();
-      }
-    }
-  };
-  const run = () => {
-    isActiveRef.value = true;
-    animateScroll();
-  };
-
-  const stop = () => {
-    isActiveRef.value = false;
-  };
-
-  return { start: run, stop };
-}
diff --git a/src/hooks/event/useWindowSizeFn.ts b/src/hooks/event/useWindowSizeFn.ts
deleted file mode 100644
index 7b18ca0..0000000
--- a/src/hooks/event/useWindowSizeFn.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { tryOnMounted, tryOnUnmounted } from '@vueuse/core';
-import { useDebounceFn } from '@vueuse/core';
-
-interface WindowSizeOptions {
-  once?: boolean;
-  immediate?: boolean;
-  listenerOptions?: AddEventListenerOptions | boolean;
-}
-
-export function useWindowSizeFn<T>(fn: Fn<T>, wait = 150, options?: WindowSizeOptions) {
-  let handler = () => {
-    fn();
-  };
-  const handleSize = useDebounceFn(handler, wait);
-  handler = handleSize;
-
-  const start = () => {
-    if (options && options.immediate) {
-      handler();
-    }
-    window.addEventListener('resize', handler);
-  };
-
-  const stop = () => {
-    window.removeEventListener('resize', handler);
-  };
-
-  tryOnMounted(() => {
-    start();
-  });
-
-  tryOnUnmounted(() => {
-    stop();
-  });
-  return [start, stop];
-}
diff --git a/src/hooks/jeecg/useAdaptiveWidth.ts b/src/hooks/jeecg/useAdaptiveWidth.ts
deleted file mode 100644
index 2eb88ec..0000000
--- a/src/hooks/jeecg/useAdaptiveWidth.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * 鑷�傚簲瀹藉害鏋勯�犲櫒
- *
- * @time 2022-4-8
- * @author sunjianlei
- */
-import { ref } from 'vue';
-import { useDebounceFn, tryOnUnmounted } from '@vueuse/core';
-import { useEventListener } from '/@/hooks/event/useEventListener';
-
-// key = js杩愮畻绗�+鏁板瓧
-const defWidthConfig: configType = {
-  '<=565': '100%',
-  '<=1366': '800px',
-  '<=1600': '600px',
-  '<=1920': '600px',
-  '>1920': '500px',
-};
-
-type configType = Record<string, string | number>;
-
-/**
- * 鑷�傚簲瀹藉害
- *
- * @param widthConfig 瀹藉害閰嶇疆锛屽彲鍙傝�� defWidthConfig 閰嶇疆
- * @param assign 鏄惁鍚堝苟榛樿閰嶇疆
- * @param debounce 鍘绘姈姣鏁�
- */
-export function useAdaptiveWidth(widthConfig = defWidthConfig, assign = true, debounce = 50) {
-  const widthConfigAssign = assign ? Object.assign({}, defWidthConfig, widthConfig) : widthConfig;
-  const configKeys = Object.keys(widthConfigAssign);
-
-  const adaptiveWidth = ref<string | number>();
-
-  /**
-   * 杩涜璁$畻瀹藉害
-   * @param innerWidth
-   */
-  function calcWidth(innerWidth) {
-    let width;
-    for (const key of configKeys) {
-      try {
-        // 閫氳繃js杩愮畻
-        let flag = new Function(`return ${innerWidth} ${key}`)();
-        if (flag) {
-          width = widthConfigAssign[key];
-          break;
-        }
-      } catch (e) {
-        console.error(e);
-      }
-    }
-    if (width) {
-      adaptiveWidth.value = width;
-    } else {
-      console.warn('娌℃湁鎵惧埌鍖归厤鐨勮嚜閫傚簲瀹藉害');
-    }
-  }
-
-  // 鍒濆璁$畻
-  calcWidth(window.innerWidth);
-
-  // 鐩戝惉 resize 浜嬩欢
-  const { removeEvent } = useEventListener({
-    el: window,
-    name: 'resize',
-    listener: useDebounceFn(() => calcWidth(window.innerWidth), debounce),
-  });
-  // 鍗歌浇缁勪欢鏃跺彇娑堢洃鍚簨浠�
-  tryOnUnmounted(() => removeEvent());
-
-  return { adaptiveWidth };
-}
-
-/**
- * 鎶藉眽鑷�傚簲瀹藉害
- */
-export function useDrawerAdaptiveWidth() {
-  return useAdaptiveWidth(
-    {
-      '<=620': '100%',
-      '<=1600': 600,
-      '<=1920': 650,
-      '>1920': 700,
-    },
-    false
-  );
-}
diff --git a/src/hooks/setting/index.ts b/src/hooks/setting/index.ts
deleted file mode 100644
index 70ab48d..0000000
--- a/src/hooks/setting/index.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import type { GlobConfig } from '/#/config';
-
-import { getAppEnvConfig } from '/@/utils/env';
-
-export const useGlobSetting = (): Readonly<GlobConfig> => {
-  const {
-    VITE_GLOB_APP_TITLE,
-    VITE_GLOB_API_URL,
-    VITE_GLOB_APP_SHORT_NAME,
-    VITE_GLOB_API_URL_PREFIX,
-    VITE_GLOB_APP_CAS_BASE_URL,
-    VITE_GLOB_APP_OPEN_SSO,
-    VITE_GLOB_APP_OPEN_QIANKUN,
-    VITE_GLOB_DOMAIN_URL,
-    VITE_GLOB_ONLINE_VIEW_URL,
-  } = getAppEnvConfig();
-
-  if (!/[a-zA-Z\_]*/.test(VITE_GLOB_APP_SHORT_NAME)) {
-    // warn(
-    //   `VITE_GLOB_APP_SHORT_NAME Variables can only be characters/underscores, please modify in the environment variables and re-running.`
-    // );
-  }
-
-  // Take global configuration
-  const glob: Readonly<GlobConfig> = {
-    title: VITE_GLOB_APP_TITLE,
-    domainUrl: VITE_GLOB_DOMAIN_URL,
-    apiUrl: VITE_GLOB_API_URL,
-    shortName: VITE_GLOB_APP_SHORT_NAME,
-    openSso: VITE_GLOB_APP_OPEN_SSO,
-    openQianKun: VITE_GLOB_APP_OPEN_QIANKUN,
-    casBaseUrl: VITE_GLOB_APP_CAS_BASE_URL,
-    urlPrefix: VITE_GLOB_API_URL_PREFIX,
-    uploadUrl: VITE_GLOB_DOMAIN_URL,
-    viewUrl: VITE_GLOB_ONLINE_VIEW_URL,
-  };
-  window._CONFIG['domianURL'] = VITE_GLOB_DOMAIN_URL;
-  return glob as Readonly<GlobConfig>;
-};
diff --git a/src/hooks/setting/useHeaderSetting.ts b/src/hooks/setting/useHeaderSetting.ts
deleted file mode 100644
index 098ed39..0000000
--- a/src/hooks/setting/useHeaderSetting.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-import type { HeaderSetting } from '/#/config';
-
-import { computed, unref } from 'vue';
-
-import { useAppStore } from '/@/store/modules/app';
-
-import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-import { useFullContent } from '/@/hooks/web/useFullContent';
-import { MenuModeEnum } from '/@/enums/menuEnum';
-
-export function useHeaderSetting() {
-  const { getFullContent } = useFullContent();
-  const appStore = useAppStore();
-
-  const getShowFullHeaderRef = computed(() => {
-    return !unref(getFullContent) && unref(getShowMixHeaderRef) && unref(getShowHeader) && !unref(getIsTopMenu) && !unref(getIsMixSidebar);
-  });
-
-  const getUnFixedAndFull = computed(() => !unref(getFixed) && !unref(getShowFullHeaderRef));
-
-  const getShowInsetHeaderRef = computed(() => {
-    const need = !unref(getFullContent) && unref(getShowHeader);
-    return (need && !unref(getShowMixHeaderRef)) || (need && unref(getIsTopMenu)) || (need && unref(getIsMixSidebar));
-  });
-
-  const { getMenuMode, getSplit, getShowHeaderTrigger, getIsSidebarType, getIsMixSidebar, getIsTopMenu } = useMenuSetting();
-  const { getShowBreadCrumb, getShowLogo } = useRootSetting();
-
-  const getShowMixHeaderRef = computed(() => !unref(getIsSidebarType) && unref(getShowHeader));
-
-  const getShowDoc = computed(() => appStore.getHeaderSetting.showDoc);
-
-  const getHeaderTheme = computed(() => appStore.getHeaderSetting.theme);
-
-  const getShowHeader = computed(() => appStore.getHeaderSetting.show);
-
-  const getFixed = computed(() => appStore.getHeaderSetting.fixed);
-
-  const getHeaderBgColor = computed(() => appStore.getHeaderSetting.bgColor);
-
-  const getShowSearch = computed(() => appStore.getHeaderSetting.showSearch);
-
-  const getUseLockPage = computed(() => appStore.getHeaderSetting.useLockPage);
-
-  const getShowFullScreen = computed(() => appStore.getHeaderSetting.showFullScreen);
-
-  const getShowNotice = computed(() => appStore.getHeaderSetting.showNotice);
-
-  const getShowBread = computed(() => {
-    return unref(getMenuMode) !== MenuModeEnum.HORIZONTAL && unref(getShowBreadCrumb) && !unref(getSplit);
-  });
-  const getShowBreadTitle = computed(() => {
-    return unref(getMenuMode) !== MenuModeEnum.HORIZONTAL && !unref(getShowBreadCrumb) && !unref(getSplit);
-  });
-
-  const getShowHeaderLogo = computed(() => {
-    return unref(getShowLogo) && !unref(getIsSidebarType) && !unref(getIsMixSidebar);
-  });
-
-  const getShowContent = computed(() => {
-    return unref(getShowBread) || unref(getShowHeaderTrigger);
-  });
-
-  // Set header configuration
-  function setHeaderSetting(headerSetting: Partial<HeaderSetting>) {
-    appStore.setProjectConfig({ headerSetting });
-  }
-  return {
-    setHeaderSetting,
-
-    getShowDoc,
-    getShowSearch,
-    getHeaderTheme,
-    getUseLockPage,
-    getShowFullScreen,
-    getShowNotice,
-    getShowBread,
-    getShowContent,
-    getShowHeaderLogo,
-    getShowHeader,
-    getFixed,
-    getShowMixHeaderRef,
-    getShowFullHeaderRef,
-    getShowInsetHeaderRef,
-    getUnFixedAndFull,
-    getHeaderBgColor,
-    getShowBreadTitle
-  };
-}
diff --git a/src/hooks/setting/useMenuSetting.ts b/src/hooks/setting/useMenuSetting.ts
deleted file mode 100644
index 63a8b55..0000000
--- a/src/hooks/setting/useMenuSetting.ts
+++ /dev/null
@@ -1,155 +0,0 @@
-import type { MenuSetting } from '/#/config';
-
-import { computed, unref, ref } from 'vue';
-
-import { useAppStore } from '/@/store/modules/app';
-
-import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from '/@/enums/appEnum';
-import { MenuModeEnum, MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum';
-import { useFullContent } from '/@/hooks/web/useFullContent';
-
-const mixSideHasChildren = ref(false);
-
-export function useMenuSetting() {
-  const { getFullContent: fullContent } = useFullContent();
-  const appStore = useAppStore();
-
-  const getShowSidebar = computed(() => {
-    return unref(getSplit) || (unref(getShowMenu) && unref(getMenuMode) !== MenuModeEnum.HORIZONTAL && !unref(fullContent));
-  });
-
-  const getCollapsed = computed(() => appStore.getMenuSetting.collapsed);
-
-  const getMenuType = computed(() => appStore.getMenuSetting.type);
-
-  const getMenuMode = computed(() => appStore.getMenuSetting.mode);
-
-  const getMenuFixed = computed(() => appStore.getMenuSetting.fixed);
-
-  const getShowMenu = computed(() => appStore.getMenuSetting.show);
-
-  const getMenuHidden = computed(() => appStore.getMenuSetting.hidden);
-
-  const getMenuWidth = computed(() => appStore.getMenuSetting.menuWidth);
-
-  const getTrigger = computed(() => appStore.getMenuSetting.trigger);
-
-  const getMenuTheme = computed(() => appStore.getMenuSetting.theme);
-
-  const getSplit = computed(() => appStore.getMenuSetting.split);
-
-  const getMenuBgColor = computed(() => appStore.getMenuSetting.bgColor);
-
-  const getMixSideTrigger = computed(() => appStore.getMenuSetting.mixSideTrigger);
-
-  const getCanDrag = computed(() => appStore.getMenuSetting.canDrag);
-
-  const getAccordion = computed(() => appStore.getMenuSetting.accordion);
-
-  const getMixSideFixed = computed(() => appStore.getMenuSetting.mixSideFixed);
-
-  const getTopMenuAlign = computed(() => appStore.getMenuSetting.topMenuAlign);
-
-  const getCloseMixSidebarOnChange = computed(() => appStore.getMenuSetting.closeMixSidebarOnChange);
-
-  const getIsSidebarType = computed(() => unref(getMenuType) === MenuTypeEnum.SIDEBAR);
-
-  const getIsTopMenu = computed(() => unref(getMenuType) === MenuTypeEnum.TOP_MENU);
-
-  const getCollapsedShowTitle = computed(() => appStore.getMenuSetting.collapsedShowTitle);
-
-  const getShowTopMenu = computed(() => {
-    return unref(getMenuMode) === MenuModeEnum.HORIZONTAL || unref(getSplit);
-  });
-
-  const getShowHeaderTrigger = computed(() => {
-    if (unref(getMenuType) === MenuTypeEnum.TOP_MENU || !unref(getShowMenu) || unref(getMenuHidden)) {
-      return false;
-    }
-
-    return unref(getTrigger) === TriggerEnum.HEADER;
-  });
-
-  const getIsHorizontal = computed(() => {
-    return unref(getMenuMode) === MenuModeEnum.HORIZONTAL;
-  });
-
-  const getIsMixSidebar = computed(() => {
-    return unref(getMenuType) === MenuTypeEnum.MIX_SIDEBAR;
-  });
-
-  const getIsMixMode = computed(() => {
-    return unref(getMenuMode) === MenuModeEnum.INLINE && unref(getMenuType) === MenuTypeEnum.MIX;
-  });
-
-  const getRealWidth = computed(() => {
-    if (unref(getIsMixSidebar)) {
-      return unref(getCollapsed) && !unref(getMixSideFixed) ? unref(getMiniWidthNumber) : unref(getMenuWidth);
-    }
-    return unref(getCollapsed) ? unref(getMiniWidthNumber) : unref(getMenuWidth);
-  });
-
-  const getMiniWidthNumber = computed(() => {
-    const { collapsedShowTitle } = appStore.getMenuSetting;
-    return collapsedShowTitle ? SIDE_BAR_SHOW_TIT_MINI_WIDTH : SIDE_BAR_MINI_WIDTH;
-  });
-
-  const getCalcContentWidth = computed(() => {
-    const width =
-      unref(getIsTopMenu) || !unref(getShowMenu) || (unref(getSplit) && unref(getMenuHidden))
-        ? 0
-        : unref(getIsMixSidebar)
-        ? (unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH) +
-          (unref(getMixSideFixed) && unref(mixSideHasChildren) ? unref(getRealWidth) : 0)
-        : unref(getRealWidth);
-
-    return `calc(100% - ${unref(width)}px)`;
-  });
-
-  // Set menu configuration
-  function setMenuSetting(menuSetting: Partial<MenuSetting>): void {
-    appStore.setProjectConfig({ menuSetting });
-  }
-
-  function toggleCollapsed() {
-    setMenuSetting({
-      collapsed: !unref(getCollapsed),
-    });
-  }
-  return {
-    setMenuSetting,
-
-    toggleCollapsed,
-
-    getMenuFixed,
-    getRealWidth,
-    getMenuType,
-    getMenuMode,
-    getShowMenu,
-    getCollapsed,
-    getMiniWidthNumber,
-    getCalcContentWidth,
-    getMenuWidth,
-    getTrigger,
-    getSplit,
-    getMenuTheme,
-    getCanDrag,
-    getCollapsedShowTitle,
-    getIsHorizontal,
-    getIsSidebarType,
-    getAccordion,
-    getShowTopMenu,
-    getShowHeaderTrigger,
-    getTopMenuAlign,
-    getMenuHidden,
-    getIsTopMenu,
-    getMenuBgColor,
-    getShowSidebar,
-    getIsMixMode,
-    getIsMixSidebar,
-    getCloseMixSidebarOnChange,
-    getMixSideTrigger,
-    getMixSideFixed,
-    mixSideHasChildren,
-  };
-}
diff --git a/src/hooks/setting/useMultipleTabSetting.ts b/src/hooks/setting/useMultipleTabSetting.ts
deleted file mode 100644
index 7c7ab01..0000000
--- a/src/hooks/setting/useMultipleTabSetting.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import type { MultiTabsSetting } from '/#/config';
-
-import { computed } from 'vue';
-
-import { useAppStore } from '/@/store/modules/app';
-
-export function useMultipleTabSetting() {
-  const appStore = useAppStore();
-
-  const getShowMultipleTab = computed(() => appStore.getMultiTabsSetting.show);
-
-  const getShowQuick = computed(() => appStore.getMultiTabsSetting.showQuick);
-
-  const getShowRedo = computed(() => appStore.getMultiTabsSetting.showRedo);
-
-  const getShowFold = computed(() => appStore.getMultiTabsSetting.showFold);
-
-  // 鑾峰彇鏍囩椤垫牱寮�
-  const getTabsTheme = computed(() => appStore.getMultiTabsSetting.theme);
-
-  function setMultipleTabSetting(multiTabsSetting: Partial<MultiTabsSetting>) {
-    appStore.setProjectConfig({ multiTabsSetting });
-  }
-  return {
-    setMultipleTabSetting,
-    getShowMultipleTab,
-    getShowQuick,
-    getShowRedo,
-    getShowFold,
-    getTabsTheme,
-  };
-}
diff --git a/src/hooks/setting/useRootSetting.ts b/src/hooks/setting/useRootSetting.ts
deleted file mode 100644
index 1fc16d1..0000000
--- a/src/hooks/setting/useRootSetting.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import type { ProjectConfig } from '/#/config';
-
-import { computed } from 'vue';
-
-import { useAppStore } from '/@/store/modules/app';
-import { ContentEnum, ThemeEnum } from '/@/enums/appEnum';
-
-type RootSetting = Omit<ProjectConfig, 'locale' | 'headerSetting' | 'menuSetting' | 'multiTabsSetting'>;
-
-export function useRootSetting() {
-  const appStore = useAppStore();
-
-  const getPageLoading = computed(() => appStore.getPageLoading);
-
-  const getOpenKeepAlive = computed(() => appStore.getProjectConfig.openKeepAlive);
-
-  const getSettingButtonPosition = computed(() => appStore.getProjectConfig.settingButtonPosition);
-
-  const getCanEmbedIFramePage = computed(() => appStore.getProjectConfig.canEmbedIFramePage);
-
-  const getPermissionMode = computed(() => appStore.getProjectConfig.permissionMode);
-
-  const getShowLogo = computed(() => appStore.getProjectConfig.showLogo);
-
-  const getContentMode = computed(() => appStore.getProjectConfig.contentMode);
-
-  const getUseOpenBackTop = computed(() => appStore.getProjectConfig.useOpenBackTop);
-
-  const getShowSettingButton = computed(() => appStore.getProjectConfig.showSettingButton);
-
-  const getUseErrorHandle = computed(() => appStore.getProjectConfig.useErrorHandle);
-
-  const getShowFooter = computed(() => appStore.getProjectConfig.showFooter);
-
-  const getShowBreadCrumb = computed(() => appStore.getProjectConfig.showBreadCrumb);
-
-  const getThemeColor = computed(() => appStore.getProjectConfig.themeColor);
-
-  const getShowBreadCrumbIcon = computed(() => appStore.getProjectConfig.showBreadCrumbIcon);
-
-  const getFullContent = computed(() => appStore.getProjectConfig.fullContent);
-
-  const getColorWeak = computed(() => appStore.getProjectConfig.colorWeak);
-
-  const getGrayMode = computed(() => appStore.getProjectConfig.grayMode);
-
-  const getLockTime = computed(() => appStore.getProjectConfig.lockTime);
-
-  const getShowDarkModeToggle = computed(() => appStore.getProjectConfig.showDarkModeToggle);
-
-  const getDarkMode = computed(() => appStore.getDarkMode);
-
-  const getLayoutContentMode = computed(() => (appStore.getProjectConfig.contentMode === ContentEnum.FULL ? ContentEnum.FULL : ContentEnum.FIXED));
-
-  function setRootSetting(setting: Partial<RootSetting>) {
-    appStore.setProjectConfig(setting);
-  }
-
-  function setDarkMode(mode: ThemeEnum) {
-    appStore.setDarkMode(mode);
-  }
-  return {
-    setRootSetting,
-
-    getSettingButtonPosition,
-    getFullContent,
-    getColorWeak,
-    getGrayMode,
-    getLayoutContentMode,
-    getPageLoading,
-    getOpenKeepAlive,
-    getCanEmbedIFramePage,
-    getPermissionMode,
-    getShowLogo,
-    getUseErrorHandle,
-    getShowBreadCrumb,
-    getShowBreadCrumbIcon,
-    getUseOpenBackTop,
-    getShowSettingButton,
-    getShowFooter,
-    getContentMode,
-    getLockTime,
-    getThemeColor,
-    getDarkMode,
-    setDarkMode,
-    getShowDarkModeToggle,
-  };
-}
diff --git a/src/hooks/setting/useTransitionSetting.ts b/src/hooks/setting/useTransitionSetting.ts
deleted file mode 100644
index b6d421a..0000000
--- a/src/hooks/setting/useTransitionSetting.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import type { TransitionSetting } from '/#/config';
-
-import { computed } from 'vue';
-
-import { useAppStore } from '/@/store/modules/app';
-
-export function useTransitionSetting() {
-  const appStore = useAppStore();
-
-  const getEnableTransition = computed(() => appStore.getTransitionSetting?.enable);
-
-  const getOpenNProgress = computed(() => appStore.getTransitionSetting?.openNProgress);
-
-  const getOpenPageLoading = computed((): boolean => {
-    return !!appStore.getTransitionSetting?.openPageLoading;
-  });
-
-  const getBasicTransition = computed(() => appStore.getTransitionSetting?.basicTransition);
-
-  function setTransitionSetting(transitionSetting: Partial<TransitionSetting>) {
-    appStore.setProjectConfig({ transitionSetting });
-  }
-  return {
-    setTransitionSetting,
-
-    getEnableTransition,
-    getOpenNProgress,
-    getOpenPageLoading,
-    getBasicTransition,
-  };
-}
diff --git a/src/hooks/system/useAutoAdapt.ts b/src/hooks/system/useAutoAdapt.ts
deleted file mode 100644
index 7f5c71b..0000000
--- a/src/hooks/system/useAutoAdapt.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { ref } from 'vue';
-import { ScreenSizeEnum } from '/@/enums/sizeEnum';
-import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
-// 瀹氫箟 useAdapt 鏂规硶鍙傛暟
-interface AdaptOptions {
-  // xl>1200
-  xl?: string | number;
-  // xl>992
-  lg?: string | number;
-  // xl>768
-  md?: string | number;
-  // xl>576
-  sm?: string | number;
-  // xl>480
-  xs?: string | number;
-  //xl<480榛樿鍊�
-  mindef?: string | number;
-  //榛樿鍊�
-  def?: string | number;
-}
-export function useAdapt(props?: AdaptOptions) {
-  //榛樿瀹藉害
-  const width = ref<string | number>(props?.def || '600px');
-  //鑾峰彇瀹藉害
-  useWindowSizeFn(calcWidth, 100, { immediate: true });
-  //璁$畻瀹藉害
-  function calcWidth() {
-    let windowWidth = document.documentElement.clientWidth;
-    switch (true) {
-      case windowWidth > ScreenSizeEnum.XL:
-        width.value = props?.xl || '600px';
-        break;
-      case windowWidth > ScreenSizeEnum.LG:
-        width.value = props?.lg || '600px';
-        break;
-      case windowWidth > ScreenSizeEnum.MD:
-        width.value = props?.md || '600px';
-        break;
-      case windowWidth > ScreenSizeEnum.SM:
-        width.value = props?.sm || '500px';
-        break;
-      case windowWidth > ScreenSizeEnum.XS:
-        width.value = props?.xs || '400px';
-        break;
-      default:
-        width.value = props?.mindef || '300px';
-        break;
-    }
-  }
-  return { width, calcWidth };
-}
diff --git a/src/hooks/system/useJvxeMethods.ts b/src/hooks/system/useJvxeMethods.ts
deleted file mode 100644
index f5262d5..0000000
--- a/src/hooks/system/useJvxeMethods.ts
+++ /dev/null
@@ -1,186 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { ref, unref } from 'vue';
-import { VALIDATE_FAILED, validateFormModelAndTables } from '/@/utils/common/vxeUtils';
-
-export function useJvxeMethod(requestAddOrEdit, classifyIntoFormData, tableRefs, activeKey, refKeys, validateSubForm?) {
-  const formRef = ref();
-  /** 鏌ヨ鏌愪釜tab鐨勬暟鎹� */
-  function requestSubTableData(url, params, tab, success) {
-    tab.loading = true;
-    defHttp
-      .get({ url, params }, { isTransformResponse: false })
-      .then((res) => {
-        let { result } = res;
-        if (res.success && result) {
-          if (Array.isArray(result)) {
-            tab.dataSource = result;
-          } else if (Array.isArray(result.records)) {
-            tab.dataSource = result.records;
-          }
-        }
-        typeof success === 'function' ? success(res) : '';
-      })
-      .finally(() => {
-        tab.loading = false;
-      });
-  }
-
-  /* --- handle 浜嬩欢 --- */
-
-  /** ATab 閫夐」鍗″垏鎹簨浠� */
-  function handleChangeTabs(key) {
-    // 鑷姩閲嶇疆scrollTop鐘舵�侊紝闃叉鍑虹幇鐧藉睆
-    tableRefs[key]?.value?.resetScrollTop(0);
-  }
-
-  /** 鑾峰彇鎵�鏈夌殑editableTable瀹炰緥*/
-  function getAllTable() {
-    let values = Object.values(tableRefs);
-    return Promise.all(values);
-  }
-  /** 纭畾鎸夐挳鐐瑰嚮浜嬩欢 */
-  function handleSubmit() {
-    /** 瑙﹀彂琛ㄥ崟楠岃瘉 */
-    getAllTable()
-      .then((tables) => {
-        let values = formRef.value.getFieldsValue();
-        return validateFormModelAndTables(formRef.value.validate, values, tables, formRef.value.getProps, false);
-      })
-      .then((allValues) => {
-        /** 涓�娆℃�ч獙璇佷竴瀵逛竴鐨勬墍鏈夊瓙琛� */
-        return validateSubForm && typeof validateSubForm === 'function' ? validateSubForm(allValues) : validateAllSubOne(allValues);
-      })
-      .then((allValues) => {
-        if (typeof classifyIntoFormData !== 'function') {
-          throw throwNotFunction('classifyIntoFormData');
-        }
-        let formData = classifyIntoFormData(allValues);
-        // 鍙戣捣璇锋眰
-        return requestAddOrEdit(formData);
-      })
-      .catch((e) => {
-        if (e.error === VALIDATE_FAILED) {
-          // 濡傛灉鏈夋湭閫氳繃琛ㄥ崟楠岃瘉鐨勫瓙琛紝灏辫嚜鍔ㄨ烦杞埌瀹冩墍鍦ㄧ殑tab
-          //update-begin-author:taoyan date:2022-11-22 for: VUEN-2866銆愪唬鐮佺敓鎴愩�慣ab椋庢牸 涓�瀵瑰瀛愯〃鏍¢獙涓嶉�氳繃鏃讹紝鐐瑰嚮鎻愪氦琛ㄥ崟绌虹櫧浜嗭紝娴佺▼闄勫姞椤甸潰涔熸湁姝ら棶棰�
-          if(e.paneKey){
-            activeKey.value = e.paneKey
-          }else{
-            activeKey.value = e.index == null ? unref(activeKey) : refKeys.value[e.index];
-          }
-          //update-end-author:taoyan date:2022-11-22 for: VUEN-2866銆愪唬鐮佺敓鎴愩�慣ab椋庢牸 涓�瀵瑰瀛愯〃鏍¢獙涓嶉�氳繃鏃讹紝鐐瑰嚮鎻愪氦琛ㄥ崟绌虹櫧浜嗭紝娴佺▼闄勫姞椤甸潰涔熸湁姝ら棶棰�
-        } else {
-          console.error(e);
-        }
-      });
-  }
-  //鏍¢獙鎵�鏈夊瓙琛ㄨ〃鍗�
-  function validateAllSubOne(allValues) {
-    return new Promise((resolve) => {
-      resolve(allValues);
-    });
-  }
-  /* --- throw --- */
-
-  /** not a function */
-  function throwNotFunction(name) {
-    return `${name} 鏈畾涔夋垨涓嶆槸涓�涓嚱鏁癭;
-  }
-
-  /** not a array */
-  function throwNotArray(name) {
-    return `${name} 鏈畾涔夋垨涓嶆槸涓�涓暟缁刞;
-  }
-  return [handleChangeTabs, handleSubmit, requestSubTableData, formRef];
-}
-
-//update-begin-author:taoyan date:2022-6-16 for: 浠g爜鐢熸垚-鍘熺敓琛ㄥ崟鐢�
-/**
- * 鏍¢獙澶氫釜琛ㄥ崟鍜屽瓙琛╰able锛岀敤浜庡師鐢熺殑antd-vue鐨勮〃鍗�
- * @param activeKey 瀛愯〃琛ㄥ崟/vxe-table 鎵�鍦╰abs鐨� activeKey
- * @param refMap 瀛愯〃琛ㄥ崟/vxe-table瀵瑰簲鐨剅ef瀵硅薄 map缁撴瀯
- * 绀轰緥锛�
- * useValidateAntFormAndTable(activeKey, {
- *   'tableA': tableARef,
- *   'formB': formBRef
- * })
- */
-export function useValidateAntFormAndTable(activeKey, refMap) {
-  /**
-   * 鑾峰彇鎵�鏈夊瓙琛ㄦ暟鎹�
-   */
-  async function getSubFormAndTableData() {
-    let formData = {};
-    let all = Object.keys(refMap);
-    let key = '';
-    for (let i = 0; i < all.length; i++) {
-      key = all[i];
-      let instance = refMap[key].value;
-      if (instance.isForm) {
-        let subFormData = await validateFormAndGetData(instance, key);
-        if (subFormData) {
-          formData[key + 'List'] = [subFormData];
-        }
-      } else {
-        let arr = await validateTableAndGetData(instance, key);
-        if (arr && arr.length > 0) {
-          formData[key + 'List'] = arr;
-        }
-      }
-    }
-    return formData;
-  }
-
-  /**
-   * 杞崲鏁版嵁鐢� 濡傛灉鏈夋暟缁勮浆鎴愰�楀彿鍒嗗壊鐨勬牸寮�
-   * @param data
-   */
-  function transformData(data) {
-    if (data) {
-      Object.keys(data).map((k) => {
-        if (data[k] instanceof Array) {
-          data[k] = data[k].join(',');
-        }
-      });
-    }
-    return data;
-  }
-
-  /**
-   * 瀛愯〃table
-   * @param instance
-   * @param key
-   */
-  async function validateTableAndGetData(instance, key) {
-    const errors = await instance.validateTable();
-    if (!errors) {
-      return instance.getTableData();
-    } else {
-      activeKey.value = key;
-      // 鑷姩閲嶇疆scrollTop鐘舵�侊紝闃叉鍑虹幇鐧藉睆
-      instance.resetScrollTop(0);
-      return Promise.reject(1);
-    }
-  }
-
-  /**
-   * 瀛愯〃琛ㄥ崟
-   * @param instance
-   * @param key
-   */
-  async function validateFormAndGetData(instance, key) {
-    try {
-      let data = await instance.getFormData();
-      transformData(data);
-      return data;
-    } catch (e) {
-      activeKey.value = key;
-      return Promise.reject(e);
-    }
-  }
-
-  return {
-    getSubFormAndTableData,
-    transformData,
-  };
-}
-//update-end-author:taoyan date:2022-6-16 for: 浠g爜鐢熸垚-鍘熺敓琛ㄥ崟鐢�
diff --git a/src/hooks/system/useListPage.ts b/src/hooks/system/useListPage.ts
deleted file mode 100644
index 81cc60f..0000000
--- a/src/hooks/system/useListPage.ts
+++ /dev/null
@@ -1,322 +0,0 @@
-import { reactive, ref, Ref, unref } from 'vue';
-import { merge } from 'lodash-es';
-import { DynamicProps } from '/#/utils';
-import { BasicTableProps, TableActionType, useTable } from '/@/components/Table';
-import { ColEx } from '/@/components/Form/src/types';
-import { FormActionType } from '/@/components/Form';
-import { useMessage } from '/@/hooks/web/useMessage';
-import { useMethods } from '/@/hooks/system/useMethods';
-import { useDesign } from '/@/hooks/web/useDesign';
-import { filterObj } from '/@/utils/common/compUtils';
-const { handleExportXls, handleImportXls } = useMethods();
-
-// 瀹氫箟 useListPage 鏂规硶鎵�闇�鍙傛暟
-interface ListPageOptions {
-  // 鏍峰紡浣滅敤鍩熻寖鍥�
-  designScope?: string;
-  // 銆愬繀濉�戣〃鏍煎弬鏁伴厤缃�
-  tableProps: TableProps;
-  // 鍒嗛〉
-  pagination?: boolean;
-  // 瀵煎嚭閰嶇疆
-  exportConfig?: {
-    url: string | (() => string);
-    // 瀵煎嚭鏂囦欢鍚�
-    name?: string | (() => string);
-    //瀵煎嚭鍙傛暟
-    params?: object;
-  };
-  // 瀵煎叆閰嶇疆
-  importConfig?: {
-    //update-begin-author:taoyan date:20220507 for: erp浠g爜鐢熸垚 瀛愯〃 瀵煎叆鍦板潃鏄姩鎬佺殑
-    url: string | (() => string);
-    //update-end-author:taoyan date:20220507 for: erp浠g爜鐢熸垚 瀛愯〃 瀵煎叆鍦板潃鏄姩鎬佺殑
-    // 瀵煎嚭鎴愬姛鍚庣殑鍥炶皟
-    success?: (fileInfo?: any) => void;
-  };
-}
-
-interface IDoRequestOptions {
-  // 鏄惁鏄剧ず纭瀵硅瘽妗嗭紝榛樿 true
-  confirm?: boolean;
-  // 鏄惁鑷姩鍒锋柊琛ㄦ牸锛岄粯璁� true
-  reload?: boolean;
-  // 鏄惁鑷姩娓呯┖閫夋嫨锛岄粯璁� true
-  clearSelection?: boolean;
-}
-
-/**
- * listPage椤甸潰鍏叡鏂规硶
- *
- * @param options
- */
-export function useListPage(options: ListPageOptions) {
-  const $message = useMessage();
-  let $design = {} as ReturnType<typeof useDesign>;
-  if (options.designScope) {
-    $design = useDesign(options.designScope);
-  }
-
-  const tableContext = useListTable(options.tableProps);
-
-  const [, { getForm, reload, setLoading }, { selectedRowKeys }] = tableContext;
-
-  // 瀵煎嚭 excel
-  async function onExportXls() {
-    //update-begin---author:wangshuai ---date:20220411  for锛氬鍑烘柊澧炶嚜瀹氫箟鍙傛暟------------
-    let { url, name, params } = options?.exportConfig ?? {};
-    let realUrl = typeof url === 'function' ? url() : url;
-    if (realUrl) {
-      let title = typeof name === 'function' ? name() : name;
-      //update-begin-author:taoyan date:20220507 for: erp浠g爜鐢熸垚 瀛愯〃 瀵煎嚭鎶ラ敊锛屽師鍥犳湭鐭�-
-      let paramsForm = {};
-      try {
-        paramsForm = await getForm().validate();
-      } catch (e) {
-        console.error(e);
-      }
-      //update-end-author:taoyan date:20220507 for: erp浠g爜鐢熸垚 瀛愯〃 瀵煎嚭鎶ラ敊锛屽師鍥犳湭鐭�-
-      //濡傛灉鍙傛暟涓嶄负绌猴紝鍒欐暣鍚堝埌涓�璧�
-      //update-begin-author:taoyan date:20220507 for: erp浠g爜鐢熸垚 瀛愯〃 瀵煎嚭鍔ㄦ�佽缃甿ainId
-      if (params) {
-        Object.keys(params).map((k) => {
-          let temp = (params as object)[k];
-          if (temp) {
-            paramsForm[k] = unref(temp);
-          }
-        });
-      }
-      //update-end-author:taoyan date:20220507 for: erp浠g爜鐢熸垚 瀛愯〃 瀵煎嚭鍔ㄦ�佽缃甿ainId
-      if (selectedRowKeys.value && selectedRowKeys.value.length > 0) {
-        paramsForm['selections'] = selectedRowKeys.value.join(',');
-      }
-      return handleExportXls(title as string, realUrl, filterObj(paramsForm));
-      //update-end---author:wangshuai ---date:20220411  for锛氬鍑烘柊澧炶嚜瀹氫箟鍙傛暟--------------
-    } else {
-      $message.createMessage.warn('娌℃湁浼犻�� exportConfig.url 鍙傛暟');
-      return Promise.reject();
-    }
-  }
-
-  // 瀵煎叆 excel
-  function onImportXls(file) {
-    let { url, success } = options?.importConfig ?? {};
-    //update-begin-author:taoyan date:20220507 for: erp浠g爜鐢熸垚 瀛愯〃 瀵煎叆鍦板潃鏄姩鎬佺殑
-    let realUrl = typeof url === 'function' ? url() : url;
-    if (realUrl) {
-      return handleImportXls(file, realUrl, success || reload);
-      //update-end-author:taoyan date:20220507 for: erp浠g爜鐢熸垚 瀛愯〃 瀵煎叆鍦板潃鏄姩鎬佺殑
-    } else {
-      $message.createMessage.warn('娌℃湁浼犻�� importConfig.url 鍙傛暟');
-      return Promise.reject();
-    }
-  }
-
-  /**
-   * 閫氱敤璇锋眰澶勭悊鏂规硶锛屽彲鑷姩鍒锋柊琛ㄦ牸锛岃嚜鍔ㄦ竻绌洪�夋嫨
-   * @param api 璇锋眰api
-   * @param options 鏄惁鏄剧ず纭妗�
-   */
-  function doRequest(api: () => Promise<any>, options?: IDoRequestOptions) {
-    return new Promise((resolve, reject) => {
-      const execute = async () => {
-        try {
-          setLoading(true);
-          const res = await api();
-          if (options?.reload ?? true) {
-            reload();
-          }
-          if (options?.clearSelection ?? true) {
-            selectedRowKeys.value = [];
-          }
-          resolve(res);
-        } catch (e) {
-          reject(e);
-        } finally {
-          setLoading(false);
-        }
-      };
-      if (options?.confirm ?? true) {
-        $message.createConfirm({
-          iconType: 'warning',
-          title: '鍒犻櫎',
-          content: '纭畾瑕佸垹闄ゅ悧锛�',
-          onOk: () => execute(),
-          onCancel: () => reject(),
-        });
-      } else {
-        execute();
-      }
-    });
-  }
-
-  /** 鎵ц鍗曚釜鍒犻櫎鎿嶄綔 */
-  function doDeleteRecord(api: () => Promise<any>) {
-    return doRequest(api, { confirm: false, clearSelection: false });
-  }
-
-  return {
-    ...$design,
-    ...$message,
-    onExportXls,
-    onImportXls,
-    doRequest,
-    doDeleteRecord,
-    tableContext,
-  };
-}
-
-// 瀹氫箟琛ㄦ牸鎵�闇�鍙傛暟
-type TableProps = Partial<DynamicProps<BasicTableProps>>;
-type UseTableMethod = TableActionType & {
-  getForm: () => FormActionType;
-};
-
-/**
- * useListTable 鍒楄〃椤甸潰鏍囧噯琛ㄦ牸鍙傛暟
- *
- * @param tableProps 琛ㄦ牸鍙傛暟
- */
-export function useListTable(tableProps: TableProps): [
-  (instance: TableActionType, formInstance: UseTableMethod) => void,
-  TableActionType & {
-    getForm: () => FormActionType;
-  },
-  {
-    rowSelection: any;
-    selectedRows: Ref<Recordable[]>;
-    selectedRowKeys: Ref<any[]>;
-  }
-] {
-  // 鑷�傚簲鍒楅厤缃�
-  const adaptiveColProps: Partial<ColEx> = {
-    xs: 24, // <576px
-    sm: 12, // 鈮�576px
-    md: 12, // 鈮�768px
-    lg: 8, // 鈮�992px
-    xl: 8, // 鈮�1200px
-    xxl: 6, // 鈮�1600px
-  };
-  const defaultTableProps: TableProps = {
-    rowKey: 'id',
-    // 浣跨敤鏌ヨ鏉′欢鍖哄煙
-    useSearchForm: true,
-    // 鏌ヨ鏉′欢鍖哄煙閰嶇疆
-    formConfig: {
-      // 绱у噾妯″紡
-      compact: true,
-      // label榛樿瀹藉害
-      // labelWidth: 120,
-      // 鎸変笅鍥炶溅鍚庤嚜鍔ㄦ彁浜�
-      autoSubmitOnEnter: true,
-      // 榛樿 row 閰嶇疆
-      rowProps: { gutter: 8 },
-      // 榛樿 col 閰嶇疆
-      baseColProps: {
-        ...adaptiveColProps,
-      },
-      labelCol: {
-        xs: 24,
-        sm: 8,
-        md: 6,
-        lg: 8,
-        xl: 6,
-        xxl: 6,
-      },
-      wrapperCol: {},
-      // 鏄惁鏄剧ず 灞曞紑/鏀惰捣 鎸夐挳
-      showAdvancedButton: true,
-      // 瓒呰繃鎸囧畾鍒楁暟榛樿鎶樺彔
-      autoAdvancedCol: 3,
-      // 鎿嶄綔鎸夐挳閰嶇疆
-      actionColOptions: {
-        ...adaptiveColProps,
-        style: { textAlign: 'left' },
-      },
-    },
-    // 鏂戦┈绾�
-    striped: false,
-    // 鏄惁鍙互鑷�傚簲楂樺害
-    canResize: true,
-    // 琛ㄦ牸鏈�灏忛珮搴�
-    minHeight: 500,
-    // 鐐瑰嚮琛岄�変腑
-    clickToRowSelect: false,
-    // 鏄惁鏄剧ず杈规
-    bordered: true,
-    // 鏄惁鏄剧ず搴忓彿鍒�
-    showIndexColumn: false,
-    // 鏄剧ず琛ㄦ牸璁剧疆
-    showTableSetting: true,
-    // 琛ㄦ牸鍏ㄥ睆璁剧疆
-    tableSetting: {
-      fullScreen: false,
-    },
-    // 鏄惁鏄剧ず鎿嶄綔鍒�
-    showActionColumn: true,
-    // 鎿嶄綔鍒�
-    actionColumn: {
-      width: 120,
-      title: '鎿嶄綔',
-      //鏄惁閿佸畾鎿嶄綔鍒楀彇鍊� right ,left,false
-      fixed: false,
-      dataIndex: 'action',
-      slots: { customRender: 'action' },
-    },
-  };
-  // 鍚堝苟鐢ㄦ埛涓�у寲閰嶇疆
-  if (tableProps) {
-    // merge 鏂规硶鍙繁搴﹀悎骞跺璞�
-    merge(defaultTableProps, tableProps);
-  }
-
-  // 鍙戦�佽姹備箣鍓嶈皟鐢ㄧ殑鏂规硶
-  function beforeFetch(params) {
-    // 榛樿浠� createTime 闄嶅簭鎺掑簭
-    return Object.assign({ column: 'createTime', order: 'desc' }, params);
-  }
-
-  // 鍚堝苟鏂规硶
-  Object.assign(defaultTableProps, { beforeFetch });
-  if (typeof tableProps.beforeFetch === 'function') {
-    defaultTableProps.beforeFetch = function (params) {
-      params = beforeFetch(params);
-      // @ts-ignore
-      tableProps.beforeFetch(params);
-      return params;
-    };
-  }
-
-  // 褰撳墠閫夋嫨鐨勮
-  const selectedRowKeys = ref<any[]>([]);
-  // 閫夋嫨鐨勮璁板綍
-  const selectedRows = ref<Recordable[]>([]);
-
-  // 琛ㄦ牸閫夋嫨鍒楅厤缃�
-  const rowSelection: any = tableProps?.rowSelection ?? {};
-  const defaultRowSelection = reactive({
-    ...rowSelection,
-    type: rowSelection.type ?? 'checkbox',
-    // 閫夋嫨鍒楀搴︼紝榛樿 50
-    columnWidth: rowSelection.columnWidth ?? 50,
-    selectedRows: selectedRows,
-    selectedRowKeys: selectedRowKeys,
-    onChange(...args) {
-      selectedRowKeys.value = args[0];
-      selectedRows.value = args[1];
-      if (typeof rowSelection.onChange === 'function') {
-        rowSelection.onChange(...args);
-      }
-    },
-  });
-  delete defaultTableProps.rowSelection;
-
-  return [
-    ...useTable(defaultTableProps),
-    {
-      selectedRows,
-      selectedRowKeys,
-      rowSelection: defaultRowSelection,
-    },
-  ];
-}
diff --git a/src/hooks/system/useMethods.ts b/src/hooks/system/useMethods.ts
deleted file mode 100644
index e46724b..0000000
--- a/src/hooks/system/useMethods.ts
+++ /dev/null
@@ -1,97 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { useMessage } from '/@/hooks/web/useMessage';
-import { useGlobSetting } from '/@/hooks/setting';
-
-const { createMessage, createWarningModal } = useMessage();
-const glob = useGlobSetting();
-
-/**
- * 瀵煎嚭鏂囦欢xlsx鐨刴ime-type
- */
-export const XLSX_MIME_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
-/**
- * 瀵煎嚭鏂囦欢xlsx鐨勬枃浠跺悗缂�
- */
-export const XLSX_FILE_SUFFIX = '.xlsx';
-
-export function useMethods() {
-  /**
-   * 瀵煎嚭xls
-   * @param name
-   * @param url
-   */
-  async function exportXls(name, url, params, isXlsx = false) {
-    const data = await defHttp.get({ url: url, params: params, responseType: 'blob' }, { isTransformResponse: false });
-    if (!data) {
-      createMessage.warning('鏂囦欢涓嬭浇澶辫触');
-      return;
-    }
-    if (!name || typeof name != 'string') {
-      name = '瀵煎嚭鏂囦欢';
-    }
-    let blobOptions = { type: 'application/vnd.ms-excel' };
-    let fileSuffix = '.xls';
-    if (isXlsx === true) {
-      blobOptions['type'] = XLSX_MIME_TYPE;
-      fileSuffix = XLSX_FILE_SUFFIX;
-    }
-    if (typeof window.navigator.msSaveBlob !== 'undefined') {
-      window.navigator.msSaveBlob(new Blob([data], blobOptions), name + fileSuffix);
-    } else {
-      let url = window.URL.createObjectURL(new Blob([data], blobOptions));
-      let link = document.createElement('a');
-      link.style.display = 'none';
-      link.href = url;
-      link.setAttribute('download', name + fileSuffix);
-      document.body.appendChild(link);
-      link.click();
-      document.body.removeChild(link); //涓嬭浇瀹屾垚绉婚櫎鍏冪礌
-      window.URL.revokeObjectURL(url); //閲婃斁鎺塨lob瀵硅薄
-    }
-  }
-
-  /**
-   * 瀵煎叆xls
-   * @param data 瀵煎叆鐨勬暟鎹�
-   * @param url
-   * @param success 鎴愬姛鍚庣殑鍥炶皟
-   */
-  async function importXls(data, url, success) {
-    const isReturn = (fileInfo) => {
-      try {
-        if (fileInfo.code === 201) {
-          let {
-            message,
-            result: { msg, fileUrl, fileName },
-          } = fileInfo;
-          let href = glob.uploadUrl + fileUrl;
-          createWarningModal({
-            title: message,
-            centered: false,
-            content: `<div>
-                                <span>${msg}</span><br/> 
-                                <span>鍏蜂綋璇︽儏璇�<a href = ${href} download = ${fileName}> 鐐瑰嚮涓嬭浇 </a> </span> 
-                              </div>`,
-          });
-          //update-begin---author:wangshuai ---date:20221121  for锛歔VUEN-2827]瀵煎叆鏃犳潈闄愶紝鎻愮ず鍥炬爣閿欒------------
-        } else if (fileInfo.code === 500 || fileInfo.code === 510) {
-          createMessage.error(fileInfo.message || `${data.file.name} 瀵煎叆澶辫触`);
-          //update-end---author:wangshuai ---date:20221121  for锛歔VUEN-2827]瀵煎叆鏃犳潈闄愶紝鎻愮ず鍥炬爣閿欒------------
-        } else {
-          createMessage.success(fileInfo.message || `${data.file.name} 鏂囦欢涓婁紶鎴愬姛`);
-        }
-      } catch (error) {
-        console.log('瀵煎叆鐨勬暟鎹紓甯�', error);
-      } finally {
-        typeof success === 'function' ? success(fileInfo) : '';
-      }
-    };
-    await defHttp.uploadFile({ url }, { file: data.file }, { success: isReturn });
-  }
-
-  return {
-    handleExportXls: (name: string, url: string, params?: object) => exportXls(name, url, params),
-    handleImportXls: (data, url, success) => importXls(data, url, success),
-    handleExportXlsx: (name: string, url: string, params?: object) => exportXls(name, url, params, true),
-  };
-}
diff --git a/src/hooks/system/useThirdLogin.ts b/src/hooks/system/useThirdLogin.ts
deleted file mode 100644
index 97ec603..0000000
--- a/src/hooks/system/useThirdLogin.ts
+++ /dev/null
@@ -1,198 +0,0 @@
-import { ref, unref } from 'vue';
-import { defHttp } from '/@/utils/http/axios';
-import { useGlobSetting } from '/@/hooks/setting';
-import { useMessage } from '/@/hooks/web/useMessage';
-import { useUserStore } from '/@/store/modules/user';
-import { setThirdCaptcha, getCaptcha } from '/@/api/sys/user';
-import { useI18n } from '/@/hooks/web/useI18n';
-
-export function useThirdLogin() {
-  const { createMessage, notification } = useMessage();
-  const { t } = useI18n();
-  const glob = useGlobSetting();
-  const userStore = useUserStore();
-  //绗笁鏂圭被鍨�
-  const thirdType = ref('');
-  //绗笁鏂圭櫥褰曠浉鍏充俊鎭�
-  const thirdLoginInfo = ref<any>({});
-  //鐘舵��
-  const thirdLoginState = ref(false);
-  //缁戝畾鎵嬫満鍙峰脊绐�
-  const bindingPhoneModal = ref(false);
-  //绗笁鏂圭敤鎴稶UID
-  const thirdUserUuid = ref('');
-  //鎻愮ず绐�
-  const thirdConfirmShow = ref(false);
-  //缁戝畾瀵嗙爜寮圭獥
-  const thirdPasswordShow = ref(false);
-  //缁戝畾瀵嗙爜
-  const thirdLoginPassword = ref('');
-  //缁戝畾鐢ㄦ埛
-  const thirdLoginUser = ref('');
-  //鍔犺浇涓�
-  const thirdCreateUserLoding = ref(false);
-  //缁戝畾鎵嬫満鍙�
-  const thirdPhone = ref('');
-  //楠岃瘉鐮�
-  const thirdCaptcha = ref('');
-  //绗笁鏂圭櫥褰�
-  function onThirdLogin(source) {
-    let url = `${glob.uploadUrl}/sys/thirdLogin/render/${source}`;
-    window.open(
-      url,
-      `login ${source}`,
-      'height=500, width=500, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no'
-    );
-    thirdType.value = source;
-    thirdLoginInfo.value = {};
-    thirdLoginState.value = false;
-    let receiveMessage = function (event) {
-      let token = event.data;
-      if (typeof token === 'string') {
-        //濡傛灉鏄瓧绗︿覆绫诲瀷 璇存槑鏄痶oken淇℃伅
-        if (token === '鐧诲綍澶辫触') {
-          createMessage.warning(token);
-        } else if (token.includes('缁戝畾鎵嬫満鍙�')) {
-          bindingPhoneModal.value = true;
-          let strings = token.split(',');
-          thirdUserUuid.value = strings[1];
-        } else {
-          doThirdLogin(token);
-        }
-      } else if (typeof token === 'object') {
-        //瀵硅薄绫诲瀷 璇存槑闇�瑕佹彁绀烘槸鍚︾粦瀹氱幇鏈夎处鍙�
-        if (token['isObj'] === true) {
-          thirdConfirmShow.value = true;
-          thirdLoginInfo.value = { ...token };
-        }
-      } else {
-        createMessage.warning('涓嶈瘑鍒殑淇℃伅浼犻��');
-      }
-    };
-    window.addEventListener('message', receiveMessage, false);
-  }
-  // 鏍规嵁token鎵ц鐧诲綍
-  function doThirdLogin(token) {
-    if (unref(thirdLoginState) === false) {
-      thirdLoginState.value = true;
-      userStore.ThirdLogin({ token, thirdType: unref(thirdType) }).then((res) => {
-        console.log('res====>doThirdLogin', res);
-        if (res && res.userInfo) {
-          notification.success({
-            message: t('sys.login.loginSuccessTitle'),
-            description: `${t('sys.login.loginSuccessDesc')}: ${res.userInfo.realname}`,
-            duration: 3,
-          });
-        } else {
-          requestFailed(res);
-        }
-      });
-    }
-  }
-
-  function requestFailed(err) {
-    notification.error({
-      message: '鐧诲綍澶辫触',
-      description: ((err.response || {}).data || {}).message || err.message || '璇锋眰鍑虹幇閿欒锛岃绋嶅悗鍐嶈瘯',
-      duration: 4,
-    });
-  }
-  // 缁戝畾宸叉湁璐﹀彿 闇�瑕佽緭鍏ュ瘑鐮�
-  function thirdLoginUserBind() {
-    thirdLoginPassword.value = '';
-    thirdLoginUser.value = thirdLoginInfo.value.uuid;
-    thirdConfirmShow.value = false;
-    thirdPasswordShow.value = true;
-  }
-  //鍒涘缓鏂拌处鍙�
-  function thirdLoginUserCreate() {
-    thirdCreateUserLoding.value = true;
-    // 璐﹀彿鍚嶅悗闈㈡坊鍔犱袱浣嶉殢鏈烘暟
-    thirdLoginInfo.value.suffix = parseInt(Math.random() * 98 + 1);
-    defHttp
-      .post({ url: '/sys/third/user/create', params: { thirdLoginInfo: unref(thirdLoginInfo) } }, { isTransformResponse: false })
-      .then((res) => {
-        if (res.success) {
-          let token = res.result;
-          doThirdLogin(token);
-          thirdConfirmShow.value = false;
-        } else {
-          createMessage.warning(res.message);
-        }
-      })
-      .finally(() => {
-        thirdCreateUserLoding.value = false;
-      });
-  }
-  // 鏍稿疄瀵嗙爜
-  function thirdLoginCheckPassword() {
-    let params = Object.assign({}, unref(thirdLoginInfo), { password: unref(thirdLoginPassword) });
-    defHttp.post({ url: '/sys/third/user/checkPassword', params }, { isTransformResponse: false }).then((res) => {
-      if (res.success) {
-        thirdLoginNoPassword();
-        doThirdLogin(res.result);
-      } else {
-        createMessage.warning(res.message);
-      }
-    });
-  }
-  // 娌℃湁瀵嗙爜 鍙栨秷鎿嶄綔
-  function thirdLoginNoPassword() {
-    thirdPasswordShow.value = false;
-    thirdLoginPassword.value = '';
-    thirdLoginUser.value = '';
-  }
-
-  //鍊掕鏃舵墽琛屽墠鐨勫嚱鏁�
-  function sendCodeApi() {
-    //return setThirdCaptcha({mobile:unref(thirdPhone)});
-    return getCaptcha({ mobile: unref(thirdPhone), smsmode: '0' });
-  }
-  //缁戝畾鎵嬫満鍙风偣鍑荤‘瀹氭寜閽�
-  function thirdHandleOk() {
-    if (!unref(thirdPhone)) {
-      cmsFailed('璇疯緭鍏ユ墜鏈哄彿');
-    }
-    if (!unref(thirdCaptcha)) {
-      cmsFailed('璇疯緭鍏ラ獙璇佺爜');
-    }
-    let params = {
-      mobile: unref(thirdPhone),
-      captcha: unref(thirdCaptcha),
-      thirdUserUuid: unref(thirdUserUuid),
-    };
-    defHttp.post({ url: '/sys/thirdLogin/bindingThirdPhone', params }, { isTransformResponse: false }).then((res) => {
-      if (res.success) {
-        bindingPhoneModal.value = false;
-        doThirdLogin(res.result);
-      } else {
-        createMessage.warning(res.message);
-      }
-    });
-  }
-  function cmsFailed(err) {
-    notification.error({
-      message: '鐧诲綍澶辫触',
-      description: err,
-      duration: 4,
-    });
-    return;
-  }
-  //杩斿洖鏁版嵁鍜屾柟娉�
-  return {
-    thirdPasswordShow,
-    thirdLoginCheckPassword,
-    thirdLoginNoPassword,
-    thirdLoginPassword,
-    thirdConfirmShow,
-    thirdCreateUserLoding,
-    thirdLoginUserCreate,
-    thirdLoginUserBind,
-    bindingPhoneModal,
-    thirdHandleOk,
-    thirdPhone,
-    thirdCaptcha,
-    onThirdLogin,
-    sendCodeApi,
-  };
-}
diff --git a/src/hooks/web/useAppInject.ts b/src/hooks/web/useAppInject.ts
deleted file mode 100644
index 7d6efb2..0000000
--- a/src/hooks/web/useAppInject.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { useAppProviderContext } from '/@/components/Application';
-import { computed, unref } from 'vue';
-
-export function useAppInject() {
-  const values = useAppProviderContext();
-
-  return {
-    getIsMobile: computed(() => unref(values.isMobile)),
-  };
-}
diff --git a/src/hooks/web/useContentHeight.ts b/src/hooks/web/useContentHeight.ts
deleted file mode 100644
index b41f300..0000000
--- a/src/hooks/web/useContentHeight.ts
+++ /dev/null
@@ -1,183 +0,0 @@
-import { ComputedRef, isRef, nextTick, Ref, ref, unref, watch } from 'vue';
-import { onMountedOrActivated } from '/@/hooks/core/onMountedOrActivated';
-import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
-import { useLayoutHeight } from '/@/layouts/default/content/useContentViewHeight';
-import { getViewportOffset } from '/@/utils/domUtils';
-import { isNumber, isString } from '/@/utils/is';
-
-export interface CompensationHeight {
-  // 浣跨敤 layout Footer 楂樺害浣滀负鍒ゆ柇琛ュ伩楂樺害鐨勬潯浠�
-  useLayoutFooter: boolean;
-  // refs HTMLElement
-  elements?: Ref[];
-}
-
-type Upward = number | string | null | undefined;
-
-/**
- * 鍔ㄦ�佽绠楀唴瀹归珮搴︼紝鏍规嵁閿氱偣dom鏈�涓嬪潗鏍囧埌灞忓箷鏈�涓嬪潗鏍囷紝鏍规嵁浼犲叆dom鐨勯珮搴︺�乸adding銆乵argin绛夊�艰繘琛屽姩鎬佽绠�
- * 鏈�缁堣幏鍙栧悎閫傜殑鍐呭楂樺害
- *
- * @param flag 鐢ㄤ簬寮�鍚绠楃殑鍝嶅簲寮忔爣璇�
- * @param anchorRef 閿氱偣缁勪欢 Ref<ElRef | ComponentRef>
- * @param subtractHeightRefs 寰呭噺鍘婚珮搴︾殑缁勪欢鍒楄〃 Ref<ElRef | ComponentRef>
- * @param substractSpaceRefs 寰呭噺鍘荤┖闂茬┖闂�(margins/paddings)鐨勭粍浠跺垪琛� Ref<ElRef | ComponentRef>
- * @param offsetHeightRef 璁$畻鍋忕Щ鐨勫搷搴斿紡楂樺害锛岃绠楅珮搴︽椂灏嗙洿鎺ュ噺鍘绘鍊�
- * @param upwardSpace 鍚戜笂閫掑綊鍑忓幓绌洪棽绌洪棿鐨� 灞傜骇 鎴� 鐩村埌鎸囧畾class涓烘 鏁板�间负2浠h〃鍚戜笂閫掑綊涓ゆ|鏁板�间负ant-layout琛ㄧず鍚戜笂閫掑綊鐩村埌纰拌.ant-layout涓烘
- * @returns 鍝嶅簲寮忛珮搴�
- */
-export function useContentHeight(
-  flag: ComputedRef<Boolean>,
-  anchorRef: Ref,
-  subtractHeightRefs: Ref[],
-  substractSpaceRefs: Ref[],
-  upwardSpace: Ref<Upward> | ComputedRef<Upward> | Upward = 0,
-  offsetHeightRef: Ref<number> = ref(0)
-) {
-  const contentHeight: Ref<Nullable<number>> = ref(null);
-  const { footerHeightRef: layoutFooterHeightRef } = useLayoutHeight();
-  let compensationHeight: CompensationHeight = {
-    useLayoutFooter: true,
-  };
-
-  const setCompensation = (params: CompensationHeight) => {
-    compensationHeight = params;
-  };
-
-  function redoHeight() {
-    nextTick(() => {
-      calcContentHeight();
-    });
-  }
-
-  function calcSubtractSpace(element: Element | null | undefined, direction: 'all' | 'top' | 'bottom' = 'all'): number {
-    function numberPx(px: string) {
-      return Number(px.replace(/[^\d]/g, ''));
-    }
-    let subtractHeight = 0;
-    const ZERO_PX = '0px';
-    if (element) {
-      const cssStyle = getComputedStyle(element);
-      const marginTop = numberPx(cssStyle?.marginTop ?? ZERO_PX);
-      const marginBottom = numberPx(cssStyle?.marginBottom ?? ZERO_PX);
-      const paddingTop = numberPx(cssStyle?.paddingTop ?? ZERO_PX);
-      const paddingBottom = numberPx(cssStyle?.paddingBottom ?? ZERO_PX);
-      if (direction === 'all') {
-        subtractHeight += marginTop;
-        subtractHeight += marginBottom;
-        subtractHeight += paddingTop;
-        subtractHeight += paddingBottom;
-      } else if (direction === 'top') {
-        subtractHeight += marginTop;
-        subtractHeight += paddingTop;
-      } else {
-        subtractHeight += marginBottom;
-        subtractHeight += paddingBottom;
-      }
-    }
-    return subtractHeight;
-  }
-
-  function getEl(element: any): Nullable<HTMLDivElement> {
-    if (element == null) {
-      return null;
-    }
-    return (element instanceof HTMLDivElement ? element : element.$el) as HTMLDivElement;
-  }
-
-  async function calcContentHeight() {
-    if (!flag.value) {
-      return;
-    }
-    // Add a delay to get the correct height
-    await nextTick();
-
-    const anchorEl = getEl(unref(anchorRef));
-    if (!anchorEl) {
-      return;
-    }
-    const { bottomIncludeBody } = getViewportOffset(anchorEl);
-
-    // substract elements height
-    let substractHeight = 0;
-    subtractHeightRefs.forEach((item) => {
-      substractHeight += getEl(unref(item))?.offsetHeight ?? 0;
-    });
-
-    // subtract margins / paddings
-    let substractSpaceHeight = calcSubtractSpace(anchorEl) ?? 0;
-    substractSpaceRefs.forEach((item) => {
-      substractSpaceHeight += calcSubtractSpace(getEl(unref(item)));
-    });
-
-    // upwardSpace
-    let upwardSpaceHeight = 0;
-    function upward(element: Element | null, upwardLvlOrClass: number | string | null | undefined) {
-      if (element && upwardLvlOrClass) {
-        const parent = element.parentElement;
-        if (parent) {
-          if (isString(upwardLvlOrClass)) {
-            if (!parent.classList.contains(upwardLvlOrClass)) {
-              upwardSpaceHeight += calcSubtractSpace(parent, 'bottom');
-              upward(parent, upwardLvlOrClass);
-            } else {
-              upwardSpaceHeight += calcSubtractSpace(parent, 'bottom');
-            }
-          } else if (isNumber(upwardLvlOrClass)) {
-            if (upwardLvlOrClass > 0) {
-              upwardSpaceHeight += calcSubtractSpace(parent, 'bottom');
-              upward(parent, --upwardLvlOrClass);
-            }
-          }
-        }
-      }
-    }
-    if (isRef(upwardSpace)) {
-      upward(anchorEl, unref(upwardSpace));
-    } else {
-      upward(anchorEl, upwardSpace);
-    }
-
-    let height =
-      bottomIncludeBody - unref(layoutFooterHeightRef) - unref(offsetHeightRef) - substractHeight - substractSpaceHeight - upwardSpaceHeight;
-
-    // compensation height
-    const calcCompensationHeight = () => {
-      compensationHeight.elements?.forEach((item) => {
-        height += getEl(unref(item))?.offsetHeight ?? 0;
-      });
-    };
-    if (compensationHeight.useLayoutFooter && unref(layoutFooterHeightRef) > 0) {
-      calcCompensationHeight();
-    } else {
-      calcCompensationHeight();
-    }
-
-    contentHeight.value = height;
-  }
-
-  onMountedOrActivated(() => {
-    nextTick(() => {
-      calcContentHeight();
-    });
-  });
-  useWindowSizeFn(
-    () => {
-      calcContentHeight();
-    },
-    50,
-    { immediate: true }
-  );
-  watch(
-    () => [layoutFooterHeightRef.value],
-    () => {
-      calcContentHeight();
-    },
-    {
-      flush: 'post',
-      immediate: true,
-    }
-  );
-
-  return { redoHeight, setCompensation, contentHeight };
-}
diff --git a/src/hooks/web/useContextMenu.ts b/src/hooks/web/useContextMenu.ts
deleted file mode 100644
index d3c53ce..0000000
--- a/src/hooks/web/useContextMenu.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { onUnmounted, getCurrentInstance } from 'vue';
-import { createContextMenu, destroyContextMenu } from '/@/components/ContextMenu';
-import type { ContextMenuItem } from '/@/components/ContextMenu';
-export type { ContextMenuItem };
-export function useContextMenu(authRemove = true) {
-  if (getCurrentInstance() && authRemove) {
-    onUnmounted(() => {
-      destroyContextMenu();
-    });
-  }
-  return [createContextMenu, destroyContextMenu];
-}
diff --git a/src/hooks/web/useCopyModal.ts b/src/hooks/web/useCopyModal.ts
deleted file mode 100644
index 694630b..0000000
--- a/src/hooks/web/useCopyModal.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import { isRef, unref, watch, Ref, ComputedRef } from 'vue';
-import Clipboard from 'clipboard';
-import { ModalOptionsEx, useMessage } from '/@/hooks/web/useMessage';
-
-/** 甯﹀鍒舵寜閽殑寮圭獥 */
-interface IOptions extends ModalOptionsEx {
-  // 瑕佸鍒剁殑鏂囨湰锛屽彲浠ユ槸涓�涓� ref 瀵硅薄锛屽姩鎬佹洿鏂�
-  copyText: string | Ref<string> | ComputedRef<string>;
-}
-
-const COPY_CLASS = 'copy-this-text';
-const CLIPBOARD_TEXT = 'data-clipboard-text';
-
-export function useCopyModal() {
-  return { createCopyModal };
-}
-
-const { createMessage, createConfirm } = useMessage();
-
-/** 鍒涘缓澶嶅埗寮圭獥 */
-function createCopyModal(options: Partial<IOptions>) {
-  let modal = createConfirm({
-    ...options,
-    iconType: options.iconType ?? 'info',
-    width: options.width ?? 500,
-    title: options.title ?? '澶嶅埗',
-    maskClosable: options.maskClosable ?? true,
-    okText: options.okText ?? '澶嶅埗',
-    okButtonProps: {
-      ...options.okButtonProps,
-      class: COPY_CLASS,
-      [CLIPBOARD_TEXT]: unref(options.copyText),
-    } as any,
-    onOk() {
-      return new Promise((resolve: any) => {
-        const clipboard = new Clipboard('.' + COPY_CLASS);
-        clipboard.on('success', () => {
-          clipboard.destroy();
-          createMessage.success('澶嶅埗鎴愬姛');
-          resolve();
-        });
-        clipboard.on('error', () => {
-          createMessage.error('璇ユ祻瑙堝櫒涓嶆敮鎸佽嚜鍔ㄥ鍒�');
-          clipboard.destroy();
-          resolve();
-        });
-      });
-    },
-  });
-
-  // 鍔ㄦ�佹洿鏂� copyText
-  if (isRef(options.copyText)) {
-    watch(options.copyText, (copyText) => {
-      modal.update({
-        okButtonProps: {
-          ...options.okButtonProps,
-          class: COPY_CLASS,
-          [CLIPBOARD_TEXT]: copyText,
-        } as any,
-      });
-    });
-  }
-  return modal;
-}
diff --git a/src/hooks/web/useCopyToClipboard.ts b/src/hooks/web/useCopyToClipboard.ts
deleted file mode 100644
index 7a7fea8..0000000
--- a/src/hooks/web/useCopyToClipboard.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { ref, watch } from 'vue';
-
-import { isDef } from '/@/utils/is';
-interface Options {
-  target?: HTMLElement;
-}
-export function useCopyToClipboard(initial?: string) {
-  const clipboardRef = ref(initial || '');
-  const isSuccessRef = ref(false);
-  const copiedRef = ref(false);
-
-  watch(
-    clipboardRef,
-    (str?: string) => {
-      if (isDef(str)) {
-        copiedRef.value = true;
-        isSuccessRef.value = copyTextToClipboard(str);
-      }
-    },
-    { immediate: !!initial, flush: 'sync' }
-  );
-
-  return { clipboardRef, isSuccessRef, copiedRef };
-}
-
-export function copyTextToClipboard(input: string, { target = document.body }: Options = {}) {
-  const element = document.createElement('textarea');
-  const previouslyFocusedElement = document.activeElement;
-
-  element.value = input;
-
-  element.setAttribute('readonly', '');
-
-  (element.style as any).contain = 'strict';
-  element.style.position = 'absolute';
-  element.style.left = '-9999px';
-  element.style.fontSize = '12pt';
-
-  const selection = document.getSelection();
-  let originalRange;
-  if (selection && selection.rangeCount > 0) {
-    originalRange = selection.getRangeAt(0);
-  }
-
-  target.append(element);
-  element.select();
-
-  element.selectionStart = 0;
-  element.selectionEnd = input.length;
-
-  let isSuccess = false;
-  try {
-    isSuccess = document.execCommand('copy');
-  } catch (e) {
-    throw new Error(e);
-  }
-
-  element.remove();
-
-  if (originalRange && selection) {
-    selection.removeAllRanges();
-    selection.addRange(originalRange);
-  }
-
-  if (previouslyFocusedElement) {
-    (previouslyFocusedElement as HTMLElement).focus();
-  }
-  return isSuccess;
-}
diff --git a/src/hooks/web/useDesign.ts b/src/hooks/web/useDesign.ts
deleted file mode 100644
index 046674b..0000000
--- a/src/hooks/web/useDesign.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { useAppProviderContext } from '/@/components/Application';
-// import { computed } from 'vue';
-// import { lowerFirst } from 'lodash-es';
-export function useDesign(scope: string) {
-  const values = useAppProviderContext();
-  // const $style = cssModule ? useCssModule() : {};
-
-  // const style: Record<string, string> = {};
-  // if (cssModule) {
-  //   Object.keys($style).forEach((key) => {
-  //     // const moduleCls = $style[key];
-  //     const k = key.replace(new RegExp(`^${values.prefixCls}-?`, 'ig'), '');
-  //     style[lowerFirst(k)] = $style[key];
-  //   });
-  // }
-  return {
-    // prefixCls: computed(() => `${values.prefixCls}-${scope}`),
-    prefixCls: `${values.prefixCls}-${scope}`,
-    prefixVar: values.prefixCls,
-    // style,
-  };
-}
diff --git a/src/hooks/web/useECharts.ts b/src/hooks/web/useECharts.ts
deleted file mode 100644
index 858d1a7..0000000
--- a/src/hooks/web/useECharts.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-import type { EChartsOption } from 'echarts';
-import type { Ref } from 'vue';
-import { useTimeoutFn } from '/@/hooks/core/useTimeout';
-import { tryOnUnmounted } from '@vueuse/core';
-import { unref, nextTick, watch, computed, ref } from 'vue';
-import { useDebounceFn } from '@vueuse/core';
-import { useEventListener } from '/@/hooks/event/useEventListener';
-import { useBreakpoint } from '/@/hooks/event/useBreakpoint';
-import echarts from '/@/utils/lib/echarts';
-import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-
-export function useECharts(elRef: Ref<HTMLDivElement>, theme: 'light' | 'dark' | 'default' = 'default') {
-  const { getDarkMode: getSysDarkMode } = useRootSetting();
-
-  const getDarkMode = computed(() => {
-    return theme === 'default' ? getSysDarkMode.value : theme;
-  });
-  let chartInstance: echarts.ECharts | null = null;
-  let resizeFn: Fn = resize;
-  const cacheOptions = ref({}) as Ref<EChartsOption>;
-  let removeResizeFn: Fn = () => {};
-
-  resizeFn = useDebounceFn(resize, 200);
-
-  const getOptions = computed(() => {
-    if (getDarkMode.value !== 'dark') {
-      return cacheOptions.value as EChartsOption;
-    }
-    return {
-      backgroundColor: 'transparent',
-      ...cacheOptions.value,
-    } as EChartsOption;
-  });
-
-  function initCharts(t = theme) {
-    const el = unref(elRef);
-    if (!el || !unref(el)) {
-      return;
-    }
-
-    chartInstance = echarts.init(el, t);
-    const { removeEvent } = useEventListener({
-      el: window,
-      name: 'resize',
-      listener: resizeFn,
-    });
-    removeResizeFn = removeEvent;
-    const { widthRef, screenEnum } = useBreakpoint();
-    if (unref(widthRef) <= screenEnum.MD || el.offsetHeight === 0) {
-      useTimeoutFn(() => {
-        resizeFn();
-      }, 30);
-    }
-  }
-
-  function setOptions(options: EChartsOption, clear = true) {
-    cacheOptions.value = options;
-    if (unref(elRef)?.offsetHeight === 0) {
-      useTimeoutFn(() => {
-        setOptions(unref(getOptions));
-      }, 30);
-      return;
-    }
-    nextTick(() => {
-      useTimeoutFn(() => {
-        if (!chartInstance) {
-          initCharts(getDarkMode.value as 'default');
-
-          if (!chartInstance) return;
-        }
-        clear && chartInstance?.clear();
-
-        chartInstance?.setOption(unref(getOptions));
-      }, 30);
-    });
-  }
-
-  function resize() {
-    chartInstance?.resize();
-  }
-
-  watch(
-    () => getDarkMode.value,
-    (theme) => {
-      if (chartInstance) {
-        chartInstance.dispose();
-        initCharts(theme as 'default');
-        setOptions(cacheOptions.value);
-      }
-    }
-  );
-
-  tryOnUnmounted(() => {
-    if (!chartInstance) return;
-    removeResizeFn();
-    chartInstance.dispose();
-    chartInstance = null;
-  });
-
-  function getInstance(): echarts.ECharts | null {
-    if (!chartInstance) {
-      initCharts(getDarkMode.value as 'default');
-    }
-    return chartInstance;
-  }
-
-  return {
-    setOptions,
-    resize,
-    echarts,
-    getInstance,
-  };
-}
diff --git a/src/hooks/web/useFullContent.ts b/src/hooks/web/useFullContent.ts
deleted file mode 100644
index 7dea077..0000000
--- a/src/hooks/web/useFullContent.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { computed, unref } from 'vue';
-
-import { useAppStore } from '/@/store/modules/app';
-
-import { useRouter } from 'vue-router';
-
-/**
- * @description: Full screen display content
- */
-export const useFullContent = () => {
-  const appStore = useAppStore();
-  const router = useRouter();
-  const { currentRoute } = router;
-
-  // Whether to display the content in full screen without displaying the menu
-  const getFullContent = computed(() => {
-    // Query parameters, the full screen is displayed when the address bar has a full parameter
-    const route = unref(currentRoute);
-    const query = route.query;
-    if (query && Reflect.has(query, '__full__')) {
-      return true;
-    }
-    // Return to the configuration in the configuration file
-    return appStore.getProjectConfig.fullContent;
-  });
-
-  return { getFullContent };
-};
diff --git a/src/hooks/web/useI18n.ts b/src/hooks/web/useI18n.ts
deleted file mode 100644
index 2a777b7..0000000
--- a/src/hooks/web/useI18n.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { i18n } from '/@/locales/setupI18n';
-
-type I18nGlobalTranslation = {
-  (key: string): string;
-  (key: string, locale: string): string;
-  (key: string, locale: string, list: unknown[]): string;
-  (key: string, locale: string, named: Record<string, unknown>): string;
-  (key: string, list: unknown[]): string;
-  (key: string, named: Record<string, unknown>): string;
-};
-
-type I18nTranslationRestParameters = [string, any];
-
-function getKey(namespace: string | undefined, key: string) {
-  if (!namespace) {
-    return key;
-  }
-  if (key.startsWith(namespace)) {
-    return key;
-  }
-  return `${namespace}.${key}`;
-}
-
-export function useI18n(namespace?: string): {
-  t: I18nGlobalTranslation;
-} {
-  const normalFn = {
-    t: (key: string) => {
-      return getKey(namespace, key);
-    },
-  };
-
-  if (!i18n) {
-    return normalFn;
-  }
-
-  const { t, ...methods } = i18n.global;
-
-  const tFn: I18nGlobalTranslation = (key: string, ...arg: any[]) => {
-    if (!key) return '';
-    if (!key.includes('.') && !namespace) return key;
-    return t(getKey(namespace, key), ...(arg as I18nTranslationRestParameters));
-  };
-  return {
-    ...methods,
-    t: tFn,
-  };
-}
-
-// Why write this function锛�
-// Mainly to configure the vscode i18nn ally plugin. This function is only used for routing and menus. Please use useI18n for other places
-
-// 涓轰粈涔堣缂栧啓姝ゅ嚱鏁帮紵
-// 涓昏鐢ㄤ簬閰嶅悎vscode i18nn ally鎻掍欢銆傛鍔熻兘浠呯敤浜庤矾鐢卞拰鑿滃崟銆傝鍦ㄥ叾浠栧湴鏂逛娇鐢╱seI18n
-export const t = (key: string) => key;
diff --git a/src/hooks/web/useLockPage.ts b/src/hooks/web/useLockPage.ts
deleted file mode 100644
index c543be9..0000000
--- a/src/hooks/web/useLockPage.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-import { computed, onUnmounted, unref, watchEffect } from 'vue';
-import { useThrottleFn } from '@vueuse/core';
-
-import { useAppStore } from '/@/store/modules/app';
-import { useLockStore } from '/@/store/modules/lock';
-
-import { useUserStore } from '/@/store/modules/user';
-import { useRootSetting } from '../setting/useRootSetting';
-
-export function useLockPage() {
-  const { getLockTime } = useRootSetting();
-  const lockStore = useLockStore();
-  const userStore = useUserStore();
-  const appStore = useAppStore();
-
-  let timeId: TimeoutHandle;
-
-  function clear(): void {
-    window.clearTimeout(timeId);
-  }
-
-  function resetCalcLockTimeout(): void {
-    // not login
-    if (!userStore.getToken) {
-      clear();
-      return;
-    }
-    const lockTime = appStore.getProjectConfig.lockTime;
-    if (!lockTime || lockTime < 1) {
-      clear();
-      return;
-    }
-    clear();
-
-    timeId = setTimeout(() => {
-      lockPage();
-    }, lockTime * 60 * 1000);
-  }
-
-  function lockPage(): void {
-    lockStore.setLockInfo({
-      isLock: true,
-      pwd: undefined,
-    });
-  }
-
-  watchEffect((onClean) => {
-    if (userStore.getToken) {
-      resetCalcLockTimeout();
-    } else {
-      clear();
-    }
-    onClean(() => {
-      clear();
-    });
-  });
-
-  onUnmounted(() => {
-    clear();
-  });
-
-  const keyupFn = useThrottleFn(resetCalcLockTimeout, 2000);
-
-  return computed(() => {
-    if (unref(getLockTime)) {
-      return { onKeyup: keyupFn, onMousemove: keyupFn };
-    } else {
-      clear();
-      return {};
-    }
-  });
-}
diff --git a/src/hooks/web/useMessage.ts b/src/hooks/web/useMessage.ts
deleted file mode 100644
index 0af6519..0000000
--- a/src/hooks/web/useMessage.ts
+++ /dev/null
@@ -1,141 +0,0 @@
-import type { ModalFunc, ModalFuncProps } from 'ant-design-vue/lib/modal/Modal';
-
-import { Modal, message as Message, notification } from 'ant-design-vue';
-import { InfoCircleFilled, CheckCircleFilled, CloseCircleFilled } from '@ant-design/icons-vue';
-
-import { NotificationArgsProps, ConfigProps } from 'ant-design-vue/lib/notification';
-import { useI18n } from './useI18n';
-import { isString } from '/@/utils/is';
-import { h } from 'vue';
-
-export interface NotifyApi {
-  info(config: NotificationArgsProps): void;
-  success(config: NotificationArgsProps): void;
-  error(config: NotificationArgsProps): void;
-  warn(config: NotificationArgsProps): void;
-  warning(config: NotificationArgsProps): void;
-  open(args: NotificationArgsProps): void;
-  close(key: String): void;
-  config(options: ConfigProps): void;
-  destroy(): void;
-}
-
-export declare type NotificationPlacement = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';
-export declare type IconType = 'success' | 'info' | 'error' | 'warning';
-export interface ModalOptionsEx extends Omit<ModalFuncProps, 'iconType'> {
-  iconType: 'warning' | 'success' | 'error' | 'info';
-}
-export type ModalOptionsPartial = Partial<ModalOptionsEx> & Pick<ModalOptionsEx, 'content'>;
-
-interface ConfirmOptions {
-  info: ModalFunc;
-  success: ModalFunc;
-  error: ModalFunc;
-  warn: ModalFunc;
-  warning: ModalFunc;
-}
-
-function getIcon(iconType: string) {
-  try {
-    if (iconType === 'warning') {
-      return  h(InfoCircleFilled,{"class":"modal-icon-warning"})
-    } else if (iconType === 'success') {
-      return h(CheckCircleFilled,{"class": "modal-icon-success"});
-    } else if (iconType === 'info') {
-      return h(InfoCircleFilled,{"class": "modal-icon-info"});
-    } else {
-      return h(CloseCircleFilled,{"class":"modal-icon-error"});
-    }
-  } catch (e) {
-    console.log(e);
-  }
-}
-
-function renderContent({ content }: Pick<ModalOptionsEx, 'content'>) {
-  try {
-    if (isString(content)) {
-      return h('div', h('div', {'innerHTML':content as string}));
-    } else {
-      return content;
-    }
-  } catch (e) {
-    console.log(e);
-    return content;
-  }
-}
-
-/**
- * @description: Create confirmation box
- */
-function createConfirm(options: ModalOptionsEx): ReturnType<ModalFunc> {
-  const iconType = options.iconType || 'warning';
-  Reflect.deleteProperty(options, 'iconType');
-  const opt: ModalFuncProps = {
-    centered: true,
-    icon: getIcon(iconType),
-    ...options,
-    content: renderContent(options),
-  };
-  return Modal.confirm(opt);
-}
-
-const getBaseOptions = () => {
-  const { t } = useI18n();
-  return {
-    okText: t('common.okText'),
-    centered: true,
-  };
-};
-
-function createModalOptions(options: ModalOptionsPartial, icon: string): ModalOptionsPartial {
-  //update-begin-author:taoyan date:2023-1-10 for: 鍙互鑷畾涔夊浘鏍� 
-  let titleIcon:any = ''
-  if(options.icon){
-    titleIcon = options.icon;
-  }else{
-    titleIcon = getIcon(icon)
-  }
-  //update-end-author:taoyan date:2023-1-10 for: 鍙互鑷畾涔夊浘鏍� 
-  return {
-    ...getBaseOptions(),
-    ...options,
-    content: renderContent(options),
-    icon: titleIcon
-  };
-}
-
-function createSuccessModal(options: ModalOptionsPartial) {
-  return Modal.success(createModalOptions(options, 'success'));
-}
-
-function createErrorModal(options: ModalOptionsPartial) {
-  return Modal.error(createModalOptions(options, 'close'));
-}
-
-function createInfoModal(options: ModalOptionsPartial) {
-  return Modal.info(createModalOptions(options, 'info'));
-}
-
-function createWarningModal(options: ModalOptionsPartial) {
-  return Modal.warning(createModalOptions(options, 'warning'));
-}
-
-notification.config({
-  placement: 'topRight',
-  duration: 3,
-});
-
-/**
- * @description: message
- */
-export function useMessage() {
-  return {
-    createMessage: Message,
-    notification: notification as NotifyApi,
-    createConfirm: createConfirm,
-    createSuccessModal,
-    createErrorModal,
-    createInfoModal,
-    createWarningModal,
-  };
-}
diff --git a/src/hooks/web/useMessage.tsx_backup b/src/hooks/web/useMessage.tsx_backup
deleted file mode 100644
index ad64eda..0000000
--- a/src/hooks/web/useMessage.tsx_backup
+++ /dev/null
@@ -1,132 +0,0 @@
-import type { ModalFunc, ModalFuncProps } from 'ant-design-vue/lib/modal/Modal';
-
-import { Modal, message as Message, notification } from 'ant-design-vue';
-import { InfoCircleFilled, CheckCircleFilled, CloseCircleFilled } from '@ant-design/icons-vue';
-
-import { NotificationArgsProps, ConfigProps } from 'ant-design-vue/lib/notification';
-import { useI18n } from './useI18n';
-import { isString } from '/@/utils/is';
-
-export interface NotifyApi {
-  info(config: NotificationArgsProps): void;
-  success(config: NotificationArgsProps): void;
-  error(config: NotificationArgsProps): void;
-  warn(config: NotificationArgsProps): void;
-  warning(config: NotificationArgsProps): void;
-  open(args: NotificationArgsProps): void;
-  close(key: String): void;
-  config(options: ConfigProps): void;
-  destroy(): void;
-}
-
-export declare type NotificationPlacement = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';
-export declare type IconType = 'success' | 'info' | 'error' | 'warning';
-export interface ModalOptionsEx extends Omit<ModalFuncProps, 'iconType'> {
-  iconType: 'warning' | 'success' | 'error' | 'info';
-}
-export type ModalOptionsPartial = Partial<ModalOptionsEx> & Pick<ModalOptionsEx, 'content'>;
-
-interface ConfirmOptions {
-  info: ModalFunc;
-  success: ModalFunc;
-  error: ModalFunc;
-  warn: ModalFunc;
-  warning: ModalFunc;
-}
-
-function getIcon(iconType: string) {
-  try {
-    if (iconType === 'warning') {
-      return <InfoCircleFilled class="modal-icon-warning" />;
-    } else if (iconType === 'success') {
-      return <CheckCircleFilled class="modal-icon-success" />;
-    } else if (iconType === 'info') {
-      return <InfoCircleFilled class="modal-icon-info" />;
-    } else {
-      return <CloseCircleFilled class="modal-icon-error" />;
-    }
-  } catch (e) {
-    console.log(e);
-  }
-}
-
-function renderContent({ content }: Pick<ModalOptionsEx, 'content'>) {
-  try {
-    if (isString(content)) {
-      return <div innerHTML={`<div>${content as string}</div>`}></div>;
-    } else {
-      return content;
-    }
-  } catch (e) {
-    console.log(e);
-    return content;
-  }
-}
-
-/**
- * @description: Create confirmation box
- */
-function createConfirm(options: ModalOptionsEx): ReturnType<ModalFunc> {
-  const iconType = options.iconType || 'warning';
-  Reflect.deleteProperty(options, 'iconType');
-  const opt: ModalFuncProps = {
-    centered: true,
-    icon: getIcon(iconType),
-    ...options,
-    content: renderContent(options),
-  };
-  return Modal.confirm(opt);
-}
-
-const getBaseOptions = () => {
-  const { t } = useI18n();
-  return {
-    okText: t('common.okText'),
-    centered: true,
-  };
-};
-
-function createModalOptions(options: ModalOptionsPartial, icon: string): ModalOptionsPartial {
-  return {
-    ...getBaseOptions(),
-    ...options,
-    content: renderContent(options),
-    icon: getIcon(icon),
-  };
-}
-
-function createSuccessModal(options: ModalOptionsPartial) {
-  return Modal.success(createModalOptions(options, 'success'));
-}
-
-function createErrorModal(options: ModalOptionsPartial) {
-  return Modal.error(createModalOptions(options, 'close'));
-}
-
-function createInfoModal(options: ModalOptionsPartial) {
-  return Modal.info(createModalOptions(options, 'info'));
-}
-
-function createWarningModal(options: ModalOptionsPartial) {
-  return Modal.warning(createModalOptions(options, 'warning'));
-}
-
-notification.config({
-  placement: 'topRight',
-  duration: 3,
-});
-
-/**
- * @description: message
- */
-export function useMessage() {
-  return {
-    createMessage: Message,
-    notification: notification as NotifyApi,
-    createConfirm: createConfirm,
-    createSuccessModal,
-    createErrorModal,
-    createInfoModal,
-    createWarningModal,
-  };
-}
diff --git a/src/hooks/web/usePage.ts b/src/hooks/web/usePage.ts
deleted file mode 100644
index d6df000..0000000
--- a/src/hooks/web/usePage.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import type { RouteLocationRaw, Router } from 'vue-router';
-
-import { PageEnum } from '/@/enums/pageEnum';
-import { isString } from '/@/utils/is';
-import { unref } from 'vue';
-
-import { useRouter } from 'vue-router';
-import { REDIRECT_NAME } from '/@/router/constant';
-
-export type RouteLocationRawEx = Omit<RouteLocationRaw, 'path'> & { path: PageEnum };
-
-function handleError(e: Error) {
-  console.error(e);
-}
-
-// page switch
-export function useGo(_router?: Router) {
-  let router;
-  if (!_router) {
-    router = useRouter();
-  }
-  const { push, replace } = _router || router;
-  function go(opt: PageEnum | RouteLocationRawEx | string = PageEnum.BASE_HOME, isReplace = false) {
-    if (!opt) {
-      return;
-    }
-    if (isString(opt)) {
-      isReplace ? replace(opt).catch(handleError) : push(opt).catch(handleError);
-    } else {
-      const o = opt as RouteLocationRaw;
-      isReplace ? replace(o).catch(handleError) : push(o).catch(handleError);
-    }
-  }
-  return go;
-}
-
-/**
- * @description: redo current page
- */
-export const useRedo = (_router?: Router) => {
-  const { push, currentRoute } = _router || useRouter();
-  const { query, params = {}, name, fullPath } = unref(currentRoute.value);
-  function redo(): Promise<boolean> {
-    return new Promise((resolve) => {
-      if (name === REDIRECT_NAME) {
-        resolve(false);
-        return;
-      }
-      if (name && Object.keys(params).length > 0) {
-        //update-begin-author:taoyan date:2022-10-19 for: VUEN-2356 銆恦ue3銆憃nline琛ㄥ崟銆佽〃鍗曡璁″櫒 鍔熻兘娴嬭瘯 鍙抽敭鍒锋柊鏃� 404
-        if(isDynamicRoute(params, name)){
-          params['_redirect_type'] = 'path';
-          params['path'] = fullPath;
-        }else{
-          params['_redirect_type'] = 'name';
-          params['path'] = String(name);
-        }
-        //update-end-author:taoyan date:2022-10-19 for: VUEN-2356 銆恦ue3銆憃nline琛ㄥ崟銆佽〃鍗曡璁″櫒 鍔熻兘娴嬭瘯 鍙抽敭鍒锋柊鏃� 404
-      } else {
-        params['_redirect_type'] = 'path';
-        params['path'] = fullPath;
-      }
-      push({ name: REDIRECT_NAME, params, query }).then(() => resolve(true));
-    });
-  }
-  return redo;
-};
-
-/**
- * 鍒ゆ柇鏄笉鏄姩鎬佽矾鐢辩殑璺宠浆
- * @param params
- * @param name
- */
-function isDynamicRoute(params, name){
-  let arr = Object.keys(params);
-  let flag = false; 
-  for(let i=0;i<arr.length;i++){
-    let key = '@'+arr[i];
-    if((name as string).indexOf(key)>0){
-      flag = true;
-      break;
-    }
-  }
-  return flag;
-}
diff --git a/src/hooks/web/usePagination.ts b/src/hooks/web/usePagination.ts
deleted file mode 100644
index ea234ef..0000000
--- a/src/hooks/web/usePagination.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import type { Ref } from 'vue';
-import { ref, unref, computed } from 'vue';
-
-function pagination<T = any>(list: T[], pageNo: number, pageSize: number): T[] {
-  const offset = (pageNo - 1) * Number(pageSize);
-  const ret = offset + Number(pageSize) >= list.length ? list.slice(offset, list.length) : list.slice(offset, offset + Number(pageSize));
-  return ret;
-}
-
-export function usePagination<T = any>(list: Ref<T[]>, pageSize: number) {
-  const currentPage = ref(1);
-  const pageSizeRef = ref(pageSize);
-
-  const getPaginationList = computed(() => {
-    return pagination(unref(list), unref(currentPage), unref(pageSizeRef));
-  });
-
-  const getTotal = computed(() => {
-    return unref(list).length;
-  });
-
-  function setCurrentPage(page: number) {
-    currentPage.value = page;
-  }
-
-  function setPageSize(pageSize: number) {
-    pageSizeRef.value = pageSize;
-  }
-
-  return { setCurrentPage, getTotal, setPageSize, getPaginationList };
-}
diff --git a/src/hooks/web/usePermission.ts b/src/hooks/web/usePermission.ts
deleted file mode 100644
index 1de03f8..0000000
--- a/src/hooks/web/usePermission.ts
+++ /dev/null
@@ -1,174 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { useAppStore } from '/@/store/modules/app';
-import { usePermissionStore } from '/@/store/modules/permission';
-import { useUserStore } from '/@/store/modules/user';
-
-import { useTabs } from './useTabs';
-
-import { router, resetRouter } from '/@/router';
-// import { RootRoute } from '/@/router/routes';
-
-import projectSetting from '/@/settings/projectSetting';
-import { PermissionModeEnum } from '/@/enums/appEnum';
-import { RoleEnum } from '/@/enums/roleEnum';
-
-import { intersection } from 'lodash-es';
-import { isArray } from '/@/utils/is';
-import { useMultipleTabStore } from '/@/store/modules/multipleTab';
-
-// User permissions related operations
-export function usePermission() {
-  const userStore = useUserStore();
-  const appStore = useAppStore();
-  const permissionStore = usePermissionStore();
-  //鍔ㄦ�佸姞杞芥祦绋嬭妭鐐硅〃鍗曟潈闄�
-  let formData: any = {};
-  function initBpmFormData(_bpmFormData) {
-    formData = _bpmFormData;
-  }
-  const { closeAll } = useTabs(router);
-
-  //==================================宸ヤ綔娴佹潈闄愬垽鏂�-begin=========================================
-  function hasBpmPermission(code, type) {
-    // 绂佺敤-type=2
-    // 鏄剧ず-type=1
-    let codeList: string[] = [];
-    let permissionList = formData.permissionList;
-    if (permissionList && permissionList.length > 0) {
-      for (let item of permissionList) {
-        if (item.type == type) {
-          codeList.push(item.action);
-        }
-      }
-    }
-    return codeList.indexOf(code) >= 0;
-  }
-  //==================================宸ヤ綔娴佹潈闄愬垽鏂�-end=========================================
-
-  /**
-   * Change permission mode
-   */
-  async function togglePermissionMode() {
-    appStore.setProjectConfig({
-      permissionMode: projectSetting.permissionMode === PermissionModeEnum.BACK ? PermissionModeEnum.ROUTE_MAPPING : PermissionModeEnum.BACK,
-    });
-    location.reload();
-  }
-
-  /**
-   * Reset and regain authority resource information
-   * @param id
-   */
-  async function resume() {
-    const tabStore = useMultipleTabStore();
-    tabStore.clearCacheTabs();
-    resetRouter();
-    const routes = await permissionStore.buildRoutesAction();
-    routes.forEach((route) => {
-      router.addRoute(route as unknown as RouteRecordRaw);
-    });
-    permissionStore.setLastBuildMenuTime();
-    closeAll();
-  }
-
-  /**
-   * 纭畾鏄惁瀛樺湪鏉冮檺
-   */
-  function hasPermission(value?: RoleEnum | RoleEnum[] | string | string[], def = true): boolean {
-    // Visible by default
-    if (!value) {
-      return def;
-    }
-
-    const permMode = projectSetting.permissionMode;
-
-    if ([PermissionModeEnum.ROUTE_MAPPING, PermissionModeEnum.ROLE].includes(permMode)) {
-      if (!isArray(value)) {
-        return userStore.getRoleList?.includes(value as RoleEnum);
-      }
-      return (intersection(value, userStore.getRoleList) as RoleEnum[]).length > 0;
-    }
-
-    if (PermissionModeEnum.BACK === permMode) {
-      const allCodeList = permissionStore.getPermCodeList as string[];
-      if (!isArray(value) && allCodeList && allCodeList.length > 0) {
-        //=============================宸ヤ綔娴佹潈闄愬垽鏂�-鏄剧ず-begin==============================================
-        if (formData) {
-          let code = value as string;
-          if (hasBpmPermission(code, '1') === true) {
-            return true;
-          }
-        }
-        //=============================宸ヤ綔娴佹潈闄愬垽鏂�-鏄剧ず-end==============================================
-        return allCodeList.includes(value);
-      }
-      return (intersection(value, allCodeList) as string[]).length > 0;
-    }
-    return true;
-  }
-  /**
-   * 鏄惁绂佺敤缁勪欢
-   */
-  function isDisabledAuth(value?: RoleEnum | RoleEnum[] | string | string[], def = true): boolean {
-    //=============================宸ヤ綔娴佹潈闄愬垽鏂�-绂佺敤-begin==============================================
-    if (formData) {
-      let code = value as string;
-      if (hasBpmPermission(code, '2') === true) {
-        return true;
-      }
-      //update-begin-author:taoyan date:2022-6-17 for: VUEN-1342銆愭祦绋嬨�戠紪鐮佹柟寮� 鑺傜偣鏉冮檺閰嶇疆濂藉悗锛屾湭鐢熸晥
-      if (isCodingButNoConfig(code) == true) {
-        return false;
-      }
-      //update-end-author:taoyan date:2022-6-17 for: VUEN-1342銆愭祦绋嬨�戠紪鐮佹柟寮� 鑺傜偣鏉冮檺閰嶇疆濂藉悗锛屾湭鐢熸晥
-    }
-    //=============================宸ヤ綔娴佹潈闄愬垽鏂�-绂佺敤-end==============================================
-    return !hasPermission(value);
-  }
-
-  /**
-   * Change roles
-   * @param roles
-   */
-  async function changeRole(roles: RoleEnum | RoleEnum[]): Promise<void> {
-    if (projectSetting.permissionMode !== PermissionModeEnum.ROUTE_MAPPING) {
-      throw new Error('Please switch PermissionModeEnum to ROUTE_MAPPING mode in the configuration to operate!');
-    }
-
-    if (!isArray(roles)) {
-      roles = [roles];
-    }
-    userStore.setRoleList(roles);
-    await resume();
-  }
-
-  /**
-   * refresh menu data
-   */
-  async function refreshMenu() {
-    resume();
-  }
-
-  //update-begin-author:taoyan date:2022-6-17 for: VUEN-1342銆愭祦绋嬨�戠紪鐮佹柟寮� 鑺傜偣鏉冮檺閰嶇疆濂藉悗锛屾湭鐢熸晥
-  /**
-   * 鍒ゆ柇鏄笉鏄� 浠g爜閲屽啓浜嗛�昏緫浣嗘槸娌℃湁閰嶇疆鏉冮檺杩欑鎯呭喌
-   */
-  function isCodingButNoConfig(code) {
-    let all = permissionStore.allAuthList;
-    if (all && all instanceof Array) {
-      let temp = all.filter((item) => item.action == code);
-      if (temp && temp.length > 0) {
-        if (temp[0].status == '0') {
-          return true;
-        }
-      } else {
-        return true;
-      }
-    }
-    return false;
-  }
-  //update-end-author:taoyan date:2022-6-17 for: VUEN-1342銆愭祦绋嬨�戠紪鐮佹柟寮� 鑺傜偣鏉冮檺閰嶇疆濂藉悗锛屾湭鐢熸晥
-
-  return { changeRole, hasPermission, togglePermissionMode, refreshMenu, isDisabledAuth, initBpmFormData };
-}
diff --git a/src/hooks/web/usePrintJS.ts b/src/hooks/web/usePrintJS.ts
deleted file mode 100644
index 9cfe0a6..0000000
--- a/src/hooks/web/usePrintJS.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { nextTick } from 'vue';
-import $printJS, { Configuration } from 'print-js';
-import Print from 'vue-print-nb-jeecg/src/printarea';
-
-/**
- * 璋冪敤 printJS锛屽鏋渢ype = html锛屽氨璧� printNB 鐨勬柟娉�
- */
-export function printJS(configuration: Configuration) {
-  if (configuration?.type === 'html') {
-    printNb(configuration.printable);
-  } else {
-    return $printJS(configuration);
-  }
-}
-
-/** 璋冪敤 printNB 鎵撳嵃 */
-export function printNb(domId) {
-  if (domId) {
-    localPrint(domId);
-  } else {
-    window.print();
-  }
-}
-
-let closeBtn = true;
-
-function localPrint(domId) {
-  if (typeof domId === 'string' && !domId.startsWith('#')) {
-    domId = '#' + domId;
-  }
-  nextTick(() => {
-    if (closeBtn) {
-      closeBtn = false;
-      new Print({
-        el: domId,
-        endCallback() {
-          closeBtn = true;
-        },
-      });
-    }
-  });
-}
diff --git a/src/hooks/web/useScript.ts b/src/hooks/web/useScript.ts
deleted file mode 100644
index 9707116..0000000
--- a/src/hooks/web/useScript.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { onMounted, onUnmounted, ref } from 'vue';
-
-interface ScriptOptions {
-  src: string;
-}
-
-export function useScript(opts: ScriptOptions) {
-  const isLoading = ref(false);
-  const error = ref(false);
-  const success = ref(false);
-  let script: HTMLScriptElement;
-
-  const promise = new Promise((resolve, reject) => {
-    onMounted(() => {
-      script = document.createElement('script');
-      script.type = 'text/javascript';
-      script.onload = function () {
-        isLoading.value = false;
-        success.value = true;
-        error.value = false;
-        resolve('');
-      };
-
-      script.onerror = function (err) {
-        isLoading.value = false;
-        success.value = false;
-        error.value = true;
-        reject(err);
-      };
-
-      script.src = opts.src;
-      document.head.appendChild(script);
-    });
-  });
-
-  onUnmounted(() => {
-    script && script.remove();
-  });
-
-  return {
-    isLoading,
-    error,
-    success,
-    toPromise: () => promise,
-  };
-}
diff --git a/src/hooks/web/useSortable.ts b/src/hooks/web/useSortable.ts
deleted file mode 100644
index 4c66b6a..0000000
--- a/src/hooks/web/useSortable.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { nextTick, unref } from 'vue';
-import type { Ref } from 'vue';
-import type { Options } from 'sortablejs';
-
-export function useSortable(el: HTMLElement | Ref<HTMLElement>, options?: Options) {
-  function initSortable() {
-    nextTick(async () => {
-      if (!el) return;
-
-      const Sortable = (await import('sortablejs')).default;
-      Sortable.create(unref(el), {
-        animation: 500,
-        delay: 400,
-        delayOnTouchOnly: true,
-        ...options,
-      });
-    });
-  }
-
-  return { initSortable };
-}
diff --git a/src/hooks/web/useSso.ts b/src/hooks/web/useSso.ts
deleted file mode 100644
index 61b6ca5..0000000
--- a/src/hooks/web/useSso.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-// 鍗曠偣鐧诲綍鏍稿績绫�
-import { getToken } from '/@/utils/auth';
-import { getUrlParam } from '/@/utils';
-import { useGlobSetting } from '/@/hooks/setting';
-import { validateCasLogin } from '/@/api/sys/user';
-import { useUserStore } from '/@/store/modules/user';
-const globSetting = useGlobSetting();
-const openSso = globSetting.openSso;
-export function useSso() {
-  let locationUrl = 'http://' + window.location.host + '/';
-  /**
-   * 鍗曠偣鐧诲綍
-   */
-  async function ssoLogin() {
-    if (openSso == 'true') {
-      let token = getToken();
-      let ticket = getUrlParam('ticket');
-      if (!token) {
-        if (ticket) {
-          await validateCasLogin({
-            ticket: ticket,
-            service: locationUrl,
-          }).then((res) => {
-            const userStore = useUserStore();
-            userStore.setToken(res.token);
-            return userStore.afterLoginAction(true, {});
-          });
-        } else {
-          window.location.href = globSetting.casBaseUrl + '/login?service=' + encodeURIComponent(locationUrl);
-        }
-      }
-    }
-  }
-
-  /**
-   * 閫�鍑虹櫥褰�
-   */
-  async function ssoLoginOut() {
-    window.location.href = globSetting.casBaseUrl + '/logout?service=' + encodeURIComponent(locationUrl);
-  }
-  return { ssoLogin, ssoLoginOut };
-}
diff --git a/src/hooks/web/useTabs.ts b/src/hooks/web/useTabs.ts
deleted file mode 100644
index 7474bcd..0000000
--- a/src/hooks/web/useTabs.ts
+++ /dev/null
@@ -1,118 +0,0 @@
-import type { RouteLocationNormalized, Router } from 'vue-router';
-
-import { useRouter } from 'vue-router';
-import { unref } from 'vue';
-
-import { useMultipleTabStore } from '/@/store/modules/multipleTab';
-import { useAppStore } from '/@/store/modules/app';
-
-enum TableActionEnum {
-  REFRESH,
-  CLOSE_ALL,
-  CLOSE_LEFT,
-  CLOSE_RIGHT,
-  CLOSE_OTHER,
-  CLOSE_CURRENT,
-  CLOSE,
-}
-
-export function useTabs(_router?: Router) {
-  const appStore = useAppStore();
-
-  function canIUseTabs(): boolean {
-    const { show } = appStore.getMultiTabsSetting;
-    if (!show) {
-      throw new Error('The multi-tab page is currently not open, please open it in the settings锛�');
-    }
-    return !!show;
-  }
-
-  const tabStore = useMultipleTabStore();
-  const router = _router || useRouter();
-
-  const { currentRoute } = router;
-
-  function getCurrentTab() {
-    const route = unref(currentRoute);
-    return tabStore.getTabList.find((item) => item.path === route.path)!;
-  }
-
-  async function updateTabTitle(title: string, tab?: RouteLocationNormalized) {
-    const canIUse = canIUseTabs;
-    if (!canIUse) {
-      return;
-    }
-    const targetTab = tab || getCurrentTab();
-    await tabStore.setTabTitle(title, targetTab);
-  }
-
-  async function updateTabPath(path: string, tab?: RouteLocationNormalized) {
-    const canIUse = canIUseTabs;
-    if (!canIUse) {
-      return;
-    }
-    const targetTab = tab || getCurrentTab();
-    await tabStore.updateTabPath(path, targetTab);
-  }
-
-  async function handleTabAction(action: TableActionEnum, tab?: RouteLocationNormalized) {
-    const canIUse = canIUseTabs;
-    if (!canIUse) {
-      return;
-    }
-    const currentTab = getCurrentTab();
-    switch (action) {
-      case TableActionEnum.REFRESH:
-        await tabStore.refreshPage(router);
-        break;
-
-      case TableActionEnum.CLOSE_ALL:
-        await tabStore.closeAllTab(router);
-        break;
-
-      case TableActionEnum.CLOSE_LEFT:
-        await tabStore.closeLeftTabs(currentTab, router);
-        break;
-
-      case TableActionEnum.CLOSE_RIGHT:
-        await tabStore.closeRightTabs(currentTab, router);
-        break;
-
-      case TableActionEnum.CLOSE_OTHER:
-        await tabStore.closeOtherTabs(currentTab, router);
-        break;
-
-      case TableActionEnum.CLOSE_CURRENT:
-      case TableActionEnum.CLOSE:
-        await tabStore.closeTab(tab || currentTab, router);
-        break;
-    }
-  }
-
-  /**
-   * 鍏抽棴鐩稿悓鐨勮矾鐢�
-   * @param path
-   */
-  function closeSameRoute(path) {
-    if(path.indexOf('?')>0){
-      path = path.split('?')[0];
-    }
-    let tab = tabStore.getTabList.find((item) => item.path.indexOf(path)>=0)!;
-    if(tab){
-      tabStore.closeTab(tab, router);
-    }
-  }
-
-  return {
-    refreshPage: () => handleTabAction(TableActionEnum.REFRESH),
-    closeAll: () => handleTabAction(TableActionEnum.CLOSE_ALL),
-    closeLeft: () => handleTabAction(TableActionEnum.CLOSE_LEFT),
-    closeRight: () => handleTabAction(TableActionEnum.CLOSE_RIGHT),
-    closeOther: () => handleTabAction(TableActionEnum.CLOSE_OTHER),
-    closeCurrent: () => handleTabAction(TableActionEnum.CLOSE_CURRENT),
-    close: (tab?: RouteLocationNormalized) => handleTabAction(TableActionEnum.CLOSE, tab),
-    setTitle: (title: string, tab?: RouteLocationNormalized) => updateTabTitle(title, tab),
-    updatePath: (fullPath: string, tab?: RouteLocationNormalized) => updateTabPath(fullPath, tab),
-    closeSameRoute
-  };
-}
diff --git a/src/hooks/web/useTitle.ts b/src/hooks/web/useTitle.ts
deleted file mode 100644
index ed28a21..0000000
--- a/src/hooks/web/useTitle.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { watch, unref } from 'vue';
-import { useI18n } from '/@/hooks/web/useI18n';
-import { useTitle as usePageTitle } from '@vueuse/core';
-import { useGlobSetting } from '/@/hooks/setting';
-import { useRouter } from 'vue-router';
-import { useLocaleStore } from '/@/store/modules/locale';
-
-import { REDIRECT_NAME } from '/@/router/constant';
-
-/**
- * Listening to page changes and dynamically changing site titles
- */
-export function useTitle() {
-  const { title } = useGlobSetting();
-  const { t } = useI18n();
-  const { currentRoute } = useRouter();
-  const localeStore = useLocaleStore();
-
-  const pageTitle = usePageTitle();
-
-  watch(
-    [() => currentRoute.value.path, () => localeStore.getLocale],
-    () => {
-      const route = unref(currentRoute);
-
-      if (route.name === REDIRECT_NAME) {
-        return;
-      }
-
-      const tTitle = t(route?.meta?.title as string);
-      pageTitle.value = tTitle ? ` ${tTitle} - ${title} ` : `${title}`;
-    },
-    { immediate: true }
-  );
-}
diff --git a/src/hooks/web/useWatermark.ts b/src/hooks/web/useWatermark.ts
deleted file mode 100644
index bde1549..0000000
--- a/src/hooks/web/useWatermark.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-import { getCurrentInstance, onBeforeUnmount, ref, Ref, shallowRef, unref } from 'vue';
-import { useRafThrottle } from '/@/utils/domUtils';
-import { addResizeListener, removeResizeListener } from '/@/utils/event';
-import { isDef } from '/@/utils/is';
-
-const domSymbol = Symbol('watermark-dom');
-
-export function useWatermark(appendEl: Ref<HTMLElement | null> = ref(document.body) as Ref<HTMLElement>) {
-  const func = useRafThrottle(function () {
-    const el = unref(appendEl);
-    if (!el) return;
-    const { clientHeight: height, clientWidth: width } = el;
-    updateWatermark({ height, width });
-  });
-  const id = domSymbol.toString();
-  const watermarkEl = shallowRef<HTMLElement>();
-
-  const clear = () => {
-    const domId = unref(watermarkEl);
-    watermarkEl.value = undefined;
-    const el = unref(appendEl);
-    if (!el) return;
-    domId && el.removeChild(domId);
-    removeResizeListener(el, func);
-  };
-
-  function createBase64(str: string) {
-    const can = document.createElement('canvas');
-    const width = 300;
-    const height = 240;
-    Object.assign(can, { width, height });
-
-    const cans = can.getContext('2d');
-    if (cans) {
-      cans.rotate((-20 * Math.PI) / 120);
-      cans.font = '15px Vedana';
-      cans.fillStyle = 'rgba(0, 0, 0, 0.15)';
-      cans.textAlign = 'left';
-      cans.textBaseline = 'middle';
-      cans.fillText(str, width / 20, height);
-    }
-    return can.toDataURL('image/png');
-  }
-
-  function updateWatermark(
-    options: {
-      width?: number;
-      height?: number;
-      str?: string;
-    } = {}
-  ) {
-    const el = unref(watermarkEl);
-    if (!el) return;
-    if (isDef(options.width)) {
-      el.style.width = `${options.width}px`;
-    }
-    if (isDef(options.height)) {
-      el.style.height = `${options.height}px`;
-    }
-    if (isDef(options.str)) {
-      el.style.background = `url(${createBase64(options.str)}) left top repeat`;
-    }
-  }
-
-  const createWatermark = (str: string) => {
-    if (unref(watermarkEl)) {
-      updateWatermark({ str });
-      return id;
-    }
-    const div = document.createElement('div');
-    watermarkEl.value = div;
-    div.id = id;
-    div.style.pointerEvents = 'none';
-    div.style.top = '0px';
-    div.style.left = '0px';
-    div.style.position = 'absolute';
-    div.style.zIndex = '100000';
-    const el = unref(appendEl);
-    if (!el) return id;
-    const { clientHeight: height, clientWidth: width } = el;
-    updateWatermark({ str, width, height });
-    el.appendChild(div);
-    return id;
-  };
-
-  function setWatermark(str: string) {
-    createWatermark(str);
-    addResizeListener(document.documentElement, func);
-    const instance = getCurrentInstance();
-    if (instance) {
-      onBeforeUnmount(() => {
-        clear();
-      });
-    }
-  }
-
-  return { setWatermark, clear };
-}
diff --git a/src/hooks/web/useWebSocket.ts b/src/hooks/web/useWebSocket.ts
deleted file mode 100644
index d7ca153..0000000
--- a/src/hooks/web/useWebSocket.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-// noinspection JSUnusedGlobalSymbols
-
-import { unref } from 'vue';
-import { useWebSocket, WebSocketResult } from '@vueuse/core';
-import { getToken } from '/@/utils/auth';
-
-let result: WebSocketResult<any>;
-const listeners = new Map();
-
-/**
- * 寮�鍚� WebSocket 閾炬帴锛屽叏灞�鍙渶鎵ц涓�娆�
- * @param url
- */
-export function connectWebSocket(url: string) {
-  console.log("杩炴帴websocket::", url)
-  //update-begin-author:taoyan date:2022-4-24 for: v2.4.6 鐨� websocket 鏈嶅姟绔紝瀛樺湪鎬ц兘鍜屽畨鍏ㄩ棶棰樸�� #3278
-  let token = (getToken() || '') as string;
-  result = useWebSocket(url, {
-    // 鑷姩閲嶈繛 (閬囧埌閿欒鏈�澶氶噸澶嶈繛鎺�10娆�)
-    autoReconnect: {
-      retries : 10,
-      delay : 5000
-    },
-    // 蹇冭烦妫�娴�
-    heartbeat: {
-      message: "ping",
-      interval: 55000
-    },
-     protocols: [token],
-  });
-  //update-end-author:taoyan date:2022-4-24 for: v2.4.6 鐨� websocket 鏈嶅姟绔紝瀛樺湪鎬ц兘鍜屽畨鍏ㄩ棶棰樸�� #3278
-  if (result) {
-    result.open = onOpen;
-    result.close = onClose;
-
-    const ws = unref(result.ws);
-    if(ws!=null){
-      ws.onerror = onError;
-      ws.onmessage = onMessage;
-    }
-  }
-}
-
-function onOpen() {
-  console.log('[WebSocket] 杩炴帴鎴愬姛');
-}
-
-function onClose(e) {
-  console.log('[WebSocket] 杩炴帴鏂紑锛�', e);
-}
-
-function onError(e) {
-  console.log('[WebSocket] 杩炴帴鍙戠敓閿欒: ', e);
-}
-
-function onMessage(e) {
-  console.debug('[WebSocket] -----鎺ユ敹娑堟伅-------', e.data);
-  try {
-    const data = JSON.parse(e.data);
-    for (const callback of listeners.keys()) {
-      try {
-        callback(data);
-      } catch (err) {
-        console.error(err);
-      }
-    }
-  } catch (err) {
-    console.error('[WebSocket] data瑙f瀽澶辫触锛�', err);
-  }
-}
-
-
-/**
- * 娣诲姞 WebSocket 娑堟伅鐩戝惉
- * @param callback
- */
-export function onWebSocket(callback: (data: object) => any) {
-  if (!listeners.has(callback)) {
-    if (typeof callback === 'function') {
-      listeners.set(callback, null);
-    } else {
-      console.debug('[WebSocket] 娣诲姞 WebSocket 娑堟伅鐩戝惉澶辫触锛氫紶鍏ョ殑鍙傛暟涓嶆槸涓�涓柟娉�');
-    }
-  }
-}
-
-/**
- * 瑙i櫎 WebSocket 娑堟伅鐩戝惉
- *
- * @param callback
- */
-export function offWebSocket(callback: (data: object) => any) {
-  listeners.delete(callback);
-}
-
-export function useMyWebSocket() {
-  return result;
-}
diff --git a/src/layouts/default/content/index.vue b/src/layouts/default/content/index.vue
deleted file mode 100644
index 2398991..0000000
--- a/src/layouts/default/content/index.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-	<div :class="[prefixCls, getLayoutContentMode]" v-loading="getOpenPageLoading && getPageLoading">
-		<PageLayout />
-		<!-- update-begin-author:zyf date:20211129 for:qiankun 鎸傝浇瀛愬簲鐢ㄧ洅瀛� -->
-		<div id="content" class="app-view-box" v-if="openQianKun == 'true'"></div>
-		<!-- update-end-author:zyf date:20211129 for: qiankun 鎸傝浇瀛愬簲鐢ㄧ洅瀛�-->
-	</div>
-</template>
-<script lang="ts">
-	import { defineComponent, onMounted } from 'vue'
-	import PageLayout from '/@/layouts/page/index.vue'
-	import { useDesign } from '/@/hooks/web/useDesign'
-	import { useRootSetting } from '/@/hooks/setting/useRootSetting'
-	import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting'
-	import { useContentViewHeight } from './useContentViewHeight'
-	// import registerApps from '/@/qiankun';
-	import { useGlobSetting } from '/@/hooks/setting'
-	export default defineComponent({
-		name: 'LayoutContent',
-		components: { PageLayout },
-		setup() {
-			const { prefixCls } = useDesign('layout-content')
-			const { getOpenPageLoading } = useTransitionSetting()
-			const { getLayoutContentMode, getPageLoading } = useRootSetting()
-			const globSetting = useGlobSetting()
-			const openQianKun = globSetting.openQianKun
-			useContentViewHeight()
-			onMounted(() => {
-				// //娉ㄥ唽openQianKun
-				// if (openQianKun == 'true') {
-				//   if (!window.qiankunStarted) {
-				//     window.qiankunStarted = true;
-				//     registerApps();
-				//   }
-				// }
-			})
-			return {
-				prefixCls,
-				openQianKun,
-				getOpenPageLoading,
-				getLayoutContentMode,
-				getPageLoading,
-			}
-		},
-	})
-</script>
-<style lang="less">
-	@prefix-cls: ~'@{namespace}-layout-content';
-
-	.@{prefix-cls} {
-		position: relative;
-		flex: 1 1 auto;
-		min-height: 0;
-		overflow: scroll;
-		&.fixed {
-			width: 1200px;
-			margin: 0 auto;
-		}
-
-		&-loading {
-			position: absolute;
-			top: 200px;
-			z-index: @page-loading-z-index;
-		}
-	}
-</style>
diff --git a/src/layouts/default/content/useContentContext.ts b/src/layouts/default/content/useContentContext.ts
deleted file mode 100644
index f12e77b..0000000
--- a/src/layouts/default/content/useContentContext.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import type { InjectionKey, ComputedRef } from 'vue';
-import { createContext, useContext } from '/@/hooks/core/useContext';
-
-export interface ContentContextProps {
-  contentHeight: ComputedRef<number>;
-  setPageHeight: (height: number) => Promise<void>;
-}
-
-const key: InjectionKey<ContentContextProps> = Symbol();
-
-export function createContentContext(context: ContentContextProps) {
-  return createContext<ContentContextProps>(context, key, { native: true });
-}
-
-export function useContentContext() {
-  return useContext<ContentContextProps>(key);
-}
diff --git a/src/layouts/default/content/useContentViewHeight.ts b/src/layouts/default/content/useContentViewHeight.ts
deleted file mode 100644
index b55b7e8..0000000
--- a/src/layouts/default/content/useContentViewHeight.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { ref, computed, unref } from 'vue';
-import { createPageContext } from '/@/hooks/component/usePageContext';
-import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
-
-const headerHeightRef = ref(0);
-const footerHeightRef = ref(0);
-
-export function useLayoutHeight() {
-  function setHeaderHeight(val) {
-    headerHeightRef.value = val;
-  }
-  function setFooterHeight(val) {
-    footerHeightRef.value = val;
-  }
-  return { headerHeightRef, footerHeightRef, setHeaderHeight, setFooterHeight };
-}
-
-export function useContentViewHeight() {
-  const contentHeight = ref(window.innerHeight);
-  const pageHeight = ref(window.innerHeight);
-  const getViewHeight = computed(() => {
-    return unref(contentHeight) - unref(headerHeightRef) - unref(footerHeightRef) || 0;
-  });
-
-  useWindowSizeFn(
-    () => {
-      contentHeight.value = window.innerHeight;
-    },
-    100,
-    { immediate: true }
-  );
-
-  async function setPageHeight(height: number) {
-    pageHeight.value = height;
-  }
-
-  createPageContext({
-    contentHeight: getViewHeight,
-    setPageHeight,
-    pageHeight,
-  });
-}
diff --git a/src/layouts/default/feature/index.vue b/src/layouts/default/feature/index.vue
deleted file mode 100644
index 99c83cb..0000000
--- a/src/layouts/default/feature/index.vue
+++ /dev/null
@@ -1,82 +0,0 @@
-<script lang="ts">
-  import { defineComponent, computed, unref } from 'vue';
-  import { BackTop } from 'ant-design-vue';
-
-  import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-  import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useUserStoreWithOut } from '/@/store/modules/user';
-
-  import { SettingButtonPositionEnum } from '/@/enums/appEnum';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-
-  import SessionTimeoutLogin from '/@/views/sys/login/SessionTimeoutLogin.vue';
-  export default defineComponent({
-    name: 'LayoutFeatures',
-    components: {
-      BackTop,
-      LayoutLockPage: createAsyncComponent(() => import('/@/views/sys/lock/index.vue')),
-      SettingDrawer: createAsyncComponent(() => import('/@/layouts/default/setting/index.vue')),
-      SessionTimeoutLogin,
-    },
-    setup() {
-      const { getUseOpenBackTop, getShowSettingButton, getSettingButtonPosition, getFullContent } = useRootSetting();
-      const userStore = useUserStoreWithOut();
-      const { prefixCls } = useDesign('setting-drawer-fearure');
-      const { getShowHeader } = useHeaderSetting();
-
-      const getIsSessionTimeout = computed(() => userStore.getSessionTimeout);
-
-      const getIsFixedSettingDrawer = computed(() => {
-        if (!unref(getShowSettingButton)) {
-          return false;
-        }
-        const settingButtonPosition = unref(getSettingButtonPosition);
-
-        if (settingButtonPosition === SettingButtonPositionEnum.AUTO) {
-          return !unref(getShowHeader) || unref(getFullContent);
-        }
-        return settingButtonPosition === SettingButtonPositionEnum.FIXED;
-      });
-
-      return {
-        getTarget: () => document.body,
-        getUseOpenBackTop,
-        getIsFixedSettingDrawer,
-        prefixCls,
-        getIsSessionTimeout,
-      };
-    },
-  });
-</script>
-
-<template>
-  <LayoutLockPage />
-  <BackTop v-if="getUseOpenBackTop" :target="getTarget" />
-  <SettingDrawer v-if="getIsFixedSettingDrawer" :class="prefixCls" />
-  <SessionTimeoutLogin v-if="getIsSessionTimeout" />
-</template>
-
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-setting-drawer-fearure';
-
-  .@{prefix-cls} {
-    position: absolute;
-    top: 45%;
-    right: 0;
-    z-index: 10;
-    display: flex;
-    padding: 10px;
-    color: @white;
-    cursor: pointer;
-    background-color: @primary-color;
-    border-radius: 6px 0 0 6px;
-    justify-content: center;
-    align-items: center;
-
-    svg {
-      width: 1em;
-      height: 1em;
-    }
-  }
-</style>
diff --git a/src/layouts/default/footer/index.vue b/src/layouts/default/footer/index.vue
deleted file mode 100644
index adca7d5..0000000
--- a/src/layouts/default/footer/index.vue
+++ /dev/null
@@ -1,95 +0,0 @@
-<template>
-  <Footer :class="prefixCls" v-if="getShowLayoutFooter" ref="footerRef">
-    <div :class="`${prefixCls}__links`">
-      <a @click="openWindow(SITE_URL)">{{ t('layout.footer.onlinePreview') }}</a>
-
-      <GithubFilled @click="openWindow(GITHUB_URL)" :class="`${prefixCls}__github`" />
-
-      <a @click="openWindow(DOC_URL)">{{ t('layout.footer.onlineDocument') }}</a>
-    </div>
-    <div>Copyright &copy;2021 JEECG寮�婧愮ぞ鍖� 鍑哄搧</div>
-  </Footer>
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent, unref, ref } from 'vue';
-  import { Layout } from 'ant-design-vue';
-
-  import { GithubFilled } from '@ant-design/icons-vue';
-
-  import { DOC_URL, GITHUB_URL, SITE_URL } from '/@/settings/siteSetting';
-  import { openWindow } from '/@/utils';
-
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-  import { useRouter } from 'vue-router';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useLayoutHeight } from '../content/useContentViewHeight';
-
-  export default defineComponent({
-    name: 'LayoutFooter',
-    components: { Footer: Layout.Footer, GithubFilled },
-    setup() {
-      const { t } = useI18n();
-      const { getShowFooter } = useRootSetting();
-      const { currentRoute } = useRouter();
-      const { prefixCls } = useDesign('layout-footer');
-
-      const footerRef = ref<ComponentRef>(null);
-      const { setFooterHeight } = useLayoutHeight();
-
-      const getShowLayoutFooter = computed(() => {
-        if (unref(getShowFooter)) {
-          const footerEl = unref(footerRef)?.$el;
-          setFooterHeight(footerEl?.offsetHeight || 0);
-        } else {
-          setFooterHeight(0);
-        }
-        return unref(getShowFooter) && !unref(currentRoute).meta?.hiddenFooter;
-      });
-
-      return {
-        getShowLayoutFooter,
-        prefixCls,
-        t,
-        DOC_URL,
-        GITHUB_URL,
-        SITE_URL,
-        openWindow,
-        footerRef,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-layout-footer';
-
-  @normal-color: rgba(0, 0, 0, 0.45);
-
-  @hover-color: rgba(0, 0, 0, 0.85);
-
-  .@{prefix-cls} {
-    color: @normal-color;
-    text-align: center;
-
-    &__links {
-      margin-bottom: 8px;
-
-      a {
-        color: @normal-color;
-
-        &:hover {
-          color: @hover-color;
-        }
-      }
-    }
-
-    &__github {
-      margin: 0 30px;
-
-      &:hover {
-        color: @hover-color;
-      }
-    }
-  }
-</style>
diff --git a/src/layouts/default/header/MultipleHeader.vue b/src/layouts/default/header/MultipleHeader.vue
deleted file mode 100644
index c69bf01..0000000
--- a/src/layouts/default/header/MultipleHeader.vue
+++ /dev/null
@@ -1,129 +0,0 @@
-<template>
-  <div :style="getPlaceholderDomStyle" v-if="getIsShowPlaceholderDom"></div>
-  <div :style="getWrapStyle" :class="getClass">
-    <LayoutHeader v-if="getShowInsetHeaderRef" />
-    <MultipleTabs v-if="getShowTabs" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, unref, computed, CSSProperties } from 'vue';
-
-  import LayoutHeader from './index.vue';
-  import MultipleTabs from '../tabs/index.vue';
-
-  import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { useFullContent } from '/@/hooks/web/useFullContent';
-  import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
-  import { useAppInject } from '/@/hooks/web/useAppInject';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useLayoutHeight } from '../content/useContentViewHeight';
-  import { TabsThemeEnum } from '/@/enums/appEnum';
-
-  const HEADER_HEIGHT = 48;
-
-  // updateBy:sunjianlei---updateDate:2021-09-03---淇敼tab鍒囨崲鏍忔牱寮忥細鏇存敼楂樺害
-  const TABS_HEIGHT = 32;
-  const TABS_HEIGHT_CARD = 50;
-  const TABS_HEIGHT_SMOOTH = 50;
-
-  export default defineComponent({
-    name: 'LayoutMultipleHeader',
-    components: { LayoutHeader, MultipleTabs },
-    setup() {
-      const { setHeaderHeight } = useLayoutHeight();
-      const { prefixCls } = useDesign('layout-multiple-header');
-
-      const { getCalcContentWidth, getSplit } = useMenuSetting();
-      const { getIsMobile } = useAppInject();
-      const { getFixed, getShowInsetHeaderRef, getShowFullHeaderRef, getHeaderTheme, getShowHeader } = useHeaderSetting();
-
-      const { getFullContent } = useFullContent();
-
-      const { getShowMultipleTab, getTabsTheme } = useMultipleTabSetting();
-
-      const getShowTabs = computed(() => {
-        return unref(getShowMultipleTab) && !unref(getFullContent);
-      });
-
-      const getIsShowPlaceholderDom = computed(() => {
-        return unref(getFixed) || unref(getShowFullHeaderRef);
-      });
-
-      const getWrapStyle = computed((): CSSProperties => {
-        const style: CSSProperties = {};
-        if (unref(getFixed)) {
-          style.width = unref(getIsMobile) ? '100%' : unref(getCalcContentWidth);
-        }
-        if (unref(getShowFullHeaderRef)) {
-          style.top = `${HEADER_HEIGHT}px`;
-        }
-        return style;
-      });
-
-      const getIsFixed = computed(() => {
-        return unref(getFixed) || unref(getShowFullHeaderRef);
-      });
-
-      // updateBy:sunjianlei---updateDate:2021-09-08---鏍规嵁涓婚鐨勪笉鍚岋紝鍔ㄦ�佽绠梩abs楂樺害
-      const getTabsThemeHeight = computed(() => {
-        let tabsTheme = unref(getTabsTheme);
-        if (tabsTheme === TabsThemeEnum.CARD) {
-          return TABS_HEIGHT_CARD;
-        } else if (tabsTheme === TabsThemeEnum.SMOOTH) {
-          return TABS_HEIGHT_SMOOTH;
-        } else {
-          return TABS_HEIGHT;
-        }
-      });
-
-      const getPlaceholderDomStyle = computed((): CSSProperties => {
-        let height = 0;
-        if ((unref(getShowFullHeaderRef) || !unref(getSplit)) && unref(getShowHeader) && !unref(getFullContent)) {
-          height += HEADER_HEIGHT;
-        }
-        if (unref(getShowMultipleTab) && !unref(getFullContent)) {
-          height += unref(getTabsThemeHeight);
-        }
-        setHeaderHeight(height);
-        return {
-          height: `${height}px`,
-        };
-      });
-
-      const getClass = computed(() => {
-        return [prefixCls, `${prefixCls}--${unref(getHeaderTheme)}`, { [`${prefixCls}--fixed`]: unref(getIsFixed) }];
-      });
-
-      return {
-        getClass,
-        prefixCls,
-        getPlaceholderDomStyle,
-        getIsFixed,
-        getWrapStyle,
-        getIsShowPlaceholderDom,
-        getShowTabs,
-        getShowInsetHeaderRef,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-layout-multiple-header';
-
-  .@{prefix-cls} {
-    transition: width 0.2s;
-    flex: 0 0 auto;
-
-    &--dark {
-      margin-left: -1px;
-    }
-
-    &--fixed {
-      position: fixed;
-      top: 0;
-      z-index: @multiple-tab-fixed-z-index;
-      width: 100%;
-    }
-  }
-</style>
diff --git a/src/layouts/default/header/components/Breadcrumb.vue b/src/layouts/default/header/components/Breadcrumb.vue
deleted file mode 100644
index d29b25c..0000000
--- a/src/layouts/default/header/components/Breadcrumb.vue
+++ /dev/null
@@ -1,204 +0,0 @@
-<template>
-  <div :class="[prefixCls, `${prefixCls}--${theme}`]">
-    <a-breadcrumb :routes="routes">
-      <template #itemRender="{ route, routes: routesMatched, paths }">
-        <Icon :icon="getIcon(route)" v-if="getShowBreadCrumbIcon && getIcon(route)" />
-        <span v-if="!hasRedirect(routesMatched, route)">
-          {{ t(route.name || route.meta.title) }}
-        </span>
-        <router-link v-else to="" @click="handleClick(route, paths, $event)" style="color: inherit">
-          {{ t(route.name || route.meta.title) }}
-        </router-link>
-      </template>
-    </a-breadcrumb>
-  </div>
-</template>
-<script lang="ts">
-  import type { RouteLocationMatched } from 'vue-router';
-  import { useRouter } from 'vue-router';
-  import type { Menu } from '/@/router/types';
-
-  import { defineComponent, ref, watchEffect } from 'vue';
-
-  import { Breadcrumb } from 'ant-design-vue';
-  import Icon from '/@/components/Icon';
-
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-  import { useGo } from '/@/hooks/web/usePage';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  import { propTypes } from '/@/utils/propTypes';
-  import { isString } from '/@/utils/is';
-  import { filter } from '/@/utils/helper/treeHelper';
-  import { getMenus } from '/@/router/menus';
-
-  import { REDIRECT_NAME } from '/@/router/constant';
-  import { getAllParentPath } from '/@/router/helper/menuHelper';
-
-  export default defineComponent({
-    name: 'LayoutBreadcrumb',
-    components: { Icon, [Breadcrumb.name]: Breadcrumb },
-    props: {
-      theme: propTypes.oneOf(['dark', 'light']),
-    },
-    setup() {
-      const routes = ref<RouteLocationMatched[]>([]);
-      const { currentRoute } = useRouter();
-      const { prefixCls } = useDesign('layout-breadcrumb');
-      const { getShowBreadCrumbIcon } = useRootSetting();
-      const go = useGo();
-
-      const { t } = useI18n();
-      watchEffect(async () => {
-        if (currentRoute.value.name === REDIRECT_NAME) return;
-        const menus = await getMenus();
-
-        const routeMatched = currentRoute.value.matched;
-        const cur = routeMatched?.[routeMatched.length - 1];
-        let path = currentRoute.value.path;
-
-        if (cur && cur?.meta?.currentActiveMenu) {
-          path = cur.meta.currentActiveMenu as string;
-        }
-
-        const parent = getAllParentPath(menus, path);
-        const filterMenus = menus.filter((item) => item.path === parent[0]);
-        const matched = getMatched(filterMenus, parent) as any;
-
-        if (!matched || matched.length === 0) return;
-
-        const breadcrumbList = filterItem(matched);
-
-        if (currentRoute.value.meta?.currentActiveMenu) {
-          breadcrumbList.push({
-            ...currentRoute.value,
-            name: currentRoute.value.meta?.title || currentRoute.value.name,
-          } as unknown as RouteLocationMatched);
-        }
-        routes.value = breadcrumbList;
-      });
-
-      function getMatched(menus: Menu[], parent: string[]) {
-        const metched: Menu[] = [];
-        menus.forEach((item) => {
-          if (parent.includes(item.path)) {
-            metched.push({
-              ...item,
-              name: item.meta?.title || item.name,
-            });
-          }
-          if (item.children?.length) {
-            metched.push(...getMatched(item.children, parent));
-          }
-        });
-        return metched;
-      }
-
-      function filterItem(list: RouteLocationMatched[]) {
-        return filter(list, (item) => {
-          const { meta, name } = item;
-          if (!meta) {
-            return !!name;
-          }
-          const { title, hideBreadcrumb } = meta;
-          if (!title || hideBreadcrumb) {
-            return false;
-          }
-          return true;
-        }).filter((item) => !item.meta?.hideBreadcrumb);
-      }
-
-      function handleClick(route: RouteLocationMatched, paths: string[], e: Event) {
-        e?.preventDefault();
-        const { children, redirect, meta } = route;
-
-        if (children?.length && !redirect) {
-          e?.stopPropagation();
-          return;
-        }
-        if (meta?.carryParam) {
-          return;
-        }
-
-        if (redirect && isString(redirect)) {
-          go(redirect);
-        } else {
-          let goPath = '';
-          if (paths.length === 1) {
-            goPath = paths[0];
-          } else {
-            const ps = paths.slice(1);
-            const lastPath = ps.pop() || '';
-            goPath = `${lastPath}`;
-          }
-          goPath = /^\//.test(goPath) ? goPath : `/${goPath}`;
-          go(goPath);
-        }
-      }
-
-      function hasRedirect(routes: RouteLocationMatched[], route: RouteLocationMatched) {
-        return routes.indexOf(route) !== routes.length - 1;
-      }
-
-      function getIcon(route) {
-        return route.icon || route.meta?.icon;
-      }
-
-      return { routes, t, prefixCls, getIcon, getShowBreadCrumbIcon, handleClick, hasRedirect };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-layout-breadcrumb';
-
-  .@{prefix-cls} {
-    display: flex;
-    padding: 0 8px;
-    align-items: center;
-
-    .ant-breadcrumb-link {
-      .anticon {
-        margin-right: 4px;
-        margin-bottom: 2px;
-      }
-    }
-
-    &--light {
-      .ant-breadcrumb-link {
-        color: @breadcrumb-item-normal-color;
-
-        a {
-          color: rgba(0, 0, 0, 0.65);
-
-          &:hover {
-            color: @primary-color;
-          }
-        }
-      }
-
-      .ant-breadcrumb-separator {
-        color: @breadcrumb-item-normal-color;
-      }
-    }
-
-    &--dark {
-      .ant-breadcrumb-link {
-        color: rgba(255, 255, 255, 0.6);
-
-        a {
-          color: rgba(255, 255, 255, 0.8);
-
-          &:hover {
-            color: @white;
-          }
-        }
-      }
-
-      .ant-breadcrumb-separator,
-      .anticon {
-        color: rgba(255, 255, 255, 0.8);
-      }
-    }
-  }
-</style>
diff --git a/src/layouts/default/header/components/ErrorAction.vue b/src/layouts/default/header/components/ErrorAction.vue
deleted file mode 100644
index ff173ae..0000000
--- a/src/layouts/default/header/components/ErrorAction.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-<template>
-  <Tooltip :title="t('layout.header.tooltipErrorLog')" placement="bottom" :mouseEnterDelay="0.5" @click="handleToErrorList">
-    <Badge :count="getCount" :offset="[0, 10]" :overflowCount="99">
-      <Icon icon="ion:bug-outline" />
-    </Badge>
-  </Tooltip>
-</template>
-<script lang="ts">
-  import { defineComponent, computed } from 'vue';
-  import { Tooltip, Badge } from 'ant-design-vue';
-  import Icon from '/@/components/Icon';
-
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useErrorLogStore } from '/@/store/modules/errorLog';
-  import { PageEnum } from '/@/enums/pageEnum';
-
-  import { useRouter } from 'vue-router';
-
-  export default defineComponent({
-    name: 'ErrorAction',
-    components: { Icon, Tooltip, Badge },
-
-    setup() {
-      const { t } = useI18n();
-      const { push } = useRouter();
-      const errorLogStore = useErrorLogStore();
-
-      const getCount = computed(() => errorLogStore.getErrorLogListCount);
-
-      function handleToErrorList() {
-        push(PageEnum.ERROR_LOG_PAGE).then(() => {
-          errorLogStore.setErrorLogListCount(0);
-        });
-      }
-
-      return {
-        t,
-        getCount,
-        handleToErrorList,
-      };
-    },
-  });
-</script>
diff --git a/src/layouts/default/header/components/FullScreen.vue b/src/layouts/default/header/components/FullScreen.vue
deleted file mode 100644
index 9efbfab..0000000
--- a/src/layouts/default/header/components/FullScreen.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-<template>
-  <Tooltip :title="getTitle" placement="bottom" :mouseEnterDelay="0.5">
-    <span @click="toggle">
-      <FullscreenOutlined v-if="!isFullscreen" />
-      <FullscreenExitOutlined v-else />
-    </span>
-  </Tooltip>
-</template>
-<script lang="ts">
-  import { defineComponent, computed, unref } from 'vue';
-  import { Tooltip } from 'ant-design-vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useFullscreen } from '@vueuse/core';
-
-  import { FullscreenExitOutlined, FullscreenOutlined } from '@ant-design/icons-vue';
-  export default defineComponent({
-    name: 'FullScreen',
-    components: { FullscreenExitOutlined, FullscreenOutlined, Tooltip },
-
-    setup() {
-      const { t } = useI18n();
-      const { toggle, isFullscreen } = useFullscreen();
-
-      const getTitle = computed(() => {
-        return unref(isFullscreen) ? t('layout.header.tooltipExitFull') : t('layout.header.tooltipEntryFull');
-      });
-
-      return {
-        getTitle,
-        isFullscreen,
-        toggle,
-      };
-    },
-  });
-</script>
diff --git a/src/layouts/default/header/components/LockScreen.vue b/src/layouts/default/header/components/LockScreen.vue
deleted file mode 100644
index cf88cbd..0000000
--- a/src/layouts/default/header/components/LockScreen.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-<template>
-  <Tooltip :title="t('layout.header.tooltipLock')" placement="bottom" :mouseEnterDelay="0.5" @click="handleLock">
-    <LockOutlined />
-  </Tooltip>
-  <LockModal @register="register" />
-</template>
-<script lang="ts">
-  import { defineComponent, computed } from 'vue';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-  import { Tooltip } from 'ant-design-vue';
-  import { LockOutlined } from '@ant-design/icons-vue';
-  import Icon from '/@/components/Icon';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useModal } from '/@/components/Modal';
-
-  export default defineComponent({
-    name: 'LockScreen',
-    inheritAttrs: false,
-    components: {
-      Icon,
-      Tooltip,
-      LockOutlined,
-      LockModal: createAsyncComponent(() => import('./lock/LockModal.vue')),
-    },
-    setup() {
-      const { t } = useI18n();
-      const [register, { openModal }] = useModal();
-
-      function handleLock() {
-        openModal(true);
-      }
-
-      return {
-        t,
-        register,
-        handleLock,
-      };
-    },
-  });
-</script>
diff --git a/src/layouts/default/header/components/index.ts b/src/layouts/default/header/components/index.ts
deleted file mode 100644
index 1256a19..0000000
--- a/src/layouts/default/header/components/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-import FullScreen from './FullScreen.vue';
-
-export const UserDropDown = createAsyncComponent(() => import('./user-dropdown/index.vue'), {
-  loading: true,
-});
-
-export const LayoutBreadcrumb = createAsyncComponent(() => import('./Breadcrumb.vue'));
-
-export const Notify = createAsyncComponent(() => import('./notify/index.vue'));
-
-export const ErrorAction = createAsyncComponent(() => import('./ErrorAction.vue'));
-
-export const LockScreen = createAsyncComponent(() => import('./LockScreen.vue'));
-
-export { FullScreen };
diff --git a/src/layouts/default/header/components/lock/LockModal.vue b/src/layouts/default/header/components/lock/LockModal.vue
deleted file mode 100644
index 814fdfb..0000000
--- a/src/layouts/default/header/components/lock/LockModal.vue
+++ /dev/null
@@ -1,118 +0,0 @@
-<template>
-  <BasicModal :footer="null" :title="t('layout.header.lockScreen')" v-bind="$attrs" :class="prefixCls" @register="register">
-    <div :class="`${prefixCls}__entry`">
-      <div :class="`${prefixCls}__header`">
-        <img :src="avatar" :class="`${prefixCls}__header-img`" />
-        <p :class="`${prefixCls}__header-name`">
-          {{ getRealName }}
-        </p>
-      </div>
-
-      <BasicForm @register="registerForm" />
-
-      <div :class="`${prefixCls}__footer`">
-        <a-button type="primary" block class="mt-2" @click="handleLock">
-          {{ t('layout.header.lockScreenBtn') }}
-        </a-button>
-      </div>
-    </div>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, computed } from 'vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { BasicModal, useModalInner } from '/@/components/Modal/index';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-
-  import { useUserStore } from '/@/store/modules/user';
-  import { useLockStore } from '/@/store/modules/lock';
-  import headerImg from '/@/assets/images/header.jpg';
-  export default defineComponent({
-    name: 'LockModal',
-    components: { BasicModal, BasicForm },
-
-    setup() {
-      const { t } = useI18n();
-      const { prefixCls } = useDesign('header-lock-modal');
-      const userStore = useUserStore();
-      const lockStore = useLockStore();
-
-      const getRealName = computed(() => userStore.getUserInfo?.realname);
-      const [register, { closeModal }] = useModalInner();
-
-      const [registerForm, { validateFields, resetFields }] = useForm({
-        labelWidth: 100,
-        showActionButtonGroup: false,
-        schemas: [
-          {
-            field: 'password',
-            label: t('layout.header.lockScreenPassword'),
-            component: 'InputPassword',
-            required: true,
-          },
-        ],
-      });
-
-      async function handleLock() {
-        const values = (await validateFields()) as any;
-        const password: string | undefined = values.password;
-        closeModal();
-
-        lockStore.setLockInfo({
-          isLock: true,
-          pwd: password,
-        });
-        await resetFields();
-      }
-
-      const avatar = computed(() => {
-        const { avatar } = userStore.getUserInfo;
-        return avatar || headerImg;
-      });
-
-      return {
-        t,
-        prefixCls,
-        getRealName,
-        register,
-        registerForm,
-        handleLock,
-        avatar,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-header-lock-modal';
-
-  .@{prefix-cls} {
-    &__entry {
-      position: relative;
-      //height: 240px;
-      padding: 130px 30px 30px 30px;
-      border-radius: 10px;
-    }
-
-    &__header {
-      position: absolute;
-      top: 0;
-      left: calc(50% - 45px);
-      width: auto;
-      text-align: center;
-
-      &-img {
-        width: 70px;
-        border-radius: 50%;
-      }
-
-      &-name {
-        margin-top: 5px;
-      }
-    }
-
-    &__footer {
-      text-align: center;
-    }
-  }
-</style>
diff --git a/src/layouts/default/header/components/notify/NoticeList.vue b/src/layouts/default/header/components/notify/NoticeList.vue
deleted file mode 100644
index de42306..0000000
--- a/src/layouts/default/header/components/notify/NoticeList.vue
+++ /dev/null
@@ -1,232 +0,0 @@
-<template>
-  <a-list :class="prefixCls" :pagination="getPagination">
-    <template v-for="item in getData" :key="item.id">
-      <a-list-item class="list-item" @click="handleTitleClick(item)" :style="{ cursor: isTitleClickable ? 'pointer' : '' }">
-        <a-list-item-meta>
-          <template #title>
-            <div class="title">
-              <a-typography-paragraph
-                style="width: 100%; margin-bottom: 0 !important"
-                :delete="!!item.titleDelete"
-                :ellipsis="$props.titleRows && $props.titleRows > 0 ? { rows: $props.titleRows, tooltip: !!item.title } : false"
-                :content="item.title"
-              />
-              <div class="extra" v-if="item.extra">
-                <a-tag class="tag" :color="item.color">
-                  {{ item.extra }}
-                </a-tag>
-              </div>
-            </div>
-          </template>
-
-          <template #avatar>
-            <a-avatar v-if="item.avatar" class="avatar" :src="item.avatar" />
-            <template v-else-if="item.priority">
-              <a-avatar v-if="item.priority === PriorityTypes.L" class="avatar priority-L" title="涓�鑸秷鎭�">
-                <template #icon>
-                  <Icon icon="entypo:info" />
-                </template>
-              </a-avatar>
-              <a-avatar v-if="item.priority === PriorityTypes.M" class="avatar priority-M" title="閲嶈娑堟伅">
-                <template #icon>
-                  <Icon icon="bi:exclamation-lg" />
-                </template>
-              </a-avatar>
-              <a-avatar v-if="item.priority === PriorityTypes.H" class="avatar priority-H" title="绱ф�ユ秷鎭�">
-                <template #icon>
-                  <Icon icon="ant-design:warning-filled" />
-                </template>
-              </a-avatar>
-            </template>
-            <span v-else> {{ item.avatar }}</span>
-          </template>
-
-          <template #description>
-            <div>
-              <div class="description" v-if="item.description">
-                <a-typography-paragraph
-                  style="width: 100%; margin-bottom: 0 !important"
-                  :ellipsis="$props.descRows && $props.descRows > 0 ? { rows: $props.descRows, tooltip: !!item.description } : false"
-                  :content="item.description"
-                />
-              </div>
-              <div class="datetime">
-                <Time :value="item.datetime" :title="item.datetime" />
-              </div>
-            </div>
-          </template>
-        </a-list-item-meta>
-      </a-list-item>
-    </template>
-  </a-list>
-</template>
-<script lang="ts">
-  import { computed, defineComponent, PropType, ref, watch, unref } from 'vue';
-  import { PriorityTypes, ListItem } from './data';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { List, Avatar, Tag, Typography } from 'ant-design-vue';
-  import { Time } from '/@/components/Time';
-  import { isNumber } from '/@/utils/is';
-  export default defineComponent({
-    components: {
-      [Avatar.name]: Avatar,
-      [List.name]: List,
-      [List.Item.name]: List.Item,
-      AListItemMeta: List.Item.Meta,
-      ATypographyParagraph: Typography.Paragraph,
-      [Tag.name]: Tag,
-      Time,
-    },
-    props: {
-      list: {
-        type: Array as PropType<ListItem[]>,
-        default: () => [],
-      },
-      pageSize: {
-        type: [Boolean, Number] as PropType<Boolean | Number>,
-        default: 5,
-      },
-      currentPage: {
-        type: Number,
-        default: 1,
-      },
-      titleRows: {
-        type: Number,
-        default: 1,
-      },
-      descRows: {
-        type: Number,
-        default: 1,
-      },
-      onTitleClick: {
-        type: Function as PropType<(Recordable) => void>,
-      },
-    },
-    emits: ['update:currentPage'],
-    setup(props, { emit }) {
-      const { prefixCls } = useDesign('header-notify-list');
-      const current = ref(props.currentPage || 1);
-      const getData = computed(() => {
-        const { pageSize, list } = props;
-        if (pageSize === false) return [];
-        let size = isNumber(pageSize) ? pageSize : 5;
-        return list.slice(size * (unref(current) - 1), size * unref(current));
-      });
-      watch(
-        () => props.currentPage,
-        (v) => {
-          current.value = v;
-        }
-      );
-      const isTitleClickable = computed(() => !!props.onTitleClick);
-      const getPagination = computed(() => {
-        const { list, pageSize } = props;
-        if (pageSize > 0 && list && list.length > pageSize) {
-          return {
-            total: list.length,
-            pageSize,
-            //size: 'small',
-            current: unref(current),
-            onChange(page) {
-              current.value = page;
-              emit('update:currentPage', page);
-            },
-          };
-        } else {
-          return false;
-        }
-      });
-
-      function handleTitleClick(item: ListItem) {
-        props.onTitleClick && props.onTitleClick(item);
-      }
-
-      return {
-        prefixCls,
-        getPagination,
-        getData,
-        handleTitleClick,
-        isTitleClickable,
-        PriorityTypes,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-header-notify-list';
-
-  .@{prefix-cls} {
-    width: 340px;
-
-    &::-webkit-scrollbar {
-      display: none;
-    }
-
-    :deep(.ant-pagination-disabled) {
-      display: inline-block !important;
-    }
-
-    &-item {
-      padding: 6px;
-      overflow: hidden;
-      cursor: pointer;
-      transition: all 0.3s;
-
-      .title {
-        margin-bottom: 8px;
-        font-weight: normal;
-
-        .extra {
-          float: right;
-          margin-top: -1.5px;
-          margin-right: 0;
-          font-weight: normal;
-
-          .tag {
-            margin-right: 0;
-          }
-        }
-
-        .avatar {
-          margin-top: 4px;
-        }
-
-        .description {
-          font-size: 12px;
-          line-height: 18px;
-        }
-
-        .datetime {
-          margin-top: 4px;
-          font-size: 12px;
-          line-height: 18px;
-        }
-      }
-    }
-
-    .list-item {
-      .priority-L,
-      .priority-M,
-      .priority-H {
-        font-size: 12px;
-      }
-
-      .priority-L {
-        background-color: #7cd1ff;
-      }
-
-      .priority-M {
-        background-color: #ffa743;
-      }
-
-      .priority-H {
-        background-color: #f8766c;
-      }
-
-      .description {
-        font-size: 12px;
-        line-height: 18px;
-      }
-    }
-  }
-</style>
diff --git a/src/layouts/default/header/components/notify/data.ts b/src/layouts/default/header/components/notify/data.ts
deleted file mode 100644
index 0570923..0000000
--- a/src/layouts/default/header/components/notify/data.ts
+++ /dev/null
@@ -1,206 +0,0 @@
-export interface ListItem {
-  id: string;
-  avatar: string;
-  // 閫氱煡鐨勬爣棰樺唴瀹�
-  title: string;
-  // 鏄惁鍦ㄦ爣棰樹笂鏄剧ず鍒犻櫎绾�
-  titleDelete?: boolean;
-  datetime: string;
-  type: string;
-  read?: boolean;
-  description: string;
-  clickClose?: boolean;
-  extra?: string;
-  color?: string;
-  // 浼樺厛绾�
-  priority?: string;
-}
-
-export enum PriorityTypes {
-  // 浣庝紭鍏堢骇锛屼竴鑸秷鎭�
-  L = 'L',
-  // 涓紭鍏堢骇锛岄噸瑕佹秷鎭�
-  M = 'M',
-  // 楂樹紭鍏堢骇锛岀揣鎬ユ秷鎭�
-  H = 'H',
-}
-
-export interface TabItem {
-  key: string;
-  name: string;
-  list: ListItem[];
-  unreadlist?: ListItem[];
-  count: number;
-}
-
-export const tabListData: TabItem[] = [
-  {
-    key: '1',
-    name: '閫氱煡',
-    list: [
-      {
-        id: '000000001',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
-        title: '浣犳敹鍒颁簡 14 浠芥柊鍛ㄦ姤',
-        description: '',
-        datetime: '2017-08-09',
-        type: '1',
-      },
-      {
-        id: '000000002',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png',
-        title: '浣犳帹鑽愮殑 鏇插Ξ濡� 宸查�氳繃绗笁杞潰璇�',
-        description: '',
-        datetime: '2017-08-08',
-        type: '1',
-      },
-      {
-        id: '000000003',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png',
-        title: '杩欑妯℃澘鍙互鍖哄垎澶氱閫氱煡绫诲瀷',
-        description: '',
-        datetime: '2017-08-07',
-        // read: true,
-        type: '1',
-      },
-      {
-        id: '000000004',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png',
-        title: '宸︿晶鍥炬爣鐢ㄤ簬鍖哄垎涓嶅悓鐨勭被鍨�',
-        description: '',
-        datetime: '2017-08-07',
-        type: '1',
-      },
-      {
-        id: '000000005',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png',
-        title: '鏍囬鍙互璁剧疆鑷姩鏄剧ず鐪佺暐鍙凤紝鏈緥涓爣棰樿鏁板凡璁句负1琛岋紝濡傛灉鍐呭瓒呰繃1琛屽皢鑷姩鎴柇骞舵敮鎸乼ooltip鏄剧ず瀹屾暣鏍囬銆�',
-        description: '',
-        datetime: '2017-08-07',
-        type: '1',
-      },
-      {
-        id: '000000006',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png',
-        title: '宸︿晶鍥炬爣鐢ㄤ簬鍖哄垎涓嶅悓鐨勭被鍨�',
-        description: '',
-        datetime: '2017-08-07',
-        type: '1',
-      },
-      {
-        id: '000000007',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png',
-        title: '宸︿晶鍥炬爣鐢ㄤ簬鍖哄垎涓嶅悓鐨勭被鍨�',
-        description: '',
-        datetime: '2017-08-07',
-        type: '1',
-      },
-      {
-        id: '000000008',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png',
-        title: '宸︿晶鍥炬爣鐢ㄤ簬鍖哄垎涓嶅悓鐨勭被鍨�',
-        description: '',
-        datetime: '2017-08-07',
-        type: '1',
-      },
-      {
-        id: '000000009',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png',
-        title: '宸︿晶鍥炬爣鐢ㄤ簬鍖哄垎涓嶅悓鐨勭被鍨�',
-        description: '',
-        datetime: '2017-08-07',
-        type: '1',
-      },
-      {
-        id: '000000010',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png',
-        title: '宸︿晶鍥炬爣鐢ㄤ簬鍖哄垎涓嶅悓鐨勭被鍨�',
-        description: '',
-        datetime: '2017-08-07',
-        type: '1',
-      },
-    ],
-    count: 0,
-  },
-  {
-    key: '2',
-    name: '绯荤粺娑堟伅',
-    list: [
-      {
-        id: '000000006',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
-        title: '鏇蹭附涓� 璇勮浜嗕綘',
-        description: '鎻忚堪淇℃伅鎻忚堪淇℃伅鎻忚堪淇℃伅',
-        datetime: '2017-08-07',
-        type: '2',
-        clickClose: true,
-      },
-      {
-        id: '000000007',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
-        title: '鏈卞亸鍙� 鍥炲浜嗕綘',
-        description: '杩欑妯℃澘鐢ㄤ簬鎻愰啋璋佷笌浣犲彂鐢熶簡浜掑姩',
-        datetime: '2017-08-07',
-        type: '2',
-        clickClose: true,
-      },
-      {
-        id: '000000008',
-        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
-        title: '鏍囬',
-        description:
-          '璇峰皢榧犳爣绉诲姩鍒版澶勶紝浠ヤ究娴嬭瘯瓒呴暱鐨勬秷鎭湪姝ゅ灏嗗浣曞鐞嗐�傛湰渚嬩腑璁剧疆鐨勬弿杩版渶澶ц鏁颁负2锛岃秴杩�2琛岀殑鎻忚堪鍐呭灏嗚鐪佺暐骞朵笖鍙互閫氳繃tooltip鏌ョ湅瀹屾暣鍐呭',
-        datetime: '2017-08-07',
-        type: '2',
-        clickClose: true,
-      },
-    ],
-    count: 0,
-  },
-  // {
-  //   key: '3',
-  //   name: '寰呭姙',
-  //   list: [
-  //     {
-  //       id: '000000009',
-  //       avatar: '',
-  //       title: '浠诲姟鍚嶇О',
-  //       description: '浠诲姟闇�瑕佸湪 2017-01-12 20:00 鍓嶅惎鍔�',
-  //       datetime: '',
-  //       extra: '鏈紑濮�',
-  //       color: '',
-  //       type: '3',
-  //     },
-  //     {
-  //       id: '000000010',
-  //       avatar: '',
-  //       title: '绗笁鏂圭揣鎬ヤ唬鐮佸彉鏇�',
-  //       description: '鍐犻湒 闇�鍦� 2017-01-07 鍓嶅畬鎴愪唬鐮佸彉鏇翠换鍔�',
-  //       datetime: '',
-  //       extra: '椹笂鍒版湡',
-  //       color: 'red',
-  //       type: '3',
-  //     },
-  //     {
-  //       id: '000000011',
-  //       avatar: '',
-  //       title: '淇℃伅瀹夊叏鑰冭瘯',
-  //       description: '鎸囨淳绔瑰皵浜� 2017-01-09 鍓嶅畬鎴愭洿鏂板苟鍙戝竷',
-  //       datetime: '',
-  //       extra: '宸茶�楁椂 8 澶�',
-  //       color: 'gold',
-  //       type: '3',
-  //     },
-  //     {
-  //       id: '000000012',
-  //       avatar: '',
-  //       title: 'ABCD 鐗堟湰鍙戝竷',
-  //       description: '鎸囨淳绔瑰皵浜� 2017-01-09 鍓嶅畬鎴愭洿鏂板苟鍙戝竷',
-  //       datetime: '',
-  //       extra: '杩涜涓�',
-  //       color: 'blue',
-  //       type: '3',
-  //     },
-  //   ],
-  // },
-];
diff --git a/src/layouts/default/header/components/notify/index.vue b/src/layouts/default/header/components/notify/index.vue
deleted file mode 100644
index 466099c..0000000
--- a/src/layouts/default/header/components/notify/index.vue
+++ /dev/null
@@ -1,269 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <Badge :count="count" :overflowCount="9" :offset="[-4, 10]" :numberStyle="numberStyle" @click="clickBadge">
-      <BellOutlined />
-    </Badge>
-
-    <DynamicNotice ref="dynamicNoticeRef" v-bind="dynamicNoticeProps" />
-    <DetailModal @register="registerDetail" />
-
-    <sys-message-modal @register="registerMessageModal" @refresh="reloadCount"></sys-message-modal>
-  </div>
-</template>
-<script lang="ts">
-  import { computed, defineComponent, ref, unref, reactive, onMounted, getCurrentInstance } from 'vue';
-  import { Popover, Tabs, Badge } from 'ant-design-vue';
-  import { BellOutlined } from '@ant-design/icons-vue';
-  import { tabListData } from './data';
-  import { listCementByUser, editCementSend } from './notify.api';
-  import NoticeList from './NoticeList.vue';
-  import DetailModal from '/@/views/monitor/mynews/DetailModal.vue';
-  import DynamicNotice from '/@/views/monitor/mynews/DynamicNotice.vue';
-  import { useModal } from '/@/components/Modal';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { useUserStore } from '/@/store/modules/user';
-  import { connectWebSocket, onWebSocket } from '/@/hooks/web/useWebSocket';
-  import { readAllMsg } from '/@/views/monitor/mynews/mynews.api';
-  import { getToken } from '/@/utils/auth';
-  import md5 from 'crypto-js/md5';
-
-  import SysMessageModal from '/@/views/system/message/components/SysMessageModal.vue'
-
-  export default defineComponent({
-    components: {
-      Popover,
-      BellOutlined,
-      Tabs,
-      TabPane: Tabs.TabPane,
-      Badge,
-      NoticeList,
-      DetailModal,
-      DynamicNotice,
-      SysMessageModal,
-    },
-    setup() {
-      const { prefixCls } = useDesign('header-notify');
-      const instance: any = getCurrentInstance();
-      const userStore = useUserStore();
-      const glob = useGlobSetting();
-      const dynamicNoticeProps = reactive({ path: '', formData: {} });
-      const [registerDetail, detailModal] = useModal();
-      const listData = ref(tabListData);
-      const count = computed(() => {
-        let count = 0;
-        for (let i = 0; i < listData.value.length; i++) {
-          count += listData.value[i].count;
-        }
-        return count;
-      });
-
-      const [registerMessageModal, { openModal: openMessageModal }] = useModal();
-      function clickBadge(){
-        //娑堟伅鍒楄〃寮圭獥鍓嶅幓闄よ鏍�
-        for (let i = 0; i < listData.value.length; i++) {
-          listData.value[i].count = 0;
-        }
-        openMessageModal(true, {})
-      }
-
-      const popoverVisible = ref<boolean>(false);
-      onMounted(() => {
-       initWebSocket();
-      });
-
-      function mapAnnouncement(item) {
-        return {
-          ...item,
-          title: item.titile,
-          description: item.msgAbstract,
-          datetime: item.sendTime,
-        };
-      }
-
-      // 鑾峰彇绯荤粺娑堟伅
-      async function loadData() {
-        try {
-          let { anntMsgList, sysMsgList, anntMsgTotal, sysMsgTotal } = await listCementByUser({
-            pageSize: 5,
-          });
-          listData.value[0].list = anntMsgList.map(mapAnnouncement);
-          listData.value[1].list = sysMsgList.map(mapAnnouncement);
-          listData.value[0].count = anntMsgTotal;
-          listData.value[1].count = sysMsgTotal;
-        } catch (e) {
-          console.warn('绯荤粺娑堟伅閫氱煡寮傚父锛�', e);
-        }
-      }
-
-      loadData();
-
-      function onNoticeClick(record) {
-        try {
-          editCementSend(record.id);
-          loadData();
-        } catch (e) {
-          console.error(e);
-        }
-        if (record.openType === 'component') {
-          dynamicNoticeProps.path = record.openPage;
-          dynamicNoticeProps.formData = { id: record.busId };
-          instance.refs.dynamicNoticeRef?.detail(record.openPage);
-        } else {
-          detailModal.openModal(true, {
-            record,
-            isUpdate: true,
-          });
-        }
-        popoverVisible.value = false;
-      }
-
-      // 鍒濆鍖� WebSocket
-      function initWebSocket() {
-        let token = getToken();
-        //灏嗙櫥褰晅oken鐢熸垚涓�涓煭鐨勬爣璇�
-        let wsClientId = md5(token);
-        let userId = unref(userStore.getUserInfo).id + "_" + wsClientId;
-        // WebSocket涓庢櫘閫氱殑璇锋眰鎵�鐢ㄥ崗璁湁鎵�涓嶅悓锛寃s绛夊悓浜巋ttp锛寃ss绛夊悓浜巋ttps
-        let url = glob.domainUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/websocket/' + userId;
-        connectWebSocket(url);
-        onWebSocket(onWebSocketMessage);
-      }
-
-      function onWebSocketMessage(data) {
-        if (data.cmd === 'topic' || data.cmd === 'user') {
-          //update-begin-author:taoyan date:2022-7-13 for: VUEN-1674銆愪弗閲峛ug銆戠郴缁熼�氱煡锛屼负浠�涔堝繀椤诲埛鏂板彸涓婅鎵嶆彁绀�
-          //鍚庡彴淇濆瓨鏁版嵁澶參 鍓嶇寤惰繜鍒锋柊娑堟伅
-          setTimeout(()=>{
-            loadData();
-          }, 1000)
-          //update-end-author:taoyan date:2022-7-13 for: VUEN-1674銆愪弗閲峛ug銆戠郴缁熼�氱煡锛屼负浠�涔堝繀椤诲埛鏂板彸涓婅鎵嶆彁绀�
-        }
-      }
-
-      // 娓呯┖娑堟伅
-      function onEmptyNotify() {
-        popoverVisible.value = false;
-        readAllMsg({}, loadData);
-      }
-      async function reloadCount(id){
-        try {
-          await editCementSend(id);
-          await loadData();
-        } catch (e) {
-          console.error(e);
-        }
-      }
-
-
-      return {
-        prefixCls,
-        listData,
-        count,
-        clickBadge,
-        registerMessageModal,
-        reloadCount,
-        onNoticeClick,
-        onEmptyNotify,
-        numberStyle: {},
-        popoverVisible,
-        registerDetail,
-        dynamicNoticeProps,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  //noinspection LessUnresolvedVariable
-  @prefix-cls: ~'@{namespace}-header-notify';
-
-  .@{prefix-cls} {
-    padding-top: 2px;
-
-    &__overlay {
-      max-width: 340px;
-
-      .ant-popover-inner-content {
-        padding: 0;
-      }
-
-      .ant-tabs-nav {
-        margin-bottom: 12px;
-      }
-
-      .ant-list-item {
-        padding: 12px 24px;
-        transition: background-color 300ms;
-
-      }
-
-      .bottom-buttons {
-        text-align: center;
-        border-top: 1px solid #f0f0f0;
-        height: 42px;
-
-        .ant-btn {
-          border: 0;
-          height: 100%;
-
-          &:first-child {
-            border-right: 1px solid #f0f0f0;
-          }
-        }
-      }
-    }
-
-    .ant-tabs-content {
-      width: 300px;
-    }
-
-    .ant-badge {
-      font-size: 18px;
-
-      .ant-badge-count {
-        @badget-size: 16px;
-        width: @badget-size;
-        height: @badget-size;
-        min-width: @badget-size;
-        line-height: @badget-size;
-        padding: 0;
-
-        .ant-scroll-number-only > p.ant-scroll-number-only-unit {
-          font-size: 14px;
-          height: @badget-size;
-        }
-      }
-
-      .ant-badge-multiple-words {
-        padding: 0 0 0 2px;
-        font-size: 12px;
-      }
-
-      svg {
-        width: 0.9em;
-      }
-    }
-  }
-
-  // 鍏煎榛戞殫妯″紡
-  [data-theme='dark'] .@{prefix-cls} {
-    &__overlay {
-      .ant-list-item {
-        &:hover {
-          background-color: #111b26;
-        }
-      }
-
-      .bottom-buttons {
-        border-top: 1px solid #303030;
-
-        .ant-btn {
-          &:first-child {
-            border-right: 1px solid #303030;
-          }
-        }
-      }
-    }
-  }
-
-</style>
diff --git a/src/layouts/default/header/components/notify/index_old.vue b/src/layouts/default/header/components/notify/index_old.vue
deleted file mode 100644
index 9d14bb9..0000000
--- a/src/layouts/default/header/components/notify/index_old.vue
+++ /dev/null
@@ -1,272 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <Popover v-model:visible="popoverVisible" title="" trigger="click" :overlayClassName="`${prefixCls}__overlay`">
-      <Badge :count="count" :overflowCount="9" :offset="[-4, 10]" :numberStyle="numberStyle">
-        <BellOutlined />
-      </Badge>
-      <template #content>
-        <Tabs>
-          <template v-for="item in listData" :key="item.key">
-            <TabPane>
-              <template #tab>
-                {{ item.name }}
-                <span v-if="item.list.length !== 0">({{ item.count }})</span>
-              </template>
-              <!-- 缁戝畾title-click浜嬩欢鐨勯�氱煡鍒楄〃涓爣棰樻槸鈥滃彲鐐瑰嚮鈥濈殑-->
-              <NoticeList :list="item.list" @title-click="onNoticeClick" />
-            </TabPane>
-          </template>
-        </Tabs>
-        <a-row class="bottom-buttons">
-          <a-col :span="count === 0 ? 0 : 12">
-            <a-button @click="onEmptyNotify" type="dashed" block>娓呯┖娑堟伅</a-button>
-          </a-col>
-          <a-col :span="count === 0 ? 24 : 12">
-            <a-button @click="popoverVisible = false" type="dashed" block>
-              <router-link to="/monitor/mynews">鏌ョ湅鏇村</router-link>
-            </a-button>
-          </a-col>
-        </a-row>
-      </template>
-    </Popover>
-    <DynamicNotice ref="dynamicNoticeRef" v-bind="dynamicNoticeProps" />
-    <DetailModal @register="registerDetail" />
-  </div>
-</template>
-<script lang="ts">
-  import { computed, defineComponent, ref, unref, reactive, onMounted, getCurrentInstance, onUnmounted } from 'vue';
-  import { Popover, Tabs, Badge } from 'ant-design-vue';
-  import { BellOutlined } from '@ant-design/icons-vue';
-  import { tabListData } from './data';
-  import { listCementByUser, editCementSend } from './notify.api';
-  import NoticeList from './NoticeList.vue';
-  import DetailModal from '/@/views/monitor/mynews/DetailModal.vue';
-  import DynamicNotice from '/@/views/monitor/mynews/DynamicNotice.vue';
-  import { useModal } from '/@/components/Modal';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { useUserStore } from '/@/store/modules/user';
-  import { connectWebSocket, onWebSocket, result } from '/@/hooks/web/useWebSocket';
-  import { readAllMsg } from '/@/views/monitor/mynews/mynews.api';
-  import { getToken } from '/@/utils/auth';
-  export default defineComponent({
-    components: {
-      Popover,
-      BellOutlined,
-      Tabs,
-      TabPane: Tabs.TabPane,
-      Badge,
-      NoticeList,
-      DetailModal,
-      DynamicNotice,
-    },
-    setup() {
-      const { prefixCls } = useDesign('header-notify');
-      const instance: any = getCurrentInstance();
-      const userStore = useUserStore();
-      const glob = useGlobSetting();
-      const dynamicNoticeProps = reactive({ path: '', formData: {} });
-      const [registerDetail, detailModal] = useModal();
-      const popoverVisible = ref<boolean>(false);
-      const listData = ref(tabListData);
-      listData.value[0].list = [];
-      listData.value[1].list = [];
-      listData.value[0].count = 0;
-      listData.value[1].count = 0;
-
-      onMounted(() => {
-        initWebSocket();
-      });
-
-      const count = computed(() => {
-        let count = 0;
-        for (let i = 0; i < listData.value.length; i++) {
-          count += listData.value[i].count;
-        }
-        return count;
-      });
-
-      function mapAnnouncement(item) {
-        return {
-          ...item,
-          title: item.titile,
-          description: item.msgAbstract,
-          datetime: item.sendTime,
-        };
-      }
-
-      // 鑾峰彇绯荤粺娑堟伅
-      async function loadData() {
-        try {
-          let { anntMsgList, sysMsgList, anntMsgTotal, sysMsgTotal } = await listCementByUser({
-            pageSize: 5,
-          });
-          listData.value[0].list = anntMsgList.map(mapAnnouncement);
-          listData.value[1].list = sysMsgList.map(mapAnnouncement);
-          listData.value[0].count = anntMsgTotal;
-          listData.value[1].count = sysMsgTotal;
-        } catch (e) {
-          console.warn('绯荤粺娑堟伅閫氱煡寮傚父锛�', e);
-        }
-      }
-
-      loadData();
-
-      function onNoticeClick(record) {
-        try {
-          editCementSend(record.id);
-          loadData();
-        } catch (e) {
-          console.error(e);
-        }
-        if (record.openType === 'component') {
-          dynamicNoticeProps.path = record.openPage;
-          dynamicNoticeProps.formData = { id: record.busId };
-          instance.refs.dynamicNoticeRef?.detail(record.openPage);
-        } else {
-          detailModal.openModal(true, {
-            record,
-            isUpdate: true,
-          });
-        }
-        popoverVisible.value = false;
-      }
-
-      // 鍒濆鍖� WebSocket
-      function initWebSocket() {
-        let userId = unref(userStore.getUserInfo).id;
-        let token = getToken();
-        // WebSocket涓庢櫘閫氱殑璇锋眰鎵�鐢ㄥ崗璁湁鎵�涓嶅悓锛寃s绛夊悓浜巋ttp锛寃ss绛夊悓浜巋ttps
-        let url = glob.domainUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/websocket/' + userId;
-        connectWebSocket(url);
-        onWebSocket(onWebSocketMessage);
-      }
-
-      function onWebSocketMessage(data) {
-        console.log('---onWebSocketMessage---', data)
-        if (data.cmd === 'topic' || data.cmd === 'user') {
-          //update-begin-author:taoyan date:2022-7-13 for: VUEN-1674銆愪弗閲峛ug銆戠郴缁熼�氱煡锛屼负浠�涔堝繀椤诲埛鏂板彸涓婅鎵嶆彁绀�
-          //鍚庡彴淇濆瓨鏁版嵁澶參 鍓嶇寤惰繜鍒锋柊娑堟伅
-          setTimeout(()=>{
-            loadData();
-          }, 1000)
-          //update-end-author:taoyan date:2022-7-13 for: VUEN-1674銆愪弗閲峛ug銆戠郴缁熼�氱煡锛屼负浠�涔堝繀椤诲埛鏂板彸涓婅鎵嶆彁绀�
-        }
-      }
-
-      // 娓呯┖娑堟伅
-      function onEmptyNotify() {
-        popoverVisible.value = false;
-        readAllMsg({}, loadData);
-      }
-
-      return {
-        prefixCls,
-        listData,
-        count,
-        onNoticeClick,
-        onEmptyNotify,
-        numberStyle: {},
-        popoverVisible,
-        registerDetail,
-        dynamicNoticeProps,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  //noinspection LessUnresolvedVariable
-  @prefix-cls: ~'@{namespace}-header-notify';
-
-  .@{prefix-cls} {
-    padding-top: 2px;
-
-    &__overlay {
-      max-width: 340px;
-
-      .ant-popover-inner-content {
-        padding: 0;
-      }
-
-      .ant-tabs-nav {
-        margin-bottom: 12px;
-      }
-
-      .ant-list-item {
-        padding: 12px 24px;
-        transition: background-color 300ms;
-
-        &:hover {
-          background-color: #e6f7ff;
-        }
-      }
-
-      .bottom-buttons {
-        text-align: center;
-        border-top: 1px solid #f0f0f0;
-        height: 42px;
-
-        .ant-btn {
-          border: 0;
-          height: 100%;
-
-          &:first-child {
-            border-right: 1px solid #f0f0f0;
-          }
-        }
-      }
-    }
-
-    .ant-tabs-content {
-      width: 300px;
-    }
-
-    .ant-badge {
-      font-size: 18px;
-
-      .ant-badge-count {
-        @badget-size: 16px;
-        width: @badget-size;
-        height: @badget-size;
-        min-width: @badget-size;
-        line-height: @badget-size;
-        padding: 0;
-
-        .ant-scroll-number-only > p.ant-scroll-number-only-unit {
-          font-size: 14px;
-          height: @badget-size;
-        }
-      }
-
-      .ant-badge-multiple-words {
-        padding: 0 0 0 2px;
-        font-size: 12px;
-      }
-
-      svg {
-        width: 0.9em;
-      }
-    }
-  }
-
-  // 鍏煎榛戞殫妯″紡
-  [data-theme='dark'] .@{prefix-cls} {
-    &__overlay {
-      .ant-list-item {
-        &:hover {
-          background-color: #111b26;
-        }
-      }
-
-      .bottom-buttons {
-        border-top: 1px solid #303030;
-
-        .ant-btn {
-          &:first-child {
-            border-right: 1px solid #303030;
-          }
-        }
-      }
-    }
-  }
-</style>
diff --git a/src/layouts/default/header/components/notify/notify.api.ts b/src/layouts/default/header/components/notify/notify.api.ts
deleted file mode 100644
index 40cc724..0000000
--- a/src/layouts/default/header/components/notify/notify.api.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  listCementByUser = '/sys/annountCement/listByUser',
-  editCementSend = '/sys/sysAnnouncementSend/editByAnntIdAndUserId',
-}
-
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const listCementByUser = (params?) => defHttp.get({ url: Api.listCementByUser, params });
-
-export const editCementSend = (anntId, params?) => defHttp.put({ url: Api.editCementSend, params: { anntId, ...params } });
diff --git a/src/layouts/default/header/components/user-dropdown/DepartSelect.vue b/src/layouts/default/header/components/user-dropdown/DepartSelect.vue
deleted file mode 100644
index 1bf9654..0000000
--- a/src/layouts/default/header/components/user-dropdown/DepartSelect.vue
+++ /dev/null
@@ -1,271 +0,0 @@
-<template>
-  <BasicModal v-bind="config" :title="currTitle" v-model:visible="visible" wrapClassName="loginSelectModal">
-    <a-form ref="formRef" v-bind="layout" :colon="false" class="loginSelectForm">
-      <a-form-item v-if="isMultiTenant" :validate-status="validate_status">
-        <!--label鍐呭-->
-        <template #label>
-          <a-tooltip placement="topLeft">
-            <template #title>
-              <span>鎮ㄩ毝灞炰簬澶氱鎴凤紝璇烽�夋嫨褰撳墠鎵�灞炵鎴�</span>
-            </template>
-            <a-avatar style="background-color: #87d068" :size="30"> 绉熸埛 </a-avatar>
-          </a-tooltip>
-        </template>
-        <!--閮ㄩ棬涓嬫媺鍐呭-->
-        <a-select v-model:value="tenantSelected" placeholder="璇烽�夋嫨鐧诲綍閮ㄩ棬" :class="{ 'valid-error': validate_status == 'error' }">
-          <template #suffixIcon>
-            <Icon icon="ant-design:gold-outline" />
-          </template>
-          <template v-for="tenant in tenantList" :key="tenant.id">
-            <a-select-option :value="tenant.id">{{ tenant.name }}</a-select-option>
-          </template>
-        </a-select>
-      </a-form-item>
-      <a-form-item v-if="isMultiDepart" :validate-status="validate_status1">
-        <!--label鍐呭-->
-        <template #label>
-          <a-tooltip placement="topLeft">
-            <template #title>
-              <span>鎮ㄩ毝灞炰簬澶氶儴闂紝璇烽�夋嫨褰撳墠鎵�鍦ㄩ儴闂�</span>
-            </template>
-            <a-avatar style="background-color: rgb(104, 208, 203)" :size="30"> 閮ㄩ棬 </a-avatar>
-          </a-tooltip>
-        </template>
-        <!--閮ㄩ棬涓嬫媺鍐呭-->
-        <a-select v-model:value="departSelected" placeholder="璇烽�夋嫨鐧诲綍閮ㄩ棬" :class="{ 'valid-error': validate_status1 == 'error' }">
-          <template #suffixIcon>
-            <Icon icon="ant-design:gold-outline" />
-          </template>
-          <template v-for="depart in departList" :key="depart.orgCode">
-            <a-select-option :value="depart.orgCode">{{ depart.departName }}</a-select-option>
-          </template>
-        </a-select>
-      </a-form-item>
-    </a-form>
-
-    <template #footer>
-      <a-button @click="close">鍏抽棴</a-button>
-      <a-button @click="handleSubmit" type="primary">纭</a-button>
-    </template>
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, watch, unref, defineExpose } from 'vue';
-  import { Avatar } from 'ant-design-vue';
-  import { BasicModal } from '/@/components/Modal';
-  import { getUserDeparts, selectDepart } from '/@/views/system/depart/depart.api';
-  import { getUserTenants } from '/@/views/system/tenant/tenant.api';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useUserStore } from '/@/store/modules/user';
-
-  const userStore = useUserStore();
-  const { createMessage, notification } = useMessage();
-  const props = defineProps({
-    title: { type: String, default: '閮ㄩ棬閫夋嫨' },
-    closable: { type: Boolean, default: false },
-    username: { type: String, default: '' },
-  });
-
-  const layout = {
-    labelCol: { span: 4 },
-    wrapperCol: { span: 18 },
-  };
-
-  const config = {
-    maskClosable: false,
-    closable: false,
-    canFullscreen: false,
-    width: '500px',
-    minHeight: 20,
-    maxHeight: 20,
-  };
-  const currTitle = ref('');
-
-  const isMultiTenant = ref(false);
-  const currentTenantName = ref('');
-  const tenantSelected = ref();
-  const tenantList = ref([]);
-  const validate_status = ref('');
-
-  const isMultiDepart = ref(false);
-  const currentDepartName = ref('');
-  const departSelected = ref('');
-  const departList = ref([]);
-  const validate_status1 = ref('');
-  //寮圭獥鏄鹃殣
-  const visible = ref(false);
-  /**
-   * 寮圭獥鎵撳紑鍓嶅鐞�
-   */
-  async function show() {
-    //鍔犺浇閮ㄩ棬
-    await loadDepartList();
-    //鍔犺浇绉熸埛
-    await loadTenantList();
-    //鏍囬閰嶇疆
-    if (unref(isMultiTenant) && unref(isMultiDepart)) {
-      currTitle.value = '鍒囨崲绉熸埛鍜岄儴闂�';
-    } else if (unref(isMultiTenant)) {
-      currTitle.value =
-        unref(currentTenantName) && unref(currentTenantName).length > 0 ? `绉熸埛鍒囨崲锛堝綋鍓嶇鎴� :${unref(currentTenantName)}锛塦 : props.title;
-    } else if (unref(isMultiDepart)) {
-      currTitle.value =
-        unref(currentDepartName) && unref(currentDepartName).length > 0 ? `閮ㄩ棬鍒囨崲锛堝綋鍓嶉儴闂� :${unref(currentDepartName)}锛塦 : props.title;
-    }
-    //model鏄鹃殣
-    if (unref(isMultiTenant) || unref(isMultiDepart)) {
-      visible.value = true;
-    }
-  }
-  /**
-   *鍔犺浇閮ㄩ棬淇℃伅
-   */
-  async function loadDepartList() {
-    const result = await getUserDeparts();
-    if (!result.list || result.list.length == 0) {
-      return;
-    }
-    let currentDepart = result.list.filter((item) => item.orgCode == result.orgCode);
-    departList.value = result.list;
-    departSelected.value = currentDepart && currentDepart.length > 0 ? result.orgCode : '';
-    currentDepartName.value = currentDepart && currentDepart.length > 0 ? currentDepart[0].departName : '';
-    isMultiDepart.value = true;
-  }
-  /**
-   *鍔犺浇绉熸埛淇℃伅
-   */
-  async function loadTenantList() {
-    const result = await getUserTenants();
-    if (!result.list || result.list.length == 0) {
-      return;
-    }
-    let tenantId = userStore.getTenant;
-    let currentTenant = result.list.filter((item) => item.id == tenantId);
-    currentTenantName.value = currentTenant && currentTenant.length > 0 ? currentTenant[0].name : '';
-    tenantList.value = result.list;
-    tenantSelected.value = tenantId;
-    isMultiTenant.value = true;
-  }
-
-  /**
-   * 鎻愪氦鏁版嵁
-   */
-  async function handleSubmit() {
-    if (unref(isMultiTenant) && unref(tenantSelected)==null) {
-      validate_status.value = 'error';
-      return false;
-    }
-    if (unref(isMultiDepart) && !unref(departSelected)) {
-      validate_status1.value = 'error';
-      return false;
-    }
-    departResolve()
-      .then(() => {
-        if (unref(isMultiTenant)) {
-          userStore.setTenant(unref(tenantSelected));
-        }
-        createMessage.success('鍒囨崲鎴愬姛');
-        
-        //鍒囨崲绉熸埛鍚庤鍒锋柊棣栭〉
-        window.location.reload();
-      })
-      .catch((e) => {
-        console.log('鐧诲綍閫夋嫨鍑虹幇闂', e);
-      })
-      .finally(() => {
-        if (unref(isMultiTenant)) {
-          userStore.setTenant(unref(tenantSelected));
-        }
-        close();
-      });
-  }
-  /**
-   *鍒囨崲閫夋嫨閮ㄩ棬
-   */
-  function departResolve() {
-    return new Promise(async (resolve, reject) => {
-      if (!unref(isMultiDepart)) {
-        resolve();
-      } else {
-        const result = await selectDepart({
-          username: userStore.getUserInfo.username,
-          orgCode: unref(departSelected),
-          loginTenantId: unref(tenantSelected),
-        });
-        if (result.userInfo) {
-          const userInfo = result.userInfo;
-          userStore.setUserInfo(userInfo);
-          resolve();
-        } else {
-          requestFailed(result);
-          userStore.logout();
-          reject();
-        }
-      }
-    });
-  }
-  /**
-   * 璇锋眰澶辫触澶勭悊
-   */
-  function requestFailed(err) {
-    notification.error({
-      message: '鐧诲綍澶辫触',
-      description: ((err.response || {}).data || {}).message || err.message || '璇锋眰鍑虹幇閿欒锛岃绋嶅悗鍐嶈瘯',
-      duration: 4,
-    });
-  }
-  /**
-   * 鍏抽棴model
-   */
-  function close() {
-    departClear();
-  }
-
-  /**
-   *鍒濆鍖栨暟鎹�
-   */
-  function departClear() {
-    currTitle.value = '';
-
-    isMultiTenant.value = false;
-    currentTenantName.value = '';
-    tenantSelected.value = '';
-    tenantList.value = [];
-    validate_status.value = '';
-
-    isMultiDepart.value = false;
-    currentDepartName.value = '';
-    departSelected.value = '';
-    departList.value = [];
-    validate_status1.value = '';
-
-    visible.value = false;
-  }
-
-  /**
-   * 鐩戝惉username
-   */
-  watch(
-    () => props.username,
-    (value) => {
-      value && loadDepartList();
-    }
-  );
-
-  defineExpose({
-    show,
-  });
-</script>
-<style lang="less" scoped>
-  .loginSelectForm {
-    margin-bottom: -20px;
-  }
-
-  .loginSelectModal {
-    top: 20px;
-  }
-
-  .valid-error .ant-select-selection__placeholder {
-    color: #f5222d;
-  }
-</style>
diff --git a/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue b/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue
deleted file mode 100644
index aa193d5..0000000
--- a/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-<template>
-  <MenuItem :key="itemKey">
-    <span class="flex items-center">
-      <Icon :icon="icon" class="mr-1" />
-      <span>{{ text }}</span>
-    </span>
-  </MenuItem>
-</template>
-<script lang="ts">
-  import { Menu } from 'ant-design-vue';
-
-  import { computed, defineComponent, getCurrentInstance } from 'vue';
-
-  import Icon from '/@/components/Icon/index';
-  import { propTypes } from '/@/utils/propTypes';
-
-  export default defineComponent({
-    name: 'DropdownMenuItem',
-    components: { MenuItem: Menu.Item, Icon },
-    props: {
-      key: propTypes.string,
-      text: propTypes.string,
-      icon: propTypes.string,
-    },
-    setup(props) {
-      const instance = getCurrentInstance();
-      const itemKey = computed(() => props.key || instance?.vnode?.props?.key);
-      return { itemKey };
-    },
-  });
-</script>
diff --git a/src/layouts/default/header/components/user-dropdown/UpdatePassword.vue b/src/layouts/default/header/components/user-dropdown/UpdatePassword.vue
deleted file mode 100644
index 4668c57..0000000
--- a/src/layouts/default/header/components/user-dropdown/UpdatePassword.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="淇敼瀵嗙爜" @ok="handleSubmit" width="600px">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, unref, defineExpose } from 'vue';
-  import { rules } from '/@/utils/helper/validator';
-  import { defHttp } from '/@/utils/http/axios';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  // 澹版槑Emits
-  const emit = defineEmits(['register']);
-  const $message = useMessage();
-  const formRef = ref();
-  const username = ref('');
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, validate, clearValidate }] = useForm({
-    schemas: [
-      {
-        label: '鏃у瘑鐮�',
-        field: 'oldpassword',
-        component: 'InputPassword',
-        required: true,
-      },
-      {
-        label: '鏂板瘑鐮�',
-        field: 'password',
-        component: 'StrengthMeter',
-        componentProps: {
-          placeholder: '璇疯緭鍏ユ柊瀵嗙爜',
-        },
-        rules: [
-          {
-            required: true,
-            message: '璇疯緭鍏ユ柊瀵嗙爜',
-          },
-        ],
-      },
-      {
-        label: '纭鏂板瘑鐮�',
-        field: 'confirmpassword',
-        component: 'InputPassword',
-        dynamicRules: ({ values }) => rules.confirmPassword(values, true),
-      },
-    ],
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner();
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      let params = Object.assign({ username: unref(username) }, values);
-      defHttp.put({ url: '/sys/user/updatePassword', params }, { isTransformResponse: false }).then((res) => {
-        if (res.success) {
-          $message.createMessage.success(res.message);
-          //鍏抽棴寮圭獥
-          closeModal();
-        } else {
-          $message.createMessage.warning(res.message);
-        }
-      });
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-
-  async function show(name) {
-    if (!name) {
-      $message.createMessage.warning('褰撳墠绯荤粺鏃犵櫥褰曠敤鎴�!');
-      return;
-    } else {
-      username.value = name;
-      await setModalProps({ visible: true });
-      await resetFields();
-      await clearValidate();
-    }
-  }
-
-  defineExpose({
-    show,
-  });
-</script>
diff --git a/src/layouts/default/header/components/user-dropdown/index.vue b/src/layouts/default/header/components/user-dropdown/index.vue
deleted file mode 100644
index b671c7e..0000000
--- a/src/layouts/default/header/components/user-dropdown/index.vue
+++ /dev/null
@@ -1,233 +0,0 @@
-<template>
-	<Dropdown placement="bottomLeft" :overlayClassName="`${prefixCls}-dropdown-overlay`">
-		<span :class="[prefixCls, `${prefixCls}--${theme}`]" class="flex">
-			<img :class="`${prefixCls}__header`" :src="getAvatarUrl" />
-			<span :class="`${prefixCls}__info hidden md:block`">
-				<span :class="`${prefixCls}__name  `" class="truncate">
-					{{ getUserInfo.realname }}
-				</span>
-			</span>
-		</span>
-
-		<template #overlay>
-			<Menu @click="handleMenuClick">
-				<!-- <MenuItem key="doc" :text="t('layout.header.dropdownItemDoc')" icon="ion:document-text-outline" v-if="getShowDoc" /> -->
-				<MenuDivider v-if="getShowDoc" />
-				<MenuItem key="account" :text="t('layout.header.dropdownItemSwitchAccount')" icon="ant-design:setting-outlined" />
-				<MenuItem key="password" :text="t('layout.header.dropdownItemSwitchPassword')" icon="ant-design:edit-outlined" />
-				<!-- <MenuItem key="depart" :text="t('layout.header.dropdownItemSwitchDepart')" icon="ant-design:cluster-outlined" /> -->
-				<MenuItem key="cache" :text="t('layout.header.dropdownItemRefreshCache')" icon="ion:sync-outline" />
-				<!-- <MenuItem
-            v-if="getUseLockPage"
-            key="lock"
-            :text="t('layout.header.tooltipLock')"
-            icon="ion:lock-closed-outline"
-        />-->
-				<MenuItem key="logout" :text="t('layout.header.dropdownItemLoginOut')" icon="ion:power-outline" />
-			</Menu>
-		</template>
-	</Dropdown>
-	<LockAction @register="register" />
-	<DepartSelect ref="loginSelectRef" />
-	<UpdatePassword ref="updatePasswordRef" />
-</template>
-<script lang="ts">
-	// components
-	import { Dropdown, Menu } from 'ant-design-vue'
-
-	import { defineComponent, computed, ref } from 'vue'
-
-	import { SITE_URL } from '/@/settings/siteSetting'
-
-	import { useUserStore } from '/@/store/modules/user'
-	import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'
-	import { useI18n } from '/@/hooks/web/useI18n'
-	import { useDesign } from '/@/hooks/web/useDesign'
-	import { useModal } from '/@/components/Modal'
-	import { useMessage } from '/src/hooks/web/useMessage'
-	import { useGo } from '/@/hooks/web/usePage'
-	import headerImg from '/@/assets/images/header.jpg'
-	import { propTypes } from '/@/utils/propTypes'
-	import { openWindow } from '/@/utils'
-
-	import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'
-
-	import { refreshCache, queryAllDictItems } from '/@/views/system/dict/dict.api'
-	import { DB_DICT_DATA_KEY } from '/src/enums/cacheEnum'
-	import { removeAuthCache, setAuthCache } from '/src/utils/auth'
-	import { getFileAccessHttpUrl } from '/@/utils/common/compUtils'
-
-	type MenuEvent = 'logout' | 'doc' | 'lock' | 'cache' | 'depart'
-	const { createMessage } = useMessage()
-	export default defineComponent({
-		name: 'UserDropdown',
-		components: {
-			Dropdown,
-			Menu,
-			MenuItem: createAsyncComponent(() => import('./DropMenuItem.vue')),
-			MenuDivider: Menu.Divider,
-			LockAction: createAsyncComponent(() => import('../lock/LockModal.vue')),
-			DepartSelect: createAsyncComponent(() => import('./DepartSelect.vue')),
-			UpdatePassword: createAsyncComponent(() => import('./UpdatePassword.vue')),
-		},
-		props: {
-			theme: propTypes.oneOf(['dark', 'light']),
-		},
-		setup() {
-			const { prefixCls } = useDesign('header-user-dropdown')
-			const { t } = useI18n()
-			const { getShowDoc, getUseLockPage } = useHeaderSetting()
-			const userStore = useUserStore()
-			const go = useGo()
-
-			const getUserInfo = computed(() => {
-				const { realname = '', avatar, desc } = userStore.getUserInfo || {}
-				return { realname, avatar: avatar || headerImg, desc }
-			})
-
-			const getAvatarUrl = computed(() => {
-				let { avatar } = getUserInfo.value
-				if (avatar == headerImg) {
-					return avatar
-				} else {
-					return getFileAccessHttpUrl(avatar)
-				}
-			})
-
-			const [register, { openModal }] = useModal()
-			/**
-			 * 澶氶儴闂ㄥ脊绐楅�昏緫
-			 */
-			const loginSelectRef = ref()
-			function handleLock() {
-				openModal(true)
-			}
-
-			//  login out
-			function handleLoginOut() {
-				userStore.confirmLoginOut()
-			}
-
-			// open doc
-			function openDoc() {
-				openWindow(SITE_URL)
-			}
-
-			// 娓呴櫎缂撳瓨
-			async function clearCache() {
-				const result = await refreshCache()
-				if (result.success) {
-					const res = await queryAllDictItems()
-					removeAuthCache(DB_DICT_DATA_KEY)
-					setAuthCache(DB_DICT_DATA_KEY, res.result)
-					createMessage.success('鍒锋柊缂撳瓨瀹屾垚锛�')
-				} else {
-					createMessage.error('鍒锋柊缂撳瓨澶辫触锛�')
-				}
-			}
-			// 鍒囨崲閮ㄩ棬
-			function updateCurrentDepart() {
-				loginSelectRef.value.show()
-			}
-			// 淇敼瀵嗙爜
-			const updatePasswordRef = ref()
-			function updatePassword() {
-				updatePasswordRef.value.show(userStore.getUserInfo.username)
-			}
-
-			function handleMenuClick(e: { key: MenuEvent }) {
-				switch (e.key) {
-					case 'logout':
-						handleLoginOut()
-						break
-					case 'doc':
-						openDoc()
-						break
-					case 'lock':
-						handleLock()
-						break
-					case 'cache':
-						clearCache()
-						break
-					case 'depart':
-						updateCurrentDepart()
-						break
-					case 'password':
-						updatePassword()
-						break
-					case 'account':
-						//update-begin---author:wangshuai ---date:20221125  for锛氳繘鍏ョ敤鎴疯缃〉闈�------------
-						go(`/system/usersetting`)
-						//update-end---author:wangshuai ---date:20221125  for锛氳繘鍏ョ敤鎴疯缃〉闈�--------------
-						break
-				}
-			}
-
-			return {
-				prefixCls,
-				t,
-				getUserInfo,
-				getAvatarUrl,
-				handleMenuClick,
-				getShowDoc,
-				register,
-				getUseLockPage,
-				loginSelectRef,
-				updatePasswordRef,
-			}
-		},
-	})
-</script>
-<style lang="less">
-	@prefix-cls: ~'@{namespace}-header-user-dropdown';
-
-	.@{prefix-cls} {
-		height: @header-height;
-		padding: 0 0 0 10px;
-		padding-right: 10px;
-		overflow: hidden;
-		font-size: 12px;
-		cursor: pointer;
-		align-items: center;
-
-		img {
-			width: 24px;
-			height: 24px;
-			margin-right: 12px;
-		}
-
-		&__header {
-			border-radius: 50%;
-		}
-
-		&__name {
-			font-size: 14px;
-		}
-
-		&--dark {
-			&:hover {
-				background-color: @header-dark-bg-hover-color;
-			}
-		}
-
-		&--light {
-			&:hover {
-				background-color: @header-light-bg-hover-color;
-			}
-
-			.@{prefix-cls}__name {
-				color: @text-color-base;
-			}
-
-			.@{prefix-cls}__desc {
-				color: @header-light-desc-color;
-			}
-		}
-
-		&-dropdown-overlay {
-			.ant-dropdown-menu-item {
-				min-width: 160px;
-			}
-		}
-	}
-</style>
diff --git a/src/layouts/default/header/index.less b/src/layouts/default/header/index.less
deleted file mode 100644
index 5a1d68f..0000000
--- a/src/layouts/default/header/index.less
+++ /dev/null
@@ -1,200 +0,0 @@
-@header-trigger-prefix-cls: ~'@{namespace}-layout-header-trigger';
-@header-prefix-cls: ~'@{namespace}-layout-header';
-@breadcrumb-prefix-cls: ~'@{namespace}-layout-breadcrumb';
-@logo-prefix-cls: ~'@{namespace}-app-logo';
-
-.@{header-prefix-cls} {
-  display: flex;
-  height: @header-height;
-  padding: 0;
-  margin-left: -1px;
-  line-height: @header-height;
-  color: @white;
-  background-color: @white;
-  align-items: center;
-  justify-content: space-between;
-
-  &--mobile {
-    .@{breadcrumb-prefix-cls},
-    .error-action,
-    .notify-item,
-    .lock-item,
-    .fullscreen-item {
-      display: none;
-    }
-
-    .@{logo-prefix-cls} {
-      min-width: unset;
-      padding-right: 0;
-
-      &__title {
-        display: none;
-      }
-    }
-
-    .@{header-trigger-prefix-cls} {
-      padding: 0 4px 0 8px !important;
-    }
-
-    .@{header-prefix-cls}-action {
-      padding-right: 4px;
-    }
-  }
-
-  &--fixed {
-    position: fixed;
-    top: 0;
-    left: 0;
-    z-index: @layout-header-fixed-z-index;
-    width: 100%;
-  }
-
-  &-logo {
-    height: @header-height;
-    min-width: 192px;
-    padding: 0 10px;
-    font-size: 14px;
-
-    img {
-      width: @logo-width;
-      height: @logo-width;
-      margin-right: 2px;
-    }
-  }
-
-  &-left {
-    display: flex;
-    height: 100%;
-    align-items: center;
-
-    .@{header-trigger-prefix-cls} {
-      display: flex;
-      height: 100%;
-      padding: 1px 10px 0 10px;
-      cursor: pointer;
-      align-items: center;
-
-      .anticon {
-        font-size: 16px;
-      }
-
-      &.light {
-        &:hover {
-          background-color: @header-light-bg-hover-color;
-        }
-
-        svg {
-          fill: #000;
-        }
-      }
-
-      &.dark {
-        &:hover {
-          background-color: @header-dark-bg-hover-color;
-        }
-      }
-    }
-  }
-
-  &-menu {
-    height: 100%;
-    min-width: 0;
-    flex: 1;
-    align-items: center;
-  }
-
-  &-action {
-    display: flex;
-    min-width: 180px;
-    // padding-right: 12px;
-    align-items: center;
-
-    &__item {
-      display: flex !important;
-      height: @header-height;
-      padding: 0 2px;
-      font-size: 1.2em;
-      cursor: pointer;
-      align-items: center;
-
-      .ant-badge {
-        height: @header-height;
-        line-height: @header-height;
-      }
-
-      .ant-badge-dot {
-        top: 10px;
-        right: 2px;
-      }
-    }
-
-    span[role='img'] {
-      padding: 0 8px;
-    }
-  }
-
-  &--light {
-    background-color: @white !important;
-    border-bottom: 1px solid @header-light-bottom-border-color;
-    border-left: 1px solid @header-light-bottom-border-color;
-
-    .@{header-prefix-cls}-logo {
-      color: @text-color-base;
-
-      &:hover {
-        background-color: @header-light-bg-hover-color;
-      }
-    }
-
-    .@{header-prefix-cls}-action {
-      &__item {
-        color: @text-color-base;
-
-        .app-iconify {
-          padding: 0 10px;
-          font-size: 16px !important;
-        }
-
-        &:hover {
-          background-color: @header-light-bg-hover-color;
-        }
-      }
-
-      &-icon,
-      span[role='img'] {
-        color: @text-color-base;
-      }
-    }
-  }
-
-  &--dark {
-    background-color: @header-dark-bg-color !important;
-    // border-bottom: 1px solid @border-color-base;
-    border-left: 1px solid @border-color-base;
-
-    .@{header-prefix-cls}-logo {
-      &:hover {
-        background-color: @header-dark-bg-hover-color;
-      }
-    }
-
-    .@{header-prefix-cls}-action {
-      &__item {
-        .app-iconify {
-          padding: 0 10px;
-          font-size: 16px !important;
-        }
-
-        .ant-badge {
-          span {
-            color: @white;
-          }
-        }
-
-        &:hover {
-          background-color: @header-dark-bg-hover-color;
-        }
-      }
-    }
-  }
-}
diff --git a/src/layouts/default/header/index.vue b/src/layouts/default/header/index.vue
deleted file mode 100644
index 4fb6c62..0000000
--- a/src/layouts/default/header/index.vue
+++ /dev/null
@@ -1,250 +0,0 @@
-<template>
-  <Header :class="getHeaderClass">
-    <!-- left start -->
-    <div :class="`${prefixCls}-left`">
-      <!-- logo -->
-      <AppLogo v-if="getShowHeaderLogo || getIsMobile" :class="`${prefixCls}-logo`" :theme="getHeaderTheme" :style="getLogoWidth" />
-      <LayoutTrigger
-        v-if="(getShowContent && getShowHeaderTrigger && !getSplit && !getIsMixSidebar) || getIsMobile"
-        :theme="getHeaderTheme"
-        :sider="false"
-      />
-      <LayoutBreadcrumb v-if="getShowContent && getShowBread" :theme="getHeaderTheme" />
-      <!-- 娆㈣繋璇� -->
-      <span v-if="getShowContent && getShowBreadTitle && !getIsMobile" :class="[prefixCls, `${prefixCls}--${getHeaderTheme}`,'headerIntroductionClass']"> 娆㈣繋杩涘叆 {{ '鏅鸿兘涓嵂骞茬嚗鏈烘暟瀛楀寲杞﹂棿' }} </span>
-    </div>
-    <!-- left end -->
-
-    <!-- menu start -->
-    <div :class="`${prefixCls}-menu`" v-if="getShowTopMenu && !getIsMobile">
-      <LayoutMenu :isHorizontal="true" :theme="getHeaderTheme" :splitType="getSplitType" :menuMode="getMenuMode" />
-    </div>
-    <!-- menu-end -->
-
-    <!-- action  -->
-    <div :class="`${prefixCls}-action`">
-      <AppSearch :class="`${prefixCls}-action__item `" v-if="getShowSearch" />
-
-      <ErrorAction v-if="getUseErrorHandle" :class="`${prefixCls}-action__item error-action`" />
-
-      <Notify v-if="getShowNotice" :class="`${prefixCls}-action__item notify-item`" />
-
-      <FullScreen v-if="getShowFullScreen" :class="`${prefixCls}-action__item fullscreen-item`" />
-
-      <LockScreen v-if="getUseLockPage" />
-
-      <AppLocalePicker v-if="getShowLocalePicker" :reload="true" :showText="false" :class="`${prefixCls}-action__item`" />
-
-      <UserDropDown :theme="getHeaderTheme" />
-
-      <SettingDrawer v-if="getShowSetting" :class="`${prefixCls}-action__item`" />
-    </div>
-  </Header>
-  <LoginSelect ref="loginSelectRef" @success="loginSelectOk"></LoginSelect>
-</template>
-<script lang="ts">
-  import { defineComponent, unref, computed, ref, onMounted, toRaw } from 'vue';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { propTypes } from '/@/utils/propTypes';
-
-  import { Layout } from 'ant-design-vue';
-  import { AppLogo } from '/@/components/Application';
-  import LayoutMenu from '../menu/index.vue';
-  import LayoutTrigger from '../trigger/index.vue';
-
-  import { AppSearch } from '/@/components/Application';
-
-  import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-
-  import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum';
-  import { SettingButtonPositionEnum } from '/@/enums/appEnum';
-  import { AppLocalePicker } from '/@/components/Application';
-
-  import { UserDropDown, LayoutBreadcrumb, FullScreen, Notify, ErrorAction, LockScreen } from './components';
-  import { useAppInject } from '/@/hooks/web/useAppInject';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-  import { useLocale } from '/@/locales/useLocale';
-
-  import LoginSelect from '/@/views/sys/login/LoginSelect.vue';
-  import { useUserStore } from '/@/store/modules/user';
-
-  export default defineComponent({
-    name: 'LayoutHeader',
-    components: {
-      Header: Layout.Header,
-      AppLogo,
-      LayoutTrigger,
-      LayoutBreadcrumb,
-      LayoutMenu,
-      UserDropDown,
-      AppLocalePicker,
-      FullScreen,
-      Notify,
-      AppSearch,
-      ErrorAction,
-      LockScreen,
-      LoginSelect,
-      SettingDrawer: createAsyncComponent(() => import('/@/layouts/default/setting/index.vue'), {
-        loading: true,
-      }),
-    },
-    props: {
-      fixed: propTypes.bool,
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('layout-header');
-      const userStore = useUserStore();
-      const { getShowTopMenu, getShowHeaderTrigger, getSplit, getIsMixMode, getMenuWidth, getIsMixSidebar } = useMenuSetting();
-      const { getUseErrorHandle, getShowSettingButton, getSettingButtonPosition } = useRootSetting();
-      const { title } = useGlobSetting();
-      
-      const {
-        getHeaderTheme,
-        getShowFullScreen,
-        getShowNotice,
-        getShowContent,
-        getShowBread,
-        getShowHeaderLogo,
-        getShowHeader,
-        getShowSearch,
-        getUseLockPage,
-        getShowBreadTitle,
-      } = useHeaderSetting();
-
-      const { getShowLocalePicker } = useLocale();
-
-      const { getIsMobile } = useAppInject();
-
-      const getHeaderClass = computed(() => {
-        const theme = unref(getHeaderTheme);
-        return [
-          prefixCls,
-          {
-            [`${prefixCls}--fixed`]: props.fixed,
-            [`${prefixCls}--mobile`]: unref(getIsMobile),
-            [`${prefixCls}--${theme}`]: theme,
-          },
-        ];
-      });
-
-      const getShowSetting = computed(() => {
-        if (!unref(getShowSettingButton)) {
-          return false;
-        }
-        const settingButtonPosition = unref(getSettingButtonPosition);
-
-        if (settingButtonPosition === SettingButtonPositionEnum.AUTO) {
-          return unref(getShowHeader);
-        }
-        return settingButtonPosition === SettingButtonPositionEnum.HEADER;
-      });
-
-      const getLogoWidth = computed(() => {
-        if (!unref(getIsMixMode) || unref(getIsMobile)) {
-          return {};
-        }
-        const width = unref(getMenuWidth) < 180 ? 180 : unref(getMenuWidth);
-        return { width: `${width}px` };
-      });
-
-      const getSplitType = computed(() => {
-        return unref(getSplit) ? MenuSplitTyeEnum.TOP : MenuSplitTyeEnum.NONE;
-      });
-
-      const getMenuMode = computed(() => {
-        return unref(getSplit) ? MenuModeEnum.HORIZONTAL : null;
-      });
-
-      /**
-       * 棣栭〉澶氱鎴烽儴闂ㄥ脊绐楅�昏緫
-       */
-      const loginSelectRef = ref();
-
-      function showLoginSelect() {
-        //update-begin---author:liusq  Date:20220101  for锛氬垽鏂櫥褰曡繘鏉ユ槸鍚﹂渶瑕佸脊绐楅�夋嫨绉熸埛----
-        //鍒ゆ柇鏄惁鏄櫥闄嗚繘鏉�
-        const loginInfo = toRaw(userStore.getLoginInfo) || {};
-        if (!!loginInfo.isLogin) {
-          loginSelectRef.value.show(loginInfo);
-        }
-        //update-end---author:liusq  Date:20220101  for锛氬垽鏂櫥褰曡繘鏉ユ槸鍚﹂渶瑕佸脊绐楅�夋嫨绉熸埛----
-      }
-
-      function loginSelectOk() {
-        console.log('鎴愬姛銆傘�傘�傘�傘��');
-      }
-
-      onMounted(() => {
-        showLoginSelect();
-      });
-
-      return {
-        prefixCls,
-        getHeaderClass,
-        getShowHeaderLogo,
-        getHeaderTheme,
-        getShowHeaderTrigger,
-        getIsMobile,
-        getShowBreadTitle,
-        getShowBread,
-        getShowContent,
-        getSplitType,
-        getSplit,
-        getMenuMode,
-        getShowTopMenu,
-        getShowLocalePicker,
-        getShowFullScreen,
-        getShowNotice,
-        getUseErrorHandle,
-        getLogoWidth,
-        getIsMixSidebar,
-        getShowSettingButton,
-        getShowSetting,
-        getShowSearch,
-        getUseLockPage,
-        loginSelectOk,
-        loginSelectRef,
-        title
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @import './index.less';
-  //update-begin---author:scott ---date:2022-09-30  for锛氶粯璁ら殣钘忛《閮ㄨ彍鍗曢潰鍖呭睉-----------
-  //椤堕儴娆㈣繋璇睍绀烘牱寮�
-  @prefix-cls: ~'@{namespace}-layout-header';
-  
-  .@{prefix-cls} {
-    display: flex;
-    padding: 0 8px;
-    align-items: center;
-    
-    .headerIntroductionClass {
-      margin-right: 4px;
-      margin-bottom: 2px;
-      border-bottom: 0px;
-      border-left: 0px;
-    }
-    
-    &--light {
-      .headerIntroductionClass {
-        color: @breadcrumb-item-normal-color;
-      }
-    }
-
-    &--dark {
-      .headerIntroductionClass {
-        color: rgba(255, 255, 255, 0.6);
-      }
-      .anticon {
-        color: rgba(255, 255, 255, 0.8);
-      }
-    }
-    //update-end---author:scott ---date::2022-09-30  for锛氶粯璁ら殣钘忛《閮ㄨ彍鍗曢潰鍖呭睉--------------
-  }
-</style>
diff --git a/src/layouts/default/index.vue b/src/layouts/default/index.vue
deleted file mode 100644
index c8fe28c..0000000
--- a/src/layouts/default/index.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-<template>
-  <Layout :class="prefixCls" v-bind="lockEvents">
-    <LayoutFeatures />
-    <LayoutHeader fixed v-if="getShowFullHeaderRef" />
-    <Layout :class="[layoutClass]">
-      <LayoutSideBar v-if="getShowSidebar || getIsMobile" />
-      <Layout :class="`${prefixCls}-main`">
-        <LayoutMultipleHeader />
-        <LayoutContent />
-        <LayoutFooter />
-      </Layout>
-    </Layout>
-  </Layout>
-</template>
-
-<script lang="ts">
-  import { defineComponent, computed, unref, ref } from 'vue';
-  import { Layout } from 'ant-design-vue';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-
-  import LayoutHeader from './header/index.vue';
-  import LayoutContent from './content/index.vue';
-  import LayoutSideBar from './sider/index.vue';
-  import LayoutMultipleHeader from './header/MultipleHeader.vue';
-
-  import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useLockPage } from '/@/hooks/web/useLockPage';
-
-  import { useAppInject } from '/@/hooks/web/useAppInject';
-
-  export default defineComponent({
-    name: 'DefaultLayout',
-    components: {
-      LayoutFeatures: createAsyncComponent(() => import('/@/layouts/default/feature/index.vue')),
-      LayoutFooter: createAsyncComponent(() => import('/@/layouts/default/footer/index.vue')),
-      LayoutHeader,
-      LayoutContent,
-      LayoutSideBar,
-      LayoutMultipleHeader,
-      Layout,
-    },
-    setup() {
-      const { prefixCls } = useDesign('default-layout');
-      const { getIsMobile } = useAppInject();
-      const { getShowFullHeaderRef } = useHeaderSetting();
-      const { getShowSidebar, getIsMixSidebar, getShowMenu } = useMenuSetting();
-
-      // Create a lock screen monitor
-      const lockEvents = useLockPage();
-
-      const layoutClass = computed(() => {
-        let cls: string[] = ['ant-layout'];
-        if (unref(getIsMixSidebar) || unref(getShowMenu)) {
-          cls.push('ant-layout-has-sider');
-        }
-        return cls;
-      });
-
-      return {
-        getShowFullHeaderRef,
-        getShowSidebar,
-        prefixCls,
-        getIsMobile,
-        getIsMixSidebar,
-        layoutClass,
-        lockEvents,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-default-layout';
-
-  .@{prefix-cls} {
-    display: flex;
-    width: 100%;
-    min-height: 100%;
-    background-color: @content-bg;
-    flex-direction: column;
-
-    > .ant-layout {
-      min-height: 100%;
-    }
-
-    &-main {
-      width: 100%;
-      margin-left: 1px;
-    }
-  }
-</style>
diff --git a/src/layouts/default/menu/index.vue b/src/layouts/default/menu/index.vue
deleted file mode 100644
index c9839d5..0000000
--- a/src/layouts/default/menu/index.vue
+++ /dev/null
@@ -1,189 +0,0 @@
-<script lang="tsx">
-  import type { PropType, CSSProperties } from 'vue';
-
-  import { computed, defineComponent, unref, toRef } from 'vue';
-  import { BasicMenu } from '/@/components/Menu';
-  import { SimpleMenu } from '/@/components/SimpleMenu';
-  import { AppLogo } from '/@/components/Application';
-
-  import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum';
-
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { ScrollContainer } from '/@/components/Container';
-
-  import { useGo } from '/@/hooks/web/usePage';
-  import { useSplitMenu } from './useLayoutMenu';
-  import { openWindow } from '/@/utils';
-  import { propTypes } from '/@/utils/propTypes';
-  import { isUrl } from '/@/utils/is';
-  import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-  import { useAppInject } from '/@/hooks/web/useAppInject';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useLocaleStore } from '/@/store/modules/locale';
-
-  export default defineComponent({
-    name: 'LayoutMenu',
-    props: {
-      theme: propTypes.oneOf(['light', 'dark']),
-
-      splitType: {
-        type: Number as PropType<MenuSplitTyeEnum>,
-        default: MenuSplitTyeEnum.NONE,
-      },
-
-      isHorizontal: propTypes.bool,
-      // menu Mode
-      menuMode: {
-        type: [String] as PropType<Nullable<MenuModeEnum>>,
-        default: '',
-      },
-    },
-    setup(props) {
-      const go = useGo();
-
-      const {
-        getMenuMode,
-        getMenuType,
-        getMenuTheme,
-        getCollapsed,
-        getCollapsedShowTitle,
-        getAccordion,
-        getIsHorizontal,
-        getIsSidebarType,
-        getSplit,
-      } = useMenuSetting();
-      const { getShowLogo } = useRootSetting();
-
-      const { prefixCls } = useDesign('layout-menu');
-
-      const { menusRef } = useSplitMenu(toRef(props, 'splitType'));
-
-      const { getIsMobile } = useAppInject();
-
-      const getComputedMenuMode = computed(() => (unref(getIsMobile) ? MenuModeEnum.INLINE : props.menuMode || unref(getMenuMode)));
-
-      const getComputedMenuTheme = computed(() => props.theme || unref(getMenuTheme));
-
-      const getIsShowLogo = computed(() => unref(getShowLogo) && unref(getIsSidebarType));
-
-      const getUseScroll = computed(() => {
-        return (
-          !unref(getIsHorizontal) &&
-          (unref(getIsSidebarType) || props.splitType === MenuSplitTyeEnum.LEFT || props.splitType === MenuSplitTyeEnum.NONE)
-        );
-      });
-
-      const getWrapperStyle = computed((): CSSProperties => {
-        return {
-          height: `calc(100% - ${unref(getIsShowLogo) ? '48px' : '0px'})`,
-        };
-      });
-
-      const getLogoClass = computed(() => {
-        return [
-          `${prefixCls}-logo`,
-          unref(getComputedMenuTheme),
-          {
-            [`${prefixCls}--mobile`]: unref(getIsMobile),
-          },
-        ];
-      });
-
-      const getCommonProps = computed(() => {
-        const menus = unref(menusRef);
-        return {
-          menus,
-          beforeClickFn: beforeMenuClickFn,
-          items: menus,
-          theme: unref(getComputedMenuTheme),
-          accordion: unref(getAccordion),
-          collapse: unref(getCollapsed),
-          collapsedShowTitle: unref(getCollapsedShowTitle),
-          onMenuClick: handleMenuClick,
-        };
-      });
-      /**
-       * click menu
-       * @param menu
-       */
-      //update-begin-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-      const localeStore = useLocaleStore();
-      function handleMenuClick(path: string, item) {
-        if (item) {
-          localeStore.setPathTitle(path, item.title || '');
-        }
-        go(path);
-      }
-      //update-end-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-
-      /**
-       * before click menu
-       * @param menu
-       */
-      async function beforeMenuClickFn(path: string) {
-        if (!isUrl(path)) {
-          return true;
-        }
-        openWindow(path);
-        return false;
-      }
-
-      function renderHeader() {
-        if (!unref(getIsShowLogo) && !unref(getIsMobile)) return null;
-
-        return <AppLogo showTitle={!unref(getCollapsed)} class={unref(getLogoClass)} theme={unref(getComputedMenuTheme)} />;
-      }
-
-      function renderMenu() {
-        const { menus, ...menuProps } = unref(getCommonProps);
-        // console.log(menus);
-        if (!menus || !menus.length) return null;
-        return !props.isHorizontal ? (
-          <SimpleMenu {...menuProps} isSplitMenu={unref(getSplit)} items={menus} />
-        ) : (
-          <BasicMenu
-            {...(menuProps as any)}
-            isHorizontal={props.isHorizontal}
-            type={unref(getMenuType)}
-            showLogo={unref(getIsShowLogo)}
-            mode={unref(getComputedMenuMode as any)}
-            items={menus}
-          />
-        );
-      }
-
-      return () => {
-        return (
-          <>
-            {renderHeader()}
-            {unref(getUseScroll) ? <ScrollContainer style={unref(getWrapperStyle)}>{() => renderMenu()}</ScrollContainer> : renderMenu()}
-          </>
-        );
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-layout-menu';
-  @logo-prefix-cls: ~'@{namespace}-app-logo';
-
-  .@{prefix-cls} {
-    &-logo {
-      height: @header-height;
-      padding: 10px 4px 10px 10px;
-
-      img {
-        width: @logo-width;
-        height: @logo-width;
-      }
-    }
-
-    &--mobile {
-      .@{logo-prefix-cls} {
-        &__title {
-          opacity: 1;
-        }
-      }
-    }
-  }
-</style>
diff --git a/src/layouts/default/menu/useLayoutMenu.ts b/src/layouts/default/menu/useLayoutMenu.ts
deleted file mode 100644
index e5792da..0000000
--- a/src/layouts/default/menu/useLayoutMenu.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-import type { Menu } from '/@/router/types';
-import type { Ref } from 'vue';
-import { watch, unref, ref, computed } from 'vue';
-import { useRouter } from 'vue-router';
-import { MenuSplitTyeEnum } from '/@/enums/menuEnum';
-import { useThrottleFn } from '@vueuse/core';
-import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-import { getChildrenMenus, getCurrentParentPath, getMenus, getShallowMenus } from '/@/router/menus';
-import { usePermissionStore } from '/@/store/modules/permission';
-import { useAppInject } from '/@/hooks/web/useAppInject';
-
-export function useSplitMenu(splitType: Ref<MenuSplitTyeEnum>) {
-  // Menu array
-  const menusRef = ref<Menu[]>([]);
-  const { currentRoute } = useRouter();
-  const { getIsMobile } = useAppInject();
-  const permissionStore = usePermissionStore();
-  const { setMenuSetting, getIsHorizontal, getSplit } = useMenuSetting();
-
-  const throttleHandleSplitLeftMenu = useThrottleFn(handleSplitLeftMenu, 50);
-
-  const splitNotLeft = computed(() => unref(splitType) !== MenuSplitTyeEnum.LEFT && !unref(getIsHorizontal));
-
-  const getSplitLeft = computed(() => !unref(getSplit) || unref(splitType) !== MenuSplitTyeEnum.LEFT);
-
-  const getSpiltTop = computed(() => unref(splitType) === MenuSplitTyeEnum.TOP);
-
-  const normalType = computed(() => {
-    return unref(splitType) === MenuSplitTyeEnum.NONE || !unref(getSplit);
-  });
-
-  watch(
-    [() => unref(currentRoute).path, () => unref(splitType)],
-    async ([path]: [string, MenuSplitTyeEnum]) => {
-      if (unref(splitNotLeft) || unref(getIsMobile)) return;
-
-      const { meta } = unref(currentRoute);
-      const currentActiveMenu = meta.currentActiveMenu as string;
-      let parentPath = await getCurrentParentPath(path);
-      if (!parentPath) {
-        parentPath = await getCurrentParentPath(currentActiveMenu);
-      }
-      parentPath && throttleHandleSplitLeftMenu(parentPath);
-    },
-    {
-      immediate: true,
-    }
-  );
-
-  // Menu changes
-  watch(
-    [() => permissionStore.getLastBuildMenuTime, () => permissionStore.getBackMenuList],
-    () => {
-      genMenus();
-    },
-    {
-      immediate: true,
-    }
-  );
-
-  // split Menu changes
-  watch(
-    () => getSplit.value,
-    () => {
-      if (unref(splitNotLeft)) return;
-      genMenus();
-    }
-  );
-
-  // Handle left menu split
-  async function handleSplitLeftMenu(parentPath: string) {
-    if (unref(getSplitLeft) || unref(getIsMobile)) return;
-
-    // spilt mode left
-    const children = await getChildrenMenus(parentPath);
-
-    if (!children || !children.length) {
-      setMenuSetting({ hidden: true });
-      menusRef.value = [];
-      return;
-    }
-
-    setMenuSetting({ hidden: false });
-    menusRef.value = children;
-  }
-
-  // get menus
-  async function genMenus() {
-    // normal mode
-    if (unref(normalType) || unref(getIsMobile)) {
-      menusRef.value = await getMenus();
-      return;
-    }
-
-    // split-top
-    if (unref(getSpiltTop)) {
-      const shallowMenus = await getShallowMenus();
-
-      menusRef.value = shallowMenus;
-      return;
-    }
-  }
-
-  return { menusRef };
-}
diff --git a/src/layouts/default/setting/SettingDrawer.tsx b/src/layouts/default/setting/SettingDrawer.tsx
deleted file mode 100644
index 17e07b1..0000000
--- a/src/layouts/default/setting/SettingDrawer.tsx
+++ /dev/null
@@ -1,352 +0,0 @@
-import { defineComponent, computed, unref } from 'vue';
-import { BasicDrawer } from '/@/components/Drawer/index';
-import { Divider } from 'ant-design-vue';
-import { TypePicker, ThemeColorPicker, SettingFooter, SwitchItem, SelectItem, InputNumberItem } from './components';
-
-import { AppDarkModeToggle } from '/@/components/Application';
-
-import { MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum';
-
-import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
-import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
-import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
-import { useI18n } from '/@/hooks/web/useI18n';
-
-import { baseHandler } from './handler';
-
-import {
-  HandlerEnum,
-  contentModeOptions,
-  topMenuAlignOptions,
-  getMenuTriggerOptions,
-  routerTransitionOptions,
-  menuTypeList,
-  mixSidebarTriggerOptions,
-  tabsThemeOptions,
-} from './enum';
-
-import { HEADER_PRESET_BG_COLOR_LIST, SIDE_BAR_BG_COLOR_LIST, APP_PRESET_COLOR_LIST } from '/@/settings/designSetting';
-
-const { t } = useI18n();
-
-export default defineComponent({
-  name: 'SettingDrawer',
-  setup(_, { attrs }) {
-    const {
-      getContentMode,
-      getShowFooter,
-      getShowBreadCrumb,
-      getShowBreadCrumbIcon,
-      getShowLogo,
-      getFullContent,
-      getColorWeak,
-      getGrayMode,
-      getLockTime,
-      getShowDarkModeToggle,
-      getThemeColor,
-    } = useRootSetting();
-
-    const { getOpenPageLoading, getBasicTransition, getEnableTransition, getOpenNProgress } = useTransitionSetting();
-
-    const {
-      getIsHorizontal,
-      getShowMenu,
-      getMenuType,
-      getTrigger,
-      getCollapsedShowTitle,
-      getMenuFixed,
-      getCollapsed,
-      getCanDrag,
-      getTopMenuAlign,
-      getAccordion,
-      getMenuWidth,
-      getMenuBgColor,
-      getIsTopMenu,
-      getSplit,
-      getIsMixSidebar,
-      getCloseMixSidebarOnChange,
-      getMixSideTrigger,
-      getMixSideFixed,
-    } = useMenuSetting();
-
-    const { getShowHeader, getFixed: getHeaderFixed, getHeaderBgColor, getShowSearch } = useHeaderSetting();
-
-    const { getShowMultipleTab, getShowQuick, getShowRedo, getShowFold, getTabsTheme } = useMultipleTabSetting();
-
-    const getShowMenuRef = computed(() => {
-      return unref(getShowMenu) && !unref(getIsHorizontal);
-    });
-
-    function renderSidebar() {
-      return (
-        <>
-          <TypePicker
-            menuTypeList={menuTypeList}
-            handler={(item: typeof menuTypeList[0]) => {
-              baseHandler(HandlerEnum.CHANGE_LAYOUT, {
-                mode: item.mode,
-                type: item.type,
-                split: unref(getIsHorizontal) ? false : undefined,
-              });
-            }}
-            def={unref(getMenuType)}
-          />
-        </>
-      );
-    }
-
-    function renderHeaderTheme() {
-      return <ThemeColorPicker colorList={HEADER_PRESET_BG_COLOR_LIST} def={unref(getHeaderBgColor)} event={HandlerEnum.HEADER_THEME} />;
-    }
-
-    function renderSiderTheme() {
-      return <ThemeColorPicker colorList={SIDE_BAR_BG_COLOR_LIST} def={unref(getMenuBgColor)} event={HandlerEnum.MENU_THEME} />;
-    }
-
-    function renderMainTheme() {
-      return <ThemeColorPicker colorList={APP_PRESET_COLOR_LIST} def={unref(getThemeColor)} event={HandlerEnum.CHANGE_THEME_COLOR} />;
-    }
-
-    /**
-     * @description:
-     */
-    function renderFeatures() {
-      let triggerDef = unref(getTrigger);
-
-      const triggerOptions = getMenuTriggerOptions(unref(getSplit));
-      const some = triggerOptions.some((item) => item.value === triggerDef);
-      if (!some) {
-        triggerDef = TriggerEnum.FOOTER;
-      }
-
-      return (
-        <>
-          <SwitchItem
-            title={t('layout.setting.splitMenu')}
-            event={HandlerEnum.MENU_SPLIT}
-            def={unref(getSplit)}
-            disabled={!unref(getShowMenuRef) || unref(getMenuType) !== MenuTypeEnum.MIX}
-          />
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.mixSidebarFixed')}*/}
-          {/*  event={HandlerEnum.MENU_FIXED_MIX_SIDEBAR}*/}
-          {/*  def={unref(getMixSideFixed)}*/}
-          {/*  disabled={!unref(getIsMixSidebar)}*/}
-          {/*/>*/}
-
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.closeMixSidebarOnChange')}*/}
-          {/*  event={HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE}*/}
-          {/*  def={unref(getCloseMixSidebarOnChange)}*/}
-          {/*  disabled={!unref(getIsMixSidebar)}*/}
-          {/*/>*/}
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.menuCollapse')}*/}
-          {/*  event={HandlerEnum.MENU_COLLAPSED}*/}
-          {/*  def={unref(getCollapsed)}*/}
-          {/*  disabled={!unref(getShowMenuRef)}*/}
-          {/*/>*/}
-
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.menuSearch')}*/}
-          {/*  event={HandlerEnum.HEADER_SEARCH}*/}
-          {/*  def={unref(getShowSearch)}*/}
-          {/*  disabled={!unref(getShowHeader)}*/}
-          {/*/>*/}
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.menuAccordion')}*/}
-          {/*  event={HandlerEnum.MENU_ACCORDION}*/}
-          {/*  def={unref(getAccordion)}*/}
-          {/*  disabled={!unref(getShowMenuRef)}*/}
-          {/*/>*/}
-
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.fixedHeader')}*/}
-          {/*  event={HandlerEnum.HEADER_FIXED}*/}
-          {/*  def={unref(getHeaderFixed)}*/}
-          {/*  disabled={!unref(getShowHeader)}*/}
-          {/*/>*/}
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.fixedSideBar')}*/}
-          {/*  event={HandlerEnum.MENU_FIXED}*/}
-          {/*  def={unref(getMenuFixed)}*/}
-          {/*  disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}*/}
-          {/*/>*/}
-          {/*<SelectItem*/}
-          {/*  title={t('layout.setting.mixSidebarTrigger')}*/}
-          {/*  event={HandlerEnum.MENU_TRIGGER_MIX_SIDEBAR}*/}
-          {/*  def={unref(getMixSideTrigger)}*/}
-          {/*  options={mixSidebarTriggerOptions}*/}
-          {/*  disabled={!unref(getIsMixSidebar)}*/}
-          {/*/>*/}
-          <SelectItem title={t('layout.setting.tabsTheme')} event={HandlerEnum.TABS_THEME} def={unref(getTabsTheme)} options={tabsThemeOptions} />
-          <SelectItem
-            title={t('layout.setting.topMenuLayout')}
-            event={HandlerEnum.MENU_TOP_ALIGN}
-            def={unref(getTopMenuAlign)}
-            options={topMenuAlignOptions}
-            disabled={!unref(getShowHeader) || unref(getSplit) || (!unref(getIsTopMenu) && !unref(getSplit)) || unref(getIsMixSidebar)}
-          />
-          <SelectItem
-            title={t('layout.setting.menuCollapseButton')}
-            event={HandlerEnum.MENU_TRIGGER}
-            def={triggerDef}
-            options={triggerOptions}
-            disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}
-          />
-          <SelectItem
-            title={t('layout.setting.contentMode')}
-            event={HandlerEnum.CONTENT_MODE}
-            def={unref(getContentMode)}
-            options={contentModeOptions}
-          />
-          <InputNumberItem
-            title={t('layout.setting.autoScreenLock')}
-            min={0}
-            event={HandlerEnum.LOCK_TIME}
-            defaultValue={unref(getLockTime)}
-            formatter={(value: string) => {
-              return parseInt(value) === 0 ? `0(${t('layout.setting.notAutoScreenLock')})` : `${value}${t('layout.setting.minute')}`;
-            }}
-          />
-          <InputNumberItem
-            title={t('layout.setting.expandedMenuWidth')}
-            max={600}
-            min={100}
-            step={10}
-            event={HandlerEnum.MENU_WIDTH}
-            disabled={!unref(getShowMenuRef)}
-            defaultValue={unref(getMenuWidth)}
-            formatter={(value: string) => `${parseInt(value)}px`}
-          />
-        </>
-      );
-    }
-
-    function renderContent() {
-      return (
-        <>
-          <SwitchItem
-            title={t('layout.setting.menuDrag')}
-            event={HandlerEnum.MENU_HAS_DRAG}
-            def={unref(getCanDrag)}
-            disabled={!unref(getShowMenuRef)}
-          />
-          <SwitchItem
-            title={t('layout.setting.collapseMenuDisplayName')}
-            event={HandlerEnum.MENU_COLLAPSED_SHOW_TITLE}
-            def={unref(getCollapsedShowTitle)}
-            disabled={!unref(getShowMenuRef) || !unref(getCollapsed) || unref(getIsMixSidebar)}
-          />
-          <SwitchItem title={t('layout.setting.tabs')} event={HandlerEnum.TABS_SHOW} def={unref(getShowMultipleTab)} />
-          <SwitchItem
-            title={t('layout.setting.breadcrumb')}
-            event={HandlerEnum.SHOW_BREADCRUMB}
-            def={unref(getShowBreadCrumb)}
-            disabled={!unref(getShowHeader)}
-          />
-
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.breadcrumbIcon')}*/}
-          {/*  event={HandlerEnum.SHOW_BREADCRUMB_ICON}*/}
-          {/*  def={unref(getShowBreadCrumbIcon)}*/}
-          {/*  disabled={!unref(getShowHeader)}*/}
-          {/*/>*/}
-
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.tabsRedoBtn')}*/}
-          {/*  event={HandlerEnum.TABS_SHOW_REDO}*/}
-          {/*  def={unref(getShowRedo)}*/}
-          {/*  disabled={!unref(getShowMultipleTab)}*/}
-          {/*/>*/}
-
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.tabsQuickBtn')}*/}
-          {/*  event={HandlerEnum.TABS_SHOW_QUICK}*/}
-          {/*  def={unref(getShowQuick)}*/}
-          {/*  disabled={!unref(getShowMultipleTab)}*/}
-          {/*/>*/}
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.tabsFoldBtn')}*/}
-          {/*  event={HandlerEnum.TABS_SHOW_FOLD}*/}
-          {/*  def={unref(getShowFold)}*/}
-          {/*  disabled={!unref(getShowMultipleTab)}*/}
-          {/*/>*/}
-
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.sidebar')}*/}
-          {/*  event={HandlerEnum.MENU_SHOW_SIDEBAR}*/}
-          {/*  def={unref(getShowMenu)}*/}
-          {/*  disabled={unref(getIsHorizontal)}*/}
-          {/*/>*/}
-
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.header')}*/}
-          {/*  event={HandlerEnum.HEADER_SHOW}*/}
-          {/*  def={unref(getShowHeader)}*/}
-          {/*/>*/}
-          {/*<SwitchItem*/}
-          {/*  title="Logo"*/}
-          {/*  event={HandlerEnum.SHOW_LOGO}*/}
-          {/*  def={unref(getShowLogo)}*/}
-          {/*  disabled={unref(getIsMixSidebar)}*/}
-          {/*/>*/}
-          <SwitchItem title={t('layout.setting.footer')} event={HandlerEnum.SHOW_FOOTER} def={unref(getShowFooter)} />
-          {/*<SwitchItem*/}
-          {/*  title={t('layout.setting.fullContent')}*/}
-          {/*  event={HandlerEnum.FULL_CONTENT}*/}
-          {/*  def={unref(getFullContent)}*/}
-          {/*/>*/}
-
-          <SwitchItem title={t('layout.setting.grayMode')} event={HandlerEnum.GRAY_MODE} def={unref(getGrayMode)} />
-
-          <SwitchItem title={t('layout.setting.colorWeak')} event={HandlerEnum.COLOR_WEAK} def={unref(getColorWeak)} />
-        </>
-      );
-    }
-
-    function renderTransition() {
-      return (
-        <>
-          <SwitchItem title={t('layout.setting.progress')} event={HandlerEnum.OPEN_PROGRESS} def={unref(getOpenNProgress)} />
-          <SwitchItem title={t('layout.setting.switchLoading')} event={HandlerEnum.OPEN_PAGE_LOADING} def={unref(getOpenPageLoading)} />
-
-          <SwitchItem title={t('layout.setting.switchAnimation')} event={HandlerEnum.OPEN_ROUTE_TRANSITION} def={unref(getEnableTransition)} />
-
-          <SelectItem
-            title={t('layout.setting.animationType')}
-            event={HandlerEnum.ROUTER_TRANSITION}
-            def={unref(getBasicTransition)}
-            options={routerTransitionOptions}
-            disabled={!unref(getEnableTransition)}
-          />
-        </>
-      );
-    }
-
-    return () => (
-      <BasicDrawer {...attrs} title={t('layout.setting.drawerTitle')} width={330} class="setting-drawer">
-        {unref(getShowDarkModeToggle) && <Divider>{() => t('layout.setting.darkMode')}</Divider>}
-        {unref(getShowDarkModeToggle) && <AppDarkModeToggle class="mx-auto" />}
-        <Divider>{() => t('layout.setting.navMode')}</Divider>
-        {renderSidebar()}
-        <Divider>{() => t('layout.setting.sysTheme')}</Divider>
-        {renderMainTheme()}
-        <Divider>{() => t('layout.setting.headerTheme')}</Divider>
-        {renderHeaderTheme()}
-        <Divider>{() => t('layout.setting.sidebarTheme')}</Divider>
-        {renderSiderTheme()}
-        <Divider>{() => t('layout.setting.interfaceFunction')}</Divider>
-        {renderFeatures()}
-        {/*<Divider>{() => t('layout.setting.interfaceDisplay')}</Divider>*/}
-        {renderContent()}
-        {/*<Divider>{() => t('layout.setting.animation')}</Divider>*/}
-        {/*{renderTransition()}*/}
-        <Divider />
-        <SettingFooter />
-      </BasicDrawer>
-    );
-  },
-});
diff --git a/src/layouts/default/setting/components/InputNumberItem.vue b/src/layouts/default/setting/components/InputNumberItem.vue
deleted file mode 100644
index 7a664ae..0000000
--- a/src/layouts/default/setting/components/InputNumberItem.vue
+++ /dev/null
@@ -1,51 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <span> {{ title }}</span>
-    <InputNumber v-bind="$attrs" size="small" :class="`${prefixCls}-input-number`" @change="handleChange" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType } from 'vue';
-
-  import { InputNumber } from 'ant-design-vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { baseHandler } from '../handler';
-  import { HandlerEnum } from '../enum';
-
-  export default defineComponent({
-    name: 'InputNumberItem',
-    components: { InputNumber },
-    props: {
-      event: {
-        type: Number as PropType<HandlerEnum>,
-      },
-      title: {
-        type: String,
-      },
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('setting-input-number-item');
-
-      function handleChange(e) {
-        props.event && baseHandler(props.event, e);
-      }
-      return {
-        prefixCls,
-        handleChange,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-setting-input-number-item';
-
-  .@{prefix-cls} {
-    display: flex;
-    justify-content: space-between;
-    margin: 16px 0;
-
-    &-input-number {
-      width: 126px;
-    }
-  }
-</style>
diff --git a/src/layouts/default/setting/components/SelectItem.vue b/src/layouts/default/setting/components/SelectItem.vue
deleted file mode 100644
index 1656de2..0000000
--- a/src/layouts/default/setting/components/SelectItem.vue
+++ /dev/null
@@ -1,68 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <span> {{ title }}</span>
-    <Select v-bind="getBindValue" :class="`${prefixCls}-select`" @change="handleChange" :disabled="disabled" size="small" :options="options" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, computed } from 'vue';
-
-  import { Select } from 'ant-design-vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { baseHandler } from '../handler';
-  import { HandlerEnum } from '../enum';
-
-  export default defineComponent({
-    name: 'SelectItem',
-    components: { Select },
-    props: {
-      event: {
-        type: Number as PropType<HandlerEnum>,
-      },
-      disabled: {
-        type: Boolean,
-      },
-      title: {
-        type: String,
-      },
-      def: {
-        type: [String, Number] as PropType<string | number>,
-      },
-      initValue: {
-        type: [String, Number] as PropType<string | number>,
-      },
-      options: {
-        type: Array as PropType<LabelValueOptions>,
-        default: () => [],
-      },
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('setting-select-item');
-      const getBindValue = computed(() => {
-        return props.def ? { value: props.def, defaultValue: props.initValue || props.def } : {};
-      });
-
-      function handleChange(e: ChangeEvent) {
-        props.event && baseHandler(props.event, e);
-      }
-      return {
-        prefixCls,
-        handleChange,
-        getBindValue,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-setting-select-item';
-
-  .@{prefix-cls} {
-    display: flex;
-    justify-content: space-between;
-    margin: 16px 0;
-
-    &-select {
-      width: 126px;
-    }
-  }
-</style>
diff --git a/src/layouts/default/setting/components/SettingFooter.vue b/src/layouts/default/setting/components/SettingFooter.vue
deleted file mode 100644
index a4f4763..0000000
--- a/src/layouts/default/setting/components/SettingFooter.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <a-button type="primary" block @click="handleCopy">
-      <CopyOutlined class="mr-2" />
-      {{ t('layout.setting.copyBtn') }}
-    </a-button>
-
-    <a-button color="warning" block @click="handleResetSetting" class="my-3">
-      <RedoOutlined class="mr-2" />
-      {{ t('common.resetText') }}
-    </a-button>
-
-    <a-button color="error" block @click="handleClearAndRedo">
-      <RedoOutlined class="mr-2" />
-      {{ t('layout.setting.clearBtn') }}
-    </a-button>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, unref } from 'vue';
-
-  import { CopyOutlined, RedoOutlined } from '@ant-design/icons-vue';
-
-  import { useAppStore } from '/@/store/modules/app';
-  import { usePermissionStore } from '/@/store/modules/permission';
-  import { useMultipleTabStore } from '/@/store/modules/multipleTab';
-  import { useUserStore } from '/@/store/modules/user';
-
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard';
-
-  import { updateColorWeak } from '/@/logics/theme/updateColorWeak';
-  import { updateGrayMode } from '/@/logics/theme/updateGrayMode';
-  import defaultSetting from '/@/settings/projectSetting';
-
-  export default defineComponent({
-    name: 'SettingFooter',
-    components: { CopyOutlined, RedoOutlined },
-    setup() {
-      const permissionStore = usePermissionStore();
-      const { prefixCls } = useDesign('setting-footer');
-      const { t } = useI18n();
-      const { createSuccessModal, createMessage } = useMessage();
-      const tabStore = useMultipleTabStore();
-      const userStore = useUserStore();
-      const appStore = useAppStore();
-
-      function handleCopy() {
-        const { isSuccessRef } = useCopyToClipboard(JSON.stringify(unref(appStore.getProjectConfig), null, 2));
-        unref(isSuccessRef) &&
-          createSuccessModal({
-            title: t('layout.setting.operatingTitle'),
-            content: t('layout.setting.operatingContent'),
-          });
-      }
-      function handleResetSetting() {
-        try {
-          appStore.setProjectConfig(defaultSetting);
-          const { colorWeak, grayMode } = defaultSetting;
-          // updateTheme(themeColor);
-          updateColorWeak(colorWeak);
-          updateGrayMode(grayMode);
-          createMessage.success(t('layout.setting.resetSuccess'));
-        } catch (error) {
-          createMessage.error(error);
-        }
-      }
-
-      function handleClearAndRedo() {
-        localStorage.clear();
-        appStore.resetAllState();
-        permissionStore.resetState();
-        tabStore.resetState();
-        userStore.resetState();
-        location.reload();
-      }
-      return {
-        prefixCls,
-        t,
-        handleCopy,
-        handleResetSetting,
-        handleClearAndRedo,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-setting-footer';
-
-  .@{prefix-cls} {
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-  }
-</style>
diff --git a/src/layouts/default/setting/components/SwitchItem.vue b/src/layouts/default/setting/components/SwitchItem.vue
deleted file mode 100644
index ff27477..0000000
--- a/src/layouts/default/setting/components/SwitchItem.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <span> {{ title }}</span>
-    <Switch
-      v-bind="getBindValue"
-      @change="handleChange"
-      :disabled="disabled"
-      :checkedChildren="t('layout.setting.on')"
-      :unCheckedChildren="t('layout.setting.off')"
-    />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, computed } from 'vue';
-
-  import { Switch } from 'ant-design-vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { baseHandler } from '../handler';
-  import { HandlerEnum } from '../enum';
-
-  export default defineComponent({
-    name: 'SwitchItem',
-    components: { Switch },
-    props: {
-      event: {
-        type: Number as PropType<HandlerEnum>,
-      },
-      disabled: {
-        type: Boolean,
-      },
-      title: {
-        type: String,
-      },
-      def: {
-        type: Boolean,
-      },
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('setting-switch-item');
-      const { t } = useI18n();
-
-      const getBindValue = computed(() => {
-        return props.def ? { checked: props.def } : {};
-      });
-      function handleChange(e: ChangeEvent) {
-        props.event && baseHandler(props.event, e);
-      }
-      return {
-        prefixCls,
-        t,
-        handleChange,
-        getBindValue,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-setting-switch-item';
-
-  .@{prefix-cls} {
-    display: flex;
-    justify-content: space-between;
-    margin: 16px 0;
-  }
-</style>
diff --git a/src/layouts/default/setting/components/ThemeColorPicker.vue b/src/layouts/default/setting/components/ThemeColorPicker.vue
deleted file mode 100644
index d0f28ba..0000000
--- a/src/layouts/default/setting/components/ThemeColorPicker.vue
+++ /dev/null
@@ -1,88 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <template v-for="color in colorList || []" :key="color">
-      <span
-        @click="handleClick(color)"
-        :class="[
-          `${prefixCls}__item`,
-          {
-            [`${prefixCls}__item--active`]: def === color,
-          },
-        ]"
-        :style="{ background: color }"
-      >
-        <CheckOutlined />
-      </span>
-    </template>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType } from 'vue';
-  import { CheckOutlined } from '@ant-design/icons-vue';
-
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  import { baseHandler } from '../handler';
-  import { HandlerEnum } from '../enum';
-
-  export default defineComponent({
-    name: 'ThemeColorPicker',
-    components: { CheckOutlined },
-    props: {
-      colorList: {
-        type: Array as PropType<string[]>,
-        defualt: [],
-      },
-      event: {
-        type: Number as PropType<HandlerEnum>,
-      },
-      def: {
-        type: String,
-      },
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('setting-theme-picker');
-
-      function handleClick(color: string) {
-        props.event && baseHandler(props.event, color);
-      }
-      return {
-        prefixCls,
-        handleClick,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-setting-theme-picker';
-
-  .@{prefix-cls} {
-    display: flex;
-    flex-wrap: wrap;
-    margin: 16px 0;
-    justify-content: space-around;
-
-    &__item {
-      width: 20px;
-      height: 20px;
-      cursor: pointer;
-      border: 1px solid #ddd;
-      border-radius: 2px;
-
-      svg {
-        display: none;
-      }
-
-      &--active {
-        border: 1px solid lighten(@primary-color, 10%);
-
-        svg {
-          display: inline-block;
-          margin: 0 0 3px 3px;
-          font-size: 12px;
-          fill: @white !important;
-        }
-      }
-    }
-  }
-</style>
diff --git a/src/layouts/default/setting/components/TypePicker.vue b/src/layouts/default/setting/components/TypePicker.vue
deleted file mode 100644
index ab46aa8..0000000
--- a/src/layouts/default/setting/components/TypePicker.vue
+++ /dev/null
@@ -1,178 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <template v-for="item in menuTypeList || []" :key="item.title">
-      <Tooltip :title="item.title" placement="bottom">
-        <div
-          @click="handler(item)"
-          :class="[
-            `${prefixCls}__item`,
-            `${prefixCls}__item--${item.type}`,
-            {
-              [`${prefixCls}__item--active`]: def === item.type,
-            },
-          ]"
-        >
-          <div class="mix-sidebar"></div>
-        </div>
-      </Tooltip>
-    </template>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType } from 'vue';
-
-  import { Tooltip } from 'ant-design-vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  import { menuTypeList } from '../enum';
-  export default defineComponent({
-    name: 'MenuTypePicker',
-    components: { Tooltip },
-    props: {
-      menuTypeList: {
-        type: Array as PropType<typeof menuTypeList>,
-        defualt: () => [],
-      },
-      handler: {
-        type: Function as PropType<Fn>,
-        default: () => ({}),
-      },
-      def: {
-        type: String,
-        default: '',
-      },
-    },
-    setup() {
-      const { prefixCls } = useDesign('setting-menu-type-picker');
-
-      return {
-        prefixCls,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-setting-menu-type-picker';
-
-  .@{prefix-cls} {
-    display: flex;
-
-    &__item {
-      position: relative;
-      width: 56px;
-      height: 48px;
-      margin-right: 16px;
-      overflow: hidden;
-      cursor: pointer;
-      background-color: #f0f2f5;
-      border-radius: 4px;
-      box-shadow: 0 1px 2.5px 0 rgba(0, 0, 0, 0.18);
-
-      &::before,
-      &::after {
-        position: absolute;
-        content: '';
-      }
-
-      &--sidebar,
-      &--light {
-        &::before {
-          top: 0;
-          left: 0;
-          z-index: 1;
-          width: 33%;
-          height: 100%;
-          background-color: #273352;
-          border-radius: 4px 0 0 4px;
-        }
-
-        &::after {
-          top: 0;
-          left: 0;
-          width: 100%;
-          height: 25%;
-          background-color: #fff;
-        }
-      }
-
-      &--mix {
-        &::before {
-          top: 0;
-          left: 0;
-          width: 33%;
-          height: 100%;
-          background-color: #fff;
-          border-radius: 4px 0 0 4px;
-        }
-
-        &::after {
-          top: 0;
-          left: 0;
-          z-index: 1;
-          width: 100%;
-          height: 25%;
-          background-color: #273352;
-        }
-      }
-
-      &--top-menu {
-        &::after {
-          top: 0;
-          left: 0;
-          width: 100%;
-          height: 25%;
-          background-color: #273352;
-        }
-      }
-
-      &--dark {
-        background-color: #273352;
-      }
-
-      &--mix-sidebar {
-        &::before {
-          top: 0;
-          left: 0;
-          z-index: 1;
-          width: 25%;
-          height: 100%;
-          background-color: #273352;
-          border-radius: 4px 0 0 4px;
-        }
-
-        &::after {
-          top: 0;
-          left: 0;
-          width: 100%;
-          height: 25%;
-          background-color: #fff;
-        }
-
-        .mix-sidebar {
-          position: absolute;
-          left: 25%;
-          width: 15%;
-          height: 100%;
-          background-color: #fff;
-        }
-      }
-
-      &:hover,
-      &--active {
-        padding: 12px;
-        border: 2px solid @primary-color;
-
-        &::before,
-        &::after {
-          border-radius: 0;
-        }
-      }
-    }
-
-    img {
-      width: 100%;
-      height: 100%;
-      cursor: pointer;
-    }
-  }
-</style>
diff --git a/src/layouts/default/setting/components/index.ts b/src/layouts/default/setting/components/index.ts
deleted file mode 100644
index bd24888..0000000
--- a/src/layouts/default/setting/components/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-
-export const TypePicker = createAsyncComponent(() => import('./TypePicker.vue'));
-export const ThemeColorPicker = createAsyncComponent(() => import('./ThemeColorPicker.vue'));
-export const SettingFooter = createAsyncComponent(() => import('./SettingFooter.vue'));
-export const SwitchItem = createAsyncComponent(() => import('./SwitchItem.vue'));
-export const SelectItem = createAsyncComponent(() => import('./SelectItem.vue'));
-export const InputNumberItem = createAsyncComponent(() => import('./InputNumberItem.vue'));
diff --git a/src/layouts/default/setting/enum.ts b/src/layouts/default/setting/enum.ts
deleted file mode 100644
index 7fb3594..0000000
--- a/src/layouts/default/setting/enum.ts
+++ /dev/null
@@ -1,167 +0,0 @@
-import { TabsThemeEnum, ContentEnum, RouterTransitionEnum } from '/@/enums/appEnum';
-import { MenuModeEnum, MenuTypeEnum, TopMenuAlignEnum, TriggerEnum, MixSidebarTriggerEnum } from '/@/enums/menuEnum';
-
-import { useI18n } from '/@/hooks/web/useI18n';
-
-const { t } = useI18n();
-
-export enum HandlerEnum {
-  CHANGE_LAYOUT,
-  CHANGE_THEME_COLOR,
-  CHANGE_THEME,
-  // menu
-  MENU_HAS_DRAG,
-  MENU_ACCORDION,
-  MENU_TRIGGER,
-  MENU_TOP_ALIGN,
-  MENU_COLLAPSED,
-  MENU_COLLAPSED_SHOW_TITLE,
-  MENU_WIDTH,
-  MENU_SHOW_SIDEBAR,
-  MENU_THEME,
-  MENU_SPLIT,
-  MENU_FIXED,
-  MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE,
-  MENU_TRIGGER_MIX_SIDEBAR,
-  MENU_FIXED_MIX_SIDEBAR,
-
-  // header
-  HEADER_SHOW,
-  HEADER_THEME,
-  HEADER_FIXED,
-
-  HEADER_SEARCH,
-
-  TABS_SHOW_QUICK,
-  TABS_SHOW_REDO,
-  TABS_SHOW,
-  TABS_SHOW_FOLD,
-  TABS_THEME,
-
-  LOCK_TIME,
-  FULL_CONTENT,
-  CONTENT_MODE,
-  SHOW_BREADCRUMB,
-  SHOW_BREADCRUMB_ICON,
-  GRAY_MODE,
-  COLOR_WEAK,
-  SHOW_LOGO,
-  SHOW_FOOTER,
-
-  ROUTER_TRANSITION,
-  OPEN_PROGRESS,
-  OPEN_PAGE_LOADING,
-  OPEN_ROUTE_TRANSITION,
-}
-
-// 鏍囩椤垫牱寮�
-export const tabsThemeOptions = [
-  {
-    value: TabsThemeEnum.SMOOTH,
-    label: t('layout.setting.tabsThemeSmooth'),
-  },
-  {
-    value: TabsThemeEnum.CARD,
-    label: t('layout.setting.tabsThemeCard'),
-  },
-  {
-    value: TabsThemeEnum.SIMPLE,
-    label: t('layout.setting.tabsThemeSimple'),
-  },
-];
-
-export const contentModeOptions = [
-  {
-    value: ContentEnum.FULL,
-    label: t('layout.setting.contentModeFull'),
-  },
-  {
-    value: ContentEnum.FIXED,
-    label: t('layout.setting.contentModeFixed'),
-  },
-];
-
-export const topMenuAlignOptions = [
-  {
-    value: TopMenuAlignEnum.CENTER,
-    label: t('layout.setting.topMenuAlignRight'),
-  },
-  {
-    value: TopMenuAlignEnum.START,
-    label: t('layout.setting.topMenuAlignLeft'),
-  },
-  {
-    value: TopMenuAlignEnum.END,
-    label: t('layout.setting.topMenuAlignCenter'),
-  },
-];
-
-export const getMenuTriggerOptions = (hideTop: boolean) => {
-  return [
-    {
-      value: TriggerEnum.NONE,
-      label: t('layout.setting.menuTriggerNone'),
-    },
-    {
-      value: TriggerEnum.FOOTER,
-      label: t('layout.setting.menuTriggerBottom'),
-    },
-    ...(hideTop
-      ? []
-      : [
-          {
-            value: TriggerEnum.HEADER,
-            label: t('layout.setting.menuTriggerTop'),
-          },
-        ]),
-  ];
-};
-
-export const routerTransitionOptions = [
-  RouterTransitionEnum.ZOOM_FADE,
-  RouterTransitionEnum.FADE,
-  RouterTransitionEnum.ZOOM_OUT,
-  RouterTransitionEnum.FADE_SIDE,
-  RouterTransitionEnum.FADE_BOTTOM,
-  RouterTransitionEnum.FADE_SCALE,
-].map((item) => {
-  return {
-    label: item,
-    value: item,
-  };
-});
-
-export const menuTypeList = [
-  {
-    title: t('layout.setting.menuTypeSidebar'),
-    mode: MenuModeEnum.INLINE,
-    type: MenuTypeEnum.SIDEBAR,
-  },
-  {
-    title: t('layout.setting.menuTypeMix'),
-    mode: MenuModeEnum.INLINE,
-    type: MenuTypeEnum.MIX,
-  },
-
-  {
-    title: t('layout.setting.menuTypeTopMenu'),
-    mode: MenuModeEnum.HORIZONTAL,
-    type: MenuTypeEnum.TOP_MENU,
-  },
-  {
-    title: t('layout.setting.menuTypeMixSidebar'),
-    mode: MenuModeEnum.INLINE,
-    type: MenuTypeEnum.MIX_SIDEBAR,
-  },
-];
-
-export const mixSidebarTriggerOptions = [
-  {
-    value: MixSidebarTriggerEnum.HOVER,
-    label: t('layout.setting.triggerHover'),
-  },
-  {
-    value: MixSidebarTriggerEnum.CLICK,
-    label: t('layout.setting.triggerClick'),
-  },
-];
diff --git a/src/layouts/default/setting/handler.ts b/src/layouts/default/setting/handler.ts
deleted file mode 100644
index 3baf15a..0000000
--- a/src/layouts/default/setting/handler.ts
+++ /dev/null
@@ -1,177 +0,0 @@
-import { HandlerEnum } from './enum';
-import { updateHeaderBgColor, updateSidebarBgColor } from '/@/logics/theme/updateBackground';
-import { updateColorWeak } from '/@/logics/theme/updateColorWeak';
-import { updateGrayMode } from '/@/logics/theme/updateGrayMode';
-
-import { useAppStore } from '/@/store/modules/app';
-import { ProjectConfig } from '/#/config';
-import { changeTheme } from '/@/logics/theme';
-import { updateDarkTheme } from '/@/logics/theme/dark';
-import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-
-export function baseHandler(event: HandlerEnum, value: any) {
-  const appStore = useAppStore();
-  const config = handler(event, value);
-  appStore.setProjectConfig(config);
-  if (event === HandlerEnum.CHANGE_THEME) {
-    updateHeaderBgColor();
-    updateSidebarBgColor();
-  }
-}
-
-export function handler(event: HandlerEnum, value: any): DeepPartial<ProjectConfig> {
-  const appStore = useAppStore();
-
-  const { getThemeColor, getDarkMode } = useRootSetting();
-  switch (event) {
-    case HandlerEnum.CHANGE_LAYOUT:
-      const { mode, type, split } = value;
-      const splitOpt = split === undefined ? { split } : {};
-
-      return {
-        menuSetting: {
-          mode,
-          type,
-          collapsed: false,
-          show: true,
-          hidden: false,
-          ...splitOpt,
-        },
-      };
-
-    case HandlerEnum.CHANGE_THEME_COLOR:
-      if (getThemeColor.value === value) {
-        return {};
-      }
-      changeTheme(value);
-
-      return { themeColor: value };
-
-    case HandlerEnum.CHANGE_THEME:
-      if (getDarkMode.value === value) {
-        return {};
-      }
-      updateDarkTheme(value);
-
-      return {};
-
-    case HandlerEnum.MENU_HAS_DRAG:
-      return { menuSetting: { canDrag: value } };
-
-    case HandlerEnum.MENU_ACCORDION:
-      return { menuSetting: { accordion: value } };
-
-    case HandlerEnum.MENU_TRIGGER:
-      return { menuSetting: { trigger: value } };
-
-    case HandlerEnum.MENU_TOP_ALIGN:
-      return { menuSetting: { topMenuAlign: value } };
-
-    case HandlerEnum.MENU_COLLAPSED:
-      return { menuSetting: { collapsed: value } };
-
-    case HandlerEnum.MENU_WIDTH:
-      return { menuSetting: { menuWidth: value } };
-
-    case HandlerEnum.MENU_SHOW_SIDEBAR:
-      return { menuSetting: { show: value } };
-
-    case HandlerEnum.MENU_COLLAPSED_SHOW_TITLE:
-      return { menuSetting: { collapsedShowTitle: value } };
-
-    case HandlerEnum.MENU_THEME:
-      updateSidebarBgColor(value);
-      return { menuSetting: { bgColor: value } };
-
-    case HandlerEnum.MENU_SPLIT:
-      return { menuSetting: { split: value } };
-
-    case HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE:
-      return { menuSetting: { closeMixSidebarOnChange: value } };
-
-    case HandlerEnum.MENU_FIXED:
-      return { menuSetting: { fixed: value } };
-
-    case HandlerEnum.MENU_TRIGGER_MIX_SIDEBAR:
-      return { menuSetting: { mixSideTrigger: value } };
-
-    case HandlerEnum.MENU_FIXED_MIX_SIDEBAR:
-      return { menuSetting: { mixSideFixed: value } };
-
-    // ============transition==================
-    case HandlerEnum.OPEN_PAGE_LOADING:
-      appStore.setPageLoading(false);
-      return { transitionSetting: { openPageLoading: value } };
-
-    case HandlerEnum.ROUTER_TRANSITION:
-      return { transitionSetting: { basicTransition: value } };
-
-    case HandlerEnum.OPEN_ROUTE_TRANSITION:
-      return { transitionSetting: { enable: value } };
-
-    case HandlerEnum.OPEN_PROGRESS:
-      return { transitionSetting: { openNProgress: value } };
-    // ============root==================
-
-    case HandlerEnum.LOCK_TIME:
-      return { lockTime: value };
-
-    case HandlerEnum.FULL_CONTENT:
-      return { fullContent: value };
-
-    case HandlerEnum.CONTENT_MODE:
-      return { contentMode: value };
-
-    case HandlerEnum.SHOW_BREADCRUMB:
-      return { showBreadCrumb: value };
-
-    case HandlerEnum.SHOW_BREADCRUMB_ICON:
-      return { showBreadCrumbIcon: value };
-
-    case HandlerEnum.GRAY_MODE:
-      updateGrayMode(value);
-      return { grayMode: value };
-
-    case HandlerEnum.SHOW_FOOTER:
-      return { showFooter: value };
-
-    case HandlerEnum.COLOR_WEAK:
-      updateColorWeak(value);
-      return { colorWeak: value };
-
-    case HandlerEnum.SHOW_LOGO:
-      return { showLogo: value };
-
-    // ============tabs==================
-    case HandlerEnum.TABS_SHOW_QUICK:
-      return { multiTabsSetting: { showQuick: value } };
-
-    case HandlerEnum.TABS_SHOW:
-      return { multiTabsSetting: { show: value } };
-
-    case HandlerEnum.TABS_SHOW_REDO:
-      return { multiTabsSetting: { showRedo: value } };
-
-    case HandlerEnum.TABS_SHOW_FOLD:
-      return { multiTabsSetting: { showFold: value } };
-
-    case HandlerEnum.TABS_THEME:
-      return { multiTabsSetting: { theme: value } };
-
-    // ============header==================
-    case HandlerEnum.HEADER_THEME:
-      updateHeaderBgColor(value);
-      return { headerSetting: { bgColor: value } };
-
-    case HandlerEnum.HEADER_SEARCH:
-      return { headerSetting: { showSearch: value } };
-
-    case HandlerEnum.HEADER_FIXED:
-      return { headerSetting: { fixed: value } };
-
-    case HandlerEnum.HEADER_SHOW:
-      return { headerSetting: { show: value } };
-    default:
-      return {};
-  }
-}
diff --git a/src/layouts/default/setting/index.vue b/src/layouts/default/setting/index.vue
deleted file mode 100644
index 9c5bb87..0000000
--- a/src/layouts/default/setting/index.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-<template>
-  <div @click="openDrawer(true)">
-    <Icon icon="ion:settings-outline" />
-    <SettingDrawer @register="register" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import SettingDrawer from './SettingDrawer';
-  import Icon from '/@/components/Icon';
-
-  import { useDrawer } from '/@/components/Drawer';
-
-  export default defineComponent({
-    name: 'SettingButton',
-    components: { SettingDrawer, Icon },
-    setup() {
-      const [register, { openDrawer }] = useDrawer();
-
-      return {
-        register,
-        openDrawer,
-      };
-    },
-  });
-</script>
diff --git a/src/layouts/default/sider/DragBar.vue b/src/layouts/default/sider/DragBar.vue
deleted file mode 100644
index 3bc6fb9..0000000
--- a/src/layouts/default/sider/DragBar.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-  <div :class="getClass" :style="getDragBarStyle"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, computed, unref } from 'vue';
-
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-
-  export default defineComponent({
-    name: 'DargBar',
-    props: {
-      mobile: Boolean,
-    },
-    setup(props) {
-      const { getMiniWidthNumber, getCollapsed, getCanDrag } = useMenuSetting();
-
-      const { prefixCls } = useDesign('darg-bar');
-      const getDragBarStyle = computed(() => {
-        if (unref(getCollapsed)) {
-          return { left: `${unref(getMiniWidthNumber)}px` };
-        }
-        return {};
-      });
-
-      const getClass = computed(() => {
-        return [
-          prefixCls,
-          {
-            [`${prefixCls}--hide`]: !unref(getCanDrag) || props.mobile,
-          },
-        ];
-      });
-
-      return {
-        prefixCls,
-        getDragBarStyle,
-        getClass,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-darg-bar';
-
-  .@{prefix-cls} {
-    position: absolute;
-    top: 0;
-    right: -2px;
-    z-index: @side-drag-z-index;
-    width: 2px;
-    height: 100%;
-    cursor: col-resize;
-    border-top: none;
-    border-bottom: none;
-
-    &--hide {
-      display: none;
-    }
-
-    &:hover {
-      background-color: @primary-color;
-      box-shadow: 0 0 4px 0 rgba(28, 36, 56, 0.15);
-    }
-  }
-</style>
diff --git a/src/layouts/default/sider/LayoutSider.vue b/src/layouts/default/sider/LayoutSider.vue
deleted file mode 100644
index 0e4bc5a..0000000
--- a/src/layouts/default/sider/LayoutSider.vue
+++ /dev/null
@@ -1,172 +0,0 @@
-<template>
-  <div v-if="getMenuFixed && !getIsMobile" :style="getHiddenDomStyle" v-show="showClassSideBarRef"></div>
-  <Sider
-    v-show="showClassSideBarRef"
-    ref="sideRef"
-    breakpoint="lg"
-    collapsible
-    :class="getSiderClass"
-    :width="getMenuWidth"
-    :collapsed="getCollapsed"
-    :collapsedWidth="getCollapsedWidth"
-    :theme="getMenuTheme"
-    @breakpoint="onBreakpointChange"
-    :trigger="getTrigger"
-    v-bind="getTriggerAttr"
-  >
-    <template #trigger v-if="getShowTrigger">
-      <LayoutTrigger />
-    </template>
-    <LayoutMenu :theme="getMenuTheme" :menuMode="getMode" :splitType="getSplitType" />
-    <DragBar ref="dragBarRef" />
-  </Sider>
-</template>
-<script lang="ts">
-  import { computed, defineComponent, ref, unref, CSSProperties, h } from 'vue';
-
-  import { Layout } from 'ant-design-vue';
-  import LayoutMenu from '../menu/index.vue';
-  import LayoutTrigger from '/@/layouts/default/trigger/index.vue';
-
-  import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum';
-
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { useTrigger, useDragLine, useSiderEvent } from './useLayoutSider';
-  import { useAppInject } from '/@/hooks/web/useAppInject';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  import DragBar from './DragBar.vue';
-  export default defineComponent({
-    name: 'LayoutSideBar',
-    components: { Sider: Layout.Sider, LayoutMenu, DragBar, LayoutTrigger },
-    setup() {
-      const dragBarRef = ref<ElRef>(null);
-      const sideRef = ref<ElRef>(null);
-
-      const { getCollapsed, getMenuWidth, getSplit, getMenuTheme, getRealWidth, getMenuHidden, getMenuFixed, getIsMixMode, toggleCollapsed } =
-        useMenuSetting();
-
-      const { prefixCls } = useDesign('layout-sideBar');
-
-      const { getIsMobile } = useAppInject();
-
-      const { getTriggerAttr, getShowTrigger } = useTrigger(getIsMobile);
-
-      useDragLine(sideRef, dragBarRef);
-
-      const { getCollapsedWidth, onBreakpointChange } = useSiderEvent();
-
-      const getMode = computed(() => {
-        return unref(getSplit) ? MenuModeEnum.INLINE : null;
-      });
-
-      const getSplitType = computed(() => {
-        return unref(getSplit) ? MenuSplitTyeEnum.LEFT : MenuSplitTyeEnum.NONE;
-      });
-
-      const showClassSideBarRef = computed(() => {
-        return unref(getSplit) ? !unref(getMenuHidden) : true;
-      });
-
-      const getSiderClass = computed(() => {
-        return [
-          prefixCls,
-          {
-            [`${prefixCls}--fixed`]: unref(getMenuFixed),
-            [`${prefixCls}--mix`]: unref(getIsMixMode) && !unref(getIsMobile),
-          },
-        ];
-      });
-
-      const getHiddenDomStyle = computed((): CSSProperties => {
-        const width = `${unref(getRealWidth)}px`;
-        return {
-          width: width,
-          overflow: 'hidden',
-          flex: `0 0 ${width}`,
-          maxWidth: width,
-          minWidth: width,
-          transition: 'all 0.2s',
-        };
-      });
-
-      // 鍦ㄦ澶勪娇鐢ㄨ绠楅噺鍙兘浼氬鑷磗ider寮傚父
-      // andv 鏇存柊鍚庯紝濡傛灉trigger鎻掓Ы鍙敤锛屽垯姝ゅ浠g爜鍙簾寮�
-      const getTrigger = h(LayoutTrigger);
-
-      return {
-        prefixCls,
-        sideRef,
-        dragBarRef,
-        getIsMobile,
-        getHiddenDomStyle,
-        getSiderClass,
-        getTrigger,
-        getTriggerAttr,
-        getCollapsedWidth,
-        getMenuFixed,
-        showClassSideBarRef,
-        getMenuWidth,
-        getCollapsed,
-        getMenuTheme,
-        onBreakpointChange,
-        getMode,
-        getSplitType,
-        getShowTrigger,
-        toggleCollapsed,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-layout-sideBar';
-
-  .@{prefix-cls} {
-    z-index: @layout-sider-fixed-z-index;
-
-    &--fixed {
-      position: fixed;
-      top: 0;
-      left: 0;
-      height: 100%;
-    }
-
-    &--mix {
-      top: @header-height;
-      height: calc(100% - @header-height);
-    }
-
-    &.ant-layout-sider-dark {
-      background-color: @sider-dark-bg-color;
-
-      .ant-layout-sider-trigger {
-        color: darken(@white, 25%);
-        background-color: @trigger-dark-bg-color;
-
-        &:hover {
-          color: @white;
-          background-color: @trigger-dark-hover-bg-color;
-        }
-      }
-    }
-
-    &:not(.ant-layout-sider-dark) {
-      // box-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05);
-
-      .ant-layout-sider-trigger {
-        color: @text-color-base;
-        border-top: 1px solid @border-color-light;
-      }
-    }
-
-    .ant-layout-sider-zero-width-trigger {
-      top: 40%;
-      z-index: 10;
-    }
-
-    & .ant-layout-sider-trigger {
-      height: 36px;
-      line-height: 36px;
-    }
-  }
-</style>
diff --git a/src/layouts/default/sider/MixSider.vue b/src/layouts/default/sider/MixSider.vue
deleted file mode 100644
index d4eeb6a..0000000
--- a/src/layouts/default/sider/MixSider.vue
+++ /dev/null
@@ -1,560 +0,0 @@
-<template>
-  <div :class="`${prefixCls}-dom`" :style="getDomStyle"></div>
-  <div
-    v-click-outside="handleClickOutside"
-    :style="getWrapStyle"
-    :class="[
-      prefixCls,
-      getMenuTheme,
-      {
-        open: openMenu,
-        mini: getCollapsed,
-      },
-    ]"
-    v-bind="getMenuEvents"
-  >
-    <AppLogo :showTitle="false" :class="`${prefixCls}-logo`" />
-
-    <LayoutTrigger :class="`${prefixCls}-trigger`" />
-
-    <ScrollContainer>
-      <ul :class="`${prefixCls}-module`">
-        <li
-          :class="[
-            `${prefixCls}-module__item `,
-            {
-              [`${prefixCls}-module__item--active`]: item.path === activePath,
-            },
-          ]"
-          v-bind="getItemEvents(item)"
-          v-for="item in menuModules"
-          :key="item.path"
-        >
-          <SimpleMenuTag :item="item" collapseParent dot />
-          <Icon :class="`${prefixCls}-module__icon`" :size="getCollapsed ? 16 : 20" :icon="item.icon || (item.meta && item.meta.icon)" />
-          <p :class="`${prefixCls}-module__name`">
-            {{ t(item.name) }}
-          </p>
-        </li>
-      </ul>
-    </ScrollContainer>
-
-    <div :class="`${prefixCls}-menu-list`" ref="sideRef" :style="getMenuStyle">
-      <div
-        v-show="openMenu"
-        :class="[
-          `${prefixCls}-menu-list__title`,
-          {
-            show: openMenu,
-          },
-        ]"
-      >
-        <span class="text"> {{ title }}</span>
-        <Icon :size="16" :icon="getMixSideFixed ? 'ri:pushpin-2-fill' : 'ri:pushpin-2-line'" class="pushpin" @click="handleFixedMenu" />
-      </div>
-      <ScrollContainer :class="`${prefixCls}-menu-list__content`">
-        <SimpleMenu :items="childrenMenus" :theme="getMenuTheme" mixSider @menuClick="handleMenuClick" />
-      </ScrollContainer>
-      <div v-show="getShowDragBar && openMenu" :class="`${prefixCls}-drag-bar`" ref="dragBarRef"></div>
-    </div>
-  </div>
-</template>
-<script lang="ts">
-  import type { Menu } from '/@/router/types';
-  import type { CSSProperties } from 'vue';
-  import { computed, defineComponent, onMounted, ref, unref } from 'vue';
-  import type { RouteLocationNormalized } from 'vue-router';
-  import { ScrollContainer } from '/@/components/Container';
-  import { SimpleMenu, SimpleMenuTag } from '/@/components/SimpleMenu';
-  import { Icon } from '/@/components/Icon';
-  import { AppLogo } from '/@/components/Application';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { useDragLine } from './useLayoutSider';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useGo } from '/@/hooks/web/usePage';
-  import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from '/@/enums/appEnum';
-  import clickOutside from '/@/directives/clickOutside';
-  import { getChildrenMenus, getCurrentParentPath, getShallowMenus } from '/@/router/menus';
-  import { listenerRouteChange } from '/@/logics/mitt/routeChange';
-  import LayoutTrigger from '../trigger/index.vue';
-
-  export default defineComponent({
-    name: 'LayoutMixSider',
-    components: {
-      ScrollContainer,
-      AppLogo,
-      SimpleMenu,
-      Icon,
-      LayoutTrigger,
-      SimpleMenuTag,
-    },
-    directives: {
-      clickOutside,
-    },
-    setup() {
-      let menuModules = ref<Menu[]>([]);
-      const activePath = ref('');
-      const childrenMenus = ref<Menu[]>([]);
-      const openMenu = ref(false);
-      const dragBarRef = ref<ElRef>(null);
-      const sideRef = ref<ElRef>(null);
-      const currentRoute = ref<Nullable<RouteLocationNormalized>>(null);
-
-      const { prefixCls } = useDesign('layout-mix-sider');
-      const go = useGo();
-      const { t } = useI18n();
-      const {
-        getMenuWidth,
-        getCanDrag,
-        getCloseMixSidebarOnChange,
-        getMenuTheme,
-        getMixSideTrigger,
-        getRealWidth,
-        getMixSideFixed,
-        mixSideHasChildren,
-        setMenuSetting,
-        getIsMixSidebar,
-        getCollapsed,
-      } = useMenuSetting();
-
-      const { title } = useGlobSetting();
-
-      useDragLine(sideRef, dragBarRef, true);
-
-      const getMenuStyle = computed((): CSSProperties => {
-        return {
-          width: unref(openMenu) ? `${unref(getMenuWidth)}px` : 0,
-          left: `${unref(getMixSideWidth)}px`,
-        };
-      });
-
-      const getIsFixed = computed(() => {
-        /* eslint-disable-next-line */
-        mixSideHasChildren.value = unref(childrenMenus).length > 0;
-        const isFixed = unref(getMixSideFixed) && unref(mixSideHasChildren);
-        if (isFixed) {
-          /* eslint-disable-next-line */
-          openMenu.value = true;
-        }
-        return isFixed;
-      });
-
-      const getMixSideWidth = computed(() => {
-        return unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH;
-      });
-
-      const getDomStyle = computed((): CSSProperties => {
-        const fixedWidth = unref(getIsFixed) ? unref(getRealWidth) : 0;
-        const width = `${unref(getMixSideWidth) + fixedWidth}px`;
-        return getWrapCommonStyle(width);
-      });
-
-      const getWrapStyle = computed((): CSSProperties => {
-        const width = `${unref(getMixSideWidth)}px`;
-        return getWrapCommonStyle(width);
-      });
-
-      const getMenuEvents = computed(() => {
-        return !unref(getMixSideFixed)
-          ? {
-              onMouseleave: () => {
-                setActive(true);
-                closeMenu();
-              },
-            }
-          : {};
-      });
-
-      const getShowDragBar = computed(() => unref(getCanDrag));
-
-      onMounted(async () => {
-        menuModules.value = await getShallowMenus();
-      });
-
-      listenerRouteChange((route) => {
-        currentRoute.value = route;
-        setActive(true);
-        if (unref(getCloseMixSidebarOnChange)) {
-          closeMenu();
-        }
-      });
-
-      function getWrapCommonStyle(width: string): CSSProperties {
-        return {
-          width,
-          maxWidth: width,
-          minWidth: width,
-          flex: `0 0 ${width}`,
-        };
-      }
-
-      // Process module menu click
-      async function handleModuleClick(path: string, hover = false) {
-        const children = await getChildrenMenus(path);
-        if (unref(activePath) === path) {
-          if (!hover) {
-            if (!unref(openMenu)) {
-              openMenu.value = true;
-            } else {
-              closeMenu();
-            }
-          } else {
-            if (!unref(openMenu)) {
-              openMenu.value = true;
-            }
-          }
-          if (!unref(openMenu)) {
-            setActive();
-          }
-        } else {
-          openMenu.value = true;
-          activePath.value = path;
-        }
-
-        if (!children || children.length === 0) {
-          if (!hover) go(path);
-          childrenMenus.value = [];
-          closeMenu();
-          return;
-        }
-        childrenMenus.value = children;
-      }
-
-      // Set the currently active menu and submenu
-      async function setActive(setChildren = false) {
-        const path = currentRoute.value?.path;
-        if (!path) return;
-        activePath.value = await getCurrentParentPath(path);
-        // hanldeModuleClick(parentPath);
-        if (unref(getIsMixSidebar)) {
-          const activeMenu = unref(menuModules).find((item) => item.path === unref(activePath));
-          const p = activeMenu?.path;
-          if (p) {
-            const children = await getChildrenMenus(p);
-            if (setChildren) {
-              childrenMenus.value = children;
-
-              if (unref(getMixSideFixed)) {
-                openMenu.value = children.length > 0;
-              }
-            }
-            if (children.length === 0) {
-              childrenMenus.value = [];
-            }
-          }
-        }
-      }
-
-      function handleMenuClick(path: string) {
-        go(path);
-      }
-
-      function handleClickOutside() {
-        setActive(true);
-        closeMenu();
-      }
-
-      function getItemEvents(item: Menu) {
-        if (unref(getMixSideTrigger) === 'hover') {
-          return {
-            onMouseenter: () => handleModuleClick(item.path, true),
-            onClick: async () => {
-              const children = await getChildrenMenus(item.path);
-              if (item.path && (!children || children.length === 0)) go(item.path);
-            },
-          };
-        }
-        return {
-          onClick: () => handleModuleClick(item.path),
-        };
-      }
-
-      function handleFixedMenu() {
-        setMenuSetting({
-          mixSideFixed: !unref(getIsFixed),
-        });
-      }
-
-      // Close menu
-      function closeMenu() {
-        if (!unref(getIsFixed)) {
-          openMenu.value = false;
-        }
-      }
-
-      return {
-        t,
-        prefixCls,
-        menuModules,
-        handleModuleClick: handleModuleClick,
-        activePath,
-        childrenMenus: childrenMenus,
-        getShowDragBar,
-        handleMenuClick,
-        getMenuStyle,
-        handleClickOutside,
-        sideRef,
-        dragBarRef,
-        title,
-        openMenu,
-        getMenuTheme,
-        getItemEvents,
-        getMenuEvents,
-        getDomStyle,
-        handleFixedMenu,
-        getMixSideFixed,
-        getWrapStyle,
-        getCollapsed,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-layout-mix-sider';
-  @width: 80px;
-  .@{prefix-cls} {
-    position: fixed;
-    top: 0;
-    left: 0;
-    z-index: @layout-mix-sider-fixed-z-index;
-    height: 100%;
-    overflow: hidden;
-    background-color: @sider-dark-bg-color;
-    transition: all 0.2s ease 0s;
-
-    &-dom {
-      height: 100%;
-      overflow: hidden;
-      transition: all 0.2s ease 0s;
-    }
-
-    &-logo {
-      display: flex;
-      height: @header-height;
-      padding-left: 0 !important;
-      justify-content: center;
-
-      img {
-        width: @logo-width;
-        height: @logo-width;
-      }
-    }
-
-    &.light {
-      .@{prefix-cls}-logo {
-        border-bottom: 1px solid rgb(238, 238, 238);
-      }
-
-      &.open {
-        > .scrollbar {
-          border-right: 1px solid rgb(238, 238, 238);
-        }
-      }
-
-      .@{prefix-cls}-module {
-        &__item {
-          font-weight: normal;
-          color: rgba(0, 0, 0, 0.65);
-
-          &--active {
-            color: @primary-color;
-            background-color: unset;
-          }
-        }
-      }
-      .@{prefix-cls}-menu-list {
-        &__content {
-          box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.1);
-        }
-
-        &__title {
-          .pushpin {
-            color: rgba(0, 0, 0, 0.35);
-
-            &:hover {
-              color: rgba(0, 0, 0, 0.85);
-            }
-          }
-        }
-      }
-    }
-    @border-color: @sider-dark-lighten-bg-color;
-
-    &.dark {
-      &.open {
-        .@{prefix-cls}-logo {
-          // border-bottom: 1px solid @border-color;
-        }
-
-        > .scrollbar {
-          border-right: 1px solid @border-color;
-        }
-      }
-      .@{prefix-cls}-menu-list {
-        background-color: @sider-dark-bg-color;
-
-        &__title {
-          color: @white;
-          border-bottom: none;
-          border-bottom: 1px solid @border-color;
-        }
-      }
-    }
-
-    > .scrollbar {
-      height: calc(100% - @header-height - 38px);
-    }
-
-    &.mini &-module {
-      &__name {
-        display: none;
-      }
-
-      &__icon {
-        margin-bottom: 0;
-      }
-    }
-
-    &-module {
-      position: relative;
-      padding-top: 1px;
-
-      &__item {
-        position: relative;
-        padding: 12px 0;
-        color: rgba(255, 255, 255, 0.65);
-        text-align: center;
-        cursor: pointer;
-        transition: all 0.3s ease;
-
-        &:hover {
-          color: @white;
-        }
-        // &:hover,
-        &--active {
-          font-weight: 700;
-          color: @white;
-          background-color: @sider-dark-darken-bg-color;
-
-          &::before {
-            position: absolute;
-            top: 0;
-            left: 0;
-            width: 3px;
-            height: 100%;
-            background-color: @primary-color;
-            content: '';
-          }
-        }
-      }
-
-      &__icon {
-        margin-bottom: 8px;
-        font-size: 24px;
-        transition: all 0.2s;
-      }
-
-      &__name {
-        margin-bottom: 0;
-        font-size: 12px;
-        transition: all 0.2s;
-      }
-    }
-
-    &-trigger {
-      position: absolute;
-      bottom: 0;
-      left: 0;
-      width: 100%;
-      font-size: 14px;
-      color: rgba(255, 255, 255, 0.65);
-      text-align: center;
-      cursor: pointer;
-      background-color: @trigger-dark-bg-color;
-      height: 36px;
-      line-height: 36px;
-    }
-
-    &.light &-trigger {
-      color: rgba(0, 0, 0, 0.65);
-      background-color: #fff;
-      border-top: 1px solid #eee;
-    }
-
-    &-menu-list {
-      position: fixed;
-      top: 0;
-      width: 200px;
-      height: calc(100%);
-      background-color: #fff;
-      transition: all 0.2s;
-
-      &__title {
-        display: flex;
-        height: @header-height;
-        // margin-left: -6px;
-        font-size: 18px;
-        color: @primary-color;
-        border-bottom: 1px solid rgb(238, 238, 238);
-        opacity: 0;
-        transition: unset;
-        align-items: center;
-        justify-content: space-between;
-
-        &.show {
-          min-width: 130px;
-          opacity: 1;
-          transition: all 0.5s ease;
-        }
-
-        .pushpin {
-          margin-right: 6px;
-          color: rgba(255, 255, 255, 0.65);
-          cursor: pointer;
-
-          &:hover {
-            color: #fff;
-          }
-        }
-      }
-
-      &__content {
-        height: calc(100% - @header-height) !important;
-
-        .scrollbar__wrap {
-          height: 100%;
-          overflow-x: hidden;
-        }
-
-        .scrollbar__bar.is-horizontal {
-          display: none;
-        }
-
-        .ant-menu {
-          height: 100%;
-        }
-
-        .ant-menu-inline,
-        .ant-menu-vertical,
-        .ant-menu-vertical-left {
-          border-right: 1px solid transparent;
-        }
-      }
-    }
-
-    &-drag-bar {
-      position: absolute;
-      top: 50px;
-      right: -1px;
-      width: 1px;
-      height: calc(100% - 50px);
-      cursor: ew-resize;
-      background-color: #f8f8f9;
-      border-top: none;
-      border-bottom: none;
-      box-shadow: 0 0 4px 0 rgba(28, 36, 56, 0.15);
-    }
-  }
-</style>
diff --git a/src/layouts/default/sider/index.vue b/src/layouts/default/sider/index.vue
deleted file mode 100644
index d5357f4..0000000
--- a/src/layouts/default/sider/index.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <Drawer
-    v-if="getIsMobile"
-    placement="left"
-    :class="prefixCls"
-    :width="getMenuWidth"
-    :getContainer="null"
-    :visible="!getCollapsed"
-    @close="handleClose"
-  >
-    <Sider />
-  </Drawer>
-  <MixSider v-else-if="getIsMixSidebar" />
-  <Sider v-else />
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-
-  import Sider from './LayoutSider.vue';
-  import MixSider from './MixSider.vue';
-  import { Drawer } from 'ant-design-vue';
-
-  import { useAppInject } from '/@/hooks/web/useAppInject';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  export default defineComponent({
-    name: 'SiderWrapper',
-    components: { Sider, Drawer, MixSider },
-    setup() {
-      const { prefixCls } = useDesign('layout-sider-wrapper');
-      const { getIsMobile } = useAppInject();
-      const { setMenuSetting, getCollapsed, getMenuWidth, getIsMixSidebar } = useMenuSetting();
-
-      function handleClose() {
-        setMenuSetting({
-          collapsed: true,
-        });
-      }
-
-      return { prefixCls, getIsMobile, getCollapsed, handleClose, getMenuWidth, getIsMixSidebar };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-layout-sider-wrapper';
-
-  .@{prefix-cls} {
-    .ant-drawer-body {
-      height: 100vh;
-      padding: 0;
-    }
-
-    .ant-drawer-header-no-title {
-      display: none;
-    }
-  }
-</style>
diff --git a/src/layouts/default/sider/useLayoutSider.ts b/src/layouts/default/sider/useLayoutSider.ts
deleted file mode 100644
index 48f2814..0000000
--- a/src/layouts/default/sider/useLayoutSider.ts
+++ /dev/null
@@ -1,133 +0,0 @@
-import type { Ref } from 'vue';
-
-import { computed, unref, onMounted, nextTick, ref } from 'vue';
-
-import { TriggerEnum } from '/@/enums/menuEnum';
-
-import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-import { useDebounceFn } from '@vueuse/core';
-
-/**
- * Handle related operations of menu events
- */
-export function useSiderEvent() {
-  const brokenRef = ref(false);
-
-  const { getMiniWidthNumber } = useMenuSetting();
-
-  const getCollapsedWidth = computed(() => {
-    return unref(brokenRef) ? 0 : unref(getMiniWidthNumber);
-  });
-
-  function onBreakpointChange(broken: boolean) {
-    brokenRef.value = broken;
-  }
-
-  return { getCollapsedWidth, onBreakpointChange };
-}
-
-/**
- * Handle related operations of menu folding
- */
-export function useTrigger(getIsMobile: Ref<boolean>) {
-  const { getTrigger, getSplit } = useMenuSetting();
-
-  const getShowTrigger = computed(() => {
-    const trigger = unref(getTrigger);
-
-    return trigger !== TriggerEnum.NONE && !unref(getIsMobile) && (trigger === TriggerEnum.FOOTER || unref(getSplit));
-  });
-
-  const getTriggerAttr = computed(() => {
-    if (unref(getShowTrigger)) {
-      return {};
-    }
-    return {
-      trigger: null,
-    };
-  });
-
-  return { getTriggerAttr, getShowTrigger };
-}
-
-/**
- * Handle menu drag and drop related operations
- * @param siderRef
- * @param dragBarRef
- */
-export function useDragLine(siderRef: Ref<any>, dragBarRef: Ref<any>, mix = false) {
-  const { getMiniWidthNumber, getCollapsed, setMenuSetting } = useMenuSetting();
-
-  onMounted(() => {
-    nextTick(() => {
-      const exec = useDebounceFn(changeWrapWidth, 80);
-      exec();
-    });
-  });
-
-  function getEl(elRef: Ref<ElRef | ComponentRef>): any {
-    const el = unref(elRef);
-    if (!el) return null;
-    if (Reflect.has(el, '$el')) {
-      return (unref(elRef) as ComponentRef)?.$el;
-    }
-    return unref(elRef);
-  }
-
-  function handleMouseMove(ele: HTMLElement, wrap: HTMLElement, clientX: number) {
-    document.onmousemove = function (innerE) {
-      let iT = (ele as any).left + (innerE.clientX - clientX);
-      innerE = innerE || window.event;
-      const maxT = 800;
-      const minT = unref(getMiniWidthNumber);
-      iT < 0 && (iT = 0);
-      iT > maxT && (iT = maxT);
-      iT < minT && (iT = minT);
-      ele.style.left = wrap.style.width = iT + 'px';
-      return false;
-    };
-  }
-
-  // Drag and drop in the menu area-release the mouse
-  function removeMouseup(ele: any) {
-    const wrap = getEl(siderRef);
-    document.onmouseup = function () {
-      document.onmousemove = null;
-      document.onmouseup = null;
-      wrap.style.transition = 'width 0.2s';
-      const width = parseInt(wrap.style.width);
-
-      if (!mix) {
-        const miniWidth = unref(getMiniWidthNumber);
-        if (!unref(getCollapsed)) {
-          width > miniWidth + 20 ? setMenuSetting({ menuWidth: width }) : setMenuSetting({ collapsed: true });
-        } else {
-          width > miniWidth && setMenuSetting({ collapsed: false, menuWidth: width });
-        }
-      } else {
-        setMenuSetting({ menuWidth: width });
-      }
-
-      ele.releaseCapture?.();
-    };
-  }
-
-  function changeWrapWidth() {
-    const ele = getEl(dragBarRef);
-    if (!ele) return;
-    const wrap = getEl(siderRef);
-    if (!wrap) return;
-
-    ele.onmousedown = (e: any) => {
-      wrap.style.transition = 'unset';
-      const clientX = e?.clientX;
-      ele.left = ele.offsetLeft;
-      handleMouseMove(ele, wrap, clientX);
-      removeMouseup(ele);
-      ele.setCapture?.();
-      return false;
-    };
-  }
-
-  return {};
-}
diff --git a/src/layouts/default/tabs/components/FoldButton.vue b/src/layouts/default/tabs/components/FoldButton.vue
deleted file mode 100644
index 6ed5b36..0000000
--- a/src/layouts/default/tabs/components/FoldButton.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-<template>
-  <span :class="`${prefixCls}__extra-fold`" @click="handleFold">
-    <Icon :icon="getIcon" />
-  </span>
-</template>
-<script lang="ts">
-  import { defineComponent, unref, computed } from 'vue';
-  import { Icon } from '/@/components/Icon';
-
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { triggerWindowResize } from '/@/utils/event';
-
-  export default defineComponent({
-    name: 'FoldButton',
-    components: { Icon },
-    setup() {
-      const { prefixCls } = useDesign('multiple-tabs-content');
-      const { getShowMenu, setMenuSetting } = useMenuSetting();
-      const { getShowHeader, setHeaderSetting } = useHeaderSetting();
-
-      const getIsUnFold = computed(() => !unref(getShowMenu) && !unref(getShowHeader));
-
-      const getIcon = computed(() => (unref(getIsUnFold) ? 'codicon:screen-normal' : 'codicon:screen-full'));
-
-      function handleFold() {
-        const isUnFold = unref(getIsUnFold);
-        setMenuSetting({
-          show: isUnFold,
-          hidden: !isUnFold,
-        });
-        setHeaderSetting({ show: isUnFold });
-        triggerWindowResize();
-      }
-
-      return { prefixCls, getIcon, handleFold };
-    },
-  });
-</script>
diff --git a/src/layouts/default/tabs/components/TabContent.vue b/src/layouts/default/tabs/components/TabContent.vue
deleted file mode 100644
index eb263d3..0000000
--- a/src/layouts/default/tabs/components/TabContent.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-<template>
-  <Dropdown :dropMenuList="getDropMenuList" :trigger="getTrigger" @menuEvent="handleMenuEvent">
-    <div :class="`${prefixCls}__info`" @contextmenu="handleContext" v-if="getIsTabs">
-      <!-- updateBy:sunjianlei---updateDate:2021-09-03---淇敼tab鍒囨崲鏍忔牱寮忥細澧炲姞鍓嶇紑鍥炬爣 -->
-      <span v-if="showPrefixIcon" :class="`${prefixCls}__prefix-icon`" @click="handleContext">
-        <Icon :icon="prefixIconType" />
-      </span>
-      <span class="ml-1">{{ getTitle }}</span>
-    </div>
-    <span :class="`${prefixCls}__extra-quick`" v-else @click="handleContext">
-      <Icon icon="ion:chevron-down" />
-    </span>
-  </Dropdown>
-</template>
-<script lang="ts">
-  import type { PropType } from 'vue';
-  import type { RouteLocationNormalized } from 'vue-router';
-
-  import { defineComponent, computed, unref } from 'vue';
-  import { Dropdown } from '/@/components/Dropdown/index';
-  import { Icon } from '/@/components/Icon';
-
-  import { TabContentProps } from '../types';
-
-  import { TabsThemeEnum } from '/@/enums/appEnum';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useTabDropdown } from '../useTabDropdown';
-  import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
-  import { useLocaleStore } from '/@/store/modules/locale';
-
-  export default defineComponent({
-    name: 'TabContent',
-    components: { Dropdown, Icon },
-    props: {
-      tabItem: {
-        type: Object as PropType<RouteLocationNormalized>,
-        default: null,
-      },
-      isExtra: Boolean,
-    },
-    setup(props) {
-      const { prefixCls } = useDesign('multiple-tabs-content');
-      const { t } = useI18n();
-
-      //update-begin-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-      const localeStore = useLocaleStore();
-      const getTitle = computed(() => {
-        const { tabItem: { meta, fullPath } = {} } = props;
-        let title = localeStore.getPathTitle(fullPath);
-        if (title) {
-          return title;
-        }
-        return meta && t(meta.title as string);
-      });
-      //update-end-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-
-      const getIsTabs = computed(() => !props.isExtra);
-
-      // updateBy:sunjianlei---updateDate:2021-09-03---淇敼tab鍒囨崲鏍忔牱寮忥細鍓嶇紑鍥炬爣绫诲瀷
-      const prefixIconType = computed(() => {
-        if (props.tabItem.meta.icon) {
-          return props.tabItem.meta.icon;
-        } else if (props.tabItem.path === '/dashboard/analysis') {
-          // 褰撴槸棣栭〉鏃惰繑鍥� home 鍥炬爣 TODO 姝ゅ鍙兘闇�瑕佸姩鎬佸垽鏂椤佃矾寰�
-          return 'ant-design:home-outlined';
-        } else {
-          return 'ant-design:code';
-        }
-      });
-
-      const getTrigger = computed((): ('contextmenu' | 'click' | 'hover')[] => (unref(getIsTabs) ? ['contextmenu'] : ['click']));
-
-      const { getDropMenuList, handleMenuEvent, handleContextMenu } = useTabDropdown(props as TabContentProps, getIsTabs);
-
-      function handleContext(e) {
-        props.tabItem && handleContextMenu(props.tabItem)(e);
-      }
-
-      const { getTabsTheme } = useMultipleTabSetting();
-      // 鏄惁鏄剧ず鍥炬爣
-      const showPrefixIcon = computed(() => unref(getTabsTheme) === TabsThemeEnum.SMOOTH);
-
-      return {
-        prefixCls,
-        getDropMenuList,
-        handleMenuEvent,
-        handleContext,
-        getTrigger,
-        getIsTabs,
-        getTitle,
-        prefixIconType,
-        showPrefixIcon,
-      };
-    },
-  });
-</script>
diff --git a/src/layouts/default/tabs/components/TabRedo.vue b/src/layouts/default/tabs/components/TabRedo.vue
deleted file mode 100644
index a6fa657..0000000
--- a/src/layouts/default/tabs/components/TabRedo.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-<template>
-  <span :class="`${prefixCls}__extra-redo`" @click="handleRedo">
-    <RedoOutlined :spin="loading" />
-  </span>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { RedoOutlined } from '@ant-design/icons-vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useTabs } from '/@/hooks/web/useTabs';
-
-  export default defineComponent({
-    name: 'TabRedo',
-    components: { RedoOutlined },
-
-    setup() {
-      const loading = ref(false);
-
-      const { prefixCls } = useDesign('multiple-tabs-content');
-      const { refreshPage } = useTabs();
-
-      async function handleRedo() {
-        loading.value = true;
-        await refreshPage();
-        setTimeout(() => {
-          loading.value = false;
-          // Animation execution time
-        }, 1200);
-      }
-      return { prefixCls, handleRedo, loading };
-    },
-  });
-</script>
diff --git a/src/layouts/default/tabs/index.less b/src/layouts/default/tabs/index.less
deleted file mode 100644
index 2d920a3..0000000
--- a/src/layouts/default/tabs/index.less
+++ /dev/null
@@ -1,228 +0,0 @@
-@prefix-cls: ~'@{namespace}-multiple-tabs';
-
-html[data-theme='dark'] {
-  .@{prefix-cls} {
-    .ant-tabs-tab {
-      border-bottom: 1px solid @border-color-base;
-    }
-  }
-}
-
-html[data-theme='light'] {
-  .@{prefix-cls} {
-    .ant-tabs-tab:not(.ant-tabs-tab-active) {
-      border: 1px solid #e6e6e6;
-    }
-  }
-}
-
-.@{prefix-cls} {
-  z-index: 10;
-  height: @multiple-height + 2;
-  line-height: @multiple-height + 2;
-  background-color: @component-background;
-  border-bottom: 1px solid @border-color-base;
-  box-shadow: 0 4px 4px rgb(0 21 41 / 8%);
-
-  .ant-tabs-small {
-    height: calc(@multiple-height + 4px);
-  }
-
-  .ant-tabs.ant-tabs-card {
-    padding-left: 10px;
-
-    .ant-tabs-nav {
-      height: calc(@multiple-height);
-      margin: 0;
-      background-color: @component-background;
-      border: 0;
-      box-shadow: none;
-
-      .ant-tabs-nav-wrap {
-        height: @multiple-height;
-        margin-top: 2px;
-      }
-
-      .ant-tabs-tab {
-        height: calc(@multiple-height - 4px);
-        padding-right: 12px;
-        line-height: calc(@multiple-height - 4px);
-        color: @text-color-base;
-        background-color: @component-background;
-        transition: none;
-
-        .ant-tabs-tab-btn {
-          color: @text-color-base;
-          transition: none;
-        }
-
-        &:hover {
-          .ant-tabs-tab-remove .anticon-close {
-            opacity: 1;
-          }
-        }
-
-        .ant-tabs-tab-remove {
-          margin: 0;
-          padding: 0;
-          position: relative;
-          top: 0;
-          left: 4px;
-
-          .anticon-close {
-            width: 8px;
-            height: 12px;
-            font-size: 12px;
-            color: inherit;
-            opacity: 0;
-            transition: none;
-
-            &:hover {
-              svg {
-                width: 0.8em;
-              }
-            }
-          }
-        }
-
-        > div {
-          display: flex;
-          justify-content: center;
-          align-items: center;
-        }
-
-        svg {
-          fill: @text-color-base;
-        }
-      }
-
-      .ant-tabs-tab:not(.ant-tabs-tab-active) {
-        &:hover {
-          background-color: #ecf5ff;
-          color: @primary-color;
-          border-color: #b3d8ff;
-        }
-      }
-
-      .ant-tabs-tab-active {
-        position: relative;
-        padding-left: 18px;
-        color: @white !important;
-        background: @primary-color;
-        border: 1px solid transparent;
-        transition: none;
-
-        .ant-tabs-tab-btn {
-          color: @white;
-        }
-
-        .ant-tabs-tab-remove .anticon-close {
-          opacity: 1;
-        }
-
-        svg {
-          width: 0.7em;
-          fill: @white;
-        }
-      }
-    }
-
-    .ant-tabs-nav > div:nth-child(1) {
-      padding: 0 6px;
-
-      .ant-tabs-tab {
-        margin-right: 6px !important;
-      }
-    }
-  }
-
-  .ant-tabs-tab:not(.ant-tabs-tab-active) {
-    .ant-tabs-tab-remove .anticon-close {
-      font-size: 12px;
-
-      svg {
-        width: 0.6em;
-      }
-    }
-  }
-
-  .ant-tabs-extra-content {
-    margin-top: 2px;
-    line-height: @multiple-height !important;
-  }
-
-  .ant-dropdown-trigger {
-    display: inline-flex;
-  }
-
-  &--hide-close {
-    .ant-tabs-tab-remove .anticon-close {
-      opacity: 0 !important;
-    }
-  }
-
-  &-content {
-    &__extra-quick,
-    &__extra-redo,
-    &__extra-fold {
-      display: inline-block;
-      width: 36px;
-      height: @multiple-height;
-      line-height: @multiple-height;
-      color: @text-color-secondary;
-      text-align: center;
-      cursor: pointer;
-      border-left: 1px solid @border-color-base;
-
-      &:hover {
-        color: @text-color-base;
-      }
-
-      span[role='img'] {
-        transform: rotate(90deg);
-      }
-    }
-
-    &__extra-redo {
-      span[role='img'] {
-        transform: rotate(0deg);
-      }
-    }
-
-    &__info {
-      display: inline-block;
-      width: 100%;
-      height: @multiple-height - 2;
-      padding-left: 0;
-      margin-left: -10px;
-      font-size: 12px;
-      cursor: pointer;
-      user-select: none;
-    }
-  }
-}
-
-.ant-tabs-dropdown-menu {
-  &-title-content {
-    display: flex;
-    align-items: center;
-
-    .@{prefix-cls} {
-      &-content__info {
-        width: auto;
-        margin-left: 0;
-        line-height: 28px;
-      }
-    }
-  }
-
-  &-item-remove {
-    margin-left: auto;
-  }
-}
-
-.multiple-tabs__dropdown {
-  .ant-dropdown-content {
-    width: 172px;
-  }
-}
diff --git a/src/layouts/default/tabs/index.vue b/src/layouts/default/tabs/index.vue
deleted file mode 100644
index 10cec5b..0000000
--- a/src/layouts/default/tabs/index.vue
+++ /dev/null
@@ -1,147 +0,0 @@
-<template>
-  <div :class="getWrapClass">
-    <Tabs
-      type="editable-card"
-      size="small"
-      :animated="false"
-      :hideAdd="true"
-      :tabBarGutter="3"
-      :activeKey="activeKeyRef"
-      @change="handleChange"
-      @edit="handleEdit"
-    >
-      <template v-for="item in getTabsState" :key="item.query ? item.fullPath : item.path">
-        <TabPane :closable="!(item && item.meta && item.meta.affix)">
-          <template #tab>
-            <TabContent :tabItem="item" />
-          </template>
-        </TabPane>
-      </template>
-
-      <template #rightExtra v-if="getShowRedo || getShowQuick">
-        <TabRedo v-if="getShowRedo" />
-        <TabContent isExtra :tabItem="$route" v-if="getShowQuick" />
-        <FoldButton v-if="getShowFold" />
-      </template>
-    </Tabs>
-  </div>
-</template>
-<script lang="ts">
-  import type { RouteLocationNormalized, RouteMeta } from 'vue-router';
-
-  import { defineComponent, computed, unref, ref } from 'vue';
-
-  import { Tabs } from 'ant-design-vue';
-  import TabContent from './components/TabContent.vue';
-  import FoldButton from './components/FoldButton.vue';
-  import TabRedo from './components/TabRedo.vue';
-
-  import { useGo } from '/@/hooks/web/usePage';
-
-  import { useMultipleTabStore } from '/@/store/modules/multipleTab';
-  import { useUserStore } from '/@/store/modules/user';
-
-  import { initAffixTabs, useTabsDrag } from './useMultipleTabs';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
-
-  import { REDIRECT_NAME } from '/@/router/constant';
-  import { listenerRouteChange } from '/@/logics/mitt/routeChange';
-
-  import { useRouter } from 'vue-router';
-
-  export default defineComponent({
-    name: 'MultipleTabs',
-    components: {
-      TabRedo,
-      FoldButton,
-      Tabs,
-      TabPane: Tabs.TabPane,
-      TabContent,
-    },
-    setup() {
-      const affixTextList = initAffixTabs();
-      const activeKeyRef = ref('');
-
-      useTabsDrag(affixTextList);
-      const tabStore = useMultipleTabStore();
-      const userStore = useUserStore();
-      const router = useRouter();
-
-      const { prefixCls } = useDesign('multiple-tabs');
-      const go = useGo();
-      const { getShowQuick, getShowRedo, getShowFold, getTabsTheme } = useMultipleTabSetting();
-
-      const getTabsState = computed(() => {
-        return tabStore.getTabList.filter((item) => !item.meta?.hideTab);
-      });
-
-      const unClose = computed(() => unref(getTabsState).length === 1);
-
-      const getWrapClass = computed(() => {
-        return [
-          prefixCls,
-          {
-            [`${prefixCls}--hide-close`]: unref(unClose),
-          },
-          `${prefixCls}--theme-${unref(getTabsTheme)}`,
-        ];
-      });
-
-      listenerRouteChange((route) => {
-        const { name } = route;
-        if (name === REDIRECT_NAME || !route || !userStore.getToken) {
-          return;
-        }
-
-        const { path, fullPath, meta = {} } = route;
-        const { currentActiveMenu, hideTab } = meta as RouteMeta;
-        const isHide = !hideTab ? null : currentActiveMenu;
-        const p = isHide || fullPath || path;
-        if (activeKeyRef.value !== p) {
-          activeKeyRef.value = p as string;
-        }
-
-        if (isHide) {
-          const findParentRoute = router.getRoutes().find((item) => item.path === currentActiveMenu);
-
-          findParentRoute && tabStore.addTab(findParentRoute as unknown as RouteLocationNormalized);
-        } else {
-          tabStore.addTab(unref(route));
-        }
-      });
-
-      function handleChange(activeKey: any) {
-        activeKeyRef.value = activeKey;
-        go(activeKey, false);
-      }
-
-      // Close the current tab
-      function handleEdit(targetKey: string) {
-        // Added operation to hide, currently only use delete operation
-        if (unref(unClose)) {
-          return;
-        }
-
-        tabStore.closeTabByKey(targetKey, router);
-      }
-      return {
-        prefixCls,
-        unClose,
-        getWrapClass,
-        handleEdit,
-        handleChange,
-        activeKeyRef,
-        getTabsState,
-        getShowQuick,
-        getShowRedo,
-        getShowFold,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @import './index.less';
-  @import './tabs.theme.card.less';
-  @import './tabs.theme.smooth.less';
-</style>
diff --git a/src/layouts/default/tabs/tabs.theme.card.less b/src/layouts/default/tabs/tabs.theme.card.less
deleted file mode 100644
index 9d25abd..0000000
--- a/src/layouts/default/tabs/tabs.theme.card.less
+++ /dev/null
@@ -1,234 +0,0 @@
-// tabs鍗$墖鏍峰紡
-@prefix-cls-theme-card: ~'@{prefix-cls}.@{prefix-cls}--theme-card';
-
-html[data-theme='dark'] {
-  .@{prefix-cls-theme-card} {
-    .ant-tabs-tab {
-      border-top: none !important;
-      border-left: none !important;
-      border-right: none !important;
-    }
-  }
-}
-
-html[data-theme='light'] {
-  .@{prefix-cls-theme-card} {
-    .ant-tabs-tab:not(.ant-tabs-tab-active) {
-      border-top: none !important;
-      border-left: none !important;
-      border-right: none !important;
-    }
-  }
-}
-
-.@{prefix-cls-theme-card} {
-  @tabHeight: calc(@multiple-card-height - 10px);
-
-  z-index: 10;
-  height: @multiple-card-height;
-  line-height: @multiple-card-height;
-  background-color: @component-background;
-  box-shadow: 0 1px 4px rgb(0 21 41 / 8%);
-
-  .ant-tabs-small {
-    height: @multiple-card-height;
-  }
-
-  .ant-tabs.ant-tabs-card {
-    .ant-tabs-nav {
-      height: @multiple-card-height;
-      margin: 0;
-      background-color: @component-background;
-      border: 0;
-      box-shadow: none;
-      padding-left: 10px;
-
-      .ant-tabs-nav-wrap {
-        height: @tabHeight;
-        margin-top: 4px;
-        padding-top: 0;
-      }
-
-      .ant-tabs-tab {
-        height: @tabHeight;
-        line-height: @tabHeight;
-        color: @text-color-base;
-        background-color: @component-background;
-        padding: 0 20px 0 30px;
-        margin: 0 10px 0 0 !important;
-
-        .ant-tabs-tab-btn {
-          color: @text-color-call-out;
-        }
-
-        &:hover {
-          //padding: 0 36px 0 30px;
-
-          .ant-tabs-tab-remove .anticon-close {
-            opacity: 1;
-
-            &:hover {
-              color: #fff;
-              background-color: #c0c4cc;
-            }
-          }
-        }
-
-        .ant-tabs-tab-remove {
-          top: 5px;
-          left: 4px;
-
-          .anticon-close {
-            position: relative;
-            width: 14px;
-            height: 14px;
-            font-size: 13px;
-            color: inherit;
-            opacity: 0;
-            transition: opacity 0.15s;
-            top: 0;
-            left: 6px;
-            vertical-align: middle;
-            line-height: 10px;
-            overflow: hidden;
-            transform-origin: 100% 50%;
-            border-radius: 100%;
-
-            &:hover {
-              svg {
-                fill: #fff;
-              }
-            }
-          }
-        }
-
-        > div {
-          display: flex;
-          justify-content: center;
-          align-items: center;
-        }
-
-        svg {
-          fill: @text-color-base;
-        }
-
-        &:first-child {
-        }
-      }
-
-      .ant-tabs-tab:not(.ant-tabs-tab-active) {
-        border: none !important;
-
-        &:hover {
-          color: @primary-color !important;
-          background-color: inherit;
-        }
-      }
-
-      .ant-tabs-tab-active {
-        position: relative;
-        color: @primary-color !important;
-        border: 1px solid transparent;
-        border-bottom: 1px solid @primary-color !important;
-        font-weight: inherit;
-
-        .ant-tabs-tab-btn {
-          color: @primary-color;
-        }
-
-        .ant-tabs-tab-remove .anticon-close {
-          opacity: 0;
-
-          svg {
-            width: 0.6em;
-          }
-        }
-
-        svg {
-          width: inherit;
-          fill: @primary-color;
-        }
-      }
-    }
-
-    .ant-tabs-nav > div:nth-child(1) {
-      padding: 0 6px;
-
-      .ant-tabs-tab {
-        margin-right: 10px !important;
-      }
-    }
-  }
-
-  .ant-tabs-tab:not(.ant-tabs-tab-active) {
-    .ant-tabs-tab-remove .anticon-close {
-      font-size: 12px;
-
-      svg {
-        width: 0.6em;
-      }
-    }
-  }
-
-  .ant-tabs-extra-content {
-    position: relative;
-    top: 0;
-    line-height: @multiple-card-height !important;
-  }
-
-  .ant-dropdown-trigger {
-    display: inline-flex;
-  }
-
-  .@{prefix-cls}--hide-close {
-    .ant-tabs-tab-remove .anticon-close {
-      opacity: 0 !important;
-    }
-  }
-
-  .@{prefix-cls}-content {
-    &__extra-quick,
-    &__extra-redo,
-    &__extra-fold {
-      display: inline-block;
-      width: 36px;
-      height: @multiple-card-height;
-      line-height: @multiple-card-height;
-      color: @text-color-secondary;
-      text-align: center;
-      cursor: pointer;
-      border-left: 1px solid @border-color-base;
-
-      &:hover {
-        color: @text-color-base;
-      }
-
-      span[role='img'] {
-        transform: rotate(90deg);
-      }
-    }
-
-    &__extra-redo {
-      span[role='img'] {
-        transform: rotate(0deg);
-      }
-    }
-
-    &__info {
-      display: inline-block;
-      width: 100%;
-      height: @tabHeight;
-      padding-left: 0;
-      font-size: 14px;
-      cursor: pointer;
-      user-select: none;
-    }
-
-    // tab 鍓嶇紑鍥炬爣鏍峰紡
-    &__prefix-icon {
-      & .app-iconify.anticon {
-        margin-right: 4px;
-      }
-    }
-  }
-}
diff --git a/src/layouts/default/tabs/tabs.theme.smooth.less b/src/layouts/default/tabs/tabs.theme.smooth.less
deleted file mode 100644
index b4e3d65..0000000
--- a/src/layouts/default/tabs/tabs.theme.smooth.less
+++ /dev/null
@@ -1,233 +0,0 @@
-// tabs鍦嗘粦鏍峰紡
-@prefix-cls-theme-smooth: ~'@{prefix-cls}.@{prefix-cls}--theme-smooth';
-
-html[data-theme='dark'] {
-  .@{prefix-cls-theme-smooth} {
-    .ant-tabs-tab {
-      border: none !important;
-    }
-  }
-}
-
-html[data-theme='light'] {
-  .@{prefix-cls-theme-smooth} {
-    .ant-tabs-tab:not(.ant-tabs-tab-active) {
-      border: none !important;
-    }
-  }
-}
-
-.@{prefix-cls-theme-smooth} {
-  @tabHeight: calc(@multiple-smooth-height - 12px);
-
-  z-index: 10;
-  height: @multiple-smooth-height;
-  line-height: @multiple-smooth-height;
-  background-color: @component-background;
-  box-shadow: 0 1px 4px rgb(0 21 41 / 8%);
-
-  .ant-tabs-small {
-    height: @multiple-smooth-height;
-  }
-
-  .ant-tabs.ant-tabs-card {
-    .ant-tabs-nav {
-      height: @multiple-smooth-height;
-      margin: 0;
-      background-color: @component-background;
-      border: 0;
-      box-shadow: none;
-      padding-left: 10px;
-
-      .ant-tabs-nav-wrap {
-        height: @tabHeight;
-        margin-top: 12px;
-      }
-
-      .ant-tabs-tab {
-        height: @tabHeight;
-        line-height: @tabHeight;
-        color: @text-color-base;
-        background-color: @component-background;
-        transition: padding 0.3s;
-        padding: 0 24px 0 30px;
-        margin: 0 -14px 0 0 !important;
-        mask: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANoAAAAkBAMAAAAdqzmBAAAAMFBMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlTPQ5AAAAD3RSTlMAr3DvEM8wgCBA379gj5//tJBPAAAAnUlEQVRIx2NgAAM27fj/tAO/xBsYkIHyf9qCT8iWMf6nNQhAsk2f5rYheY7Dnua2/U+A28ZEe8v+F9Ax2v7/F4DbxkUH2wzgtvHTwbYPo7aN2jZq26hto7aN2jZq25Cy7Qvctnw62PYNbls9HWz7S8/G6//PsI6H4396gAUQy1je08W2jxDbpv6nD4gB2uWp+J9eYPsEhv/0BPS1DQBvoBLVZ3BppgAAAABJRU5ErkJggg==);
-        mask-size: 100% 100%;
-        position: relative;
-        z-index: 1;
-
-        .ant-tabs-tab-btn {
-          color: @text-color-base;
-        }
-
-        &:hover {
-          z-index: 2;
-          padding: 0 30px 0 36px;
-
-          .ant-tabs-tab-remove .anticon-close {
-            opacity: 1;
-
-            &:hover {
-              color: #fff;
-              background-color: #c0c4cc;
-            }
-          }
-        }
-
-        .ant-tabs-tab-remove {
-          top: 4px;
-          left: 10px;
-
-          .anticon-close {
-            position: relative;
-            width: 14px;
-            height: 14px;
-            font-size: 13px;
-            color: inherit;
-            opacity: 0;
-            transition: opacity 0.15s;
-            vertical-align: middle;
-            line-height: 10px;
-            overflow: hidden;
-            transform-origin: 100% 50%;
-            border-radius: 100%;
-
-            &:hover {
-              svg {
-                fill: #fff;
-              }
-            }
-          }
-        }
-        > div {
-          display: flex;
-          justify-content: center;
-          align-items: center;
-        }
-
-        svg {
-          fill: @text-color-base;
-        }
-
-        &:first-child {
-          padding: 0 30px 0 30px !important;
-        }
-      }
-
-      .ant-tabs-tab:not(.ant-tabs-tab-active) {
-        &:hover {
-          color: inherit;
-          background-color: #dee1e6;
-        }
-      }
-
-      .ant-tabs-tab-active {
-        position: relative;
-        padding: 0 30px 0 36px;
-        color: @primary-color !important;
-        background: #e8f4ff;
-        border: 0;
-        font-weight: inherit;
-        z-index: 3;
-
-        .ant-tabs-tab-btn {
-          color: @primary-color;
-        }
-
-        .ant-tabs-tab-remove .anticon-close {
-          opacity: 1;
-
-          svg {
-            width: 0.6em;
-          }
-        }
-
-        svg {
-          width: inherit;
-          fill: @primary-color;
-        }
-      }
-    }
-
-    .ant-tabs-nav > div:nth-child(1) {
-      padding: 0 6px;
-
-      .ant-tabs-tab {
-        margin-right: -20px !important;
-      }
-    }
-  }
-
-  .ant-tabs-tab:not(.ant-tabs-tab-active) {
-    .anticon-close {
-      font-size: 12px;
-
-      svg {
-        width: 0.6em;
-      }
-    }
-  }
-
-  .ant-tabs-extra-content {
-    position: relative;
-    top: 0;
-    line-height: @multiple-smooth-height !important;
-  }
-
-  .ant-dropdown-trigger {
-    display: inline-flex;
-  }
-
-  .@{prefix-cls}--hide-close {
-    .ant-tabs-tab-remove .anticon-close {
-      opacity: 0 !important;
-    }
-  }
-
-  .@{prefix-cls}-content {
-    &__extra-quick,
-    &__extra-redo,
-    &__extra-fold {
-      display: inline-block;
-      width: 36px;
-      height: @multiple-smooth-height;
-      line-height: @multiple-smooth-height;
-      color: @text-color-secondary;
-      text-align: center;
-      cursor: pointer;
-      border-left: 1px solid @border-color-base;
-
-      &:hover {
-        color: @text-color-base;
-      }
-
-      span[role='img'] {
-        transform: rotate(90deg);
-      }
-    }
-
-    &__extra-redo {
-      span[role='img'] {
-        transform: rotate(0deg);
-      }
-    }
-
-    &__info {
-      display: inline-block;
-      width: 100%;
-      height: @tabHeight;
-      padding-left: 0;
-      font-size: 14px;
-      cursor: pointer;
-      user-select: none;
-    }
-
-    // tab 鍓嶇紑鍥炬爣鏍峰紡
-    &__prefix-icon {
-      & .app-iconify.anticon {
-        margin-right: 4px;
-      }
-    }
-  }
-}
diff --git a/src/layouts/default/tabs/types.ts b/src/layouts/default/tabs/types.ts
deleted file mode 100644
index 3a8cfd9..0000000
--- a/src/layouts/default/tabs/types.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import type { DropMenu } from '/@/components/Dropdown/index';
-import type { RouteLocationNormalized } from 'vue-router';
-
-export enum TabContentEnum {
-  TAB_TYPE,
-  EXTRA_TYPE,
-}
-
-export type { DropMenu };
-
-export interface TabContentProps {
-  tabItem: RouteLocationNormalized;
-  type?: TabContentEnum;
-  trigger?: ('click' | 'hover' | 'contextmenu')[];
-}
-
-export enum MenuEventEnum {
-  REFRESH_PAGE,
-  CLOSE_CURRENT,
-  CLOSE_LEFT,
-  CLOSE_RIGHT,
-  CLOSE_OTHER,
-  CLOSE_ALL,
-  SCALE,
-}
diff --git a/src/layouts/default/tabs/useMultipleTabs.ts b/src/layouts/default/tabs/useMultipleTabs.ts
deleted file mode 100644
index 35b553b..0000000
--- a/src/layouts/default/tabs/useMultipleTabs.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import { toRaw, ref, nextTick } from 'vue';
-import type { RouteLocationNormalized } from 'vue-router';
-import { useDesign } from '/@/hooks/web/useDesign';
-import { useSortable } from '/@/hooks/web/useSortable';
-import { useMultipleTabStore } from '/@/store/modules/multipleTab';
-import { isNullAndUnDef } from '/@/utils/is';
-import projectSetting from '/@/settings/projectSetting';
-import { useRouter } from 'vue-router';
-
-export function initAffixTabs(): string[] {
-  const affixList = ref<RouteLocationNormalized[]>([]);
-
-  const tabStore = useMultipleTabStore();
-  const router = useRouter();
-  /**
-   * @description: Filter all fixed routes
-   */
-  function filterAffixTabs(routes: RouteLocationNormalized[]) {
-    const tabs: RouteLocationNormalized[] = [];
-    routes &&
-      routes.forEach((route) => {
-        if (route.meta && route.meta.affix) {
-          tabs.push(toRaw(route));
-        }
-      });
-    return tabs;
-  }
-
-  /**
-   * @description: Set fixed tabs
-   */
-  function addAffixTabs(): void {
-    const affixTabs = filterAffixTabs(router.getRoutes() as unknown as RouteLocationNormalized[]);
-    affixList.value = affixTabs;
-    for (const tab of affixTabs) {
-      tabStore.addTab({
-        meta: tab.meta,
-        name: tab.name,
-        path: tab.path,
-      } as unknown as RouteLocationNormalized);
-    }
-  }
-
-  let isAddAffix = false;
-
-  if (!isAddAffix) {
-    addAffixTabs();
-    isAddAffix = true;
-  }
-  return affixList.value.map((item) => item.meta?.title).filter(Boolean) as string[];
-}
-
-export function useTabsDrag(affixTextList: string[]) {
-  const tabStore = useMultipleTabStore();
-  const { multiTabsSetting } = projectSetting;
-  const { prefixCls } = useDesign('multiple-tabs');
-  nextTick(() => {
-    if (!multiTabsSetting.canDrag) return;
-    const el = document.querySelectorAll(`.${prefixCls} .ant-tabs-nav > div`)?.[0] as HTMLElement;
-    const { initSortable } = useSortable(el, {
-      filter: (e: ChangeEvent) => {
-        const text = e?.target?.innerText;
-        if (!text) return false;
-        return affixTextList.includes(text);
-      },
-      onEnd: (evt) => {
-        const { oldIndex, newIndex } = evt;
-
-        if (isNullAndUnDef(oldIndex) || isNullAndUnDef(newIndex) || oldIndex === newIndex) {
-          return;
-        }
-
-        tabStore.sortTabs(oldIndex, newIndex);
-      },
-    });
-    initSortable();
-  });
-}
diff --git a/src/layouts/default/tabs/useTabDropdown.ts b/src/layouts/default/tabs/useTabDropdown.ts
deleted file mode 100644
index 0695084..0000000
--- a/src/layouts/default/tabs/useTabDropdown.ts
+++ /dev/null
@@ -1,138 +0,0 @@
-import type { TabContentProps } from './types';
-import type { DropMenu } from '/@/components/Dropdown';
-import type { ComputedRef } from 'vue';
-
-import { computed, unref, reactive } from 'vue';
-import { MenuEventEnum } from './types';
-import { useMultipleTabStore } from '/@/store/modules/multipleTab';
-import { RouteLocationNormalized, useRouter } from 'vue-router';
-import { useTabs } from '/@/hooks/web/useTabs';
-import { useI18n } from '/@/hooks/web/useI18n';
-
-export function useTabDropdown(tabContentProps: TabContentProps, getIsTabs: ComputedRef<boolean>) {
-  const state = reactive({
-    current: null as Nullable<RouteLocationNormalized>,
-    currentIndex: 0,
-  });
-
-  const { t } = useI18n();
-  const tabStore = useMultipleTabStore();
-  const { currentRoute } = useRouter();
-  const { refreshPage, closeAll, close, closeLeft, closeOther, closeRight } = useTabs();
-
-  const getTargetTab = computed((): RouteLocationNormalized => {
-    return unref(getIsTabs) ? tabContentProps.tabItem : unref(currentRoute);
-  });
-
-  /**
-   * @description: drop-down list
-   */
-  const getDropMenuList = computed(() => {
-    if (!unref(getTargetTab)) {
-      return;
-    }
-    const { meta } = unref(getTargetTab);
-    const { path } = unref(currentRoute);
-
-    // Refresh button
-    const curItem = state.current;
-
-    const isCurItem = curItem ? curItem.path === path : false;
-    const index = state.currentIndex;
-    const refreshDisabled = !isCurItem;
-    // Close left
-    const closeLeftDisabled = index === 0 || !isCurItem;
-
-    const disabled = tabStore.getTabList.length === 1;
-
-    // Close right
-    const closeRightDisabled = !isCurItem || (index === tabStore.getTabList.length - 1 && tabStore.getLastDragEndIndex >= 0);
-    const dropMenuList: DropMenu[] = [
-      {
-        icon: 'ion:reload-sharp',
-        event: MenuEventEnum.REFRESH_PAGE,
-        text: t('layout.multipleTab.reload'),
-        disabled: refreshDisabled,
-      },
-      {
-        icon: 'clarity:close-line',
-        event: MenuEventEnum.CLOSE_CURRENT,
-        text: t('layout.multipleTab.close'),
-        disabled: !!meta?.affix || disabled,
-        divider: true,
-      },
-      {
-        icon: 'line-md:arrow-close-left',
-        event: MenuEventEnum.CLOSE_LEFT,
-        text: t('layout.multipleTab.closeLeft'),
-        disabled: closeLeftDisabled,
-        divider: false,
-      },
-      {
-        icon: 'line-md:arrow-close-right',
-        event: MenuEventEnum.CLOSE_RIGHT,
-        text: t('layout.multipleTab.closeRight'),
-        disabled: closeRightDisabled,
-        divider: true,
-      },
-      {
-        icon: 'dashicons:align-center',
-        event: MenuEventEnum.CLOSE_OTHER,
-        text: t('layout.multipleTab.closeOther'),
-        disabled: disabled || !isCurItem,
-      },
-      {
-        icon: 'clarity:minus-line',
-        event: MenuEventEnum.CLOSE_ALL,
-        text: t('layout.multipleTab.closeAll'),
-        disabled: disabled,
-      },
-    ];
-
-    return dropMenuList;
-  });
-
-  function handleContextMenu(tabItem: RouteLocationNormalized) {
-    return (e: Event) => {
-      if (!tabItem) {
-        return;
-      }
-      e?.preventDefault();
-      const index = tabStore.getTabList.findIndex((tab) => tab.path === tabItem.path);
-      state.current = tabItem;
-      state.currentIndex = index;
-    };
-  }
-
-  // Handle right click event
-  function handleMenuEvent(menu: DropMenu): void {
-    const { event } = menu;
-    switch (event) {
-      case MenuEventEnum.REFRESH_PAGE:
-        // refresh page
-        refreshPage();
-        break;
-      // Close current
-      case MenuEventEnum.CLOSE_CURRENT:
-        close(tabContentProps.tabItem);
-        break;
-      // Close left
-      case MenuEventEnum.CLOSE_LEFT:
-        closeLeft();
-        break;
-      // Close right
-      case MenuEventEnum.CLOSE_RIGHT:
-        closeRight();
-        break;
-      // Close other
-      case MenuEventEnum.CLOSE_OTHER:
-        closeOther();
-        break;
-      // Close all
-      case MenuEventEnum.CLOSE_ALL:
-        closeAll();
-        break;
-    }
-  }
-  return { getDropMenuList, handleMenuEvent, handleContextMenu };
-}
diff --git a/src/layouts/default/trigger/HeaderTrigger.vue b/src/layouts/default/trigger/HeaderTrigger.vue
deleted file mode 100644
index 33077ba..0000000
--- a/src/layouts/default/trigger/HeaderTrigger.vue
+++ /dev/null
@@ -1,23 +0,0 @@
-<template>
-  <span :class="[prefixCls, theme]" @click="toggleCollapsed"> <MenuUnfoldOutlined v-if="getCollapsed" /> <MenuFoldOutlined v-else /> </span>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { MenuUnfoldOutlined, MenuFoldOutlined } from '@ant-design/icons-vue';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { propTypes } from '/@/utils/propTypes';
-
-  export default defineComponent({
-    name: 'HeaderTrigger',
-    components: { MenuUnfoldOutlined, MenuFoldOutlined },
-    props: {
-      theme: propTypes.oneOf(['light', 'dark']),
-    },
-    setup() {
-      const { getCollapsed, toggleCollapsed } = useMenuSetting();
-      const { prefixCls } = useDesign('layout-header-trigger');
-      return { getCollapsed, toggleCollapsed, prefixCls };
-    },
-  });
-</script>
diff --git a/src/layouts/default/trigger/SiderTrigger.vue b/src/layouts/default/trigger/SiderTrigger.vue
deleted file mode 100644
index 0eb38b5..0000000
--- a/src/layouts/default/trigger/SiderTrigger.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-<template>
-  <div @click.stop="toggleCollapsed">
-    <DoubleRightOutlined v-if="getCollapsed" />
-    <DoubleLeftOutlined v-else />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { DoubleRightOutlined, DoubleLeftOutlined } from '@ant-design/icons-vue';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-
-  export default defineComponent({
-    name: 'SiderTrigger',
-    components: { DoubleRightOutlined, DoubleLeftOutlined },
-    setup() {
-      const { getCollapsed, toggleCollapsed } = useMenuSetting();
-
-      return { getCollapsed, toggleCollapsed };
-    },
-  });
-</script>
diff --git a/src/layouts/default/trigger/index.vue b/src/layouts/default/trigger/index.vue
deleted file mode 100644
index 61f43b3..0000000
--- a/src/layouts/default/trigger/index.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-<template>
-  <SiderTrigger v-if="sider" />
-  <HeaderTrigger v-else :theme="theme" />
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-  import { propTypes } from '/@/utils/propTypes';
-  import HeaderTrigger from './HeaderTrigger.vue';
-
-  export default defineComponent({
-    name: 'LayoutTrigger',
-    components: {
-      SiderTrigger: createAsyncComponent(() => import('./SiderTrigger.vue')),
-      HeaderTrigger: HeaderTrigger,
-    },
-    props: {
-      sider: propTypes.bool.def(true),
-      theme: propTypes.oneOf(['light', 'dark']),
-    },
-  });
-</script>
diff --git a/src/layouts/iframe/index.vue b/src/layouts/iframe/index.vue
deleted file mode 100644
index 09900cc..0000000
--- a/src/layouts/iframe/index.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-<template>
-  <div v-if="showFrame">
-    <template v-for="frame in getFramePages" :key="frame.path">
-      <FramePage v-if="frame.meta.frameSrc && hasRenderFrame(frame.name)" v-show="showIframe(frame)" :frameSrc="frame.meta.frameSrc" />
-    </template>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, unref, computed } from 'vue';
-  import FramePage from '/@/views/sys/iframe/index.vue';
-
-  import { useFrameKeepAlive } from './useFrameKeepAlive';
-
-  export default defineComponent({
-    name: 'FrameLayout',
-    components: { FramePage },
-    setup() {
-      const { getFramePages, hasRenderFrame, showIframe } = useFrameKeepAlive();
-
-      const showFrame = computed(() => unref(getFramePages).length > 0);
-
-      return { getFramePages, hasRenderFrame, showIframe, showFrame };
-    },
-  });
-</script>
diff --git a/src/layouts/iframe/useFrameKeepAlive.ts b/src/layouts/iframe/useFrameKeepAlive.ts
deleted file mode 100644
index e84c49f..0000000
--- a/src/layouts/iframe/useFrameKeepAlive.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import type { AppRouteRecordRaw } from '/@/router/types';
-
-import { computed, toRaw, unref } from 'vue';
-
-import { useMultipleTabStore } from '/@/store/modules/multipleTab';
-
-import { uniqBy } from 'lodash-es';
-
-import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
-
-import { useRouter } from 'vue-router';
-
-export function useFrameKeepAlive() {
-  const router = useRouter();
-  const { currentRoute } = router;
-  const { getShowMultipleTab } = useMultipleTabSetting();
-  const tabStore = useMultipleTabStore();
-  const getFramePages = computed(() => {
-    const ret = getAllFramePages(toRaw(router.getRoutes()) as unknown as AppRouteRecordRaw[]) || [];
-    return ret;
-  });
-
-  const getOpenTabList = computed((): string[] => {
-    return tabStore.getTabList.reduce((prev: string[], next) => {
-      if (next.meta && Reflect.has(next.meta, 'frameSrc')) {
-        prev.push(next.name as string);
-      }
-      return prev;
-    }, []);
-  });
-
-  function getAllFramePages(routes: AppRouteRecordRaw[]): AppRouteRecordRaw[] {
-    let res: AppRouteRecordRaw[] = [];
-    for (const route of routes) {
-      const { meta: { frameSrc } = {}, children } = route;
-      if (frameSrc) {
-        res.push(route);
-      }
-      if (children && children.length) {
-        res.push(...getAllFramePages(children));
-      }
-    }
-    res = uniqBy(res, 'name');
-    return res;
-  }
-
-  function showIframe(item: AppRouteRecordRaw) {
-    return item.name === unref(currentRoute).name;
-  }
-
-  function hasRenderFrame(name: string) {
-    if (!unref(getShowMultipleTab)) {
-      return router.currentRoute.value.name === name;
-    }
-    return unref(getOpenTabList).includes(name);
-  }
-
-  return { hasRenderFrame, getFramePages, showIframe, getAllFramePages };
-}
diff --git a/src/layouts/page/index.vue b/src/layouts/page/index.vue
deleted file mode 100644
index dc1d4fc..0000000
--- a/src/layouts/page/index.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <RouterView>
-    <template #default="{ Component, route }">
-      <!--      <transition-->
-      <!--        :name="-->
-      <!--          getTransitionName({-->
-      <!--            route,-->
-      <!--            openCache,-->
-      <!--            enableTransition: getEnableTransition,-->
-      <!--            cacheTabs: getCaches,-->
-      <!--            def: getBasicTransition,-->
-      <!--          })-->
-      <!--        "-->
-      <!--        mode="out-in"-->
-      <!--        appear-->
-      <!--      >-->
-      <keep-alive v-if="openCache" :include="getCaches">
-        <component :is="Component" :key="route.fullPath" />
-      </keep-alive>
-      <component v-else :is="Component" :key="route.fullPath" />
-      <!--      </transition>-->
-    </template>
-  </RouterView>
-  <FrameLayout v-if="getCanEmbedIFramePage" />
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent, unref } from 'vue';
-
-  import FrameLayout from '/@/layouts/iframe/index.vue';
-
-  import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-
-  import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
-  import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
-  import { getTransitionName } from './transition';
-
-  import { useMultipleTabStore } from '/@/store/modules/multipleTab';
-
-  export default defineComponent({
-    name: 'PageLayout',
-    components: { FrameLayout },
-    setup() {
-      const { getShowMultipleTab } = useMultipleTabSetting();
-      const tabStore = useMultipleTabStore();
-
-      const { getOpenKeepAlive, getCanEmbedIFramePage } = useRootSetting();
-
-      const { getBasicTransition, getEnableTransition } = useTransitionSetting();
-
-      const openCache = computed(() => unref(getOpenKeepAlive) && unref(getShowMultipleTab));
-
-      const getCaches = computed((): string[] => {
-        if (!unref(getOpenKeepAlive)) {
-          return [];
-        }
-        return tabStore.getCachedTabList;
-      });
-
-      return {
-        getTransitionName,
-        openCache,
-        getEnableTransition,
-        getBasicTransition,
-        getCaches,
-        getCanEmbedIFramePage,
-      };
-    },
-  });
-</script>
diff --git a/src/layouts/page/transition.ts b/src/layouts/page/transition.ts
deleted file mode 100644
index 9e93009..0000000
--- a/src/layouts/page/transition.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import type { FunctionalComponent } from 'vue';
-import type { RouteLocation } from 'vue-router';
-
-export interface DefaultContext {
-  Component: FunctionalComponent & { type: Recordable };
-  route: RouteLocation;
-}
-
-export function getTransitionName({
-  route,
-  openCache,
-  cacheTabs,
-  enableTransition,
-  def,
-}: Pick<DefaultContext, 'route'> & {
-  enableTransition: boolean;
-  openCache: boolean;
-  def: string;
-  cacheTabs: string[];
-}): string | undefined {
-  if (!enableTransition) {
-    return undefined;
-  }
-
-  const isInCache = cacheTabs.includes(route.name as string);
-  const transitionName = 'fade-slide';
-  let name: string | undefined = transitionName;
-
-  if (openCache) {
-    name = isInCache && route.meta.loaded ? transitionName : undefined;
-  }
-  return name || (route.meta.transitionName as string) || def;
-}
diff --git a/src/locales/helper.ts b/src/locales/helper.ts
deleted file mode 100644
index 4f78439..0000000
--- a/src/locales/helper.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import type { LocaleType } from '/#/config';
-
-import { set } from 'lodash-es';
-
-export const loadLocalePool: LocaleType[] = [];
-
-export function setHtmlPageLang(locale: LocaleType) {
-  document.querySelector('html')?.setAttribute('lang', locale);
-}
-
-export function setLoadLocalePool(cb: (loadLocalePool: LocaleType[]) => void) {
-  cb(loadLocalePool);
-}
-
-export function genMessage(langs: Record<string, Record<string, any>>, prefix = 'lang') {
-  const obj: Recordable = {};
-
-  Object.keys(langs).forEach((key) => {
-    const langFileModule = langs[key].default;
-    let fileName = key.replace(`./${prefix}/`, '').replace(/^\.\//, '');
-    const lastIndex = fileName.lastIndexOf('.');
-    fileName = fileName.substring(0, lastIndex);
-    const keyList = fileName.split('/');
-    const moduleName = keyList.shift();
-    const objKey = keyList.join('.');
-
-    if (moduleName) {
-      if (objKey) {
-        set(obj, moduleName, obj[moduleName] || {});
-        set(obj[moduleName], objKey, langFileModule);
-      } else {
-        set(obj, moduleName, langFileModule || {});
-      }
-    }
-  });
-  return obj;
-}
diff --git a/src/locales/lang/en.ts b/src/locales/lang/en.ts
deleted file mode 100644
index 57d8aad..0000000
--- a/src/locales/lang/en.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { genMessage } from '../helper';
-import antdLocale from 'ant-design-vue/es/locale/en_US';
-//import momentLocale from 'moment/dist/locale/eu';
-
-const modules = import.meta.glob('./en/**/*.ts', { eager: true });
-export default {
-  message: {
-    ...genMessage(modules as Recordable<Recordable>, 'en'),
-    antdLocale,
-  },
-  dateLocale: null,
-  dateLocaleName: 'en',
-};
diff --git a/src/locales/lang/en/common.ts b/src/locales/lang/en/common.ts
deleted file mode 100644
index f7cdce0..0000000
--- a/src/locales/lang/en/common.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-export default {
-  okText: 'OK',
-  closeText: 'Close',
-  cancelText: 'Cancel',
-  loadingText: 'Loading...',
-  saveText: 'Save',
-  delText: 'Delete',
-  resetText: 'Reset',
-  searchText: 'Search',
-  queryText: 'Search',
-
-  inputText: 'Please enter',
-  chooseText: 'Please choose',
-
-  redo: 'Refresh',
-  back: 'Back',
-
-  light: 'Light',
-  dark: 'Dark',
-};
diff --git a/src/locales/lang/en/component.ts b/src/locales/lang/en/component.ts
deleted file mode 100644
index b93dbd5..0000000
--- a/src/locales/lang/en/component.ts
+++ /dev/null
@@ -1,129 +0,0 @@
-export default {
-  app: {
-    searchNotData: 'No search results yet',
-    toSearch: 'to search',
-    toNavigate: 'to navigate',
-  },
-  countdown: {
-    normalText: 'Get SMS code',
-    sendText: 'Reacquire in {0}s',
-  },
-  cropper: {
-    selectImage: 'Select Image',
-    uploadSuccess: 'Uploaded success!',
-    modalTitle: 'Avatar upload',
-    okText: 'Confirm and upload',
-    btn_reset: 'Reset',
-    btn_rotate_left: 'Counterclockwise rotation',
-    btn_rotate_right: 'Clockwise rotation',
-    btn_scale_x: 'Flip horizontal',
-    btn_scale_y: 'Flip vertical',
-    btn_zoom_in: 'Zoom in',
-    btn_zoom_out: 'Zoom out',
-    preview: 'Preivew',
-  },
-  drawer: {
-    loadingText: 'Loading...',
-    cancelText: 'Close',
-    okText: 'Confirm',
-  },
-  excel: {
-    exportModalTitle: 'Export data',
-    fileType: 'File type',
-    fileName: 'File name',
-  },
-  form: {
-    putAway: 'Put away',
-    unfold: 'Unfold',
-    maxTip: 'The number of characters should be less than {0}',
-    apiSelectNotFound: 'Wait for data loading to complete...',
-  },
-  icon: {
-    placeholder: 'Click the select icon',
-    search: 'Search icon',
-    copy: 'Copy icon successfully!',
-  },
-  menu: {
-    search: 'Menu search',
-  },
-  modal: {
-    cancelText: 'Close',
-    okText: 'Confirm',
-    close: 'Close',
-    maximize: 'Maximize',
-    restore: 'Restore',
-  },
-  table: {
-    settingDens: 'Density',
-    settingDensDefault: 'Default',
-    settingDensMiddle: 'Middle',
-    settingDensSmall: 'Compact',
-    settingColumn: 'Column settings',
-    settingColumnShow: 'Column display',
-    settingIndexColumnShow: 'Index Column',
-    settingSelectColumnShow: 'Selection Column',
-    settingFixedLeft: 'Fixed Left',
-    settingFixedRight: 'Fixed Right',
-    settingFullScreen: 'Full Screen',
-    index: 'Index',
-    total: 'total of {total}',
-  },
-  time: {
-    before: ' ago',
-    after: ' after',
-    just: 'just now',
-    seconds: ' seconds',
-    minutes: ' minutes',
-    hours: ' hours',
-    days: ' days',
-  },
-  tree: {
-    selectAll: 'Select All',
-    unSelectAll: 'Cancel Select',
-    expandAll: 'Expand All',
-    unExpandAll: 'Collapse all',
-
-    checkStrictly: 'Hierarchical association',
-    checkUnStrictly: 'Hierarchical independence',
-  },
-  upload: {
-    save: 'Save',
-    upload: 'Upload',
-    imgUpload: 'ImageUpload',
-    uploaded: 'Uploaded',
-
-    operating: 'Operating',
-    del: 'Delete',
-    download: 'download',
-    saveWarn: 'Please wait for the file to upload and save!',
-    saveError: 'There is no file successfully uploaded and cannot be saved!',
-
-    preview: 'Preview',
-    choose: 'Select the file',
-
-    accept: 'Support {0} format',
-    acceptUpload: 'Only upload files in {0} format',
-    maxSize: 'A single file does not exceed {0}MB ',
-    maxSizeMultiple: 'Only upload files up to {0}MB!',
-    maxNumber: 'Only upload up to {0} files',
-
-    legend: 'Legend',
-    fileName: 'File name',
-    fileSize: 'File size',
-    fileStatue: 'File status',
-
-    startUpload: 'Start upload',
-    uploadSuccess: 'Upload successfully',
-    uploadError: 'Upload failed',
-    uploading: 'Uploading',
-    uploadWait: 'Please wait for the file upload to finish',
-    reUploadFailed: 'Re-upload failed files',
-  },
-  verify: {
-    error: 'verification failed锛�',
-    time: 'The verification is successful and it takes {time} seconds锛�',
-    redoTip: 'Click the picture to refresh',
-    dragText: 'Hold down the slider and drag',
-    successText: 'Verified',
-  },
-};
diff --git a/src/locales/lang/en/layout.ts b/src/locales/lang/en/layout.ts
deleted file mode 100644
index 694c30d..0000000
--- a/src/locales/lang/en/layout.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-export default {
-	footer: { onlinePreview: 'Preview', onlineDocument: 'Document' },
-	header: {
-		// user dropdown
-		dropdownItemDoc: 'Document',
-		dropdownItemLoginOut: 'Login Out',
-		dropdownItemSwitchPassword: 'Password Change',
-		dropdownItemSwitchDepart: 'Switch Department',
-		dropdownItemRefreshCache: 'Clean cache',
-		dropdownItemSwitchAccount: 'Account Setting',
-
-		tooltipErrorLog: 'Error log',
-		tooltipLock: 'Lock screen',
-		tooltipNotify: 'Notification',
-
-		tooltipEntryFull: 'Full Screen',
-		tooltipExitFull: 'Exit Full Screen',
-
-		// lock
-		lockScreenPassword: 'Lock screen password',
-		lockScreen: 'Lock screen',
-		lockScreenBtn: 'Locking',
-
-		home: 'Home',
-	},
-	multipleTab: {
-		reload: 'Refresh current',
-		close: 'Close current',
-		closeLeft: 'Close Left',
-		closeRight: 'Close Right',
-		closeOther: 'Close Other',
-		closeAll: 'Close All',
-	},
-	setting: {
-		// content mode
-		contentModeFull: 'Full',
-		contentModeFixed: 'Fixed width',
-		// topMenu align
-		topMenuAlignLeft: 'Left',
-		topMenuAlignRight: 'Center',
-		topMenuAlignCenter: 'Right',
-		// menu trigger
-		menuTriggerNone: 'Not Show',
-		menuTriggerBottom: 'Bottom',
-		menuTriggerTop: 'Top',
-		// menu type
-		menuTypeSidebar: 'Left menu mode',
-		menuTypeMixSidebar: 'Left menu mixed mode',
-		menuTypeMix: 'Top Menu Mix mode',
-		menuTypeTopMenu: 'Top menu mode',
-
-		on: 'On',
-		off: 'Off',
-		minute: 'Minute',
-
-		operatingTitle: 'Successful!',
-		operatingContent: 'The copy is successful, please go to src/settings/projectSetting.ts to modify the configuration!',
-		resetSuccess: 'Successfully reset!',
-
-		copyBtn: 'Copy',
-		clearBtn: 'Clear cache and to the login page',
-
-		drawerTitle: 'Configuration',
-
-		darkMode: 'Dark mode',
-		navMode: 'Navigation mode',
-		interfaceFunction: 'Interface function',
-		interfaceDisplay: 'Interface display',
-		animation: 'Animation',
-		splitMenu: 'Split menu',
-		closeMixSidebarOnChange: 'Switch page to close menu',
-
-		sysTheme: 'System theme',
-		headerTheme: 'Header theme',
-		sidebarTheme: 'Menu theme',
-
-		menuDrag: 'Drag Sidebar',
-		menuSearch: 'Menu search',
-		menuAccordion: 'Sidebar accordion',
-		menuCollapse: 'Collapse menu',
-		collapseMenuDisplayName: 'Collapse menu display name',
-		topMenuLayout: 'Top menu layout',
-		menuCollapseButton: 'Menu collapse button',
-		contentMode: 'Content area width',
-		expandedMenuWidth: 'Expanded menu width',
-
-		breadcrumb: 'Breadcrumbs',
-		breadcrumbIcon: 'Breadcrumbs Icon',
-		tabs: 'Tabs',
-		tabDetail: 'Tab Detail',
-		tabsQuickBtn: 'Tabs quick button',
-		tabsRedoBtn: 'Tabs redo button',
-		tabsFoldBtn: 'Tabs flod button',
-		tabsTheme: 'tabs theme',
-		tabsThemeSmooth: 'Smooth',
-		tabsThemeCard: 'Card',
-		tabsThemeSimple: 'Simple',
-		sidebar: 'Sidebar',
-		header: 'Header',
-		footer: 'Footer',
-		fullContent: 'Full content',
-		grayMode: 'Gray mode',
-		colorWeak: 'Color Weak Mode',
-
-		progress: 'Progress',
-		switchLoading: 'Switch Loading',
-		switchAnimation: 'Switch animation',
-		animationType: 'Animation type',
-
-		autoScreenLock: 'Auto screen lock',
-		notAutoScreenLock: 'Not auto lock',
-
-		fixedHeader: 'Fixed header',
-		fixedSideBar: 'Fixed Sidebar',
-
-		mixSidebarTrigger: 'Mixed menu Trigger',
-		triggerHover: 'Hover',
-		triggerClick: 'Click',
-
-		mixSidebarFixed: 'Fixed expanded menu',
-	},
-}
diff --git a/src/locales/lang/en/routes/basic.ts b/src/locales/lang/en/routes/basic.ts
deleted file mode 100644
index b6faa00..0000000
--- a/src/locales/lang/en/routes/basic.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export default {
-  login: 'Login',
-  errorLogList: 'Error Log',
-};
diff --git a/src/locales/lang/en/routes/dashboard.ts b/src/locales/lang/en/routes/dashboard.ts
deleted file mode 100644
index 6d047b5..0000000
--- a/src/locales/lang/en/routes/dashboard.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export default {
-  dashboard: 'Dashboard',
-  about: 'About',
-  workbench: 'Workbench',
-  analysis: 'Analysis',
-};
diff --git a/src/locales/lang/en/routes/demo.ts b/src/locales/lang/en/routes/demo.ts
deleted file mode 100644
index b299192..0000000
--- a/src/locales/lang/en/routes/demo.ts
+++ /dev/null
@@ -1,199 +0,0 @@
-export default {
-  charts: {
-    baiduMap: 'Baidu map',
-    aMap: 'A map',
-    googleMap: 'Google map',
-    charts: 'Chart',
-    map: 'Map',
-    line: 'Line',
-    pie: 'Pie',
-  },
-  comp: {
-    comp: 'Component',
-    basic: 'Basic',
-    transition: 'Animation',
-    countTo: 'Count To',
-
-    scroll: 'Scroll',
-    scrollBasic: 'Basic',
-    scrollAction: 'Scroll Function',
-    virtualScroll: 'Virtual Scroll',
-
-    tree: 'Tree',
-
-    treeBasic: 'Basic',
-    editTree: 'Searchable/toolbar',
-    actionTree: 'Function operation',
-
-    modal: 'Modal',
-    drawer: 'Drawer',
-    desc: 'Desc',
-
-    lazy: 'Lazy',
-    lazyBasic: 'Basic',
-    lazyTransition: 'Animation',
-
-    verify: 'Verify',
-    verifyDrag: 'Drag ',
-    verifyRotate: 'Picture Restore',
-
-    qrcode: 'QR code',
-    strength: 'Password strength',
-    upload: 'Upload',
-
-    loading: 'Loading',
-
-    time: 'Relative Time',
-    cropperImage: 'Cropper Image',
-    cardList: 'Card List',
-  },
-  editor: {
-    editor: 'Editor',
-    jsonEditor: 'Json editor',
-    markdown: 'Markdown editor',
-
-    tinymce: 'Rich text',
-    tinymceBasic: 'Basic',
-    tinymceForm: 'embedded form',
-  },
-  excel: {
-    excel: 'Excel',
-    customExport: 'Select export format',
-    jsonExport: 'JSON data export',
-    arrayExport: 'Array data export',
-    importExcel: 'Import',
-  },
-  feat: {
-    feat: 'Page Function',
-    icon: 'Icon',
-    tabs: 'Tabs',
-    tabDetail: 'Tab Detail',
-    sessionTimeout: 'Session Timeout',
-    print: 'Print',
-    contextMenu: 'Context Menu',
-    download: 'Download',
-    clickOutSide: 'ClickOutSide',
-    imgPreview: 'Picture Preview',
-    copy: 'Clipboard',
-    msg: 'Message prompt',
-    watermark: 'Watermark',
-    ripple: 'Ripple',
-    fullScreen: 'Full Screen',
-    errorLog: 'Error Log',
-    tab: 'Tab with parameters',
-    tab1: 'Tab with parameter 1',
-    tab2: 'Tab with parameter 2',
-    menu: 'Menu with parameters',
-    menu1: 'Menu with parameters 1',
-    menu2: 'Menu with parameters 2',
-
-    ws: 'Websocket test',
-
-    breadcrumb: 'Breadcrumbs',
-    breadcrumbFlat: 'Flat Mode',
-    breadcrumbFlatDetail: 'Flat mode details',
-
-    breadcrumbChildren: 'Level mode',
-    breadcrumbChildrenDetail: 'Level mode detail',
-  },
-  flow: {
-    name: 'Graphics editor',
-    flowChart: 'FlowChart',
-  },
-  form: {
-    form: 'Form',
-    basic: 'Basic',
-    useForm: 'useForm',
-    refForm: 'RefForm',
-    advancedForm: 'Shrinkable',
-    ruleForm: 'Form validation',
-    dynamicForm: 'Dynamic',
-    customerForm: 'Custom',
-    appendForm: 'Append',
-  },
-  iframe: {
-    frame: 'External',
-    antv: 'antVue doc (embedded)',
-    doc: 'Project doc (embedded)',
-    docExternal: 'Project doc (external)',
-  },
-  level: { level: 'MultiMenu' },
-  page: {
-    page: 'Page',
-
-    form: 'Form',
-    formBasic: 'Basic Form',
-    formStep: 'Step Form',
-    formHigh: 'Advanced Form',
-
-    desc: 'Details',
-    descBasic: 'Basic Details',
-    descHigh: 'Advanced Details',
-
-    result: 'Result',
-    resultSuccess: 'Success',
-    resultFail: 'Failed',
-
-    account: 'Personal',
-    accountCenter: 'Personal Center',
-    accountSetting: 'Personal Settings',
-
-    exception: 'Exception',
-    netWorkError: 'Network Error',
-    notData: 'No data',
-
-    list: 'List page',
-    listCard: 'Card list',
-    basic: 'Basic list',
-    listBasic: 'Basic list',
-    listSearch: 'Search list',
-  },
-  permission: {
-    permission: 'Permission',
-
-    front: 'front-end',
-    frontPage: 'Page',
-    frontBtn: 'Button',
-    frontTestA: 'Test page A',
-    frontTestB: 'Test page B',
-
-    back: 'background',
-    backPage: 'Page',
-    backBtn: 'Button',
-  },
-  setup: {
-    page: 'Intro page',
-  },
-  system: {
-    moduleName: 'System management',
-
-    account: 'Account management',
-    account_detail: 'Account detail',
-    password: 'Change password',
-
-    dept: 'Department management',
-
-    menu: 'Menu management',
-    role: 'Role management',
-  },
-  table: {
-    table: 'Table',
-
-    basic: 'Basic',
-    treeTable: 'Tree',
-    fetchTable: 'Remote loading',
-    fixedColumn: 'Fixed column',
-    customerCell: 'Custom column',
-    formTable: 'Open search',
-    useTable: 'UseTable',
-    refTable: 'RefTable',
-    multipleHeader: 'MultiLevel header',
-    mergeHeader: 'Merge cells',
-    expandTable: 'Expandable table',
-    fixedHeight: 'Fixed height',
-    footerTable: 'Footer',
-    editCellTable: 'Editable cell',
-    editRowTable: 'Editable row',
-    authColumn: 'Auth column',
-  },
-};
diff --git a/src/locales/lang/en/sys.ts b/src/locales/lang/en/sys.ts
deleted file mode 100644
index e0d54c0..0000000
--- a/src/locales/lang/en/sys.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-export default {
-  api: {
-    operationFailed: 'Operation failed',
-    errorTip: 'Error Tip',
-    errorMessage: 'The operation failed, the system is abnormal!',
-    timeoutMessage: 'Login timed out, please log in again!',
-    apiTimeoutMessage: 'The interface request timed out, please refresh the page and try again!',
-    apiRequestFailed: 'The interface request failed, please try again later!',
-    networkException: 'network anomaly',
-    networkExceptionMsg: 'Please check if your network connection is normal! The network is abnormal',
-
-    errMsg401: 'The user does not have permission (token, user name, password error)!',
-    errMsg403: 'The user is authorized, but access is forbidden!',
-    errMsg404: 'Network request error, the resource was not found!',
-    errMsg405: 'Network request error, request method not allowed!',
-    errMsg408: 'Network request timed out!',
-    errMsg500: 'Server error, please contact the administrator!',
-    errMsg501: 'The network is not implemented!',
-    errMsg502: 'Network Error!',
-    errMsg503: 'The service is unavailable, the server is temporarily overloaded or maintained!',
-    errMsg504: 'Network timeout!',
-    errMsg505: 'The http version does not support the request!',
-  },
-  app: {
-    logoutTip: 'Reminder',
-    logoutMessage: 'Confirm to exit the system?',
-    menuLoading: 'Menu loading...',
-  },
-  errorLog: {
-    tableTitle: 'Error log list',
-    tableColumnType: 'Type',
-    tableColumnDate: 'Time',
-    tableColumnFile: 'File',
-    tableColumnMsg: 'Error message',
-    tableColumnStackMsg: 'Stack info',
-
-    tableActionDesc: 'Details',
-
-    modalTitle: 'Error details',
-
-    fireVueError: 'Fire vue error',
-    fireResourceError: 'Fire resource error',
-    fireAjaxError: 'Fire ajax error',
-
-    enableMessage: 'Only effective when useErrorHandle=true in `/src/settings/projectSetting.ts`.',
-  },
-  exception: {
-    backLogin: 'Back Login',
-    backHome: 'Back Home',
-    subTitle403: "Sorry, you don't have access to this page.",
-    subTitle404: 'Sorry, the page you visited does not exist.',
-    subTitle500: 'Sorry, the server is reporting an error.',
-    noDataTitle: 'No data on the current page.',
-    networkErrorTitle: 'Network Error',
-    networkErrorSubTitle: 'Sorry锛孻our network connection has been disconnected, please check your network!',
-  },
-  lock: {
-    unlock: 'Click to unlock',
-    alert: 'Lock screen password error',
-    backToLogin: 'Back to login',
-    entry: 'Enter the system',
-    placeholder: 'Please enter the lock screen password or user password',
-  },
-  login: {
-    backSignIn: 'Back sign in',
-    mobileSignInFormTitle: 'Mobile sign in',
-    qrSignInFormTitle: 'Qr code sign in',
-    signInFormTitle: 'Sign in',
-    signUpFormTitle: 'Sign up',
-    forgetFormTitle: 'Reset password',
-
-    signInTitle: 'Backstage management system',
-    signInDesc: 'Enter your personal details and get started!',
-    policy: 'I agree to the xxx Privacy Policy',
-    scanSign: `scanning the code to complete the login`,
-
-    loginButton: 'Sign in',
-    registerButton: 'Sign up',
-    rememberMe: 'Remember me',
-    forgetPassword: 'Forget Password?',
-    otherSignIn: 'Sign in with',
-
-    // notify
-    loginSuccessTitle: 'Login successful',
-    loginSuccessDesc: 'Welcome back',
-
-    // placeholder
-    accountPlaceholder: 'Please input username',
-    passwordPlaceholder: 'Please input password',
-    smsPlaceholder: 'Please input sms code',
-    mobilePlaceholder: 'Please input mobile',
-    policyPlaceholder: 'Register after checking',
-    diffPwd: 'The two passwords are inconsistent',
-
-    userName: 'Username',
-    password: 'Password',
-    inputCode: 'Verification code',
-    confirmPassword: 'Confirm Password',
-    email: 'Email',
-    smsCode: 'SMS code',
-    mobile: 'Mobile',
-
-    //閲嶇疆瀵嗙爜椤甸潰鑻辨枃
-    authentication:'authentication',
-    resetLoginPassword:'reset login password',
-    resetSuccess:'reset succeeded',
-    nextStep:'next step',
-    goToLogin:'go to login'
-  },
-};
diff --git a/src/locales/lang/zh-CN/common.ts b/src/locales/lang/zh-CN/common.ts
deleted file mode 100644
index 478c625..0000000
--- a/src/locales/lang/zh-CN/common.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-export default {
-  okText: '纭',
-  closeText: '鍏抽棴',
-  cancelText: '鍙栨秷',
-  loadingText: '鍔犺浇涓�...',
-  saveText: '淇濆瓨',
-  delText: '鍒犻櫎',
-  resetText: '閲嶇疆',
-  searchText: '鎼滅储',
-  queryText: '鏌ヨ',
-
-  inputText: '璇疯緭鍏�',
-  chooseText: '璇烽�夋嫨',
-
-  redo: '鍒锋柊',
-  back: '杩斿洖',
-
-  light: '浜壊涓婚',
-  dark: '榛戞殫涓婚',
-};
diff --git a/src/locales/lang/zh-CN/component.ts b/src/locales/lang/zh-CN/component.ts
deleted file mode 100644
index d9b54eb..0000000
--- a/src/locales/lang/zh-CN/component.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-export default {
-  app: {
-    searchNotData: '鏆傛棤鎼滅储缁撴灉',
-    toSearch: '纭',
-    toNavigate: '鍒囨崲',
-  },
-  countdown: {
-    normalText: '鑾峰彇楠岃瘉鐮�',
-    sendText: '{0}绉掑悗閲嶆柊鑾峰彇',
-  },
-  cropper: {
-    selectImage: '閫夋嫨鍥剧墖',
-    uploadSuccess: '涓婁紶鎴愬姛',
-    modalTitle: '澶村儚涓婁紶',
-    okText: '纭骞朵笂浼�',
-    btn_reset: '閲嶇疆',
-    btn_rotate_left: '閫嗘椂閽堟棆杞�',
-    btn_rotate_right: '椤烘椂閽堟棆杞�',
-    btn_scale_x: '姘村钩缈昏浆',
-    btn_scale_y: '鍨傜洿缈昏浆',
-    btn_zoom_in: '鏀惧ぇ',
-    btn_zoom_out: '缂╁皬',
-    preview: '棰勮',
-  },
-  drawer: {
-    loadingText: '鍔犺浇涓�...',
-    cancelText: '鍏抽棴',
-    okText: '纭',
-  },
-  excel: {
-    exportModalTitle: '瀵煎嚭鏁版嵁',
-    fileType: '鏂囦欢绫诲瀷',
-    fileName: '鏂囦欢鍚�',
-  },
-  form: {
-    putAway: '鏀惰捣',
-    unfold: '灞曞紑',
-
-    maxTip: '瀛楃鏁板簲灏忎簬{0}浣�',
-
-    apiSelectNotFound: '璇风瓑寰呮暟鎹姞杞藉畬鎴�...',
-  },
-  icon: {
-    placeholder: '鐐瑰嚮閫夋嫨鍥炬爣',
-    search: '鎼滅储鍥炬爣',
-    copy: '澶嶅埗鍥炬爣鎴愬姛!',
-  },
-  menu: {
-    search: '鑿滃崟鎼滅储',
-  },
-  modal: {
-    cancelText: '鍏抽棴',
-    okText: '纭',
-    close: '鍏抽棴',
-    maximize: '鏈�澶у寲',
-    restore: '杩樺師',
-  },
-  table: {
-    settingDens: '瀵嗗害',
-    settingDensDefault: '榛樿',
-    settingDensMiddle: '涓瓑',
-    settingDensSmall: '绱у噾',
-    settingColumn: '鍒楄缃�',
-    settingColumnShow: '鍒楀睍绀�',
-    settingIndexColumnShow: '搴忓彿鍒�',
-    settingSelectColumnShow: '鍕鹃�夊垪',
-    settingFixedLeft: '鍥哄畾鍒板乏渚�',
-    settingFixedRight: '鍥哄畾鍒板彸渚�',
-    settingFullScreen: '鍏ㄥ睆',
-
-    index: '搴忓彿',
-
-    total: '鍏� {total} 鏉℃暟鎹�',
-  },
-  time: {
-    before: '鍓�',
-    after: '鍚�',
-    just: '鍒氬垰',
-    seconds: '绉�',
-    minutes: '鍒嗛挓',
-    hours: '灏忔椂',
-    days: '澶�',
-  },
-  tree: {
-    selectAll: '閫夋嫨鍏ㄩ儴',
-    unSelectAll: '鍙栨秷閫夋嫨',
-    expandAll: '灞曞紑鍏ㄩ儴',
-    unExpandAll: '鎶樺彔鍏ㄩ儴',
-    checkStrictly: '灞傜骇鍏宠仈',
-    checkUnStrictly: '灞傜骇鐙珛',
-  },
-  upload: {
-    save: '淇濆瓨',
-    upload: '涓婁紶',
-    imgUpload: '鍥剧墖涓婁紶',
-    uploaded: '宸蹭笂浼�',
-
-    operating: '鎿嶄綔',
-    del: '鍒犻櫎',
-    download: '涓嬭浇',
-    saveWarn: '璇风瓑寰呮枃浠朵笂浼犲悗锛屼繚瀛�!',
-    saveError: '娌℃湁涓婁紶鎴愬姛鐨勬枃浠讹紝鏃犳硶淇濆瓨!',
-
-    preview: '棰勮',
-    choose: '閫夋嫨鏂囦欢',
-
-    accept: '鏀寔{0}鏍煎紡',
-    acceptUpload: '鍙兘涓婁紶{0}鏍煎紡鏂囦欢',
-    maxSize: '鍗曚釜鏂囦欢涓嶈秴杩噞0}MB',
-    maxSizeMultiple: '鍙兘涓婁紶涓嶈秴杩噞0}MB鐨勬枃浠�!',
-    maxNumber: '鏈�澶氬彧鑳戒笂浼爗0}涓枃浠�',
-
-    legend: '鐣ョ缉鍥�',
-    fileName: '鏂囦欢鍚�',
-    fileSize: '鏂囦欢澶у皬',
-    fileStatue: '鐘舵��',
-
-    startUpload: '寮�濮嬩笂浼�',
-    uploadSuccess: '涓婁紶鎴愬姛',
-    uploadError: '涓婁紶澶辫触',
-    uploading: '涓婁紶涓�',
-    uploadWait: '璇风瓑寰呮枃浠朵笂浼犵粨鏉熷悗鎿嶄綔',
-    reUploadFailed: '閲嶆柊涓婁紶澶辫触鏂囦欢',
-  },
-  verify: {
-    error: '楠岃瘉澶辫触锛�',
-    time: '楠岃瘉鏍¢獙鎴愬姛,鑰楁椂{time}绉掞紒',
-
-    redoTip: '鐐瑰嚮鍥剧墖鍙埛鏂�',
-
-    dragText: '璇锋寜浣忔粦鍧楁嫋鍔�',
-    successText: '楠岃瘉閫氳繃',
-  },
-};
diff --git a/src/locales/lang/zh-CN/layout.ts b/src/locales/lang/zh-CN/layout.ts
deleted file mode 100644
index 1f1c253..0000000
--- a/src/locales/lang/zh-CN/layout.ts
+++ /dev/null
@@ -1,123 +0,0 @@
-export default {
-	footer: { onlinePreview: 'JEECG棣栭〉', onlineDocument: '鍦ㄧ嚎鏂囨。' },
-	header: {
-		// user dropdown
-		dropdownItemDoc: '瀹樼綉',
-		dropdownItemLoginOut: '閫�鍑虹郴缁�',
-		dropdownItemSwitchPassword: '瀵嗙爜淇敼',
-		dropdownItemSwitchDepart: '鍒囨崲閮ㄩ棬',
-		dropdownItemRefreshCache: '鍒锋柊缂撳瓨',
-		dropdownItemSwitchAccount: '璐︽埛璁剧疆',
-
-		// tooltip
-		tooltipErrorLog: '閿欒鏃ュ織',
-		tooltipLock: '閿佸畾灞忓箷',
-		tooltipNotify: '娑堟伅閫氱煡',
-
-		tooltipEntryFull: '鍏ㄥ睆',
-		tooltipExitFull: '閫�鍑哄叏灞�',
-
-		// lock
-		lockScreenPassword: '閿佸睆瀵嗙爜',
-		lockScreen: '閿佸畾灞忓箷',
-		lockScreenBtn: '閿佸畾',
-
-		home: '棣栭〉',
-	},
-	multipleTab: {
-		reload: '閲嶆柊鍔犺浇',
-		close: '鍏抽棴褰撳墠',
-		closeLeft: '鍏抽棴宸︿晶',
-		closeRight: '鍏抽棴鍙充晶',
-		closeOther: '鍏抽棴鍏跺畠',
-		closeAll: '鍏抽棴鍏ㄩ儴',
-	},
-	setting: {
-		// content mode
-		contentModeFull: '娴佸紡',
-		contentModeFixed: '瀹氬',
-		// topMenu align
-		topMenuAlignLeft: '灞呭乏',
-		topMenuAlignRight: '灞呬腑',
-		topMenuAlignCenter: '灞呭彸',
-		// menu trigger
-		menuTriggerNone: '涓嶆樉绀�',
-		menuTriggerBottom: '搴曢儴',
-		menuTriggerTop: '椤堕儴',
-		// menu type
-		menuTypeSidebar: '宸︿晶鑿滃崟妯″紡',
-		menuTypeMixSidebar: '宸︿晶鑿滃崟娣峰悎妯″紡',
-		menuTypeMix: '椤堕儴鑿滃崟娣峰悎妯″紡',
-		menuTypeTopMenu: '椤堕儴鑿滃崟妯″紡',
-
-		on: '寮�',
-		off: '鍏�',
-		minute: '鍒嗛挓',
-
-		operatingTitle: '鎿嶄綔鎴愬姛',
-		operatingContent: '澶嶅埗鎴愬姛,璇峰埌 src/settings/projectSetting.ts 涓慨鏀归厤缃紒',
-		resetSuccess: '閲嶇疆鎴愬姛锛�',
-
-		copyBtn: '鎷疯礉',
-		clearBtn: '娓呯┖缂撳瓨骞惰繑鍥炵櫥褰曢〉',
-
-		drawerTitle: '椤圭洰閰嶇疆',
-
-		darkMode: '涓婚',
-		navMode: '瀵艰埅鏍忔ā寮�',
-		interfaceFunction: '鐣岄潰璁剧疆',
-		interfaceDisplay: '鐣岄潰鏄剧ず',
-		animation: '鍔ㄧ敾',
-		splitMenu: '鍒嗗壊鑿滃崟',
-		closeMixSidebarOnChange: '鍒囨崲椤甸潰鍏抽棴鑿滃崟',
-
-		sysTheme: '绯荤粺涓婚',
-		headerTheme: '椤舵爮涓婚',
-		sidebarTheme: '鑿滃崟涓婚',
-
-		menuDrag: '渚ц竟鑿滃崟鎷栨嫿',
-		menuSearch: '鑿滃崟鎼滅储',
-		menuAccordion: '渚ц竟鑿滃崟鎵嬮鐞存ā寮�',
-		menuCollapse: '鎶樺彔鑿滃崟',
-		collapseMenuDisplayName: '鎶樺彔鑿滃崟鏄剧ず鍚嶇О',
-		topMenuLayout: '椤堕儴鑿滃崟甯冨眬',
-		menuCollapseButton: '鑿滃崟鎶樺彔鎸夐挳',
-		contentMode: '鍐呭鍖哄煙瀹藉害',
-		expandedMenuWidth: '鑿滃崟灞曞紑瀹藉害',
-
-		breadcrumb: '闈㈠寘灞�',
-		breadcrumbIcon: '闈㈠寘灞戝浘鏍�',
-		tabs: '鏍囩椤�',
-		tabDetail: '鏍囩璇︽儏椤�',
-		tabsQuickBtn: '鏍囩椤靛揩鎹锋寜閽�',
-		tabsRedoBtn: '鏍囩椤靛埛鏂版寜閽�',
-		tabsFoldBtn: '鏍囩椤垫姌鍙犳寜閽�',
-		tabsTheme: '鏍囩椤垫牱寮�',
-		tabsThemeSmooth: '鍦嗘粦',
-		tabsThemeCard: '鍗$墖',
-		tabsThemeSimple: '鏋佺畝',
-		sidebar: '宸︿晶鑿滃崟',
-		header: '椤舵爮',
-		footer: '椤佃剼',
-		fullContent: '鍏ㄥ睆鍐呭',
-		grayMode: '鐏拌壊妯″紡',
-		colorWeak: '鑹插急妯″紡',
-
-		progress: '椤堕儴杩涘害鏉�',
-		switchLoading: '鍒囨崲loading',
-		switchAnimation: '鍒囨崲鍔ㄧ敾',
-		animationType: '鍔ㄧ敾绫诲瀷',
-
-		autoScreenLock: '鑷姩閿佸睆',
-		notAutoScreenLock: '涓嶈嚜鍔ㄩ攣灞�',
-
-		fixedHeader: '鍥哄畾header',
-		fixedSideBar: '鍥哄畾Sidebar',
-
-		mixSidebarTrigger: '娣峰悎鑿滃崟瑙﹀彂鏂瑰紡',
-		triggerHover: '鎮仠',
-		triggerClick: '鐐瑰嚮',
-
-		mixSidebarFixed: '鍥哄畾灞曞紑鑿滃崟',
-	},
-}
diff --git a/src/locales/lang/zh-CN/routes/basic.ts b/src/locales/lang/zh-CN/routes/basic.ts
deleted file mode 100644
index 3d03e8e..0000000
--- a/src/locales/lang/zh-CN/routes/basic.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export default {
-  login: '鐧诲綍',
-  errorLogList: '閿欒鏃ュ織鍒楄〃',
-};
diff --git a/src/locales/lang/zh-CN/routes/dashboard.ts b/src/locales/lang/zh-CN/routes/dashboard.ts
deleted file mode 100644
index 04b1b19..0000000
--- a/src/locales/lang/zh-CN/routes/dashboard.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export default {
-  dashboard: 'Dashboard',
-  about: '鍏充簬',
-  workbench: '宸ヤ綔鍙�',
-  analysis: '鍒嗘瀽椤�',
-};
diff --git a/src/locales/lang/zh-CN/routes/demo.ts b/src/locales/lang/zh-CN/routes/demo.ts
deleted file mode 100644
index b7c2822..0000000
--- a/src/locales/lang/zh-CN/routes/demo.ts
+++ /dev/null
@@ -1,207 +0,0 @@
-export default {
-  charts: {
-    baiduMap: '鐧惧害鍦板浘',
-    aMap: '楂樺痉鍦板浘',
-    googleMap: '璋锋瓕鍦板浘',
-    charts: '鍥捐〃',
-    map: '鍦板浘',
-    line: '鎶樼嚎鍥�',
-    pie: '楗煎浘',
-  },
-  comp: {
-    comp: '缁勪欢',
-    basic: '鍩虹缁勪欢',
-    jeecg: 'Jeecg缁勪欢',
-    transition: '鍔ㄧ敾缁勪欢',
-    countTo: '鏁板瓧鍔ㄧ敾',
-    third: '绗笁鏂圭粍浠�',
-
-    scroll: '婊氬姩缁勪欢',
-    scrollBasic: '鍩虹婊氬姩',
-    scrollAction: '婊氬姩鍑芥暟',
-    virtualScroll: '铏氭嫙婊氬姩',
-
-    tree: 'Tree',
-    treeBasic: '鍩虹鏍�',
-    editTree: '鍙悳绱�/宸ュ叿鏍�',
-    actionTree: '鍑芥暟鎿嶄綔绀轰緥',
-
-    modal: '寮圭獥鎶藉眽',
-    desc: '璇︽儏缁勪欢',
-
-    lazy: '鎳掑姞杞界粍浠�',
-    lazyBasic: '鍩虹绀轰緥',
-    lazyTransition: '鍔ㄧ敾鏁堟灉',
-
-    verify: '楠岃瘉缁勪欢',
-    verifyDrag: '鎷栨嫿鏍¢獙',
-    verifyRotate: '鍥剧墖杩樺師',
-
-    qrcode: '浜岀淮鐮佺粍浠�',
-    strength: '瀵嗙爜寮哄害缁勪欢',
-    upload: '涓婁紶缁勪欢',
-
-    loading: 'Loading',
-
-    time: '鐩稿鏃堕棿',
-    cropperImage: '鍥剧墖瑁佸壀',
-    cardList: '鍗$墖鍒楄〃',
-    oneToMore: '涓�瀵瑰绀轰緥',
-    vexTable: '涓�瀵瑰绀轰緥',
-  },
-  basic: {
-    button: '鎸夐挳缁勪欢',
-  },
-  editor: {
-    editor: '缂栬緫鍣�',
-    jsonEditor: 'Json缂栬緫鍣�',
-    markdown: 'markdown缂栬緫鍣�',
-
-    tinymce: '瀵屾枃鏈�',
-    tinymceBasic: '鍩虹浣跨敤',
-    tinymceForm: '宓屽叆form',
-  },
-  excel: {
-    excel: 'Excel',
-    customExport: '閫夋嫨瀵煎嚭鏍煎紡',
-    jsonExport: 'JSON鏁版嵁瀵煎嚭',
-    arrayExport: 'Array鏁版嵁瀵煎嚭',
-    importExcel: '瀵煎叆',
-  },
-  feat: {
-    feat: '鍔熻兘',
-    icon: '鍥炬爣',
-    sessionTimeout: '鐧诲綍杩囨湡',
-    tabs: '鏍囩椤垫搷浣�',
-    tabDetail: '鏍囩璇︽儏椤�',
-    print: '鎵撳嵃',
-    contextMenu: '鍙抽敭鑿滃崟',
-    download: '鏂囦欢涓嬭浇',
-    clickOutSide: 'ClickOutSide缁勪欢',
-    imgPreview: '鍥剧墖棰勮',
-    copy: '鍓垏鏉�',
-    msg: '娑堟伅鎻愮ず',
-    watermark: '姘村嵃',
-    ripple: '姘存尝绾�',
-    fullScreen: '鍏ㄥ睆',
-    errorLog: '閿欒鏃ュ織',
-    tab: 'Tab甯﹀弬',
-    tab1: 'Tab甯﹀弬1',
-    tab2: 'Tab甯﹀弬2',
-    menu: 'Menu甯﹀弬',
-    menu1: 'Menu甯﹀弬1',
-    menu2: 'Menu甯﹀弬2',
-    ws: 'websocket娴嬭瘯',
-    breadcrumb: '闈㈠寘灞戝鑸�',
-    breadcrumbFlat: '骞崇骇妯″紡',
-    breadcrumbFlatDetail: '骞崇骇璇︽儏',
-    breadcrumbChildren: '灞傜骇妯″紡',
-    breadcrumbChildrenDetail: '灞傜骇璇︽儏',
-    fullCalendar: '鏃ュ巻(New)',
-    codemirror: '浠g爜楂樹寒(New)',
-  },
-  flow: {
-    name: '鍥惧舰缂栬緫鍣�',
-    flowChart: '娴佺▼鍥�',
-  },
-  form: {
-    form: 'Form',
-    basic: '鍩虹琛ㄥ崟',
-    useForm: 'useForm',
-    refForm: 'RefForm',
-    advancedForm: '鍙敹缂╄〃鍗�',
-    ruleForm: '琛ㄥ崟楠岃瘉',
-    dynamicForm: '鍔ㄦ�佽〃鍗�',
-    customerForm: '鑷畾涔夌粍浠�',
-    appendForm: '琛ㄥ崟澧炲垹绀轰緥',
-  },
-  modal: {
-    basic: '寮圭獥鎵╁睍',
-    drawer: '鎶藉眽鎵╁睍',
-  },
-  iframe: {
-    frame: '澶栭儴椤甸潰',
-    antv: 'antVue鏂囨。(鍐呭祵)',
-    doc: '椤圭洰鏂囨。(鍐呭祵)',
-    docExternal: '椤圭洰鏂囨。(澶栭摼)',
-  },
-  level: { level: '澶氱骇鑿滃崟' },
-  page: {
-    page: '椤甸潰',
-
-    form: '琛ㄥ崟椤�',
-    formBasic: '鍩虹琛ㄥ崟',
-    formStep: '鍒嗘琛ㄥ崟',
-    formHigh: '楂樼骇琛ㄥ崟',
-
-    desc: '璇︽儏椤�',
-    descBasic: '鍩虹璇︽儏椤�',
-    descHigh: '楂樼骇璇︽儏椤�',
-
-    result: '缁撴灉椤�',
-    resultSuccess: '鎴愬姛椤�',
-    resultFail: '澶辫触椤�',
-
-    account: '涓汉椤�',
-    accountCenter: '涓汉涓績',
-    accountSetting: '涓汉璁剧疆',
-
-    exception: '寮傚父椤�',
-    netWorkError: '缃戠粶閿欒',
-    notData: '鏃犳暟鎹�',
-
-    list: '鍒楄〃椤�',
-    listCard: '鍗$墖鍒楄〃',
-    listBasic: '鏍囧噯鍒楄〃',
-    listSearch: '鎼滅储鍒楄〃',
-  },
-  permission: {
-    permission: '鏉冮檺绠$悊',
-
-    front: '鍩轰簬鍓嶇鏉冮檺',
-    frontPage: '椤甸潰鏉冮檺',
-    frontBtn: '鎸夐挳鏉冮檺',
-    frontTestA: '鏉冮檺娴嬭瘯椤礎',
-    frontTestB: '鏉冮檺娴嬭瘯椤礏',
-
-    back: '鍩轰簬鍚庡彴鏉冮檺',
-    backPage: '椤甸潰鏉冮檺',
-    backBtn: '鎸夐挳鏉冮檺',
-  },
-  setup: {
-    page: '寮曞椤�',
-  },
-  system: {
-    moduleName: '绯荤粺绠$悊',
-    account: '璐﹀彿绠$悊',
-    account_detail: '璐﹀彿璇︽儏',
-    password: '淇敼瀵嗙爜',
-    dept: '閮ㄩ棬绠$悊',
-    menu: '鑿滃崟绠$悊',
-    test: '娴嬭瘯鍔熻兘',
-    role: '瑙掕壊绠$悊',
-  },
-  table: {
-    table: 'Table',
-    basic: '鍩虹琛ㄦ牸',
-    treeTable: '鏍戝舰琛ㄦ牸',
-    fetchTable: '杩滅▼鍔犺浇绀轰緥',
-    fixedColumn: '鍥哄畾鍒�',
-    customerCell: '鑷畾涔夊垪',
-    formTable: '寮�鍚悳绱㈠尯鍩�',
-    useTable: 'UseTable',
-    refTable: 'RefTable',
-    multipleHeader: '澶氱骇琛ㄥご',
-    mergeHeader: '鍚堝苟鍗曞厓鏍�',
-    nestedTable: '宓屽瀛愯〃鏍�',
-    expandTable: '鍙睍寮�琛ㄦ牸',
-    fixedHeight: '瀹氶珮/澶撮儴鑷畾涔�',
-    footerTable: '琛ㄥ熬琛屽悎璁�',
-    editCellTable: '鍙紪杈戝崟鍏冩牸',
-    editRowTable: '鍙紪杈戣',
-    authColumn: '鏉冮檺鍒�',
-  },
-  jeecg: {
-    JAreaLinkage: '鍖哄煙閫夋嫨',
-  },
-};
diff --git a/src/locales/lang/zh-CN/sys.ts b/src/locales/lang/zh-CN/sys.ts
deleted file mode 100644
index 90ac38f..0000000
--- a/src/locales/lang/zh-CN/sys.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-export default {
-  api: {
-    operationFailed: '鎿嶄綔澶辫触',
-    errorTip: '閿欒鎻愮ず',
-    errorMessage: '鎿嶄綔澶辫触,绯荤粺寮傚父!',
-    timeoutMessage: '鐧诲綍瓒呮椂,璇烽噸鏂扮櫥褰�!',
-    apiTimeoutMessage: '鎺ュ彛璇锋眰瓒呮椂,璇峰埛鏂伴〉闈㈤噸璇�!',
-    apiRequestFailed: '璇锋眰鍑洪敊锛岃绋嶅�欓噸璇�',
-    networkException: '缃戠粶寮傚父',
-    networkExceptionMsg: '缃戠粶寮傚父锛岃妫�鏌ユ偍鐨勭綉缁滆繛鎺ユ槸鍚︽甯�!',
-
-    errMsg401: '鐢ㄦ埛娌℃湁鏉冮檺锛堜护鐗屻�佺敤鎴峰悕銆佸瘑鐮侀敊璇級!',
-    errMsg403: '鐢ㄦ埛寰楀埌鎺堟潈锛屼絾鏄闂槸琚姝㈢殑銆�!',
-    errMsg404: '缃戠粶璇锋眰閿欒,鏈壘鍒拌璧勬簮!',
-    errMsg405: '缃戠粶璇锋眰閿欒,璇锋眰鏂规硶鏈厑璁�!',
-    errMsg408: '缃戠粶璇锋眰瓒呮椂!',
-    errMsg500: '鏈嶅姟鍣ㄩ敊璇�,璇疯仈绯荤鐞嗗憳!',
-    errMsg501: '缃戠粶鏈疄鐜�!',
-    errMsg502: '缃戠粶閿欒!',
-    errMsg503: '鏈嶅姟涓嶅彲鐢紝鏈嶅姟鍣ㄦ殏鏃惰繃杞芥垨缁存姢!',
-    errMsg504: '缃戠粶瓒呮椂!',
-    errMsg505: 'http鐗堟湰涓嶆敮鎸佽璇锋眰!',
-
-    registerMsg: '娉ㄥ唽鎴愬姛',
-  },
-  app: { logoutTip: '娓╅Θ鎻愰啋', logoutMessage: '鏄惁纭閫�鍑虹郴缁�?', menuLoading: '鑿滃崟鍔犺浇涓�...' },
-  errorLog: {
-    tableTitle: '閿欒鏃ュ織鍒楄〃',
-    tableColumnType: '绫诲瀷',
-    tableColumnDate: '鏃堕棿',
-    tableColumnFile: '鏂囦欢',
-    tableColumnMsg: '閿欒淇℃伅',
-    tableColumnStackMsg: 'stack淇℃伅',
-
-    tableActionDesc: '璇︽儏',
-
-    modalTitle: '閿欒璇︽儏',
-
-    fireVueError: '鐐瑰嚮瑙﹀彂vue閿欒',
-    fireResourceError: '鐐瑰嚮瑙﹀彂璧勬簮鍔犺浇閿欒',
-    fireAjaxError: '鐐瑰嚮瑙﹀彂ajax閿欒',
-
-    enableMessage: '鍙湪`/src/settings/projectSetting.ts` 鍐呯殑useErrorHandle=true鏃剁敓鏁�.',
-  },
-  exception: {
-    backLogin: '杩斿洖鐧诲綍',
-    backHome: '杩斿洖棣栭〉',
-    subTitle403: '鎶辨瓑锛屾偍鏃犳潈璁块棶姝ら〉闈€��',
-    subTitle404: '鎶辨瓑锛屾偍璁块棶鐨勯〉闈笉瀛樺湪銆�',
-    subTitle500: '鎶辨瓑锛屾湇鍔″櫒鎶ュ憡閿欒銆�',
-    noDataTitle: '褰撳墠椤垫棤鏁版嵁',
-    networkErrorTitle: '缃戠粶閿欒',
-    networkErrorSubTitle: '鎶辨瓑锛屾偍鐨勭綉缁滆繛鎺ュ凡鏂紑锛岃妫�鏌ユ偍鐨勭綉缁滐紒',
-  },
-  lock: {
-    unlock: '鐐瑰嚮瑙i攣',
-    alert: '閿佸睆瀵嗙爜閿欒',
-    backToLogin: '杩斿洖鐧诲綍',
-    entry: '杩涘叆绯荤粺',
-    placeholder: '璇疯緭鍏ラ攣灞忓瘑鐮佹垨鑰呯敤鎴峰瘑鐮�',
-  },
-  login: {
-    backSignIn: '杩斿洖',
-    signInFormTitle: '鐧诲綍',
-    mobileSignInFormTitle: '鎵嬫満鐧诲綍',
-    qrSignInFormTitle: '浜岀淮鐮佺櫥褰�',
-    signUpFormTitle: '娉ㄥ唽',
-    forgetFormTitle: '閲嶇疆瀵嗙爜',
-
-    signInTitle: 'Jeecg Boot',
-    signInDesc: '鏄腑鍥芥渶鍏峰奖鍝嶅姏鐨� 浼佷笟绾т綆浠g爜骞冲彴锛佸湪绾垮紑鍙戯紝鍙鍖栨嫋鎷借璁★紝闆朵唬鐮佸疄鐜�80%鐨勫熀纭�鍔熻兘~',
-    policy: '鎴戝悓鎰忔暡鏁蹭簯闅愮鏀跨瓥',
-    scanSign: `鎵爜鍚庯紝鍗冲彲瀹屾垚鐧诲綍`,
-    scanSuccess: `鎵爜鎴愬姛锛岀櫥褰曚腑`,
-
-    loginButton: '鐧诲綍',
-    registerButton: '娉ㄥ唽',
-    rememberMe: '璁颁綇鎴�',
-    forgetPassword: '蹇樿瀵嗙爜?',
-    otherSignIn: '鍏朵粬鐧诲綍鏂瑰紡',
-
-    // notify
-    loginSuccessTitle: '鐧诲綍鎴愬姛',
-    loginSuccessDesc: '娆㈣繋鍥炴潵',
-
-    // placeholder
-    accountPlaceholder: '璇疯緭鍏ヨ处鍙�',
-    passwordPlaceholder: '璇疯緭鍏ュ瘑鐮�',
-    inputCodePlaceholder: '璇疯緭鍏ラ獙璇佺爜',
-    smsPlaceholder: '璇疯緭鍏ラ獙璇佺爜',
-    mobilePlaceholder: '璇疯緭鍏ユ墜鏈哄彿鐮�',
-    policyPlaceholder: '鍕鹃�夊悗鎵嶈兘娉ㄥ唽',
-    diffPwd: '涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�',
-
-    userName: '璐﹀彿',
-    password: '瀵嗙爜',
-    inputCode: '楠岃瘉鐮�',
-    confirmPassword: '纭瀵嗙爜',
-    email: '閭',
-    smsCode: '鐭俊楠岃瘉鐮�',
-    mobile: '鎵嬫満鍙风爜',
-
-    subTitleText: '{0}绉掑悗杩斿洖鐧诲綍椤甸潰',
-
-    //閲嶇疆瀵嗙爜椤甸潰涓枃
-    authentication:'楠岃瘉韬唤',
-    resetLoginPassword:'閲嶇疆鐧诲綍瀵嗙爜',
-    resetSuccess:'閲嶇疆鎴愬姛',
-    nextStep:'涓嬩竴姝�',
-    goToLogin:'鍘荤櫥褰�'
-  },
-};
diff --git a/src/locales/lang/zh_CN.ts b/src/locales/lang/zh_CN.ts
deleted file mode 100644
index 8fc3305..0000000
--- a/src/locales/lang/zh_CN.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { genMessage } from '../helper';
-import antdLocale from 'ant-design-vue/es/locale/zh_CN';
-
-const modules = import.meta.glob('./zh-CN/**/*.ts', { eager: true });
-export default {
-  message: {
-    ...genMessage(modules as Recordable<Recordable>, 'zh-CN'),
-    antdLocale,
-  },
-};
diff --git a/src/locales/setupI18n.ts b/src/locales/setupI18n.ts
deleted file mode 100644
index 405fb0c..0000000
--- a/src/locales/setupI18n.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import type { App } from 'vue';
-import type { I18n, I18nOptions } from 'vue-i18n';
-
-import { createI18n } from 'vue-i18n';
-import { setHtmlPageLang, setLoadLocalePool } from './helper';
-import { localeSetting } from '/@/settings/localeSetting';
-import { useLocaleStoreWithOut } from '/@/store/modules/locale';
-
-const { fallback, availableLocales } = localeSetting;
-
-export let i18n: ReturnType<typeof createI18n>;
-
-async function createI18nOptions(): Promise<I18nOptions> {
-  const localeStore = useLocaleStoreWithOut();
-  const locale = localeStore.getLocale;
-  const defaultLocal = await import(`./lang/${locale}.ts`);
-  const message = defaultLocal.default?.message ?? {};
-
-  setHtmlPageLang(locale);
-  setLoadLocalePool((loadLocalePool) => {
-    loadLocalePool.push(locale);
-  });
-
-  return {
-    legacy: false,
-    locale,
-    fallbackLocale: fallback,
-    messages: {
-      [locale]: message,
-    },
-    availableLocales: availableLocales,
-    sync: true, //If you don鈥檛 want to inherit locale from global scope, you need to set sync of i18n component option to false.
-    silentTranslationWarn: true, // true - warning off
-    missingWarn: false,
-    silentFallbackWarn: true,
-  };
-}
-
-// setup i18n instance with glob
-export async function setupI18n(app: App) {
-  const options = await createI18nOptions();
-  i18n = createI18n(options) as I18n;
-  app.use(i18n);
-}
diff --git a/src/locales/useLocale.ts b/src/locales/useLocale.ts
deleted file mode 100644
index 64bd4a1..0000000
--- a/src/locales/useLocale.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Multi-language related operations
- */
-import type { LocaleType } from '/#/config';
-
-import { i18n } from './setupI18n';
-import { useLocaleStoreWithOut } from '/@/store/modules/locale';
-import { unref, computed } from 'vue';
-import { loadLocalePool, setHtmlPageLang } from './helper';
-
-interface LangModule {
-  message: Recordable;
-  dateLocale: Recordable;
-  dateLocaleName: string;
-}
-
-function setI18nLanguage(locale: LocaleType) {
-  const localeStore = useLocaleStoreWithOut();
-
-  if (i18n.mode === 'legacy') {
-    i18n.global.locale = locale;
-  } else {
-    (i18n.global.locale as any).value = locale;
-  }
-  localeStore.setLocaleInfo({ locale });
-  setHtmlPageLang(locale);
-}
-
-export function useLocale() {
-  const localeStore = useLocaleStoreWithOut();
-  const getLocale = computed(() => localeStore.getLocale);
-  const getShowLocalePicker = computed(() => localeStore.getShowPicker);
-
-  const getAntdLocale = computed((): any => {
-    return i18n.global.getLocaleMessage(unref(getLocale))?.antdLocale ?? {};
-  });
-
-  // Switching the language will change the locale of useI18n
-  // And submit to configuration modification
-  async function changeLocale(locale: LocaleType) {
-    const globalI18n = i18n.global;
-    const currentLocale = unref(globalI18n.locale);
-    if (currentLocale === locale) {
-      return locale;
-    }
-
-    if (loadLocalePool.includes(locale)) {
-      setI18nLanguage(locale);
-      return locale;
-    }
-    const langModule = ((await import(`./lang/${locale}.ts`)) as any).default as LangModule;
-    if (!langModule) return;
-
-    const { message } = langModule;
-
-    globalI18n.setLocaleMessage(locale, message);
-    loadLocalePool.push(locale);
-
-    setI18nLanguage(locale);
-    return locale;
-  }
-
-  return {
-    getLocale,
-    getShowLocalePicker,
-    changeLocale,
-    getAntdLocale,
-  };
-}
diff --git a/src/logics/error-handle/index.ts b/src/logics/error-handle/index.ts
deleted file mode 100644
index d4d0c82..0000000
--- a/src/logics/error-handle/index.ts
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * Used to configure the global error handling function, which can monitor vue errors, script errors, static resource errors and Promise errors
- */
-
-import type { ErrorLogInfo } from '/#/store';
-
-import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog';
-
-import { ErrorTypeEnum } from '/@/enums/exceptionEnum';
-import { App } from 'vue';
-import projectSetting from '/@/settings/projectSetting';
-
-/**
- * Handling error stack information
- * @param error
- */
-function processStackMsg(error: Error) {
-  if (!error.stack) {
-    return '';
-  }
-  let stack = error.stack
-    .replace(/\n/gi, '') // Remove line breaks to save the size of the transmitted content
-    .replace(/\bat\b/gi, '@') // At in chrome, @ in ff
-    .split('@') // Split information with @
-    .slice(0, 9) // The maximum stack length (Error.stackTraceLimit = 10), so only take the first 10
-    .map((v) => v.replace(/^\s*|\s*$/g, '')) // Remove extra spaces
-    .join('~') // Manually add separators for later display
-    .replace(/\?[^:]+/gi, ''); // Remove redundant parameters of js file links (?x=1 and the like)
-  const msg = error.toString();
-  if (stack.indexOf(msg) < 0) {
-    stack = msg + '@' + stack;
-  }
-  return stack;
-}
-
-/**
- * get comp name
- * @param vm
- */
-function formatComponentName(vm: any) {
-  if (vm.$root === vm) {
-    return {
-      name: 'root',
-      path: 'root',
-    };
-  }
-
-  const options = vm.$options as any;
-  if (!options) {
-    return {
-      name: 'anonymous',
-      path: 'anonymous',
-    };
-  }
-  const name = options.name || options._componentTag;
-  return {
-    name: name,
-    path: options.__file,
-  };
-}
-
-/**
- * Configure Vue error handling function
- */
-
-function vueErrorHandler(err: Error, vm: any, info: string) {
-  const errorLogStore = useErrorLogStoreWithOut();
-  const { name, path } = formatComponentName(vm);
-  errorLogStore.addErrorLogInfo({
-    type: ErrorTypeEnum.VUE,
-    name,
-    file: path,
-    message: err.message,
-    stack: processStackMsg(err),
-    detail: info,
-    url: window.location.href,
-  });
-}
-
-/**
- * Configure script error handling function
- */
-export function scriptErrorHandler(event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) {
-  if (event === 'Script error.' && !source) {
-    return false;
-  }
-  const errorInfo: Partial<ErrorLogInfo> = {};
-  colno = colno || (window.event && (window.event as any).errorCharacter) || 0;
-  errorInfo.message = event as string;
-  if (error?.stack) {
-    errorInfo.stack = error.stack;
-  } else {
-    errorInfo.stack = '';
-  }
-  const name = source ? source.substr(source.lastIndexOf('/') + 1) : 'script';
-  const errorLogStore = useErrorLogStoreWithOut();
-  errorLogStore.addErrorLogInfo({
-    type: ErrorTypeEnum.SCRIPT,
-    name: name,
-    file: source as string,
-    detail: 'lineno' + lineno,
-    url: window.location.href,
-    ...(errorInfo as Pick<ErrorLogInfo, 'message' | 'stack'>),
-  });
-  return true;
-}
-
-/**
- * Configure Promise error handling function
- */
-function registerPromiseErrorHandler() {
-  window.addEventListener(
-    'unhandledrejection',
-    function (event) {
-      const errorLogStore = useErrorLogStoreWithOut();
-      errorLogStore.addErrorLogInfo({
-        type: ErrorTypeEnum.PROMISE,
-        name: 'Promise Error!',
-        file: 'none',
-        detail: 'promise error!',
-        url: window.location.href,
-        stack: 'promise error!',
-        message: event.reason,
-      });
-    },
-    true
-  );
-}
-
-/**
- * Configure monitoring resource loading error handling function
- */
-function registerResourceErrorHandler() {
-  // Monitoring resource loading error(img,script,css,and jsonp)
-  window.addEventListener(
-    'error',
-    function (e: Event) {
-      const target = e.target ? e.target : (e.srcElement as any);
-      const errorLogStore = useErrorLogStoreWithOut();
-      errorLogStore.addErrorLogInfo({
-        type: ErrorTypeEnum.RESOURCE,
-        name: 'Resource Error!',
-        file: (e.target || ({} as any)).currentSrc,
-        detail: JSON.stringify({
-          tagName: target.localName,
-          html: target.outerHTML,
-          type: e.type,
-        }),
-        url: window.location.href,
-        stack: 'resource is not found',
-        message: (e.target || ({} as any)).localName + ' is load error',
-      });
-    },
-    true
-  );
-}
-
-/**
- * Configure global error handling
- * @param app
- */
-export function setupErrorHandle(app: App) {
-  const { useErrorHandle } = projectSetting;
-  if (!useErrorHandle) {
-    return;
-  }
-  // Vue exception monitoring;
-  app.config.errorHandler = vueErrorHandler;
-
-  // script error
-  window.onerror = scriptErrorHandler;
-
-  //  promise exception
-  registerPromiseErrorHandler();
-
-  // Static resource exception
-  registerResourceErrorHandler();
-}
diff --git a/src/logics/initAppConfig.ts b/src/logics/initAppConfig.ts
deleted file mode 100644
index a186450..0000000
--- a/src/logics/initAppConfig.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Application configuration
- */
-import type { ProjectConfig } from '/#/config';
-
-import { PROJ_CFG_KEY } from '/@/enums/cacheEnum';
-import projectSetting from '/@/settings/projectSetting';
-
-import { updateHeaderBgColor, updateSidebarBgColor } from '/@/logics/theme/updateBackground';
-import { updateColorWeak } from '/@/logics/theme/updateColorWeak';
-import { updateGrayMode } from '/@/logics/theme/updateGrayMode';
-import { updateDarkTheme } from '/@/logics/theme/dark';
-import { changeTheme } from '/@/logics/theme';
-
-import { useAppStore } from '/@/store/modules/app';
-import { useLocaleStore } from '/@/store/modules/locale';
-
-import { getCommonStoragePrefix, getStorageShortName } from '/@/utils/env';
-
-import { primaryColor } from '../../build/config/themeConfig';
-import { Persistent } from '/@/utils/cache/persistent';
-import { deepMerge } from '/@/utils';
-import { ThemeEnum } from '/@/enums/appEnum';
-
-// Initial project configuration
-export function initAppConfigStore() {
-  const localeStore = useLocaleStore();
-  const appStore = useAppStore();
-  let projCfg: ProjectConfig = Persistent.getLocal(PROJ_CFG_KEY) as ProjectConfig;
-  projCfg = deepMerge(projectSetting, projCfg || {});
-  const darkMode = appStore.getDarkMode;
-  const {
-    colorWeak,
-    grayMode,
-    themeColor,
-
-    headerSetting: { bgColor: headerBgColor } = {},
-    menuSetting: { bgColor } = {},
-  } = projCfg;
-  try {
-    if (themeColor && themeColor !== primaryColor) {
-      changeTheme(themeColor);
-    }
-
-    grayMode && updateGrayMode(grayMode);
-    colorWeak && updateColorWeak(colorWeak);
-  } catch (error) {
-    console.log(error);
-  }
-  appStore.setProjectConfig(projCfg);
-
-  // init dark mode
-  updateDarkTheme(darkMode);
-  if (darkMode === ThemeEnum.DARK) {
-    updateHeaderBgColor();
-    updateSidebarBgColor();
-  } else {
-    headerBgColor && updateHeaderBgColor(headerBgColor);
-    bgColor && updateSidebarBgColor(bgColor);
-  }
-  // init store
-  localeStore.initLocale();
-
-  setTimeout(() => {
-    clearObsoleteStorage();
-  }, 16);
-}
-
-/**
- * As the version continues to iterate, there will be more and more cache keys stored in localStorage.
- * This method is used to delete useless keys
- */
-export function clearObsoleteStorage() {
-  const commonPrefix = getCommonStoragePrefix();
-  const shortPrefix = getStorageShortName();
-
-  [localStorage, sessionStorage].forEach((item: Storage) => {
-    Object.keys(item).forEach((key) => {
-      if (key && key.startsWith(commonPrefix) && !key.startsWith(shortPrefix)) {
-        item.removeItem(key);
-      }
-    });
-  });
-}
diff --git a/src/logics/mitt/routeChange.ts b/src/logics/mitt/routeChange.ts
deleted file mode 100644
index 1f842eb..0000000
--- a/src/logics/mitt/routeChange.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Used to monitor routing changes to change the status of menus and tabs. There is no need to monitor the route, because the route status change is affected by the page rendering time, which will be slow
- */
-
-import mitt from '/@/utils/mitt';
-import type { RouteLocationNormalized } from 'vue-router';
-import { getRawRoute } from '/@/utils';
-
-const emitter = mitt();
-
-const key = Symbol();
-
-let lastChangeTab: RouteLocationNormalized;
-
-export function setRouteChange(lastChangeRoute: RouteLocationNormalized) {
-  const r = getRawRoute(lastChangeRoute);
-  emitter.emit(key, r);
-  lastChangeTab = r;
-}
-
-export function listenerRouteChange(callback: (route: RouteLocationNormalized) => void, immediate = true) {
-  emitter.on(key, callback);
-  immediate && lastChangeTab && callback(lastChangeTab);
-}
-
-export function removeTabChangeListener() {
-  emitter.clear();
-}
diff --git a/src/logics/theme/dark.ts b/src/logics/theme/dark.ts
deleted file mode 100644
index 2991e09..0000000
--- a/src/logics/theme/dark.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { darkCssIsReady, loadDarkThemeCss } from '@rys-fe/vite-plugin-theme/es/client';
-import { addClass, hasClass, removeClass } from '/@/utils/domUtils';
-
-export async function updateDarkTheme(mode: string | null = 'light') {
-  const htmlRoot = document.getElementById('htmlRoot');
-  if (!htmlRoot) {
-    return;
-  }
-  const hasDarkClass = hasClass(htmlRoot, 'dark');
-  if (mode === 'dark') {
-    if (import.meta.env.PROD && !darkCssIsReady) {
-      await loadDarkThemeCss();
-    }
-    htmlRoot.setAttribute('data-theme', 'dark');
-    if (!hasDarkClass) {
-      addClass(htmlRoot, 'dark');
-    }
-  } else {
-    htmlRoot.setAttribute('data-theme', 'light');
-    if (hasDarkClass) {
-      removeClass(htmlRoot, 'dark');
-    }
-  }
-}
diff --git a/src/logics/theme/index.ts b/src/logics/theme/index.ts
deleted file mode 100644
index 38f5b61..0000000
--- a/src/logics/theme/index.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { getThemeColors, generateColors } from '../../../build/config/themeConfig';
-
-import { replaceStyleVariables } from '@rys-fe/vite-plugin-theme/es/client';
-import { mixLighten, mixDarken, tinycolor } from '@rys-fe/vite-plugin-theme/es/colorUtils';
-
-export async function changeTheme(color: string) {
-  const colors = generateColors({
-    mixDarken,
-    mixLighten,
-    tinycolor,
-    color,
-  });
-
-  let res = await replaceStyleVariables({
-    colorVariables: [...getThemeColors(color), ...colors],
-  });
-  fixDark();
-  return res;
-}
-
-// 銆怢OWCOD-2262銆戜慨澶嶉粦鏆楁ā寮忎笅鍒囨崲鐨偆鏃犳晥鐨勯棶棰�
-async function fixDark() {
-  let el = document.getElementById('__VITE_PLUGIN_THEME__');
-  if (el) {
-    el.innerHTML = el.innerHTML.replace(/\\["']dark\\["']/g, `'dark'`);
-  }
-}
diff --git a/src/logics/theme/updateBackground.ts b/src/logics/theme/updateBackground.ts
deleted file mode 100644
index 3f15c90..0000000
--- a/src/logics/theme/updateBackground.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import { colorIsDark, lighten, darken } from '/@/utils/color';
-import { useAppStore } from '/@/store/modules/app';
-import { ThemeEnum } from '/@/enums/appEnum';
-import { setCssVar } from './util';
-
-const HEADER_BG_COLOR_VAR = '--header-bg-color';
-const HEADER_BG_HOVER_COLOR_VAR = '--header-bg-hover-color';
-const HEADER_MENU_ACTIVE_BG_COLOR_VAR = '--header-active-menu-bg-color';
-
-const SIDER_DARK_BG_COLOR = '--sider-dark-bg-color';
-const SIDER_DARK_DARKEN_BG_COLOR = '--sider-dark-darken-bg-color';
-const SIDER_LIGHTEN_BG_COLOR = '--sider-dark-lighten-bg-color';
-
-/**
- * Change the background color of the top header
- * @param color
- */
-export function updateHeaderBgColor(color?: string) {
-  const appStore = useAppStore();
-  const darkMode = appStore.getDarkMode === ThemeEnum.DARK;
-  if (!color) {
-    if (darkMode) {
-      color = '#151515';
-    } else {
-      color = appStore.getHeaderSetting.bgColor;
-    }
-  }
-  // bg color
-  setCssVar(HEADER_BG_COLOR_VAR, color);
-
-  // hover color
-  const hoverColor = lighten(color!, 6);
-  setCssVar(HEADER_BG_HOVER_COLOR_VAR, hoverColor);
-  setCssVar(HEADER_MENU_ACTIVE_BG_COLOR_VAR, hoverColor);
-
-  // Determine the depth of the color value and automatically switch the theme
-  const isDark = colorIsDark(color!);
-
-  appStore.setProjectConfig({
-    headerSetting: {
-      theme: isDark || darkMode ? ThemeEnum.DARK : ThemeEnum.LIGHT,
-    },
-  });
-}
-
-/**
- * Change the background color of the left menu
- * @param color  bg color
- */
-export function updateSidebarBgColor(color?: string) {
-  const appStore = useAppStore();
-
-  // if (!isHexColor(color)) return;
-  const darkMode = appStore.getDarkMode === ThemeEnum.DARK;
-  if (!color) {
-    if (darkMode) {
-      color = '#212121';
-    } else {
-      color = appStore.getMenuSetting.bgColor;
-    }
-  }
-  setCssVar(SIDER_DARK_BG_COLOR, color);
-  setCssVar(SIDER_DARK_DARKEN_BG_COLOR, darken(color!, 6));
-  setCssVar(SIDER_LIGHTEN_BG_COLOR, lighten(color!, 5));
-
-  // only #ffffff is light
-  // Only when the background color is #fff, the theme of the menu will be changed to light
-  const isLight = ['#fff', '#ffffff'].includes(color!.toLowerCase());
-
-  appStore.setProjectConfig({
-    menuSetting: {
-      theme: isLight && !darkMode ? ThemeEnum.LIGHT : ThemeEnum.DARK,
-    },
-  });
-}
diff --git a/src/logics/theme/updateColorWeak.ts b/src/logics/theme/updateColorWeak.ts
deleted file mode 100644
index 8a0e64a..0000000
--- a/src/logics/theme/updateColorWeak.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { toggleClass } from './util';
-
-/**
- * Change the status of the project's color weakness mode
- * @param colorWeak
- */
-export function updateColorWeak(colorWeak: boolean) {
-  toggleClass(colorWeak, 'color-weak', document.documentElement);
-}
diff --git a/src/logics/theme/updateGrayMode.ts b/src/logics/theme/updateGrayMode.ts
deleted file mode 100644
index 0fd16fe..0000000
--- a/src/logics/theme/updateGrayMode.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { toggleClass } from './util';
-
-/**
- * Change project gray mode status
- * @param gray
- */
-export function updateGrayMode(gray: boolean) {
-  toggleClass(gray, 'gray-mode', document.documentElement);
-}
diff --git a/src/logics/theme/util.ts b/src/logics/theme/util.ts
deleted file mode 100644
index 30aef37..0000000
--- a/src/logics/theme/util.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-const docEle = document.documentElement;
-export function toggleClass(flag: boolean, clsName: string, target?: HTMLElement) {
-  const targetEl = target || document.body;
-  let { className } = targetEl;
-  className = className.replace(clsName, '');
-  targetEl.className = flag ? `${className} ${clsName} ` : className;
-}
-
-export function setCssVar(prop: string, val: any, dom = docEle) {
-  dom.style.setProperty(prop, val);
-}
diff --git a/src/main.ts b/src/main.ts
deleted file mode 100644
index b0b58a7..0000000
--- a/src/main.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-import '/@/design/index.less'
-// 娉ㄥ唽 windi
-import 'virtual:windi-base.css'
-import 'virtual:windi-components.css'
-import 'virtual:windi-devtools'
-import 'virtual:windi-utilities.css'
-// 娉ㄥ唽鍥炬爣
-import 'virtual:svg-icons-register'
-import { createApp } from 'vue'
-import App from './App.vue'
-import { registerGlobComp } from '/@/components/registerGlobComp'
-import { setupGlobDirectives } from '/@/directives'
-import { useSso } from '/@/hooks/web/useSso'
-import { setupI18n } from '/@/locales/setupI18n'
-import { setupErrorHandle } from '/@/logics/error-handle'
-import { initAppConfigStore } from '/@/logics/initAppConfig'
-import { router, setupRouter } from '/@/router'
-import { setupRouterGuard } from '/@/router/guard'
-import { registerThirdComp } from '/@/settings/registerThirdComp'
-import { setupStore } from '/@/store'
-// 娉ㄥ唽online妯″潡lib
-import { registerPackages } from '/@/utils/monorepo/registerPackages'
-import DataVVue3 from '@kjgl77/datav-vue3'
-// 鍦ㄦ湰鍦板紑鍙戜腑寮曞叆鐨�,浠ユ彁楂樻祻瑙堝櫒鍝嶅簲閫熷害
-if (import.meta.env.DEV) {
-	import('ant-design-vue/dist/antd.less')
-}
-async function bootstrap() {
-	// 鍒涘缓搴旂敤瀹炰緥
-	const app = createApp(App)
-
-	// 澶氳瑷�閰嶇疆,寮傛鎯呭喌:璇█鏂囦欢鍙互浠庢湇鍔″櫒绔幏寰�
-	await setupI18n(app)
-
-	// 閰嶇疆瀛樺偍
-	setupStore(app)
-
-	// 鍒濆鍖栧唴閮ㄧ郴缁熼厤缃�
-	initAppConfigStore()
-
-	// 娉ㄥ唽澶栭儴妯″潡璺敱(娉ㄥ唽online妯″潡lib)
-	registerPackages(app)
-
-	// 娉ㄥ唽鍏ㄥ眬缁勪欢
-	registerGlobComp(app)
-
-	//CAS鍗曠偣鐧诲綍
-	await useSso().ssoLogin()
-
-	// 閰嶇疆璺敱
-	setupRouter(app)
-
-	// 璺敱淇濇姢
-	setupRouterGuard(router)
-
-	// 娉ㄥ唽鍏ㄥ眬鎸囦护
-	setupGlobDirectives(app)
-
-	// 閰嶇疆鍏ㄥ眬閿欒澶勭悊
-	setupErrorHandle(app)
-
-	// 娉ㄥ唽绗笁鏂圭粍浠�
-	await registerThirdComp(app)
-
-	// 褰撹矾鐢卞噯澶囧ソ鏃跺啀鎵ц鎸傝浇( https://next.router.vuejs.org/api/#isready)
-	await router.isReady()
-	app.use(DataVVue3)
-	// 鎸傝浇搴旂敤
-	app.mount('#app', true)
-}
-
-bootstrap()
diff --git a/src/qiankun/apps.ts b/src/qiankun/apps.ts
deleted file mode 100644
index a6f0358..0000000
--- a/src/qiankun/apps.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-// /**
-//  *寰簲鐢╝pps
-//  * @name: 寰簲鐢ㄥ悕绉� - 鍏锋湁鍞竴鎬�
-//  * @entry: 寰簲鐢ㄥ叆鍙�.蹇呴�� - 閫氳繃璇ュ湴鍧�鍔犺浇寰簲鐢紝
-//  * @container: 寰簲鐢ㄦ寕杞借妭鐐� - 寰簲鐢ㄥ姞杞藉畬鎴愬悗灏嗘寕杞藉湪璇ヨ妭鐐逛笂
-//  * @activeRule: 寰簲鐢ㄨЕ鍙戠殑璺敱瑙勫垯 - 瑙﹀彂璺敱瑙勫垯鍚庡皢鍔犺浇璇ュ井搴旂敤
-//  */
-// //瀛愬簲鐢ㄥ垪琛�
-// const _apps: object[] = [];
-// for (const key in import.meta.env) {
-//   if (key.includes('VITE_APP_SUB_')) {
-//     const name = key.split('VITE_APP_SUB_')[1];
-//     const obj = {
-//       name,
-//       entry: import.meta.env[key],
-//       container: '#content',
-//       activeRule: name,
-//     };
-//     _apps.push(obj);
-//   }
-// }
-// export const apps = _apps;
diff --git a/src/qiankun/index.ts b/src/qiankun/index.ts
deleted file mode 100644
index 23b1a4f..0000000
--- a/src/qiankun/index.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-// /**
-//  * qiankun閰嶇疆
-//  */
-// import { registerMicroApps, setDefaultMountApp, start, runAfterFirstMounted, addGlobalUncaughtErrorHandler } from 'qiankun';
-// import { apps } from './apps';
-// import { getProps, initGlState } from './state';
-//
-// /**
-//  * 閲嶆瀯apps
-//  */
-// function filterApps() {
-//   apps.forEach((item) => {
-//     //涓诲簲鐢ㄩ渶瑕佷紶閫掔粰寰簲鐢ㄧ殑鏁版嵁銆�
-//     item.props = getProps();
-//     //寰簲鐢ㄨЕ鍙戠殑璺敱瑙勫垯
-//     // @ts-ignore
-//     item.activeRule = genActiveRule('/' + item.activeRule);
-//   });
-//   return apps;
-// }
-//
-// /**
-//  * 璺敱鐩戝惉
-//  * @param {*} routerPrefix 鍓嶇紑
-//  */
-// function genActiveRule(routerPrefix) {
-//   return (location) => location.pathname.startsWith(routerPrefix);
-// }
-//
-// /**
-//  * 寰簲鐢ㄦ敞鍐�
-//  */
-// function registerApps() {
-//   const _apps = filterApps();
-//   registerMicroApps(_apps, {
-//     beforeLoad: [
-//       // @ts-ignore
-//       (loadApp) => {
-//         console.log('before load', loadApp);
-//       },
-//     ],
-//     beforeMount: [
-//       // @ts-ignore
-//       (mountApp) => {
-//         console.log('before mount', mountApp);
-//       },
-//     ],
-//     afterMount: [
-//       // @ts-ignore
-//       (mountApp) => {
-//         console.log('before mount', mountApp);
-//       },
-//     ],
-//     afterUnmount: [
-//       // @ts-ignore
-//       (unloadApp) => {
-//         console.log('after unload', unloadApp);
-//       },
-//     ],
-//   });
-//   // 璁剧疆榛樿瀛愬簲鐢�,涓� genActiveRule涓殑鍙傛暟淇濇寔涓�鑷�
-//   // setDefaultMountApp();
-//   // 绗竴涓井搴旂敤 mount 鍚庨渶瑕佽皟鐢ㄧ殑鏂规硶锛屾瘮濡傚紑鍚竴浜涚洃鎺ф垨鑰呭煁鐐硅剼鏈��
-//   runAfterFirstMounted(() => console.log('寮�鍚洃鎺�'));
-//   // 娣诲姞鍏ㄥ眬鐨勬湭鎹曡幏寮傚父澶勭悊鍣ㄣ��
-//   addGlobalUncaughtErrorHandler((event) => console.log(event));
-//   // 瀹氫箟鍏ㄥ眬鐘舵��
-//   initGlState();
-//   //鍚姩qiankun
-//   start({});
-// }
-//
-// export default registerApps;
diff --git a/src/qiankun/state.ts b/src/qiankun/state.ts
deleted file mode 100644
index 92aaf03..0000000
--- a/src/qiankun/state.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-// /**
-//  *鍏叡鏁版嵁
-//  */
-// import { initGlobalState } from 'qiankun';
-// import { store } from '/@/store';
-// import { router } from '/@/router';
-// import { getToken } from '/@/utils/auth';
-// //瀹氫箟浼犲叆瀛愬簲鐢ㄧ殑鏁版嵁
-// export function getProps() {
-//   return {
-//     data: {
-//       publicPath: '/',
-//       token: getToken(),
-//       store,
-//       router,
-//     },
-//   };
-// }
-//
-// /**
-//  * 瀹氫箟鍏ㄥ眬鐘舵�侊紝骞惰繑鍥為�氫俊鏂规硶,鍦ㄤ富搴旂敤浣跨敤锛屽井搴旂敤閫氳繃 props 鑾峰彇閫氫俊鏂规硶銆�
-//  * @param state 涓诲簲鐢ㄧ┛鐨勫叕鍏辨暟鎹�
-//  */
-// export function initGlState(info = { userName: 'admin' }) {
-//   // 鍒濆鍖杝tate
-//   const actions = initGlobalState(info);
-//   // 璁剧疆鏂扮殑鍊�
-//   actions.setGlobalState(info);
-//   // 娉ㄥ唽 瑙傚療鑰� 鍑芥暟 - 鍝嶅簲 globalState 鍙樺寲锛屽湪 globalState 鍙戠敓鏀瑰彉鏃惰Е鍙戣 瑙傚療鑰� 鍑芥暟銆�
-//   actions.onGlobalStateChange((newState, prev) => {
-//     // state: 鍙樻洿鍚庣殑鐘舵��; prev 鍙樻洿鍓嶇殑鐘舵��
-//     console.info('newState', newState);
-//     console.info('prev', prev);
-//     for (const key in newState) {
-//       console.info('onGlobalStateChange', key);
-//     }
-//   });
-// }
diff --git a/src/router/constant.ts b/src/router/constant.ts
deleted file mode 100644
index cd5908d..0000000
--- a/src/router/constant.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-export const REDIRECT_NAME = 'Redirect'
-
-export const PARENT_LAYOUT_NAME = 'ParentLayout'
-
-export const PAGE_NOT_FOUND_NAME = 'PageNotFound'
-
-export const EXCEPTION_COMPONENT = () => import('/@/views/sys/exception/Exception.vue')
-
-/**
- * @description: default layout
- */
-export const LAYOUT = () => import('/@/layouts/default/index.vue')
-
-/**
- * @description: parent-layout
- */
-export const getParentLayout = (_name?: string) => {
-	return () =>
-		new Promise((resolve) => {
-			resolve({
-				name: PARENT_LAYOUT_NAME,
-			})
-		})
-}
diff --git a/src/router/guard/index.ts b/src/router/guard/index.ts
deleted file mode 100644
index c567749..0000000
--- a/src/router/guard/index.ts
+++ /dev/null
@@ -1,147 +0,0 @@
-import type { Router, RouteLocationNormalized } from 'vue-router';
-import { useAppStoreWithOut } from '/@/store/modules/app';
-import { useUserStoreWithOut } from '/@/store/modules/user';
-import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';
-import { AxiosCanceler } from '/@/utils/http/axios/axiosCancel';
-import { Modal, notification } from 'ant-design-vue';
-import { warn } from '/@/utils/log';
-import { unref } from 'vue';
-import { setRouteChange } from '/@/logics/mitt/routeChange';
-import { createPermissionGuard } from './permissionGuard';
-import { createStateGuard } from './stateGuard';
-import nProgress from 'nprogress';
-import projectSetting from '/@/settings/projectSetting';
-import { createParamMenuGuard } from './paramMenuGuard';
-
-// Don't change the order of creation
-export function setupRouterGuard(router: Router) {
-  createPageGuard(router);
-  createPageLoadingGuard(router);
-  createHttpGuard(router);
-  createScrollGuard(router);
-  createMessageGuard(router);
-  createProgressGuard(router);
-  createPermissionGuard(router);
-  createParamMenuGuard(router); // must after createPermissionGuard (menu has been built.)
-  createStateGuard(router);
-}
-
-/**
- * Hooks for handling page state
- */
-function createPageGuard(router: Router) {
-  const loadedPageMap = new Map<string, boolean>();
-
-  router.beforeEach(async (to) => {
-    // The page has already been loaded, it will be faster to open it again, you don鈥檛 need to do loading and other processing
-    to.meta.loaded = !!loadedPageMap.get(to.path);
-    // Notify routing changes
-    setRouteChange(to);
-
-    return true;
-  });
-
-  router.afterEach((to) => {
-    loadedPageMap.set(to.path, true);
-  });
-}
-
-// Used to handle page loading status
-function createPageLoadingGuard(router: Router) {
-  const userStore = useUserStoreWithOut();
-  const appStore = useAppStoreWithOut();
-  const { getOpenPageLoading } = useTransitionSetting();
-  router.beforeEach(async (to) => {
-    if (!userStore.getToken) {
-      return true;
-    }
-    if (to.meta.loaded) {
-      return true;
-    }
-
-    if (unref(getOpenPageLoading)) {
-      appStore.setPageLoadingAction(true);
-      return true;
-    }
-
-    return true;
-  });
-  router.afterEach(async () => {
-    if (unref(getOpenPageLoading)) {
-      // TODO Looking for a better way
-      // The timer simulates the loading time to prevent flashing too fast,
-      setTimeout(() => {
-        appStore.setPageLoading(false);
-      }, 220);
-    }
-    return true;
-  });
-}
-
-/**
- * The interface used to close the current page to complete the request when the route is switched
- * @param router
- */
-function createHttpGuard(router: Router) {
-  const { removeAllHttpPending } = projectSetting;
-  let axiosCanceler: Nullable<AxiosCanceler>;
-  if (removeAllHttpPending) {
-    axiosCanceler = new AxiosCanceler();
-  }
-  router.beforeEach(async () => {
-    // Switching the route will delete the previous request
-    axiosCanceler?.removeAllPending();
-    return true;
-  });
-}
-
-// Routing switch back to the top
-function createScrollGuard(router: Router) {
-  const isHash = (href: string) => {
-    return /^#/.test(href);
-  };
-
-  const body = document.body;
-
-  router.afterEach(async (to) => {
-    // scroll top
-    isHash((to as RouteLocationNormalized & { href: string })?.href) && body.scrollTo(0, 0);
-    return true;
-  });
-}
-
-/**
- * Used to close the message instance when the route is switched
- * @param router
- */
-export function createMessageGuard(router: Router) {
-  const { closeMessageOnSwitch } = projectSetting;
-
-  router.beforeEach(async () => {
-    try {
-      if (closeMessageOnSwitch) {
-        Modal.destroyAll();
-        notification.destroy();
-      }
-    } catch (error) {
-      warn('message guard error:' + error);
-    }
-    return true;
-  });
-}
-
-export function createProgressGuard(router: Router) {
-  const { getOpenNProgress } = useTransitionSetting();
-  router.beforeEach(async (to) => {
-    if (to.meta.loaded) {
-      return true;
-    }
-    unref(getOpenNProgress) && nProgress.start();
-    return true;
-  });
-
-  router.afterEach(async () => {
-    unref(getOpenNProgress) && nProgress.done();
-    return true;
-  });
-}
diff --git a/src/router/guard/paramMenuGuard.ts b/src/router/guard/paramMenuGuard.ts
deleted file mode 100644
index 1c75157..0000000
--- a/src/router/guard/paramMenuGuard.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import type { Router } from 'vue-router';
-import { configureDynamicParamsMenu } from '../helper/menuHelper';
-import { Menu } from '../types';
-import { PermissionModeEnum } from '/@/enums/appEnum';
-import { useAppStoreWithOut } from '/@/store/modules/app';
-
-import { usePermissionStoreWithOut } from '/@/store/modules/permission';
-
-export function createParamMenuGuard(router: Router) {
-  const permissionStore = usePermissionStoreWithOut();
-  router.beforeEach(async (to, _, next) => {
-    // filter no name route
-    if (!to.name) {
-      next();
-      return;
-    }
-
-    // menu has been built.
-    if (!permissionStore.getIsDynamicAddedRoute) {
-      next();
-      return;
-    }
-
-    let menus: Menu[] = [];
-    if (isBackMode()) {
-      menus = permissionStore.getBackMenuList;
-    } else if (isRouteMappingMode()) {
-      menus = permissionStore.getFrontMenuList;
-    }
-    menus.forEach((item) => configureDynamicParamsMenu(item, to.params));
-
-    next();
-  });
-}
-
-const getPermissionMode = () => {
-  const appStore = useAppStoreWithOut();
-  return appStore.getProjectConfig.permissionMode;
-};
-
-const isBackMode = () => {
-  return getPermissionMode() === PermissionModeEnum.BACK;
-};
-
-const isRouteMappingMode = () => {
-  return getPermissionMode() === PermissionModeEnum.ROUTE_MAPPING;
-};
diff --git a/src/router/guard/permissionGuard.ts b/src/router/guard/permissionGuard.ts
deleted file mode 100644
index b4c1767..0000000
--- a/src/router/guard/permissionGuard.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-import type { Router, RouteRecordRaw } from 'vue-router';
-
-import { usePermissionStoreWithOut } from '/@/store/modules/permission';
-
-import { PageEnum } from '/@/enums/pageEnum';
-import { useUserStoreWithOut } from '/@/store/modules/user';
-
-import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic';
-
-import { RootRoute } from '/@/router/routes';
-
-import { isOAuth2AppEnv } from '/@/views/sys/login/useLogin';
-
-const LOGIN_PATH = PageEnum.BASE_LOGIN;
-//auth2鐧诲綍璺敱
-const OAUTH2_LOGIN_PAGE_PATH = PageEnum.OAUTH2_LOGIN_PAGE_PATH;
-
-//鍒嗕韩鍏嶇櫥褰曡矾鐢�
-const SYS_FILES_PATH = PageEnum.SYS_FILES_PATH;
-
-const ROOT_PATH = RootRoute.path;
-
-//update-begin---author:wangshuai ---date:20220629  for锛歔issues/I5BG1I]vue3涓嶆敮鎸乤uth2鐧诲綍------------
-//update-begin---author:wangshuai ---date:20221111  for: [VUEN-2472]鍒嗕韩鍏嶇櫥褰�------------
-const whitePathList: PageEnum[] = [LOGIN_PATH, OAUTH2_LOGIN_PAGE_PATH,SYS_FILES_PATH];
-//update-end---author:wangshuai ---date:20221111  for: [VUEN-2472]鍒嗕韩鍏嶇櫥褰�------------
-//update-end---author:wangshuai ---date:20220629  for锛歔issues/I5BG1I]vue3涓嶆敮鎸乤uth2鐧诲綍------------
-
-export function createPermissionGuard(router: Router) {
-  const userStore = useUserStoreWithOut();
-  const permissionStore = usePermissionStoreWithOut();
-  router.beforeEach(async (to, from, next) => {
-    if (
-      from.path === ROOT_PATH &&
-      to.path === PageEnum.BASE_HOME &&
-      userStore.getUserInfo.homePath &&
-      userStore.getUserInfo.homePath !== PageEnum.BASE_HOME
-    ) {
-      next(userStore.getUserInfo.homePath);
-      return;
-    }
-
-    const token = userStore.getToken;
-
-    // Whitelist can be directly entered
-    if (whitePathList.includes(to.path as PageEnum)) {
-      if (to.path === LOGIN_PATH && token) {
-        const isSessionTimeout = userStore.getSessionTimeout;
-        try {
-          await userStore.afterLoginAction();
-          if (!isSessionTimeout) {
-            next((to.query?.redirect as string) || '/');
-            return;
-          }
-        } catch {}
-        //update-begin---author:wangshuai ---date:20220629  for锛歔issues/I5BG1I]vue3涓嶆敮鎸乤uth2鐧诲綍------------
-      } else if (to.path === LOGIN_PATH && isOAuth2AppEnv() && !token) {
-        //閫�鍑虹櫥褰曡繘鍏ユ閫昏緫
-        //濡傛灉杩涘叆鐨勯〉闈㈡槸login椤甸潰骞朵笖褰撳墠鏄疧Auth2app鐜锛屽苟涓攖oken涓虹┖锛屽氨杩涘叆OAuth2鐧诲綍椤甸潰
-        next({ path: OAUTH2_LOGIN_PAGE_PATH });
-        return;
-        //update-end---author:wangshuai ---date:20220629  for锛歔issues/I5BG1I]vue3涓嶆敮鎸乤uth2鐧诲綍------------
-      }
-      next();
-      return;
-    }
-
-    // token does not exist
-    if (!token) {
-      // You can access without permission. You need to set the routing meta.ignoreAuth to true
-      if (to.meta.ignoreAuth) {
-        next();
-        return;
-      }
-
-      //update-begin---author:wangshuai ---date:20220629  for锛歔issues/I5BG1I]vue3 Auth2鏈疄鐜�------------
-      let path = LOGIN_PATH;
-      if (whitePathList.includes(to.path as PageEnum)) {
-        // 鍦ㄥ厤鐧诲綍鐧藉悕鍗曪紝濡傛灉杩涘叆鐨勯〉闈㈡槸login椤甸潰骞朵笖褰撳墠鏄疧Auth2app鐜锛屽氨杩涘叆OAuth2鐧诲綍椤甸潰
-        if (to.path === LOGIN_PATH && isOAuth2AppEnv()) {
-          next({ path: OAUTH2_LOGIN_PAGE_PATH });
-        } else {
-          //鍦ㄥ厤鐧诲綍鐧藉悕鍗曪紝鐩存帴杩涘叆
-          next();
-        }
-      } else {
-        // 濡傛灉褰撳墠鏄湪OAuth2APP鐜锛屽氨璺宠浆鍒癘Auth2鐧诲綍椤甸潰锛屽惁鍒欒烦杞埌鐧诲綍椤甸潰
-        path = isOAuth2AppEnv() ? OAUTH2_LOGIN_PAGE_PATH : LOGIN_PATH;
-      }
-      //update-end---author:wangshuai ---date:20220629  for锛歔issues/I5BG1I]vue3 Auth2鏈疄鐜�------------
-      // redirect login page
-      const redirectData: { path: string; replace: boolean; query?: Recordable<string> } = {
-        //update-begin---author:wangshuai ---date:20220629  for锛歔issues/I5BG1I]vue3 Auth2鏈疄鐜�------------
-        path: path,
-        //update-end---author:wangshuai ---date:20220629  for锛歔issues/I5BG1I]vue3 Auth2鏈疄鐜�------------
-        replace: true,
-      };
-      if (to.path) {
-        redirectData.query = {
-          ...redirectData.query,
-          redirect: to.path,
-        };
-      }
-      next(redirectData);
-      return;
-    }
-
-    // Jump to the 404 page after processing the login
-    if (from.path === LOGIN_PATH && to.name === PAGE_NOT_FOUND_ROUTE.name && to.fullPath !== (userStore.getUserInfo.homePath || PageEnum.BASE_HOME)) {
-      next(userStore.getUserInfo.homePath || PageEnum.BASE_HOME);
-      return;
-    }
-
-    // get userinfo while last fetch time is empty
-    if (userStore.getLastUpdateTime === 0) {
-      try {
-        await userStore.getUserInfoAction();
-      } catch (err) {
-        console.info(err);
-        next();
-      }
-    }
-
-    if (permissionStore.getIsDynamicAddedRoute) {
-      next();
-      return;
-    }
-
-    const routes = await permissionStore.buildRoutesAction();
-
-    routes.forEach((route) => {
-      router.addRoute(route as unknown as RouteRecordRaw);
-    });
-
-    router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
-
-    permissionStore.setDynamicAddedRoute(true);
-
-    if (to.name === PAGE_NOT_FOUND_ROUTE.name) {
-      // 鍔ㄦ�佹坊鍔犺矾鐢卞悗锛屾澶勫簲褰撻噸瀹氬悜鍒癴ullPath锛屽惁鍒欎細鍔犺浇404椤甸潰鍐呭
-      next({ path: to.fullPath, replace: true, query: to.query });
-    } else {
-      const redirectPath = (from.query.redirect || to.path) as string;
-      const redirect = decodeURIComponent(redirectPath);
-      const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect };
-      next(nextData);
-    }
-  });
-}
diff --git a/src/router/guard/stateGuard.ts b/src/router/guard/stateGuard.ts
deleted file mode 100644
index c34513c..0000000
--- a/src/router/guard/stateGuard.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import type { Router } from 'vue-router';
-import { useAppStore } from '/@/store/modules/app';
-import { useMultipleTabStore } from '/@/store/modules/multipleTab';
-import { useUserStore } from '/@/store/modules/user';
-import { usePermissionStore } from '/@/store/modules/permission';
-import { PageEnum } from '/@/enums/pageEnum';
-import { removeTabChangeListener } from '/@/logics/mitt/routeChange';
-
-export function createStateGuard(router: Router) {
-  router.afterEach((to) => {
-    // Just enter the login page and clear the authentication information
-    if (to.path === PageEnum.BASE_LOGIN) {
-      const tabStore = useMultipleTabStore();
-      const userStore = useUserStore();
-      const appStore = useAppStore();
-      const permissionStore = usePermissionStore();
-      appStore.resetAllState();
-      permissionStore.resetState();
-      tabStore.resetState();
-      userStore.resetState();
-      removeTabChangeListener();
-    }
-  });
-}
diff --git a/src/router/helper/menuHelper.ts b/src/router/helper/menuHelper.ts
deleted file mode 100644
index a9ec60f..0000000
--- a/src/router/helper/menuHelper.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-import { AppRouteModule } from '/@/router/types';
-import type { MenuModule, Menu, AppRouteRecordRaw } from '/@/router/types';
-import { findPath, treeMap } from '/@/utils/helper/treeHelper';
-import { cloneDeep } from 'lodash-es';
-import { isUrl } from '/@/utils/is';
-import { RouteParams } from 'vue-router';
-import { toRaw } from 'vue';
-
-export function getAllParentPath<T = Recordable>(treeData: T[], path: string) {
-  const menuList = findPath(treeData, (n) => n.path === path) as Menu[];
-  return (menuList || []).map((item) => item.path);
-}
-
-function joinParentPath(menus: Menu[], parentPath = '') {
-  for (let index = 0; index < menus.length; index++) {
-    const menu = menus[index];
-    // https://next.router.vuejs.org/guide/essentials/nested-routes.html
-    // Note that nested paths that start with / will be treated as a root path.
-    // This allows you to leverage the component nesting without having to use a nested URL.
-    if (!(menu.path.startsWith('/') || isUrl(menu.path))) {
-      // path doesn't start with /, nor is it a url, join parent path
-      menu.path = `${parentPath}/${menu.path}`;
-    }
-    if (menu?.children?.length) {
-      joinParentPath(menu.children, menu.meta?.hidePathForChildren ? parentPath : menu.path);
-    }
-  }
-}
-
-// Parsing the menu module
-export function transformMenuModule(menuModule: MenuModule): Menu {
-  const { menu } = menuModule;
-
-  const menuList = [menu];
-
-  joinParentPath(menuList);
-  return menuList[0];
-}
-
-export function transformRouteToMenu(routeModList: AppRouteModule[], routerMapping = false) {
-  const cloneRouteModList = cloneDeep(routeModList);
-  const routeList: AppRouteRecordRaw[] = [];
-
-  cloneRouteModList.forEach((item) => {
-    if (routerMapping && item.meta.hideChildrenInMenu && typeof item.redirect === 'string') {
-      item.path = item.redirect;
-    }
-    if (item.meta?.single) {
-      const realItem = item?.children?.[0];
-      realItem && routeList.push(realItem);
-    } else {
-      routeList.push(item);
-    }
-  });
-  const list = treeMap(routeList, {
-    conversion: (node: AppRouteRecordRaw) => {
-      const { meta: { title, hideMenu = false } = {} } = node;
-
-      return {
-        ...(node.meta || {}),
-        meta: node.meta,
-        name: title,
-        hideMenu,
-        alwaysShow:node.alwaysShow||false,
-        path: node.path,
-        ...(node.redirect ? { redirect: node.redirect } : {}),
-      };
-    },
-  });
-  joinParentPath(list);
-  return cloneDeep(list);
-}
-
-/**
- * config menu with given params
- */
-const menuParamRegex = /(?::)([\s\S]+?)((?=\/)|$)/g;
-export function configureDynamicParamsMenu(menu: Menu, params: RouteParams) {
-  const { path, paramPath } = toRaw(menu);
-  let realPath = paramPath ? paramPath : path;
-  const matchArr = realPath.match(menuParamRegex);
-
-  matchArr?.forEach((it) => {
-    const realIt = it.substr(1);
-    if (params[realIt]) {
-      realPath = realPath.replace(`:${realIt}`, params[realIt] as string);
-    }
-  });
-  // save original param path.
-  if (!paramPath && matchArr && matchArr.length > 0) {
-    menu.paramPath = path;
-  }
-  menu.path = realPath;
-  // children
-  menu.children?.forEach((item) => configureDynamicParamsMenu(item, params));
-}
diff --git a/src/router/helper/routeHelper.ts b/src/router/helper/routeHelper.ts
deleted file mode 100644
index 50c45f9..0000000
--- a/src/router/helper/routeHelper.ts
+++ /dev/null
@@ -1,240 +0,0 @@
-import type { AppRouteModule, AppRouteRecordRaw } from '/@/router/types';
-import type { Router, RouteRecordNormalized } from 'vue-router';
-
-import { getParentLayout, LAYOUT, EXCEPTION_COMPONENT } from '/@/router/constant';
-import { cloneDeep, omit } from 'lodash-es';
-import { warn } from '/@/utils/log';
-import { createRouter, createWebHashHistory } from 'vue-router';
-import { getTenantId, getToken } from "/@/utils/auth";
-import { URL_HASH_TAB } from '/@/utils';
-//寮曞叆online lib璺敱
-import { packageViews } from '/@/utils/monorepo/dynamicRouter';
-import {useI18n} from "/@/hooks/web/useI18n";
-
-export type LayoutMapKey = 'LAYOUT';
-const IFRAME = () => import('/@/views/sys/iframe/FrameBlank.vue');
-const LayoutContent = () => import('/@/layouts/default/content/index.vue');
-
-const LayoutMap = new Map<string, () => Promise<typeof import('*.vue')>>();
-
-LayoutMap.set('LAYOUT', LAYOUT);
-LayoutMap.set('IFRAME', IFRAME);
-//寰墠绔痲iankun
-LayoutMap.set('LayoutsContent', LayoutContent);
-
-let dynamicViewsModules: Record<string, () => Promise<Recordable>>;
-
-// Dynamic introduction
-function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
-  if (!dynamicViewsModules) {
-    dynamicViewsModules = import.meta.glob('../../views/**/*.{vue,tsx}');
-    //鍚堝苟online lib璺敱
-    dynamicViewsModules = Object.assign({}, dynamicViewsModules, packageViews);
-  }
-  if (!routes) return;
-  routes.forEach((item) => {
-
-    //銆恓eecg-boot/issues/I5N2PN銆戝乏渚у姩鎬佽彍鍗曟�庝箞鍋氬浗闄呭寲澶勭悊  2022-10-09
-    //鑿滃崟鏀寔鍥介檯鍖栫炕璇�
-    if (item?.meta?.title) {
-      const { t } = useI18n();
-      if(item.meta.title.includes('t(\'') && t){
-        item.meta.title = eval(item.meta.title);
-        //console.log('璇戝悗: ',item.meta.title)
-      }
-    }
-   
-    // update-begin--author:sunjianlei---date:20210918---for:閫傞厤鏃х増璺敱閫夐」 --------
-    // @ts-ignore 閫傞厤闅愯棌璺敱
-    if (item?.hidden) {
-      item.meta.hideMenu = true;
-      //鏄惁闅愯棌闈㈠寘灞�
-      item.meta.hideBreadcrumb = true;
-    }
-    // @ts-ignore 娣诲姞蹇界暐璺敱閰嶇疆
-    if (item?.route == 0) {
-      item.meta.ignoreRoute = true;
-    }
-    // @ts-ignore 娣诲姞鏄惁缂撳瓨璺敱閰嶇疆
-    item.meta.ignoreKeepAlive = !item?.meta.keepAlive;
-    let token = getToken();
-    let tenantId = getTenantId();
-    // URL鏀寔{{ window.xxx }}鍗犱綅绗﹀彉閲�
-    //update-begin---author:wangshuai ---date:20220711  for锛歔VUEN-1638]鑿滃崟tenantId闇�瑕佸姩鎬佺敓鎴�------------
-    item.component = (item.component || '').replace(/{{([^}}]+)?}}/g, (s1, s2) => eval(s2)).replace('${token}', token).replace('${tenantId}', tenantId);
-    //update-end---author:wangshuai ---date:20220711  for锛歔VUEN-1638]鑿滃崟tenantId闇�瑕佸姩鎬佺敓鎴�------------
-    // 閫傞厤 iframe
-    if (/^\/?http(s)?/.test(item.component as string)) {
-      item.component = item.component.substring(1, item.component.length);
-    }
-    if (/^http(s)?/.test(item.component as string)) {
-      if (item.meta?.internalOrExternal) {
-        // @ts-ignore 澶栭儴鎵撳紑
-        item.path = item.component;
-        // update-begin--author:sunjianlei---date:20220408---for: 銆怴UEN-656銆戦厤缃閮ㄧ綉鍧�鎵撲笉寮�锛屽師鍥犳槸甯︿簡#鍙凤紝闇�瑕佹浛鎹竴涓�
-        item.path = item.path.replace('#', URL_HASH_TAB);
-        // update-end--author:sunjianlei---date:20220408---for: 銆怴UEN-656銆戦厤缃閮ㄧ綉鍧�鎵撲笉寮�锛屽師鍥犳槸甯︿簡#鍙凤紝闇�瑕佹浛鎹竴涓�
-      } else {
-        // @ts-ignore 鍐呴儴鎵撳紑
-        item.meta.frameSrc = item.component;
-      }
-      delete item.component;
-    }
-    // update-end--author:sunjianlei---date:20210918---for:閫傞厤鏃х増璺敱閫夐」 --------
-    if (!item.component && item.meta?.frameSrc) {
-      item.component = 'IFRAME';
-    }
-    let { component, name } = item;
-    const { children } = item;
-    if (component) {
-      const layoutFound = LayoutMap.get(component.toUpperCase());
-      if (layoutFound) {
-        item.component = layoutFound;
-      } else {
-        // update-end--author:zyf---date:20220307--for:VUEN-219鍏煎鍚庡彴杩斿洖鍔ㄦ�侀椤�,鐩殑閫傞厤璺焩2鐗堟湰閰嶇疆涓�鑷� --------
-        if (component.indexOf('dashboard/') > -1) {
-          //褰撴暟鎹爣sys_permission涓璫omponent娌℃湁鎷兼帴index鏃跺墠绔渶瑕佹嫾鎺�
-          if (component.indexOf('/index') < 0) {
-            component = component + '/index';
-          }
-        }
-        // update-end--author:zyf---date:20220307---for:VUEN-219鍏煎鍚庡彴杩斿洖鍔ㄦ�侀椤�,鐩殑閫傞厤璺焩2鐗堟湰閰嶇疆涓�鑷� --------
-        item.component = dynamicImport(dynamicViewsModules, component as string);
-      }
-    } else if (name) {
-      item.component = getParentLayout();
-    }
-    children && asyncImportRoute(children);
-  });
-}
-
-function dynamicImport(dynamicViewsModules: Record<string, () => Promise<Recordable>>, component: string) {
-  const keys = Object.keys(dynamicViewsModules);
-  const matchKeys = keys.filter((key) => {
-    const k = key.replace('../../views', '');
-    const startFlag = component.startsWith('/');
-    const endFlag = component.endsWith('.vue') || component.endsWith('.tsx');
-    const startIndex = startFlag ? 0 : 1;
-    const lastIndex = endFlag ? k.length : k.lastIndexOf('.');
-    return k.substring(startIndex, lastIndex) === component;
-  });
-  if (matchKeys?.length === 1) {
-    const matchKey = matchKeys[0];
-    return dynamicViewsModules[matchKey];
-  } else if (matchKeys?.length > 1) {
-    warn(
-      'Please do not create `.vue` and `.TSX` files with the same file name in the same hierarchical directory under the views folder. This will cause dynamic introduction failure'
-    );
-    return;
-  }
-}
-
-// Turn background objects into routing objects
-export function transformObjToRoute<T = AppRouteModule>(routeList: AppRouteModule[]): T[] {
-  routeList.forEach((route) => {
-    const component = route.component as string;
-    if (component) {
-      if (component.toUpperCase() === 'LAYOUT') {
-        route.component = LayoutMap.get(component.toUpperCase());
-      } else {
-        route.children = [cloneDeep(route)];
-        route.component = LAYOUT;
-        route.name = `${route.name}Parent`;
-        route.path = '';
-        const meta = route.meta || {};
-        meta.single = true;
-        meta.affix = false;
-        route.meta = meta;
-      }
-    } else {
-      warn('璇锋纭厤缃矾鐢憋細' + route?.name + '鐨刢omponent灞炴��');
-    }
-    route.children && asyncImportRoute(route.children);
-  });
-  return routeList as unknown as T[];
-}
-
-/**
- *  灏嗗绾ц矾鐢辫浆鎹负浜岀骇
- */
-export function flatMultiLevelRoutes(routeModules: AppRouteModule[]) {
-  const modules: AppRouteModule[] = cloneDeep(routeModules);
-  for (let index = 0; index < modules.length; index++) {
-    const routeModule = modules[index];
-    if (!isMultipleRoute(routeModule)) {
-      continue;
-    }
-    promoteRouteLevel(routeModule);
-  }
-  return modules;
-}
-
-//鎻愬崌璺敱绾у埆
-function promoteRouteLevel(routeModule: AppRouteModule) {
-  // Use vue-router to splice menus
-  let router: Router | null = createRouter({
-    routes: [routeModule as unknown as RouteRecordNormalized],
-    history: createWebHashHistory(),
-  });
-
-  const routes = router.getRoutes();
-  addToChildren(routes, routeModule.children || [], routeModule);
-  router = null;
-
-  routeModule.children = routeModule.children?.map((item) => omit(item, 'children'));
-}
-
-// Add all sub-routes to the secondary route
-function addToChildren(routes: RouteRecordNormalized[], children: AppRouteRecordRaw[], routeModule: AppRouteModule) {
-  for (let index = 0; index < children.length; index++) {
-    const child = children[index];
-    const route = routes.find((item) => item.name === child.name);
-    if (!route) {
-      continue;
-    }
-    routeModule.children = routeModule.children || [];
-    if (!routeModule.children.find((item) => item.name === route.name)) {
-      routeModule.children?.push(route as unknown as AppRouteModule);
-    }
-    if (child.children?.length) {
-      addToChildren(routes, child.children, routeModule);
-    }
-  }
-}
-
-// Determine whether the level exceeds 2 levels
-function isMultipleRoute(routeModule: AppRouteModule) {
-  if (!routeModule || !Reflect.has(routeModule, 'children') || !routeModule.children?.length) {
-    return false;
-  }
-
-  const children = routeModule.children;
-
-  let flag = false;
-  for (let index = 0; index < children.length; index++) {
-    const child = children[index];
-    if (child.children?.length) {
-      flag = true;
-      break;
-    }
-  }
-  return flag;
-}
-/**
- * 缁勪欢鍦板潃鍓嶅姞鏂滄潬澶勭悊
- * @updateBy:lsq
- * @updateDate:2021-09-08
- */
-export function addSlashToRouteComponent(routeList: AppRouteRecordRaw[]) {
-  routeList.forEach((route) => {
-    let component = route.component as string;
-    if (component) {
-      const layoutFound = LayoutMap.get(component);
-      if (!layoutFound) {
-        route.component = component.startsWith('/') ? component : `/${component}`;
-      }
-    }
-    route.children && addSlashToRouteComponent(route.children);
-  });
-  return routeList as unknown as T[];
-}
diff --git a/src/router/index.ts b/src/router/index.ts
deleted file mode 100644
index a870521..0000000
--- a/src/router/index.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import type { App } from 'vue'
-import type { RouteRecordRaw } from 'vue-router'
-
-import { createRouter, createWebHistory } from 'vue-router'
-import { basicRoutes } from './routes'
-
-// 鐧藉悕鍗曞簲璇ュ寘鍚熀鏈潤鎬佽矾鐢�
-const WHITE_NAME_LIST: string[] = []
-const getRouteNames = (array: any[]) =>
-	array.forEach((item) => {
-		WHITE_NAME_LIST.push(item.name)
-		getRouteNames(item.children || [])
-	})
-getRouteNames(basicRoutes)
-
-// app router
-export const router = createRouter({
-	history: createWebHistory(import.meta.env.VITE_PUBLIC_PATH),
-	routes: basicRoutes as unknown as RouteRecordRaw[],
-	strict: true,
-	scrollBehavior: () => ({ left: 0, top: 0 }),
-})
-
-// reset router
-export function resetRouter() {
-	router.getRoutes().forEach((route) => {
-		const { name } = route
-		if (name && !WHITE_NAME_LIST.includes(name as string)) {
-			router.hasRoute(name) && router.removeRoute(name)
-		}
-	})
-}
-
-// config router
-export function setupRouter(app: App<Element>) {
-	app.use(router)
-}
diff --git a/src/router/menus/index.ts b/src/router/menus/index.ts
deleted file mode 100644
index 6dcb0b0..0000000
--- a/src/router/menus/index.ts
+++ /dev/null
@@ -1,126 +0,0 @@
-import type { RouteRecordNormalized } from 'vue-router'
-import type { Menu, MenuModule } from '/@/router/types'
-
-import { pathToRegexp } from 'path-to-regexp'
-import { PermissionModeEnum } from '/@/enums/appEnum'
-import { router } from '/@/router'
-import { getAllParentPath, transformMenuModule } from '/@/router/helper/menuHelper'
-import { useAppStoreWithOut } from '/@/store/modules/app'
-import { usePermissionStore } from '/@/store/modules/permission'
-import { filter } from '/@/utils/helper/treeHelper'
-import { isUrl } from '/@/utils/is'
-
-const modules = import.meta.glob('./modules/**/*.ts', { eager: true })
-
-const menuModules: MenuModule[] = []
-
-Object.keys(modules).forEach((key) => {
-	const mod = (modules as Recordable)[key].default || {}
-	const modList = Array.isArray(mod) ? [...mod] : [mod]
-	menuModules.push(...modList)
-})
-
-// ===========================
-// ==========Helper===========
-// ===========================
-
-const getPermissionMode = () => {
-	const appStore = useAppStoreWithOut()
-	return appStore.getProjectConfig.permissionMode
-}
-const isBackMode = () => {
-	return getPermissionMode() === PermissionModeEnum.BACK
-}
-
-const isRouteMappingMode = () => {
-	return getPermissionMode() === PermissionModeEnum.ROUTE_MAPPING
-}
-
-const isRoleMode = () => {
-	return getPermissionMode() === PermissionModeEnum.ROLE
-}
-
-const staticMenus: Menu[] = []
-;(() => {
-	menuModules.sort((a, b) => {
-		return (a.orderNo || 0) - (b.orderNo || 0)
-	})
-
-	for (const menu of menuModules) {
-		staticMenus.push(transformMenuModule(menu))
-	}
-})()
-
-async function getAsyncMenus() {
-	const permissionStore = usePermissionStore()
-	if (isBackMode()) {
-		return permissionStore.getBackMenuList.filter((item) => !item.meta?.hideMenu && !item.hideMenu)
-	}
-	if (isRouteMappingMode()) {
-		return permissionStore.getFrontMenuList.filter((item) => !item.hideMenu)
-	}
-	return staticMenus
-}
-
-export const getMenus = async (): Promise<Menu[]> => {
-	const menus = await getAsyncMenus()
-	if (isRoleMode()) {
-		const routes = router.getRoutes()
-		return filter(menus, basicFilter(routes))
-	}
-	return menus
-}
-
-export async function getCurrentParentPath(currentPath: string) {
-	const menus = await getAsyncMenus()
-	const allParentPath = await getAllParentPath(menus, currentPath)
-	return allParentPath?.[0]
-}
-
-// Get the level 1 menu, delete children
-export async function getShallowMenus(): Promise<Menu[]> {
-	const menus = await getAsyncMenus()
-	const shallowMenuList = menus.map((item) => ({ ...item, children: undefined }))
-	if (isRoleMode()) {
-		const routes = router.getRoutes()
-		return shallowMenuList.filter(basicFilter(routes))
-	}
-	return shallowMenuList
-}
-
-// Get the children of the menu
-export async function getChildrenMenus(parentPath: string) {
-	const menus = await getMenus()
-	const parent = menus.find((item) => item.path === parentPath)
-	if (!parent || !parent.children || !!parent?.meta?.hideChildrenInMenu) {
-		return [] as Menu[]
-	}
-	if (isRoleMode()) {
-		const routes = router.getRoutes()
-		return filter(parent.children, basicFilter(routes))
-	}
-	return parent.children
-}
-
-function basicFilter(routes: RouteRecordNormalized[]) {
-	return (menu: Menu) => {
-		const matchRoute = routes.find((route) => {
-			if (isUrl(menu.path)) return true
-
-			if (route.meta?.carryParam) {
-				return pathToRegexp(route.path).test(menu.path)
-			}
-			const isSame = route.path === menu.path
-			if (!isSame) return false
-
-			if (route.meta?.ignoreAuth) return true
-
-			return isSame || pathToRegexp(route.path).test(menu.path)
-		})
-
-		if (!matchRoute) return false
-		menu.icon = (menu.icon || matchRoute.meta.icon) as string
-		menu.meta = matchRoute.meta
-		return true
-	}
-}
diff --git a/src/router/routes/basic.ts b/src/router/routes/basic.ts
deleted file mode 100644
index afd0b1b..0000000
--- a/src/router/routes/basic.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import { t } from '/@/hooks/web/useI18n'
-import { EXCEPTION_COMPONENT, LAYOUT, PAGE_NOT_FOUND_NAME, REDIRECT_NAME } from '/@/router/constant'
-import type { AppRouteRecordRaw } from '/@/router/types'
-
-// 404 on a page
-export const PAGE_NOT_FOUND_ROUTE: AppRouteRecordRaw = {
-	path: '/:path(.*)*',
-	name: PAGE_NOT_FOUND_NAME,
-	component: LAYOUT,
-	meta: {
-		title: 'ErrorPage',
-		hideBreadcrumb: true,
-		hideMenu: true,
-	},
-	children: [
-		{
-			path: '/:path(.*)*',
-			name: PAGE_NOT_FOUND_NAME,
-			component: EXCEPTION_COMPONENT,
-			meta: {
-				title: 'ErrorPage',
-				hideBreadcrumb: true,
-				hideMenu: true,
-			},
-		},
-	],
-}
-
-export const REDIRECT_ROUTE: AppRouteRecordRaw = {
-	path: '/redirect',
-	component: LAYOUT,
-	name: 'RedirectTo',
-	meta: {
-		title: REDIRECT_NAME,
-		hideBreadcrumb: true,
-		hideMenu: true,
-	},
-	children: [
-		{
-			path: '/redirect/:path(.*)',
-			name: REDIRECT_NAME,
-			component: () => import('/@/views/sys/redirect/index.vue'),
-			meta: {
-				title: REDIRECT_NAME,
-				hideBreadcrumb: true,
-			},
-		},
-	],
-}
-
-export const ERROR_LOG_ROUTE: AppRouteRecordRaw = {
-	path: '/error-log',
-	name: 'ErrorLog',
-	component: LAYOUT,
-	redirect: '/error-log/list',
-	meta: {
-		title: 'ErrorLog',
-		hideBreadcrumb: true,
-		hideChildrenInMenu: true,
-	},
-	children: [
-		{
-			path: 'list',
-			name: 'ErrorLogList',
-			component: () => import('/@/views/sys/error-log/index.vue'),
-			meta: {
-				title: t('routes.basic.errorLogList'),
-				hideBreadcrumb: true,
-				currentActiveMenu: '/error-log',
-			},
-		},
-	],
-}
diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts
deleted file mode 100644
index d77d782..0000000
--- a/src/router/routes/index.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import type { AppRouteModule, AppRouteRecordRaw } from '/@/router/types'
-
-import { PAGE_NOT_FOUND_ROUTE, REDIRECT_ROUTE } from '/@/router/routes/basic'
-
-import { mainOutRoutes } from './mainOut'
-import { PageEnum } from '/@/enums/pageEnum'
-import { t } from '/@/hooks/web/useI18n'
-
-const modules = import.meta.glob('./modules/**/*.ts', { eager: true })
-
-const routeModuleList: AppRouteModule[] = []
-
-// 鍔犲叆鍒拌矾鐢遍泦鍚堜腑
-Object.keys(modules).forEach((key) => {
-	const mod = (modules as Recordable)[key].default || {}
-	const modList = Array.isArray(mod) ? [...mod] : [mod]
-	routeModuleList.push(...modList)
-})
-
-export const asyncRoutes = [PAGE_NOT_FOUND_ROUTE, ...routeModuleList]
-
-export const RootRoute: AppRouteRecordRaw = {
-	path: '/',
-	name: 'Root',
-	redirect: PageEnum.BASE_HOME,
-	meta: {
-		title: 'Root',
-	},
-}
-
-export const LoginRoute: AppRouteRecordRaw = {
-	path: '/login',
-	name: 'Login',
-	//鏂扮増鍚庡彴鐧诲綍锛屽鏋滄兂瑕佷娇鐢ㄦ棫鐗堢櫥褰曟斁寮�鍗冲彲
-	// component: () => import('/@/views/sys/login/Login.vue'),
-	component: () => import('/@/views/system/loginmini/MiniLogin.vue'),
-	meta: {
-		title: t('routes.basic.login'),
-	},
-}
-
-export const BigScreen: AppRouteRecordRaw = {
-	path: '/bigScreen',
-	name: 'BigScreen',
-	component: () => import('/@/views/dry/bigScreen/BigWorkShop.vue'),
-	meta: {
-		title: t('big.screen.workshop'),
-	},
-}
-export const BigScreenN: AppRouteRecordRaw = {
-	path: '/bigScreenN',
-	name: 'BigScreenN',
-	component: () => import('/@/views/dry/bigScreen/BigWorkShop2.vue'),
-	meta: {
-		title: t('big.screen.workshopn'),
-	},
-}
-export const BigEqp: AppRouteRecordRaw = {
-	path: '/bigEqp',
-	name: 'BigEqp',
-	component: () => import('/@/views/dry/bigScreen/BigEqp.vue'),
-	meta: {
-		title: t('big.screen.eqp'),
-	},
-}
-//update-begin---author:wangshuai ---date:20220629  for锛歛uth2鐧诲綍椤甸潰璺敱------------
-export const Oauth2LoginRoute: AppRouteRecordRaw = {
-	path: '/oauth2-app/login',
-	name: 'oauth2-app-login',
-	//鏂扮増閽夐拤鍏嶇櫥褰曪紝濡傛灉鎯宠浣跨敤鏃х増鏀惧紑鍗冲彲
-	// component: () => import('/@/views/sys/login/OAuth2Login.vue'),
-	component: () => import('/@/views/system/loginmini/OAuth2Login.vue'),
-	meta: {
-		title: t('routes.oauth2.login'),
-	},
-}
-//update-end---author:wangshuai ---date:20220629  for锛歛uth2鐧诲綍椤甸潰璺敱------------
-
-/**
- * 銆愰�氳繃token鐩存帴闈欓粯鐧诲綍銆戞祦绋嬪姙鐞嗙櫥褰曢〉闈� 涓浆璺宠浆
- */
-export const TokenLoginRoute: AppRouteRecordRaw = {
-	path: '/tokenLogin',
-	name: 'TokenLoginRoute',
-	component: () => import('/@/views/sys/login/TokenLoginPage.vue'),
-	meta: {
-		title: '甯oken鐧诲綍椤甸潰',
-		ignoreAuth: true,
-	},
-}
-
-// Basic routing without permission
-export const basicRoutes = [LoginRoute, RootRoute, ...mainOutRoutes, REDIRECT_ROUTE, PAGE_NOT_FOUND_ROUTE, TokenLoginRoute, Oauth2LoginRoute,BigScreen,BigScreenN,BigEqp]
diff --git a/src/router/routes/mainOut.ts b/src/router/routes/mainOut.ts
deleted file mode 100644
index 9badb56..0000000
--- a/src/router/routes/mainOut.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
-The routing of this file will not show the layout.
-It is an independent new page.
-the contents of the file still need to log in to access
- */
-import type { AppRouteModule } from '/@/router/types'
-
-// test
-// http:ip:port/main-out
-export const mainOutRoutes: AppRouteModule[] = [
-	{
-		path: '/main-out',
-		name: 'MainOut',
-		component: () => import('/@/views/demo/main-out/index.vue'),
-		meta: {
-			title: 'MainOut',
-			ignoreAuth: true,
-		},
-	},
-]
-
-export const mainOutRouteNames = mainOutRoutes.map((item) => item.name)
diff --git a/src/router/routes/modules/about.ts b/src/router/routes/modules/about.ts
deleted file mode 100644
index d32c4f5..0000000
--- a/src/router/routes/modules/about.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import type { AppRouteModule } from '/@/router/types';
-
-import { LAYOUT } from '/@/router/constant';
-import { t } from '/@/hooks/web/useI18n';
-
-const dashboard: AppRouteModule = {
-  path: '/about',
-  name: 'About',
-  component: LAYOUT,
-  redirect: '/about/index',
-  meta: {
-    hideChildrenInMenu: true,
-    icon: 'simple-icons:about-dot-me',
-    title: t('routes.dashboard.about'),
-    orderNo: 100000,
-  },
-  children: [
-    {
-      path: 'index',
-      name: 'AboutPage',
-      component: () => import('/@/views/sys/about/index.vue'),
-      meta: {
-        title: t('routes.dashboard.about'),
-        icon: 'simple-icons:about-dot-me',
-        hideMenu: true,
-      },
-    },
-  ],
-};
-
-export default dashboard;
diff --git a/src/router/routes/modules/dashboard.ts b/src/router/routes/modules/dashboard.ts
deleted file mode 100644
index 33d00f8..0000000
--- a/src/router/routes/modules/dashboard.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import type { AppRouteModule } from '/@/router/types'
-
-import { t } from '/@/hooks/web/useI18n'
-import { LAYOUT } from '/@/router/constant'
-
-const dashboard: AppRouteModule = {
-	path: '/dashboard',
-	name: 'Dashboard',
-	component: LAYOUT,
-	redirect: '/dashboard/analysis',
-	meta: {
-		orderNo: 10,
-		icon: 'ion:grid-outline',
-		title: t('routes.dashboard.dashboard'),
-	},
-	children: [
-		{
-			path: 'analysis',
-			name: 'Analysis',
-			component: () => import('/@/views/dashboard/Analysis/index.vue'),
-			meta: {
-				// affix: true,
-				title: t('routes.dashboard.analysis'),
-			},
-		},
-		{
-			path: 'workbench',
-			name: 'Workbench',
-			component: () => import('/@/views/dashboard/workbench/index.vue'),
-			meta: {
-				title: t('routes.dashboard.workbench'),
-			},
-		},
-	],
-}
-
-export default dashboard
diff --git a/src/router/routes/modules/demo/charts.ts b/src/router/routes/modules/demo/charts.ts
deleted file mode 100644
index 1c51067..0000000
--- a/src/router/routes/modules/demo/charts.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import type { AppRouteModule } from '/@/router/types';
-
-import { getParentLayout, LAYOUT } from '/@/router/constant';
-import { t } from '/@/hooks/web/useI18n';
-
-const charts: AppRouteModule = {
-  path: '/charts',
-  name: 'Charts',
-  component: LAYOUT,
-  redirect: '/charts/echarts/map',
-  meta: {
-    orderNo: 500,
-    icon: 'ion:bar-chart-outline',
-    title: t('routes.demo.charts.charts'),
-  },
-  children: [
-    {
-      path: 'baiduMap',
-      name: 'BaiduMap',
-      meta: {
-        title: t('routes.demo.charts.baiduMap'),
-      },
-      component: () => import('/@/views/demo/charts/map/Baidu.vue'),
-    },
-    {
-      path: 'aMap',
-      name: 'AMap',
-      meta: {
-        title: t('routes.demo.charts.aMap'),
-      },
-      component: () => import('/@/views/demo/charts/map/Gaode.vue'),
-    },
-    {
-      path: 'googleMap',
-      name: 'GoogleMap',
-      meta: {
-        title: t('routes.demo.charts.googleMap'),
-      },
-      component: () => import('/@/views/demo/charts/map/Google.vue'),
-    },
-    {
-      path: 'echarts',
-      name: 'Echarts',
-      component: getParentLayout('Echarts'),
-      meta: {
-        title: 'Echarts',
-      },
-      redirect: '/charts/echarts/map',
-      children: [
-        {
-          path: 'map',
-          name: 'Map',
-          component: () => import('/@/views/demo/charts/Map.vue'),
-          meta: {
-            title: t('routes.demo.charts.map'),
-          },
-        },
-        {
-          path: 'line',
-          name: 'Line',
-          component: () => import('/@/views/demo/charts/Line.vue'),
-          meta: {
-            title: t('routes.demo.charts.line'),
-          },
-        },
-        {
-          path: 'pie',
-          name: 'Pie',
-          component: () => import('/@/views/demo/charts/Pie.vue'),
-          meta: {
-            title: t('routes.demo.charts.pie'),
-          },
-        },
-      ],
-    },
-  ],
-};
-
-export default charts;
diff --git a/src/router/routes/modules/demo/comp.ts b/src/router/routes/modules/demo/comp.ts
deleted file mode 100644
index 9e99120..0000000
--- a/src/router/routes/modules/demo/comp.ts
+++ /dev/null
@@ -1,700 +0,0 @@
-import type { AppRouteModule } from '/@/router/types';
-
-import { getParentLayout, LAYOUT } from '/@/router/constant';
-import { t } from '/@/hooks/web/useI18n';
-
-const comp: AppRouteModule = {
-  path: '/comp',
-  name: 'Comp',
-  component: LAYOUT,
-  redirect: '/comp/basic',
-  meta: {
-    orderNo: 30,
-    icon: 'ion:layers-outline',
-    title: t('routes.demo.comp.comp'),
-  },
-
-  children: [
-    {
-      path: 'jeecg',
-      name: 'JeecgDemo',
-      redirect: '/comp/jeecg/basic',
-      component: getParentLayout('JeecgDemo'),
-      meta: {
-        title: t('routes.demo.comp.jeecg'),
-      },
-      children: [
-        {
-          path: 'basic',
-          name: 'JAreaLinkage',
-          component: () => import('/@/views/demo/jeecg/JeecgComponents.vue'),
-          meta: {
-            title: t('routes.demo.jeecg.JAreaLinkage'),
-          },
-        },
-        {
-          path: 'oneToMore',
-          name: 'oneToMoreDemo',
-          component: () => import('/@/views/demo/vextable/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.oneToMore'),
-          },
-        },
-      ],
-    },
-    {
-      path: 'basic',
-      name: 'BasicDemo',
-      component: getParentLayout('BasicDemo'),
-      meta: {
-        title: t('routes.demo.comp.basic'),
-      },
-      children: [
-        {
-          path: 'button',
-          name: 'ButtonDemo',
-          component: () => import('/@/views/demo/comp/button/index.vue'),
-          meta: {
-            title: t('routes.demo.basic.button'),
-          },
-        },
-        {
-          path: 'icon',
-          name: 'IconDemo',
-          component: () => import('/@/views/demo/feat/icon/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.icon'),
-          },
-        },
-        {
-          path: 'msg',
-          name: 'MsgDemo',
-          component: () => import('/@/views/demo/feat/msg/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.msg'),
-          },
-        },
-        {
-          path: 'tabs',
-          name: 'TabsDemo',
-          component: () => import('/@/views/demo/feat/tabs/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.tabs'),
-            hideChildrenInMenu: true,
-          },
-          children: [
-            {
-              path: 'detail/:id',
-              name: 'TabDetail',
-              component: () => import('/@/views/demo/feat/tabs/TabDetail.vue'),
-              meta: {
-                currentActiveMenu: '/comp/basic/tabs',
-                title: t('routes.demo.feat.tabDetail'),
-                hideMenu: true,
-                dynamicLevel: 3,
-                realPath: '/comp/basic/tabs/detail',
-              },
-            },
-          ],
-        },
-      ],
-    },
-
-    {
-      path: 'form',
-      name: 'FormDemo',
-      redirect: '/comp/form/basic',
-      component: getParentLayout('FormDemo'),
-      meta: {
-        // icon: 'mdi:form-select',
-        title: t('routes.demo.form.form'),
-      },
-      children: [
-        {
-          path: 'basic',
-          name: 'FormBasicDemo',
-          component: () => import('/@/views/demo/form/index.vue'),
-          meta: {
-            title: t('routes.demo.form.basic'),
-          },
-        },
-        {
-          path: 'useForm',
-          name: 'UseFormDemo',
-          component: () => import('/@/views/demo/form/UseForm.vue'),
-          meta: {
-            title: t('routes.demo.form.useForm'),
-          },
-        },
-        {
-          path: 'refForm',
-          name: 'RefFormDemo',
-          component: () => import('/@/views/demo/form/RefForm.vue'),
-          meta: {
-            title: t('routes.demo.form.refForm'),
-          },
-        },
-        {
-          path: 'advancedForm',
-          name: 'AdvancedFormDemo',
-          component: () => import('/@/views/demo/form/AdvancedForm.vue'),
-          meta: {
-            title: t('routes.demo.form.advancedForm'),
-          },
-        },
-        {
-          path: 'ruleForm',
-          name: 'RuleFormDemo',
-          component: () => import('/@/views/demo/form/RuleForm.vue'),
-          meta: {
-            title: t('routes.demo.form.ruleForm'),
-          },
-        },
-        {
-          path: 'dynamicForm',
-          name: 'DynamicFormDemo',
-          component: () => import('/@/views/demo/form/DynamicForm.vue'),
-          meta: {
-            title: t('routes.demo.form.dynamicForm'),
-          },
-        },
-        {
-          path: 'customerForm',
-          name: 'CustomerFormDemo',
-          component: () => import('/@/views/demo/form/CustomerForm.vue'),
-          meta: {
-            title: t('routes.demo.form.customerForm'),
-          },
-        },
-        {
-          path: 'appendForm',
-          name: 'appendFormDemo',
-          component: () => import('/@/views/demo/form/AppendForm.vue'),
-          meta: {
-            title: t('routes.demo.form.appendForm'),
-          },
-        },
-      ],
-    },
-    {
-      path: 'table',
-      name: 'TableDemo',
-      redirect: '/comp/table/basic',
-      component: getParentLayout('TableDemo'),
-      meta: {
-        // icon: 'carbon:table-split',
-        title: t('routes.demo.table.table'),
-      },
-
-      children: [
-        {
-          path: 'basic',
-          name: 'TableBasicDemo',
-          component: () => import('/@/views/demo/table/Basic.vue'),
-          meta: {
-            title: t('routes.demo.table.basic'),
-          },
-        },
-        {
-          path: 'treeTable',
-          name: 'TreeTableDemo',
-          component: () => import('/@/views/demo/table/TreeTable.vue'),
-          meta: {
-            title: t('routes.demo.table.treeTable'),
-          },
-        },
-        {
-          path: 'fetchTable',
-          name: 'FetchTableDemo',
-          component: () => import('/@/views/demo/table/FetchTable.vue'),
-          meta: {
-            title: t('routes.demo.table.fetchTable'),
-          },
-        },
-        {
-          path: 'fixedColumn',
-          name: 'FixedColumnDemo',
-          component: () => import('/@/views/demo/table/FixedColumn.vue'),
-          meta: {
-            title: t('routes.demo.table.fixedColumn'),
-          },
-        },
-        {
-          path: 'customerCell',
-          name: 'CustomerCellDemo',
-          component: () => import('/@/views/demo/table/CustomerCell.vue'),
-          meta: {
-            title: t('routes.demo.table.customerCell'),
-          },
-        },
-        {
-          path: 'formTable',
-          name: 'FormTableDemo',
-          component: () => import('/@/views/demo/table/FormTable.vue'),
-          meta: {
-            title: t('routes.demo.table.formTable'),
-          },
-        },
-        {
-          path: 'useTable',
-          name: 'UseTableDemo',
-          component: () => import('/@/views/demo/table/UseTable.vue'),
-          meta: {
-            title: t('routes.demo.table.useTable'),
-          },
-        },
-        {
-          path: 'refTable',
-          name: 'RefTableDemo',
-          component: () => import('/@/views/demo/table/RefTable.vue'),
-          meta: {
-            title: t('routes.demo.table.refTable'),
-          },
-        },
-        {
-          path: 'multipleHeader',
-          name: 'MultipleHeaderDemo',
-          component: () => import('/@/views/demo/table/MultipleHeader.vue'),
-          meta: {
-            title: t('routes.demo.table.multipleHeader'),
-          },
-        },
-        {
-          path: 'mergeHeader',
-          name: 'MergeHeaderDemo',
-          component: () => import('/@/views/demo/table/MergeHeader.vue'),
-          meta: {
-            title: t('routes.demo.table.mergeHeader'),
-          },
-        },
-        {
-          path: 'nestedTable',
-          name: 'nestedTableDemo',
-          component: () => import('/@/views/demo/table/NestedTable.vue'),
-          meta: {
-            title: t('routes.demo.table.nestedTable'),
-          },
-        },
-        {
-          path: 'expandTable',
-          name: 'ExpandTableDemo',
-          component: () => import('/@/views/demo/table/ExpandTable.vue'),
-          meta: {
-            title: t('routes.demo.table.expandTable'),
-          },
-        },
-        {
-          path: 'fixedHeight',
-          name: 'FixedHeightDemo',
-          component: () => import('/@/views/demo/table/FixedHeight.vue'),
-          meta: {
-            title: t('routes.demo.table.fixedHeight'),
-          },
-        },
-        {
-          path: 'footerTable',
-          name: 'FooterTableDemo',
-          component: () => import('/@/views/demo/table/FooterTable.vue'),
-          meta: {
-            title: t('routes.demo.table.footerTable'),
-          },
-        },
-        {
-          path: 'editCellTable',
-          name: 'EditCellTableDemo',
-          component: () => import('/@/views/demo/table/EditCellTable.vue'),
-          meta: {
-            title: t('routes.demo.table.editCellTable'),
-          },
-        },
-        {
-          path: 'editRowTable',
-          name: 'EditRowTableDemo',
-          component: () => import('/@/views/demo/table/EditRowTable.vue'),
-          meta: {
-            title: t('routes.demo.table.editRowTable'),
-          },
-        },
-        {
-          path: 'authColumn',
-          name: 'AuthColumnDemo',
-          component: () => import('/@/views/demo/table/AuthColumn.vue'),
-          meta: {
-            title: t('routes.demo.table.authColumn'),
-          },
-        },
-      ],
-    },
-    {
-      path: 'modal',
-      name: 'ModalDemo',
-      redirect: '/comp/modal/basic',
-      component: getParentLayout('ModalDemo'),
-      meta: {
-        title: t('routes.demo.comp.modal'),
-      },
-      children: [
-        {
-          path: 'basic',
-          name: 'ModalBasicDemo',
-          component: () => import('/@/views/demo/comp/modal/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.modal.basic'),
-          },
-        },
-        {
-          path: 'drawer',
-          name: 'DrawerDemo',
-          component: () => import('/@/views/demo/comp/drawer/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.modal.drawer'),
-          },
-        },
-      ],
-    },
-
-    {
-      path: 'third',
-      name: 'ThirdDemo',
-      redirect: '/comp/third/basic',
-      component: getParentLayout('ModalDemo'),
-      meta: {
-        title: t('routes.demo.comp.third'),
-      },
-      children: [
-        {
-          path: 'basic',
-          name: 'CropperDemo',
-          component: () => import('/@/views/demo/comp/cropper/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.cropperImage'),
-          },
-        },
-        {
-          path: 'qrcode',
-          name: 'QrCodeDemo',
-          component: () => import('/@/views/demo/comp/qrcode/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.qrcode'),
-          },
-        },
-        {
-          path: 'strength-meter',
-          name: 'StrengthMeterDemo',
-          component: () => import('/@/views/demo/comp/strength-meter/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.strength'),
-          },
-        },
-        {
-          path: 'upload',
-          name: 'UploadDemo',
-          component: () => import('/@/views/demo/comp/upload/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.upload'),
-          },
-        },
-        {
-          path: 'loading',
-          name: 'LoadingDemo',
-          component: () => import('/@/views/demo/comp/loading/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.loading'),
-          },
-        },
-        {
-          path: 'timestamp',
-          name: 'TimeDemo',
-          component: () => import('/@/views/demo/comp/time/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.time'),
-          },
-        },
-        {
-          path: 'countTo',
-          name: 'CountTo',
-          component: () => import('/@/views/demo/comp/count-to/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.countTo'),
-          },
-        },
-        {
-          path: 'transition',
-          name: 'transitionDemo',
-          component: () => import('/@/views/demo/comp/transition/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.transition'),
-          },
-        },
-        {
-          path: 'print',
-          name: 'Print',
-          component: () => import('/@/views/demo/feat/print/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.print'),
-          },
-        },
-        {
-          path: 'img-preview',
-          name: 'ImgPreview',
-          component: () => import('/@/views/demo/feat/img-preview/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.imgPreview'),
-          },
-        },
-        {
-          path: 'download',
-          name: 'DownLoadDemo',
-          component: () => import('/@/views/demo/feat/download/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.download'),
-          },
-        },
-        {
-          path: 'click-out-side',
-          name: 'ClickOutSideDemo',
-          component: () => import('/@/views/demo/feat/click-out-side/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.clickOutSide'),
-          },
-        },
-        {
-          path: 'copy',
-          name: 'CopyDemo',
-          component: () => import('/@/views/demo/feat/copy/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.copy'),
-          },
-        },
-        {
-          path: 'codemirror',
-          name: 'codemirrorDemo',
-          component: () => import('/@/views/demo/codemirror/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.codemirror'),
-          },
-        },
-        {
-          path: 'ripple',
-          name: 'RippleDemo',
-          component: () => import('/@/views/demo/feat/ripple/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.ripple'),
-          },
-        },
-      ],
-    },
-    {
-      path: 'tree',
-      name: 'TreeDemo',
-      redirect: '/comp/tree/basic',
-      component: getParentLayout('TreeDemo'),
-      meta: {
-        // icon: 'clarity:tree-view-line',
-        title: t('routes.demo.comp.tree'),
-      },
-      children: [
-        {
-          path: 'basic',
-          name: 'BasicTreeDemo',
-          component: () => import('/@/views/demo/tree/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.treeBasic'),
-          },
-        },
-        {
-          path: 'editTree',
-          name: 'EditTreeDemo',
-          component: () => import('/@/views/demo/tree/EditTree.vue'),
-          meta: {
-            title: t('routes.demo.comp.editTree'),
-          },
-        },
-        {
-          path: 'actionTree',
-          name: 'ActionTreeDemo',
-          component: () => import('/@/views/demo/tree/ActionTree.vue'),
-          meta: {
-            title: t('routes.demo.comp.actionTree'),
-          },
-        },
-      ],
-    },
-    {
-      path: 'editor',
-      name: 'EditorDemo',
-      redirect: '/comp/editor/markdown',
-      component: getParentLayout('EditorDemo'),
-      meta: {
-        // icon: 'carbon:table-split',
-        title: t('routes.demo.editor.editor'),
-      },
-      children: [
-        {
-          path: 'json',
-          component: () => import('/@/views/demo/editor/json/index.vue'),
-          name: 'JsonEditorDemo',
-          meta: {
-            title: t('routes.demo.editor.jsonEditor'),
-          },
-        },
-        {
-          path: 'markdown',
-          component: getParentLayout('MarkdownDemo'),
-          name: 'MarkdownDemo',
-          meta: {
-            title: t('routes.demo.editor.markdown'),
-          },
-          redirect: '/comp/editor/markdown/index',
-          children: [
-            {
-              path: 'index',
-              name: 'MarkDownBasicDemo',
-              component: () => import('/@/views/demo/editor/markdown/index.vue'),
-              meta: {
-                title: t('routes.demo.editor.tinymceBasic'),
-              },
-            },
-            {
-              path: 'editor',
-              name: 'MarkDownFormDemo',
-              component: () => import('/@/views/demo/editor/markdown/Editor.vue'),
-              meta: {
-                title: t('routes.demo.editor.tinymceForm'),
-              },
-            },
-          ],
-        },
-
-        {
-          path: 'tinymce',
-          component: getParentLayout('TinymceDemo'),
-          name: 'TinymceDemo',
-          meta: {
-            title: t('routes.demo.editor.tinymce'),
-          },
-          redirect: '/comp/editor/tinymce/index',
-          children: [
-            {
-              path: 'index',
-              name: 'TinymceBasicDemo',
-              component: () => import('/@/views/demo/editor/tinymce/index.vue'),
-              meta: {
-                title: t('routes.demo.editor.tinymceBasic'),
-              },
-            },
-            {
-              path: 'editor',
-              name: 'TinymceFormDemo',
-              component: () => import('/@/views/demo/editor/tinymce/Editor.vue'),
-              meta: {
-                title: t('routes.demo.editor.tinymceForm'),
-              },
-            },
-          ],
-        },
-      ],
-    },
-    {
-      path: 'scroll',
-      name: 'ScrollDemo',
-      redirect: '/comp/scroll/basic',
-      component: getParentLayout('ScrollDemo'),
-      meta: {
-        title: t('routes.demo.comp.scroll'),
-      },
-      children: [
-        {
-          path: 'basic',
-          name: 'BasicScrollDemo',
-          component: () => import('/@/views/demo/comp/scroll/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.scrollBasic'),
-          },
-        },
-        {
-          path: 'action',
-          name: 'ActionScrollDemo',
-          component: () => import('/@/views/demo/comp/scroll/Action.vue'),
-          meta: {
-            title: t('routes.demo.comp.scrollAction'),
-          },
-        },
-        {
-          path: 'virtualScroll',
-          name: 'VirtualScrollDemo',
-          component: () => import('/@/views/demo/comp/scroll/VirtualScroll.vue'),
-          meta: {
-            title: t('routes.demo.comp.virtualScroll'),
-          },
-        },
-      ],
-    },
-
-    {
-      path: 'desc',
-      name: 'DescDemo',
-      component: () => import('/@/views/demo/comp/desc/index.vue'),
-      meta: {
-        title: t('routes.demo.comp.desc'),
-      },
-    },
-
-    {
-      path: 'lazy',
-      name: 'LazyDemo',
-      component: getParentLayout('LazyDemo'),
-      redirect: '/comp/lazy/basic',
-      meta: {
-        title: t('routes.demo.comp.lazy'),
-      },
-      children: [
-        {
-          path: 'basic',
-          name: 'BasicLazyDemo',
-          component: () => import('/@/views/demo/comp/lazy/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.lazyBasic'),
-          },
-        },
-        {
-          path: 'transition',
-          name: 'BasicTransitionDemo',
-          component: () => import('/@/views/demo/comp/lazy/Transition.vue'),
-          meta: {
-            title: t('routes.demo.comp.lazyTransition'),
-          },
-        },
-      ],
-    },
-    {
-      path: 'verify',
-      name: 'VerifyDemo',
-      component: getParentLayout('VerifyDemo'),
-      redirect: '/comp/verify/drag',
-      meta: {
-        title: t('routes.demo.comp.verify'),
-      },
-      children: [
-        {
-          path: 'drag',
-          name: 'VerifyDragDemo',
-          component: () => import('/@/views/demo/comp/verify/index.vue'),
-          meta: {
-            title: t('routes.demo.comp.verifyDrag'),
-          },
-        },
-        {
-          path: 'rotate',
-          name: 'VerifyRotateDemo',
-          component: () => import('/@/views/demo/comp/verify/Rotate.vue'),
-          meta: {
-            title: t('routes.demo.comp.verifyRotate'),
-          },
-        },
-      ],
-    },
-  ],
-};
-
-export default comp;
diff --git a/src/router/routes/modules/demo/feat.ts b/src/router/routes/modules/demo/feat.ts
deleted file mode 100644
index 722eca8..0000000
--- a/src/router/routes/modules/demo/feat.ts
+++ /dev/null
@@ -1,196 +0,0 @@
-import type { AppRouteModule } from '/@/router/types';
-
-import { getParentLayout, LAYOUT } from '/@/router/constant';
-import { t } from '/@/hooks/web/useI18n';
-
-const feat: AppRouteModule = {
-  path: '/feat',
-  name: 'FeatDemo',
-  component: LAYOUT,
-  redirect: '/feat/icon',
-  meta: {
-    orderNo: 19,
-    icon: 'ion:git-compare-outline',
-    title: t('routes.demo.feat.feat'),
-  },
-
-  children: [
-    {
-      path: 'ws',
-      name: 'WebSocket',
-      component: () => import('/@/views/demo/feat/ws/index.vue'),
-      meta: {
-        title: t('routes.demo.feat.ws'),
-      },
-    },
-    {
-      path: 'session-timeout',
-      name: 'SessionTimeout',
-      component: () => import('/@/views/demo/feat/session-timeout/index.vue'),
-      meta: {
-        title: t('routes.demo.feat.sessionTimeout'),
-      },
-    },
-
-    {
-      path: 'breadcrumb',
-      name: 'BreadcrumbDemo',
-      redirect: '/feat/breadcrumb/flat',
-      component: getParentLayout('BreadcrumbDemo'),
-      meta: {
-        title: t('routes.demo.feat.breadcrumb'),
-      },
-
-      children: [
-        {
-          path: 'flat',
-          name: 'BreadcrumbFlatDemo',
-          component: () => import('/@/views/demo/feat/breadcrumb/FlatList.vue'),
-          meta: {
-            title: t('routes.demo.feat.breadcrumbFlat'),
-          },
-        },
-        {
-          path: 'flatDetail',
-          name: 'BreadcrumbFlatDetailDemo',
-          component: () => import('/@/views/demo/feat/breadcrumb/FlatListDetail.vue'),
-          meta: {
-            title: t('routes.demo.feat.breadcrumbFlatDetail'),
-            hideMenu: true,
-            hideTab: true,
-            currentActiveMenu: '/feat/breadcrumb/flat',
-          },
-        },
-        {
-          path: 'children',
-          name: 'BreadcrumbChildrenDemo',
-          component: () => import('/@/views/demo/feat/breadcrumb/ChildrenList.vue'),
-          meta: {
-            title: t('routes.demo.feat.breadcrumbChildren'),
-          },
-          children: [
-            {
-              path: 'childrenDetail',
-              name: 'BreadcrumbChildrenDetailDemo',
-              component: () => import('/@/views/demo/feat/breadcrumb/ChildrenListDetail.vue'),
-              meta: {
-                currentActiveMenu: '/feat/breadcrumb/children',
-                title: t('routes.demo.feat.breadcrumbChildrenDetail'),
-                //hideTab: true,
-                // hideMenu: true,
-              },
-            },
-          ],
-        },
-      ],
-    },
-
-    {
-      path: 'context-menu',
-      name: 'ContextMenuDemo',
-      component: () => import('/@/views/demo/feat/context-menu/index.vue'),
-      meta: {
-        title: t('routes.demo.feat.contextMenu'),
-      },
-    },
-
-    {
-      path: 'copy',
-      name: 'CopyDemo',
-      component: () => import('/@/views/demo/feat/copy/index.vue'),
-      meta: {
-        title: t('routes.demo.feat.copy'),
-      },
-    },
-
-    {
-      path: 'watermark',
-      name: 'WatermarkDemo',
-      component: () => import('/@/views/demo/feat/watermark/index.vue'),
-      meta: {
-        title: t('routes.demo.feat.watermark'),
-      },
-    },
-
-    {
-      path: 'full-screen',
-      name: 'FullScreenDemo',
-      component: () => import('/@/views/demo/feat/full-screen/index.vue'),
-      meta: {
-        title: t('routes.demo.feat.fullScreen'),
-      },
-    },
-
-    {
-      path: '/error-log',
-      name: 'ErrorLog',
-      component: () => import('/@/views/sys/error-log/index.vue'),
-      meta: {
-        title: t('routes.demo.feat.errorLog'),
-      },
-    },
-    {
-      path: 'testTab/:id',
-      name: 'TestTab',
-      component: () => import('/@/views/demo/feat/tab-params/index.vue'),
-      meta: {
-        title: t('routes.demo.feat.tab'),
-        carryParam: true,
-        hidePathForChildren: true,
-      },
-      children: [
-        {
-          path: 'testTab/id1',
-          name: 'TestTab1',
-          component: () => import('/@/views/demo/feat/tab-params/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.tab1'),
-            carryParam: true,
-            ignoreRoute: true,
-          },
-        },
-        {
-          path: 'testTab/id2',
-          name: 'TestTab2',
-          component: () => import('/@/views/demo/feat/tab-params/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.tab2'),
-            carryParam: true,
-            ignoreRoute: true,
-          },
-        },
-      ],
-    },
-    {
-      path: 'testParam/:id',
-      name: 'TestParam',
-      component: getParentLayout('TestParam'),
-      meta: {
-        title: t('routes.demo.feat.menu'),
-        ignoreKeepAlive: true,
-      },
-      children: [
-        {
-          path: 'sub1',
-          name: 'TestParam_1',
-          component: () => import('/@/views/demo/feat/menu-params/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.menu1'),
-            ignoreKeepAlive: true,
-          },
-        },
-        {
-          path: 'sub2',
-          name: 'TestParam_2',
-          component: () => import('/@/views/demo/feat/menu-params/index.vue'),
-          meta: {
-            title: t('routes.demo.feat.menu2'),
-            ignoreKeepAlive: true,
-          },
-        },
-      ],
-    },
-  ],
-};
-
-export default feat;
diff --git a/src/router/routes/modules/demo/iframe.ts b/src/router/routes/modules/demo/iframe.ts
deleted file mode 100644
index 95b21d6..0000000
--- a/src/router/routes/modules/demo/iframe.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import type { AppRouteModule } from '/@/router/types';
-
-import { LAYOUT } from '/@/router/constant';
-const IFrame = () => import('/@/views/sys/iframe/FrameBlank.vue');
-import { t } from '/@/hooks/web/useI18n';
-
-const iframe: AppRouteModule = {
-  path: '/frame',
-  name: 'Frame',
-  component: LAYOUT,
-  redirect: '/frame/doc',
-  meta: {
-    orderNo: 1000,
-    icon: 'ion:tv-outline',
-    title: t('routes.demo.iframe.frame'),
-  },
-
-  children: [
-    {
-      path: 'doc',
-      name: 'Doc',
-      component: IFrame,
-      meta: {
-        frameSrc: 'https://vvbin.cn/doc-next/',
-        title: t('routes.demo.iframe.doc'),
-      },
-    },
-    {
-      path: 'antv',
-      name: 'Antv',
-      component: IFrame,
-      meta: {
-        frameSrc: 'https://2x.antdv.com/docs/vue/introduce-cn/',
-        title: t('routes.demo.iframe.antv'),
-      },
-    },
-    {
-      path: 'https://vvbin.cn/doc-next/',
-      name: 'DocExternal',
-      component: IFrame,
-      meta: {
-        title: t('routes.demo.iframe.docExternal'),
-      },
-    },
-  ],
-};
-
-export default iframe;
diff --git a/src/router/routes/modules/demo/level.ts b/src/router/routes/modules/demo/level.ts
deleted file mode 100644
index 3cee375..0000000
--- a/src/router/routes/modules/demo/level.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import type { AppRouteModule } from '/@/router/types';
-
-import { getParentLayout, LAYOUT } from '/@/router/constant';
-import { t } from '/@/hooks/web/useI18n';
-
-const permission: AppRouteModule = {
-  path: '/level',
-  name: 'Level',
-  component: LAYOUT,
-  redirect: '/level/menu1/menu1-1/menu1-1-1',
-  meta: {
-    orderNo: 2000,
-    icon: 'ion:menu-outline',
-    title: t('routes.demo.level.level'),
-  },
-
-  children: [
-    {
-      path: 'menu1',
-      name: 'Menu1Demo',
-      component: getParentLayout('Menu1Demo'),
-      meta: {
-        title: 'Menu1',
-      },
-      redirect: '/level/menu1/menu1-1/menu1-1-1',
-      children: [
-        {
-          path: 'menu1-1',
-          name: 'Menu11Demo',
-          component: getParentLayout('Menu11Demo'),
-          meta: {
-            title: 'Menu1-1',
-          },
-          redirect: '/level/menu1/menu1-1/menu1-1-1',
-          children: [
-            {
-              path: 'menu1-1-1',
-              name: 'Menu111Demo',
-              component: () => import('/@/views/demo/level/Menu111.vue'),
-              meta: {
-                title: 'Menu111',
-              },
-            },
-          ],
-        },
-        {
-          path: 'menu1-2',
-          name: 'Menu12Demo',
-          component: () => import('/@/views/demo/level/Menu12.vue'),
-          meta: {
-            title: 'Menu1-2',
-          },
-        },
-      ],
-    },
-    {
-      path: 'menu2',
-      name: 'Menu2Demo',
-      component: () => import('/@/views/demo/level/Menu2.vue'),
-      meta: {
-        title: 'Menu2',
-        // ignoreKeepAlive: true,
-      },
-    },
-  ],
-};
-
-export default permission;
diff --git a/src/router/routes/modules/demo/page.ts b/src/router/routes/modules/demo/page.ts
deleted file mode 100644
index 17ab276..0000000
--- a/src/router/routes/modules/demo/page.ts
+++ /dev/null
@@ -1,255 +0,0 @@
-import type { AppRouteModule } from '/@/router/types';
-
-import { getParentLayout, LAYOUT } from '/@/router/constant';
-import { ExceptionEnum } from '/@/enums/exceptionEnum';
-import { t } from '/@/hooks/web/useI18n';
-
-const ExceptionPage = () => import('/@/views/sys/exception/Exception.vue');
-
-const page: AppRouteModule = {
-  path: '/page-demo',
-  name: 'PageDemo',
-  component: LAYOUT,
-  redirect: '/page-demo/form/basic',
-  meta: {
-    orderNo: 20,
-    icon: 'ion:aperture-outline',
-    title: t('routes.demo.page.page'),
-  },
-  children: [
-    // =============================form start=============================
-    {
-      path: 'form',
-      name: 'FormPage',
-      redirect: '/page-demo/form/basic',
-      component: getParentLayout('FormPage'),
-      meta: {
-        title: t('routes.demo.page.form'),
-      },
-      children: [
-        {
-          path: 'basic',
-          name: 'FormBasicPage',
-          component: () => import('/@/views/demo/page/form/basic/index.vue'),
-          meta: {
-            title: t('routes.demo.page.formBasic'),
-          },
-        },
-        {
-          path: 'step',
-          name: 'FormStepPage',
-          component: () => import('/@/views/demo/page/form/step/index.vue'),
-          meta: {
-            title: t('routes.demo.page.formStep'),
-          },
-        },
-        {
-          path: 'high',
-          name: 'FormHightPage',
-          component: () => import('/@/views/demo/page/form/high/index.vue'),
-          meta: {
-            title: t('routes.demo.page.formHigh'),
-          },
-        },
-      ],
-    },
-    // =============================form end=============================
-    // =============================desc start=============================
-    {
-      path: 'desc',
-      name: 'DescPage',
-      component: getParentLayout('DescPage'),
-      redirect: '/page-demo/desc/basic',
-      meta: {
-        title: t('routes.demo.page.desc'),
-      },
-      children: [
-        {
-          path: 'basic',
-          name: 'DescBasicPage',
-          component: () => import('/@/views/demo/page/desc/basic/index.vue'),
-          meta: {
-            title: t('routes.demo.page.descBasic'),
-          },
-        },
-        {
-          path: 'high',
-          name: 'DescHighPage',
-          component: () => import('/@/views/demo/page/desc/high/index.vue'),
-          meta: {
-            title: t('routes.demo.page.descHigh'),
-          },
-        },
-      ],
-    },
-    // =============================desc end=============================
-
-    // =============================result start=============================
-    {
-      path: 'result',
-      name: 'ResultPage',
-      redirect: '/page-demo/result/success',
-      component: getParentLayout('ResultPage'),
-
-      meta: {
-        title: t('routes.demo.page.result'),
-      },
-      children: [
-        {
-          path: 'success',
-          name: 'ResultSuccessPage',
-          component: () => import('/@/views/demo/page/result/success/index.vue'),
-          meta: {
-            title: t('routes.demo.page.resultSuccess'),
-          },
-        },
-        {
-          path: 'fail',
-          name: 'ResultFailPage',
-          component: () => import('/@/views/demo/page/result/fail/index.vue'),
-          meta: {
-            title: t('routes.demo.page.resultFail'),
-          },
-        },
-      ],
-    },
-    // =============================result end=============================
-
-    // =============================account start=============================
-    {
-      path: 'account',
-      name: 'AccountPage',
-      component: getParentLayout('AccountPage'),
-      redirect: '/page-demo/account/setting',
-      meta: {
-        title: t('routes.demo.page.account'),
-      },
-      children: [
-        {
-          path: 'center',
-          name: 'AccountCenterPage',
-          component: () => import('/@/views/demo/page/account/center/index.vue'),
-          meta: {
-            title: t('routes.demo.page.accountCenter'),
-          },
-        },
-        {
-          path: 'setting',
-          name: 'AccountSettingPage',
-          component: () => import('/@/views/demo/page/account/setting/index.vue'),
-          meta: {
-            title: t('routes.demo.page.accountSetting'),
-          },
-        },
-      ],
-    },
-    // =============================account end=============================
-    // =============================exception start=============================
-    {
-      path: 'exception',
-      name: 'ExceptionPage',
-      component: getParentLayout('ExceptionPage'),
-      redirect: '/page-demo/exception/404',
-      meta: {
-        title: t('routes.demo.page.exception'),
-      },
-      children: [
-        {
-          path: '403',
-          name: 'PageNotAccess',
-          component: ExceptionPage,
-          props: {
-            status: ExceptionEnum.PAGE_NOT_ACCESS,
-          },
-          meta: {
-            title: '403',
-          },
-        },
-        {
-          path: '404',
-          name: 'PageNotFound',
-          component: ExceptionPage,
-          props: {
-            status: ExceptionEnum.PAGE_NOT_FOUND,
-          },
-          meta: {
-            title: '404',
-          },
-        },
-        {
-          path: '500',
-          name: 'ServiceError',
-          component: ExceptionPage,
-          props: {
-            status: ExceptionEnum.ERROR,
-          },
-          meta: {
-            title: '500',
-          },
-        },
-        {
-          path: 'net-work-error',
-          name: 'NetWorkError',
-          component: ExceptionPage,
-          props: {
-            status: ExceptionEnum.NET_WORK_ERROR,
-          },
-          meta: {
-            title: t('routes.demo.page.netWorkError'),
-          },
-        },
-        {
-          path: 'not-data',
-          name: 'NotData',
-          component: ExceptionPage,
-          props: {
-            status: ExceptionEnum.PAGE_NOT_DATA,
-          },
-          meta: {
-            title: t('routes.demo.page.notData'),
-          },
-        },
-      ],
-    },
-    // =============================exception end=============================
-    // =============================list start=============================
-    {
-      path: 'list',
-      name: 'ListPage',
-      component: getParentLayout('ListPage'),
-      redirect: '/page-demo/list/card',
-      meta: {
-        title: t('routes.demo.page.list'),
-      },
-      children: [
-        {
-          path: 'basic',
-          name: 'ListBasicPage',
-          component: () => import('/@/views/demo/page/list/basic/index.vue'),
-          meta: {
-            title: t('routes.demo.page.listBasic'),
-          },
-        },
-        {
-          path: 'card',
-          name: 'ListCardPage',
-          component: () => import('/@/views/demo/page/list/card/index.vue'),
-          meta: {
-            title: t('routes.demo.page.listCard'),
-          },
-        },
-        {
-          path: 'search',
-          name: 'ListSearchPage',
-          component: () => import('/@/views/demo/page/list/search/index.vue'),
-          meta: {
-            title: t('routes.demo.page.listSearch'),
-          },
-        },
-      ],
-    },
-    // =============================list end=============================
-  ],
-};
-
-export default page;
diff --git a/src/router/routes/modules/demo/permission.ts b/src/router/routes/modules/demo/permission.ts
deleted file mode 100644
index e876362..0000000
--- a/src/router/routes/modules/demo/permission.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import type { AppRouteModule } from '/@/router/types';
-
-import { getParentLayout, LAYOUT } from '/@/router/constant';
-import { RoleEnum } from '/@/enums/roleEnum';
-import { t } from '/@/hooks/web/useI18n';
-
-const permission: AppRouteModule = {
-  path: '/permission',
-  name: 'Permission',
-  component: LAYOUT,
-  redirect: '/permission/front/page',
-  meta: {
-    orderNo: 15,
-    icon: 'ion:key-outline',
-    title: t('routes.demo.permission.permission'),
-  },
-
-  children: [
-    {
-      path: 'front',
-      name: 'PermissionFrontDemo',
-      component: getParentLayout('PermissionFrontDemo'),
-      meta: {
-        title: t('routes.demo.permission.front'),
-      },
-      children: [
-        {
-          path: 'page',
-          name: 'FrontPageAuth',
-          component: () => import('/@/views/demo/permission/front/index.vue'),
-          meta: {
-            title: t('routes.demo.permission.frontPage'),
-          },
-        },
-        {
-          path: 'btn',
-          name: 'FrontBtnAuth',
-          component: () => import('/@/views/demo/permission/front/Btn.vue'),
-          meta: {
-            title: t('routes.demo.permission.frontBtn'),
-          },
-        },
-        {
-          path: 'auth-pageA',
-          name: 'FrontAuthPageA',
-          component: () => import('/@/views/demo/permission/front/AuthPageA.vue'),
-          meta: {
-            title: t('routes.demo.permission.frontTestA'),
-            roles: [RoleEnum.SUPER],
-          },
-        },
-        {
-          path: 'auth-pageB',
-          name: 'FrontAuthPageB',
-          component: () => import('/@/views/demo/permission/front/AuthPageB.vue'),
-          meta: {
-            title: t('routes.demo.permission.frontTestB'),
-            roles: [RoleEnum.TEST],
-          },
-        },
-      ],
-    },
-    {
-      path: 'back',
-      name: 'PermissionBackDemo',
-      component: getParentLayout('PermissionBackDemo'),
-      meta: {
-        title: t('routes.demo.permission.back'),
-      },
-      children: [
-        {
-          path: 'page',
-          name: 'BackAuthPage',
-          component: () => import('/@/views/demo/permission/back/index.vue'),
-          meta: {
-            title: t('routes.demo.permission.backPage'),
-          },
-        },
-        {
-          path: 'btn',
-          name: 'BackAuthBtn',
-          component: () => import('/@/views/demo/permission/back/Btn.vue'),
-          meta: {
-            title: t('routes.demo.permission.backBtn'),
-          },
-        },
-      ],
-    },
-  ],
-};
-
-export default permission;
diff --git a/src/router/routes/modules/demo/setup.ts b/src/router/routes/modules/demo/setup.ts
deleted file mode 100644
index cec2e29..0000000
--- a/src/router/routes/modules/demo/setup.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import type { AppRouteModule } from '/@/router/types';
-
-import { LAYOUT } from '/@/router/constant';
-import { t } from '/@/hooks/web/useI18n';
-
-const setup: AppRouteModule = {
-  path: '/setup',
-  name: 'SetupDemo',
-  component: LAYOUT,
-  redirect: '/setup/index',
-  meta: {
-    orderNo: 90000,
-    hideChildrenInMenu: true,
-    icon: 'whh:paintroll',
-    title: t('routes.demo.setup.page'),
-  },
-  children: [
-    {
-      path: 'index',
-      name: 'SetupDemoPage',
-      component: () => import('/@/views/demo/setup/index.vue'),
-      meta: {
-        title: t('routes.demo.setup.page'),
-        icon: 'whh:paintroll',
-        hideMenu: true,
-      },
-    },
-  ],
-};
-
-export default setup;
diff --git a/src/router/routes/modules/demo/system.ts b/src/router/routes/modules/demo/system.ts
deleted file mode 100644
index 1443416..0000000
--- a/src/router/routes/modules/demo/system.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import type { AppRouteModule } from '/@/router/types';
-
-import { LAYOUT } from '/@/router/constant';
-import { t } from '/@/hooks/web/useI18n';
-
-const system: AppRouteModule = {
-  path: '/system',
-  name: 'System',
-  component: LAYOUT,
-  redirect: '/system/account',
-  meta: {
-    orderNo: 2000,
-    icon: 'ion:settings-outline',
-    title: t('routes.demo.system.moduleName'),
-  },
-  children: [
-    {
-      path: 'test',
-      name: 'TestManagement',
-      meta: {
-        title: t('routes.demo.system.test'),
-        ignoreKeepAlive: true,
-      },
-      component: () => import('/@/views/demo/system/test/index.vue'),
-    },
-    {
-      path: 'account',
-      name: 'AccountManagement',
-      meta: {
-        title: t('routes.demo.system.account'),
-        ignoreKeepAlive: false,
-      },
-      component: () => import('/@/views/demo/system/account/index.vue'),
-    },
-    {
-      path: 'account_detail/:id',
-      name: 'AccountDetail',
-      meta: {
-        hideMenu: true,
-        title: t('routes.demo.system.account_detail'),
-        ignoreKeepAlive: true,
-        showMenu: false,
-        currentActiveMenu: '/system/account',
-      },
-      component: () => import('/@/views/demo/system/account/AccountDetail.vue'),
-    },
-    {
-      path: 'role',
-      name: 'RoleManagement',
-      meta: {
-        title: t('routes.demo.system.role'),
-        ignoreKeepAlive: true,
-      },
-      component: () => import('/@/views/demo/system/role/index.vue'),
-    },
-    {
-      path: 'menu',
-      name: 'MenuManagement',
-      meta: {
-        title: t('routes.demo.system.menu'),
-        ignoreKeepAlive: true,
-      },
-      component: () => import('/@/views/demo/system/menu/index.vue'),
-    },
-    {
-      path: 'dept',
-      name: 'DeptManagement',
-      meta: {
-        title: t('routes.demo.system.dept'),
-        ignoreKeepAlive: true,
-      },
-      component: () => import('/@/views/demo/system/dept/index.vue'),
-    },
-    {
-      path: 'changePassword',
-      name: 'ChangePassword',
-      meta: {
-        title: t('routes.demo.system.password'),
-        ignoreKeepAlive: true,
-      },
-      component: () => import('/@/views/demo/system/password/index.vue'),
-    },
-  ],
-};
-
-export default system;
diff --git a/src/router/types.ts b/src/router/types.ts
deleted file mode 100644
index f94f7d9..0000000
--- a/src/router/types.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { defineComponent } from 'vue'
-import type { RouteMeta, RouteRecordRaw } from 'vue-router'
-import { RoleEnum } from '/@/enums/roleEnum'
-
-export type Component<T extends any = any> = ReturnType<typeof defineComponent> | (() => Promise<typeof import('*.vue')>) | (() => Promise<T>)
-
-// @ts-ignore
-export interface AppRouteRecordRaw extends Omit<RouteRecordRaw, 'meta'> {
-	name: string
-	meta: RouteMeta
-	component?: Component | string
-	components?: Component
-	children?: AppRouteRecordRaw[]
-	props?: Recordable
-	fullPath?: string
-	alwaysShow?: boolean
-}
-
-export interface MenuTag {
-	type?: 'primary' | 'error' | 'warn' | 'success'
-	content?: string
-	dot?: boolean
-}
-
-export interface Menu {
-	name: string
-
-	icon?: string
-
-	path: string
-
-	// path contains param, auto assignment.
-	paramPath?: string
-
-	disabled?: boolean
-
-	children?: Menu[]
-
-	orderNo?: number
-
-	roles?: RoleEnum[]
-
-	meta?: Partial<RouteMeta>
-
-	tag?: MenuTag
-
-	hideMenu?: boolean
-
-	alwaysShow?: boolean
-}
-
-export interface MenuModule {
-	orderNo?: number
-	menu: Menu
-}
-
-// export type AppRouteModule = RouteModule | AppRouteRecordRaw;
-export type AppRouteModule = AppRouteRecordRaw
diff --git a/src/settings/componentSetting.ts b/src/settings/componentSetting.ts
deleted file mode 100644
index 61af013..0000000
--- a/src/settings/componentSetting.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-// 鐢ㄤ簬閰嶇疆鏌愪簺缁勪欢鐨勫父瑙勯厤缃紝鑰屾棤闇�淇敼缁勪欢
-
-import type { SorterResult } from '../components/Table';
-
-export default {
-  // 琛ㄦ牸閰嶇疆
-  table: {
-    // 琛ㄦ牸鎺ュ彛璇锋眰閫氱敤閰嶇疆锛屽彲鍦ㄧ粍浠秔rop瑕嗙洊
-    // 鏀寔 xxx.xxx.xxx鏍煎紡
-    fetchSetting: {
-      // 浼犵粰鍚庡彴鐨勫綋鍓嶉〉瀛楁
-      pageField: 'pageNo',
-      // 浼犵粰鍚庡彴鐨勬瘡椤垫樉绀哄灏戞潯鐨勫瓧娈�
-      sizeField: 'pageSize',
-      // 鎺ュ彛杩斿洖琛ㄦ牸鏁版嵁鐨勫瓧娈�
-      listField: 'records',
-      // 鎺ュ彛杩斿洖琛ㄦ牸鎬绘暟鐨勫瓧娈�
-      totalField: 'total',
-    },
-    // 鍙�夌殑鍒嗛〉閫夐」
-    pageSizeOptions: ['10', '50', '80', '100'],
-    // 琛ㄦ牸榛樿灏哄
-    defaultSize: 'middle',
-    //榛樿姣忛〉鏄剧ず澶氬皯鏉�
-    defaultPageSize: 10,
-    // 榛樿鎺掑簭鏂规硶
-    defaultSortFn: (sortInfo: SorterResult) => {
-      //update-begin-author:taoyan date:2022-10-21 for: VUEN-2199銆愯〃鍗曡璁″櫒銆戝瀛楁鎺掑簭
-      if(sortInfo instanceof Array){
-        let sortInfoArray:any[] = []
-        for(let item of sortInfo){
-          let info = getSort(item);
-          if(info){
-            sortInfoArray.push(info)
-          }
-        }
-        return {
-          sortInfoString: JSON.stringify(sortInfoArray)
-        }
-      }else{
-        let info = getSort(sortInfo)
-        return info || {}
-      }
-      //update-end-author:taoyan date:2022-10-21 for: VUEN-2199銆愯〃鍗曡璁″櫒銆戝瀛楁鎺掑簭
-    },
-    // 鑷畾涔夎繃婊ゆ柟娉�
-    defaultFilterFn: (data: Partial<Recordable<string[]>>) => {
-      return data;
-    },
-  },
-  // 婊氬姩缁勪欢閰嶇疆
-  scrollbar: {
-    // 鏄惁浣跨敤鍘熺敓婊氬姩鏍峰紡
-    // 寮�鍚悗锛岃彍鍗曪紝寮圭獥锛屾娊灞変細浣跨敤鍘熺敓婊氬姩鏉$粍浠�
-    native: false,
-  },
-  //琛ㄥ崟閰嶇疆
-  form: {
-    labelCol: {
-      xs: { span: 24 },
-      sm: { span: 4 },
-    },
-    wrapperCol: {
-      xs: { span: 24 },
-      sm: { span: 18 },
-    },
-    //琛ㄥ崟榛樿鍐掑彿
-    colon: true,
-  },
-};
-
-/**
- * 鑾峰彇鎺掑簭淇℃伅
- * @param item
- */
-function getSort(item){
-  const { field, order } = item;
-  if (field && order) {
-    let sortType = 'ascend' == order ? 'asc' : 'desc';
-    return {
-      // 鎺掑簭瀛楁
-      column: field,
-      // 鎺掑簭鏂瑰紡 asc/desc
-      order: sortType,
-    };
-  }
-  return ''
-}
diff --git a/src/settings/designSetting.ts b/src/settings/designSetting.ts
deleted file mode 100644
index b5d82ea..0000000
--- a/src/settings/designSetting.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { ThemeEnum } from '../enums/appEnum';
-
-export const prefixCls = 'jeecg';
-
-export const darkMode = ThemeEnum.LIGHT;
-
-// app theme preset color
-export const APP_PRESET_COLOR_LIST: string[] = ['#0960bd', '#1890ff', '#009688', '#536dfe', '#ff5c93', '#ee4f12', '#0096c7', '#9c27b0', '#ff9800'];
-
-// header preset color
-export const HEADER_PRESET_BG_COLOR_LIST: string[] = [
-  '#ffffff',
-  '#151515',
-  '#009688',
-  '#5172DC',
-  '#018ffb',
-  '#409eff',
-  '#e74c3c',
-  '#24292e',
-  '#394664',
-  '#001529',
-  '#383f45',
-];
-
-// sider preset color
-export const SIDE_BAR_BG_COLOR_LIST: string[] = [
-  '#001529',
-  '#212121',
-  '#273352',
-  '#ffffff',
-  '#191b24',
-  '#191a23',
-  '#304156',
-  '#001628',
-  '#28333E',
-  '#344058',
-  '#383f45',
-];
diff --git a/src/settings/encryptionSetting.ts b/src/settings/encryptionSetting.ts
deleted file mode 100644
index 027bf33..0000000
--- a/src/settings/encryptionSetting.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { isDevMode } from '/@/utils/env';
-
-// 缂撳瓨榛樿杩囨湡鏃堕棿
-export const DEFAULT_CACHE_TIME = 60 * 60 * 24 * 7;
-
-// 寮�鍚紦瀛樺姞瀵嗗悗锛屽姞瀵嗗瘑閽ャ�傞噰鐢╝es鍔犲瘑
-export const cacheCipher = {
-  key: '_11111000001111@',
-  iv: '@11111000001111_',
-};
-
-// 鏄惁鍔犲瘑缂撳瓨锛岄粯璁ょ敓浜х幆澧冨姞瀵�
-export const enableStorageEncryption = !isDevMode();
diff --git a/src/settings/localeSetting.ts b/src/settings/localeSetting.ts
deleted file mode 100644
index 304f807..0000000
--- a/src/settings/localeSetting.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import type { DropMenu } from '../components/Dropdown';
-import type { LocaleSetting, LocaleType } from '/#/config';
-
-export const LOCALE: { [key: string]: LocaleType } = {
-  ZH_CN: 'zh_CN',
-  EN_US: 'en',
-};
-
-export const localeSetting: LocaleSetting = {
-  // 鏄惁鏄剧ず璇█閫夋嫨鍣�
-  showPicker: true,
-  // 褰撳墠璇█
-  locale: LOCALE.ZH_CN,
-  // 榛樿璇█
-  fallback: LOCALE.ZH_CN,
-  // 鍏佽鐨勮瑷�
-  availableLocales: [LOCALE.ZH_CN, LOCALE.EN_US],
-};
-
-// 璇█鍒楄〃
-export const localeList: DropMenu[] = [
-  {
-    text: '绠�浣撲腑鏂�',
-    event: LOCALE.ZH_CN,
-  },
-  {
-    text: 'English',
-    event: LOCALE.EN_US,
-  },
-];
diff --git a/src/settings/projectSetting.ts b/src/settings/projectSetting.ts
deleted file mode 100644
index 1c3c942..0000000
--- a/src/settings/projectSetting.ts
+++ /dev/null
@@ -1,192 +0,0 @@
-import type { ProjectConfig } from '/#/config';
-import { MenuTypeEnum, MenuModeEnum, TriggerEnum, MixSidebarTriggerEnum } from '/@/enums/menuEnum';
-import { CacheTypeEnum } from '/@/enums/cacheEnum';
-import {
-  ContentEnum,
-  PermissionModeEnum,
-  ThemeEnum,
-  RouterTransitionEnum,
-  SettingButtonPositionEnum,
-  SessionTimeoutProcessingEnum,
-  TabsThemeEnum,
-} from '/@/enums/appEnum';
-import { SIDE_BAR_BG_COLOR_LIST, HEADER_PRESET_BG_COLOR_LIST } from './designSetting';
-import { primaryColor } from '../../build/config/themeConfig';
-
-// ! 鏀瑰姩鍚庨渶瑕佹竻绌烘祻瑙堝櫒缂撳瓨
-const setting: ProjectConfig = {
-  // 鏄惁鏄剧ずSettingButton
-  showSettingButton: true,
-
-  // 鏄惁鏄剧ず涓婚鍒囨崲鎸夐挳
-  showDarkModeToggle: true,
-
-  // 璁剧疆鎸夐挳浣嶇疆 鍙�夐」
-  // SettingButtonPositionEnum.AUTO: 鑷姩閫夋嫨
-  // SettingButtonPositionEnum.HEADER: 浣嶄簬澶撮儴
-  // SettingButtonPositionEnum.FIXED: 鍥哄畾鍦ㄥ彸渚�
-  settingButtonPosition: SettingButtonPositionEnum.AUTO,
-
-  // 鏉冮檺妯″紡,榛樿鍓嶇瑙掕壊鏉冮檺妯″紡
-  // ROUTE_MAPPING: 鍓嶇妯″紡锛堣彍鍗曠敱璺敱鐢熸垚锛岄粯璁わ級
-  // ROLE锛氬墠绔ā寮忥紙鑿滃崟璺敱鍒嗗紑锛�
-  // BACK锛氬悗鍙版ā寮�
-  permissionMode: PermissionModeEnum.BACK,
-
-  // 鏉冮檺缂撳瓨瀛樻斁浣嶇疆銆傞粯璁ゅ瓨鏀句簬localStorage
-  permissionCacheType: CacheTypeEnum.LOCAL,
-
-  // 浼氳瘽瓒呮椂澶勭悊鏂规
-  // SessionTimeoutProcessingEnum.ROUTE_JUMP: 璺敱璺宠浆鍒扮櫥褰曢〉
-  // SessionTimeoutProcessingEnum.PAGE_COVERAGE: 鐢熸垚鐧诲綍寮圭獥锛岃鐩栧綋鍓嶉〉闈�
-  sessionTimeoutProcessing: SessionTimeoutProcessingEnum.ROUTE_JUMP,
-
-  // 椤圭洰涓婚鑹�
-  themeColor: primaryColor,
-
-  // 缃戠珯鐏拌壊妯″紡锛岀敤浜庡彲鑳芥偧蹇电殑鏃ユ湡寮�鍚�
-  grayMode: false,
-
-  // 鑹插急妯″紡
-  colorWeak: false,
-
-  // 鏄惁鍙栨秷鑿滃崟,椤堕儴,澶氭爣绛鹃〉鏄剧ず, 鐢ㄤ簬鍙兘鍐呭祵鍦ㄥ埆鐨勭郴缁熷唴
-  fullContent: false,
-
-  // 涓婚鍐呭瀹藉害
-  contentMode: ContentEnum.FULL,
-
-  // 鏄惁鏄剧ずlogo
-  showLogo: true,
-
-  // 鏄惁鏄剧ず搴曢儴淇℃伅 copyright
-  showFooter: false,
-
-  // 澶撮儴閰嶇疆
-  headerSetting: {
-    // 鑳屾櫙鑹�
-    bgColor: HEADER_PRESET_BG_COLOR_LIST[0],
-    // 鍥哄畾澶撮儴
-    fixed: true,
-    // 鏄惁鏄剧ず椤堕儴
-    show: true,
-    // 涓婚
-    theme: ThemeEnum.LIGHT,
-    // 寮�鍚攣灞忓姛鑳�
-    useLockPage: true,
-    // 鏄剧ず鍏ㄥ睆鎸夐挳
-    showFullScreen: true,
-    // 鏄剧ず鏂囨。鎸夐挳
-    showDoc: true,
-    // 鏄剧ず娑堟伅涓績鎸夐挳
-    showNotice: true,
-    // 鏄剧ず鑿滃崟鎼滅储鎸夐挳
-    showSearch: true,
-  },
-
-  // 鑿滃崟閰嶇疆
-  menuSetting: {
-    // 鑳屾櫙鑹�
-    bgColor: SIDE_BAR_BG_COLOR_LIST[0],
-    // 鏄惁鍥哄畾浣忓乏渚ц彍鍗�
-    fixed: true,
-    // 鑿滃崟鎶樺彔
-    collapsed: false,
-    // 鎶樺彔鑿滃崟鏃跺�欐槸鍚︽樉绀鸿彍鍗曞悕
-    collapsedShowTitle: false,
-    // 鏄惁鍙嫋鎷�
-    // Only limited to the opening of the left menu, the mouse has a drag bar on the right side of the menu
-    canDrag: false,
-    // Whether to show no dom
-    show: true,
-    // Whether to show dom
-    hidden: false,
-    // 鑿滃崟瀹藉害
-    menuWidth: 210,
-    // 鑿滃崟妯″紡
-    mode: MenuModeEnum.INLINE,
-    // 鑿滃崟绫诲瀷
-    type: MenuTypeEnum.SIDEBAR,
-    // 鑿滃崟涓婚
-    theme: ThemeEnum.DARK,
-    // 鍒嗗壊鑿滃崟
-    split: false,
-    // 椤堕儴鑿滃崟甯冨眬
-    topMenuAlign: 'center',
-    // 鎶樺彔瑙﹀彂鍣ㄧ殑浣嶇疆
-    trigger: TriggerEnum.HEADER,
-    // 鎵嬮鐞存ā寮忥紝鍙睍绀轰竴涓彍鍗�
-    accordion: true,
-    // 鍦ㄨ矾鐢卞垏鎹㈢殑鏃跺�欏叧闂乏渚ф贩鍚堣彍鍗曞睍寮�鑿滃崟
-    closeMixSidebarOnChange: false,
-    // 宸︿晶娣峰悎鑿滃崟妯″潡鍒囨崲瑙﹀彂鏂瑰紡 鈥榗lick鈥� |'hover'
-    mixSideTrigger: MixSidebarTriggerEnum.CLICK,
-    // 鏄惁鍥哄畾宸︿晶娣峰悎鑿滃崟
-    mixSideFixed: false,
-  },
-
-  // 澶氭爣绛�
-  multiTabsSetting: {
-    // 鍒锋柊鍚庢槸鍚︿繚鐣欏凡缁忔墦寮�鐨勬爣绛鹃〉
-    cache: false,
-    // 寮�鍚�
-    show: true,
-    // 鏄惁鍙互鎷栨嫿
-    canDrag: true,
-    // 寮�鍚揩閫熸搷浣�
-    showQuick: true,
-    // 鏄惁鏄剧ず鍒锋柊鎸夐挳
-    showRedo: true,
-    // 鏄惁鏄剧ず鎶樺彔鎸夐挳
-    showFold: true,
-    // 鏍囩椤垫牱寮�
-    theme: TabsThemeEnum.CARD,
-  },
-
-  // 鍔ㄧ敾閰嶇疆
-  transitionSetting: {
-    //  鏄惁寮�鍚垏鎹㈠姩鐢�
-    // The disabled state will also disable pageLoadinng
-    enable: true,
-
-    // 鍔ㄧ敾鍚� Route basic switching animation
-    basicTransition: RouterTransitionEnum.FADE_SIDE,
-
-    // 鏄惁鎵撳紑椤甸潰鍒囨崲loading
-    // Only open when enable=true
-    openPageLoading: true,
-
-    //鏄惁鎵撳紑椤甸潰鍒囨崲椤堕儴杩涘害鏉�
-    openNProgress: true,
-  },
-
-  // 鏄惁寮�鍚疜eepAlive缂撳瓨  寮�鍙戞椂鍊欐渶濂藉叧闂�,涓嶇劧姣忔閮介渶瑕佹竻闄ょ紦瀛�
-  openKeepAlive: true,
-
-  // 鑷姩閿佸睆鏃堕棿锛屼负0涓嶉攣灞忋�� 鍗曚綅鍒嗛挓 榛樿1涓皬鏃�
-  lockTime: 0,
-
-  // 鏄剧ず闈㈠寘灞�
-  showBreadCrumb: false,
-
-  // 鏄剧ず闈㈠寘灞戝浘鏍�
-  showBreadCrumbIcon: true,
-
-  // 鏄惁浣跨敤鍏ㄥ眬閿欒鎹曡幏
-  useErrorHandle: false,
-
-  // 鏄惁寮�鍚洖鍒伴《閮�
-  useOpenBackTop: true,
-
-  // 鏄惁鍙互宓屽叆iframe椤甸潰
-  canEmbedIFramePage: true,
-
-  // 鍒囨崲鐣岄潰鐨勬椂鍊欐槸鍚﹀垹闄ゆ湭鍏抽棴鐨刴essage鍙妌otify
-  closeMessageOnSwitch: true,
-
-  // 鍒囨崲鐣岄潰鐨勬椂鍊欐槸鍚﹀彇娑堝凡缁忓彂閫佷絾鏄湭鍝嶅簲鐨刪ttp璇锋眰銆�
-  // 濡傛灉寮�鍚�,鎯冲鍗曠嫭鎺ュ彛瑕嗙洊銆傚彲浠ュ湪鍗曠嫭鎺ュ彛璁剧疆
-  removeAllHttpPending: false,
-};
-
-export default setting;
diff --git a/src/settings/registerThirdComp.ts b/src/settings/registerThirdComp.ts
deleted file mode 100644
index 2001a45..0000000
--- a/src/settings/registerThirdComp.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import type { App } from 'vue';
-import { registerJVxeTable } from '/@/components/jeecg/JVxeTable';
-import { registerJVxeCustom } from '/@/components/JVxeCustom';
-
-// 娉ㄥ唽鍏ㄥ眬鑱婂ぉ琛ㄦ儏鍖�
-import { Picker } from 'emoji-mart-vue-fast/src';
-import { EmojiIndex } from "emoji-mart-vue-fast/src";
-import data from "emoji-mart-vue-fast/data/apple.json";
-
-// 娉ㄥ唽鍏ㄥ眬dayjs
-import dayjs from 'dayjs';
-import relativeTime from 'dayjs/plugin/relativeTime';
-import customParseFormat from 'dayjs/plugin/customParseFormat';
-
-export async function registerThirdComp(app: App) {
-  // 娉ㄥ唽 JVxeTable 缁勪欢
-  registerJVxeTable(app);
-  // 娉ㄥ唽 JVxeTable 鑷畾涔夌粍浠�
-  await registerJVxeCustom();
-  //---------------------------------------------------------------------
-  // 娉ㄥ唽鍏ㄥ眬鑱婂ぉ琛ㄦ儏鍖�
-  app.component('Picker', Picker);
-  let myEmojiIndex = new EmojiIndex(data, {
-    function() {
-      return true;
-    },
-    exclude:['recent','people','nature','foods','activity','places','objects','symbols','flags']
-  });
-  app.config.globalProperties.$globalEmojiIndex = myEmojiIndex
-  app.provide('$globalEmojiIndex', myEmojiIndex)
-  //---------------------------------------------------------------------
-  // 娉ㄥ唽鍏ㄥ眬dayjs
-  dayjs.locale('zh-cn');
-  dayjs.extend(relativeTime);
-  dayjs.extend(customParseFormat);
-  app.config.globalProperties.$dayjs = dayjs
-  app.provide('$dayjs', dayjs)
-  //---------------------------------------------------------------------
-}
diff --git a/src/settings/siteSetting.ts b/src/settings/siteSetting.ts
deleted file mode 100644
index b6deb0e..0000000
--- a/src/settings/siteSetting.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-// github repo url
-export const GITHUB_URL = 'https://github.com/jeecgboot/jeecgboot-vue3';
-
-// vue-Jeecg-admin-next-doc
-export const DOC_URL = 'http://vue3.jeecg.com';
-
-// site url
-export const SITE_URL = 'http://www.jeecg.com';
diff --git a/src/store/index.ts b/src/store/index.ts
deleted file mode 100644
index db23abb..0000000
--- a/src/store/index.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import type { App } from 'vue';
-import { createPinia } from 'pinia';
-const store = createPinia();
-
-export function setupStore(app: App<Element>) {
-  app.use(store);
-}
-
-export { store };
diff --git a/src/store/modules/app.ts b/src/store/modules/app.ts
deleted file mode 100644
index 999095e..0000000
--- a/src/store/modules/app.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-import type { ProjectConfig, HeaderSetting, MenuSetting, TransitionSetting, MultiTabsSetting } from '/#/config';
-import type { BeforeMiniState } from '/#/store';
-
-import { defineStore } from 'pinia';
-import { store } from '/@/store';
-
-import { ThemeEnum } from '/@/enums/appEnum';
-import { APP_DARK_MODE_KEY_, PROJ_CFG_KEY } from '/@/enums/cacheEnum';
-import { Persistent } from '/@/utils/cache/persistent';
-import { darkMode } from '/@/settings/designSetting';
-import { resetRouter } from '/@/router';
-import { deepMerge } from '/@/utils';
-
-interface AppState {
-  darkMode?: ThemeEnum;
-  // Page loading status
-  pageLoading: boolean;
-  // project config
-  projectConfig: ProjectConfig | null;
-  // When the window shrinks, remember some states, and restore these states when the window is restored
-  beforeMiniInfo: BeforeMiniState;
-  // 椤甸潰璺宠浆涓存椂鍙傛暟瀛樺偍
-  messageHrefParams: any
-}
-let timeId: TimeoutHandle;
-export const useAppStore = defineStore({
-  id: 'app',
-  state: (): AppState => ({
-    darkMode: undefined,
-    pageLoading: false,
-    projectConfig: Persistent.getLocal(PROJ_CFG_KEY),
-    beforeMiniInfo: {},
-    messageHrefParams: {}
-  }),
-  getters: {
-    getPageLoading(): boolean {
-      return this.pageLoading;
-    },
-    getDarkMode(): 'light' | 'dark' | string {
-      return this.darkMode || localStorage.getItem(APP_DARK_MODE_KEY_) || darkMode;
-    },
-
-    getBeforeMiniInfo(): BeforeMiniState {
-      return this.beforeMiniInfo;
-    },
-
-    getProjectConfig(): ProjectConfig {
-      return this.projectConfig || ({} as ProjectConfig);
-    },
-
-    getHeaderSetting(): HeaderSetting {
-      return this.getProjectConfig.headerSetting;
-    },
-    getMenuSetting(): MenuSetting {
-      return this.getProjectConfig.menuSetting;
-    },
-    getTransitionSetting(): TransitionSetting {
-      return this.getProjectConfig.transitionSetting;
-    },
-    getMultiTabsSetting(): MultiTabsSetting {
-      return this.getProjectConfig.multiTabsSetting;
-    },
-    getMessageHrefParams():any{
-      return this.messageHrefParams;
-    }
-  },
-  actions: {
-    setPageLoading(loading: boolean): void {
-      this.pageLoading = loading;
-    },
-
-    setDarkMode(mode: ThemeEnum): void {
-      this.darkMode = mode;
-      localStorage.setItem(APP_DARK_MODE_KEY_, mode);
-    },
-
-    setBeforeMiniInfo(state: BeforeMiniState): void {
-      this.beforeMiniInfo = state;
-    },
-
-    setProjectConfig(config: DeepPartial<ProjectConfig>): void {
-      this.projectConfig = deepMerge(this.projectConfig || {}, config);
-      Persistent.setLocal(PROJ_CFG_KEY, this.projectConfig);
-    },
-
-    async resetAllState() {
-      resetRouter();
-      Persistent.clearAll();
-    },
-    async setPageLoadingAction(loading: boolean): Promise<void> {
-      if (loading) {
-        clearTimeout(timeId);
-        // Prevent flicker
-        timeId = setTimeout(() => {
-          this.setPageLoading(loading);
-        }, 50);
-      } else {
-        this.setPageLoading(loading);
-        clearTimeout(timeId);
-      }
-    },
-    setMessageHrefParams(params: any): void {
-      this.messageHrefParams = params;
-    },
-    
-  },
-});
-
-// Need to be used outside the setup
-export function useAppStoreWithOut() {
-  return useAppStore(store);
-}
diff --git a/src/store/modules/errorLog.ts b/src/store/modules/errorLog.ts
deleted file mode 100644
index c95edba..0000000
--- a/src/store/modules/errorLog.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import type { ErrorLogInfo } from '/#/store';
-
-import { defineStore } from 'pinia';
-import { store } from '/@/store';
-
-import { formatToDateTime } from '/@/utils/dateUtil';
-import projectSetting from '/@/settings/projectSetting';
-
-import { ErrorTypeEnum } from '/@/enums/exceptionEnum';
-
-export interface ErrorLogState {
-  errorLogInfoList: Nullable<ErrorLogInfo[]>;
-  errorLogListCount: number;
-}
-
-export const useErrorLogStore = defineStore({
-  id: 'app-error-log',
-  state: (): ErrorLogState => ({
-    errorLogInfoList: null,
-    errorLogListCount: 0,
-  }),
-  getters: {
-    getErrorLogInfoList(): ErrorLogInfo[] {
-      return this.errorLogInfoList || [];
-    },
-    getErrorLogListCount(): number {
-      return this.errorLogListCount;
-    },
-  },
-  actions: {
-    addErrorLogInfo(info: ErrorLogInfo) {
-      const item = {
-        ...info,
-        time: formatToDateTime(new Date()),
-      };
-      this.errorLogInfoList = [item, ...(this.errorLogInfoList || [])];
-      this.errorLogListCount += 1;
-    },
-
-    setErrorLogListCount(count: number): void {
-      this.errorLogListCount = count;
-    },
-
-    /**
-     * Triggered after ajax request error
-     * @param error
-     * @returns
-     */
-    addAjaxErrorInfo(error) {
-      const { useErrorHandle } = projectSetting;
-      if (!useErrorHandle) {
-        return;
-      }
-      const errInfo: Partial<ErrorLogInfo> = {
-        message: error.message,
-        type: ErrorTypeEnum.AJAX,
-      };
-      if (error.response) {
-        const { config: { url = '', data: params = '', method = 'get', headers = {} } = {}, data = {} } = error.response;
-        errInfo.url = url;
-        errInfo.name = 'Ajax Error!';
-        errInfo.file = '-';
-        errInfo.stack = JSON.stringify(data);
-        errInfo.detail = JSON.stringify({ params, method, headers });
-      }
-      this.addErrorLogInfo(errInfo as ErrorLogInfo);
-    },
-  },
-});
-
-// Need to be used outside the setup
-export function useErrorLogStoreWithOut() {
-  return useErrorLogStore(store);
-}
diff --git a/src/store/modules/locale.ts b/src/store/modules/locale.ts
deleted file mode 100644
index eb326b8..0000000
--- a/src/store/modules/locale.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import type { LocaleSetting, LocaleType } from '/#/config';
-
-import { defineStore } from 'pinia';
-import { store } from '/@/store';
-
-import { LOCALE_KEY } from '/@/enums/cacheEnum';
-import { createLocalStorage } from '/@/utils/cache';
-import { localeSetting } from '/@/settings/localeSetting';
-
-const ls = createLocalStorage();
-
-const lsLocaleSetting = (ls.get(LOCALE_KEY) || localeSetting) as LocaleSetting;
-
-interface LocaleState {
-  localInfo: LocaleSetting;
-  pathTitleMap: object;
-  // myapps涓婚鑹诧紙浣庝唬鐮佸簲鐢ㄥ垪琛ㄩ椤碉級
-  appIndexTheme: string
-  // myapps - 璺宠浆鍓嶈矾鐢卞湴鍧�
-  appMainPth: string
-}
-
-export const useLocaleStore = defineStore({
-  id: 'app-locale',
-  state: (): LocaleState => ({
-    localInfo: lsLocaleSetting,
-    pathTitleMap: {},
-    appIndexTheme: '',
-    appMainPth: ''
-  }),
-  getters: {
-    getShowPicker(): boolean {
-      return !!this.localInfo?.showPicker;
-    },
-    getLocale(): LocaleType {
-      return this.localInfo?.locale ?? 'zh_CN';
-    },
-    //update-begin-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-    getPathTitle: (state) => {
-      return (path) => state.pathTitleMap[path];
-    },
-    //update-end-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-    getAppIndexTheme(): string {
-      return this.appIndexTheme;
-    },
-    getAppMainPth(): string {
-      return this.appMainPth;
-    },
-  },
-  actions: {
-    /**
-     * Set up multilingual information and cache
-     * @param info multilingual info
-     */
-    setLocaleInfo(info: Partial<LocaleSetting>) {
-      this.localInfo = { ...this.localInfo, ...info };
-      ls.set(LOCALE_KEY, this.localInfo);
-    },
-    /**
-     * Initialize multilingual information and load the existing configuration from the local cache
-     */
-    initLocale() {
-      this.setLocaleInfo({
-        ...localeSetting,
-        ...this.localInfo,
-      });
-    },
-    //update-begin-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-    setPathTitle(path, title) {
-      this.pathTitleMap[path] = title;
-    },
-    //update-end-author:taoyan date:2022-6-1 for: VUEN-1144 online 閰嶇疆鎴愯彍鍗曞悗锛屾墦寮�鑿滃崟锛屾樉绀哄悕绉版湭灞曠ず涓鸿彍鍗曞悕绉�
-    setAppIndexTheme(theme) {
-      this.appIndexTheme = theme;
-    },
-    setAppMainPth(path) {
-      this.appMainPth = path;
-    },
-  },
-});
-
-// Need to be used outside the setup
-export function useLocaleStoreWithOut() {
-  return useLocaleStore(store);
-}
diff --git a/src/store/modules/lock.ts b/src/store/modules/lock.ts
deleted file mode 100644
index 6c22dbd..0000000
--- a/src/store/modules/lock.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import type { LockInfo } from '/#/store';
-
-import { defineStore } from 'pinia';
-
-import { LOCK_INFO_KEY } from '/@/enums/cacheEnum';
-import { Persistent } from '/@/utils/cache/persistent';
-import { useUserStore } from './user';
-
-interface LockState {
-  lockInfo: Nullable<LockInfo>;
-}
-
-export const useLockStore = defineStore({
-  id: 'app-lock',
-  state: (): LockState => ({
-    lockInfo: Persistent.getLocal(LOCK_INFO_KEY),
-  }),
-  getters: {
-    getLockInfo(): Nullable<LockInfo> {
-      return this.lockInfo;
-    },
-  },
-  actions: {
-    setLockInfo(info: LockInfo) {
-      this.lockInfo = Object.assign({}, this.lockInfo, info);
-      Persistent.setLocal(LOCK_INFO_KEY, this.lockInfo, true);
-    },
-    resetLockInfo() {
-      Persistent.removeLocal(LOCK_INFO_KEY, true);
-      this.lockInfo = null;
-    },
-    // Unlock
-    async unLock(password?: string) {
-      const userStore = useUserStore();
-      if (this.lockInfo?.pwd === password) {
-        this.resetLockInfo();
-        return true;
-      }
-      const tryLogin = async () => {
-        try {
-          const username = userStore.getUserInfo?.username;
-          const res = await userStore.login({
-            username,
-            password: password!,
-            goHome: false,
-            mode: 'none',
-          });
-          if (res) {
-            this.resetLockInfo();
-          }
-          return res;
-        } catch (error) {
-          return false;
-        }
-      };
-      return await tryLogin();
-    },
-  },
-});
diff --git a/src/store/modules/multipleTab.ts b/src/store/modules/multipleTab.ts
deleted file mode 100644
index 23b027e..0000000
--- a/src/store/modules/multipleTab.ts
+++ /dev/null
@@ -1,356 +0,0 @@
-import type { RouteLocationNormalized, RouteLocationRaw, Router } from 'vue-router';
-
-import { toRaw, unref } from 'vue';
-import { defineStore } from 'pinia';
-import { store } from '/@/store';
-
-import { useGo, useRedo } from '/@/hooks/web/usePage';
-import { Persistent } from '/@/utils/cache/persistent';
-
-import { PageEnum } from '/@/enums/pageEnum';
-import { PAGE_NOT_FOUND_ROUTE, REDIRECT_ROUTE } from '/@/router/routes/basic';
-import { getRawRoute } from '/@/utils';
-import { MULTIPLE_TABS_KEY } from '/@/enums/cacheEnum';
-
-import projectSetting from '/@/settings/projectSetting';
-import { useUserStore } from '/@/store/modules/user';
-
-export interface MultipleTabState {
-  cacheTabList: Set<string>;
-  tabList: RouteLocationNormalized[];
-  lastDragEndIndex: number;
-}
-
-function handleGotoPage(router: Router) {
-  const go = useGo(router);
-  go(unref(router.currentRoute).path, true);
-}
-const getToTarget = (tabItem: RouteLocationNormalized) => {
-  const { params, path, query } = tabItem;
-  return {
-    params: params || {},
-    path,
-    query: query || {},
-  };
-};
-
-const cacheTab = projectSetting.multiTabsSetting.cache;
-
-export const useMultipleTabStore = defineStore({
-  id: 'app-multiple-tab',
-  state: (): MultipleTabState => ({
-    // Tabs that need to be cached
-    cacheTabList: new Set(),
-    // multiple tab list
-    tabList: cacheTab ? Persistent.getLocal(MULTIPLE_TABS_KEY) || [] : [],
-    // Index of the last moved tab
-    lastDragEndIndex: 0,
-  }),
-  getters: {
-    getTabList(): RouteLocationNormalized[] {
-      return this.tabList;
-    },
-    getCachedTabList(): string[] {
-      return Array.from(this.cacheTabList);
-    },
-    getLastDragEndIndex(): number {
-      return this.lastDragEndIndex;
-    },
-  },
-  actions: {
-    /**
-     * Update the cache according to the currently opened tabs
-     */
-    async updateCacheTab() {
-      const cacheMap: Set<string> = new Set();
-
-      for (const tab of this.tabList) {
-        const item = getRawRoute(tab);
-        // Ignore the cache
-        const needCache = !item.meta?.ignoreKeepAlive;
-        if (!needCache) {
-          continue;
-        }
-        const name = item.name as string;
-        cacheMap.add(name);
-      }
-      this.cacheTabList = cacheMap;
-    },
-
-    /**
-     * Refresh tabs
-     */
-    async refreshPage(router: Router) {
-      const { currentRoute } = router;
-      const route = unref(currentRoute);
-      const name = route.name;
-
-      const findTab = this.getCachedTabList.find((item) => item === name);
-      if (findTab) {
-        this.cacheTabList.delete(findTab);
-      }
-      const redo = useRedo(router);
-      await redo();
-    },
-    clearCacheTabs(): void {
-      this.cacheTabList = new Set();
-    },
-    resetState(): void {
-      this.tabList = [];
-      this.clearCacheTabs();
-    },
-    goToPage(router: Router) {
-      const go = useGo(router);
-      const len = this.tabList.length;
-      const { path } = unref(router.currentRoute);
-
-      let toPath: PageEnum | string = PageEnum.BASE_HOME;
-
-      if (len > 0) {
-        const page = this.tabList[len - 1];
-        const p = page.fullPath || page.path;
-        if (p) {
-          toPath = p;
-        }
-      }
-      // Jump to the current page and report an error
-      path !== toPath && go(toPath as PageEnum, true);
-    },
-
-    async addTab(route: RouteLocationNormalized) {
-      const { path, name, fullPath, params, query, meta } = getRawRoute(route);
-      // 404  The page does not need to add a tab
-      if (
-        path === PageEnum.ERROR_PAGE ||
-        path === PageEnum.BASE_LOGIN ||
-        !name ||
-        [REDIRECT_ROUTE.name, PAGE_NOT_FOUND_ROUTE.name].includes(name as string)
-      ) {
-        return;
-      }
-
-      let updateIndex = -1;
-      // Existing pages, do not add tabs repeatedly
-      const tabHasExits = this.tabList.some((tab, index) => {
-        updateIndex = index;
-        return (tab.fullPath || tab.path) === (fullPath || path);
-      });
-
-      // If the tab already exists, perform the update operation
-      if (tabHasExits) {
-        const curTab = toRaw(this.tabList)[updateIndex];
-        if (!curTab) {
-          return;
-        }
-        curTab.params = params || curTab.params;
-        curTab.query = query || curTab.query;
-        curTab.fullPath = fullPath || curTab.fullPath;
-        this.tabList.splice(updateIndex, 1, curTab);
-      } else {
-        // Add tab
-        // 鑾峰彇鍔ㄦ�佽矾鐢辨墦寮�鏁帮紝瓒呰繃 0 鍗充唬琛ㄩ渶瑕佹帶鍒舵墦寮�鏁�
-        const dynamicLevel = meta?.dynamicLevel ?? -1;
-        if (dynamicLevel > 0) {
-          // 濡傛灉鍔ㄦ�佽矾鐢卞眰绾уぇ浜� 0 浜嗭紝閭d箞灏辫闄愬埗璇ヨ矾鐢辩殑鎵撳紑鏁伴檺鍒朵簡
-          // 棣栧厛鑾峰彇鍒扮湡瀹炵殑璺敱锛屼娇鐢ㄩ厤缃柟寮忓噺灏戣绠楀紑閿�.
-          // const realName: string = path.match(/(\S*)\//)![1];
-          const realPath = meta?.realPath ?? '';
-          // 鑾峰彇鍒板凡缁忔墦寮�鐨勫姩鎬佽矾鐢辨暟, 鍒ゆ柇鏄惁澶т簬鏌愪竴涓��
-          if (this.tabList.filter((e) => e.meta?.realPath ?? '' === realPath).length >= dynamicLevel) {
-            // 鍏抽棴绗竴涓�
-            const index = this.tabList.findIndex((item) => item.meta.realPath === realPath);
-            index !== -1 && this.tabList.splice(index, 1);
-          }
-        }
-        this.tabList.push(route);
-      }
-      this.updateCacheTab();
-      cacheTab && Persistent.setLocal(MULTIPLE_TABS_KEY, this.tabList);
-    },
-
-    async closeTab(tab: RouteLocationNormalized, router: Router) {
-      const close = (route: RouteLocationNormalized) => {
-        const { fullPath, meta: { affix } = {} } = route;
-        if (affix) {
-          return;
-        }
-        const index = this.tabList.findIndex((item) => item.fullPath === fullPath);
-        index !== -1 && this.tabList.splice(index, 1);
-      };
-
-      const { currentRoute, replace } = router;
-
-      const { path } = unref(currentRoute);
-      if (path !== tab.path) {
-        // Closed is not the activation tab
-        close(tab);
-        return;
-      }
-
-      // Closed is activated atb
-      let toTarget: RouteLocationRaw = {};
-
-      const index = this.tabList.findIndex((item) => item.path === path);
-
-      // If the current is the leftmost tab
-      if (index === 0) {
-        // There is only one tab, then jump to the homepage, otherwise jump to the right tab
-        if (this.tabList.length === 1) {
-          const userStore = useUserStore();
-          toTarget = userStore.getUserInfo.homePath || PageEnum.BASE_HOME;
-        } else {
-          //  Jump to the right tab
-          const page = this.tabList[index + 1];
-          toTarget = getToTarget(page);
-        }
-      } else {
-        // Close the current tab
-        const page = this.tabList[index - 1];
-        toTarget = getToTarget(page);
-      }
-      close(currentRoute.value);
-      await replace(toTarget);
-    },
-
-    // Close according to key
-    async closeTabByKey(key: string, router: Router) {
-      const index = this.tabList.findIndex((item) => (item.fullPath || item.path) === key);
-      if (index !== -1) {
-        await this.closeTab(this.tabList[index], router);
-        const { currentRoute, replace } = router;
-        // 妫�鏌ュ綋鍓嶈矾鐢辨槸鍚﹀瓨鍦ㄤ簬tabList涓�
-        const isActivated = this.tabList.findIndex((item) => {
-          return item.fullPath === currentRoute.value.fullPath;
-        });
-        // 濡傛灉褰撳墠璺敱涓嶅瓨鍦ㄤ簬TabList涓紝灏濊瘯鍒囨崲鍒板叾瀹冭矾鐢�
-        if (isActivated === -1) {
-          let pageIndex;
-          if (index > 0) {
-            pageIndex = index - 1;
-          } else if (index < this.tabList.length - 1) {
-            pageIndex = index + 1;
-          } else {
-            pageIndex = -1;
-          }
-          if (pageIndex >= 0) {
-            const page = this.tabList[index - 1];
-            const toTarget = getToTarget(page);
-            await replace(toTarget);
-          }
-        }
-      }
-    },
-
-    // Sort the tabs
-    async sortTabs(oldIndex: number, newIndex: number) {
-      const currentTab = this.tabList[oldIndex];
-      this.tabList.splice(oldIndex, 1);
-      this.tabList.splice(newIndex, 0, currentTab);
-      this.lastDragEndIndex = this.lastDragEndIndex + 1;
-    },
-
-    // Close the tab on the right and jump
-    async closeLeftTabs(route: RouteLocationNormalized, router: Router) {
-      const index = this.tabList.findIndex((item) => item.path === route.path);
-
-      if (index > 0) {
-        const leftTabs = this.tabList.slice(0, index);
-        const pathList: string[] = [];
-        for (const item of leftTabs) {
-          const affix = item?.meta?.affix ?? false;
-          if (!affix) {
-            pathList.push(item.fullPath);
-          }
-        }
-        this.bulkCloseTabs(pathList);
-      }
-      this.updateCacheTab();
-      handleGotoPage(router);
-    },
-
-    // Close the tab on the left and jump
-    async closeRightTabs(route: RouteLocationNormalized, router: Router) {
-      const index = this.tabList.findIndex((item) => item.fullPath === route.fullPath);
-
-      if (index >= 0 && index < this.tabList.length - 1) {
-        const rightTabs = this.tabList.slice(index + 1, this.tabList.length);
-
-        const pathList: string[] = [];
-        for (const item of rightTabs) {
-          const affix = item?.meta?.affix ?? false;
-          if (!affix) {
-            pathList.push(item.fullPath);
-          }
-        }
-        this.bulkCloseTabs(pathList);
-      }
-      this.updateCacheTab();
-      handleGotoPage(router);
-    },
-
-    async closeAllTab(router: Router) {
-      this.tabList = this.tabList.filter((item) => item?.meta?.affix ?? false);
-      this.clearCacheTabs();
-      this.goToPage(router);
-    },
-
-    /**
-     * Close other tabs
-     */
-    async closeOtherTabs(route: RouteLocationNormalized, router: Router) {
-      const closePathList = this.tabList.map((item) => item.fullPath);
-
-      const pathList: string[] = [];
-
-      for (const path of closePathList) {
-        if (path !== route.fullPath) {
-          const closeItem = this.tabList.find((item) => item.path === path);
-          if (!closeItem) {
-            continue;
-          }
-          const affix = closeItem?.meta?.affix ?? false;
-          if (!affix) {
-            pathList.push(closeItem.fullPath);
-          }
-        }
-      }
-      this.bulkCloseTabs(pathList);
-      this.updateCacheTab();
-      handleGotoPage(router);
-    },
-
-    /**
-     * Close tabs in bulk
-     */
-    async bulkCloseTabs(pathList: string[]) {
-      this.tabList = this.tabList.filter((item) => !pathList.includes(item.fullPath));
-    },
-
-    /**
-     * Set tab's title
-     */
-    async setTabTitle(title: string, route: RouteLocationNormalized) {
-      const findTab = this.getTabList.find((item) => item === route);
-      if (findTab) {
-        findTab.meta.title = title;
-        await this.updateCacheTab();
-      }
-    },
-    /**
-     * replace tab's path
-     * **/
-    async updateTabPath(fullPath: string, route: RouteLocationNormalized) {
-      const findTab = this.getTabList.find((item) => item === route);
-      if (findTab) {
-        findTab.fullPath = fullPath;
-        findTab.path = fullPath;
-        await this.updateCacheTab();
-      }
-    },
-  },
-});
-
-// Need to be used outside the setup
-export function useMultipleTabWithOutStore() {
-  return useMultipleTabStore(store);
-}
diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts
deleted file mode 100644
index c09c301..0000000
--- a/src/store/modules/permission.ts
+++ /dev/null
@@ -1,304 +0,0 @@
-import type { AppRouteRecordRaw, Menu } from '/@/router/types'
-
-import { defineStore } from 'pinia'
-import { toRaw } from 'vue'
-import { useAppStoreWithOut } from './app'
-import { useUserStore } from './user'
-import { useI18n } from '/@/hooks/web/useI18n'
-import { transformRouteToMenu } from '/@/router/helper/menuHelper'
-import { addSlashToRouteComponent, flatMultiLevelRoutes, transformObjToRoute } from '/@/router/helper/routeHelper'
-import { store } from '/@/store'
-
-import projectSetting from '/@/settings/projectSetting'
-
-import { PermissionModeEnum } from '/@/enums/appEnum'
-
-import { asyncRoutes } from '/@/router/routes'
-import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'
-
-import { filter } from '/@/utils/helper/treeHelper'
-
-import { getMenuList, switchVue3Menu } from '/@/api/sys/menu'
-import { getPermCode } from '/@/api/sys/user'
-
-import { PageEnum } from '/@/enums/pageEnum'
-import { useMessage } from '/@/hooks/web/useMessage'
-
-// 绯荤粺鏉冮檺
-interface AuthItem {
-	// 鑿滃崟鏉冮檺缂栫爜锛屼緥濡傦細鈥渟ys:schedule:list,sys:schedule:info鈥�,澶氫釜閫楀彿闅斿紑
-	action: string
-	// 鏉冮檺绛栫暐1鏄剧ず2绂佺敤
-	type: string | number
-	// 鏉冮檺鐘舵��(0鏃犳晥1鏈夋晥)
-	status: string | number
-	// 鏉冮檺鍚嶇О
-	describe?: string
-	isAuth?: boolean
-}
-
-interface PermissionState {
-	// Permission code list
-	permCodeList: string[] | number[]
-	// Whether the route has been dynamically added
-	isDynamicAddedRoute: boolean
-	// To trigger a menu update
-	lastBuildMenuTime: number
-	// Backstage menu list
-	backMenuList: Menu[]
-	frontMenuList: Menu[]
-	// 鐢ㄦ埛鎵�鎷ユ湁鐨勬潈闄�
-	authList: AuthItem[]
-	// 鍏ㄩ儴鏉冮檺閰嶇疆
-	allAuthList: AuthItem[]
-	// 绯荤粺瀹夊叏妯″紡
-	sysSafeMode: boolean
-	// online瀛愯〃鎸夐挳鏉冮檺
-	onlineSubTableAuthMap: object
-}
-export const usePermissionStore = defineStore({
-	id: 'app-permission',
-	state: (): PermissionState => ({
-		permCodeList: [],
-		// Whether the route has been dynamically added
-		isDynamicAddedRoute: false,
-		// To trigger a menu update
-		lastBuildMenuTime: 0,
-		// Backstage menu list
-		backMenuList: [],
-		// menu List
-		frontMenuList: [],
-		authList: [],
-		allAuthList: [],
-		sysSafeMode: false,
-		onlineSubTableAuthMap: {},
-	}),
-	getters: {
-		getPermCodeList(): string[] | number[] {
-			return this.permCodeList
-		},
-		getBackMenuList(): Menu[] {
-			return this.backMenuList
-		},
-		getFrontMenuList(): Menu[] {
-			return this.frontMenuList
-		},
-		getLastBuildMenuTime(): number {
-			return this.lastBuildMenuTime
-		},
-		getIsDynamicAddedRoute(): boolean {
-			return this.isDynamicAddedRoute
-		},
-
-		//update-begin-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒�
-		getOnlineSubTableAuth: (state) => {
-			return (code) => state.onlineSubTableAuthMap[code]
-		},
-		//update-end-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒�
-	},
-	actions: {
-		setPermCodeList(codeList: string[]) {
-			this.permCodeList = codeList
-		},
-
-		setBackMenuList(list: Menu[]) {
-			this.backMenuList = list
-			list?.length > 0 && this.setLastBuildMenuTime()
-		},
-
-		setFrontMenuList(list: Menu[]) {
-			this.frontMenuList = list
-		},
-
-		setLastBuildMenuTime() {
-			this.lastBuildMenuTime = new Date().getTime()
-		},
-
-		setDynamicAddedRoute(added: boolean) {
-			this.isDynamicAddedRoute = added
-		},
-		resetState(): void {
-			this.isDynamicAddedRoute = false
-			this.permCodeList = []
-			this.backMenuList = []
-			this.lastBuildMenuTime = 0
-		},
-		async changePermissionCode() {
-			const systemPermission = await getPermCode()
-			const codeList = systemPermission.codeList
-			this.setPermCodeList(codeList)
-			this.setAuthData(systemPermission)
-		},
-		async buildRoutesAction(): Promise<AppRouteRecordRaw[]> {
-			const { t } = useI18n()
-			const userStore = useUserStore()
-			const appStore = useAppStoreWithOut()
-
-			let routes: AppRouteRecordRaw[] = []
-			const roleList = toRaw(userStore.getRoleList) || []
-			const { permissionMode = projectSetting.permissionMode } = appStore.getProjectConfig
-
-			const routeFilter = (route: AppRouteRecordRaw) => {
-				const { meta } = route
-				const { roles } = meta || {}
-				if (!roles) return true
-				return roleList.some((role) => roles.includes(role))
-			}
-
-			const routeRemoveIgnoreFilter = (route: AppRouteRecordRaw) => {
-				const { meta } = route
-				const { ignoreRoute } = meta || {}
-				return !ignoreRoute
-			}
-
-			/**
-			 * @description 鏍规嵁璁剧疆鐨勯椤祊ath锛屼慨姝outes涓殑affix鏍囪锛堝浐瀹氶椤碉級
-			 * */
-			const patchHomeAffix = (routes: AppRouteRecordRaw[]) => {
-				if (!routes || routes.length === 0) return
-				let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME
-				function patcher(routes: AppRouteRecordRaw[], parentPath = '') {
-					if (parentPath) parentPath = parentPath + '/'
-					routes.forEach((route: AppRouteRecordRaw) => {
-						const { path, children, redirect } = route
-						const currentPath = path.startsWith('/') ? path : parentPath + path
-						if (currentPath === homePath) {
-							if (redirect) {
-								homePath = route.redirect! as string
-							} else {
-								route.meta = Object.assign({}, route.meta, { affix: true })
-								throw new Error('end')
-							}
-						}
-						children && children.length > 0 && patcher(children, currentPath)
-					})
-				}
-				try {
-					patcher(routes)
-				} catch (e) {
-					// 宸插鐞嗗畬姣曡烦鍑哄惊鐜�
-				}
-				return
-			}
-
-			switch (permissionMode) {
-				case PermissionModeEnum.ROLE:
-					routes = filter(asyncRoutes, routeFilter)
-					routes = routes.filter(routeFilter)
-					//  灏嗗绾ц矾鐢辫浆鎹负浜岀骇
-					routes = flatMultiLevelRoutes(routes)
-					break
-
-				case PermissionModeEnum.ROUTE_MAPPING:
-					routes = filter(asyncRoutes, routeFilter)
-					routes = routes.filter(routeFilter)
-					const menuList = transformRouteToMenu(routes, true)
-					routes = filter(routes, routeRemoveIgnoreFilter)
-					routes = routes.filter(routeRemoveIgnoreFilter)
-					menuList.sort((a, b) => {
-						return (a.meta?.orderNo || 0) - (b.meta?.orderNo || 0)
-					})
-
-					this.setFrontMenuList(menuList)
-					// 灏嗗绾ц矾鐢辫浆鎹负浜岀骇
-					routes = flatMultiLevelRoutes(routes)
-					break
-
-				// 鍚庡彴鑿滃崟鏋勫缓
-				case PermissionModeEnum.BACK:
-					const { createMessage, createWarningModal } = useMessage()
-					// 鑿滃崟鍔犺浇鎻愮ず
-					// createMessage.loading({
-					//   content: t('sys.app.menuLoading'),
-					//   duration: 1,
-					// });
-
-					// 浠庡悗鍙拌幏鍙栨潈闄愮爜锛�
-					// 杩欎釜鍑芥暟鍙兘鍙渶瑕佹墽琛屼竴娆★紝骞朵笖瀹為檯鐨勯」鐩彲浠ュ湪姝g‘鐨勬椂闂磋鏀剧疆
-					let routeList: AppRouteRecordRaw[] = []
-					try {
-						this.changePermissionCode()
-						routeList = (await getMenuList()) as AppRouteRecordRaw[]
-						// update-begin----author:sunjianlei---date:20220315------for: 鍒ゆ柇鏄惁鏄� vue3 鐗堟湰鐨勮彍鍗� ---
-						let hasIndex = false
-						let hasIcon = false
-						for (const menuItem of routeList) {
-							// 鏉′欢1锛氬垽鏂粍浠舵槸鍚︽槸 layouts/default/index
-							if (!hasIndex) {
-								hasIndex = menuItem.component === 'layouts/default/index'
-							}
-							// 鏉′欢2锛氬垽鏂浘鏍囨槸鍚﹀甫鏈� 鍐掑彿
-							if (!hasIcon) {
-								hasIcon = !!menuItem.meta?.icon?.includes(':')
-							}
-							// 婊¤冻浠讳綍涓�涓潯浠堕兘鐩存帴璺冲嚭寰幆
-							if (hasIcon || hasIndex) {
-								break
-							}
-						}
-						// 涓や釜鏉′欢閮戒笉婊¤冻锛屽氨寮瑰嚭鎻愮ず妗�
-						if (!hasIcon && !hasIndex) {
-							// 寤惰繜1.5绉掍箣鍚庡啀鍑虹幇鎻愮ず锛屽惁鍒欐彁绀烘鍑轰笉鏉�
-							setTimeout(
-								() =>
-									createWarningModal({
-										title: '妫�娴嬫彁绀�',
-										content: '褰撳墠鑿滃崟琛ㄦ槸 <b>Vue2鐗堟湰</b>锛屽鑷磋彍鍗曞姞杞藉紓甯�!<br>鐐瑰嚮纭锛屽垏鎹㈠埌Vue3鐗堣彍鍗曪紒',
-										onOk: function () {
-											switchVue3Menu()
-											location.reload()
-										},
-									}),
-								100
-							)
-						}
-						// update-end----author:sunjianlei---date:20220315------for: 鍒ゆ柇鏄惁鏄� vue3 鐗堟湰鐨勮彍鍗� ---
-					} catch (error) {
-						console.error(error)
-					}
-					// 缁勪欢鍦板潃鍓嶅姞鏂滄潬澶勭悊  author: lsq date:2021-09-08
-					routeList = addSlashToRouteComponent(routeList)
-					// 鍔ㄦ�佸紩鍏ョ粍浠�
-					routeList = transformObjToRoute(routeList)
-
-					// 鏋勫缓鍚庡彴璺敱鑿滃崟
-					const backMenuList = transformRouteToMenu(routeList)
-					this.setBackMenuList(backMenuList)
-
-					// 鍒犻櫎meta.ignoreRoute椤�
-					routeList = filter(routeList, routeRemoveIgnoreFilter)
-					routeList = routeList.filter(routeRemoveIgnoreFilter)
-
-					routeList = flatMultiLevelRoutes(routeList)
-					routes = [PAGE_NOT_FOUND_ROUTE, ...routeList]
-					break
-			}
-
-			routes.push(ERROR_LOG_ROUTE)
-			patchHomeAffix(routes)
-			return routes
-		},
-		setAuthData(systemPermission) {
-			this.authList = systemPermission.auth
-			this.allAuthList = systemPermission.allAuth
-			this.sysSafeMode = systemPermission.sysSafeMode
-		},
-		setAuthList(authList: AuthItem[]) {
-			this.authList = authList
-		},
-		setAllAuthList(authList: AuthItem[]) {
-			this.allAuthList = authList
-		},
-
-		//update-begin-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒�
-		setOnlineSubTableAuth(code, hideBtnList) {
-			this.onlineSubTableAuthMap[code] = hideBtnList
-		},
-		//update-end-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒�
-	},
-})
-
-// 闇�瑕佸湪璁剧疆涔嬪浣跨敤
-export function usePermissionStoreWithOut() {
-	return usePermissionStore(store)
-}
diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts
deleted file mode 100644
index 7fadc89..0000000
--- a/src/store/modules/user.ts
+++ /dev/null
@@ -1,304 +0,0 @@
-import type { UserInfo, LoginInfo } from '/#/store';
-import type { ErrorMessageMode } from '/#/axios';
-import { defineStore } from 'pinia';
-import { store } from '/@/store';
-import { RoleEnum } from '/@/enums/roleEnum';
-import { PageEnum } from '/@/enums/pageEnum';
-import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY, LOGIN_INFO_KEY, DB_DICT_DATA_KEY, TENANT_ID } from '/@/enums/cacheEnum';
-import { getAuthCache, setAuthCache, removeAuthCache } from '/@/utils/auth';
-import { GetUserInfoModel, LoginParams, ThirdLoginParams } from '/@/api/sys/model/userModel';
-import { doLogout, getUserInfo, loginApi, phoneLoginApi, thirdLogin } from '/@/api/sys/user';
-import { useI18n } from '/@/hooks/web/useI18n';
-import { useMessage } from '/@/hooks/web/useMessage';
-import { router } from '/@/router';
-import { usePermissionStore } from '/@/store/modules/permission';
-import { RouteRecordRaw } from 'vue-router';
-import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic';
-import { isArray } from '/@/utils/is';
-import { useGlobSetting } from '/@/hooks/setting';
-import { JDragConfigEnum } from '/@/enums/jeecgEnum';
-import { useSso } from '/@/hooks/web/useSso';
-interface UserState {
-  userInfo: Nullable<UserInfo>;
-  token?: string;
-  roleList: RoleEnum[];
-  dictItems?: [];
-  sessionTimeout?: boolean;
-  lastUpdateTime: number;
-  tenantid?: string | number;
-  loginInfo?: Nullable<LoginInfo>;
-}
-
-export const useUserStore = defineStore({
-  id: 'app-user',
-  state: (): UserState => ({
-    // 鐢ㄦ埛淇℃伅
-    userInfo: null,
-    // token
-    token: undefined,
-    // 瑙掕壊鍒楄〃
-    roleList: [],
-    // 瀛楀吀
-    dictItems: [],
-    // session杩囨湡鏃堕棿
-    sessionTimeout: false,
-    // Last fetch time
-    lastUpdateTime: 0,
-    //绉熸埛id
-    tenantid: '',
-    //鐧诲綍杩斿洖淇℃伅
-    loginInfo: null,
-  }),
-  getters: {
-    getUserInfo(): UserInfo {
-      return this.userInfo || getAuthCache<UserInfo>(USER_INFO_KEY) || {};
-    },
-    getLoginInfo(): LoginInfo {
-      return this.loginInfo || getAuthCache<LoginInfo>(LOGIN_INFO_KEY) || {};
-    },
-    getToken(): string {
-      return this.token || getAuthCache<string>(TOKEN_KEY);
-    },
-    getAllDictItems(): [] {
-      return this.dictItems || getAuthCache(DB_DICT_DATA_KEY);
-    },
-    getRoleList(): RoleEnum[] {
-      return this.roleList.length > 0 ? this.roleList : getAuthCache<RoleEnum[]>(ROLES_KEY);
-    },
-    getSessionTimeout(): boolean {
-      return !!this.sessionTimeout;
-    },
-    getLastUpdateTime(): number {
-      return this.lastUpdateTime;
-    },
-    getTenant(): string | number {
-      return this.tenantid || getAuthCache<string | number>(TENANT_ID);
-    },
-  },
-  actions: {
-    setToken(info: string | undefined) {
-      this.token = info ? info : ''; // for null or undefined value
-      setAuthCache(TOKEN_KEY, info);
-    },
-    setRoleList(roleList: RoleEnum[]) {
-      this.roleList = roleList;
-      setAuthCache(ROLES_KEY, roleList);
-    },
-    setUserInfo(info: UserInfo | null) {
-      this.userInfo = info;
-      this.lastUpdateTime = new Date().getTime();
-      setAuthCache(USER_INFO_KEY, info);
-    },
-    setLoginInfo(info: LoginInfo | null) {
-      this.loginInfo = info;
-      setAuthCache(LOGIN_INFO_KEY, info);
-    },
-    setAllDictItems(dictItems) {
-      this.dictItems = dictItems;
-      setAuthCache(DB_DICT_DATA_KEY, dictItems);
-    },
-    setTenant(id) {
-      this.tenantid = id;
-      setAuthCache(TENANT_ID, id);
-    },
-    setSessionTimeout(flag: boolean) {
-      this.sessionTimeout = flag;
-    },
-    resetState() {
-      this.userInfo = null;
-      this.dictItems = [];
-      this.token = '';
-      this.roleList = [];
-      this.sessionTimeout = false;
-    },
-    /**
-     * 鐧诲綍浜嬩欢
-     */
-    async login(
-      params: LoginParams & {
-        goHome?: boolean;
-        mode?: ErrorMessageMode;
-      }
-    ): Promise<GetUserInfoModel | null> {
-      try {
-        const { goHome = true, mode, ...loginParams } = params;
-        const data = await loginApi(loginParams, mode);
-        const { token, userInfo } = data;
-        // save token
-        this.setToken(token);
-        this.setTenant(userInfo.loginTenantId);
-        return this.afterLoginAction(goHome, data);
-      } catch (error) {
-        return Promise.reject(error);
-      }
-    },
-    /**
-     * 鎵爜鐧诲綍浜嬩欢
-     */
-    async qrCodeLogin(token): Promise<GetUserInfoModel | null> {
-      try {
-        // save token
-        this.setToken(token);
-        return this.afterLoginAction(true, {});
-      } catch (error) {
-        return Promise.reject(error);
-      }
-    },
-    /**
-     * 鐧诲綍瀹屾垚澶勭悊
-     * @param goHome
-     */
-    async afterLoginAction(goHome?: boolean, data?: any): Promise<any | null> {
-      if (!this.getToken) return null;
-      //鑾峰彇鐢ㄦ埛淇℃伅
-      const userInfo = await this.getUserInfoAction();
-      const sessionTimeout = this.sessionTimeout;
-      if (sessionTimeout) {
-        this.setSessionTimeout(false);
-      } else {
-        const permissionStore = usePermissionStore();
-        if (!permissionStore.isDynamicAddedRoute) {
-          const routes = await permissionStore.buildRoutesAction();
-          routes.forEach((route) => {
-            router.addRoute(route as unknown as RouteRecordRaw);
-          });
-          router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
-          permissionStore.setDynamicAddedRoute(true);
-        }
-        await this.setLoginInfo({ ...data, isLogin: true });
-        //update-begin-author:liusq date:2022-5-5 for:鐧诲綍鎴愬姛鍚庣紦瀛樻嫋鎷芥ā鍧楃殑鎺ュ彛鍓嶇紑
-        localStorage.setItem(JDragConfigEnum.DRAG_BASE_URL, useGlobSetting().domainUrl);
-        //update-end-author:liusq date:2022-5-5 for: 鐧诲綍鎴愬姛鍚庣紦瀛樻嫋鎷芥ā鍧楃殑鎺ュ彛鍓嶇紑
-        goHome && (await router.replace((userInfo && userInfo.homePath) || PageEnum.BASE_HOME));
-      }
-      return data;
-    },
-    /**
-     * 鎵嬫満鍙风櫥褰�
-     * @param params
-     */
-    async phoneLogin(
-      params: LoginParams & {
-        goHome?: boolean;
-        mode?: ErrorMessageMode;
-      }
-    ): Promise<GetUserInfoModel | null> {
-      try {
-        const { goHome = true, mode, ...loginParams } = params;
-        const data = await phoneLoginApi(loginParams, mode);
-        const { token } = data;
-        // save token
-        this.setToken(token);
-        return this.afterLoginAction(goHome, data);
-      } catch (error) {
-        return Promise.reject(error);
-      }
-    },
-    /**
-     * 鑾峰彇鐢ㄦ埛淇℃伅
-     */
-    async getUserInfoAction(): Promise<UserInfo | null> {
-      if (!this.getToken) {
-        return null;
-      }
-      const { userInfo, sysAllDictItems } = await getUserInfo();
-      if (userInfo) {
-        const { roles = [] } = userInfo;
-        if (isArray(roles)) {
-          const roleList = roles.map((item) => item.value) as RoleEnum[];
-          this.setRoleList(roleList);
-        } else {
-          userInfo.roles = [];
-          this.setRoleList([]);
-        }
-        this.setUserInfo(userInfo);
-      }
-      /**
-       * 娣诲姞瀛楀吀淇℃伅鍒扮紦瀛�
-       * @updateBy:lsq
-       * @updateDate:2021-09-08
-       */
-      if (sysAllDictItems) {
-        this.setAllDictItems(sysAllDictItems);
-      }
-      return userInfo;
-    },
-    /**
-     * 閫�鍑虹櫥褰�
-     */
-    async logout(goLogin = false) {
-      if (this.getToken) {
-        try {
-          await doLogout();
-        } catch {
-          console.log('娉ㄩ攢Token澶辫触');
-        }
-      }
-
-      // //update-begin-author:taoyan date:2022-5-5 for: src/layouts/default/header/index.vue showLoginSelect鏂规硶 鑾峰彇tenantId 閫�鍑虹櫥褰曞悗鍐嶆鐧诲綍渚濈劧鑳借幏鍙栧埌鍊硷紝娌℃湁娓呯┖
-      // let username:any = this.userInfo && this.userInfo.username;
-      // if(username){
-      //   removeAuthCache(username)
-      // }
-      // //update-end-author:taoyan date:2022-5-5 for: src/layouts/default/header/index.vue showLoginSelect鏂规硶 鑾峰彇tenantId 閫�鍑虹櫥褰曞悗鍐嶆鐧诲綍渚濈劧鑳借幏鍙栧埌鍊硷紝娌℃湁娓呯┖
-
-      this.setToken('');
-      setAuthCache(TOKEN_KEY, null);
-      this.setSessionTimeout(false);
-      this.setUserInfo(null);
-      this.setLoginInfo(null);
-      this.setTenant(null);
-      //update-begin-author:liusq date:2022-5-5 for:閫�鍑虹櫥褰曞悗娓呴櫎鎷栨嫿妯″潡鐨勬帴鍙e墠缂�
-      localStorage.removeItem(JDragConfigEnum.DRAG_BASE_URL);
-      //update-end-author:liusq date:2022-5-5 for: 閫�鍑虹櫥褰曞悗娓呴櫎鎷栨嫿妯″潡鐨勬帴鍙e墠缂�
-
-      //濡傛灉寮�鍚崟鐐圭櫥褰�,鍒欒烦杞埌鍗曠偣缁熶竴鐧诲綍涓績
-      const openSso = useGlobSetting().openSso;
-      if (openSso == 'true') {
-        await useSso().ssoLoginOut();
-      }
-
-      goLogin && (await router.push(PageEnum.BASE_LOGIN));
-    },
-    /**
-     * 鐧诲綍浜嬩欢
-     */
-    async ThirdLogin(
-      params: ThirdLoginParams & {
-        goHome?: boolean;
-        mode?: ErrorMessageMode;
-      }
-    ): Promise<any | null> {
-      try {
-        const { goHome = true, mode, ...ThirdLoginParams } = params;
-        const data = await thirdLogin(ThirdLoginParams, mode);
-        const { token } = data;
-        // save token
-        this.setToken(token);
-        return this.afterLoginAction(goHome, data);
-      } catch (error) {
-        return Promise.reject(error);
-      }
-    },
-    /**
-     * 閫�鍑鸿闂�
-     */
-    confirmLoginOut() {
-      const { createConfirm } = useMessage();
-      const { t } = useI18n();
-      createConfirm({
-        iconType: 'warning',
-        title: t('sys.app.logoutTip'),
-        content: t('sys.app.logoutMessage'),
-        onOk: async () => {
-          await this.logout(true);
-        },
-      });
-    },
-  },
-});
-
-// Need to be used outside the setup
-export function useUserStoreWithOut() {
-  return useUserStore(store);
-}
diff --git a/src/utils/aes.js b/src/utils/aes.js
deleted file mode 100644
index 2fe3b06..0000000
--- a/src/utils/aes.js
+++ /dev/null
@@ -1,505 +0,0 @@
-var t = t || function(t, e) {
-  var r = {}, i = r.lib = {}, n = function() {}, o = i.Base = {
-    extend: function(t) {
-      n.prototype = this;
-      var e = new n();
-      return t && e.mixIn(t), e.hasOwnProperty("init") || (e.init = function() {
-        e.$super.init.apply(this, arguments);
-      }), e.init.prototype = e, e.$super = this, e;
-    },
-    create: function() {
-      var t = this.extend();
-      return t.init.apply(t, arguments), t;
-    },
-    init: function() {},
-    mixIn: function(t) {
-      for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]);
-      t.hasOwnProperty("toString") && (this.toString = t.toString);
-    },
-    clone: function() {
-      return this.init.prototype.extend(this);
-    }
-  }, s = i.WordArray = o.extend({
-    init: function(t, e) {
-      t = this.words = t || [], this.sigBytes = void 0 != e ? e : 4 * t.length;
-    },
-    toString: function(t) {
-      return (t || a).stringify(this);
-    },
-    concat: function(t) {
-      var e = this.words, r = t.words, i = this.sigBytes;
-      if (t = t.sigBytes, this.clamp(), i % 4) for (var n = 0; n < t; n++) e[i + n >>> 2] |= (r[n >>> 2] >>> 24 - n % 4 * 8 & 255) << 24 - (i + n) % 4 * 8; else if (65535 < r.length) for (n = 0; n < t; n += 4) e[i + n >>> 2] = r[n >>> 2]; else e.push.apply(e, r);
-      return this.sigBytes += t, this;
-    },
-    clamp: function() {
-      var e = this.words, r = this.sigBytes;
-      e[r >>> 2] &= 4294967295 << 32 - r % 4 * 8, e.length = t.ceil(r / 4);
-    },
-    clone: function() {
-      var t = o.clone.call(this);
-      return t.words = this.words.slice(0), t;
-    },
-    random: function(e) {
-      for (var r = [], i = 0; i < e; i += 4) r.push(4294967296 * t.random() | 0);
-      return new s.init(r, e);
-    }
-  }), c = r.enc = {}, a = c.Hex = {
-    stringify: function(t) {
-      var e = t.words;
-      t = t.sigBytes;
-      for (var r = [], i = 0; i < t; i++) {
-        var n = e[i >>> 2] >>> 24 - i % 4 * 8 & 255;
-        r.push((n >>> 4).toString(16)), r.push((15 & n).toString(16));
-      }
-      return r.join("");
-    },
-    parse: function(t) {
-      for (var e = t.length, r = [], i = 0; i < e; i += 2) r[i >>> 3] |= parseInt(t.substr(i, 2), 16) << 24 - i % 8 * 4;
-      return new s.init(r, e / 2);
-    }
-  }, f = c.Latin1 = {
-    stringify: function(t) {
-      var e = t.words;
-      t = t.sigBytes;
-      for (var r = [], i = 0; i < t; i++) r.push(String.fromCharCode(e[i >>> 2] >>> 24 - i % 4 * 8 & 255));
-      return r.join("");
-    },
-    parse: function(t) {
-      for (var e = t.length, r = [], i = 0; i < e; i++) r[i >>> 2] |= (255 & t.charCodeAt(i)) << 24 - i % 4 * 8;
-      return new s.init(r, e);
-    }
-  }, h = c.Utf8 = {
-    stringify: function(t) {
-      try {
-        return decodeURIComponent(escape(f.stringify(t)));
-      } catch (t) {
-        throw Error("Malformed UTF-8 data");
-      }
-    },
-    parse: function(t) {
-      return f.parse(unescape(encodeURIComponent(t)));
-    }
-  }, u = i.BufferedBlockAlgorithm = o.extend({
-    reset: function() {
-      this._data = new s.init(), this._nDataBytes = 0;
-    },
-    _append: function(t) {
-      "string" == typeof t && (t = h.parse(t)), this._data.concat(t), this._nDataBytes += t.sigBytes;
-    },
-    _process: function(e) {
-      var r = this._data, i = r.words, n = r.sigBytes, o = this.blockSize, c = n / (4 * o);
-      if (e = (c = e ? t.ceil(c) : t.max((0 | c) - this._minBufferSize, 0)) * o, n = t.min(4 * e, n),
-        e) {
-        for (var a = 0; a < e; a += o) this._doProcessBlock(i, a);
-        a = i.splice(0, e), r.sigBytes -= n;
-      }
-      return new s.init(a, n);
-    },
-    clone: function() {
-      var t = o.clone.call(this);
-      return t._data = this._data.clone(), t;
-    },
-    _minBufferSize: 0
-  });
-  i.Hasher = u.extend({
-    cfg: o.extend(),
-    init: function(t) {
-      this.cfg = this.cfg.extend(t), this.reset();
-    },
-    reset: function() {
-      u.reset.call(this), this._doReset();
-    },
-    update: function(t) {
-      return this._append(t), this._process(), this;
-    },
-    finalize: function(t) {
-      return t && this._append(t), this._doFinalize();
-    },
-    blockSize: 16,
-    _createHelper: function(t) {
-      return function(e, r) {
-        return new t.init(r).finalize(e);
-      };
-    },
-    _createHmacHelper: function(t) {
-      return function(e, r) {
-        return new p.HMAC.init(t, r).finalize(e);
-      };
-    }
-  });
-  var p = r.algo = {};
-  return r;
-}(Math);
-
-!function() {
-  var e = t, r = e.lib.WordArray;
-  e.enc.Base64 = {
-    stringify: function(t) {
-      var e = t.words, r = t.sigBytes, i = this._map;
-      t.clamp(), t = [];
-      for (var n = 0; n < r; n += 3) for (var o = (e[n >>> 2] >>> 24 - n % 4 * 8 & 255) << 16 | (e[n + 1 >>> 2] >>> 24 - (n + 1) % 4 * 8 & 255) << 8 | e[n + 2 >>> 2] >>> 24 - (n + 2) % 4 * 8 & 255, s = 0; 4 > s && n + .75 * s < r; s++) t.push(i.charAt(o >>> 6 * (3 - s) & 63));
-      if (e = i.charAt(64)) for (;t.length % 4; ) t.push(e);
-      return t.join("");
-    },
-    parse: function(t) {
-      var e = t.length, i = this._map;
-      (n = i.charAt(64)) && -1 != (n = t.indexOf(n)) && (e = n);
-      for (var n = [], o = 0, s = 0; s < e; s++) if (s % 4) {
-        var c = i.indexOf(t.charAt(s - 1)) << s % 4 * 2, a = i.indexOf(t.charAt(s)) >>> 6 - s % 4 * 2;
-        n[o >>> 2] |= (c | a) << 24 - o % 4 * 8, o++;
-      }
-      return r.create(n, o);
-    },
-    _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
-  };
-}(), function(e) {
-  function r(t, e, r, i, n, o, s) {
-    return ((t = t + (e & r | ~e & i) + n + s) << o | t >>> 32 - o) + e;
-  }
-  function i(t, e, r, i, n, o, s) {
-    return ((t = t + (e & i | r & ~i) + n + s) << o | t >>> 32 - o) + e;
-  }
-  function n(t, e, r, i, n, o, s) {
-    return ((t = t + (e ^ r ^ i) + n + s) << o | t >>> 32 - o) + e;
-  }
-  function o(t, e, r, i, n, o, s) {
-    return ((t = t + (r ^ (e | ~i)) + n + s) << o | t >>> 32 - o) + e;
-  }
-  for (var s = t, c = (f = s.lib).WordArray, a = f.Hasher, f = s.algo, h = [], u = 0; 64 > u; u++) h[u] = 4294967296 * e.abs(e.sin(u + 1)) | 0;
-  f = f.MD5 = a.extend({
-    _doReset: function() {
-      this._hash = new c.init([ 1732584193, 4023233417, 2562383102, 271733878 ]);
-    },
-    _doProcessBlock: function(t, e) {
-      for (s = 0; 16 > s; s++) {
-        a = t[c = e + s];
-        t[c] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8);
-      }
-      var s = this._hash.words, c = t[e + 0], a = t[e + 1], f = t[e + 2], u = t[e + 3], p = t[e + 4], d = t[e + 5], l = t[e + 6], y = t[e + 7], v = t[e + 8], _ = t[e + 9], g = t[e + 10], B = t[e + 11], k = t[e + 12], x = t[e + 13], m = t[e + 14], S = t[e + 15], w = s[0], z = s[1], C = s[2], E = s[3], z = o(z = o(z = o(z = o(z = n(z = n(z = n(z = n(z = i(z = i(z = i(z = i(z = r(z = r(z = r(z = r(z, C = r(C, E = r(E, w = r(w, z, C, E, c, 7, h[0]), z, C, a, 12, h[1]), w, z, f, 17, h[2]), E, w, u, 22, h[3]), C = r(C, E = r(E, w = r(w, z, C, E, p, 7, h[4]), z, C, d, 12, h[5]), w, z, l, 17, h[6]), E, w, y, 22, h[7]), C = r(C, E = r(E, w = r(w, z, C, E, v, 7, h[8]), z, C, _, 12, h[9]), w, z, g, 17, h[10]), E, w, B, 22, h[11]), C = r(C, E = r(E, w = r(w, z, C, E, k, 7, h[12]), z, C, x, 12, h[13]), w, z, m, 17, h[14]), E, w, S, 22, h[15]), C = i(C, E = i(E, w = i(w, z, C, E, a, 5, h[16]), z, C, l, 9, h[17]), w, z, B, 14, h[18]), E, w, c, 20, h[19]), C = i(C, E = i(E, w = i(w, z, C, E, d, 5, h[20]), z, C, g, 9, h[21]), w, z, S, 14, h[22]), E, w, p, 20, h[23]), C = i(C, E = i(E, w = i(w, z, C, E, _, 5, h[24]), z, C, m, 9, h[25]), w, z, u, 14, h[26]), E, w, v, 20, h[27]), C = i(C, E = i(E, w = i(w, z, C, E, x, 5, h[28]), z, C, f, 9, h[29]), w, z, y, 14, h[30]), E, w, k, 20, h[31]), C = n(C, E = n(E, w = n(w, z, C, E, d, 4, h[32]), z, C, v, 11, h[33]), w, z, B, 16, h[34]), E, w, m, 23, h[35]), C = n(C, E = n(E, w = n(w, z, C, E, a, 4, h[36]), z, C, p, 11, h[37]), w, z, y, 16, h[38]), E, w, g, 23, h[39]), C = n(C, E = n(E, w = n(w, z, C, E, x, 4, h[40]), z, C, c, 11, h[41]), w, z, u, 16, h[42]), E, w, l, 23, h[43]), C = n(C, E = n(E, w = n(w, z, C, E, _, 4, h[44]), z, C, k, 11, h[45]), w, z, S, 16, h[46]), E, w, f, 23, h[47]), C = o(C, E = o(E, w = o(w, z, C, E, c, 6, h[48]), z, C, y, 10, h[49]), w, z, m, 15, h[50]), E, w, d, 21, h[51]), C = o(C, E = o(E, w = o(w, z, C, E, k, 6, h[52]), z, C, u, 10, h[53]), w, z, g, 15, h[54]), E, w, a, 21, h[55]), C = o(C, E = o(E, w = o(w, z, C, E, v, 6, h[56]), z, C, S, 10, h[57]), w, z, l, 15, h[58]), E, w, x, 21, h[59]), C = o(C, E = o(E, w = o(w, z, C, E, p, 6, h[60]), z, C, B, 10, h[61]), w, z, f, 15, h[62]), E, w, _, 21, h[63]);
-      s[0] = s[0] + w | 0, s[1] = s[1] + z | 0, s[2] = s[2] + C | 0, s[3] = s[3] + E | 0;
-    },
-    _doFinalize: function() {
-      var t = this._data, r = t.words, i = 8 * this._nDataBytes, n = 8 * t.sigBytes;
-      r[n >>> 5] |= 128 << 24 - n % 32;
-      var o = e.floor(i / 4294967296);
-      for (r[15 + (n + 64 >>> 9 << 4)] = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8),
-             r[14 + (n + 64 >>> 9 << 4)] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8),
-             t.sigBytes = 4 * (r.length + 1), this._process(), r = (t = this._hash).words, i = 0; 4 > i; i++) n = r[i],
-        r[i] = 16711935 & (n << 8 | n >>> 24) | 4278255360 & (n << 24 | n >>> 8);
-      return t;
-    },
-    clone: function() {
-      var t = a.clone.call(this);
-      return t._hash = this._hash.clone(), t;
-    }
-  }), s.MD5 = a._createHelper(f), s.HmacMD5 = a._createHmacHelper(f);
-}(Math), function() {
-  var e = t, r = e.lib, i = r.Base, n = r.WordArray, o = (r = e.algo).EvpKDF = i.extend({
-    cfg: i.extend({
-      keySize: 4,
-      hasher: r.MD5,
-      iterations: 1
-    }),
-    init: function(t) {
-      this.cfg = this.cfg.extend(t);
-    },
-    compute: function(t, e) {
-      for (var r = (c = this.cfg).hasher.create(), i = n.create(), o = i.words, s = c.keySize, c = c.iterations; o.length < s; ) {
-        a && r.update(a);
-        var a = r.update(t).finalize(e);
-        r.reset();
-        for (var f = 1; f < c; f++) a = r.finalize(a), r.reset();
-        i.concat(a);
-      }
-      return i.sigBytes = 4 * s, i;
-    }
-  });
-  e.EvpKDF = function(t, e, r) {
-    return o.create(r).compute(t, e);
-  };
-}(), t.lib.Cipher || function(e) {
-  var r = (l = t).lib, i = r.Base, n = r.WordArray, o = r.BufferedBlockAlgorithm, s = l.enc.Base64, c = l.algo.EvpKDF, a = r.Cipher = o.extend({
-    cfg: i.extend(),
-    createEncryptor: function(t, e) {
-      return this.create(this._ENC_XFORM_MODE, t, e);
-    },
-    createDecryptor: function(t, e) {
-      return this.create(this._DEC_XFORM_MODE, t, e);
-    },
-    init: function(t, e, r) {
-      this.cfg = this.cfg.extend(r), this._xformMode = t, this._key = e, this.reset();
-    },
-    reset: function() {
-      o.reset.call(this), this._doReset();
-    },
-    process: function(t) {
-      return this._append(t), this._process();
-    },
-    finalize: function(t) {
-      return t && this._append(t), this._doFinalize();
-    },
-    keySize: 4,
-    ivSize: 4,
-    _ENC_XFORM_MODE: 1,
-    _DEC_XFORM_MODE: 2,
-    _createHelper: function(t) {
-      return {
-        encrypt: function(e, r, i) {
-          return ("string" == typeof r ? y : d).encrypt(t, e, r, i);
-        },
-        decrypt: function(e, r, i) {
-          return ("string" == typeof r ? y : d).decrypt(t, e, r, i);
-        }
-      };
-    }
-  });
-  r.StreamCipher = a.extend({
-    _doFinalize: function() {
-      return this._process(!0);
-    },
-    blockSize: 1
-  });
-  var f = l.mode = {}, h = function(t, e, r) {
-    var i = this._iv;
-    i ? this._iv = void 0 : i = this._prevBlock;
-    for (var n = 0; n < r; n++) t[e + n] ^= i[n];
-  }, u = (r.BlockCipherMode = i.extend({
-    createEncryptor: function(t, e) {
-      return this.Encryptor.create(t, e);
-    },
-    createDecryptor: function(t, e) {
-      return this.Decryptor.create(t, e);
-    },
-    init: function(t, e) {
-      this._cipher = t, this._iv = e;
-    }
-  })).extend();
-  u.Encryptor = u.extend({
-    processBlock: function(t, e) {
-      var r = this._cipher, i = r.blockSize;
-      h.call(this, t, e, i), r.encryptBlock(t, e), this._prevBlock = t.slice(e, e + i);
-    }
-  }), u.Decryptor = u.extend({
-    processBlock: function(t, e) {
-      var r = this._cipher, i = r.blockSize, n = t.slice(e, e + i);
-      r.decryptBlock(t, e), h.call(this, t, e, i), this._prevBlock = n;
-    }
-  }), f = f.CBC = u, u = (l.pad = {}).Pkcs7 = {
-    pad: function(t, e) {
-      for (var r = 4 * e, i = (r = r - t.sigBytes % r) << 24 | r << 16 | r << 8 | r, o = [], s = 0; s < r; s += 4) o.push(i);
-      r = n.create(o, r), t.concat(r);
-    },
-    unpad: function(t) {
-      t.sigBytes -= 255 & t.words[t.sigBytes - 1 >>> 2];
-    }
-  }, r.BlockCipher = a.extend({
-    cfg: a.cfg.extend({
-      mode: f,
-      padding: u
-    }),
-    reset: function() {
-      a.reset.call(this);
-      var t = (e = this.cfg).iv, e = e.mode;
-      if (this._xformMode == this._ENC_XFORM_MODE) var r = e.createEncryptor; else r = e.createDecryptor,
-        this._minBufferSize = 1;
-      this._mode = r.call(e, this, t && t.words);
-    },
-    _doProcessBlock: function(t, e) {
-      this._mode.processBlock(t, e);
-    },
-    _doFinalize: function() {
-      var t = this.cfg.padding;
-      if (this._xformMode == this._ENC_XFORM_MODE) {
-        t.pad(this._data, this.blockSize);
-        var e = this._process(!0);
-      } else e = this._process(!0), t.unpad(e);
-      return e;
-    },
-    blockSize: 4
-  });
-  var p = r.CipherParams = i.extend({
-    init: function(t) {
-      this.mixIn(t);
-    },
-    toString: function(t) {
-      return (t || this.formatter).stringify(this);
-    }
-  }), f = (l.format = {}).OpenSSL = {
-    stringify: function(t) {
-      var e = t.ciphertext;
-      return ((t = t.salt) ? n.create([ 1398893684, 1701076831 ]).concat(t).concat(e) : e).toString(s);
-    },
-    parse: function(t) {
-      var e = (t = s.parse(t)).words;
-      if (1398893684 == e[0] && 1701076831 == e[1]) {
-        var r = n.create(e.slice(2, 4));
-        e.splice(0, 4), t.sigBytes -= 16;
-      }
-      return p.create({
-        ciphertext: t,
-        salt: r
-      });
-    }
-  }, d = r.SerializableCipher = i.extend({
-    cfg: i.extend({
-      format: f
-    }),
-    encrypt: function(t, e, r, i) {
-      i = this.cfg.extend(i);
-      var n = t.createEncryptor(r, i);
-      return e = n.finalize(e), n = n.cfg, p.create({
-        ciphertext: e,
-        key: r,
-        iv: n.iv,
-        algorithm: t,
-        mode: n.mode,
-        padding: n.padding,
-        blockSize: t.blockSize,
-        formatter: i.format
-      });
-    },
-    decrypt: function(t, e, r, i) {
-      return i = this.cfg.extend(i), e = this._parse(e, i.format), t.createDecryptor(r, i).finalize(e.ciphertext);
-    },
-    _parse: function(t, e) {
-      return "string" == typeof t ? e.parse(t, this) : t;
-    }
-  }), l = (l.kdf = {}).OpenSSL = {
-    execute: function(t, e, r, i) {
-      return i || (i = n.random(8)), t = c.create({
-        keySize: e + r
-      }).compute(t, i), r = n.create(t.words.slice(e), 4 * r), t.sigBytes = 4 * e, p.create({
-        key: t,
-        iv: r,
-        salt: i
-      });
-    }
-  }, y = r.PasswordBasedCipher = d.extend({
-    cfg: d.cfg.extend({
-      kdf: l
-    }),
-    encrypt: function(t, e, r, i) {
-      return i = this.cfg.extend(i), r = i.kdf.execute(r, t.keySize, t.ivSize), i.iv = r.iv,
-        (t = d.encrypt.call(this, t, e, r.key, i)).mixIn(r), t;
-    },
-    decrypt: function(t, e, r, i) {
-      return i = this.cfg.extend(i), e = this._parse(e, i.format), r = i.kdf.execute(r, t.keySize, t.ivSize, e.salt),
-        i.iv = r.iv, d.decrypt.call(this, t, e, r.key, i);
-    }
-  });
-}(), function() {
-  for (var e = t, r = e.lib.BlockCipher, i = e.algo, n = [], o = [], s = [], c = [], a = [], f = [], h = [], u = [], p = [], d = [], l = [], y = 0; 256 > y; y++) l[y] = 128 > y ? y << 1 : y << 1 ^ 283;
-  for (var v = 0, _ = 0, y = 0; 256 > y; y++) {
-    var g = (g = _ ^ _ << 1 ^ _ << 2 ^ _ << 3 ^ _ << 4) >>> 8 ^ 255 & g ^ 99;
-    n[v] = g, o[g] = v;
-    var B = l[v], k = l[B], x = l[k], m = 257 * l[g] ^ 16843008 * g;
-    s[v] = m << 24 | m >>> 8, c[v] = m << 16 | m >>> 16, a[v] = m << 8 | m >>> 24, f[v] = m,
-      m = 16843009 * x ^ 65537 * k ^ 257 * B ^ 16843008 * v, h[g] = m << 24 | m >>> 8,
-      u[g] = m << 16 | m >>> 16, p[g] = m << 8 | m >>> 24, d[g] = m, v ? (v = B ^ l[l[l[x ^ B]]],
-      _ ^= l[l[_]]) : v = _ = 1;
-  }
-  var S = [ 0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54 ], i = i.AES = r.extend({
-    _doReset: function() {
-      for (var t = (r = this._key).words, e = r.sigBytes / 4, r = 4 * ((this._nRounds = e + 6) + 1), i = this._keySchedule = [], o = 0; o < r; o++) if (o < e) i[o] = t[o]; else {
-        var s = i[o - 1];
-        o % e ? 6 < e && 4 == o % e && (s = n[s >>> 24] << 24 | n[s >>> 16 & 255] << 16 | n[s >>> 8 & 255] << 8 | n[255 & s]) : (s = s << 8 | s >>> 24,
-          s = n[s >>> 24] << 24 | n[s >>> 16 & 255] << 16 | n[s >>> 8 & 255] << 8 | n[255 & s],
-          s ^= S[o / e | 0] << 24), i[o] = i[o - e] ^ s;
-      }
-      for (t = this._invKeySchedule = [], e = 0; e < r; e++) o = r - e, s = e % 4 ? i[o] : i[o - 4],
-        t[e] = 4 > e || 4 >= o ? s : h[n[s >>> 24]] ^ u[n[s >>> 16 & 255]] ^ p[n[s >>> 8 & 255]] ^ d[n[255 & s]];
-    },
-    encryptBlock: function(t, e) {
-      this._doCryptBlock(t, e, this._keySchedule, s, c, a, f, n);
-    },
-    decryptBlock: function(t, e) {
-      var r = t[e + 1];
-      t[e + 1] = t[e + 3], t[e + 3] = r, this._doCryptBlock(t, e, this._invKeySchedule, h, u, p, d, o),
-        r = t[e + 1], t[e + 1] = t[e + 3], t[e + 3] = r;
-    },
-    _doCryptBlock: function(t, e, r, i, n, o, s, c) {
-      for (var a = this._nRounds, f = t[e] ^ r[0], h = t[e + 1] ^ r[1], u = t[e + 2] ^ r[2], p = t[e + 3] ^ r[3], d = 4, l = 1; l < a; l++) var y = i[f >>> 24] ^ n[h >>> 16 & 255] ^ o[u >>> 8 & 255] ^ s[255 & p] ^ r[d++], v = i[h >>> 24] ^ n[u >>> 16 & 255] ^ o[p >>> 8 & 255] ^ s[255 & f] ^ r[d++], _ = i[u >>> 24] ^ n[p >>> 16 & 255] ^ o[f >>> 8 & 255] ^ s[255 & h] ^ r[d++], p = i[p >>> 24] ^ n[f >>> 16 & 255] ^ o[h >>> 8 & 255] ^ s[255 & u] ^ r[d++], f = y, h = v, u = _;
-      y = (c[f >>> 24] << 24 | c[h >>> 16 & 255] << 16 | c[u >>> 8 & 255] << 8 | c[255 & p]) ^ r[d++],
-        v = (c[h >>> 24] << 24 | c[u >>> 16 & 255] << 16 | c[p >>> 8 & 255] << 8 | c[255 & f]) ^ r[d++],
-        _ = (c[u >>> 24] << 24 | c[p >>> 16 & 255] << 16 | c[f >>> 8 & 255] << 8 | c[255 & h]) ^ r[d++],
-        p = (c[p >>> 24] << 24 | c[f >>> 16 & 255] << 16 | c[h >>> 8 & 255] << 8 | c[255 & u]) ^ r[d++],
-        t[e] = y, t[e + 1] = v, t[e + 2] = _, t[e + 3] = p;
-    },
-    keySize: 8
-  });
-  e.AES = r._createHelper(i);
-}(), t.enc.u8array = {
-  stringify: function(t) {
-    for (var e = t.words, r = t.sigBytes, i = new Uint8Array(r), n = 0; n < r; n++) {
-      var o = e[n >>> 2] >>> 24 - n % 4 * 8 & 255;
-      i[n] = o;
-    }
-    return i;
-  },
-  parse: function(e) {
-    for (var r = e.length, i = [], n = 0; n < r; n++) i[n >>> 2] |= (255 & e[n]) << 24 - n % 4 * 8;
-    return t.lib.WordArray.create(i, r);
-  }
-}, t.enc.int8array = {
-  stringify: function(t) {
-    for (var e = t.words, r = t.sigBytes, i = new Int8Array(r), n = 0; n < r; n++) {
-      var o = e[n >>> 2] >> 24 - n % 4 * 8 & 255;
-      i[n] = o;
-    }
-    return i;
-  },
-  parse: function(e) {
-    for (var r = e.length, i = [], n = 0; n < r; n++) i[n >>> 2] |= (255 & e[n]) << 24 - n % 4 * 8;
-    return t.lib.WordArray.create(i, r);
-  }
-}, t.enc.int16array = {
-  stringify: function(t) {
-    for (var e = t.words, r = t.sigBytes, i = new Uint8Array(r), n = 0; n < r; n++) {
-      var o = e[n >>> 2] >>> 24 - n % 4 * 8 & 255;
-      i[n] = o;
-    }
-    return i;
-  },
-  parse: function(e) {
-    for (var r = e.length, i = [], n = 0; n < r; n++) i[n >>> 2] |= (255 & e[n]) << 24 - n % 4 * 8;
-    return t.lib.WordArray.create(i, r);
-  }
-}, t.mode.CFB = function() {
-  function e(t, e, r, i) {
-    var n = this._iv;
-    if (n) {
-      o = n.slice(0);
-      this._iv = void 0;
-    } else var o = this._prevBlock;
-    i.encryptBlock(o, 0);
-    for (var s = 0; s < r; s++) t[e + s] ^= o[s];
-  }
-  var r = t.lib.BlockCipherMode.extend();
-  return r.Encryptor = r.extend({
-    processBlock: function(t, r) {
-      var i = this._cipher, n = i.blockSize;
-      e.call(this, t, r, n, i), this._prevBlock = t.slice(r, r + n);
-    }
-  }), r.Decryptor = r.extend({
-    processBlock: function(t, r) {
-      var i = this._cipher, n = i.blockSize, o = t.slice(r, r + n);
-      e.call(this, t, r, n, i), this._prevBlock = o;
-    }
-  }), r;
-}(), t.mode.ECB = function() {
-  var e = t.lib.BlockCipherMode.extend();
-  return e.Encryptor = e.extend({
-    processBlock: function(t, e) {
-      this._cipher.encryptBlock(t, e);
-    }
-  }), e.Decryptor = e.extend({
-    processBlock: function(t, e) {
-      this._cipher.decryptBlock(t, e);
-    }
-  }), e;
-}(), t.pad.NoPadding = {
-  pad: function() {},
-  unpad: function() {}
-}, module.exports = {
-  CryptoJS: t
-};
diff --git a/src/utils/auth/index.ts b/src/utils/auth/index.ts
deleted file mode 100644
index 95d79b7..0000000
--- a/src/utils/auth/index.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-import { Persistent, BasicKeys } from '/@/utils/cache/persistent';
-import { CacheTypeEnum } from '/@/enums/cacheEnum';
-import projectSetting from '/@/settings/projectSetting';
-import { TOKEN_KEY, LOGIN_INFO_KEY, TENANT_ID } from '/@/enums/cacheEnum';
-
-const { permissionCacheType } = projectSetting;
-const isLocal = permissionCacheType === CacheTypeEnum.LOCAL;
-
-/**
- * 鑾峰彇token
- */
-export function getToken() {
-  return getAuthCache<string>(TOKEN_KEY);
-}
-/**
- * 鑾峰彇鐧诲綍淇℃伅
- */
-export function getLoginBackInfo() {
-  return getAuthCache(LOGIN_INFO_KEY);
-}
-/**
- * 鑾峰彇绉熸埛id
- */
-export function getTenantId() {
-  return getAuthCache<string>(TENANT_ID);
-}
-
-export function getAuthCache<T>(key: BasicKeys) {
-  const fn = isLocal ? Persistent.getLocal : Persistent.getSession;
-  return fn(key) as T;
-}
-
-export function setAuthCache(key: BasicKeys, value) {
-  const fn = isLocal ? Persistent.setLocal : Persistent.setSession;
-  return fn(key, value, true);
-}
-
-/**
- * 璁剧疆鍔ㄦ�乲ey
- * @param key
- * @param value
- */
-export function setCacheByDynKey(key, value) {
-  const fn = isLocal ? Persistent.setLocal : Persistent.setSession;
-  return fn(key, value, true);
-}
-
-/**
- * 鑾峰彇鍔ㄦ�乲ey
- * @param key
- */
-export function getCacheByDynKey<T>(key) {
-  const fn = isLocal ? Persistent.getLocal : Persistent.getSession;
-  return fn(key) as T;
-}
-
-/**
- * 绉婚櫎鍔ㄦ�乲ey
- * @param key
- */
-export function removeCacheByDynKey<T>(key) {
-  const fn = isLocal ? Persistent.removeLocal : Persistent.removeSession;
-  return fn(key) as T;
-}
-/**
- * 绉婚櫎缂撳瓨涓殑鏌愪釜灞炴��
- * @param key
- * @update:绉婚櫎缂撳瓨涓殑鏌愪釜灞炴��
- * @updateBy:lsq
- * @updateDate:2021-09-07
- */
-export function removeAuthCache<T>(key: BasicKeys) {
-  const fn = isLocal ? Persistent.removeLocal : Persistent.removeSession;
-  return fn(key) as T;
-}
-
-export function clearAuthCache(immediate = true) {
-  const fn = isLocal ? Persistent.clearLocal : Persistent.clearSession;
-  return fn(immediate);
-}
diff --git a/src/utils/bem.ts b/src/utils/bem.ts
deleted file mode 100644
index 7dcadbc..0000000
--- a/src/utils/bem.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { prefixCls } from '/@/settings/designSetting';
-
-type Mod = string | { [key: string]: any };
-type Mods = Mod | Mod[];
-
-export type BEM = ReturnType<typeof createBEM>;
-
-function genBem(name: string, mods?: Mods): string {
-  if (!mods) {
-    return '';
-  }
-
-  if (typeof mods === 'string') {
-    return ` ${name}--${mods}`;
-  }
-
-  if (Array.isArray(mods)) {
-    return mods.reduce<string>((ret, item) => ret + genBem(name, item), '');
-  }
-
-  return Object.keys(mods).reduce((ret, key) => ret + (mods[key] ? genBem(name, key) : ''), '');
-}
-
-/**
- * bem helper
- * b() // 'button'
- * b('text') // 'button__text'
- * b({ disabled }) // 'button button--disabled'
- * b('text', { disabled }) // 'button__text button__text--disabled'
- * b(['disabled', 'primary']) // 'button button--disabled button--primary'
- */
-export function buildBEM(name: string) {
-  return (el?: Mods, mods?: Mods): Mods => {
-    if (el && typeof el !== 'string') {
-      mods = el;
-      el = '';
-    }
-
-    el = el ? `${name}__${el}` : name;
-
-    return `${el}${genBem(el, mods)}`;
-  };
-}
-
-export function createBEM(name: string) {
-  return [buildBEM(`${prefixCls}-${name}`)];
-}
-
-export function createNamespace(name: string) {
-  const prefixedName = `${prefixCls}-${name}`;
-  return [prefixedName, buildBEM(prefixedName)] as const;
-}
diff --git a/src/utils/browser.js b/src/utils/browser.js
deleted file mode 100644
index 9765f94..0000000
--- a/src/utils/browser.js
+++ /dev/null
@@ -1,37 +0,0 @@
-//鍒ゆ柇鏄惁IE<11娴忚鍣�
-export function isIE() {
-  return navigator.userAgent.indexOf('compatible') > -1 && navigator.userAgent.indexOf('MSIE') > -1;
-}
-
-export function isIE11() {
-  return navigator.userAgent.indexOf('Trident') > -1 && navigator.userAgent.indexOf('rv:11.0') > -1;
-}
-
-//鍒ゆ柇鏄惁IE鐨凟dge娴忚鍣�
-export function isEdge() {
-  return navigator.userAgent.indexOf('Edge') > -1 && !isIE();
-}
-
-export function getIEVersion() {
-  let userAgent = navigator.userAgent; //鍙栧緱娴忚鍣ㄧ殑userAgent瀛楃涓�
-  let isIE = isIE();
-  let isIE11 = isIE11();
-  let isEdge = isEdge();
-
-  if (isIE) {
-    let reIE = new RegExp('MSIE (\\d+\\.\\d+);');
-    reIE.test(userAgent);
-    let fIEVersion = parseFloat(RegExp['$1']);
-    if (fIEVersion === 7 || fIEVersion === 8 || fIEVersion === 9 || fIEVersion === 10) {
-      return fIEVersion;
-    } else {
-      return 6; //IE鐗堟湰<7
-    }
-  } else if (isEdge) {
-    return 'edge';
-  } else if (isIE11) {
-    return 11;
-  } else {
-    return -1;
-  }
-}
diff --git a/src/utils/cache/index.ts b/src/utils/cache/index.ts
deleted file mode 100644
index 2004c66..0000000
--- a/src/utils/cache/index.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { getStorageShortName } from '/@/utils/env';
-import { createStorage as create, CreateStorageParams } from './storageCache';
-import { enableStorageEncryption } from '/@/settings/encryptionSetting';
-import { DEFAULT_CACHE_TIME } from '/@/settings/encryptionSetting';
-
-export type Options = Partial<CreateStorageParams>;
-
-const createOptions = (storage: Storage, options: Options = {}): Options => {
-  return {
-    // No encryption in debug mode
-    hasEncrypt: enableStorageEncryption,
-    storage,
-    prefixKey: getStorageShortName(),
-    ...options,
-  };
-};
-
-export const WebStorage = create(createOptions(sessionStorage));
-
-export const createStorage = (storage: Storage = sessionStorage, options: Options = {}) => {
-  return create(createOptions(storage, options));
-};
-
-export const createSessionStorage = (options: Options = {}) => {
-  return createStorage(sessionStorage, { ...options, timeout: DEFAULT_CACHE_TIME });
-};
-
-export const createLocalStorage = (options: Options = {}) => {
-  return createStorage(localStorage, { ...options, timeout: DEFAULT_CACHE_TIME });
-};
-
-export default WebStorage;
diff --git a/src/utils/cache/memory.ts b/src/utils/cache/memory.ts
deleted file mode 100644
index 20622d5..0000000
--- a/src/utils/cache/memory.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-import { TOKEN_KEY, ROLES_KEY, USER_INFO_KEY, DB_DICT_DATA_KEY, TENANT_ID, LOGIN_INFO_KEY, PROJ_CFG_KEY } from '/@/enums/cacheEnum';
-import { omit } from 'lodash-es';
-
-export interface Cache<V = any> {
-  value?: V;
-  timeoutId?: ReturnType<typeof setTimeout>;
-  time?: number;
-  alive?: number;
-}
-
-const NOT_ALIVE = 0;
-
-export class Memory<T = any, V = any> {
-  private cache: { [key in keyof T]?: Cache<V> } = {};
-  private alive: number;
-
-  constructor(alive = NOT_ALIVE) {
-    // Unit second
-    this.alive = alive * 1000;
-  }
-
-  get getCache() {
-    return this.cache;
-  }
-
-  setCache(cache) {
-    this.cache = cache;
-  }
-
-  // get<K extends keyof T>(key: K) {
-  //   const item = this.getItem(key);
-  //   const time = item?.time;
-  //   if (!isNullOrUnDef(time) && time < new Date().getTime()) {
-  //     this.remove(key);
-  //   }
-  //   return item?.value ?? undefined;
-  // }
-
-  get<K extends keyof T>(key: K) {
-    return this.cache[key];
-  }
-
-  set<K extends keyof T>(key: K, value: V, expires?: number) {
-    let item = this.get(key);
-
-    if (!expires || (expires as number) <= 0) {
-      expires = this.alive;
-    }
-    if (item) {
-      if (item.timeoutId) {
-        clearTimeout(item.timeoutId);
-        item.timeoutId = undefined;
-      }
-      item.value = value;
-    } else {
-      item = { value, alive: expires };
-      this.cache[key] = item;
-    }
-
-    if (!expires) {
-      return value;
-    }
-    const now = new Date().getTime();
-    item.time = now + this.alive;
-    item.timeoutId = setTimeout(
-      () => {
-        this.remove(key);
-      },
-      expires > now ? expires - now : expires
-    );
-
-    return value;
-  }
-
-  remove<K extends keyof T>(key: K) {
-    const item = this.get(key);
-    Reflect.deleteProperty(this.cache, key);
-    if (item) {
-      clearTimeout(item.timeoutId!);
-      return item.value;
-    }
-  }
-
-  resetCache(cache: { [K in keyof T]: Cache }) {
-    Object.keys(cache).forEach((key) => {
-      const k = key as any as keyof T;
-      const item = cache[k];
-      if (item && item.time) {
-        const now = new Date().getTime();
-        const expire = item.time;
-        if (expire > now) {
-          this.set(k, item.value, expire);
-        }
-      }
-    });
-  }
-
-  clear() {
-    console.log('------clear------杩涘叆clear鏂规硶');
-    Object.keys(this.cache).forEach((key) => {
-      const item = this.cache[key];
-      item.timeoutId && clearTimeout(item.timeoutId);
-    });
-    //update-begin---author:liusq  Date:20220108  for锛氫笉鍒犻櫎鐧诲綍鐢ㄦ埛鐨勭鎴穒d锛屽叾浠栫紦瀛樹俊鎭兘娓呴櫎----
-    this.cache = {
-      ...omit(this.cache, [TOKEN_KEY, USER_INFO_KEY, ROLES_KEY, DB_DICT_DATA_KEY, TENANT_ID, LOGIN_INFO_KEY, PROJ_CFG_KEY]),
-    };
-    //update-end---author:liusq  Date:20220108  for锛氫笉鍒犻櫎鐧诲綍鐢ㄦ埛鐨勭鎴穒d锛屽叾浠栫紦瀛樹俊鎭兘娓呴櫎----
-  }
-}
diff --git a/src/utils/cache/persistent.ts b/src/utils/cache/persistent.ts
deleted file mode 100644
index ac29fa0..0000000
--- a/src/utils/cache/persistent.ts
+++ /dev/null
@@ -1,144 +0,0 @@
-import type { LockInfo, UserInfo, LoginInfo } from '/#/store';
-import type { ProjectConfig } from '/#/config';
-import type { RouteLocationNormalized } from 'vue-router';
-
-import { createLocalStorage, createSessionStorage } from '/@/utils/cache';
-import { Memory } from './memory';
-import {
-  TOKEN_KEY,
-  USER_INFO_KEY,
-  ROLES_KEY,
-  LOCK_INFO_KEY,
-  PROJ_CFG_KEY,
-  APP_LOCAL_CACHE_KEY,
-  APP_SESSION_CACHE_KEY,
-  MULTIPLE_TABS_KEY,
-  DB_DICT_DATA_KEY,
-  TENANT_ID,
-  LOGIN_INFO_KEY,
-} from '/@/enums/cacheEnum';
-import { DEFAULT_CACHE_TIME } from '/@/settings/encryptionSetting';
-import { toRaw } from 'vue';
-import { pick, omit } from 'lodash-es';
-
-interface BasicStore {
-  [TOKEN_KEY]: string | number | null | undefined;
-  [USER_INFO_KEY]: UserInfo;
-  [ROLES_KEY]: string[];
-  [LOCK_INFO_KEY]: LockInfo;
-  [PROJ_CFG_KEY]: ProjectConfig;
-  [MULTIPLE_TABS_KEY]: RouteLocationNormalized[];
-  [DB_DICT_DATA_KEY]: string;
-  [TENANT_ID]: string;
-  [LOGIN_INFO_KEY]: LoginInfo;
-}
-
-type LocalStore = BasicStore;
-
-type SessionStore = BasicStore;
-
-export type BasicKeys = keyof BasicStore;
-type LocalKeys = keyof LocalStore;
-type SessionKeys = keyof SessionStore;
-
-const ls = createLocalStorage();
-const ss = createSessionStorage();
-
-const localMemory = new Memory(DEFAULT_CACHE_TIME);
-const sessionMemory = new Memory(DEFAULT_CACHE_TIME);
-
-function initPersistentMemory() {
-  const localCache = ls.get(APP_LOCAL_CACHE_KEY);
-  const sessionCache = ss.get(APP_SESSION_CACHE_KEY);
-  localCache && localMemory.resetCache(localCache);
-  sessionCache && sessionMemory.resetCache(sessionCache);
-}
-
-export class Persistent {
-  static getLocal<T>(key: LocalKeys) {
-    //update-begin---author:scott ---date:2022-10-27  for锛歵oken杩囨湡閫�鍑洪噸鏂扮櫥褰曪紝online鑿滃崟杩樻槸鎻愮ずtoken杩囨湡----------
-    const globalCache = ls.get(APP_LOCAL_CACHE_KEY);
-    if(globalCache){
-      localMemory.setCache(globalCache);
-    }
-    //update-end---author:scott ---date::2022-10-27  for锛歵oken杩囨湡閫�鍑洪噸鏂扮櫥褰曪紝online鑿滃崟杩樻槸鎻愮ずtoken杩囨湡----------
-    return localMemory.get(key)?.value as Nullable<T>;
-  }
-
-  static setLocal(key: LocalKeys, value: LocalStore[LocalKeys], immediate = false): void {
-    localMemory.set(key, toRaw(value));
-    immediate && ls.set(APP_LOCAL_CACHE_KEY, localMemory.getCache);
-  }
-
-  static removeLocal(key: LocalKeys, immediate = false): void {
-    localMemory.remove(key);
-    immediate && ls.set(APP_LOCAL_CACHE_KEY, localMemory.getCache);
-  }
-
-  static clearLocal(immediate = false): void {
-    localMemory.clear();
-    immediate && ls.clear();
-  }
-
-  static getSession<T>(key: SessionKeys) {
-    return sessionMemory.get(key)?.value as Nullable<T>;
-  }
-
-  static setSession(key: SessionKeys, value: SessionStore[SessionKeys], immediate = false): void {
-    sessionMemory.set(key, toRaw(value));
-    immediate && ss.set(APP_SESSION_CACHE_KEY, sessionMemory.getCache);
-  }
-
-  static removeSession(key: SessionKeys, immediate = false): void {
-    sessionMemory.remove(key);
-    immediate && ss.set(APP_SESSION_CACHE_KEY, sessionMemory.getCache);
-  }
-  static clearSession(immediate = false): void {
-    sessionMemory.clear();
-    immediate && ss.clear();
-  }
-
-  static clearAll(immediate = false) {
-    sessionMemory.clear();
-    localMemory.clear();
-    if (immediate) {
-      ls.clear();
-      ss.clear();
-    }
-  }
-}
-
-window.addEventListener('beforeunload', function () {
-  // TOKEN_KEY 鍦ㄧ櫥褰曟垨娉ㄩ攢鏃跺凡缁忓啓鍏ュ埌storage浜嗭紝姝ゅ涓轰簡瑙e喅鍚屾椂鎵撳紑澶氫釜绐楀彛鏃秚oken涓嶅悓姝ョ殑闂
-  // LOCK_INFO_KEY 鍦ㄩ攣灞忓拰瑙i攣鏃跺啓鍏ワ紝姝ゅ涔熶笉搴斾慨鏀�
-  ls.set(APP_LOCAL_CACHE_KEY, {
-    ...omit(localMemory.getCache, LOCK_INFO_KEY),
-    ...pick(ls.get(APP_LOCAL_CACHE_KEY), [TOKEN_KEY, USER_INFO_KEY, LOCK_INFO_KEY]),
-  });
-  ss.set(APP_SESSION_CACHE_KEY, {
-    ...omit(sessionMemory.getCache, LOCK_INFO_KEY),
-    ...pick(ss.get(APP_SESSION_CACHE_KEY), [TOKEN_KEY, USER_INFO_KEY, LOCK_INFO_KEY]),
-  });
-});
-
-function storageChange(e: any) {
-  const { key, newValue, oldValue } = e;
-
-  if (!key) {
-    Persistent.clearAll();
-    return;
-  }
-
-  if (!!newValue && !!oldValue) {
-    if (APP_LOCAL_CACHE_KEY === key) {
-      Persistent.clearLocal();
-    }
-    if (APP_SESSION_CACHE_KEY === key) {
-      Persistent.clearSession();
-    }
-  }
-}
-
-window.addEventListener('storage', storageChange);
-
-initPersistentMemory();
diff --git a/src/utils/cache/storageCache.ts b/src/utils/cache/storageCache.ts
deleted file mode 100644
index faa7acd..0000000
--- a/src/utils/cache/storageCache.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-import { cacheCipher } from '/@/settings/encryptionSetting';
-
-import type { EncryptionParams } from '/@/utils/cipher';
-
-import { AesEncryption } from '/@/utils/cipher';
-
-import { isNullOrUnDef } from '/@/utils/is';
-
-export interface CreateStorageParams extends EncryptionParams {
-  prefixKey: string;
-  storage: Storage;
-  hasEncrypt: boolean;
-  timeout?: Nullable<number>;
-}
-export const createStorage = ({
-  prefixKey = '',
-  storage = sessionStorage,
-  key = cacheCipher.key,
-  iv = cacheCipher.iv,
-  timeout = null,
-  hasEncrypt = true,
-}: Partial<CreateStorageParams> = {}) => {
-  if (hasEncrypt && [key.length, iv.length].some((item) => item !== 16)) {
-    throw new Error('When hasEncrypt is true, the key or iv must be 16 bits!');
-  }
-
-  const encryption = new AesEncryption({ key, iv });
-
-  /**
-   *Cache class
-   *Construction parameters can be passed into sessionStorage, localStorage,
-   * @class Cache
-   * @example
-   */
-  const WebStorage = class WebStorage {
-    private storage: Storage;
-    private prefixKey?: string;
-    private encryption: AesEncryption;
-    private hasEncrypt: boolean;
-    /**
-     *
-     * @param {*} storage
-     */
-    constructor() {
-      this.storage = storage;
-      this.prefixKey = prefixKey;
-      this.encryption = encryption;
-      this.hasEncrypt = hasEncrypt;
-    }
-
-    private getKey(key: string) {
-      return `${this.prefixKey}${key}`.toUpperCase();
-    }
-
-    /**
-     *
-     *  Set cache
-     * @param {string} key
-     * @param {*} value
-     * @expire Expiration time in seconds
-     * @memberof Cache
-     */
-    set(key: string, value: any, expire: number | null = timeout) {
-      const stringData = JSON.stringify({
-        value,
-        time: Date.now(),
-        expire: !isNullOrUnDef(expire) ? new Date().getTime() + expire * 1000 : null,
-      });
-      const stringifyValue = this.hasEncrypt ? this.encryption.encryptByAES(stringData) : stringData;
-      this.storage.setItem(this.getKey(key), stringifyValue);
-    }
-
-    /**
-     *Read cache
-     * @param {string} key
-     * @memberof Cache
-     */
-    get(key: string, def: any = null): any {
-      const val = this.storage.getItem(this.getKey(key));
-      if (!val) return def;
-
-      try {
-        const decVal = this.hasEncrypt ? this.encryption.decryptByAES(val) : val;
-        const data = JSON.parse(decVal);
-        const { value, expire } = data;
-        if (isNullOrUnDef(expire) || expire >= new Date().getTime()) {
-          return value;
-        }
-        this.remove(key);
-      } catch (e) {
-        return def;
-      }
-    }
-
-    /**
-     * Delete cache based on key
-     * @param {string} key
-     * @memberof Cache
-     */
-    remove(key: string) {
-      this.storage.removeItem(this.getKey(key));
-    }
-
-    /**
-     * Delete all caches of this instance
-     */
-    clear(): void {
-      this.storage.clear();
-    }
-  };
-  return new WebStorage();
-};
diff --git a/src/utils/cipher.ts b/src/utils/cipher.ts
deleted file mode 100644
index 9a8a89a..0000000
--- a/src/utils/cipher.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { encrypt, decrypt } from 'crypto-js/aes';
-import { parse } from 'crypto-js/enc-utf8';
-import pkcs7 from 'crypto-js/pad-pkcs7';
-import ECB from 'crypto-js/mode-ecb';
-import md5 from 'crypto-js/md5';
-import UTF8 from 'crypto-js/enc-utf8';
-import Base64 from 'crypto-js/enc-base64';
-
-export interface EncryptionParams {
-  key: string;
-  iv: string;
-}
-
-export class AesEncryption {
-  private key;
-  private iv;
-
-  constructor(opt: Partial<EncryptionParams> = {}) {
-    const { key, iv } = opt;
-    if (key) {
-      this.key = parse(key);
-    }
-    if (iv) {
-      this.iv = parse(iv);
-    }
-  }
-
-  get getOptions() {
-    return {
-      mode: ECB,
-      padding: pkcs7,
-      iv: this.iv,
-    };
-  }
-
-  encryptByAES(cipherText: string) {
-    return encrypt(cipherText, this.key, this.getOptions).toString();
-  }
-
-  decryptByAES(cipherText: string) {
-    return decrypt(cipherText, this.key, this.getOptions).toString(UTF8);
-  }
-}
-
-export function encryptByBase64(cipherText: string) {
-  return UTF8.parse(cipherText).toString(Base64);
-}
-
-export function decodeByBase64(cipherText: string) {
-  return Base64.parse(cipherText).toString(UTF8);
-}
-
-export function encryptByMd5(password: string) {
-  return md5(password).toString();
-}
diff --git a/src/utils/color.ts b/src/utils/color.ts
deleted file mode 100644
index 5a07dfb..0000000
--- a/src/utils/color.ts
+++ /dev/null
@@ -1,145 +0,0 @@
-/**
- * 鍒ゆ柇鏄惁 鍗佸叚杩涘埗棰滆壊鍊�.
- * 杈撳叆褰㈠紡鍙负 #fff000 #f00
- *
- * @param   String  color   鍗佸叚杩涘埗棰滆壊鍊�
- * @return  Boolean
- */
-export function isHexColor(color: string) {
-  const reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-f]{6})$/;
-  return reg.test(color);
-}
-
-/**
- * RGB 棰滆壊鍊艰浆鎹负 鍗佸叚杩涘埗棰滆壊鍊�.
- * r, g, 鍜� b 闇�瑕佸湪 [0, 255] 鑼冨洿鍐�
- *
- * @return  String          绫讳技#ff00ff
- * @param r
- * @param g
- * @param b
- */
-export function rgbToHex(r: number, g: number, b: number) {
-  // tslint:disable-next-line:no-bitwise
-  const hex = ((r << 16) | (g << 8) | b).toString(16);
-  return '#' + new Array(Math.abs(hex.length - 7)).join('0') + hex;
-}
-
-/**
- * Transform a HEX color to its RGB representation
- * @param {string} hex The color to transform
- * @returns The RGB representation of the passed color
- */
-export function hexToRGB(hex: string) {
-  let sHex = hex.toLowerCase();
-  if (isHexColor(hex)) {
-    if (sHex.length === 4) {
-      let sColorNew = '#';
-      for (let i = 1; i < 4; i += 1) {
-        sColorNew += sHex.slice(i, i + 1).concat(sHex.slice(i, i + 1));
-      }
-      sHex = sColorNew;
-    }
-    const sColorChange: number[] = [];
-    for (let i = 1; i < 7; i += 2) {
-      sColorChange.push(parseInt('0x' + sHex.slice(i, i + 2)));
-    }
-    return 'RGB(' + sColorChange.join(',') + ')';
-  }
-  return sHex;
-}
-
-export function colorIsDark(color: string) {
-  if (!isHexColor(color)) return;
-  const [r, g, b] = hexToRGB(color)
-    .replace(/(?:\(|\)|rgb|RGB)*/g, '')
-    .split(',')
-    .map((item) => Number(item));
-  return r * 0.299 + g * 0.578 + b * 0.114 < 192;
-}
-
-/**
- * Darkens a HEX color given the passed percentage
- * @param {string} color The color to process
- * @param {number} amount The amount to change the color by
- * @returns {string} The HEX representation of the processed color
- */
-export function darken(color: string, amount: number) {
-  color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color;
-  amount = Math.trunc((255 * amount) / 100);
-  return `#${subtractLight(color.substring(0, 2), amount)}${subtractLight(color.substring(2, 4), amount)}${subtractLight(
-    color.substring(4, 6),
-    amount
-  )}`;
-}
-
-/**
- * Lightens a 6 char HEX color according to the passed percentage
- * @param {string} color The color to change
- * @param {number} amount The amount to change the color by
- * @returns {string} The processed color represented as HEX
- */
-export function lighten(color: string, amount: number) {
-  color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color;
-  amount = Math.trunc((255 * amount) / 100);
-  return `#${addLight(color.substring(0, 2), amount)}${addLight(color.substring(2, 4), amount)}${addLight(color.substring(4, 6), amount)}`;
-}
-
-/* Suma el porcentaje indicado a un color (RR, GG o BB) hexadecimal para aclararlo */
-/**
- * Sums the passed percentage to the R, G or B of a HEX color
- * @param {string} color The color to change
- * @param {number} amount The amount to change the color by
- * @returns {string} The processed part of the color
- */
-function addLight(color: string, amount: number) {
-  const cc = parseInt(color, 16) + amount;
-  const c = cc > 255 ? 255 : cc;
-  return c.toString(16).length > 1 ? c.toString(16) : `0${c.toString(16)}`;
-}
-
-/**
- * Calculates luminance of an rgb color
- * @param {number} r red
- * @param {number} g green
- * @param {number} b blue
- */
-function luminanace(r: number, g: number, b: number) {
-  const a = [r, g, b].map((v) => {
-    v /= 255;
-    return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
-  });
-  return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722;
-}
-
-/**
- * Calculates contrast between two rgb colors
- * @param {string} rgb1 rgb color 1
- * @param {string} rgb2 rgb color 2
- */
-function contrast(rgb1: string[], rgb2: number[]) {
-  return (luminanace(~~rgb1[0], ~~rgb1[1], ~~rgb1[2]) + 0.05) / (luminanace(rgb2[0], rgb2[1], rgb2[2]) + 0.05);
-}
-
-/**
- * Determines what the best text color is (black or white) based con the contrast with the background
- * @param hexColor - Last selected color by the user
- */
-export function calculateBestTextColor(hexColor: string) {
-  const rgbColor = hexToRGB(hexColor.substring(1));
-  const contrastWithBlack = contrast(rgbColor.split(','), [0, 0, 0]);
-
-  return contrastWithBlack >= 12 ? '#000000' : '#FFFFFF';
-}
-
-/**
- * Subtracts the indicated percentage to the R, G or B of a HEX color
- * @param {string} color The color to change
- * @param {number} amount The amount to change the color by
- * @returns {string} The processed part of the color
- */
-function subtractLight(color: string, amount: number) {
-  const cc = parseInt(color, 16) - amount;
-  const c = cc < 0 ? 0 : cc;
-  return c.toString(16).length > 1 ? c.toString(16) : `0${c.toString(16)}`;
-}
diff --git a/src/utils/common/compUtils.ts b/src/utils/common/compUtils.ts
deleted file mode 100644
index b36eebb..0000000
--- a/src/utils/common/compUtils.ts
+++ /dev/null
@@ -1,367 +0,0 @@
-import { useGlobSetting } from '/@/hooks/setting';
-import { merge, random } from 'lodash-es';
-import { isArray } from '/@/utils/is';
-import { FormSchema } from '/@/components/Form';
-
-const globSetting = useGlobSetting();
-const baseApiUrl = globSetting.domainUrl;
-/**
- *  鑾峰彇鏂囦欢鏈嶅姟璁块棶璺緞
- * @param fileUrl 鏂囦欢璺緞
- * @param prefix(榛樿http)  鏂囦欢璺緞鍓嶇紑 http/https
- */
-export const getFileAccessHttpUrl = (fileUrl, prefix = 'http') => {
-  let result = fileUrl;
-  try {
-    if (fileUrl && fileUrl.length > 0 && !fileUrl.startsWith(prefix)) {
-      //鍒ゆ柇鏄惁鏄暟缁勬牸寮�
-      let isArray = fileUrl.indexOf('[') != -1;
-      if (!isArray) {
-        let prefix = `${baseApiUrl}/sys/common/static/`;
-        // 鍒ゆ柇鏄惁宸插寘鍚墠缂�
-        if (!fileUrl.startsWith(prefix)) {
-          result = `${prefix}${fileUrl}`;
-        }
-      }
-    }
-  } catch (err) {}
-  return result;
-};
-
-/**
- * 瑙﹀彂 window.resize
- */
-export function triggerWindowResizeEvent() {
-  let event: any = document.createEvent('HTMLEvents');
-  event.initEvent('resize', true, true);
-  event.eventType = 'message';
-  window.dispatchEvent(event);
-}
-
-/**
- * 鑾峰彇闅忔満鏁�
- *  @param length 鏁板瓧浣嶆暟
- */
-export const getRandom = (length: number = 1) => {
-  return '-' + parseInt(String(Math.random() * 10000 + 1), length);
-};
-
-/**
- * 闅忔満鐢熸垚瀛楃涓�
- * @param length 瀛楃涓茬殑闀垮害
- * @param chats 鍙�夊瓧绗︿覆鍖洪棿锛堝彧浼氱敓鎴愪紶鍏ョ殑瀛楃涓蹭腑鐨勫瓧绗︼級
- * @return string 鐢熸垚鐨勫瓧绗︿覆
- */
-export function randomString(length: number, chats?: string) {
-  if (!length) length = 1;
-  if (!chats) {
-    // noinspection SpellCheckingInspection
-    chats = '0123456789qwertyuioplkjhgfdsazxcvbnm';
-  }
-  let str = '';
-  for (let i = 0; i < length; i++) {
-    let num = random(0, chats.length - 1);
-    str += chats[num];
-  }
-  return str;
-}
-
-/**
- * 灏嗘櫘閫氬垪琛ㄦ暟鎹浆鍖栦负tree缁撴瀯
- * @param array tree鏁版嵁
- * @param opt  閰嶇疆鍙傛暟
- * @param startPid 鐖惰妭鐐�
- */
-export const listToTree = (array, opt, startPid) => {
-  const obj = {
-    primaryKey: opt.primaryKey || 'key',
-    parentKey: opt.parentKey || 'parentId',
-    titleKey: opt.titleKey || 'title',
-    startPid: opt.startPid || '',
-    currentDept: opt.currentDept || 0,
-    maxDept: opt.maxDept || 100,
-    childKey: opt.childKey || 'children',
-  };
-  if (startPid) {
-    obj.startPid = startPid;
-  }
-  return toTree(array, obj.startPid, obj.currentDept, obj);
-};
-/**
- *  閫掑綊鏋勫缓tree
- * @param list
- * @param startPid
- * @param currentDept
- * @param opt
- * @returns {Array}
- */
-export const toTree = (array, startPid, currentDept, opt) => {
-  if (opt.maxDept < currentDept) {
-    return [];
-  }
-  let child = [];
-  if (array && array.length > 0) {
-    child = array
-      .map((item) => {
-        // 绛涙煡绗﹀悎鏉′欢鐨勬暟鎹紙涓婚敭 = startPid锛�
-        if (typeof item[opt.parentKey] !== 'undefined' && item[opt.parentKey] === startPid) {
-          // 婊¤冻鏉′欢鍒欓�掑綊
-          const nextChild = toTree(array, item[opt.primaryKey], currentDept + 1, opt);
-          // 鑺傜偣淇℃伅淇濆瓨
-          if (nextChild.length > 0) {
-            item['isLeaf'] = false;
-            item[opt.childKey] = nextChild;
-          } else {
-            item['isLeaf'] = true;
-          }
-          item['title'] = item[opt.titleKey];
-          item['label'] = item[opt.titleKey];
-          item['key'] = item[opt.primaryKey];
-          item['value'] = item[opt.primaryKey];
-          return item;
-        }
-      })
-      .filter((item) => {
-        return item !== undefined;
-      });
-  }
-  return child;
-};
-
-/**
- * 琛ㄦ牸搴曢儴鍚堣宸ュ叿鏂规硶
- * @param tableData 琛ㄦ牸鏁版嵁
- * @param fieldKeys 瑕佽绠楀悎璁$殑鍒楀瓧娈�
- */
-export function mapTableTotalSummary(tableData: Recordable[], fieldKeys: string[]) {
-  let totals: any = { _row: '鍚堣', _index: '鍚堣' };
-  fieldKeys.forEach((key) => {
-    totals[key] = tableData.reduce((prev, next) => {
-      prev += next[key];
-      return prev;
-    }, 0);
-  });
-  return totals;
-}
-
-/**
- * 绠�鍗曞疄鐜伴槻鎶栨柟娉�
- *
- * 闃叉姈(debounce)鍑芥暟鍦ㄧ涓�娆¤Е鍙戠粰瀹氱殑鍑芥暟鏃讹紝涓嶇珛鍗虫墽琛屽嚱鏁帮紝鑰屾槸缁欏嚭涓�涓湡闄愬��(delay)锛屾瘮濡�100ms銆�
- * 濡傛灉100ms鍐呭啀娆℃墽琛屽嚱鏁帮紝灏遍噸鏂板紑濮嬭鏃讹紝鐩村埌璁℃椂缁撴潫鍚庡啀鐪熸鎵ц鍑芥暟銆�
- * 杩欐牱鍋氱殑濂藉鏄鏋滅煭鏃堕棿鍐呭ぇ閲忚Е鍙戝悓涓�浜嬩欢锛屽彧浼氭墽琛屼竴娆″嚱鏁般��
- *
- * @param fn 瑕侀槻鎶栫殑鍑芥暟
- * @param delay 闃叉姈鐨勬绉掓暟
- * @returns {Function}
- */
-export function simpleDebounce(fn, delay = 100) {
-  let timer: any | null = null;
-  return function () {
-    let args = arguments;
-    if (timer) {
-      clearTimeout(timer);
-    }
-    timer = setTimeout(() => {
-      // @ts-ignore
-      fn.apply(this, args);
-    }, delay);
-  };
-}
-
-/**
- * 鏃ユ湡鏍煎紡鍖�
- * @param date 鏃ユ湡
- * @param block 鏍煎紡鍖栧瓧绗︿覆
- */
-export function dateFormat(date, block) {
-  if (!date) {
-    return '';
-  }
-  let format = block || 'yyyy-MM-dd';
-  date = new Date(date);
-  const map = {
-    M: date.getMonth() + 1, // 鏈堜唤
-    d: date.getDate(), // 鏃�
-    h: date.getHours(), // 灏忔椂
-    m: date.getMinutes(), // 鍒�
-    s: date.getSeconds(), // 绉�
-    q: Math.floor((date.getMonth() + 3) / 3), // 瀛e害
-    S: date.getMilliseconds(), // 姣
-  };
-  format = format.replace(/([yMdhmsqS])+/g, (all, t) => {
-    let v = map[t];
-    if (v !== undefined) {
-      if (all.length > 1) {
-        v = `0${v}`;
-        v = v.substr(v.length - 2);
-      }
-      return v;
-    } else if (t === 'y') {
-      return date
-        .getFullYear()
-        .toString()
-        .substr(4 - all.length);
-    }
-    return all;
-  });
-  return format;
-}
-
-/**
- * 鑾峰彇浜嬩欢鍐掓场璺緞锛屽吋瀹� IE11锛孍dge锛孋hrome锛孎irefox锛孲afari
- * 鐩墠浣跨敤鐨勫湴鏂癸細JVxeTable Span妯″紡
- */
-export function getEventPath(event) {
-  let target = event.target;
-  let path = (event.composedPath && event.composedPath()) || event.path;
-
-  if (path != null) {
-    return path.indexOf(window) < 0 ? path.concat(window) : path;
-  }
-
-  if (target === window) {
-    return [window];
-  }
-
-  let getParents = (node, memo) => {
-    const parentNode = node.parentNode;
-
-    if (!parentNode) {
-      return memo;
-    } else {
-      return getParents(parentNode, memo.concat(parentNode));
-    }
-  };
-  return [target].concat(getParents(target, []), window);
-}
-
-/**
- * 濡傛灉鍊间笉瀛樺湪灏� push 杩涙暟缁勶紝鍙嶄箣涓嶅鐞�
- * @param array 瑕佹搷浣滅殑鏁版嵁
- * @param value 瑕佹坊鍔犵殑鍊�
- * @param key 鍙┖锛屽鏋滄瘮杈冪殑鏄璞★紝鍙兘瀛樺湪鍦板潃涓嶄竴鏍蜂絾鍊煎疄闄呬笂鏄竴鏍风殑鎯呭喌锛屽彲浠ヤ紶姝ゅ瓧娈靛垽鏂璞′腑鍞竴鐨勫瓧娈碉紝渚嬪 id銆備笉浼犲垯鐩存帴姣旇緝瀹為檯鍊�
- * @returns {boolean} 鎴愬姛 push 杩斿洖 true锛屼笉澶勭悊杩斿洖 false
- */
-export function pushIfNotExist(array, value, key?) {
-  for (let item of array) {
-    if (key && item[key] === value[key]) {
-      return false;
-    } else if (item === value) {
-      return false;
-    }
-  }
-  array.push(value);
-  return true;
-}
-/**
- * 杩囨护瀵硅薄涓负绌虹殑灞炴��
- * @param obj
- * @returns {*}
- */
-export function filterObj(obj) {
-  if (!(typeof obj == 'object')) {
-    return;
-  }
-
-  for (let key in obj) {
-    if (obj.hasOwnProperty(key) && (obj[key] == null || obj[key] == undefined || obj[key] === '')) {
-      delete obj[key];
-    }
-  }
-  return obj;
-}
-
-/**
- * 涓嬪垝绾胯浆椹煎嘲
- * @param string
- */
-export function underLine2CamelCase(string: string) {
-  return string.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
-}
-
-/**
- * 鏌ユ壘鏍戠粨鏋�
- * @param treeList
- * @param fn 鏌ユ壘鏂规硶
- * @param childrenKey
- */
-export function findTree(treeList: any[], fn: Fn, childrenKey = 'children') {
-  for (let i = 0; i < treeList.length; i++) {
-    let item = treeList[i];
-    if (fn(item, i, treeList)) {
-      return item;
-    }
-    let children = item[childrenKey];
-    if (isArray(children)) {
-      let findResult = findTree(children, fn, childrenKey);
-      if (findResult) {
-        return findResult;
-      }
-    }
-  }
-  return null;
-}
-
-/** 鑾峰彇 mapFormSchema 鏂规硶 */
-export function bindMapFormSchema<T>(spanMap, spanTypeDef: T) {
-  return function (s: FormSchema, spanType: T = spanTypeDef) {
-    return merge(
-      {
-        disabledLabelWidth: true,
-      } as FormSchema,
-      spanMap[spanType],
-      s
-    );
-  };
-}
-
-/**
- * 瀛楃涓叉槸鍚︿负null鎴杗ull瀛楃涓�
- * @param str
- * @return {boolean}
- */
-export function stringIsNull(str) {
-  // 涓や釜 == 鍙互鍚屾椂鍒ゆ柇 null 鍜� undefined
-  return str == null || str === 'null' || str === 'undefined';
-}
-
-/**
- * 銆愮粍浠跺浜嗗彲鑳藉瓨鍦ㄦ�ц兘闂銆戣幏鍙栧脊绐梔iv锛屽皢涓嬫媺妗嗐�佹棩鏈熺瓑缁勪欢鎸傝浇鍒癿odal涓婏紝瑙e喅寮圭獥閬洊闂
- * @param node
- */
-export function getAutoScrollContainer(node: HTMLElement) {
-  let element: Nullable<HTMLElement> = node
-  while (element != null) {
-    if (element.classList.contains('scrollbar__view')) {
-      // 鍒ゆ柇鏄惁鏈夋粴鍔ㄦ潯
-      if (element.clientHeight < element.scrollHeight) {
-        // 鏈夋粴鍔ㄦ潯鏃讹紝鎸傝浇鍒扮埗绾э紝瑙e喅婊氬姩闂
-        return node.parentElement
-      } else {
-        // 鏃犳粴鍔ㄦ潯鏃讹紝鎸傝浇鍒癰ody涓婏紝瑙e喅涓嬫媺妗嗛伄鐩栭棶棰�
-        return document.body
-      }
-    } else {
-      element = element.parentElement
-    }
-  }
-  // 涓嶅湪寮圭獥鍐咃紝璧伴粯璁ら�昏緫
-  return node.parentElement
-}
-
-/**
- * 鍒ゆ柇瀛愯彍鍗曟槸鍚﹀叏閮ㄩ殣钘�
- * @param menuTreeItem
- */
-export  function checkChildrenHidden(menuTreeItem){
-  //鏄惁鏄仛鍚堣矾鐢�
-  let alwaysShow=menuTreeItem.alwaysShow;
-  if(alwaysShow){
-    return false;
-  }
-  if(!menuTreeItem.children){
-    return false
-  }
-  return menuTreeItem.children?.find((item) => item.hideMenu == false) != null;
-}
diff --git a/src/utils/common/renderUtils.ts b/src/utils/common/renderUtils.ts
deleted file mode 100644
index cf8d1d6..0000000
--- a/src/utils/common/renderUtils.ts
+++ /dev/null
@@ -1,175 +0,0 @@
-import { h } from 'vue';
-import { Avatar, Tag, Tooltip } from 'ant-design-vue';
-import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-import { Tinymce } from '/@/components/Tinymce';
-import Icon from '/@/components/Icon';
-import { getDictItemsByCode } from '/@/utils/dict/index';
-import { filterMultiDictText } from '/@/utils/dict/JDictSelectUtil.js';
-import { isEmpty } from '/@/utils/is';
-import { useMessage } from '/@/hooks/web/useMessage';
-const { createMessage } = useMessage();
-
-const render = {
-  /**
-   * 娓叉煋鍒楄〃澶村儚
-   */
-  renderAvatar: ({ record }) => {
-    if (record.avatar) {
-      let avatarList = record.avatar.split(',');
-      return h(
-        'span',
-        avatarList.map((item) => {
-          return h(Avatar, {
-            src: getFileAccessHttpUrl(item),
-            shape: 'square',
-            size: 'default',
-            style: { marginRight: '5px' },
-          });
-        })
-      );
-    } else {
-      return h(
-        Avatar,
-        { shape: 'square', size: 'default' },
-        {
-          icon: () => h(Icon, { icon: 'ant-design:file-image-outlined', size: 30 }),
-        }
-      );
-    }
-  },
-  /**
-   * 鏍规嵁瀛楀吀缂栫爜 娓叉煋
-   * @param v 鍊�
-   * @param code 瀛楀吀缂栫爜
-   * @param renderTag 鏄惁浣跨敤tag娓叉煋
-   */
-  renderDict: (v, code, renderTag = false) => {
-    let text = '';
-    let array = getDictItemsByCode(code) || [];
-    let obj = array.filter((item) => {
-      return item.value == v;
-    });
-    if (obj.length > 0) {
-      text = obj[0].text;
-    }
-    return isEmpty(text) || !renderTag ? h('span', text) : h(Tag, text);
-  },
-  /**
-   * 娓叉煋鍥剧墖
-   * @param text
-   */
-  renderImage: ({ text }) => {
-    if (!text) {
-      //update-begin-author:taoyan date:2022-5-24 for:  VUEN-1084 銆恦ue3銆憃nline琛ㄥ崟娴嬭瘯鍙戠幇鐨勬柊闂 41銆佺敓鎴愮殑浠g爜锛屾爲榛樿鍥惧ぇ灏忔湭鏀�
-      return h(
-        Avatar,
-        { shape: 'square', size: 25 },
-        {
-          icon: () => h(Icon, { icon: 'ant-design:file-image-outlined', size: 25 }),
-        }
-      );
-    }
-    let avatarList = text.split(',');
-    return h(
-      'span',
-      avatarList.map((item) => {
-        return h(Avatar, {
-          src: getFileAccessHttpUrl(item),
-          shape: 'square',
-          size: 25,
-          style: { marginRight: '5px' },
-        });
-      })
-    );
-    //update-end-author:taoyan date:2022-5-24 for:  VUEN-1084 銆恦ue3銆憃nline琛ㄥ崟娴嬭瘯鍙戠幇鐨勬柊闂 41銆佺敓鎴愮殑浠g爜锛屾爲榛樿鍥惧ぇ灏忔湭鏀�
-  },
-  /**
-   * 娓叉煋 Tooltip
-   * @param text
-   * @param len
-   */
-  renderTip: (text, len = 20) => {
-    if (text) {
-      let showText = text + '';
-      if (showText.length > len) {
-        showText = showText.substr(0, len) + '...';
-      }
-      return h(Tooltip, { title: text }, () => showText);
-    }
-    return text;
-  },
-  /**
-   * 娓叉煋a鏍囩
-   * @param text
-   */
-  renderHref: ({ text }) => {
-    if (!text) {
-      return '';
-    }
-    const len = 20;
-    if (text.length > len) {
-      text = text.substr(0, len);
-    }
-    return h('a', { href: text, target: '_blank' }, text);
-  },
-  /**
-   * 鏍规嵁瀛楀吀娓叉煋
-   * @param v
-   * @param array
-   */
-  renderDictNative: (v, array, renderTag = false) => {
-    let text = '';
-    let color = '';
-    let obj = array.filter((item) => {
-      return item.value == v;
-    });
-    if (obj.length > 0) {
-      text = obj[0].label;
-      color = obj[0].color;
-    }
-    return isEmpty(text) || !renderTag ? h('span', text) : h(Tag, { color }, () => text);
-  },
-  /**
-   * 娓叉煋瀵屾枃鏈�
-   */
-  renderTinymce: ({ model, field }) => {
-    return h(Tinymce, {
-      showImageUpload: false,
-      height: 300,
-      value: model[field],
-      onChange: (value: string) => {
-        model[field] = value;
-      },
-    });
-  },
-
-  renderSwitch: (text, arr) => {
-    return text ? filterMultiDictText(arr, text) : '';
-  },
-  renderCategoryTree: (text, code) => {
-    let array = getDictItemsByCode(code);
-    return filterMultiDictText(array, text);
-  },
-  renderTag(text, color) {
-    return isEmpty(text) ? h('span', text) : h(Tag, { color }, () => text);
-  },
-};
-
-/**
- * 鏂囦欢涓嬭浇
- */
-function downloadFile(url) {
-  if (!url) {
-    createMessage.warning('鏈煡鐨勬枃浠�');
-    return;
-  }
-  if (url.indexOf(',') > 0) {
-    url = url.substring(0, url.indexOf(','));
-  }
-  url = getFileAccessHttpUrl(url.split(',')[0]);
-  if (url) {
-    window.open(url);
-  }
-}
-
-export { render, downloadFile };
diff --git a/src/utils/common/vxeUtils.ts b/src/utils/common/vxeUtils.ts
deleted file mode 100644
index 45cb642..0000000
--- a/src/utils/common/vxeUtils.ts
+++ /dev/null
@@ -1,102 +0,0 @@
-import { getValueType } from '/@/utils';
-
-export const VALIDATE_FAILED = Symbol();
-/**
- * 涓�娆℃�ч獙璇佷富琛ㄥ崟鍜屾墍鏈夌殑娆¤〃鍗�(鏂扮増鏈�)
- * @param form 涓昏〃鍗� form 瀵硅薄
- * @param cases 鎺ユ敹涓�涓暟缁勶紝姣忛」閮芥槸涓�涓狫EditableTable瀹炰緥
- * @returns {Promise<any>}
- */
-export async function validateFormModelAndTables(validate, formData, cases, props, autoJumpTab?) {
-  if (!(validate && typeof validate === 'function')) {
-    throw `validate 鍙傛暟闇�瑕佺殑鏄竴涓柟娉曪紝鑰屼紶鍏ョ殑鍗存槸${typeof validate}`;
-  }
-  let dataMap = {};
-  let values = await new Promise((resolve, reject) => {
-    // 楠岃瘉涓昏〃琛ㄥ崟
-    validate()
-      .then(() => {
-        //update-begin---author:wangshuai ---date:20220507  for锛歔VUEN-912]涓�瀵瑰鐢ㄦ埛缁勪欢锛堟墍鏈夐鏍硷紝鍗曡〃鍜屾爲娌¢棶棰橈級淇濆瓨鎶ラ敊------------
-        for (let data in formData) {
-          //濡傛灉璇ユ暟鎹槸鏁扮粍
-          if (formData[data] instanceof Array) {
-            let valueType = getValueType(props, data);
-            //濡傛灉鏄瓧绗︿覆绫诲瀷鐨勯渶瑕佸彉鎴愪互閫楀彿鍒嗗壊鐨勫瓧绗︿覆
-            if (valueType === 'string') {
-              formData[data] = formData[data].join(',');
-            }
-          }
-        }
-        //update-end---author:wangshuai ---date:20220507  for锛歔VUEN-912]涓�瀵瑰鐢ㄦ埛缁勪欢锛堟墍鏈夐鏍硷紝鍗曡〃鍜屾爲娌¢棶棰橈級淇濆瓨鎶ラ敊--------------
-        resolve(formData);
-      })
-      .catch(() => {
-        reject({ error: VALIDATE_FAILED });
-      });
-  });
-  Object.assign(dataMap, { formValue: values });
-  // 楠岃瘉鎵�鏈夊瓙琛ㄧ殑琛ㄥ崟
-  let subData = await validateTables(cases, autoJumpTab);
-  // 鍚堝苟鏈�缁堟暟鎹�
-  dataMap = Object.assign(dataMap, { tablesValue: subData });
-  return dataMap;
-}
-/**
- * 楠岃瘉骞惰幏鍙栦竴涓垨澶氫釜琛ㄦ牸鐨勬墍鏈夊��
- * @param cases 鎺ユ敹涓�涓暟缁勶紝姣忛」閮芥槸涓�涓狫EditableTable瀹炰緥
- * @param autoJumpTab 鏄惁鑷姩璺宠浆鍒版姤閿欑殑tab
- */
-export function validateTables(cases, autoJumpTab = true) {
-  if (!(cases instanceof Array)) {
-    throw `'validateTables'鍑芥暟鐨�'cases'鍙傛暟闇�瑕佺殑鏄竴涓暟缁勶紝鑰屼紶鍏ョ殑鍗存槸${typeof cases}`;
-  }
-  return new Promise((resolve, reject) => {
-    let tablesData: any = [];
-    let index = 0;
-    if (!cases || cases.length === 0) {
-      resolve(tablesData);
-    }
-    (function next() {
-      let vm = cases[index];
-      vm.value.validateTable().then((errMap) => {
-        // 鏍¢獙閫氳繃
-        if (!errMap) {
-          tablesData[index] = { tableData: vm.value.getTableData() };
-          // 鍒ゆ柇鏍¢獙鏄惁鍏ㄩ儴瀹屾垚锛屽畬鎴愯繑鍥炴垚鍔燂紝鍚﹀垯缁х画杩涜涓嬩竴姝ユ牎楠�
-          if (++index === cases.length) {
-            resolve(tablesData);
-          } else next();
-        } else {
-          // 灏濊瘯鑾峰彇tabKey锛屽鏋滃湪ATab缁勪欢鍐呭嵆鍙幏鍙�
-          let paneKey;
-          let tabPane = getVmParentByName(vm.value, 'ATabPane');
-          if (tabPane) {
-            paneKey = tabPane.$.vnode.key;
-            // 鑷姩璺宠浆鍒拌琛ㄦ牸
-            if (autoJumpTab) {
-              let tabs = getVmParentByName(tabPane, 'Tabs');
-              tabs && tabs.setActiveKey && tabs.setActiveKey(paneKey);
-            }
-          }
-          // 鍑虹幇鏈獙璇侀�氳繃鐨勮〃鍗曪紝涓嶅啀杩涜涓嬩竴姝ユ牎楠岋紝鐩存帴杩斿洖澶辫触
-          reject({ error: VALIDATE_FAILED, index, paneKey, errMap });
-        }
-      });
-    })();
-  });
-}
-
-export function getVmParentByName(vm, name) {
-  let parent = vm.$parent;
-  if (parent && parent.$options) {
-    if (parent.$options.name === name) {
-      return parent;
-    } else {
-      let res = getVmParentByName(parent, name);
-      if (res) {
-        return res;
-      }
-    }
-  }
-  return null;
-}
diff --git a/src/utils/dateUtil.ts b/src/utils/dateUtil.ts
deleted file mode 100644
index 687eb25..0000000
--- a/src/utils/dateUtil.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Independent time operation tool to facilitate subsequent switch to dayjs
- */
-import dayjs from 'dayjs';
-
-const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
-const DATE_FORMAT = 'YYYY-MM-DD';
-
-export function formatToDateTime(date: dayjs.Dayjs | undefined = undefined, format = DATE_TIME_FORMAT): string {
-  return dayjs(date).format(format);
-}
-
-export function formatToDate(date: dayjs.Dayjs | undefined = undefined, format = DATE_FORMAT): string {
-  return dayjs(date).format(format);
-}
-
-export const dateUtil = dayjs;
diff --git a/src/utils/desform/customExpression.ts b/src/utils/desform/customExpression.ts
deleted file mode 100644
index 5359ba6..0000000
--- a/src/utils/desform/customExpression.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *
- * 杩欓噷濉啓鐢ㄦ埛鑷畾涔夌殑琛ㄨ揪寮�
- * 鍙敤鍦∣nline琛ㄥ崟鐨勯粯璁ゅ�艰〃杈惧紡涓娇鐢�
- * 闇�瑕佸閮ㄤ娇鐢ㄧ殑鍙橀噺鎴栨柟娉曚竴瀹氳 export锛屽惁鍒欐棤娉曡瘑鍒�
- * 绀轰緥锛�
- *   export const name = '寮犱笁'; // const 鏄父閲�
- *   export let age = 17; // 鐪嬫儏鍐� export const 杩樻槸 let 锛屼袱鑰呴兘鍙甯镐娇鐢�
- *   export function content(arg) { // export 鏂规硶锛屽彲浼犲弬鏁帮紝浣跨敤鏃惰鍔犳嫭鍙凤紝鍊间竴瀹氳return鍥炲幓锛屽彲浠ヨ繑鍥濸romise
- *     return 'content' + arg;
- *   }
- *   export const address = (arg) => content(arg) + ' | 鍖椾含甯�'; // export 绠ご鍑芥暟涔熷彲浠�
- *
- */
-
-/** 瀛楁榛樿鍊煎畼鏂圭ず渚嬶細鑾峰彇鍦板潃 */
-export function demoFieldDefVal_getAddress(arg) {
-  if (!arg) {
-    arg = '鏈濋槼鍖�';
-  }
-  return `鍖椾含甯� ${arg}`;
-}
-
-/** 鑷畾涔塉S鍑芥暟绀轰緥 */
-export function sayHi(name) {
-  if (!name) {
-    name = '寮犱笁';
-  }
-  return `鎮ㄥソ锛屾垜鍙細 ${name}`;
-}
diff --git a/src/utils/dict/JDictSelectUtil.js b/src/utils/dict/JDictSelectUtil.js
deleted file mode 100644
index 178369e..0000000
--- a/src/utils/dict/JDictSelectUtil.js
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * 瀛楀吀 util
- * author: scott
- * date: 20190109
- */
-
-import { ajaxGetDictItems, getDictItemsByCode } from './index';
-
-/**
- * 鑾峰彇瀛楀吀鏁扮粍
- * 銆愮洰鍓嶄粎琛ㄥ崟璁捐鍣ㄩ〉闈娇鐢ㄨ鏂规硶銆�
- * @param dictCode 瀛楀吀Code
- * @param isTransformResponse 鏄惁杞崲杩斿洖缁撴灉
- * @return List<Map>
- */
-export async function initDictOptions(dictCode, isTransformResponse = true) {
-  if (!dictCode) {
-    return '瀛楀吀Code涓嶈兘涓虹┖!';
-  }
-  //浼樺厛浠庣紦瀛樹腑璇诲彇瀛楀吀閰嶇疆
-  if (getDictItemsByCode(dictCode)) {
-    let res = {};
-    res.result = getDictItemsByCode(dictCode);
-    res.success = true;
-    if (isTransformResponse) {
-      return res.result;
-    } else {
-      return res;
-    }
-  }
-  //鑾峰彇瀛楀吀鏁扮粍
-  return await ajaxGetDictItems(dictCode, {}, { isTransformResponse });
-}
-
-/**
- * 瀛楀吀鍊兼浛鎹㈡枃鏈�氱敤鏂规硶
- * @param dictOptions  瀛楀吀鏁扮粍
- * @param text  瀛楀吀鍊�
- * @return String
- */
-export function filterDictText(dictOptions, text) {
-  // --update-begin----author:sunjianlei---date:20200323------for: 瀛楀吀缈昏瘧 text 鍏佽閫楀彿鍒嗛殧 ---
-  if (text != null && Array.isArray(dictOptions)) {
-    let result = [];
-    // 鍏佽澶氫釜閫楀彿鍒嗛殧锛屽厑璁镐紶鏁扮粍瀵硅薄
-    let splitText;
-    if (Array.isArray(text)) {
-      splitText = text;
-    } else {
-      splitText = text.toString().trim().split(',');
-    }
-    for (let txt of splitText) {
-      let dictText = txt;
-      for (let dictItem of dictOptions) {
-        if (txt.toString() === dictItem.value.toString()) {
-          dictText = dictItem.text || dictItem.title || dictItem.label;
-          break;
-        }
-      }
-      result.push(dictText);
-    }
-    return result.join(',');
-  }
-  return text;
-  // --update-end----author:sunjianlei---date:20200323------for: 瀛楀吀缈昏瘧 text 鍏佽閫楀彿鍒嗛殧 ---
-}
-
-/**
- * 瀛楀吀鍊兼浛鎹㈡枃鏈�氱敤鏂规硶(澶氶��)
- * @param dictOptions  瀛楀吀鏁扮粍
- * @param text  瀛楀吀鍊�
- * @return String
- */
-export function filterMultiDictText(dictOptions, text) {
-  //js 鈥�!text鈥� 璁や负0涓虹┖锛屾墍浠ュ仛鎻愬墠澶勭悊
-  if (text === 0 || text === '0') {
-    if (dictOptions) {
-      for (let dictItem of dictOptions) {
-        if (text == dictItem.value) {
-          return dictItem.text;
-        }
-      }
-    }
-  }
-
-  if (!text || text == 'undefined' || text == 'null' || !dictOptions || dictOptions.length == 0) {
-    return '';
-  }
-  let re = '';
-  text = text.toString();
-  let arr = text.split(',');
-  dictOptions.forEach(function (option) {
-    if (option) {
-      for (let i = 0; i < arr.length; i++) {
-        if (arr[i] === option.value) {
-          re += option.text + ',';
-          break;
-        }
-      }
-    }
-  });
-  if (re == '') {
-    return text;
-  }
-  return re.substring(0, re.length - 1);
-}
-
-/**
- * 缈昏瘧瀛楁鍊煎搴旂殑鏂囨湰
- * @param children
- * @returns string
- */
-export function filterDictTextByCache(dictCode, key) {
-  if (key == null || key.length == 0) {
-    return;
-  }
-  if (!dictCode) {
-    return '瀛楀吀Code涓嶈兘涓虹┖!';
-  }
-  //浼樺厛浠庣紦瀛樹腑璇诲彇瀛楀吀閰嶇疆
-  if (getDictItemsByCode(dictCode)) {
-    let item = getDictItemsByCode(dictCode).filter((t) => t['value'] == key);
-    if (item && item.length > 0) {
-      return item[0]['text'];
-    }
-  }
-}
-
-/** 閫氳繃code鑾峰彇瀛楀吀鏁扮粍 */
-export async function getDictItems(dictCode, params) {
-  //浼樺厛浠庣紦瀛樹腑璇诲彇瀛楀吀閰嶇疆
-  if (getDictItemsByCode(dictCode)) {
-    let desformDictItems = getDictItemsByCode(dictCode).map((item) => ({
-      ...item,
-      label: item.text,
-    }));
-    return desformDictItems;
-  }
-
-  //缂撳瓨涓病鏈夛紝灏辫姹傚悗鍙�
-  return await ajaxGetDictItems(dictCode, params)
-    .then(({ success, result }) => {
-      if (success) {
-        let res = result.map((item) => ({ ...item, label: item.text }));
-        console.log('------- 浠嶥B涓幏鍙栧埌浜嗗瓧鍏�-------dictCode : ', dictCode, res);
-        return Promise.resolve(res);
-      } else {
-        console.error('getDictItems error: : ', res);
-        return Promise.resolve([]);
-      }
-    })
-    .catch((res) => {
-      console.error('getDictItems error: ', res);
-      return Promise.resolve([]);
-    });
-}
diff --git a/src/utils/dict/index.ts b/src/utils/dict/index.ts
deleted file mode 100644
index 6a33f39..0000000
--- a/src/utils/dict/index.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { getAuthCache } from '/@/utils/auth';
-import { DB_DICT_DATA_KEY } from '/@/enums/cacheEnum';
-import { defHttp } from '/@/utils/http/axios';
-
-/**
- * 浠庣紦瀛樹腑鑾峰彇瀛楀吀閰嶇疆
- * @param code
- */
-export const getDictItemsByCode = (code) => {
-  if (getAuthCache(DB_DICT_DATA_KEY) && getAuthCache(DB_DICT_DATA_KEY)[code]) {
-    return getAuthCache(DB_DICT_DATA_KEY)[code];
-  }
-};
-/**
- * 鑾峰彇瀛楀吀鏁扮粍
- * @param dictCode 瀛楀吀Code
- * @return List<Map>
- */
-export const initDictOptions = (code) => {
-  //1.浼樺厛浠庣紦瀛樹腑璇诲彇瀛楀吀閰嶇疆
-  if (getDictItemsByCode(code)) {
-    return new Promise((resolve, reject) => {
-      resolve(getDictItemsByCode(code));
-    });
-  }
-  //2.鑾峰彇瀛楀吀鏁扮粍
-  //update-begin-author:taoyan date:2022-6-21 for: 瀛楀吀鏁版嵁璇锋眰鍓嶅皢鍙傛暟缂栫爜澶勭悊锛屼絾鏄笉鑳界洿鎺ョ紪鐮侊紝鍥犱负鍙兘涔嬪墠宸茬粡缂栫爜杩囦簡
-  if (code.indexOf(',') > 0 && code.indexOf(' ') > 0) {
-    // 缂栫爜鍚庣被浼約ys_user%20where%20username%20like%20xxx' 鏄笉鍖呭惈绌烘牸鐨�,杩欓噷鍒ゆ柇濡傛灉鏈夌┖鏍煎拰閫楀彿璇存槑闇�瑕佺紪鐮佸鐞�
-    code = encodeURI(code);
-  }
-  //update-end-author:taoyan date:2022-6-21 for: 瀛楀吀鏁版嵁璇锋眰鍓嶅皢鍙傛暟缂栫爜澶勭悊锛屼絾鏄笉鑳界洿鎺ョ紪鐮侊紝鍥犱负鍙兘涔嬪墠宸茬粡缂栫爜杩囦簡
-  return defHttp.get({ url: `/sys/dict/getDictItems/${code}` });
-};
-/**
- * 鑾峰彇瀛楀吀鏁扮粍
- * @param code 瀛楀吀Code
- * @param params 鏌ヨ鍙傛暟
- * @param options 鏌ヨ閰嶇疆
- * @return List<Map>
- */
-export const ajaxGetDictItems = (code, params, options?) => defHttp.get({ url: `/sys/dict/getDictItems/${code}`, params }, options);
diff --git a/src/utils/domUtils.ts b/src/utils/domUtils.ts
deleted file mode 100644
index 6062950..0000000
--- a/src/utils/domUtils.ts
+++ /dev/null
@@ -1,172 +0,0 @@
-import type { FunctionArgs } from '@vueuse/core';
-import { upperFirst } from 'lodash-es';
-
-export interface ViewportOffsetResult {
-  left: number;
-  top: number;
-  right: number;
-  bottom: number;
-  rightIncludeBody: number;
-  bottomIncludeBody: number;
-}
-
-export function getBoundingClientRect(element: Element): DOMRect | number {
-  if (!element || !element.getBoundingClientRect) {
-    return 0;
-  }
-  return element.getBoundingClientRect();
-}
-
-function trim(string: string) {
-  return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, '');
-}
-
-/* istanbul ignore next */
-export function hasClass(el: Element, cls: string) {
-  if (!el || !cls) return false;
-  if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');
-  if (el.classList) {
-    return el.classList.contains(cls);
-  } else {
-    return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;
-  }
-}
-
-/* istanbul ignore next */
-export function addClass(el: Element, cls: string) {
-  if (!el) return;
-  let curClass = el.className;
-  const classes = (cls || '').split(' ');
-
-  for (let i = 0, j = classes.length; i < j; i++) {
-    const clsName = classes[i];
-    if (!clsName) continue;
-
-    if (el.classList) {
-      el.classList.add(clsName);
-    } else if (!hasClass(el, clsName)) {
-      curClass += ' ' + clsName;
-    }
-  }
-  if (!el.classList) {
-    el.className = curClass;
-  }
-}
-
-/* istanbul ignore next */
-export function removeClass(el: Element, cls: string) {
-  if (!el || !cls) return;
-  const classes = cls.split(' ');
-  let curClass = ' ' + el.className + ' ';
-
-  for (let i = 0, j = classes.length; i < j; i++) {
-    const clsName = classes[i];
-    if (!clsName) continue;
-
-    if (el.classList) {
-      el.classList.remove(clsName);
-    } else if (hasClass(el, clsName)) {
-      curClass = curClass.replace(' ' + clsName + ' ', ' ');
-    }
-  }
-  if (!el.classList) {
-    el.className = trim(curClass);
-  }
-}
-/**
- * Get the left and top offset of the current element
- * left: the distance between the leftmost element and the left side of the document
- * top: the distance from the top of the element to the top of the document
- * right: the distance from the far right of the element to the right of the document
- * bottom: the distance from the bottom of the element to the bottom of the document
- * rightIncludeBody: the distance between the leftmost element and the right side of the document
- * bottomIncludeBody: the distance from the bottom of the element to the bottom of the document
- *
- * @description:
- */
-export function getViewportOffset(element: Element): ViewportOffsetResult {
-  const doc = document.documentElement;
-
-  const docScrollLeft = doc.scrollLeft;
-  const docScrollTop = doc.scrollTop;
-  const docClientLeft = doc.clientLeft;
-  const docClientTop = doc.clientTop;
-
-  const pageXOffset = window.pageXOffset;
-  const pageYOffset = window.pageYOffset;
-
-  const box = getBoundingClientRect(element);
-
-  const { left: retLeft, top: rectTop, width: rectWidth, height: rectHeight } = box as DOMRect;
-
-  const scrollLeft = (pageXOffset || docScrollLeft) - (docClientLeft || 0);
-  const scrollTop = (pageYOffset || docScrollTop) - (docClientTop || 0);
-  const offsetLeft = retLeft + pageXOffset;
-  const offsetTop = rectTop + pageYOffset;
-
-  const left = offsetLeft - scrollLeft;
-  const top = offsetTop - scrollTop;
-
-  const clientWidth = window.document.documentElement.clientWidth;
-  const clientHeight = window.document.documentElement.clientHeight;
-  return {
-    left: left,
-    top: top,
-    right: clientWidth - rectWidth - left,
-    bottom: clientHeight - rectHeight - top,
-    rightIncludeBody: clientWidth - left,
-    bottomIncludeBody: clientHeight - top,
-  };
-}
-
-export function hackCss(attr: string, value: string) {
-  const prefix: string[] = ['webkit', 'Moz', 'ms', 'OT'];
-
-  const styleObj: any = {};
-  prefix.forEach((item) => {
-    styleObj[`${item}${upperFirst(attr)}`] = value;
-  });
-  return {
-    ...styleObj,
-    [attr]: value,
-  };
-}
-
-/* istanbul ignore next */
-export function on(element: Element | HTMLElement | Document | Window, event: string, handler: EventListenerOrEventListenerObject): void {
-  if (element && event && handler) {
-    element.addEventListener(event, handler, false);
-  }
-}
-
-/* istanbul ignore next */
-export function off(element: Element | HTMLElement | Document | Window, event: string, handler: Fn): void {
-  if (element && event && handler) {
-    element.removeEventListener(event, handler, false);
-  }
-}
-
-/* istanbul ignore next */
-export function once(el: HTMLElement, event: string, fn: EventListener): void {
-  const listener = function (this: any, ...args: unknown[]) {
-    if (fn) {
-      fn.apply(this, args);
-    }
-    off(el, event, listener);
-  };
-  on(el, event, listener);
-}
-
-export function useRafThrottle<T extends FunctionArgs>(fn: T): T {
-  let locked = false;
-  // @ts-ignore
-  return function (...args: any[]) {
-    if (locked) return;
-    locked = true;
-    window.requestAnimationFrame(() => {
-      // @ts-ignore
-      fn.apply(this, args);
-      locked = false;
-    });
-  };
-}
diff --git a/src/utils/encryption/signMd5Utils.js b/src/utils/encryption/signMd5Utils.js
deleted file mode 100644
index 1a66e11..0000000
--- a/src/utils/encryption/signMd5Utils.js
+++ /dev/null
@@ -1,138 +0,0 @@
-import md5 from 'md5';
-//绛惧悕瀵嗛挜涓�(鍓嶅悗绔涓�鑷达紝姝e紡鍙戝竷璇疯嚜琛屼慨鏀�)
-const signatureSecret = 'dd05f1c54d63749eda95f9fa6d49v442a';
-
-export default class signMd5Utils {
-  /**
-   * json鍙傛暟鍗囧簭
-   * @param jsonObj 鍙戦�佸弬鏁�
-   */
-
-  static sortAsc(jsonObj) {
-    let arr = new Array();
-    let num = 0;
-    for (let i in jsonObj) {
-      arr[num] = i;
-      num++;
-    }
-    let sortArr = arr.sort();
-    let sortObj = {};
-    for (let i in sortArr) {
-      sortObj[sortArr[i]] = jsonObj[sortArr[i]];
-    }
-    return sortObj;
-  }
-
-  /**
-   * @param url 璇锋眰鐨剈rl,搴旇鍖呭惈璇锋眰鍙傛暟(url鐨�?鍚庨潰鐨勫弬鏁�)
-   * @param requestParams 璇锋眰鍙傛暟(POST鐨凧SON鍙傛暟)
-   * @returns {string} 鑾峰彇绛惧悕
-   */
-  static getSign(url, requestParams) {
-    let urlParams = this.parseQueryString(url);
-    let jsonObj = this.mergeObject(urlParams, requestParams);
-    let requestBody = this.sortAsc(jsonObj);
-    delete requestBody._t;
-    return md5(JSON.stringify(requestBody) + signatureSecret).toUpperCase();
-  }
-
-  /**
-   * @param url 璇锋眰鐨剈rl
-   * @returns {{}} 灏唘rl涓姹傚弬鏁扮粍瑁呮垚json瀵硅薄(url鐨�?鍚庨潰鐨勫弬鏁�)
-   */
-  static parseQueryString(url) {
-    let urlReg = /^[^\?]+\?([\w\W]+)$/,
-      paramReg = /([^&=]+)=([\w\W]*?)(&|$|#)/g,
-      urlArray = urlReg.exec(url),
-      result = {};
-
-    // 鑾峰彇URL涓婃渶鍚庡甫閫楀彿鐨勫弬鏁板彉閲� sys/dict/getDictItems/sys_user,realname,username
-    //銆愯繖杈规潯浠舵病鏈塭ncode銆戝甫鏉′欢鍙傛暟渚嬪瓙锛�/sys/dict/getDictItems/sys_user,realname,id,username!='admin'%20order%20by%20create_time
-    let lastpathVariable = url.substring(url.lastIndexOf('/') + 1);
-    if (lastpathVariable.includes(',')) {
-      if (lastpathVariable.includes('?')) {
-        lastpathVariable = lastpathVariable.substring(0, lastpathVariable.indexOf('?'));
-      }
-      //update-begin---author:wangshuai ---date:20221103  for锛歔issues/183]涓嬫媺鎼滅储锛屼娇鐢ㄥ姩鎬佸瓧鍏革紝鍦ㄧ嚎椤甸潰涓嶆姤閿欙紝鐢熸垚鐨勪唬鐮佹姤閿� ------------
-      //瑙e喅Sign 绛惧悕鏍¢獙澶辫触 #2728
-      //decodeURI瀵圭壒娈婂瓧绗︽病鏈夋病鏈夌紪鐮佸拰瑙g爜鐨勮兘鍔涳紝闇�瑕佷娇鐢╠ecodeURIComponent
-      result['x-path-variable'] = decodeURIComponent(lastpathVariable);
-      //update-end---author:wangshuai ---date:20221103  for锛歔issues/183]涓嬫媺鎼滅储锛屼娇鐢ㄥ姩鎬佸瓧鍏革紝鍦ㄧ嚎椤甸潰涓嶆姤閿欙紝鐢熸垚鐨勪唬鐮佹姤閿� ------------
-    }
-    if (urlArray && urlArray[1]) {
-      let paramString = urlArray[1],
-        paramResult;
-      while ((paramResult = paramReg.exec(paramString)) != null) {
-        //鏁板瓧鍊艰浆涓簊tring绫诲瀷锛屽墠鍚庣鍔犲瘑瑙勫垯淇濇寔涓�鑷�
-        if (this.myIsNaN(paramResult[2])) {
-          paramResult[2] = paramResult[2].toString();
-        }
-        result[paramResult[1]] = paramResult[2];
-      }
-    }
-    return result;
-  }
-
-  /**
-   * @returns {*} 灏嗕袱涓璞″悎骞舵垚涓�涓�
-   */
-  static mergeObject(objectOne, objectTwo) {
-    if (objectTwo && Object.keys(objectTwo).length > 0) {
-      for (let key in objectTwo) {
-        if (objectTwo.hasOwnProperty(key) === true) {
-          //鏁板瓧鍊艰浆涓簊tring绫诲瀷锛屽墠鍚庣鍔犲瘑瑙勫垯淇濇寔涓�鑷�
-          if (this.myIsNaN(objectTwo[key])) {
-            objectTwo[key] = objectTwo[key].toString();
-          }
-          objectOne[key] = objectTwo[key];
-        }
-      }
-    }
-    return objectOne;
-  }
-
-  static urlEncode(param, key, encode) {
-    if (param == null) return '';
-    let paramStr = '';
-    let t = typeof param;
-    if (t == 'string' || t == 'number' || t == 'boolean') {
-      paramStr += '&' + key + '=' + (encode == null || encode ? encodeURIComponent(param) : param);
-    } else {
-      for (let i in param) {
-        let k = key == null ? i : key + (param instanceof Array ? '[' + i + ']' : '.' + i);
-        paramStr += this.urlEncode(param[i], k, encode);
-      }
-    }
-    return paramStr;
-  }
-
-  /**
-   * 鎺ュ彛绛惧悕鐢� 鐢熸垚header涓殑鏃堕棿鎴�
-   * @returns {number}
-   */
-  static getTimestamp() {
-    return new Date().getTime();
-  }
-
-  // static getDateTimeToString() {
-  //   const date_ = new Date()
-  //   const year = date_.getFullYear()
-  //   let month = date_.getMonth() + 1
-  //   let day = date_.getDate()
-  //   if (month < 10) month = '0' + month
-  //   if (day < 10) day = '0' + day
-  //   let hours = date_.getHours()
-  //   let mins = date_.getMinutes()
-  //   let secs = date_.getSeconds()
-  //   const msecs = date_.getMilliseconds()
-  //   if (hours < 10) hours = '0' + hours
-  //   if (mins < 10) mins = '0' + mins
-  //   if (secs < 10) secs = '0' + secs
-  //   if (msecs < 10) secs = '0' + msecs
-  //   return year + '' + month + '' + day + '' + hours + '' + mins + '' + secs
-  // }
-  // true:鏁板�煎瀷鐨勶紝false锛氶潪鏁板�煎瀷
-  static myIsNaN(value) {
-    return typeof value === 'number' && !isNaN(value);
-  }
-}
diff --git a/src/utils/env.ts b/src/utils/env.ts
deleted file mode 100644
index e13c49c..0000000
--- a/src/utils/env.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import type { GlobEnvConfig } from '/#/config';
-
-import { warn } from '/@/utils/log';
-import pkg from '../../package.json';
-import { getConfigFileName } from '../../build/getConfigFileName';
-
-export function getCommonStoragePrefix() {
-  const { VITE_GLOB_APP_SHORT_NAME } = getAppEnvConfig();
-  return `${VITE_GLOB_APP_SHORT_NAME}__${getEnv()}`.toUpperCase();
-}
-
-// Generate cache key according to version
-export function getStorageShortName() {
-  return `${getCommonStoragePrefix()}${`__${pkg.version}`}__`.toUpperCase();
-}
-
-export function getAppEnvConfig() {
-  const ENV_NAME = getConfigFileName(import.meta.env);
-
-  const ENV = (import.meta.env.DEV
-    ? // Get the global configuration (the configuration will be extracted independently when packaging)
-      (import.meta.env as unknown as GlobEnvConfig)
-    : window[ENV_NAME as any]) as unknown as GlobEnvConfig;
-
-  const {
-    VITE_GLOB_APP_TITLE,
-    VITE_GLOB_API_URL,
-    VITE_USE_MOCK,
-    VITE_GLOB_APP_SHORT_NAME,
-    VITE_GLOB_API_URL_PREFIX,
-    VITE_GLOB_APP_OPEN_SSO,
-    VITE_GLOB_APP_OPEN_QIANKUN,
-    VITE_GLOB_APP_CAS_BASE_URL,
-    VITE_GLOB_DOMAIN_URL,
-    VITE_GLOB_ONLINE_VIEW_URL,
-  } = ENV;
-
-  if (!/^[a-zA-Z\_]*$/.test(VITE_GLOB_APP_SHORT_NAME)) {
-    // warn(
-    //   `VITE_GLOB_APP_SHORT_NAME Variables can only be characters/underscores, please modify in the environment variables and re-running.`
-    // );
-  }
-
-  return {
-    VITE_GLOB_APP_TITLE,
-    VITE_GLOB_API_URL,
-    VITE_USE_MOCK,
-    VITE_GLOB_APP_SHORT_NAME,
-    VITE_GLOB_API_URL_PREFIX,
-    VITE_GLOB_APP_OPEN_SSO,
-    VITE_GLOB_APP_OPEN_QIANKUN,
-    VITE_GLOB_APP_CAS_BASE_URL,
-    VITE_GLOB_DOMAIN_URL,
-    VITE_GLOB_ONLINE_VIEW_URL,
-  };
-}
-
-/**
- * @description: Development mode
- */
-export const devMode = 'development';
-
-/**
- * @description: Production mode
- */
-export const prodMode = 'production';
-
-/**
- * @description: Get environment variables
- * @returns:
- * @example:
- */
-export function getEnv(): string {
-  return import.meta.env.MODE;
-}
-
-/**
- * @description: Is it a development mode
- * @returns:
- * @example:
- */
-export function isDevMode(): boolean {
-  return import.meta.env.DEV;
-}
-
-/**
- * @description: Is it a production mode
- * @returns:
- * @example:
- */
-export function isProdMode(): boolean {
-  return import.meta.env.PROD;
-}
diff --git a/src/utils/event/index.ts b/src/utils/event/index.ts
deleted file mode 100644
index 3a60d7c..0000000
--- a/src/utils/event/index.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import ResizeObserver from 'resize-observer-polyfill';
-
-const isServer = typeof window === 'undefined';
-
-/* istanbul ignore next */
-function resizeHandler(entries: any[]) {
-  for (const entry of entries) {
-    const listeners = entry.target.__resizeListeners__ || [];
-    if (listeners.length) {
-      listeners.forEach((fn: () => any) => {
-        fn();
-      });
-    }
-  }
-}
-
-/* istanbul ignore next */
-export function addResizeListener(element: any, fn: () => any) {
-  if (isServer) return;
-  if (!element.__resizeListeners__) {
-    element.__resizeListeners__ = [];
-    element.__ro__ = new ResizeObserver(resizeHandler);
-    element.__ro__.observe(element);
-  }
-  element.__resizeListeners__.push(fn);
-}
-
-/* istanbul ignore next */
-export function removeResizeListener(element: any, fn: () => any) {
-  if (!element || !element.__resizeListeners__) return;
-  element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
-  if (!element.__resizeListeners__.length) {
-    element.__ro__.disconnect();
-  }
-}
-
-export function triggerWindowResize() {
-  const event = document.createEvent('HTMLEvents');
-  event.initEvent('resize', true, true);
-  (event as any).eventType = 'message';
-  window.dispatchEvent(event);
-}
diff --git a/src/utils/factory/createAsyncComponent.tsx b/src/utils/factory/createAsyncComponent.tsx
deleted file mode 100644
index 4f668ad..0000000
--- a/src/utils/factory/createAsyncComponent.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import {
-  defineAsyncComponent,
-  // FunctionalComponent, CSSProperties
-} from 'vue';
-import { Spin } from 'ant-design-vue';
-import { noop } from '/@/utils/index';
-
-// const Loading: FunctionalComponent<{ size: 'small' | 'default' | 'large' }> = (props) => {
-//   const style: CSSProperties = {
-//     position: 'absolute',
-//     display: 'flex',
-//     justifyContent: 'center',
-//     alignItems: 'center',
-//   };
-//   return (
-//     <div style={style}>
-//       <Spin spinning={true} size={props.size} />
-//     </div>
-//   );
-// };
-
-interface Options {
-  size?: 'default' | 'small' | 'large';
-  delay?: number;
-  timeout?: number;
-  loading?: boolean;
-  retry?: boolean;
-}
-
-export function createAsyncComponent(loader: Fn, options: Options = {}) {
-  const { size = 'small', delay = 100, timeout = 30000, loading = false, retry = true } = options;
-  return defineAsyncComponent({
-    loader,
-    loadingComponent: loading ? <Spin spinning={true} size={size} /> : undefined,
-    // The error component will be displayed if a timeout is
-    // provided and exceeded. Default: Infinity.
-    // TODO
-    timeout,
-    // errorComponent
-    // Defining if component is suspensible. Default: true.
-    // suspensible: false,
-    delay,
-    /**
-     *
-     * @param {*} error Error message object
-     * @param {*} retry A function that indicating whether the async component should retry when the loader promise rejects
-     * @param {*} fail  End of failure
-     * @param {*} attempts Maximum allowed retries number
-     */
-    onError: !retry
-      ? noop
-      : (error, retry, fail, attempts) => {
-          if (error.message.match(/fetch/) && attempts <= 3) {
-            // retry on fetch errors, 3 max attempts
-            retry();
-          } else {
-            // Note that retry/fail are like resolve/reject of a promise:
-            // one of them must be called for the error handling to continue.
-            fail();
-          }
-        },
-  });
-}
diff --git a/src/utils/file/base64Conver.ts b/src/utils/file/base64Conver.ts
deleted file mode 100644
index d77618a..0000000
--- a/src/utils/file/base64Conver.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * @description: base64 to blob
- */
-export function dataURLtoBlob(base64Buf: string): Blob {
-  const arr = base64Buf.split(',');
-  const typeItem = arr[0];
-  const mime = typeItem.match(/:(.*?);/)![1];
-  const bstr = atob(arr[1]);
-  let n = bstr.length;
-  const u8arr = new Uint8Array(n);
-  while (n--) {
-    u8arr[n] = bstr.charCodeAt(n);
-  }
-  return new Blob([u8arr], { type: mime });
-}
-
-/**
- * img url to base64
- * @param url
- */
-export function urlToBase64(url: string, mineType?: string): Promise<string> {
-  return new Promise((resolve, reject) => {
-    let canvas = document.createElement('CANVAS') as Nullable<HTMLCanvasElement>;
-    const ctx = canvas!.getContext('2d');
-
-    const img = new Image();
-    img.crossOrigin = '';
-    img.onload = function () {
-      if (!canvas || !ctx) {
-        return reject();
-      }
-      canvas.height = img.height;
-      canvas.width = img.width;
-      ctx.drawImage(img, 0, 0);
-      const dataURL = canvas.toDataURL(mineType || 'image/png');
-      canvas = null;
-      resolve(dataURL);
-    };
-    img.src = url;
-  });
-}
diff --git a/src/utils/file/download.ts b/src/utils/file/download.ts
deleted file mode 100644
index 168e235..0000000
--- a/src/utils/file/download.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import { openWindow } from '..';
-import { dataURLtoBlob, urlToBase64 } from './base64Conver';
-
-/**
- * Download online pictures
- * @param url
- * @param filename
- * @param mime
- * @param bom
- */
-export function downloadByOnlineUrl(url: string, filename: string, mime?: string, bom?: BlobPart) {
-  urlToBase64(url).then((base64) => {
-    downloadByBase64(base64, filename, mime, bom);
-  });
-}
-
-/**
- * Download pictures based on base64
- * @param buf
- * @param filename
- * @param mime
- * @param bom
- */
-export function downloadByBase64(buf: string, filename: string, mime?: string, bom?: BlobPart) {
-  const base64Buf = dataURLtoBlob(buf);
-  downloadByData(base64Buf, filename, mime, bom);
-}
-
-/**
- * Download according to the background interface file stream
- * @param {*} data
- * @param {*} filename
- * @param {*} mime
- * @param {*} bom
- */
-export function downloadByData(data: BlobPart, filename: string, mime?: string, bom?: BlobPart) {
-  const blobData = typeof bom !== 'undefined' ? [bom, data] : [data];
-  const blob = new Blob(blobData, { type: mime || 'application/octet-stream' });
-  if (typeof window.navigator.msSaveBlob !== 'undefined') {
-    window.navigator.msSaveBlob(blob, filename);
-  } else {
-    const blobURL = window.URL.createObjectURL(blob);
-    const tempLink = document.createElement('a');
-    tempLink.style.display = 'none';
-    tempLink.href = blobURL;
-    tempLink.setAttribute('download', filename);
-    if (typeof tempLink.download === 'undefined') {
-      tempLink.setAttribute('target', '_blank');
-    }
-    document.body.appendChild(tempLink);
-    tempLink.click();
-    document.body.removeChild(tempLink);
-    window.URL.revokeObjectURL(blobURL);
-  }
-}
-
-/**
- * Download file according to file address
- * @param {*} sUrl
- */
-export function downloadByUrl({ url, target = '_blank', fileName }: { url: string; target?: TargetContext; fileName?: string }): boolean {
-  const isChrome = window.navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
-  const isSafari = window.navigator.userAgent.toLowerCase().indexOf('safari') > -1;
-
-  if (/(iP)/g.test(window.navigator.userAgent)) {
-    console.error('Your browser does not support download!');
-    return false;
-  }
-  if (isChrome || isSafari) {
-    const link = document.createElement('a');
-    link.href = url;
-    link.target = target;
-
-    if (link.download !== undefined) {
-      link.download = fileName || url.substring(url.lastIndexOf('/') + 1, url.length);
-    }
-
-    if (document.createEvent) {
-      const e = document.createEvent('MouseEvents');
-      e.initEvent('click', true, true);
-      link.dispatchEvent(e);
-      return true;
-    }
-  }
-  if (url.indexOf('?') === -1) {
-    url += '?download';
-  }
-
-  openWindow(url, { target });
-  return true;
-}
diff --git a/src/utils/helper/treeHelper.ts b/src/utils/helper/treeHelper.ts
deleted file mode 100644
index 8d01984..0000000
--- a/src/utils/helper/treeHelper.ts
+++ /dev/null
@@ -1,197 +0,0 @@
-interface TreeHelperConfig {
-  id: string;
-  children: string;
-  pid: string;
-}
-
-// 榛樿閰嶇疆
-const DEFAULT_CONFIG: TreeHelperConfig = {
-  id: 'id',
-  children: 'children',
-  pid: 'pid',
-};
-
-// 鑾峰彇閰嶇疆銆�  Object.assign 浠庝竴涓垨澶氫釜婧愬璞″鍒跺埌鐩爣瀵硅薄
-const getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config);
-
-// tree from list
-// 鍒楄〃涓殑鏍�
-export function listToTree<T = any>(list: any[], config: Partial<TreeHelperConfig> = {}): T[] {
-  const conf = getConfig(config) as TreeHelperConfig;
-  const nodeMap = new Map();
-  const result: T[] = [];
-  const { id, children, pid } = conf;
-
-  for (const node of list) {
-    node[children] = node[children] || [];
-    nodeMap.set(node[id], node);
-  }
-  for (const node of list) {
-    const parent = nodeMap.get(node[pid]);
-    (parent ? parent[children] : result).push(node);
-  }
-  return result;
-}
-
-export function treeToList<T = any>(tree: any, config: Partial<TreeHelperConfig> = {}): T {
-  config = getConfig(config);
-  const { children } = config;
-  const result: any = [...tree];
-  for (let i = 0; i < result.length; i++) {
-    if (!result[i][children!]) continue;
-    result.splice(i + 1, 0, ...result[i][children!]);
-  }
-  return result;
-}
-
-export function findNode<T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T | null {
-  config = getConfig(config);
-  const { children } = config;
-  const list = [...tree];
-  for (const node of list) {
-    if (func(node)) return node;
-    node[children!] && list.push(...node[children!]);
-  }
-  return null;
-}
-
-export function findNodeAll<T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T[] {
-  config = getConfig(config);
-  const { children } = config;
-  const list = [...tree];
-  const result: T[] = [];
-  for (const node of list) {
-    func(node) && result.push(node);
-    node[children!] && list.push(...node[children!]);
-  }
-  return result;
-}
-
-export function findPath<T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T | T[] | null {
-  config = getConfig(config);
-  const path: T[] = [];
-  const list = [...tree];
-  const visitedSet = new Set();
-  const { children } = config;
-  while (list.length) {
-    const node = list[0];
-    if (visitedSet.has(node)) {
-      path.pop();
-      list.shift();
-    } else {
-      visitedSet.add(node);
-      node[children!] && list.unshift(...node[children!]);
-      path.push(node);
-      if (func(node)) {
-        return path;
-      }
-    }
-  }
-  return null;
-}
-
-export function findPathAll(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}) {
-  config = getConfig(config);
-  const path: any[] = [];
-  const list = [...tree];
-  const result: any[] = [];
-  const visitedSet = new Set(),
-    { children } = config;
-  while (list.length) {
-    const node = list[0];
-    if (visitedSet.has(node)) {
-      path.pop();
-      list.shift();
-    } else {
-      visitedSet.add(node);
-      node[children!] && list.unshift(...node[children!]);
-      path.push(node);
-      func(node) && result.push([...path]);
-    }
-  }
-  return result;
-}
-
-export function filter<T = any>(
-  tree: T[],
-  func: (n: T) => boolean,
-  // Partial 灏� T 涓殑鎵�鏈夊睘鎬ц涓哄彲閫�
-  config: Partial<TreeHelperConfig> = {}
-): T[] {
-  // 鑾峰彇閰嶇疆
-  config = getConfig(config);
-  const children = config.children as string;
-
-  function listFilter(list: T[]) {
-    return list
-      .map((node: any) => ({ ...node }))
-      .filter((node) => {
-        // 閫掑綊璋冪敤 瀵瑰惈鏈塩hildren椤�  杩涜鍐嶆璋冪敤鑷韩鍑芥暟 listFilter
-        node[children] = node[children] && listFilter(node[children]);
-        // 鎵ц浼犲叆鐨勫洖璋� func 杩涜杩囨护
-        return func(node) || (node[children] && node[children].length);
-      });
-  }
-
-  return listFilter(tree);
-}
-
-export function forEach<T = any>(tree: T[], func: (n: T) => any, config: Partial<TreeHelperConfig> = {}): void {
-  config = getConfig(config);
-  const list: any[] = [...tree];
-  const { children } = config;
-  for (let i = 0; i < list.length; i++) {
-    //func 杩斿洖true灏辩粓姝㈤亶鍘嗭紝閬垮厤澶ч噺鑺傜偣鍦烘櫙涓嬫棤鎰忎箟寰幆锛屽紩璧锋祻瑙堝櫒鍗¢】
-    if (func(list[i])) {
-      return;
-    }
-    children && list[i][children] && list.splice(i + 1, 0, ...list[i][children]);
-  }
-}
-
-/**
- * @description: Extract tree specified structure
- * @description: 鎻愬彇鏍戞寚瀹氱粨鏋�
- */
-export function treeMap<T = any>(treeData: T[], opt: { children?: string; conversion: Fn }): T[] {
-  return treeData.map((item) => treeMapEach(item, opt));
-}
-
-/**
- * @description: Extract tree specified structure
- * @description: 鎻愬彇鏍戞寚瀹氱粨鏋�
- */
-export function treeMapEach(data: any, { children = 'children', conversion }: { children?: string; conversion: Fn }) {
-  const haveChildren = Array.isArray(data[children]) && data[children].length > 0;
-  const conversionData = conversion(data) || {};
-  if (haveChildren) {
-    return {
-      ...conversionData,
-      [children]: data[children].map((i: number) =>
-        treeMapEach(i, {
-          children,
-          conversion,
-        })
-      ),
-    };
-  } else {
-    return {
-      ...conversionData,
-    };
-  }
-}
-
-/**
- * 閫掑綊閬嶅巻鏍戠粨鏋�
- * @param treeDatas 鏍�
- * @param callBack 鍥炶皟
- * @param parentNode 鐖惰妭鐐�
- */
-export function eachTree(treeDatas: any[], callBack: Fn, parentNode = {}) {
-  treeDatas.forEach((element) => {
-    const newNode = callBack(element, parentNode) || element;
-    if (element.children) {
-      eachTree(element.children, callBack, newNode);
-    }
-  });
-}
diff --git a/src/utils/helper/tsxHelper.tsx b/src/utils/helper/tsxHelper.tsx
deleted file mode 100644
index 46e0001..0000000
--- a/src/utils/helper/tsxHelper.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { Slots } from 'vue';
-import { isFunction } from '/@/utils/is';
-
-/**
- * @description:  Get slot to prevent empty error
- */
-export function getSlot(slots: Slots, slot = 'default', data?: any) {
-  if (!slots || !Reflect.has(slots, slot)) {
-    return null;
-  }
-  if (!isFunction(slots[slot])) {
-    console.error(`${slot} is not a function!`);
-    return null;
-  }
-  const slotFn = slots[slot];
-  if (!slotFn) return null;
-  return slotFn(data);
-}
-
-/**
- * extends slots
- * @param slots
- * @param excludeKeys
- */
-export function extendSlots(slots: Slots, excludeKeys: string[] = []) {
-  const slotKeys = Object.keys(slots);
-  const ret: any = {};
-  slotKeys.map((key) => {
-    if (excludeKeys.includes(key)) {
-      return null;
-    }
-    ret[key] = () => getSlot(slots, key);
-  });
-  return ret;
-}
diff --git a/src/utils/helper/validator.ts b/src/utils/helper/validator.ts
deleted file mode 100644
index de8a4bb..0000000
--- a/src/utils/helper/validator.ts
+++ /dev/null
@@ -1,155 +0,0 @@
-import { dateUtil } from '/@/utils/dateUtil';
-import { duplicateCheck } from '/@/views/system/user/user.api';
-
-export const rules = {
-  rule(type, required) {
-    if (type === 'email') {
-      return this.email(required);
-    }
-    if (type === 'phone') {
-      return this.phone(required);
-    }
-  },
-  email(required) {
-    return [
-      {
-        required: required ? required : false,
-        validator: async (_rule, value) => {
-          if (required == true && !value) {
-            return Promise.reject('璇疯緭鍏ラ偖绠�!');
-          }
-          if (
-            value &&
-            !new RegExp(
-              /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
-            ).test(value)
-          ) {
-            return Promise.reject('璇疯緭鍏ユ纭偖绠辨牸寮�!');
-          }
-          return Promise.resolve();
-        },
-        trigger: 'change',
-      },
-    ] as ArrayRule;
-  },
-  phone(required) {
-    return [
-      {
-        required: required,
-        validator: async (_, value) => {
-          if (required && !value) {
-            return Promise.reject('璇疯緭鍏ユ墜鏈哄彿鐮�1!');
-          }
-          if (!/^1[3456789]\d{9}$/.test(value)) {
-            return Promise.reject('鎵嬫満鍙风爜鏍煎紡鏈夎');
-          }
-          return Promise.resolve();
-        },
-        trigger: 'change',
-      },
-    ];
-  },
-  startTime(endTime, required) {
-    return [
-      {
-        required: required ? required : false,
-        validator: (_, value) => {
-          if (required && !value) {
-            return Promise.reject('璇烽�夋嫨寮�濮嬫椂闂�');
-          }
-          if (endTime && value && dateUtil(endTime).isBefore(value)) {
-            return Promise.reject('寮�濮嬫椂闂撮渶灏忎簬缁撴潫鏃堕棿');
-          }
-          return Promise.resolve();
-        },
-        trigger: 'change',
-      },
-    ];
-  },
-  endTime(startTime, required) {
-    return [
-      {
-        required: required ? required : false,
-        validator: (_, value) => {
-          if (required && !value) {
-            return Promise.reject('璇烽�夋嫨缁撴潫鏃堕棿');
-          }
-          if (startTime && value && dateUtil(value).isBefore(startTime)) {
-            return Promise.reject('缁撴潫鏃堕棿闇�澶т簬寮�濮嬫椂闂�');
-          }
-          return Promise.resolve();
-        },
-        trigger: 'change',
-      },
-    ];
-  },
-  confirmPassword(values, required) {
-    return [
-      {
-        required: required ? required : false,
-        validator: (_, value) => {
-          if (!value) {
-            return Promise.reject('瀵嗙爜涓嶈兘涓虹┖');
-          }
-          if (value !== values.password) {
-            return Promise.reject('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�!');
-          }
-          return Promise.resolve();
-        },
-      },
-    ];
-  },
-  duplicateCheckRule(tableName, fieldName, model, schema, required?) {
-    return [
-      {
-        validator: (_, value) => {
-          if (!value && required) {
-            return Promise.reject(`璇疯緭鍏�${schema.label}`);
-          }
-          return new Promise<void>((resolve, reject) => {
-            duplicateCheck({
-              tableName,
-              fieldName,
-              fieldVal: value,
-              dataId: model.id,
-            })
-              .then((res) => {
-                res.success ? resolve() : reject(res.message || '鏍¢獙澶辫触');
-              })
-              .catch((err) => {
-                reject(err.message || '楠岃瘉澶辫触');
-              });
-          });
-        },
-      },
-    ] as ArrayRule;
-  },
-};
-
-//update-begin-author:taoyan date:2022-6-16 for: 浠g爜鐢熸垚-鍘熺敓琛ㄥ崟鐢�
-/**
- * 鍞竴鏍¢獙鍑芥暟锛岀粰鍘熺敓<a-form>浣跨敤锛寁ben鐨勮〃鍗曟牎楠屽缓璁娇鐢ㄤ笂杩皉ules
- * @param tableName 琛ㄥ悕
- * @param fieldName 瀛楁鍚�
- * @param fieldVal 瀛楁鍊�
- * @param dataId 鏁版嵁ID
- */
-export async function duplicateValidate(tableName, fieldName, fieldVal, dataId) {
-  try {
-    let params = {
-      tableName,
-      fieldName,
-      fieldVal,
-      dataId: dataId,
-    };
-    const res = await duplicateCheck(params);
-    if (res.success) {
-      return Promise.resolve();
-    } else {
-      return Promise.reject(res.message || '鏍¢獙澶辫触');
-    }
-  } catch (e) {
-    return Promise.reject('鏍¢獙澶辫触,鍙兘鏄柇缃戠瓑闂瀵艰嚧鐨勬牎楠屽け璐�');
-  }
-}
-//update-end-author:taoyan date:2022-6-16 for: 浠g爜鐢熸垚-鍘熺敓琛ㄥ崟鐢�
diff --git a/src/utils/http/axios/Axios.ts b/src/utils/http/axios/Axios.ts
deleted file mode 100644
index 5e08b1b..0000000
--- a/src/utils/http/axios/Axios.ts
+++ /dev/null
@@ -1,270 +0,0 @@
-import type { AxiosRequestConfig, AxiosInstance, AxiosResponse, AxiosError } from 'axios';
-import type { RequestOptions, Result, UploadFileParams, UploadFileCallBack } from '/#/axios';
-import type { CreateAxiosOptions } from './axiosTransform';
-import axios from 'axios';
-import qs from 'qs';
-import { AxiosCanceler } from './axiosCancel';
-import { isFunction } from '/@/utils/is';
-import { cloneDeep } from 'lodash-es';
-import { ContentTypeEnum } from '/@/enums/httpEnum';
-import { RequestEnum } from '/@/enums/httpEnum';
-import { useGlobSetting } from '/@/hooks/setting';
-import { useMessage } from '/@/hooks/web/useMessage';
-
-const { createMessage } = useMessage();
-export * from './axiosTransform';
-
-/**
- * @description:  axios module
- */
-export class VAxios {
-  private axiosInstance: AxiosInstance;
-  private readonly options: CreateAxiosOptions;
-
-  constructor(options: CreateAxiosOptions) {
-    this.options = options;
-    this.axiosInstance = axios.create(options);
-    this.setupInterceptors();
-  }
- 
-  /**
-   * @description:  Create axios instance
-   */
-  private createAxios(config: CreateAxiosOptions): void {
-    this.axiosInstance = axios.create(config);
-  }
-
-  private getTransform() {
-    const { transform } = this.options;
-    return transform;
-  }
-
-  getAxios(): AxiosInstance {
-    return this.axiosInstance;
-  }
-
-  /**
-   * @description: Reconfigure axios
-   */
-  configAxios(config: CreateAxiosOptions) {
-    if (!this.axiosInstance) {
-      return;
-    }
-    this.createAxios(config);
-  }
-
-  /**
-   * @description: Set general header
-   */
-  setHeader(headers: any): void {
-    if (!this.axiosInstance) {
-      return;
-    }
-    Object.assign(this.axiosInstance.defaults.headers, headers);
-  }
-
-  /**
-   * @description: Interceptor configuration
-   */
-  private setupInterceptors() {
-    const transform = this.getTransform();
-    if (!transform) {
-      return;
-    }
-    const { requestInterceptors, requestInterceptorsCatch, responseInterceptors, responseInterceptorsCatch } = transform;
-
-    const axiosCanceler = new AxiosCanceler();
-
-    // 璇锋眰渚﹀惉鍣ㄩ厤缃鐞�
-    this.axiosInstance.interceptors.request.use((config: AxiosRequestConfig) => {
-      // If cancel repeat request is turned on, then cancel repeat request is prohibited
-      // @ts-ignore
-      const { ignoreCancelToken } = config.requestOptions;
-
-      const ignoreCancel = ignoreCancelToken !== undefined ? ignoreCancelToken : this.options.requestOptions?.ignoreCancelToken;
-
-      !ignoreCancel && axiosCanceler.addPending(config);
-      if (requestInterceptors && isFunction(requestInterceptors)) {
-        config = requestInterceptors(config, this.options);
-      }
-      return config;
-    }, undefined);
-
-    // 璇锋眰鎷︽埅鍣ㄩ敊璇崟鑾�
-    requestInterceptorsCatch &&
-      isFunction(requestInterceptorsCatch) &&
-      this.axiosInstance.interceptors.request.use(undefined, requestInterceptorsCatch);
-
-    // 鍝嶅簲缁撴灉鎷︽埅鍣ㄥ鐞�
-    this.axiosInstance.interceptors.response.use((res: AxiosResponse<any>) => {
-      res && axiosCanceler.removePending(res.config);
-      if (responseInterceptors && isFunction(responseInterceptors)) {
-        res = responseInterceptors(res);
-      }
-      return res;
-    }, undefined);
-
-    // 鍝嶅簲缁撴灉鎷︽埅鍣ㄩ敊璇崟鑾�
-    responseInterceptorsCatch &&
-      isFunction(responseInterceptorsCatch) &&
-      this.axiosInstance.interceptors.response.use(undefined, responseInterceptorsCatch);
-  }
-
-  /**
-   * 鏂囦欢涓婁紶
-   */
-  //--@updateBy-begin----author:liusq---date:20211117------for:澧炲姞涓婁紶鍥炶皟鍙傛暟callback------
-  uploadFile<T = any>(config: AxiosRequestConfig, params: UploadFileParams, callback?: UploadFileCallBack) {
-    //--@updateBy-end----author:liusq---date:20211117------for:澧炲姞涓婁紶鍥炶皟鍙傛暟callback------
-    const formData = new window.FormData();
-    const customFilename = params.name || 'file';
-
-    if (params.filename) {
-      formData.append(customFilename, params.file, params.filename);
-    } else {
-      formData.append(customFilename, params.file);
-    }
-    const glob = useGlobSetting();
-    config.baseURL = glob.uploadUrl;
-    if (params.data) {
-      Object.keys(params.data).forEach((key) => {
-        const value = params.data![key];
-        if (Array.isArray(value)) {
-          value.forEach((item) => {
-            formData.append(`${key}[]`, item);
-          });
-          return;
-        }
-
-        formData.append(key, params.data[key]);
-      });
-    }
-
-    return this.axiosInstance
-      .request<T>({
-        ...config,
-        method: 'POST',
-        data: formData,
-        headers: {
-          'Content-type': ContentTypeEnum.FORM_DATA,
-          ignoreCancelToken: true,
-        },
-      })
-      .then((res: any) => {
-        //--@updateBy-begin----author:liusq---date:20210914------for:涓婁紶鍒ゆ柇鏄惁鍖呭惈鍥炶皟鏂规硶------
-        if (callback?.success && isFunction(callback?.success)) {
-          callback?.success(res?.data);
-          //--@updateBy-end----author:liusq---date:20210914------for:涓婁紶鍒ゆ柇鏄惁鍖呭惈鍥炶皟鏂规硶------
-        } else if (callback?.isReturnResponse) {
-          //--@updateBy-begin----author:liusq---date:20211117------for:涓婁紶鍒ゆ柇鏄惁杩斿洖res淇℃伅------
-          return Promise.resolve(res?.data);
-          //--@updateBy-end----author:liusq---date:20211117------for:涓婁紶鍒ゆ柇鏄惁杩斿洖res淇℃伅------
-        } else {
-          if (res.data.success == true && res.data.code == 200) {
-            createMessage.success(res.data.message);
-          } else {
-            createMessage.error(res.data.message);
-          }
-        }
-      });
-  }
-
-  // 鏀寔琛ㄥ崟鏁版嵁
-  supportFormData(config: AxiosRequestConfig) {
-    const headers = config.headers || this.options.headers;
-    const contentType = headers?.['Content-Type'] || headers?.['content-type'];
-
-    if (contentType !== ContentTypeEnum.FORM_URLENCODED || !Reflect.has(config, 'data') || config.method?.toUpperCase() === RequestEnum.GET) {
-      return config;
-    }
-
-    return {
-      ...config,
-      data: qs.stringify(config.data, { arrayFormat: 'brackets' }),
-    };
-  }
-
-  get<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> {
-    return this.request({ ...config, method: 'GET' }, options);
-  }
-
-  post<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> {
-    return this.request({ ...config, method: 'POST' }, options);
-  }
-
-  put<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> {
-    return this.request({ ...config, method: 'PUT' }, options);
-  }
-
-  delete<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> {
-    return this.request({ ...config, method: 'DELETE' }, options);
-  }
-
-  request<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> {
-    let conf: CreateAxiosOptions = cloneDeep(config);
-    const transform = this.getTransform();
-
-    const { requestOptions } = this.options;
-
-    const opt: RequestOptions = Object.assign({}, requestOptions, options);
-
-    const { beforeRequestHook, requestCatchHook, transformRequestHook } = transform || {};
-    if (beforeRequestHook && isFunction(beforeRequestHook)) {
-      conf = beforeRequestHook(conf, opt);
-    }
-    conf.requestOptions = opt;
-
-    conf = this.supportFormData(conf);
-
-    return new Promise((resolve, reject) => {
-      this.axiosInstance
-        .request<any, AxiosResponse<Result>>(conf)
-        .then((res: AxiosResponse<Result>) => {
-          if (transformRequestHook && isFunction(transformRequestHook)) {
-            try {
-              const ret = transformRequestHook(res, opt);
-              //zhangyafei---娣诲姞鍥炶皟鏂规硶
-              config.success && config.success(res.data);
-              //zhangyafei---娣诲姞鍥炶皟鏂规硶
-              resolve(ret);
-            } catch (err) {
-              reject(err || new Error('request error!'));
-            }
-            return;
-          }
-          resolve(res as unknown as Promise<T>);
-        })
-        .catch((e: Error | AxiosError) => {
-          if (requestCatchHook && isFunction(requestCatchHook)) {
-            reject(requestCatchHook(e, opt));
-            return;
-          }
-          if (axios.isAxiosError(e)) {
-            // 鍦ㄦ澶勯噸鍐欐潵鑷猘xios鐨勯敊璇秷鎭�
-          }
-          reject(e);
-        });
-    });
-  }
-
-
-  /**
-   * 銆愮敤浜庤瘎璁哄姛鑳姐�戣嚜瀹氫箟鏂囦欢涓婁紶-璇锋眰
-   * @param url
-   * @param formData
-   */
-  uploadMyFile<T = any>(url, formData) {
-    const glob = useGlobSetting();
-    return this.axiosInstance
-      .request<T>({
-        url: url,
-        baseURL: glob.uploadUrl,
-        method: 'POST',
-        data: formData,
-        headers: {
-          'Content-type': ContentTypeEnum.FORM_DATA,
-          ignoreCancelToken: true,
-        },
-      });
-  }
-}
diff --git a/src/utils/http/axios/axiosCancel.ts b/src/utils/http/axios/axiosCancel.ts
deleted file mode 100644
index 081233e..0000000
--- a/src/utils/http/axios/axiosCancel.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import type { AxiosRequestConfig, Canceler } from 'axios';
-import axios from 'axios';
-import { isFunction } from '/@/utils/is';
-
-// Used to store the identification and cancellation function of each request
-let pendingMap = new Map<string, Canceler>();
-
-export const getPendingUrl = (config: AxiosRequestConfig) => [config.method, config.url].join('&');
-
-export class AxiosCanceler {
-  /**
-   * Add request
-   * @param {Object} config
-   */
-  addPending(config: AxiosRequestConfig) {
-    this.removePending(config);
-    const url = getPendingUrl(config);
-    config.cancelToken =
-      config.cancelToken ||
-      new axios.CancelToken((cancel) => {
-        if (!pendingMap.has(url)) {
-          // If there is no current request in pending, add it
-          pendingMap.set(url, cancel);
-        }
-      });
-  }
-
-  /**
-   * @description: Clear all pending
-   */
-  removeAllPending() {
-    pendingMap.forEach((cancel) => {
-      cancel && isFunction(cancel) && cancel();
-    });
-    pendingMap.clear();
-  }
-
-  /**
-   * Removal request
-   * @param {Object} config
-   */
-  removePending(config: AxiosRequestConfig) {
-    const url = getPendingUrl(config);
-
-    if (pendingMap.has(url)) {
-      // If there is a current request identifier in pending,
-      // the current request needs to be cancelled and removed
-      const cancel = pendingMap.get(url);
-      cancel && cancel(url);
-      pendingMap.delete(url);
-    }
-  }
-
-  /**
-   * @description: reset
-   */
-  reset(): void {
-    pendingMap = new Map<string, Canceler>();
-  }
-}
diff --git a/src/utils/http/axios/axiosTransform.ts b/src/utils/http/axios/axiosTransform.ts
deleted file mode 100644
index 141ac5a..0000000
--- a/src/utils/http/axios/axiosTransform.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Data processing class, can be configured according to the project
- */
-import type { AxiosRequestConfig, AxiosResponse } from 'axios';
-import type { RequestOptions, Result } from '/#/axios';
-
-export interface CreateAxiosOptions extends AxiosRequestConfig {
-  authenticationScheme?: string;
-  transform?: AxiosTransform;
-  requestOptions?: RequestOptions;
-}
-
-export abstract class AxiosTransform {
-  /**
-   * @description: Process configuration before request
-   * @description: Process configuration before request
-   */
-  beforeRequestHook?: (config: AxiosRequestConfig, options: RequestOptions) => AxiosRequestConfig;
-
-  /**
-   * @description: Request successfully processed
-   */
-  transformRequestHook?: (res: AxiosResponse<Result>, options: RequestOptions) => any;
-
-  /**
-   * @description: 璇锋眰澶辫触澶勭悊
-   */
-  requestCatchHook?: (e: Error, options: RequestOptions) => Promise<any>;
-
-  /**
-   * @description: 璇锋眰涔嬪墠鐨勬嫤鎴櫒
-   */
-  requestInterceptors?: (config: AxiosRequestConfig, options: CreateAxiosOptions) => AxiosRequestConfig;
-
-  /**
-   * @description: 璇锋眰涔嬪悗鐨勬嫤鎴櫒
-   */
-  responseInterceptors?: (res: AxiosResponse<any>) => AxiosResponse<any>;
-
-  /**
-   * @description: 璇锋眰涔嬪墠鐨勬嫤鎴櫒閿欒澶勭悊
-   */
-  requestInterceptorsCatch?: (error: Error) => void;
-
-  /**
-   * @description: 璇锋眰涔嬪悗鐨勬嫤鎴櫒閿欒澶勭悊
-   */
-  responseInterceptorsCatch?: (error: Error) => void;
-}
diff --git a/src/utils/http/axios/checkStatus.ts b/src/utils/http/axios/checkStatus.ts
deleted file mode 100644
index fc292e3..0000000
--- a/src/utils/http/axios/checkStatus.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import type { ErrorMessageMode } from '/#/axios';
-import { useMessage } from '/@/hooks/web/useMessage';
-import { useI18n } from '/@/hooks/web/useI18n';
-// import router from '/@/router';
-// import { PageEnum } from '/@/enums/pageEnum';
-import { useUserStoreWithOut } from '/@/store/modules/user';
-import projectSetting from '/@/settings/projectSetting';
-import { SessionTimeoutProcessingEnum } from '/@/enums/appEnum';
-
-const { createMessage, createErrorModal } = useMessage();
-const error = createMessage.error!;
-const stp = projectSetting.sessionTimeoutProcessing;
-
-export function checkStatus(status: number, msg: string, errorMessageMode: ErrorMessageMode = 'message'): void {
-  const { t } = useI18n();
-  const userStore = useUserStoreWithOut();
-  let errMessage = '';
-
-  switch (status) {
-    case 400:
-      errMessage = `${msg}`;
-      break;
-    // 401: Not logged in
-    // Jump to the login page if not logged in, and carry the path of the current page
-    // Return to the current page after successful login. This step needs to be operated on the login page.
-    case 401:
-      userStore.setToken(undefined);
-      errMessage = msg || t('sys.api.errMsg401');
-      if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) {
-        userStore.setSessionTimeout(true);
-      } else {
-        userStore.logout(true);
-      }
-      break;
-    case 403:
-      errMessage = t('sys.api.errMsg403');
-      break;
-    // 404璇锋眰涓嶅瓨鍦�
-    case 404:
-      errMessage = t('sys.api.errMsg404');
-      break;
-    case 405:
-      errMessage = t('sys.api.errMsg405');
-      break;
-    case 408:
-      errMessage = t('sys.api.errMsg408');
-      break;
-    case 500:
-      errMessage = t('sys.api.errMsg500');
-      break;
-    case 501:
-      errMessage = t('sys.api.errMsg501');
-      break;
-    case 502:
-      errMessage = t('sys.api.errMsg502');
-      break;
-    case 503:
-      errMessage = t('sys.api.errMsg503');
-      break;
-    case 504:
-      errMessage = t('sys.api.errMsg504');
-      break;
-    case 505:
-      errMessage = t('sys.api.errMsg505');
-      break;
-    default:
-  }
-
-  if (errMessage) {
-    if (errorMessageMode === 'modal') {
-      createErrorModal({ title: t('sys.api.errorTip'), content: errMessage });
-    } else if (errorMessageMode === 'message') {
-      error({ content: errMessage, key: `global_error_message_status_${status}` });
-    }
-  }
-}
diff --git a/src/utils/http/axios/helper.ts b/src/utils/http/axios/helper.ts
deleted file mode 100644
index 22b64ea..0000000
--- a/src/utils/http/axios/helper.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { isObject, isString } from '/@/utils/is';
-import dayjs from "dayjs";
-
-const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm';
-
-export function joinTimestamp<T extends boolean>(join: boolean, restful: T): T extends true ? string : object;
-
-export function joinTimestamp(join: boolean, restful = false): string | object {
-  if (!join) {
-    return restful ? '' : {};
-  }
-  const now = new Date().getTime();
-  if (restful) {
-    return `?_t=${now}`;
-  }
-  return { _t: now };
-}
-
-/**
- * @description: Format request parameter time
- */
-export function formatRequestDate(params: Recordable) {
-  if (Object.prototype.toString.call(params) !== '[object Object]') {
-    return;
-  }
-
-  for (const key in params) {
-    // 鍒ゆ柇鏄惁鏄痙ayjs瀹炰緥
-    if (dayjs.isDayjs(params[key])) {
-      params[key] = params[key].format(DATE_TIME_FORMAT);
-    }
-    if (isString(key)) {
-      const value = params[key];
-      if (value) {
-        try {
-          params[key] = isString(value) ? value.trim() : value;
-        } catch (error) {
-          throw new Error(error);
-        }
-      }
-    }
-    if (isObject(params[key])) {
-      formatRequestDate(params[key]);
-    }
-  }
-}
diff --git a/src/utils/http/axios/index.ts b/src/utils/http/axios/index.ts
deleted file mode 100644
index 113ae24..0000000
--- a/src/utils/http/axios/index.ts
+++ /dev/null
@@ -1,288 +0,0 @@
-// axios閰嶇疆  鍙嚜琛屾牴鎹」鐩繘琛屾洿鏀癸紝鍙渶鏇存敼璇ユ枃浠跺嵆鍙紝鍏朵粬鏂囦欢鍙互涓嶅姩
-// The axios configuration can be changed according to the project, just change the file, other files can be left unchanged
-
-import type { AxiosResponse } from 'axios'
-import { VAxios } from './Axios'
-import type { AxiosTransform, CreateAxiosOptions } from './axiosTransform'
-import { checkStatus } from './checkStatus'
-import { formatRequestDate, joinTimestamp } from './helper'
-import type { RequestOptions, Result } from '/#/axios'
-import { ConfigEnum, ContentTypeEnum, RequestEnum, ResultEnum } from '/@/enums/httpEnum'
-import { useGlobSetting } from '/@/hooks/setting'
-import { useI18n } from '/@/hooks/web/useI18n'
-import { useMessage } from '/@/hooks/web/useMessage'
-import { router } from '/@/router'
-import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog'
-import { useUserStoreWithOut } from '/@/store/modules/user'
-import { deepMerge, setObjToUrlParams } from '/@/utils'
-import { getTenantId, getToken } from '/@/utils/auth'
-import signMd5Utils from '/@/utils/encryption/signMd5Utils'
-import { isString } from '/@/utils/is'
-const globSetting = useGlobSetting()
-const urlPrefix = globSetting.urlPrefix
-const { createMessage, createErrorModal } = useMessage()
-
-/**
- * @description: 鏁版嵁澶勭悊锛屾柟渚垮尯鍒嗗绉嶅鐞嗘柟寮�
- */
-const transform: AxiosTransform = {
-	/**
-	 * @description: 澶勭悊璇锋眰鏁版嵁銆傚鏋滄暟鎹笉鏄鏈熸牸寮忥紝鍙洿鎺ユ姏鍑洪敊璇�
-	 */
-	transformRequestHook: (res: AxiosResponse<Result>, options: RequestOptions) => {
-		//console.log(`output->res`, res)
-		//console.log(`output->options`, options)
-		const { t } = useI18n()
-		const { isTransformResponse, isReturnNativeResponse } = options
-		// 鏄惁杩斿洖鍘熺敓鍝嶅簲澶� 姣斿锛氶渶瑕佽幏鍙栧搷搴斿ご鏃朵娇鐢ㄨ灞炴��
-		if (isReturnNativeResponse) {
-			return res
-		}
-		// 涓嶈繘琛屼换浣曞鐞嗭紝鐩存帴杩斿洖
-		// 鐢ㄤ簬椤甸潰浠g爜鍙兘闇�瑕佺洿鎺ヨ幏鍙朿ode锛宒ata锛宮essage杩欎簺淇℃伅鏃跺紑鍚�
-		if (!isTransformResponse) {
-			return res.data
-		}
-		// 閿欒鐨勬椂鍊欒繑鍥�
-
-		const { data } = res
-		if (!data) {
-			// return '[HTTP] Request has no return value';
-			throw new Error(t('sys.api.apiRequestFailed'))
-		}
-		//  杩欓噷 code锛宺esult锛宮essage涓� 鍚庡彴缁熶竴鐨勫瓧娈碉紝闇�瑕佸湪 types.ts鍐呬慨鏀逛负椤圭洰鑷繁鐨勬帴鍙h繑鍥炴牸寮�
-		const { code, result, message, success } = data
-		// 杩欓噷閫昏緫鍙互鏍规嵁椤圭洰杩涜淇敼
-		const hasSuccess = data && Reflect.has(data, 'code') && (code === ResultEnum.SUCCESS || code === 200)
-		if (hasSuccess) {
-			if (success && message && options.successMessageMode === 'success') {
-				//淇℃伅鎴愬姛鎻愮ず
-				createMessage.success(message)
-			}
-			return result
-		}
-
-		// 鍦ㄦ澶勬牴鎹嚜宸遍」鐩殑瀹為檯鎯呭喌瀵逛笉鍚岀殑code鎵ц涓嶅悓鐨勬搷浣�
-		// 濡傛灉涓嶅笇鏈涗腑鏂綋鍓嶈姹傦紝璇穜eturn鏁版嵁锛屽惁鍒欑洿鎺ユ姏鍑哄紓甯稿嵆鍙�
-		let timeoutMsg = ''
-		switch (code) {
-			case ResultEnum.TIMEOUT:
-				timeoutMsg = t('sys.api.timeoutMessage')
-				const userStore = useUserStoreWithOut()
-				userStore.setToken(undefined)
-				userStore.logout(true)
-				break
-			default:
-				if (message) {
-					timeoutMsg = message
-				}
-		}
-
-		// errorMessageMode=鈥榤odal鈥欑殑鏃跺�欎細鏄剧ずmodal閿欒寮圭獥锛岃�屼笉鏄秷鎭彁绀猴紝鐢ㄤ簬涓�浜涙瘮杈冮噸瑕佺殑閿欒
-		// errorMessageMode='none' 涓�鑸槸璋冪敤鏃舵槑纭〃绀轰笉甯屾湜鑷姩寮瑰嚭閿欒鎻愮ず
-		if (options.errorMessageMode === 'modal') {
-			createErrorModal({ title: t('sys.api.errorTip'), content: timeoutMsg })
-		} else if (options.errorMessageMode === 'message') {
-			createMessage.error(timeoutMsg)
-		}
-
-		throw new Error(timeoutMsg || t('sys.api.apiRequestFailed'))
-	},
-
-	// 璇锋眰涔嬪墠澶勭悊config
-	beforeRequestHook: (config, options) => {
-		const { apiUrl, joinPrefix, joinParamsToUrl, formatDate, joinTime = true, urlPrefix } = options
-
-		if (joinPrefix) {
-			config.url = `${urlPrefix}${config.url}`
-		}
-
-		if (apiUrl && isString(apiUrl)) {
-			config.url = `${apiUrl}${config.url}`
-		}
-		const params = config.params || {}
-		const data = config.data || false
-		formatDate && data && !isString(data) && formatRequestDate(data)
-		if (config.method?.toUpperCase() === RequestEnum.GET) {
-			if (!isString(params)) {
-				// 缁� get 璇锋眰鍔犱笂鏃堕棿鎴冲弬鏁帮紝閬垮厤浠庣紦瀛樹腑鎷挎暟鎹��
-				config.params = Object.assign(params || {}, joinTimestamp(joinTime, false))
-			} else {
-				// 鍏煎restful椋庢牸
-				config.url = config.url + params + `${joinTimestamp(joinTime, true)}`
-				config.params = undefined
-			}
-		} else {
-			if (!isString(params)) {
-				formatDate && formatRequestDate(params)
-				if (Reflect.has(config, 'data') && config.data && Object.keys(config.data).length > 0) {
-					config.data = data
-					config.params = params
-				} else {
-					// 闈濭ET璇锋眰濡傛灉娌℃湁鎻愪緵data锛屽垯灏唒arams瑙嗕负data
-					config.data = params
-					config.params = undefined
-				}
-				if (joinParamsToUrl) {
-					config.url = setObjToUrlParams(config.url as string, Object.assign({}, config.params, config.data))
-				}
-			} else {
-				// 鍏煎restful椋庢牸
-				config.url = config.url + params
-				config.params = undefined
-			}
-		}
-		return config
-	},
-
-	/**
-	 * @description: 璇锋眰鎷︽埅鍣ㄥ鐞�
-	 */
-	requestInterceptors: (config: Recordable, options) => {
-		// console.log(`output->config`, config);
-		// 璇锋眰涔嬪墠澶勭悊config
-		const token = getToken()
-		let tenantid = getTenantId()
-		//--update-begin--author:liusq---date:20220325---for: 澧炲姞vue3鏍囪
-		config.headers[ConfigEnum.VERSION] = 'v3'
-		//--update-end--author:liusq---date:20220325---for:澧炲姞vue3鏍囪
-		if (token && (config as Recordable)?.requestOptions?.withToken !== false) {
-			// jwt token
-			config.headers.Authorization = options.authenticationScheme ? `${options.authenticationScheme} ${token}` : token
-			config.headers[ConfigEnum.TOKEN] = token
-			//--update-begin--author:liusq---date:20210831---for:灏嗙鍚嶅拰鏃堕棿鎴筹紝娣诲姞鍦ㄨ姹傛帴鍙� Header
-
-			// update-begin--author:taoyan---date:20220421--for: VUEN-410銆愮鍚嶆敼閫犮�� X-TIMESTAMP鐗垫壇
-			config.headers[ConfigEnum.TIMESTAMP] = signMd5Utils.getTimestamp()
-			// update-end--author:taoyan---date:20220421--for: VUEN-410銆愮鍚嶆敼閫犮�� X-TIMESTAMP鐗垫壇
-
-			config.headers[ConfigEnum.Sign] = signMd5Utils.getSign(config.url, config.params)
-			//--update-end--author:liusq---date:20210831---for:灏嗙鍚嶅拰鏃堕棿鎴筹紝娣诲姞鍦ㄨ姹傛帴鍙� Header
-			//--update-begin--author:liusq---date:20211105---for: for:灏嗗绉熸埛id锛屾坊鍔犲湪璇锋眰鎺ュ彛 Header
-			if (!tenantid) {
-				tenantid = '0'
-			}
-			config.headers[ConfigEnum.TENANT_ID] = tenantid
-
-			//--update-end--author:liusq---date:20211105---for:灏嗗绉熸埛id锛屾坊鍔犲湪璇锋眰鎺ュ彛 Header
-
-			// ========================================================================================
-			// update-begin--author:sunjianlei---date:20220624--for: 娣诲姞浣庝唬鐮佸簲鐢↖D
-			const routeParams = router.currentRoute.value.params
-			if (routeParams.appId) {
-				config.headers[ConfigEnum.X_LOW_APP_ID] = routeParams.appId
-				// lowApp鑷畾涔夌瓫閫夋潯浠�
-				if (routeParams.lowAppFilter) {
-					config.params = { ...config.params, ...JSON.parse(routeParams.lowAppFilter as string) }
-					delete routeParams.lowAppFilter
-				}
-			}
-			// update-end--author:sunjianlei---date:20220624--for: 娣诲姞浣庝唬鐮佸簲鐢↖D
-			// ========================================================================================
-		}
-		return config
-	},
-
-	/**
-	 * @description: 鍝嶅簲鎷︽埅鍣ㄥ鐞�
-	 */
-	responseInterceptors: (res: AxiosResponse<any>) => {
-		return res
-	},
-
-	/**
-	 * @description: 鍝嶅簲閿欒澶勭悊
-	 */
-	responseInterceptorsCatch: (error: any) => {
-		const { t } = useI18n()
-		const errorLogStore = useErrorLogStoreWithOut()
-		errorLogStore.addAjaxErrorInfo(error)
-		const { response, code, message, config } = error || {}
-		const errorMessageMode = config?.requestOptions?.errorMessageMode || 'none'
-		//scott 20211022 token澶辨晥鎻愮ず淇℃伅
-		//const msg: string = response?.data?.error?.message ?? '';
-		const msg: string = response?.data?.message ?? ''
-		const err: string = error?.toString?.() ?? ''
-		let errMessage = ''
-
-		try {
-			if (code === 'ECONNABORTED' && message.indexOf('timeout') !== -1) {
-				errMessage = t('sys.api.apiTimeoutMessage')
-			}
-			if (err?.includes('Network Error')) {
-				errMessage = t('sys.api.networkExceptionMsg')
-			}
-
-			if (errMessage) {
-				if (errorMessageMode === 'modal') {
-					createErrorModal({ title: t('sys.api.errorTip'), content: errMessage })
-				} else if (errorMessageMode === 'message') {
-					createMessage.error(errMessage)
-				}
-				return Promise.reject(error)
-			}
-		} catch (error) {
-			throw new Error(error)
-		}
-
-		checkStatus(error?.response?.status, msg, errorMessageMode)
-		return Promise.reject(error)
-	},
-}
-
-function createAxios(opt?: Partial<CreateAxiosOptions>) {
-	return new VAxios(
-		deepMerge(
-			{
-				// See https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes
-				// authentication schemes锛宔.g: Bearer
-				// authenticationScheme: 'Bearer',
-				authenticationScheme: '',
-				timeout: 10 * 1000,
-				// 鍩虹鎺ュ彛鍦板潃
-				// baseURL: globSetting.apiUrl,
-				headers: { 'Content-Type': ContentTypeEnum.JSON },
-				// 濡傛灉鏄痜orm-data鏍煎紡
-				// headers: { 'Content-Type': ContentTypeEnum.FORM_URLENCODED },
-				// 鏁版嵁澶勭悊鏂瑰紡
-				transform,
-				// 閰嶇疆椤癸紝涓嬮潰鐨勯�夐」閮藉彲浠ュ湪鐙珛鐨勬帴鍙h姹備腑瑕嗙洊
-				requestOptions: {
-					// 榛樿灏唒refix 娣诲姞鍒皍rl
-					joinPrefix: true,
-					// 鏄惁杩斿洖鍘熺敓鍝嶅簲澶� 姣斿锛氶渶瑕佽幏鍙栧搷搴斿ご鏃朵娇鐢ㄨ灞炴��
-					isReturnNativeResponse: false,
-					// 闇�瑕佸杩斿洖鏁版嵁杩涜澶勭悊
-					isTransformResponse: true,
-					// post璇锋眰鐨勬椂鍊欐坊鍔犲弬鏁板埌url
-					joinParamsToUrl: false,
-					// 鏍煎紡鍖栨彁浜ゅ弬鏁版椂闂�
-					formatDate: true,
-					// 寮傚父娑堟伅鎻愮ず绫诲瀷
-					errorMessageMode: 'message',
-					// 鎴愬姛娑堟伅鎻愮ず绫诲瀷
-					successMessageMode: 'success',
-					// 鎺ュ彛鍦板潃
-					apiUrl: globSetting.apiUrl,
-					// 鎺ュ彛鎷兼帴鍦板潃
-					urlPrefix: urlPrefix,
-					//  鏄惁鍔犲叆鏃堕棿鎴�
-					joinTime: true,
-					// 蹇界暐閲嶅璇锋眰
-					ignoreCancelToken: true,
-					// 鏄惁鎼哄甫token
-					withToken: true,
-				},
-			},
-			opt || {}
-		)
-	)
-}
-export const defHttp = createAxios()
-
-// other api url
-// export const otherHttp = createAxios({
-//   requestOptions: {
-//     apiUrl: 'xxx',
-//   },
-// });
diff --git a/src/utils/index.ts b/src/utils/index.ts
deleted file mode 100644
index 3db0fc2..0000000
--- a/src/utils/index.ts
+++ /dev/null
@@ -1,314 +0,0 @@
-import type { RouteLocationNormalized, RouteRecordNormalized } from 'vue-router';
-import type { App, Plugin } from 'vue';
-
-import { unref } from 'vue';
-import { isObject } from '/@/utils/is';
-
-// update-begin--author:sunjianlei---date:20220408---for: 銆怴UEN-656銆戦厤缃閮ㄧ綉鍧�鎵撲笉寮�锛屽師鍥犳槸甯︿簡#鍙凤紝闇�瑕佹浛鎹竴涓�
-export const URL_HASH_TAB = `__AGWE4H__HASH__TAG__PWHRG__`;
-// update-end--author:sunjianlei---date:20220408---for: 銆怴UEN-656銆戦厤缃閮ㄧ綉鍧�鎵撲笉寮�锛屽師鍥犳槸甯︿簡#鍙凤紝闇�瑕佹浛鎹竴涓�
-
-export const noop = () => {};
-
-/**
- * @description:  Set ui mount node
- */
-export function getPopupContainer(node?: HTMLElement): HTMLElement {
-  return (node?.parentNode as HTMLElement) ?? document.body;
-}
-
-/**
- * Add the object as a parameter to the URL
- * @param baseUrl url
- * @param obj
- * @returns {string}
- * eg:
- *  let obj = {a: '3', b: '4'}
- *  setObjToUrlParams('www.baidu.com', obj)
- *  ==>www.baidu.com?a=3&b=4
- */
-export function setObjToUrlParams(baseUrl: string, obj: any): string {
-  let parameters = '';
-  for (const key in obj) {
-    parameters += key + '=' + encodeURIComponent(obj[key]) + '&';
-  }
-  parameters = parameters.replace(/&$/, '');
-  return /\?$/.test(baseUrl) ? baseUrl + parameters : baseUrl.replace(/\/?$/, '?') + parameters;
-}
-
-export function deepMerge<T = any>(src: any = {}, target: any = {}): T {
-  let key: string;
-  for (key in target) {
-    src[key] = isObject(src[key]) ? deepMerge(src[key], target[key]) : (src[key] = target[key]);
-  }
-  return src;
-}
-
-export function openWindow(url: string, opt?: { target?: TargetContext | string; noopener?: boolean; noreferrer?: boolean }) {
-  const { target = '__blank', noopener = true, noreferrer = true } = opt || {};
-  const feature: string[] = [];
-
-  noopener && feature.push('noopener=yes');
-  noreferrer && feature.push('noreferrer=yes');
-
-  window.open(url, target, feature.join(','));
-}
-
-// dynamic use hook props
-export function getDynamicProps<T, U>(props: T): Partial<U> {
-  const ret: Recordable = {};
-
-  Object.keys(props).map((key) => {
-    ret[key] = unref((props as Recordable)[key]);
-  });
-
-  return ret as Partial<U>;
-}
-
-/**
- * 鑾峰彇琛ㄥ崟瀛楁鍊兼暟鎹被鍨�
- * @param props
- * @param field
- * @updateBy:zyf
- */
-export function getValueType(props, field) {
-  let formSchema = unref(unref(props)?.schemas);
-  let valueType = 'string';
-  if (formSchema) {
-    let schema = formSchema.filter((item) => item.field === field)[0];
-    valueType = schema.componentProps && schema.componentProps.valueType ? schema.componentProps.valueType : valueType;
-  }
-  return valueType;
-}
-export function getRawRoute(route: RouteLocationNormalized): RouteLocationNormalized {
-  if (!route) return route;
-  const { matched, ...opt } = route;
-  return {
-    ...opt,
-    matched: (matched
-      ? matched.map((item) => ({
-          meta: item.meta,
-          name: item.name,
-          path: item.path,
-        }))
-      : undefined) as RouteRecordNormalized[],
-  };
-}
-/**
- * 娣卞害鍏嬮殕瀵硅薄銆佹暟缁�
- * @param obj 琚厠闅嗙殑瀵硅薄
- * @return 鍏嬮殕鍚庣殑瀵硅薄
- */
-export function cloneObject(obj) {
-  return JSON.parse(JSON.stringify(obj));
-}
-
-export const withInstall = <T>(component: T, alias?: string) => {
-  const comp = component as any;
-  comp.install = (app: App) => {
-    app.component(comp.name || comp.displayName, component);
-    if (alias) {
-      app.config.globalProperties[alias] = component;
-    }
-  };
-  return component as T & Plugin;
-};
-
-/**
- * 鑾峰彇url鍦板潃鍙傛暟
- * @param paraName
- */
-export function getUrlParam(paraName) {
-  let url = document.location.toString();
-  let arrObj = url.split('?');
-
-  if (arrObj.length > 1) {
-    let arrPara = arrObj[1].split('&');
-    let arr;
-
-    for (let i = 0; i < arrPara.length; i++) {
-      arr = arrPara[i].split('=');
-
-      if (arr != null && arr[0] == paraName) {
-        return arr[1];
-      }
-    }
-    return '';
-  } else {
-    return '';
-  }
-}
-
-/**
- * 浼戠湢锛坰etTimeout鐨刾romise鐗堬級
- * @param ms 瑕佷紤鐪犵殑鏃堕棿锛屽崟浣嶏細姣
- * @param fn callback锛屽彲绌�
- * @return Promise
- */
-export function sleep(ms: number, fn?: Fn) {
-  return new Promise<void>((resolve) =>
-    setTimeout(() => {
-      fn && fn();
-      resolve();
-    }, ms)
-  );
-}
-
-/**
- * 涓嶇敤姝e垯鐨勬柟寮忔浛鎹㈡墍鏈夊��
- * @param text 琚浛鎹㈢殑瀛楃涓�
- * @param checker  鏇挎崲鍓嶇殑鍐呭
- * @param replacer 鏇挎崲鍚庣殑鍐呭
- * @returns {String} 鏇挎崲鍚庣殑瀛楃涓�
- */
-export function replaceAll(text, checker, replacer) {
-  let lastText = text;
-  text = text.replace(checker, replacer);
-  if (lastText !== text) {
-    return replaceAll(text, checker, replacer);
-  }
-  return text;
-}
-
-/**
- * 鑾峰彇URL涓婂弬鏁�
- * @param url
- */
-export function getQueryVariable(url) {
-  if (!url) return;
-
-  var t,
-    n,
-    r,
-    i = url.split('?')[1],
-    s = {};
-  (t = i.split('&')), (r = null), (n = null);
-  for (var o in t) {
-    var u = t[o].indexOf('=');
-    u !== -1 && ((r = t[o].substr(0, u)), (n = t[o].substr(u + 1)), (s[r] = n));
-  }
-  return s;
-}
-/**
- * 鍒ゆ柇鏄惁鏄剧ず鍔炵悊鎸夐挳
- * @param bpmStatus
- * @returns {*}
- */
-export function showDealBtn(bpmStatus) {
-  if (bpmStatus != '1' && bpmStatus != '3' && bpmStatus != '4') {
-    return true;
-  }
-  return false;
-}
-/**
- * 鏁板瓧杞ぇ鍐�
- * @param value
- * @returns {*}
- */
-export function numToUpper(value) {
-  if (value != '') {
-    let unit = new Array('浠�', '浣�', '鎷�', '', '浠�', '浣�', '鎷�', '', '瑙�', '鍒�');
-    const toDx = (n) => {
-      switch (n) {
-        case '0':
-          return '闆�';
-        case '1':
-          return '澹�';
-        case '2':
-          return '璐�';
-        case '3':
-          return '鍙�';
-        case '4':
-          return '鑲�';
-        case '5':
-          return '浼�';
-        case '6':
-          return '闄�';
-        case '7':
-          return '鏌�';
-        case '8':
-          return '鎹�';
-        case '9':
-          return '鐜�';
-      }
-    };
-    let lth = value.toString().length;
-    value *= 100;
-    value += '';
-    let length = value.length;
-    if (lth <= 8) {
-      let result = '';
-      for (let i = 0; i < length; i++) {
-        if (i == 2) {
-          result = '鍏�' + result;
-        } else if (i == 6) {
-          result = '涓�' + result;
-        }
-        if (value.charAt(length - i - 1) == 0) {
-          if (i != 0 && i != 1) {
-            if (result.charAt(0) != '闆�' && result.charAt(0) != '鍏�' && result.charAt(0) != '涓�') {
-              result = '闆�' + result;
-            }
-          }
-          continue;
-        }
-        result = toDx(value.charAt(length - i - 1)) + unit[unit.length - i - 1] + result;
-      }
-      result += result.charAt(result.length - 1) == '鍏�' ? '鏁�' : '';
-      return result;
-    } else {
-      return null;
-    }
-  }
-  return null;
-}
-
-//update-begin-author:taoyan date:2022-6-8 for:瑙e喅鑰佺殑vue2鍔ㄦ�佸鍏ユ枃浠惰娉� vite涓嶆敮鎸佺殑闂
-const allModules = import.meta.glob('../views/**/*.vue');
-export function importViewsFile(path): Promise<any> {
-  if (path.startsWith('/')) {
-    path = path.substring(1);
-  }
-  let page = '';
-  if (path.endsWith('.vue')) {
-    page = `../views/${path}`;
-  } else {
-    page = `../views/${path}.vue`;
-  }
-  return new Promise((resolve, reject) => {
-    let flag = true;
-    for (const path in allModules) {
-      if (path == page) {
-        flag = false;
-        allModules[path]().then((mod) => {
-          console.log(path, mod);
-          resolve(mod);
-        });
-      }
-    }
-    if (flag) {
-      reject('璇ユ枃浠朵笉瀛樺湪:' + page);
-    }
-  });
-}
-//update-end-author:taoyan date:2022-6-8 for:瑙e喅鑰佺殑vue2鍔ㄦ�佸鍏ユ枃浠惰娉� vite涓嶆敮鎸佺殑闂
-
-
-/**
- * 璺宠浆鑷崇Н鏈ㄦ姤琛ㄧ殑 棰勮椤甸潰
- * @param url
- * @param id
- * @param token
- */
-export function goJmReportViewPage(url, id, token) {
-  // URL鏀寔{{ window.xxx }}鍗犱綅绗﹀彉閲�
-  url = url.replace(/{{([^}]+)?}}/g, (_s1, s2) => eval(s2))
-  if (url.includes('?')) {
-    url += '&'
-  } else {
-    url += '?'
-  }
-  url += `id=${id}`
-  url += `&token=${token}`
-  window.open(url)
-}
\ No newline at end of file
diff --git a/src/utils/is.ts b/src/utils/is.ts
deleted file mode 100644
index ec008fb..0000000
--- a/src/utils/is.ts
+++ /dev/null
@@ -1,108 +0,0 @@
-const toString = Object.prototype.toString;
-
-export function is(val: unknown, type: string) {
-  return toString.call(val) === `[object ${type}]`;
-}
-
-export function isDef<T = unknown>(val?: T): val is T {
-  return typeof val !== 'undefined';
-}
-
-export function isUnDef<T = unknown>(val?: T): val is T {
-  return !isDef(val);
-}
-
-export function isObject(val: any): val is Record<any, any> {
-  return val !== null && is(val, 'Object');
-}
-
-export function isEmpty<T = unknown>(val: T): val is T {
-  if (isArray(val) || isString(val)) {
-    return val.length === 0;
-  }
-
-  if (val instanceof Map || val instanceof Set) {
-    return val.size === 0;
-  }
-
-  if (isObject(val)) {
-    return Object.keys(val).length === 0;
-  }
-
-  return false;
-}
-
-export function isDate(val: unknown): val is Date {
-  return is(val, 'Date');
-}
-
-export function isNull(val: unknown): val is null {
-  return val === null;
-}
-
-export function isNullAndUnDef(val: unknown): val is null | undefined {
-  return isUnDef(val) && isNull(val);
-}
-
-export function isNullOrUnDef(val: unknown): val is null | undefined {
-  return isUnDef(val) || isNull(val);
-}
-
-export function isNumber(val: unknown): val is number {
-  return is(val, 'Number');
-}
-
-export function isPromise<T = any>(val: any): val is Promise<T> {
-  // update-begin--author:sunjianlei---date:20211022---for: 涓嶈兘鏃㈡槸 Promise 鍙堟槸 Object --------
-  return is(val, 'Promise') && isFunction(val.then) && isFunction(val.catch);
-  // update-end--author:sunjianlei---date:20211022---for: 涓嶈兘鏃㈡槸 Promise 鍙堟槸 Object --------
-}
-
-export function isString(val: unknown): val is string {
-  return is(val, 'String');
-}
-
-export function isJsonObjectString(val: string): val is string {
-  if (!val) {
-    return false;
-  }
-  return val.startsWith('{') && val.endsWith('}');
-}
-
-export function isFunction(val: unknown): val is Function {
-  return typeof val === 'function';
-}
-
-export function isBoolean(val: unknown): val is boolean {
-  return is(val, 'Boolean');
-}
-
-export function isRegExp(val: unknown): val is RegExp {
-  return is(val, 'RegExp');
-}
-
-export function isArray(val: any): val is Array<any> {
-  return val && Array.isArray(val);
-}
-
-export function isWindow(val: any): val is Window {
-  return typeof window !== 'undefined' && is(val, 'Window');
-}
-
-export function isElement(val: unknown): val is Element {
-  return isObject(val) && !!val.tagName;
-}
-
-export function isMap(val: unknown): val is Map<any, any> {
-  return is(val, 'Map');
-}
-
-export const isServer = typeof window === 'undefined';
-
-export const isClient = !isServer;
-
-export function isUrl(path: string): boolean {
-  const reg =
-    /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
-  return reg.test(path);
-}
diff --git a/src/utils/lib/echarts.ts b/src/utils/lib/echarts.ts
deleted file mode 100644
index 9b40020..0000000
--- a/src/utils/lib/echarts.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import * as echarts from 'echarts/core';
-
-import { BarChart, LineChart, PieChart, MapChart, PictorialBarChart, RadarChart } from 'echarts/charts';
-
-import {
-  TitleComponent,
-  TooltipComponent,
-  GridComponent,
-  PolarComponent,
-  AriaComponent,
-  ParallelComponent,
-  LegendComponent,
-  RadarComponent,
-  ToolboxComponent,
-  DataZoomComponent,
-  VisualMapComponent,
-  TimelineComponent,
-  CalendarComponent,
-  GraphicComponent,
-} from 'echarts/components';
-
-// TODO 濡傛灉鎯虫崲鎴怱VG娓叉煋锛屽氨瀵煎嚭SVGRenderer锛�
-//  骞朵笖鏀惧埌 echarts.use 閲岋紝娉ㄩ噴鎺� CanvasRenderer
-import { /*SVGRenderer*/ CanvasRenderer } from 'echarts/renderers';
-
-echarts.use([
-  LegendComponent,
-  TitleComponent,
-  TooltipComponent,
-  GridComponent,
-  PolarComponent,
-  AriaComponent,
-  ParallelComponent,
-  BarChart,
-  LineChart,
-  PieChart,
-  MapChart,
-  RadarChart,
-  // TODO 鍥犱负瑕佸吋瀹筄nline鍥捐〃鑷�傚簲鎵撳嵃锛屾墍浠ユ敼鎴� CanvasRenderer锛屽彲鑳戒細妯$硦
-  CanvasRenderer,
-  PictorialBarChart,
-  RadarComponent,
-  ToolboxComponent,
-  DataZoomComponent,
-  VisualMapComponent,
-  TimelineComponent,
-  CalendarComponent,
-  GraphicComponent,
-]);
-
-export default echarts;
diff --git a/src/utils/libgif/libgif.js b/src/utils/libgif/libgif.js
deleted file mode 100644
index c846cfc..0000000
--- a/src/utils/libgif/libgif.js
+++ /dev/null
@@ -1,990 +0,0 @@
-/*
-    SuperGif
-
-    Example usage:
-
-        <img src="./example1_preview.gif" rel:animated_src="./example1.gif" width="360" height="360" rel:auto_play="1" />
-
-        <script type="text/javascript">
-            $$('img').each(function (img_tag) {
-                if (/.*\.gif/.test(img_tag.src)) {
-                    var rub = new SuperGif({ gif: img_tag } );
-                    rub.load();
-                }
-            });
-        </script>
-
-    Image tag attributes:
-
-        rel:animated_src -	If this url is specified, it's loaded into the player instead of src.
-                            This allows a preview frame to be shown until animated gif data is streamed into the canvas
-
-        rel:auto_play -		Defaults to 1 if not specified. If set to zero, a call to the play() method is needed
-
-    Constructor options args
-
-        gif 				Required. The DOM element of an img tag.
-        loop_mode			Optional. Setting this to false will force disable looping of the gif.
-        auto_play 			Optional. Same as the rel:auto_play attribute above, this arg overrides the img tag info.
-        max_width			Optional. Scale images over max_width down to max_width. Helpful with mobile.
-            on_end				Optional. Add a callback for when the gif reaches the end of a single loop (one iteration). The first argument passed will be the gif HTMLElement.
-        loop_delay			Optional. The amount of time to pause (in ms) after each single loop (iteration).
-        draw_while_loading	Optional. Determines whether the gif will be drawn to the canvas whilst it is loaded.
-        show_progress_bar	Optional. Only applies when draw_while_loading is set to true.
-
-    Instance methods
-
-        // loading
-        load( callback )		Loads the gif specified by the src or rel:animated_src sttributie of the img tag into a canvas element and then calls callback if one is passed
-        load_url( src, callback )	Loads the gif file specified in the src argument into a canvas element and then calls callback if one is passed
-
-        // play controls
-        play -				Start playing the gif
-        pause -				Stop playing the gif
-        move_to(i) -		Move to frame i of the gif
-        move_relative(i) -	Move i frames ahead (or behind if i < 0)
-
-        // getters
-        get_canvas			The canvas element that the gif is playing in. Handy for assigning event handlers to.
-        get_playing			Whether or not the gif is currently playing
-        get_loading			Whether or not the gif has finished loading/parsing
-        get_auto_play		Whether or not the gif is set to play automatically
-        get_length			The number of frames in the gif
-        get_current_frame	The index of the currently displayed frame of the gif
-
-        For additional customization (viewport inside iframe) these params may be passed:
-        c_w, c_h - width and height of canvas
-        vp_t, vp_l, vp_ w, vp_h - top, left, width and height of the viewport
-
-        A bonus: few articles to understand what is going on
-            http://enthusiasms.org/post/16976438906
-            http://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp
-            http://humpy77.deviantart.com/journal/Frame-Delay-Times-for-Animated-GIFs-214150546
-
-*/
-(function (root, factory) {
-  if (typeof define === 'function' && define.amd) {
-      define([], factory);
-  } else if (typeof exports === 'object') {
-      module.exports = factory();
-  } else {
-      root.SuperGif = factory();
-  }
-}(this, function () {
-  // Generic functions
-  var bitsToNum = function (ba) {
-      return ba.reduce(function (s, n) {
-          return s * 2 + n;
-      }, 0);
-  };
-
-  var byteToBitArr = function (bite) {
-      var a = [];
-      for (var i = 7; i >= 0; i--) {
-          a.push(!!(bite & (1 << i)));
-      }
-      return a;
-  };
-
-  // Stream
-  /**
-   * @constructor
-   */
-  // Make compiler happy.
-  var Stream = function (data) {
-      this.data = data;
-      this.len = this.data.length;
-      this.pos = 0;
-
-      this.readByte = function () {
-          if (this.pos >= this.data.length) {
-              throw new Error('Attempted to read past end of stream.');
-          }
-          if (data instanceof Uint8Array)
-              return data[this.pos++];
-          else
-              return data.charCodeAt(this.pos++) & 0xFF;
-      };
-
-      this.readBytes = function (n) {
-          var bytes = [];
-          for (var i = 0; i < n; i++) {
-              bytes.push(this.readByte());
-          }
-          return bytes;
-      };
-
-      this.read = function (n) {
-          var s = '';
-          for (var i = 0; i < n; i++) {
-              s += String.fromCharCode(this.readByte());
-          }
-          return s;
-      };
-
-      this.readUnsigned = function () { // Little-endian.
-          var a = this.readBytes(2);
-          return (a[1] << 8) + a[0];
-      };
-  };
-
-  var lzwDecode = function (minCodeSize, data) {
-      // TODO: Now that the GIF parser is a bit different, maybe this should get an array of bytes instead of a String?
-      var pos = 0; // Maybe this streaming thing should be merged with the Stream?
-      var readCode = function (size) {
-          var code = 0;
-          for (var i = 0; i < size; i++) {
-              if (data.charCodeAt(pos >> 3) & (1 << (pos & 7))) {
-                  code |= 1 << i;
-              }
-              pos++;
-          }
-          return code;
-      };
-
-      var output = [];
-
-      var clearCode = 1 << minCodeSize;
-      var eoiCode = clearCode + 1;
-
-      var codeSize = minCodeSize + 1;
-
-      var dict = [];
-
-      var clear = function () {
-          dict = [];
-          codeSize = minCodeSize + 1;
-          for (var i = 0; i < clearCode; i++) {
-              dict[i] = [i];
-          }
-          dict[clearCode] = [];
-          dict[eoiCode] = null;
-
-      };
-
-      var code;
-      var last;
-
-      while (true) {
-          last = code;
-          code = readCode(codeSize);
-
-          if (code === clearCode) {
-              clear();
-              continue;
-          }
-          if (code === eoiCode) break;
-
-          if (code < dict.length) {
-              if (last !== clearCode) {
-                  dict.push(dict[last].concat(dict[code][0]));
-              }
-          }
-          else {
-              if (code !== dict.length) throw new Error('Invalid LZW code.');
-              dict.push(dict[last].concat(dict[last][0]));
-          }
-          output.push.apply(output, dict[code]);
-
-          if (dict.length === (1 << codeSize) && codeSize < 12) {
-              // If we're at the last code and codeSize is 12, the next code will be a clearCode, and it'll be 12 bits long.
-              codeSize++;
-          }
-      }
-
-      // I don't know if this is technically an error, but some GIFs do it.
-      //if (Math.ceil(pos / 8) !== data.length) throw new Error('Extraneous LZW bytes.');
-      return output;
-  };
-
-
-  // The actual parsing; returns an object with properties.
-  var parseGIF = function (st, handler) {
-      handler || (handler = {});
-
-      // LZW (GIF-specific)
-      var parseCT = function (entries) { // Each entry is 3 bytes, for RGB.
-          var ct = [];
-          for (var i = 0; i < entries; i++) {
-              ct.push(st.readBytes(3));
-          }
-          return ct;
-      };
-
-      var readSubBlocks = function () {
-          var size, data;
-          data = '';
-          do {
-              size = st.readByte();
-              data += st.read(size);
-          } while (size !== 0);
-          return data;
-      };
-
-      var parseHeader = function () {
-          var hdr = {};
-          hdr.sig = st.read(3);
-          hdr.ver = st.read(3);
-          if (hdr.sig !== 'GIF') throw new Error('Not a GIF file.'); // XXX: This should probably be handled more nicely.
-          hdr.width = st.readUnsigned();
-          hdr.height = st.readUnsigned();
-
-          var bits = byteToBitArr(st.readByte());
-          hdr.gctFlag = bits.shift();
-          hdr.colorRes = bitsToNum(bits.splice(0, 3));
-          hdr.sorted = bits.shift();
-          hdr.gctSize = bitsToNum(bits.splice(0, 3));
-
-          hdr.bgColor = st.readByte();
-          hdr.pixelAspectRatio = st.readByte(); // if not 0, aspectRatio = (pixelAspectRatio + 15) / 64
-          if (hdr.gctFlag) {
-              hdr.gct = parseCT(1 << (hdr.gctSize + 1));
-          }
-          handler.hdr && handler.hdr(hdr);
-      };
-
-      var parseExt = function (block) {
-          var parseGCExt = function (block) {
-              var blockSize = st.readByte(); // Always 4
-              var bits = byteToBitArr(st.readByte());
-              block.reserved = bits.splice(0, 3); // Reserved; should be 000.
-              block.disposalMethod = bitsToNum(bits.splice(0, 3));
-              block.userInput = bits.shift();
-              block.transparencyGiven = bits.shift();
-
-              block.delayTime = st.readUnsigned();
-
-              block.transparencyIndex = st.readByte();
-
-              block.terminator = st.readByte();
-
-              handler.gce && handler.gce(block);
-          };
-
-          var parseComExt = function (block) {
-              block.comment = readSubBlocks();
-              handler.com && handler.com(block);
-          };
-
-          var parsePTExt = function (block) {
-              // No one *ever* uses this. If you use it, deal with parsing it yourself.
-              var blockSize = st.readByte(); // Always 12
-              block.ptHeader = st.readBytes(12);
-              block.ptData = readSubBlocks();
-              handler.pte && handler.pte(block);
-          };
-
-          var parseAppExt = function (block) {
-              var parseNetscapeExt = function (block) {
-                  var blockSize = st.readByte(); // Always 3
-                  block.unknown = st.readByte(); // ??? Always 1? What is this?
-                  block.iterations = st.readUnsigned();
-                  block.terminator = st.readByte();
-                  handler.app && handler.app.NETSCAPE && handler.app.NETSCAPE(block);
-              };
-
-              var parseUnknownAppExt = function (block) {
-                  block.appData = readSubBlocks();
-                  // FIXME: This won't work if a handler wants to match on any identifier.
-                  handler.app && handler.app[block.identifier] && handler.app[block.identifier](block);
-              };
-
-              var blockSize = st.readByte(); // Always 11
-              block.identifier = st.read(8);
-              block.authCode = st.read(3);
-              switch (block.identifier) {
-                  case 'NETSCAPE':
-                      parseNetscapeExt(block);
-                      break;
-                  default:
-                      parseUnknownAppExt(block);
-                      break;
-              }
-          };
-
-          var parseUnknownExt = function (block) {
-              block.data = readSubBlocks();
-              handler.unknown && handler.unknown(block);
-          };
-
-          block.label = st.readByte();
-          switch (block.label) {
-              case 0xF9:
-                  block.extType = 'gce';
-                  parseGCExt(block);
-                  break;
-              case 0xFE:
-                  block.extType = 'com';
-                  parseComExt(block);
-                  break;
-              case 0x01:
-                  block.extType = 'pte';
-                  parsePTExt(block);
-                  break;
-              case 0xFF:
-                  block.extType = 'app';
-                  parseAppExt(block);
-                  break;
-              default:
-                  block.extType = 'unknown';
-                  parseUnknownExt(block);
-                  break;
-          }
-      };
-
-      var parseImg = function (img) {
-          var deinterlace = function (pixels, width) {
-              // Of course this defeats the purpose of interlacing. And it's *probably*
-              // the least efficient way it's ever been implemented. But nevertheless...
-              var newPixels = new Array(pixels.length);
-              var rows = pixels.length / width;
-              var cpRow = function (toRow, fromRow) {
-                  var fromPixels = pixels.slice(fromRow * width, (fromRow + 1) * width);
-                  newPixels.splice.apply(newPixels, [toRow * width, width].concat(fromPixels));
-              };
-
-              // See appendix E.
-              var offsets = [0, 4, 2, 1];
-              var steps = [8, 8, 4, 2];
-
-              var fromRow = 0;
-              for (var pass = 0; pass < 4; pass++) {
-                  for (var toRow = offsets[pass]; toRow < rows; toRow += steps[pass]) {
-                      cpRow(toRow, fromRow)
-                      fromRow++;
-                  }
-              }
-
-              return newPixels;
-          };
-
-          img.leftPos = st.readUnsigned();
-          img.topPos = st.readUnsigned();
-          img.width = st.readUnsigned();
-          img.height = st.readUnsigned();
-
-          var bits = byteToBitArr(st.readByte());
-          img.lctFlag = bits.shift();
-          img.interlaced = bits.shift();
-          img.sorted = bits.shift();
-          img.reserved = bits.splice(0, 2);
-          img.lctSize = bitsToNum(bits.splice(0, 3));
-
-          if (img.lctFlag) {
-              img.lct = parseCT(1 << (img.lctSize + 1));
-          }
-
-          img.lzwMinCodeSize = st.readByte();
-
-          var lzwData = readSubBlocks();
-
-          img.pixels = lzwDecode(img.lzwMinCodeSize, lzwData);
-
-          if (img.interlaced) { // Move
-              img.pixels = deinterlace(img.pixels, img.width);
-          }
-
-          handler.img && handler.img(img);
-      };
-
-      var parseBlock = function () {
-          var block = {};
-          block.sentinel = st.readByte();
-
-          switch (String.fromCharCode(block.sentinel)) { // For ease of matching
-              case '!':
-                  block.type = 'ext';
-                  parseExt(block);
-                  break;
-              case ',':
-                  block.type = 'img';
-                  parseImg(block);
-                  break;
-              case ';':
-                  block.type = 'eof';
-                  handler.eof && handler.eof(block);
-                  break;
-              default:
-                  throw new Error('Unknown block: 0x' + block.sentinel.toString(16)); // TODO: Pad this with a 0.
-          }
-
-          if (block.type !== 'eof') setTimeout(parseBlock, 0);
-      };
-
-      var parse = function () {
-          parseHeader();
-          setTimeout(parseBlock, 0);
-      };
-
-      parse();
-  };
-
-  var SuperGif = function (opts) {
-      var options = {
-          //viewport position
-          vp_l: 0,
-          vp_t: 0,
-          vp_w: null,
-          vp_h: null,
-          //canvas sizes
-          c_w: null,
-          c_h: null
-      };
-      for (var i in opts) { options[i] = opts[i] }
-      if (options.vp_w && options.vp_h) options.is_vp = true;
-
-      var stream;
-      var hdr;
-
-      var loadError = null;
-      var loading = false;
-
-      var transparency = null;
-      var delay = null;
-      var disposalMethod = null;
-      var disposalRestoreFromIdx = null;
-      var lastDisposalMethod = null;
-      var frame = null;
-      var lastImg = null;
-
-      var playing = true;
-      var forward = true;
-
-      var ctx_scaled = false;
-
-      var frames = [];
-      var frameOffsets = []; // elements have .x and .y properties
-
-      var gif = options.gif;
-      if (typeof options.auto_play == 'undefined')
-          options.auto_play = (!gif.getAttribute('rel:auto_play') || gif.getAttribute('rel:auto_play') == '1');
-
-      var onEndListener = (options.hasOwnProperty('on_end') ? options.on_end : null);
-      var loopDelay = (options.hasOwnProperty('loop_delay') ? options.loop_delay : 0);
-      var overrideLoopMode = (options.hasOwnProperty('loop_mode') ? options.loop_mode : 'auto');
-      var drawWhileLoading = (options.hasOwnProperty('draw_while_loading') ? options.draw_while_loading : true);
-      var showProgressBar = drawWhileLoading ? (options.hasOwnProperty('show_progress_bar') ? options.show_progress_bar : true) : false;
-      var progressBarHeight = (options.hasOwnProperty('progressbar_height') ? options.progressbar_height : 25);
-      var progressBarBackgroundColor = (options.hasOwnProperty('progressbar_background_color') ? options.progressbar_background_color : 'rgba(255,255,255,0.4)');
-      var progressBarForegroundColor = (options.hasOwnProperty('progressbar_foreground_color') ? options.progressbar_foreground_color : 'rgba(255,0,22,.8)');
-
-      var clear = function () {
-          transparency = null;
-          delay = null;
-          lastDisposalMethod = disposalMethod;
-          disposalMethod = null;
-          frame = null;
-      };
-
-      // XXX: There's probably a better way to handle catching exceptions when
-      // callbacks are involved.
-      var doParse = function () {
-          try {
-              parseGIF(stream, handler);
-          }
-          catch (err) {
-              doLoadError('parse');
-          }
-      };
-
-      var doText = function (text) {
-          toolbar.innerHTML = text; // innerText? Escaping? Whatever.
-          toolbar.style.visibility = 'visible';
-      };
-
-      var setSizes = function (w, h) {
-          canvas.width = w * get_canvas_scale();
-          canvas.height = h * get_canvas_scale();
-          toolbar.style.minWidth = (w * get_canvas_scale()) + 'px';
-
-          tmpCanvas.width = w;
-          tmpCanvas.height = h;
-          tmpCanvas.style.width = w + 'px';
-          tmpCanvas.style.height = h + 'px';
-          tmpCanvas.getContext('2d').setTransform(1, 0, 0, 1, 0, 0);
-      };
-
-      var setFrameOffset = function (frame, offset) {
-          if (!frameOffsets[frame]) {
-              frameOffsets[frame] = offset;
-              return;
-          }
-          if (typeof offset.x !== 'undefined') {
-              frameOffsets[frame].x = offset.x;
-          }
-          if (typeof offset.y !== 'undefined') {
-              frameOffsets[frame].y = offset.y;
-          }
-      };
-
-      var doShowProgress = function (pos, length, draw) {
-          if (draw && showProgressBar) {
-              var height = progressBarHeight;
-              var left, mid, top, width;
-              if (options.is_vp) {
-                  if (!ctx_scaled) {
-                      top = (options.vp_t + options.vp_h - height);
-                      height = height;
-                      left = options.vp_l;
-                      mid = left + (pos / length) * options.vp_w;
-                      width = canvas.width;
-                  } else {
-                      top = (options.vp_t + options.vp_h - height) / get_canvas_scale();
-                      height = height / get_canvas_scale();
-                      left = (options.vp_l / get_canvas_scale());
-                      mid = left + (pos / length) * (options.vp_w / get_canvas_scale());
-                      width = canvas.width / get_canvas_scale();
-                  }
-                  //some debugging, draw rect around viewport
-                  if (false) {
-                      if (!ctx_scaled) {
-                          var l = options.vp_l, t = options.vp_t;
-                          var w = options.vp_w, h = options.vp_h;
-                      } else {
-                          var l = options.vp_l / get_canvas_scale(), t = options.vp_t / get_canvas_scale();
-                          var w = options.vp_w / get_canvas_scale(), h = options.vp_h / get_canvas_scale();
-                      }
-                      ctx.rect(l, t, w, h);
-                      ctx.stroke();
-                  }
-              }
-              else {
-                  top = (canvas.height - height) / (ctx_scaled ? get_canvas_scale() : 1);
-                  mid = ((pos / length) * canvas.width) / (ctx_scaled ? get_canvas_scale() : 1);
-                  width = canvas.width / (ctx_scaled ? get_canvas_scale() : 1);
-                  height /= ctx_scaled ? get_canvas_scale() : 1;
-              }
-
-              ctx.fillStyle = progressBarBackgroundColor;
-              ctx.fillRect(mid, top, width - mid, height);
-
-              ctx.fillStyle = progressBarForegroundColor;
-              ctx.fillRect(0, top, mid, height);
-          }
-      };
-
-      var doLoadError = function (originOfError) {
-          var drawError = function () {
-              ctx.fillStyle = 'black';
-              ctx.fillRect(0, 0, options.c_w ? options.c_w : hdr.width, options.c_h ? options.c_h : hdr.height);
-              ctx.strokeStyle = 'red';
-              ctx.lineWidth = 3;
-              ctx.moveTo(0, 0);
-              ctx.lineTo(options.c_w ? options.c_w : hdr.width, options.c_h ? options.c_h : hdr.height);
-              ctx.moveTo(0, options.c_h ? options.c_h : hdr.height);
-              ctx.lineTo(options.c_w ? options.c_w : hdr.width, 0);
-              ctx.stroke();
-          };
-
-          loadError = originOfError;
-          hdr = {
-              width: gif.width,
-              height: gif.height
-          }; // Fake header.
-          frames = [];
-          drawError();
-      };
-
-      var doHdr = function (_hdr) {
-          hdr = _hdr;
-          setSizes(hdr.width, hdr.height)
-      };
-
-      var doGCE = function (gce) {
-          pushFrame();
-          clear();
-          transparency = gce.transparencyGiven ? gce.transparencyIndex : null;
-          delay = gce.delayTime;
-          disposalMethod = gce.disposalMethod;
-          // We don't have much to do with the rest of GCE.
-      };
-
-      var pushFrame = function () {
-          if (!frame) return;
-          frames.push({
-              data: frame.getImageData(0, 0, hdr.width, hdr.height),
-              delay: delay
-          });
-          frameOffsets.push({ x: 0, y: 0 });
-      };
-
-      var doImg = function (img) {
-          if (!frame) frame = tmpCanvas.getContext('2d');
-
-          var currIdx = frames.length;
-
-          //ct = color table, gct = global color table
-          var ct = img.lctFlag ? img.lct : hdr.gct; // TODO: What if neither exists?
-
-          /*
-          Disposal method indicates the way in which the graphic is to
-          be treated after being displayed.
-
-          Values :    0 - No disposal specified. The decoder is
-                          not required to take any action.
-                      1 - Do not dispose. The graphic is to be left
-                          in place.
-                      2 - Restore to background color. The area used by the
-                          graphic must be restored to the background color.
-                      3 - Restore to previous. The decoder is required to
-                          restore the area overwritten by the graphic with
-                          what was there prior to rendering the graphic.
-
-                          Importantly, "previous" means the frame state
-                          after the last disposal of method 0, 1, or 2.
-          */
-          if (currIdx > 0) {
-              if (lastDisposalMethod === 3) {
-                  // Restore to previous
-                  // If we disposed every frame including first frame up to this point, then we have
-                  // no composited frame to restore to. In this case, restore to background instead.
-                  if (disposalRestoreFromIdx !== null) {
-                      frame.putImageData(frames[disposalRestoreFromIdx].data, 0, 0);
-                  } else {
-                      frame.clearRect(lastImg.leftPos, lastImg.topPos, lastImg.width, lastImg.height);
-                  }
-              } else {
-                  disposalRestoreFromIdx = currIdx - 1;
-              }
-
-              if (lastDisposalMethod === 2) {
-                  // Restore to background color
-                  // Browser implementations historically restore to transparent; we do the same.
-                  // http://www.wizards-toolkit.org/discourse-server/viewtopic.php?f=1&t=21172#p86079
-                  frame.clearRect(lastImg.leftPos, lastImg.topPos, lastImg.width, lastImg.height);
-              }
-          }
-          // else, Undefined/Do not dispose.
-          // frame contains final pixel data from the last frame; do nothing
-
-          //Get existing pixels for img region after applying disposal method
-          var imgData = frame.getImageData(img.leftPos, img.topPos, img.width, img.height);
-
-          //apply color table colors
-          img.pixels.forEach(function (pixel, i) {
-              // imgData.data === [R,G,B,A,R,G,B,A,...]
-              if (pixel !== transparency) {
-                  imgData.data[i * 4 + 0] = ct[pixel][0];
-                  imgData.data[i * 4 + 1] = ct[pixel][1];
-                  imgData.data[i * 4 + 2] = ct[pixel][2];
-                  imgData.data[i * 4 + 3] = 255; // Opaque.
-              }
-          });
-
-          frame.putImageData(imgData, img.leftPos, img.topPos);
-
-          if (!ctx_scaled) {
-              ctx.scale(get_canvas_scale(), get_canvas_scale());
-              ctx_scaled = true;
-          }
-
-          // We could use the on-page canvas directly, except that we draw a progress
-          // bar for each image chunk (not just the final image).
-          if (drawWhileLoading) {
-              ctx.drawImage(tmpCanvas, 0, 0);
-              drawWhileLoading = options.auto_play;
-          }
-
-          lastImg = img;
-      };
-
-      var player = (function () {
-          var i = -1;
-          var iterationCount = 0;
-
-          var showingInfo = false;
-          var pinned = false;
-
-          /**
-           * Gets the index of the frame "up next".
-           * @returns {number}
-           */
-          var getNextFrameNo = function () {
-              var delta = (forward ? 1 : -1);
-              return (i + delta + frames.length) % frames.length;
-          };
-
-          var stepFrame = function (amount) { // XXX: Name is confusing.
-              i = i + amount;
-
-              putFrame();
-          };
-
-          var step = (function () {
-              var stepping = false;
-
-              var completeLoop = function () {
-                  if (onEndListener !== null)
-                      onEndListener(gif);
-                  iterationCount++;
-
-                  if (overrideLoopMode !== false || iterationCount < 0) {
-                      doStep();
-                  } else {
-                      stepping = false;
-                      playing = false;
-                  }
-              };
-
-              var doStep = function () {
-                  stepping = playing;
-                  if (!stepping) return;
-
-                  stepFrame(1);
-                  var delay = frames[i].delay * 10;
-                  if (!delay) delay = 100; // FIXME: Should this even default at all? What should it be?
-
-                  var nextFrameNo = getNextFrameNo();
-                  if (nextFrameNo === 0) {
-                      delay += loopDelay;
-                      setTimeout(completeLoop, delay);
-                  } else {
-                      setTimeout(doStep, delay);
-                  }
-              };
-
-              return function () {
-                  if (!stepping) setTimeout(doStep, 0);
-              };
-          }());
-
-          var putFrame = function () {
-              var offset;
-              i = parseInt(i, 10);
-
-              if (i > frames.length - 1) {
-                  i = 0;
-              }
-
-              if (i < 0) {
-                  i = 0;
-              }
-
-              offset = frameOffsets[i];
-
-              tmpCanvas.getContext("2d").putImageData(frames[i].data, offset.x, offset.y);
-              ctx.globalCompositeOperation = "copy";
-              ctx.drawImage(tmpCanvas, 0, 0);
-          };
-
-          var play = function () {
-              playing = true;
-              step();
-          };
-
-          var pause = function () {
-              playing = false;
-          };
-
-
-          return {
-              init: function () {
-                  if (loadError) return;
-
-                  if (!(options.c_w && options.c_h)) {
-                      ctx.scale(get_canvas_scale(), get_canvas_scale());
-                  }
-
-                  if (options.auto_play) {
-                      step();
-                  }
-                  else {
-                      i = 0;
-                      putFrame();
-                  }
-              },
-              step: step,
-              play: play,
-              pause: pause,
-              playing: playing,
-              move_relative: stepFrame,
-              current_frame: function () { return i; },
-              length: function () { return frames.length },
-              move_to: function (frame_idx) {
-                  i = frame_idx;
-                  putFrame();
-              }
-          }
-      }());
-
-      var doDecodeProgress = function (draw) {
-          doShowProgress(stream.pos, stream.data.length, draw);
-      };
-
-      var doNothing = function () { };
-      /**
-       * @param{boolean=} draw Whether to draw progress bar or not; this is not idempotent because of translucency.
-       *                       Note that this means that the text will be unsynchronized with the progress bar on non-frames;
-       *                       but those are typically so small (GCE etc.) that it doesn't really matter. TODO: Do this properly.
-       */
-      var withProgress = function (fn, draw) {
-          return function (block) {
-              fn(block);
-              doDecodeProgress(draw);
-          };
-      };
-
-
-      var handler = {
-          hdr: withProgress(doHdr),
-          gce: withProgress(doGCE),
-          com: withProgress(doNothing),
-          // I guess that's all for now.
-          app: {
-              // TODO: Is there much point in actually supporting iterations?
-              NETSCAPE: withProgress(doNothing)
-          },
-          img: withProgress(doImg, true),
-          eof: function (block) {
-              //toolbar.style.display = '';
-              pushFrame();
-              doDecodeProgress(false);
-              if (!(options.c_w && options.c_h)) {
-                  canvas.width = hdr.width * get_canvas_scale();
-                  canvas.height = hdr.height * get_canvas_scale();
-              }
-              player.init();
-              loading = false;
-              if (load_callback) {
-                  load_callback(gif);
-              }
-
-          }
-      };
-
-      var init = function () {
-          var parent = gif.parentNode;
-
-          var div = document.createElement('div');
-          canvas = document.createElement('canvas');
-          ctx = canvas.getContext('2d');
-          toolbar = document.createElement('div');
-
-          tmpCanvas = document.createElement('canvas');
-
-          div.width = canvas.width = gif.width;
-          div.height = canvas.height = gif.height;
-          toolbar.style.minWidth = gif.width + 'px';
-
-          div.className = 'jsgif';
-          toolbar.className = 'jsgif_toolbar';
-          div.appendChild(canvas);
-          div.appendChild(toolbar);
-
-          parent.insertBefore(div, gif);
-          parent.removeChild(gif);
-
-          if (options.c_w && options.c_h) setSizes(options.c_w, options.c_h);
-          initialized = true;
-      };
-
-      var get_canvas_scale = function () {
-          var scale;
-          if (options.max_width && hdr && hdr.width > options.max_width) {
-              scale = options.max_width / hdr.width;
-          }
-          else {
-              scale = 1;
-          }
-          return scale;
-      }
-
-      var canvas, ctx, toolbar, tmpCanvas;
-      var initialized = false;
-      var load_callback = false;
-
-      var load_setup = function (callback) {
-          if (loading) return false;
-          if (callback) load_callback = callback;
-          else load_callback = false;
-
-          loading = true;
-          frames = [];
-          clear();
-          disposalRestoreFromIdx = null;
-          lastDisposalMethod = null;
-          frame = null;
-          lastImg = null;
-
-          return true;
-      }
-
-      return {
-          // play controls
-          play: player.play,
-          pause: player.pause,
-          move_relative: player.move_relative,
-          move_to: player.move_to,
-
-          // getters for instance vars
-          get_playing: function () { return playing },
-          get_canvas: function () { return canvas },
-          get_canvas_scale: function () { return get_canvas_scale() },
-          get_loading: function () { return loading },
-          get_auto_play: function () { return options.auto_play },
-          get_length: function () { return player.length() },
-          get_current_frame: function () { return player.current_frame() },
-          load_url: function (src, callback) {
-              if (!load_setup(callback)) return;
-
-              var h = new XMLHttpRequest();
-              // new browsers (XMLHttpRequest2-compliant)
-              h.open('GET', src, true);
-
-              if ('overrideMimeType' in h) {
-                  h.overrideMimeType('text/plain; charset=x-user-defined');
-              }
-
-              // old browsers (XMLHttpRequest-compliant)
-              else if ('responseType' in h) {
-                  h.responseType = 'arraybuffer';
-              }
-
-              // IE9 (Microsoft.XMLHTTP-compliant)
-              else {
-                  h.setRequestHeader('Accept-Charset', 'x-user-defined');
-              }
-
-              h.onloadstart = function () {
-                  // Wait until connection is opened to replace the gif element with a canvas to avoid a blank img
-                  if (!initialized) init();
-              };
-              h.onload = function (e) {
-                  if (this.status != 200) {
-                      doLoadError('xhr - response');
-                  }
-                  // emulating response field for IE9
-                  if (!('response' in this)) {
-                      this.response = new VBArray(this.responseText).toArray().map(String.fromCharCode).join('');
-                  }
-                  var data = this.response;
-                  if (data.toString().indexOf("ArrayBuffer") > 0) {
-                      data = new Uint8Array(data);
-                  }
-
-                  stream = new Stream(data);
-                  setTimeout(doParse, 0);
-              };
-              h.onprogress = function (e) {
-                  if (e.lengthComputable) doShowProgress(e.loaded, e.total, true);
-              };
-              h.onerror = function () { doLoadError('xhr'); };
-              h.send();
-          },
-          load: function (callback) {
-              this.load_url(gif.getAttribute('rel:animated_src') || gif.src, callback);
-          },
-          load_raw: function (arr, callback) {
-              if (!load_setup(callback)) return;
-              if (!initialized) init();
-              stream = new Stream(arr);
-              setTimeout(doParse, 0);
-          },
-          set_frame_offset: setFrameOffset
-      };
-  };
-
-  return SuperGif;
-}));
-
-
diff --git a/src/utils/log.ts b/src/utils/log.ts
deleted file mode 100644
index 8f79800..0000000
--- a/src/utils/log.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-const projectName = import.meta.env.VITE_GLOB_APP_TITLE;
-
-export function warn(message: string) {
-  console.warn(`[${projectName} warn]:${message}`);
-}
-
-export function error(message: string) {
-  throw new Error(`[${projectName} error]:${message}`);
-}
diff --git a/src/utils/mitt.ts b/src/utils/mitt.ts
deleted file mode 100644
index 4b15bba..0000000
--- a/src/utils/mitt.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * copy to https://github.com/developit/mitt
- * Expand clear method
- */
-
-export type EventType = string | symbol;
-
-// An event handler can take an optional event argument
-// and should not return a value
-export type Handler<T = any> = (event?: T) => void;
-export type WildcardHandler = (type: EventType, event?: any) => void;
-
-// An array of all currently registered event handlers for a type
-export type EventHandlerList = Array<Handler>;
-export type WildCardEventHandlerList = Array<WildcardHandler>;
-
-// A map of event types and their corresponding event handlers.
-export type EventHandlerMap = Map<EventType, EventHandlerList | WildCardEventHandlerList>;
-
-export interface Emitter {
-  all: EventHandlerMap;
-
-  on<T = any>(type: EventType, handler: Handler<T>): void;
-  on(type: '*', handler: WildcardHandler): void;
-
-  off<T = any>(type: EventType, handler: Handler<T>): void;
-  off(type: '*', handler: WildcardHandler): void;
-
-  emit<T = any>(type: EventType, event?: T): void;
-  emit(type: '*', event?: any): void;
-  clear(): void;
-}
-
-/**
- * Mitt: Tiny (~200b) functional event emitter / pubsub.
- * @name mitt
- * @returns {Mitt}
- */
-export default function mitt(all?: EventHandlerMap): Emitter {
-  all = all || new Map();
-
-  return {
-    /**
-     * A Map of event names to registered handler functions.
-     */
-    all,
-
-    /**
-     * Register an event handler for the given type.
-     * @param {string|symbol} type Type of event to listen for, or `"*"` for all events
-     * @param {Function} handler Function to call in response to given event
-     * @memberOf mitt
-     */
-    on<T = any>(type: EventType, handler: Handler<T>) {
-      const handlers = all?.get(type);
-      const added = handlers && handlers.push(handler);
-      if (!added) {
-        all?.set(type, [handler]);
-      }
-    },
-
-    /**
-     * Remove an event handler for the given type.
-     * @param {string|symbol} type Type of event to unregister `handler` from, or `"*"`
-     * @param {Function} handler Handler function to remove
-     * @memberOf mitt
-     */
-    off<T = any>(type: EventType, handler: Handler<T>) {
-      const handlers = all?.get(type);
-      if (handlers) {
-        handlers.splice(handlers.indexOf(handler) >>> 0, 1);
-      }
-    },
-
-    /**
-     * Invoke all handlers for the given type.
-     * If present, `"*"` handlers are invoked after type-matched handlers.
-     *
-     * Note: Manually firing "*" handlers is not supported.
-     *
-     * @param {string|symbol} type The event type to invoke
-     * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler
-     * @memberOf mitt
-     */
-    emit<T = any>(type: EventType, evt: T) {
-      ((all?.get(type) || []) as EventHandlerList).slice().map((handler) => {
-        handler(evt);
-      });
-      ((all?.get('*') || []) as WildCardEventHandlerList).slice().map((handler) => {
-        handler(type, evt);
-      });
-    },
-
-    /**
-     * Clear all
-     */
-    clear() {
-      this.all.clear();
-    },
-  };
-}
diff --git a/src/utils/monorepo/dynamicRouter.ts b/src/utils/monorepo/dynamicRouter.ts
deleted file mode 100644
index 11f9ab8..0000000
--- a/src/utils/monorepo/dynamicRouter.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-export type DynamicViewsRecord = Record<string, () => Promise<Recordable>>;
-
-/** 宸叉敞鍐屾ā鍧楃殑鍔ㄦ�侀〉闈� */
-export const packageViews: DynamicViewsRecord = {};
-
-/**
- * 娉ㄥ唽鍔ㄦ�佽矾鐢遍〉闈�
- * @param getViews 鑾峰彇璇ユā鍧椾笅鎵�鏈夐〉闈㈢殑鏂规硶
- */
-export function registerDynamicRouter(getViews: () => DynamicViewsRecord) {
-  if (typeof getViews === 'function') {
-    let dynamicViews = getViews();
-    Object.keys(dynamicViews).forEach((key) => {
-      // 澶勭悊鍔ㄦ�侀〉闈㈢殑key锛屼娇鍏跺彲浠ヨ璺敱璇嗗埆
-      let newKey = key.replace('./src/views', '../../views');
-      packageViews[newKey] = dynamicViews[key];
-    });
-  }
-}
diff --git a/src/utils/monorepo/registerPackages.ts b/src/utils/monorepo/registerPackages.ts
deleted file mode 100644
index 44008e1..0000000
--- a/src/utils/monorepo/registerPackages.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import type { App } from 'vue';
-import { warn } from '/@/utils/log';
-import { registerDynamicRouter } from '/@/utils/monorepo/dynamicRouter';
-// 寮曞叆妯″潡
-import PACKAGE_TEST_JEECG_ONLINE from '@jeecg/online';
-
-export function registerPackages(app: App) {
-  use(app, PACKAGE_TEST_JEECG_ONLINE);
-}
-
-// noinspection JSUnusedGlobalSymbols
-const installOptions = {
-  baseImport,
-};
-
-/** 娉ㄥ唽妯″潡 */
-function use(app: App, pkg) {
-  app.use(pkg, installOptions);
-  registerDynamicRouter(pkg.getViews);
-}
-
-// 妯″潡閲屽彲浣跨敤鐨刬mport
-const importGlobs = [import.meta.glob('../../utils/**/*.{ts,js,tsx}'), import.meta.glob('../../hooks/**/*.{ts,js,tsx}')];
-
-/**
- * 鍩虹椤圭洰瀵煎寘
- * 鐩墠鏀寔瀵煎叆濡備笅
- * /@/utils/**
- * /@/hooks/**
- *
- * @param path 鏂囦欢璺緞锛宼s鏃犻渶杈撳叆鍚庣紑鍚嶃�傚锛�/@/utils/common/compUtils
- */
-async function baseImport(path: string) {
-  if (path) {
-    // 灏� /@/ 鏇挎崲鎴� ../../
-    path = path.replace(/^\/@\//, '../../');
-    for (const glob of importGlobs) {
-      for (const key of Object.keys(glob)) {
-        if (path === key || `${path}.ts` === key || `${path}.tsx` === key) {
-          return glob[key]();
-        }
-      }
-    }
-    warn(`寮曞叆澶辫触锛�${path} 涓嶅瓨鍦╜);
-  }
-  return null;
-}
diff --git a/src/utils/propTypes.ts b/src/utils/propTypes.ts
deleted file mode 100644
index a5b0a47..0000000
--- a/src/utils/propTypes.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { CSSProperties, VNodeChild } from 'vue';
-import { createTypes, VueTypeValidableDef, VueTypesInterface } from 'vue-types';
-
-export type VueNode = VNodeChild | JSX.Element;
-
-type PropTypes = VueTypesInterface & {
-  readonly style: VueTypeValidableDef<CSSProperties>;
-  readonly VNodeChild: VueTypeValidableDef<VueNode>;
-  // readonly trueBool: VueTypeValidableDef<boolean>;
-};
-
-const propTypes = createTypes({
-  func: undefined,
-  bool: undefined,
-  string: undefined,
-  number: undefined,
-  object: undefined,
-  integer: undefined,
-}) as PropTypes;
-
-propTypes.extend([
-  {
-    name: 'style',
-    getter: true,
-    type: [String, Object],
-    default: undefined,
-  },
-  {
-    name: 'VNodeChild',
-    getter: true,
-    type: undefined,
-  },
-]);
-export { propTypes };
diff --git a/src/utils/props.ts b/src/utils/props.ts
deleted file mode 100644
index 729c9ef..0000000
--- a/src/utils/props.ts
+++ /dev/null
@@ -1,185 +0,0 @@
-// copy from element-plus
-
-import { warn } from 'vue';
-import { isObject } from '@vue/shared';
-import { fromPairs } from 'lodash-es';
-import type { ExtractPropTypes, PropType } from '@vue/runtime-core';
-import type { Mutable } from './types';
-
-const wrapperKey = Symbol();
-export type PropWrapper<T> = { [wrapperKey]: T };
-
-export const propKey = Symbol();
-
-type ResolveProp<T> = ExtractPropTypes<{
-  key: { type: T; required: true };
-}>['key'];
-type ResolvePropType<T> = ResolveProp<T> extends { type: infer V } ? V : ResolveProp<T>;
-type ResolvePropTypeWithReadonly<T> = Readonly<T> extends Readonly<Array<infer A>>
-  ? ResolvePropType<A[]>
-  : ResolvePropType<T>;
-
-type IfUnknown<T, V> = [unknown] extends [T] ? V : T;
-
-export type BuildPropOption<T, D extends BuildPropType<T, V, C>, R, V, C> = {
-  type?: T;
-  values?: readonly V[];
-  required?: R;
-  default?: R extends true
-    ? never
-    : D extends Record<string, unknown> | Array<any>
-    ? () => D
-    : (() => D) | D;
-  validator?: ((val: any) => val is C) | ((val: any) => boolean);
-};
-
-type _BuildPropType<T, V, C> =
-  | (T extends PropWrapper<unknown>
-      ? T[typeof wrapperKey]
-      : [V] extends [never]
-      ? ResolvePropTypeWithReadonly<T>
-      : never)
-  | V
-  | C;
-export type BuildPropType<T, V, C> = _BuildPropType<
-  IfUnknown<T, never>,
-  IfUnknown<V, never>,
-  IfUnknown<C, never>
->;
-
-type _BuildPropDefault<T, D> = [T] extends [
-  // eslint-disable-next-line @typescript-eslint/ban-types
-  Record<string, unknown> | Array<any> | Function,
-]
-  ? D
-  : D extends () => T
-  ? ReturnType<D>
-  : D;
-
-export type BuildPropDefault<T, D, R> = R extends true
-  ? { readonly default?: undefined }
-  : {
-      readonly default: Exclude<D, undefined> extends never
-        ? undefined
-        : Exclude<_BuildPropDefault<T, D>, undefined>;
-    };
-export type BuildPropReturn<T, D, R, V, C> = {
-  readonly type: PropType<BuildPropType<T, V, C>>;
-  readonly required: IfUnknown<R, false>;
-  readonly validator: ((val: unknown) => boolean) | undefined;
-  [propKey]: true;
-} & BuildPropDefault<BuildPropType<T, V, C>, IfUnknown<D, never>, IfUnknown<R, false>>;
-
-/**
- * @description Build prop. It can better optimize prop types
- * @description 鐢熸垚 prop锛岃兘鏇村ソ鍦颁紭鍖栫被鍨�
- * @example
-  // limited options
-  // the type will be PropType<'light' | 'dark'>
-  buildProp({
-    type: String,
-    values: ['light', 'dark'],
-  } as const)
-  * @example
-  // limited options and other types
-  // the type will be PropType<'small' | 'medium' | number>
-  buildProp({
-    type: [String, Number],
-    values: ['small', 'medium'],
-    validator: (val: unknown): val is number => typeof val === 'number',
-  } as const)
-  @link see more: https://github.com/element-plus/element-plus/pull/3341
- */
-export function buildProp<
-  T = never,
-  D extends BuildPropType<T, V, C> = never,
-  R extends boolean = false,
-  V = never,
-  C = never,
->(option: BuildPropOption<T, D, R, V, C>, key?: string): BuildPropReturn<T, D, R, V, C> {
-  // filter native prop type and nested prop, e.g `null`, `undefined` (from `buildProps`)
-  if (!isObject(option) || !!option[propKey]) return option as any;
-
-  const { values, required, default: defaultValue, type, validator } = option;
-
-  const _validator =
-    values || validator
-      ? (val: unknown) => {
-          let valid = false;
-          let allowedValues: unknown[] = [];
-
-          if (values) {
-            allowedValues = [...values, defaultValue];
-            valid ||= allowedValues.includes(val);
-          }
-          if (validator) valid ||= validator(val);
-
-          if (!valid && allowedValues.length > 0) {
-            const allowValuesText = [...new Set(allowedValues)]
-              .map((value) => JSON.stringify(value))
-              .join(', ');
-            warn(
-              `Invalid prop: validation failed${
-                key ? ` for prop "${key}"` : ''
-              }. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`,
-            );
-          }
-          return valid;
-        }
-      : undefined;
-
-  return {
-    type:
-      typeof type === 'object' && Object.getOwnPropertySymbols(type).includes(wrapperKey)
-        ? type[wrapperKey]
-        : type,
-    required: !!required,
-    default: defaultValue,
-    validator: _validator,
-    [propKey]: true,
-  } as unknown as BuildPropReturn<T, D, R, V, C>;
-}
-
-type NativePropType = [((...args: any) => any) | { new (...args: any): any } | undefined | null];
-
-export const buildProps = <
-  O extends {
-    [K in keyof O]: O[K] extends BuildPropReturn<any, any, any, any, any>
-      ? O[K]
-      : [O[K]] extends NativePropType
-      ? O[K]
-      : O[K] extends BuildPropOption<infer T, infer D, infer R, infer V, infer C>
-      ? D extends BuildPropType<T, V, C>
-        ? BuildPropOption<T, D, R, V, C>
-        : never
-      : never;
-  },
->(
-  props: O,
-) =>
-  fromPairs(
-    Object.entries(props).map(([key, option]) => [key, buildProp(option as any, key)]),
-  ) as unknown as {
-    [K in keyof O]: O[K] extends { [propKey]: boolean }
-      ? O[K]
-      : [O[K]] extends NativePropType
-      ? O[K]
-      : O[K] extends BuildPropOption<
-          infer T,
-          // eslint-disable-next-line @typescript-eslint/no-unused-vars
-          infer _D,
-          infer R,
-          infer V,
-          infer C
-        >
-      ? BuildPropReturn<T, O[K]['default'], R, V, C>
-      : never;
-  };
-
-export const definePropType = <T>(val: any) => ({ [wrapperKey]: val } as PropWrapper<T>);
-
-export const keyOf = <T>(arr: T) => Object.keys(arr) as Array<keyof T>;
-export const mutable = <T extends readonly any[] | Record<string, unknown>>(val: T) =>
-  val as Mutable<typeof val>;
-
-export const componentSize = ['large', 'medium', 'small', 'mini'] as const;
diff --git a/src/utils/public.js b/src/utils/public.js
deleted file mode 100644
index 6b9fc0a..0000000
--- a/src/utils/public.js
+++ /dev/null
@@ -1,27 +0,0 @@
-const jm = require("./aes.js");
-
-//  纭欢鏂规彁渚涚殑key,寮�鍙戞枃妗d細璇存槑鐨�
-var key = "d4acfcad77843a0ba17fe906c65255c6";
-
-// 鍔犲瘑
-function encryptionData(data) {
-  var byteKey = jm.CryptoJS.enc.Hex.parse(key);
-  var byteData = jm.CryptoJS.enc.Hex.parse(data);
-  var encrypt = jm.CryptoJS.AES.encrypt(byteData, byteKey, { mode: jm.CryptoJS.mode.ECB, padding: jm.CryptoJS.pad.NoPadding });
-  var encryptedStr = encrypt.ciphertext.toString();
-  return encryptedStr;
-}
-//瑙e瘑
-function decryptData(data) {
-  var byteKey = jm.CryptoJS.enc.Hex.parse(key);
-  var byteData = jm.CryptoJS.enc.Hex.parse(data);
-  byteData = jm.CryptoJS.enc.Base64.stringify(byteData);
-  var decrypt = jm.CryptoJS.AES.decrypt(byteData, byteKey, { mode: jm.CryptoJS.mode.ECB, padding: jm.CryptoJS.pad.NoPadding });
-  var decryptedStr = decrypt.toString(jm.CryptoJS.enc.Hex);
-  return decryptedStr.toString();
-}
-
-module.exports = {
-  decryptData, //  瑙e瘑
-  encryptionData, //  鍔犲瘑
-}
diff --git a/src/utils/types.ts b/src/utils/types.ts
deleted file mode 100644
index 4453ec4..0000000
--- a/src/utils/types.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-// copy from element-plus
-
-import type { CSSProperties, Plugin } from 'vue';
-
-type OptionalKeys<T extends Record<string, unknown>> = {
-  [K in keyof T]: T extends Record<K, T[K]> ? never : K;
-}[keyof T];
-
-type RequiredKeys<T extends Record<string, unknown>> = Exclude<keyof T, OptionalKeys<T>>;
-
-type MonoArgEmitter<T, Keys extends keyof T> = <K extends Keys>(evt: K, arg?: T[K]) => void;
-
-type BiArgEmitter<T, Keys extends keyof T> = <K extends Keys>(evt: K, arg: T[K]) => void;
-
-export type EventEmitter<T extends Record<string, unknown>> = MonoArgEmitter<T, OptionalKeys<T>> &
-  BiArgEmitter<T, RequiredKeys<T>>;
-
-export type AnyFunction<T> = (...args: any[]) => T;
-
-export type PartialReturnType<T extends (...args: unknown[]) => unknown> = Partial<ReturnType<T>>;
-
-export type SFCWithInstall<T> = T & Plugin;
-
-export type Nullable<T> = T | null;
-
-export type RefElement = Nullable<HTMLElement>;
-
-export type CustomizedHTMLElement<T> = HTMLElement & T;
-
-export type Indexable<T> = {
-  [key: string]: T;
-};
-
-export type Hash<T> = Indexable<T>;
-
-export type TimeoutHandle = ReturnType<typeof global.setTimeout>;
-
-export type ComponentSize = 'large' | 'medium' | 'small' | 'mini';
-
-export type StyleValue = string | CSSProperties | Array<StyleValue>;
-
-export type Mutable<T> = { -readonly [P in keyof T]: T[P] };
diff --git a/src/utils/uuid.ts b/src/utils/uuid.ts
deleted file mode 100644
index 548bcf3..0000000
--- a/src/utils/uuid.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-const hexList: string[] = [];
-for (let i = 0; i <= 15; i++) {
-  hexList[i] = i.toString(16);
-}
-
-export function buildUUID(): string {
-  let uuid = '';
-  for (let i = 1; i <= 36; i++) {
-    if (i === 9 || i === 14 || i === 19 || i === 24) {
-      uuid += '-';
-    } else if (i === 15) {
-      uuid += 4;
-    } else if (i === 20) {
-      uuid += hexList[(Math.random() * 4) | 8];
-    } else {
-      uuid += hexList[(Math.random() * 16) | 0];
-    }
-  }
-  return uuid.replace(/-/g, '');
-}
-
-let unique = 0;
-export function buildShortUUID(prefix = ''): string {
-  const time = Date.now();
-  const random = Math.floor(Math.random() * 1000000000);
-  unique++;
-  return prefix + '_' + random + unique + String(time);
-}
diff --git a/src/views/dashboard/Analysis/api.ts b/src/views/dashboard/Analysis/api.ts
deleted file mode 100644
index 0f40443..0000000
--- a/src/views/dashboard/Analysis/api.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  loginfo = '/sys/loginfo',
-  visitInfo = '/sys/visitInfo',
-}
-/**
- * 鏃ュ織缁熻淇℃伅
- * @param params
- */
-export const getLoginfo = (params) => defHttp.get({ url: Api.loginfo, params }, { isTransformResponse: false });
-/**
- * 璁块棶閲忎俊鎭�
- * @param params
- */
-export const getVisitInfo = (params) => defHttp.get({ url: Api.visitInfo, params }, { isTransformResponse: false });
diff --git a/src/views/dashboard/Analysis/components/BdcTabCard.vue b/src/views/dashboard/Analysis/components/BdcTabCard.vue
deleted file mode 100644
index 7502ac8..0000000
--- a/src/views/dashboard/Analysis/components/BdcTabCard.vue
+++ /dev/null
@@ -1,109 +0,0 @@
-<template>
-  <a-card :loading="loading" :bordered="false" :body-style="{ padding: '0' }">
-    <div class="salesCard">
-      <a-tabs default-active-key="1" size="large" :tab-bar-style="{ marginBottom: '24px', paddingLeft: '16px' }">
-        <template #rightExtra>
-          <div class="extra-wrapper">
-            <div class="extra-item">
-              <a>浠婃棩</a>
-              <a>鏈懆</a>
-              <a>鏈湀</a>
-              <a>鏈勾</a>
-            </div>
-            <a-range-picker :style="{ width: '256px' }" />
-          </div>
-        </template>
-        <a-tab-pane loading="true" tab="鍙楃悊鐩戠" key="1">
-          <a-row>
-            <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
-              <Bar :chartData="barData" :option="{ title: { text: '鍙楃悊閲忕粺璁�', textStyle: { fontWeight: 'lighter' } } }" height="40vh" />
-            </a-col>
-            <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-              <QuickNav :loading="loading" class="enter-y" :bordered="false" :body-style="{ padding: 0 }" />
-            </a-col>
-          </a-row>
-        </a-tab-pane>
-        <a-tab-pane tab="浜や簰鐩戠" key="2">
-          <a-row>
-            <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
-              <BarMulti
-                :chartData="barMultiData"
-                :option="{ title: { text: '骞冲彴涓庨儴闂ㄤ氦浜掗噺缁熻', textStyle: { fontWeight: 'lighter' } } }"
-                height="40vh"
-              />
-            </a-col>
-            <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-              <QuickNav :loading="loading" class="enter-y" :bordered="false" :body-style="{ padding: 0 }" />
-            </a-col>
-          </a-row>
-        </a-tab-pane>
-        <a-tab-pane tab="瀛樺偍鐩戠" key="3">
-          <a-row>
-            <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24" style="display: flex">
-              <Gauge :chartData="{ name: 'C鐩�', value: 70 }" height="30vh"></Gauge>
-              <Gauge :chartData="{ name: 'D鐩�', value: 50 }" height="30vh"></Gauge>
-            </a-col>
-            <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-              <QuickNav :loading="loading" class="enter-y" :bordered="false" :body-style="{ padding: 0 }" />
-            </a-col>
-          </a-row>
-        </a-tab-pane>
-      </a-tabs>
-    </div>
-  </a-card>
-</template>
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import Bar from '/@/components/chart/Bar.vue';
-  import BarMulti from '/@/components/chart/BarMulti.vue';
-  import Gauge from '/@/components/chart/Gauge.vue';
-  import QuickNav from './QuickNav.vue';
-
-  defineProps({
-    loading: {
-      type: Boolean,
-    },
-  });
-
-  const rankList = [];
-  for (let i = 0; i < 7; i++) {
-    rankList.push({
-      name: '鐧介弓宀� ' + (i + 1) + ' 鍙峰簵',
-      total: 1234.56 - i * 100,
-    });
-  }
-
-  const barData = [];
-  for (let i = 0; i < 12; i += 1) {
-    barData.push({
-      name: `${i + 1}鏈坄,
-      value: Math.floor(Math.random() * 1000) + 200,
-    });
-  }
-  const barMultiData = [];
-  for (let j = 0; j < 2; j++) {
-    for (let i = 0; i < 12; i += 1) {
-      barMultiData.push({
-        type: j == 0 ? 'jeecg' : 'jeebt',
-        name: `${i + 1}鏈坄,
-        value: Math.floor(Math.random() * 1000) + 200,
-      });
-    }
-  }
-</script>
-
-<style lang="less" scoped>
-  .extra-wrapper {
-    line-height: 55px;
-    padding-right: 24px;
-
-    .extra-item {
-      display: inline-block;
-      margin-right: 24px;
-
-      a {
-        margin-left: 24px;
-      }
-    }
-  }
-</style>
diff --git a/src/views/dashboard/Analysis/components/ChartGroupCard.vue b/src/views/dashboard/Analysis/components/ChartGroupCard.vue
deleted file mode 100644
index fd6a3e0..0000000
--- a/src/views/dashboard/Analysis/components/ChartGroupCard.vue
+++ /dev/null
@@ -1,104 +0,0 @@
-<template>
-  <div class="md:flex">
-    <template v-for="(item, index) in dataList" :key="item.title">
-      <ChartCard
-        :loading="loading"
-        :title="item.title"
-        :total="getTotal(item.total, index)"
-        class="md:w-1/4 w-full !md:mt-0 !mt-4"
-        :class="[index + 1 < 4 && '!md:mr-4']"
-      >
-        <template #action>
-          <a-tooltip title="鎸囨爣璇存槑">
-            <Icon :icon="item.icon" :size="20" />
-          </a-tooltip>
-        </template>
-        <div v-if="type === 'chart'">
-          <Trend term="鍛ㄥ悓姣�" :percentage="12" v-if="index === 0" />
-          <Trend term="鏃ュ悓姣�" :percentage="11" v-if="index === 0" :type="false" />
-
-          <Line v-if="index === 1" :option="option" :chartData="chartData" height="50px"></Line>
-
-          <Bar v-if="index === 2" :option="option" :chartData="chartData" height="50px"></Bar>
-
-          <Progress v-if="index === 3" :percent="78" :show-info="false"></Progress>
-        </div>
-        <div v-else>
-          <Line v-if="index === 0" :option="option" :chartData="chartData" height="50px"></Line>
-
-          <Line v-if="index === 1" :option="option" :chartData="chartData" height="50px"></Line>
-
-          <Bar v-if="index === 2" :option="option" :chartData="chartData" height="50px"></Bar>
-
-          <Bar v-if="index === 3" :option="option" :chartData="chartData" height="50px"></Bar>
-        </div>
-        <template #footer v-if="type === 'chart'">
-          <span v-if="inde !== 3"
-            >{{ item.footer }}<span>{{ item.value }}</span></span
-          >
-          <Trend term="鍛ㄥ悓姣�" :percentage="12" v-if="index === 3" />
-          <Trend term="鏃ュ悓姣�" :percentage="11" v-if="index === 3" :type="false" />
-        </template>
-        <template #footer v-else>
-          <span
-            >{{ item.footer }}<span>{{ item.value }}</span></span
-          >
-        </template>
-      </ChartCard>
-    </template>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref, computed } from 'vue';
-  import { Icon } from '/@/components/Icon';
-  import { Progress } from 'ant-design-vue';
-  import ChartCard from '/@/components/chart/ChartCard.vue';
-  import Trend from '/@/components/chart/Trend.vue';
-  import Bar from '/@/components/chart/Bar.vue';
-  import Line from '/@/components/chart/Line.vue';
-  import { chartCardList, bdcCardList } from '../data';
-
-  const props = defineProps({
-    loading: {
-      type: Boolean,
-    },
-    type: {
-      type: String,
-      default: 'chart',
-    },
-  });
-  const option = ref({ xAxis: { show: false, boundaryGap: false }, yAxis: { show: false, boundaryGap: false, max: 220 } });
-
-  const chartData = ref([
-    {
-      name: '1鏈�',
-      value: 50,
-    },
-    {
-      name: '2鏈�',
-      value: 100,
-    },
-    {
-      name: '3鏈�',
-      value: 150,
-    },
-    {
-      name: '4鏈�',
-      value: 40,
-    },
-    {
-      name: '5鏈�',
-      value: 110,
-    },
-    {
-      name: '6鏈�',
-      value: 120,
-    },
-  ]);
-
-  const dataList = computed(() => (props.type === 'dbc' ? bdcCardList : chartCardList));
-
-  function getTotal(total, index) {
-    return index === 0 ? `锟�${total}` : index === 3 ? `${total}%` : total;
-  }
-</script>
diff --git a/src/views/dashboard/Analysis/components/GrowCard.vue b/src/views/dashboard/Analysis/components/GrowCard.vue
deleted file mode 100644
index af3eb60..0000000
--- a/src/views/dashboard/Analysis/components/GrowCard.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-<template>
-  <div class="md:flex">
-    <template v-for="(item, index) in growCardList" :key="item.title">
-      <Card
-        size="small"
-        :loading="loading"
-        :title="item.title"
-        class="md:w-1/4 w-full !md:mt-0 !mt-4"
-        :class="[index + 1 < 4 && '!md:mr-4']"
-        :canExpan="false"
-      >
-        <template #extra>
-          <Tag :color="item.color">{{ item.action }}</Tag>
-        </template>
-
-        <div class="py-4 px-4 flex justify-between">
-          <CountTo prefix="$" :startVal="1" :endVal="item.value" class="text-2xl" />
-          <Icon :icon="item.icon" :size="40" />
-        </div>
-
-        <div class="p-2 px-4 flex justify-between">
-          <span>鎬粄{ item.title }}</span>
-          <CountTo prefix="$" :startVal="1" :endVal="item.total" />
-        </div>
-      </Card>
-    </template>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { CountTo } from '/@/components/CountTo/index';
-  import { Icon } from '/@/components/Icon';
-  import { Tag, Card } from 'ant-design-vue';
-  import { growCardList } from '../data';
-
-  defineProps({
-    loading: {
-      type: Boolean,
-    },
-  });
-</script>
diff --git a/src/views/dashboard/Analysis/components/QuickNav.vue b/src/views/dashboard/Analysis/components/QuickNav.vue
deleted file mode 100644
index 149f426..0000000
--- a/src/views/dashboard/Analysis/components/QuickNav.vue
+++ /dev/null
@@ -1,56 +0,0 @@
-<template>
-  <Card title="蹇嵎瀵艰埅" v-bind="$attrs">
-    <template v-for="item in navItems" :key="item">
-      <CardGrid @click="goPage">
-        <span class="flex flex-col items-center">
-          <Icon :icon="item.icon" :color="item.color" size="20" />
-          <span class="text-md mt-2">{{ item.title }}</span>
-        </span>
-      </CardGrid>
-    </template>
-  </Card>
-</template>
-<script lang="ts" setup>
-  import { Card } from 'ant-design-vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { Icon } from '/@/components/Icon';
-
-  const CardGrid = Card.Grid;
-  const $message = useMessage();
-  const navItems = [
-    {
-      title: '涓氬姟鍙楃悊',
-      icon: 'ion:home-outline',
-      color: '#1fdaca',
-    },
-    {
-      title: '涓氬姟绠$悊',
-      icon: 'ion:grid-outline',
-      color: '#bf0c2c',
-    },
-    {
-      title: '鏂囦欢绠$悊',
-      icon: 'ion:layers-outline',
-      color: '#e18525',
-    },
-    {
-      title: '淇℃伅鏌ヨ',
-      icon: 'ion:settings-outline',
-      color: '#3fb27f',
-    }, 
-		{
-				title: '閫氱煡鍏憡',
-				icon: 'ion:notifications',
-				color: '#13b0ff',
-		}, 
-		{
-				title: '鎴戠殑浠诲姟',
-				icon: 'ion:person-stalker',
-				color: '#b27315',
-		}
-  ];
-
-  function goPage() {
-    $message.createMessage.success('鏍规嵁涓氬姟鑷澶勭悊璺宠浆椤甸潰!');
-  }
-</script>
diff --git a/src/views/dashboard/Analysis/components/SaleTabCard.vue b/src/views/dashboard/Analysis/components/SaleTabCard.vue
deleted file mode 100644
index 3f4b9d4..0000000
--- a/src/views/dashboard/Analysis/components/SaleTabCard.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-<template>
-  <a-card :loading="loading" :bordered="false" :body-style="{ padding: '0' }">
-    <div class="salesCard">
-      <a-tabs default-active-key="1" size="large" :tab-bar-style="{ marginBottom: '24px', paddingLeft: '16px' }">
-        <template #rightExtra>
-          <div class="extra-wrapper">
-            <div class="extra-item">
-              <a>浠婃棩</a>
-              <a>鏈懆</a>
-              <a>鏈湀</a>
-              <a>鏈勾</a>
-            </div>
-            <a-range-picker :style="{ width: '256px' }" />
-          </div>
-        </template>
-        <a-tab-pane loading="true" tab="閿�鍞" key="1">
-          <a-row>
-            <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
-              <Bar :chartData="barData" :option="{ title: { text: '閿�鍞鎺掕', textStyle: { fontWeight: 'lighter' } } }" height="40vh" />
-            </a-col>
-            <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-              <RankList title="闂ㄥ簵閿�鍞帓琛屾" :list="rankList" />
-            </a-col>
-          </a-row>
-        </a-tab-pane>
-        <a-tab-pane tab="閿�鍞秼鍔�" key="2">
-          <a-row>
-            <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
-              <Bar :chartData="barData.reverse()" :option="{ title: { text: '閿�鍞鎺掕', textStyle: { fontWeight: 'lighter' } } }" height="40vh" />
-            </a-col>
-            <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-              <RankList title="闂ㄥ簵閿�鍞帓琛屾" :list="rankList" />
-            </a-col>
-          </a-row>
-        </a-tab-pane>
-      </a-tabs>
-    </div>
-  </a-card>
-</template>
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import Bar from '/@/components/chart/Bar.vue';
-  import RankList from '/@/components/chart/RankList.vue';
-
-  defineProps({
-    loading: {
-      type: Boolean,
-    },
-  });
-  const rankList = [];
-  for (let i = 0; i < 7; i++) {
-    rankList.push({
-      name: '鐧介弓宀� ' + (i + 1) + ' 鍙峰簵',
-      total: 1234.56 - i * 100,
-    });
-  }
-
-  const barData = [];
-  for (let i = 0; i < 12; i += 1) {
-    barData.push({
-      name: `${i + 1}鏈坄,
-      value: Math.floor(Math.random() * 1000) + 200,
-    });
-  }
-</script>
-
-<style lang="less" scoped>
-  .extra-wrapper {
-    line-height: 55px;
-    padding-right: 24px;
-
-    .extra-item {
-      display: inline-block;
-      margin-right: 24px;
-
-      a {
-        margin-left: 24px;
-      }
-    }
-  }
-</style>
diff --git a/src/views/dashboard/Analysis/components/SalesProductPie.vue b/src/views/dashboard/Analysis/components/SalesProductPie.vue
deleted file mode 100644
index 6dc41fb..0000000
--- a/src/views/dashboard/Analysis/components/SalesProductPie.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-<template>
-  <Card title="鎴愪氦鍗犳瘮" :loading="loading">
-    <div ref="chartRef" :style="{ width, height }"></div>
-  </Card>
-</template>
-<script lang="ts" setup>
-  import { Ref, ref, watch } from 'vue';
-  import { Card } from 'ant-design-vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  const props = defineProps({
-    loading: Boolean,
-    width: {
-      type: String as PropType<string>,
-      default: '100%',
-    },
-    height: {
-      type: String as PropType<string>,
-      default: '300px',
-    },
-  });
-
-  const chartRef = ref<HTMLDivElement | null>(null);
-  const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
-  watch(
-    () => props.loading,
-    () => {
-      if (props.loading) {
-        return;
-      }
-      setOptions({
-        tooltip: {
-          trigger: 'item',
-        },
-
-        series: [
-          {
-            name: '璁块棶鏉ユ簮',
-            type: 'pie',
-            radius: '80%',
-            center: ['50%', '50%'],
-            color: ['#5ab1ef', '#b6a2de', '#67e0e3', '#2ec7c9'],
-            data: [
-              { value: 500, name: '鐢靛瓙浜у搧' },
-              { value: 310, name: '鏈嶈' },
-              { value: 274, name: '鍖栧鍝�' },
-              { value: 400, name: '瀹跺眳' },
-            ].sort(function (a, b) {
-              return a.value - b.value;
-            }),
-            roseType: 'radius',
-            animationType: 'scale',
-            animationEasing: 'exponentialInOut',
-            animationDelay: function () {
-              return Math.random() * 400;
-            },
-          },
-        ],
-      });
-    },
-    { immediate: true }
-  );
-</script>
diff --git a/src/views/dashboard/Analysis/components/SiteAnalysis.vue b/src/views/dashboard/Analysis/components/SiteAnalysis.vue
deleted file mode 100644
index 570861a..0000000
--- a/src/views/dashboard/Analysis/components/SiteAnalysis.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-<template>
-  <Card :tab-list="tabListTitle" v-bind="$attrs" :active-tab-key="activeKey" @tabChange="onTabChange">
-    <p v-if="activeKey === 'tab1'">
-      <VisitAnalysis />
-    </p>
-    <p v-if="activeKey === 'tab2'">
-      <VisitAnalysisBar />
-    </p>
-  </Card>
-</template>
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { Card } from 'ant-design-vue';
-  import VisitAnalysis from './VisitAnalysis.vue';
-  import VisitAnalysisBar from './VisitAnalysisBar.vue';
-
-  const activeKey = ref('tab1');
-
-  const tabListTitle = [
-    {
-      key: 'tab1',
-      tab: '娴侀噺瓒嬪娍',
-    },
-    {
-      key: 'tab2',
-      tab: '璁块棶閲�',
-    },
-  ];
-
-  function onTabChange(key) {
-    activeKey.value = key;
-  }
-</script>
diff --git a/src/views/dashboard/Analysis/components/VisitAnalysis.vue b/src/views/dashboard/Analysis/components/VisitAnalysis.vue
deleted file mode 100644
index 36b773f..0000000
--- a/src/views/dashboard/Analysis/components/VisitAnalysis.vue
+++ /dev/null
@@ -1,100 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts" setup>
-  import { onMounted, ref, Ref } from 'vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-  import { basicProps } from './props';
-
-  defineProps({
-    ...basicProps,
-  });
-  const chartRef = ref<HTMLDivElement | null>(null);
-  const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
-
-  onMounted(() => {
-    setOptions({
-      tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-          lineStyle: {
-            width: 1,
-            color: '#019680',
-          },
-        },
-      },
-      xAxis: {
-        type: 'category',
-        boundaryGap: false,
-        data: [
-          '6:00',
-          '7:00',
-          '8:00',
-          '9:00',
-          '10:00',
-          '11:00',
-          '12:00',
-          '13:00',
-          '14:00',
-          '15:00',
-          '16:00',
-          '17:00',
-          '18:00',
-          '19:00',
-          '20:00',
-          '21:00',
-          '22:00',
-          '23:00',
-        ],
-        splitLine: {
-          show: true,
-          lineStyle: {
-            width: 1,
-            type: 'solid',
-            color: 'rgba(226,226,226,0.5)',
-          },
-        },
-        axisTick: {
-          show: false,
-        },
-      },
-      yAxis: [
-        {
-          type: 'value',
-          max: 80000,
-          splitNumber: 4,
-          axisTick: {
-            show: false,
-          },
-          splitArea: {
-            show: true,
-            areaStyle: {
-              color: ['rgba(255,255,255,0.2)', 'rgba(226,226,226,0.2)'],
-            },
-          },
-        },
-      ],
-      grid: { left: '1%', right: '1%', top: '2  %', bottom: 0, containLabel: true },
-      series: [
-        {
-          smooth: true,
-          data: [111, 222, 4000, 18000, 33333, 55555, 66666, 33333, 14000, 36000, 66666, 44444, 22222, 11111, 4000, 2000, 500, 333, 222, 111],
-          type: 'line',
-          areaStyle: {},
-          itemStyle: {
-            color: '#5ab1ef',
-          },
-        },
-        {
-          smooth: true,
-          data: [33, 66, 88, 333, 3333, 5000, 18000, 3000, 1200, 13000, 22000, 11000, 2221, 1201, 390, 198, 60, 30, 22, 11],
-          type: 'line',
-          areaStyle: {},
-          itemStyle: {
-            color: '#019680',
-          },
-        },
-      ],
-    });
-  });
-</script>
diff --git a/src/views/dashboard/Analysis/components/VisitAnalysisBar.vue b/src/views/dashboard/Analysis/components/VisitAnalysisBar.vue
deleted file mode 100644
index a1a2478..0000000
--- a/src/views/dashboard/Analysis/components/VisitAnalysisBar.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts" setup>
-  import { onMounted, ref, Ref } from 'vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-  import { basicProps } from './props';
-
-  defineProps({
-    ...basicProps,
-  });
-
-  const chartRef = ref<HTMLDivElement | null>(null);
-  const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
-  onMounted(() => {
-    setOptions({
-      tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-          lineStyle: {
-            width: 1,
-            color: '#019680',
-          },
-        },
-      },
-      grid: { left: '1%', right: '1%', top: '2  %', bottom: 0, containLabel: true },
-      xAxis: {
-        type: 'category',
-        data: ['1鏈�', '2鏈�', '3鏈�', '4鏈�', '5鏈�', '6鏈�', '7鏈�', '8鏈�', '9鏈�', '10鏈�', '11鏈�', '12鏈�'],
-      },
-      yAxis: {
-        type: 'value',
-        max: 8000,
-        splitNumber: 4,
-      },
-      series: [
-        {
-          data: [3000, 2000, 3333, 5000, 3200, 4200, 3200, 2100, 3000, 5100, 6000, 3200, 4800],
-          type: 'bar',
-          barMaxWidth: 80,
-        },
-      ],
-    });
-  });
-</script>
diff --git a/src/views/dashboard/Analysis/components/VisitRadar.vue b/src/views/dashboard/Analysis/components/VisitRadar.vue
deleted file mode 100644
index 4f35287..0000000
--- a/src/views/dashboard/Analysis/components/VisitRadar.vue
+++ /dev/null
@@ -1,100 +0,0 @@
-<template>
-  <Card title="杞寲鐜�" :loading="loading">
-    <div ref="chartRef" :style="{ width, height }"></div>
-  </Card>
-</template>
-<script lang="ts" setup>
-  import { Ref, ref, watch } from 'vue';
-  import { Card } from 'ant-design-vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  const props = defineProps({
-    loading: Boolean,
-    width: {
-      type: String as PropType<string>,
-      default: '100%',
-    },
-    height: {
-      type: String as PropType<string>,
-      default: '300px',
-    },
-  });
-
-  const chartRef = ref<HTMLDivElement | null>(null);
-  const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
-  watch(
-    () => props.loading,
-    () => {
-      if (props.loading) {
-        return;
-      }
-      setOptions({
-        legend: {
-          bottom: 0,
-          data: ['璁块棶', '璐拱'],
-        },
-        tooltip: {},
-        radar: {
-          radius: '60%',
-          splitNumber: 8,
-          indicator: [
-            {
-              text: '鐢佃剳',
-              max: 100,
-            },
-            {
-              text: '鍏呯數鍣�',
-              max: 100,
-            },
-            {
-              text: '鑰虫満',
-              max: 100,
-            },
-            {
-              text: '鎵嬫満',
-              max: 100,
-            },
-            {
-              text: 'Ipad',
-              max: 100,
-            },
-            {
-              text: '鑰虫満',
-              max: 100,
-            },
-          ],
-        },
-        series: [
-          {
-            type: 'radar',
-            symbolSize: 0,
-            areaStyle: {
-              shadowBlur: 0,
-              shadowColor: 'rgba(0,0,0,.2)',
-              shadowOffsetX: 0,
-              shadowOffsetY: 10,
-              opacity: 1,
-            },
-            data: [
-              {
-                value: [90, 50, 86, 40, 50, 20],
-                name: '璁块棶',
-                itemStyle: {
-                  color: '#b6a2de',
-                },
-              },
-              {
-                value: [70, 75, 70, 76, 20, 85],
-                name: '璐拱',
-                itemStyle: {
-                  color: '#5ab1ef',
-                },
-              },
-            ],
-          },
-        ],
-      });
-    },
-    { immediate: true }
-  );
-</script>
diff --git a/src/views/dashboard/Analysis/components/VisitSource.vue b/src/views/dashboard/Analysis/components/VisitSource.vue
deleted file mode 100644
index 7b8e32a..0000000
--- a/src/views/dashboard/Analysis/components/VisitSource.vue
+++ /dev/null
@@ -1,80 +0,0 @@
-<template>
-  <Card title="璁块棶鏉ユ簮" :loading="loading">
-    <div ref="chartRef" :style="{ width, height }"></div>
-  </Card>
-</template>
-<script lang="ts" setup>
-  import { Ref, ref, watch } from 'vue';
-  import { Card } from 'ant-design-vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-  const props = defineProps({
-    loading: Boolean,
-    width: {
-      type: String as PropType<string>,
-      default: '100%',
-    },
-    height: {
-      type: String as PropType<string>,
-      default: '300px',
-    },
-  });
-  const chartRef = ref<HTMLDivElement | null>(null);
-  const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
-  watch(
-    () => props.loading,
-    () => {
-      if (props.loading) {
-        return;
-      }
-      setOptions({
-        tooltip: {
-          trigger: 'item',
-        },
-        legend: {
-          bottom: '1%',
-          left: 'center',
-        },
-        series: [
-          {
-            color: ['#5ab1ef', '#b6a2de', '#67e0e3', '#2ec7c9'],
-            name: '璁块棶鏉ユ簮',
-            type: 'pie',
-            radius: ['40%', '70%'],
-            avoidLabelOverlap: false,
-            itemStyle: {
-              borderRadius: 10,
-              borderColor: '#fff',
-              borderWidth: 2,
-            },
-            label: {
-              show: false,
-              position: 'center',
-            },
-            emphasis: {
-              label: {
-                show: true,
-                fontSize: '12',
-                fontWeight: 'bold',
-              },
-            },
-            labelLine: {
-              show: false,
-            },
-            data: [
-              { value: 1048, name: '鎼滅储寮曟搸' },
-              { value: 735, name: '鐩存帴璁块棶' },
-              { value: 580, name: '閭欢钀ラ攢' },
-              { value: 484, name: '鑱旂洘骞垮憡' },
-            ],
-            animationType: 'scale',
-            animationEasing: 'exponentialInOut',
-            animationDelay: function () {
-              return Math.random() * 100;
-            },
-          },
-        ],
-      });
-    },
-    { immediate: true }
-  );
-</script>
diff --git a/src/views/dashboard/Analysis/components/props.ts b/src/views/dashboard/Analysis/components/props.ts
deleted file mode 100644
index 8643650..0000000
--- a/src/views/dashboard/Analysis/components/props.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { PropType } from 'vue';
-
-export interface BasicProps {
-  width: string;
-  height: string;
-}
-export const basicProps = {
-  width: {
-    type: String as PropType<string>,
-    default: '100%',
-  },
-  height: {
-    type: String as PropType<string>,
-    default: '280px',
-  },
-};
diff --git a/src/views/dashboard/Analysis/data.ts b/src/views/dashboard/Analysis/data.ts
deleted file mode 100644
index 94a0e42..0000000
--- a/src/views/dashboard/Analysis/data.ts
+++ /dev/null
@@ -1,221 +0,0 @@
-export interface GrowCardItem {
-  icon: string;
-  title: string;
-  value?: number;
-  total: number;
-  color?: string;
-  action?: string;
-  footer?: string;
-}
-
-export const growCardList: GrowCardItem[] = [
-  {
-    title: '璁块棶鏁�',
-    icon: 'visit-count|svg',
-    value: 2000,
-    total: 120000,
-    color: 'green',
-    action: '鏈�',
-  },
-  {
-    title: '鎴愪氦棰�',
-    icon: 'total-sales|svg',
-    value: 20000,
-    total: 500000,
-    color: 'blue',
-    action: '鏈�',
-  },
-  {
-    title: '涓嬭浇鏁�',
-    icon: 'download-count|svg',
-    value: 8000,
-    total: 120000,
-    color: 'orange',
-    action: '鍛�',
-  },
-  {
-    title: '鎴愪氦鏁�',
-    icon: 'transaction|svg',
-    value: 5000,
-    total: 50000,
-    color: 'purple',
-    action: '骞�',
-  },
-];
-
-export const chartCardList: GrowCardItem[] = [
-  {
-    title: '鎬婚攢鍞',
-    icon: 'visit-count|svg',
-    total: 126560,
-    value: 234.56,
-    footer: '鏃ュ潎閿�鍞',
-  },
-  {
-    title: '璁㈠崟閲�',
-    icon: 'total-sales|svg',
-    value: 1234,
-    total: 8846,
-    color: 'blue',
-    footer: '鏃ヨ鍗曢噺',
-  },
-  {
-    title: '鏀粯绗旀暟',
-    icon: 'download-count|svg',
-    value: 60,
-    total: 6560,
-    color: 'orange',
-    footer: '杞寲鐜�',
-  },
-  {
-    title: '杩愯惀娲诲姩鏁堟灉',
-    icon: 'transaction|svg',
-    total: 78,
-  },
-];
-export const bdcCardList: GrowCardItem[] = [
-  {
-    title: '鍙楃悊閲�',
-    icon: 'ant-design:info-circle-outlined',
-    total: 100,
-    value: 60,
-    footer: '浠婃棩鍙楃悊閲�',
-  },
-  {
-    title: '鍔炵粨閲�',
-    icon: 'ant-design:info-circle-outlined',
-    value: 54,
-    total: 87,
-    color: 'blue',
-    footer: '浠婃棩鍔炵粨閲�',
-  },
-  {
-    title: '鐢ㄦ埛鍙楃悊閲�',
-    icon: 'ant-design:info-circle-outlined',
-    value: 13,
-    total: 15,
-    color: 'orange',
-    footer: '鐢ㄦ埛浠婃棩鍙楃悊閲�',
-  },
-  {
-    title: '鐢ㄦ埛鍔炵粨閲�',
-    icon: 'ant-design:info-circle-outlined',
-    total: 9,
-    value: 7,
-    footer: '鐢ㄦ埛浠婃棩鍔炵粨閲�',
-  },
-];
-
-export const table = {
-  dataSource: [
-    { reBizCode: '1', type: '杞Щ鐧昏', acceptBy: '寮犱笁', acceptDate: '2019-01-22', curNode: '浠诲姟鍒嗘淳', flowRate: 60 },
-    { reBizCode: '2', type: '鎶垫娂鐧昏', acceptBy: '鏉庡洓', acceptDate: '2019-01-23', curNode: '棰嗗瀹℃牳', flowRate: 30 },
-    { reBizCode: '3', type: '杞Щ鐧昏', acceptBy: '鐜嬫', acceptDate: '2019-01-25', curNode: '浠诲姟澶勭悊', flowRate: 20 },
-    { reBizCode: '4', type: '杞Щ鐧昏', acceptBy: '璧垫ゼ', acceptDate: '2019-11-22', curNode: '閮ㄩ棬瀹℃牳', flowRate: 80 },
-    { reBizCode: '5', type: '杞Щ鐧昏', acceptBy: '閽卞氨', acceptDate: '2019-12-12', curNode: '浠诲姟鍒嗘淳', flowRate: 90 },
-    { reBizCode: '6', type: '杞Щ鐧昏', acceptBy: '瀛欏惂', acceptDate: '2019-03-06', curNode: '浠诲姟澶勭悊', flowRate: 10 },
-    { reBizCode: '7', type: '鎶垫娂鐧昏', acceptBy: '鍛ㄥぇ', acceptDate: '2019-04-13', curNode: '浠诲姟鍒嗘淳', flowRate: 100 },
-    { reBizCode: '8', type: '鎶垫娂鐧昏', acceptBy: '鍚翠簩', acceptDate: '2019-05-09', curNode: '浠诲姟涓婃姤', flowRate: 50 },
-    { reBizCode: '9', type: '鎶垫娂鐧昏', acceptBy: '閮戠埥', acceptDate: '2019-07-12', curNode: '浠诲姟澶勭悊', flowRate: 63 },
-    { reBizCode: '20', type: '鎶垫娂鐧昏', acceptBy: '鏋楁湁', acceptDate: '2019-12-12', curNode: '浠诲姟鎵撳洖', flowRate: 59 },
-    { reBizCode: '11', type: '杞Щ鐧昏', acceptBy: '鐮佷簯', acceptDate: '2019-09-10', curNode: '浠诲姟绛炬敹', flowRate: 87 },
-  ],
-  columns: [
-    {
-      title: '涓氬姟鍙�',
-      align: 'center',
-      dataIndex: 'reBizCode',
-    },
-    {
-      title: '涓氬姟绫诲瀷',
-      align: 'center',
-      dataIndex: 'type',
-    },
-    {
-      title: '鍙楃悊浜�',
-      align: 'center',
-      dataIndex: 'acceptBy',
-    },
-    {
-      title: '鍙楃悊鏃堕棿',
-      align: 'center',
-      dataIndex: 'acceptDate',
-    },
-    {
-      title: '褰撳墠鑺傜偣',
-      align: 'center',
-      dataIndex: 'curNode',
-    },
-    {
-      title: '鍔炵悊鏃堕暱',
-      align: 'center',
-      dataIndex: 'flowRate',
-      slots: { customRender: 'flowRate' },
-    },
-  ],
-  ipagination: {
-    current: 1,
-    pageSize: 5,
-    pageSizeOptions: ['10', '20', '30'],
-    showTotal: (total, range) => {
-      return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�';
-    },
-    showQuickJumper: true,
-    showSizeChanger: true,
-    total: 0,
-  },
-};
-export const table1 = {
-  dataSource: [
-    { reBizCode: 'A001', type: '杞Щ鐧昏', acceptBy: '寮犲洓', acceptDate: '2019-01-22', curNode: '浠诲姟鍒嗘淳', flowRate: 12 },
-    { reBizCode: 'A002', type: '鎶垫娂鐧昏', acceptBy: '鏉庡惂', acceptDate: '2019-01-23', curNode: '浠诲姟绛炬敹', flowRate: 3 },
-    { reBizCode: 'A003', type: '杞Щ鐧昏', acceptBy: '鐜嬩笁', acceptDate: '2019-01-25', curNode: '浠诲姟澶勭悊', flowRate: 24 },
-    { reBizCode: 'A004', type: '杞Щ鐧昏', acceptBy: '璧典簩', acceptDate: '2019-11-22', curNode: '閮ㄩ棬瀹℃牳', flowRate: 10 },
-    { reBizCode: 'A005', type: '杞Щ鐧昏', acceptBy: '閽卞ぇ', acceptDate: '2019-12-12', curNode: '浠诲姟绛炬敹', flowRate: 8 },
-    { reBizCode: 'A006', type: '杞Щ鐧昏', acceptBy: '瀛欏氨', acceptDate: '2019-03-06', curNode: '浠诲姟澶勭悊', flowRate: 10 },
-    { reBizCode: 'A007', type: '鎶垫娂鐧昏', acceptBy: '鍛ㄦ檿', acceptDate: '2019-04-13', curNode: '閮ㄩ棬瀹℃牳', flowRate: 24 },
-    { reBizCode: 'A008', type: '鎶垫娂鐧昏', acceptBy: '鍚存湁', acceptDate: '2019-05-09', curNode: '閮ㄩ棬瀹℃牳', flowRate: 30 },
-    { reBizCode: 'A009', type: '鎶垫娂鐧昏', acceptBy: '閮戞', acceptDate: '2019-07-12', curNode: '浠诲姟鍒嗘淳', flowRate: 1 },
-    { reBizCode: 'A0010', type: '鎶垫娂鐧昏', acceptBy: '鏋楃埥', acceptDate: '2019-12-12', curNode: '閮ㄩ棬瀹℃牳', flowRate: 16 },
-    { reBizCode: 'A0011', type: '杞Щ鐧昏', acceptBy: '鐮佹ゼ', acceptDate: '2019-09-10', curNode: '閮ㄩ棬瀹℃牳', flowRate: 7 },
-  ],
-  columns: [
-    {
-      title: '涓氬姟鍙�',
-      align: 'center',
-      dataIndex: 'reBizCode',
-    },
-    {
-      title: '鍙楃悊浜�',
-      align: 'center',
-      dataIndex: 'acceptBy',
-    },
-    {
-      title: '鍙戣捣鏃堕棿',
-      align: 'center',
-      dataIndex: 'acceptDate',
-    },
-    {
-      title: '褰撳墠鑺傜偣',
-      align: 'center',
-      dataIndex: 'curNode',
-    },
-    {
-      title: '瓒呮椂鏃堕棿',
-      align: 'center',
-      dataIndex: 'flowRate',
-      slots: { customRender: 'flowRate' },
-    },
-  ],
-  ipagination: {
-    current: 1,
-    pageSize: 5,
-    pageSizeOptions: ['10', '20', '30'],
-    showTotal: (total, range) => {
-      return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�';
-    },
-    showQuickJumper: true,
-    showSizeChanger: true,
-    total: 0,
-  },
-};
diff --git a/src/views/dashboard/Analysis/homePage/IndexBdc.vue b/src/views/dashboard/Analysis/homePage/IndexBdc.vue
deleted file mode 100644
index 18edf0c..0000000
--- a/src/views/dashboard/Analysis/homePage/IndexBdc.vue
+++ /dev/null
@@ -1,233 +0,0 @@
-<template>
-  <div class="p-4">
-    <ChartGroupCard class="enter-y" :loading="loading" type="bdc" />
-    <BdcTabCard class="!my-4 enter-y" :loading="loading" />
-    <a-row>
-      <a-col :span="24">
-        <a-card :loading="loading" :class="{ 'anty-list-cust': true }" :bordered="false">
-          <a-tabs v-model:activeKey="indexBottomTab" size="large" :tab-bar-style="{ marginBottom: '24px', paddingLeft: '16px' }">
-            <template #rightExtra>
-              <div class="extra-wrapper">
-                <a-radio-group v-model:value="indexRegisterType" @change="changeRegisterType">
-                  <a-radio-button value="杞Щ鐧昏">杞Щ鐧昏</a-radio-button>
-                  <a-radio-button value="鎶垫娂鐧昏">鎶垫娂鐧昏</a-radio-button>
-                  <a-radio-button value="">鎵�鏈�</a-radio-button>
-                </a-radio-group>
-              </div>
-            </template>
-
-            <a-tab-pane tab="涓氬姟娴佺▼闄愭椂鐩戠" key="1">
-              <a-table
-                :dataSource="dataSource"
-                size="default"
-                rowKey="reBizCode"
-                :columns="table.columns"
-                :pagination="ipagination"
-                @change="tableChange"
-              >
-                <template #flowRate="{ text, record, index }">
-                  <Progress
-                    :strokeColor="getPercentColor(record.flowRate)"
-                    :format="getPercentFormat"
-                    :percent="getFlowRateNumber(record.flowRate)"
-                    style="width: 80px"
-                  />
-                </template>
-              </a-table>
-            </a-tab-pane>
-
-            <a-tab-pane loading="true" tab="涓氬姟鑺傜偣闄愭椂鐩戠" key="2">
-              <a-table
-                :dataSource="dataSource1"
-                size="default"
-                rowKey="reBizCode"
-                :columns="table1.columns"
-                :pagination="ipagination1"
-                @change="tableChange1"
-              >
-                <template #flowRate="{ text, record, index }">
-                  <span style="color: red">{{ record.flowRate }}灏忔椂</span>
-                </template>
-              </a-table>
-            </a-tab-pane>
-          </a-tabs>
-        </a-card>
-      </a-col>
-    </a-row>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref, unref } from 'vue';
-  import { Progress } from 'ant-design-vue';
-  import ChartGroupCard from '../components/ChartGroupCard.vue';
-  import BdcTabCard from '../components/BdcTabCard.vue';
-  import LineMulti from '/@/components/chart/LineMulti.vue';
-  import HeadInfo from '/@/components/chart/HeadInfo.vue';
-  import { table, table1 } from '../data';
-
-  const loading = ref(true);
-
-  setTimeout(() => {
-    loading.value = false;
-  }, 500);
-
-  const indexBottomTab = ref('1');
-  const indexRegisterType = ref('杞Щ鐧昏');
-  const dataSource = ref([]);
-  const dataSource1 = ref([]);
-  const ipagination = ref(table.ipagination);
-  const ipagination1 = ref(table1.ipagination);
-
-  function changeRegisterType(e) {
-    indexRegisterType.value = e.target.value;
-    if (unref(indexBottomTab) == '1') {
-      loadDataSource();
-    } else {
-      loadDataSource1();
-    }
-  }
-
-  function tableChange(pagination) {
-    ipagination.value.current = pagination.current;
-    ipagination.value.pageSize = pagination.pageSize;
-    loadDataSource();
-  }
-
-  function tableChange1(pagination) {
-    ipagination1.value.current = pagination.current;
-    ipagination1.value.pageSize = pagination.pageSize;
-    loadDataSource1();
-  }
-
-  function getFlowRateNumber(value) {
-    return +value;
-  }
-
-  function getPercentFormat(value) {
-    if (value == 100) {
-      return '瓒呮椂';
-    } else {
-      return value + '%';
-    }
-  }
-
-  function getPercentColor(value) {
-    let p = +value;
-    if (p >= 90 && p < 100) {
-      return 'rgb(244, 240, 89)';
-    } else if (p >= 100) {
-      return 'red';
-    } else {
-      return 'rgb(16, 142, 233)';
-    }
-  }
-
-  function loadDataSource() {
-    dataSource.value = table.dataSource.filter((item) => {
-      if (!unref(indexRegisterType)) {
-        return true;
-      }
-      return item.type == unref(indexRegisterType);
-    });
-  }
-
-  function loadDataSource1() {
-    dataSource1.value = table1.dataSource.filter((item) => {
-      if (!unref(indexRegisterType)) {
-        return true;
-      }
-      return item.type == unref(indexRegisterType);
-    });
-  }
-
-  loadDataSource();
-  loadDataSource1();
-</script>
-
-<style lang="less" scoped>
-  .extra-wrapper {
-    line-height: 55px;
-    padding-right: 24px;
-
-    .extra-item {
-      display: inline-block;
-      margin-right: 24px;
-
-      a {
-        margin-left: 24px;
-      }
-    }
-  }
-
-  .item-group {
-    padding: 20px 0 8px 24px;
-    font-size: 0;
-
-    a {
-      color: rgba(0, 0, 0, 0.65);
-      display: inline-block;
-      font-size: 14px;
-      margin-bottom: 13px;
-      width: 25%;
-    }
-  }
-
-  .item-group {
-    .more-btn {
-      margin-bottom: 13px;
-      text-align: center;
-    }
-  }
-
-  .list-content-item {
-    color: rgba(0, 0, 0, 0.45);
-    display: inline-block;
-    vertical-align: middle;
-    font-size: 14px;
-    margin-left: 40px;
-  }
-
-  @media only screen and (min-width: 1600px) {
-    .list-content-item {
-      margin-left: 60px;
-    }
-  }
-
-  @media only screen and (max-width: 1300px) {
-    .list-content-item {
-      margin-left: 20px;
-    }
-
-    .width-hidden4 {
-      display: none;
-    }
-  }
-
-  .list-content-item {
-    span {
-      line-height: 20px;
-    }
-  }
-
-  .list-content-item {
-    p {
-      margin-top: 4px;
-      margin-bottom: 0;
-      line-height: 22px;
-    }
-  }
-
-  .anty-list-cust {
-    .ant-list-item-meta {
-      flex: 0.3 !important;
-    }
-  }
-
-  .anty-list-cust {
-    .ant-list-item-content {
-      flex: 1 !important;
-      justify-content: flex-start !important;
-      margin-left: 20px;
-    }
-  }
-</style>
diff --git a/src/views/dashboard/Analysis/homePage/IndexChart.vue b/src/views/dashboard/Analysis/homePage/IndexChart.vue
deleted file mode 100644
index 7a3e73a..0000000
--- a/src/views/dashboard/Analysis/homePage/IndexChart.vue
+++ /dev/null
@@ -1,116 +0,0 @@
-<template>
-  <div class="p-4">
-    <ChartGroupCard class="enter-y" :loading="loading" type="chart" />
-    <SaleTabCard class="!my-4 enter-y" :loading="loading" />
-    <a-row>
-      <a-col :span="24">
-        <a-card :loading="loading" :bordered="false" title="鏈�杩戜竴鍛ㄨ闂噺缁熻" :style="{ marginTop: '24px' }">
-          <a-row>
-            <a-col :span="6">
-              <HeadInfo title="浠婃棩IP" :content="loginfo.todayIp" icon="environment"></HeadInfo>
-            </a-col>
-            <a-col :span="6">
-              <HeadInfo title="浠婃棩璁块棶" :content="loginfo.todayVisitCount" icon="team"></HeadInfo>
-            </a-col>
-            <a-col :span="6">
-              <HeadInfo title="鎬昏闂噺" :content="loginfo.totalVisitCount" icon="rise"></HeadInfo>
-            </a-col>
-          </a-row>
-          <LineMulti :chartData="lineMultiData" height="50vh" type="line" :option="{ legend: { top: 'bottom' } }"></LineMulti>
-        </a-card>
-      </a-col>
-    </a-row>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import ChartGroupCard from '../components/ChartGroupCard.vue';
-  import SaleTabCard from '../components/SaleTabCard.vue';
-  import LineMulti from '/@/components/chart/LineMulti.vue';
-  import HeadInfo from '/@/components/chart/HeadInfo.vue';
-  import { getLoginfo, getVisitInfo } from '../api.ts';
-
-  const loading = ref(true);
-
-  setTimeout(() => {
-    loading.value = false;
-  }, 500);
-
-  const loginfo = ref({});
-  const lineMultiData = ref([]);
-
-  function initLogInfo() {
-    getLoginfo(null).then((res) => {
-      if (res.success) {
-        Object.keys(res.result).forEach((key) => {
-          res.result[key] = res.result[key] + '';
-        });
-        loginfo.value = res.result;
-      }
-    });
-    getVisitInfo(null).then((res) => {
-      if (res.success) {
-        lineMultiData.value = [];
-        res.result.forEach((item) => {
-          lineMultiData.value.push({ name: item.type, type: 'ip', value: item.ip });
-          lineMultiData.value.push({ name: item.type, type: 'visit', value: item.visit });
-        });
-      }
-    });
-  }
-
-  initLogInfo();
-</script>
-
-<style lang="less" scoped>
-  .circle-cust {
-    position: relative;
-    top: 28px;
-    left: -100%;
-  }
-
-  .extra-wrapper {
-    line-height: 55px;
-    padding-right: 24px;
-
-    .extra-item {
-      display: inline-block;
-      margin-right: 24px;
-
-      a {
-        margin-left: 24px;
-      }
-    }
-  }
-
-  /* 棣栭〉璁块棶閲忕粺璁� */
-  .head-info {
-    position: relative;
-    text-align: left;
-    padding: 0 32px 0 0;
-    min-width: 125px;
-
-    &.center {
-      text-align: center;
-      padding: 0 32px;
-    }
-
-    span {
-      color: rgba(0, 0, 0, 0.45);
-      display: inline-block;
-      font-size: 0.95rem;
-      line-height: 42px;
-      margin-bottom: 4px;
-    }
-
-    p {
-      line-height: 42px;
-      margin: 0;
-
-      a {
-        font-weight: 600;
-        font-size: 1rem;
-      }
-    }
-  }
-</style>
diff --git a/src/views/dashboard/Analysis/homePage/IndexDef.vue b/src/views/dashboard/Analysis/homePage/IndexDef.vue
deleted file mode 100644
index 48dec86..0000000
--- a/src/views/dashboard/Analysis/homePage/IndexDef.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-<template>
-  <div class="p-4">
-    <GrowCard :loading="loading" class="enter-y" />
-    <SiteAnalysis class="!my-4 enter-y" :loading="loading" />
-    <div class="md:flex enter-y">
-      <VisitRadar class="md:w-1/3 w-full" :loading="loading" />
-      <VisitSource class="md:w-1/3 !md:mx-4 !md:my-0 !my-4 w-full" :loading="loading" />
-      <SalesProductPie class="md:w-1/3 w-full" :loading="loading" />
-    </div>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import GrowCard from '../components/GrowCard.vue';
-  import SiteAnalysis from '../components/SiteAnalysis.vue';
-  import VisitSource from '../components/VisitSource.vue';
-  import VisitRadar from '../components/VisitRadar.vue';
-  import SalesProductPie from '../components/SalesProductPie.vue';
-
-  const loading = ref(true);
-
-  setTimeout(() => {
-    loading.value = false;
-  }, 500);
-</script>
diff --git a/src/views/dashboard/Analysis/homePage/IndexTask.vue b/src/views/dashboard/Analysis/homePage/IndexTask.vue
deleted file mode 100644
index af6caab..0000000
--- a/src/views/dashboard/Analysis/homePage/IndexTask.vue
+++ /dev/null
@@ -1,422 +0,0 @@
-<template>
-  <div class="index-container-ty">
-    <a-row type="flex" justify="start" :gutter="3">
-      <a-col :sm="24" :lg="12">
-        <a-card>
-          <template #title>
-            <div class="index-md-title">
-              <img src="../../../../assets/images/daiban.png" />
-              鎴戠殑寰呭姙銆恵{ dataSource1.length }}銆�
-            </div>
-          </template>
-
-          <template v-if="dataSource1 && dataSource1.length > 0" #extra>
-            <a @click="goPage"
-              >鏇村
-              <Icon icon="ant-design:double-right-outlined" />
-            </a>
-          </template>
-
-          <a-table
-            :class="'my-index-table tytable1'"
-            ref="table1"
-            size="small"
-            rowKey="id"
-            :columns="columns"
-            :dataSource="dataSource1"
-            :pagination="false"
-          >
-            <template #ellipsisText="{ text }">
-              <JEllipsis :value="text" :length="textMaxLength"></JEllipsis>
-            </template>
-
-            <template #dayWarnning="{ text, record }">
-              <BellTwoTone style="font-size: 22px" :twoToneColor="getTipColor(record)" />
-            </template>
-
-            <template #action="{ text, record }">
-              <a @click="handleData">鍔炵悊</a>
-            </template>
-          </a-table>
-        </a-card>
-      </a-col>
-
-      <a-col :sm="24" :lg="12">
-        <a-card>
-          <template #title>
-            <div class="index-md-title">
-              <img src="../../../../assets/images/zaiban.png" />
-              鎴戠殑鍦ㄥ姙銆恵{ dataSource2.length }}銆�
-            </div>
-          </template>
-
-          <template v-if="dataSource2 && dataSource2.length > 0" #extra>
-            <a @click="goPage"
-              >鏇村
-              <Icon icon="ant-design:double-right-outlined" />
-            </a>
-          </template>
-
-          <a-table
-            :class="'my-index-table tytable2'"
-            ref="table1"
-            size="small"
-            rowKey="id"
-            :columns="columns"
-            :dataSource="dataSource2"
-            :pagination="false"
-          >
-            <template #ellipsisText="{ text }">
-              <JEllipsis :value="text" :length="textMaxLength"></JEllipsis>
-            </template>
-
-            <template #dayWarnning="{ text, record }">
-              <BellTwoTone style="font-size: 22px" :twoToneColor="getTipColor(record)" />
-            </template>
-
-            <template #action="{ text, record }">
-              <a @click="handleData">鍔炵悊</a>
-            </template>
-          </a-table>
-        </a-card>
-      </a-col>
-
-      <a-col :span="24">
-        <div style="height: 5px"></div>
-      </a-col>
-
-      <a-col :sm="24" :lg="12">
-        <a-card>
-          <template #title>
-            <div class="index-md-title">
-              <img src="../../../../assets/images/guaz.png" />
-              鎴戠殑鎸傝处銆恵{ dataSource4.length }}銆�
-            </div>
-          </template>
-
-          <a-table
-            :class="'my-index-table tytable4'"
-            ref="table1"
-            size="small"
-            rowKey="id"
-            :columns="columns"
-            :dataSource="dataSource4"
-            :pagination="false"
-          >
-            <template #ellipsisText="{ text }">
-              <JEllipsis :value="text" :length="textMaxLength"></JEllipsis>
-            </template>
-
-            <template #dayWarnning="{ text, record }">
-              <BellTwoTone style="font-size: 22px" :twoToneColor="getTipColor(record)" />
-            </template>
-
-            <template #action="{ text, record }">
-              <a @click="handleData">鍔炵悊</a>
-            </template>
-          </a-table>
-        </a-card>
-      </a-col>
-
-      <a-col :sm="24" :lg="12">
-        <a-card>
-          <template #title>
-            <div class="index-md-title">
-              <img src="../../../../assets/images/duban.png" />
-              鎴戠殑鐫e姙銆恵{ dataSource3.length }}銆�
-            </div>
-          </template>
-
-          <a-table
-            :class="'my-index-table tytable3'"
-            ref="table1"
-            size="small"
-            rowKey="id"
-            :columns="columns"
-            :dataSource="dataSource3"
-            :pagination="false"
-          >
-            <template #ellipsisText="{ text }">
-              <JEllipsis :value="text" :length="textMaxLength"></JEllipsis>
-            </template>
-
-            <template #dayWarnning="{ text, record }">
-              <BellTwoTone style="font-size: 22px" :twoToneColor="getTipColor(record)" />
-            </template>
-
-            <template #action="{ text, record }">
-              <a @click="handleData">鍔炵悊</a>
-            </template>
-          </a-table>
-        </a-card>
-      </a-col>
-    </a-row>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import noDataPng from '/@/assets/images/nodata.png';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { JEllipsis } from '/@/components/Form';
-  import { BulbTwoTone, BellTwoTone } from '@ant-design/icons-vue';
-
-  const tempSs1 = [
-    {
-      id: '001',
-      orderNo: '鐢礫1]1267102',
-      orderTitle: '鑽搧鍑洪棶棰樹簡',
-      restDay: 1,
-    },
-    {
-      id: '002',
-      orderNo: '鐢礫4]5967102',
-      orderTitle: '鍚冧簡xxx鍖婚櫌鐨勮嵂锛岀梾鎯呰秺鏉ヨ秺涓ラ噸',
-      restDay: 0,
-    },
-    {
-      id: '003',
-      orderNo: '鐢礫3]5988987',
-      orderTitle: '浠婂ぉ鍘昏秴甯備拱楦¤泲锛岄浮铔嬮兘鏄潖鐨�',
-      restDay: 7,
-    },
-    {
-      id: '004',
-      orderNo: '鐢礫2]5213491',
-      orderTitle: 'xx瀹濆疄浣撳簵楂樹环鍞崠xx',
-      restDay: 5,
-    },
-    {
-      id: '005',
-      orderNo: '鐢礫1]1603491',
-      orderTitle: '浠ョ孩鍒╃浉璇憋紝绛斿簲閫�淇濆悗鎵d竴骞磋垂鐢�',
-      restDay: 0,
-    },
-  ];
-
-  const tempSs2 = [
-    {
-      id: '001',
-      orderTitle: '鎴戣鎶曡瘔杩欎釜澶ц秴甯�',
-      orderNo: '鐢礫1]10299456',
-      restDay: 6,
-    },
-    {
-      id: '002',
-      orderTitle: 'xxx鍖婚櫌涔卞紑鑽柟,鍞崠鍋囪嵂',
-      orderNo: '鐢礫2]20235691',
-      restDay: 0,
-    },
-    {
-      id: '003',
-      orderTitle: '鎴戞兂闂棶杩欏搴楁槸骞插暐鐨�',
-      orderNo: '鐢礫3]495867322',
-      restDay: 7,
-    },
-    {
-      id: '004',
-      orderTitle: '鎴戣涓炬姤鏈濋槼鍖哄ゥ妫叕鍥厭搴�',
-      orderNo: '鐢礫2]1193849',
-      restDay: 3,
-    },
-    {
-      id: '005',
-      orderTitle: '鎴戜粖澶╁悆楗悆鍒颁竴涓煶澶村瓙',
-      orderNo: '鐢礫4]56782344',
-      restDay: 9,
-    },
-  ];
-
-  //4-7澶�
-  const tip_green = 'rgba(0, 255, 0, 1)';
-  //1-3澶�
-  const tip_yellow = 'rgba(255, 255, 0, 1)';
-  //瓒呮湡
-  const tip_red = 'rgba(255, 0, 0, 1)';
-
-  const textMaxLength = 8;
-  const $message = useMessage();
-
-  const dataSource1 = ref([]);
-  const dataSource2 = ref([]);
-  const dataSource3 = ref([]);
-  const dataSource4 = ref([]);
-  const columns = [
-    {
-      title: '',
-      dataIndex: '',
-      key: 'rowIndex',
-      width: 50,
-      fixed: 'left',
-      align: 'center',
-      slots: { customRender: 'dayWarnning' },
-    },
-    {
-      title: '鍓╀綑澶╂暟',
-      align: 'center',
-      dataIndex: 'restDay',
-      width: 80,
-    },
-    {
-      title: '宸ュ崟鏍囬',
-      align: 'center',
-      dataIndex: 'orderTitle',
-      slots: { customRender: 'ellipsisText' },
-    },
-    {
-      title: '宸ュ崟缂栧彿',
-      align: 'center',
-      dataIndex: 'orderNo',
-    },
-    {
-      title: '鎿嶄綔',
-      dataIndex: 'action',
-      align: 'center',
-      slots: { customRender: 'action' },
-    },
-  ];
-
-  function getTipColor(rd) {
-    let num = rd.restDay;
-    if (num <= 0) {
-      return tip_red;
-    } else if (num >= 1 && num < 4) {
-      return tip_yellow;
-    } else if (num >= 4) {
-      return tip_green;
-    }
-  }
-
-  function mock() {
-    dataSource1.value = tempSs1;
-    dataSource2.value = tempSs2;
-    dataSource3.value = tempSs1;
-    dataSource4.value = tempSs2;
-    ifNullDataSource(dataSource4, '.tytable4');
-  }
-
-  function ifNullDataSource(ds, tb) {
-    if (!ds || ds.length == 0) {
-      var tmp = document.createElement('img');
-      tmp.src = noDataPng;
-      tmp.width = 300;
-      let tbclass = `${tb} .ant-table-placeholder`;
-      document.querySelector(tbclass).innerHTML = '';
-      document.querySelector(tbclass).appendChild(tmp);
-    }
-  }
-
-  function handleData() {
-    $message.createMessage.success('鍔炵悊瀹屾垚');
-  }
-
-  function goPage() {
-    $message.createMessage.success('璇锋牴鎹叿浣撲笟鍔¤烦杞〉闈�');
-  }
-
-  mock();
-</script>
-
-<style scoped lang="less">
-  .my-index-table {
-    height: 270px;
-
-    table {
-      font-size: 14px !important;
-    }
-  }
-
-  .index-container-ty {
-    margin: 12px 12px 0;
-
-    :deep(.ant-card-body) {
-      padding: 10px 12px 0 12px;
-    }
-
-    :deep(.ant-card-head) {
-      line-height: 24px;
-      min-height: 24px;
-      background: #7196fb !important;
-
-      .ant-card-head-title {
-        padding-top: 6px;
-        padding-bottom: 6px;
-      }
-
-      .ant-card-extra {
-        padding: 0;
-
-        a {
-          color: #fff;
-        }
-
-        a:hover {
-          color: #152ede;
-        }
-      }
-    }
-
-    :deep(.ant-table-footer) {
-      text-align: right;
-      padding: 6px 12px 6px 6px;
-      background: #fff;
-      border-top: 2px solid #f7f1f1;
-    }
-
-    .index-md-title {
-      position: relative;
-      width: 100%;
-      color: #fff;
-      font-size: 21px;
-      font-family: cursive;
-      padding-left: 25px;
-
-      img {
-        position: absolute;
-        height: 25px;
-        left: 0;
-      }
-    }
-
-    :deep(.ant-table-thead > tr > th),
-    :deep(.ant-table-tbody > tr > td) {
-      border-bottom: 1px solid #90aeff;
-    }
-
-    :deep(
-      .ant-table-small
-      > .ant-table-content
-      > .ant-table-fixed-left
-      > .ant-table-body-outer
-      > .ant-table-body-inner
-      > table
-      > .ant-table-thead
-      > tr
-      > th),
-    :deep(
-      .ant-table-small
-      > .ant-table-content
-      > .ant-table-fixed-right
-      > .ant-table-body-outer
-      > .ant-table-body-inner
-      > table
-      > .ant-table-thead
-      > tr
-      > th) {
-      border-bottom: 1px solid #90aeff;
-    }
-
-    :deep(.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-body > table > .ant-table-thead > tr > th) {
-      border-bottom: 1px solid #90aeff;
-    }
-
-    :deep(.ant-table-small) {
-      border: 1px solid #90aeff;
-    }
-
-    :deep(.ant-table-placeholder) {
-      padding: 0;
-      height: 215px;
-    }
-  }
-</style>
diff --git a/src/views/dashboard/Analysis/index.vue b/src/views/dashboard/Analysis/index.vue
deleted file mode 100644
index 5ee4e92..0000000
--- a/src/views/dashboard/Analysis/index.vue
+++ /dev/null
@@ -1,24 +0,0 @@
-<template>
-  <IndexDef v-if="indexStyle === 0"></IndexDef>
-  <IndexChart v-if="indexStyle === 1"></IndexChart>
-  <IndexBdc v-if="indexStyle == 2"></IndexBdc>
-  <IndexTask v-if="indexStyle == 3"></IndexTask>
-  <div style="width: 100%; text-align: right; margin-top: 20px">
-    璇烽�夋嫨棣栭〉鏍峰紡锛�
-    <a-radio-group v-model:value="indexStyle">
-      <a-radio :value="0">榛樿</a-radio>
-      <a-radio :value="1">閿�閲忕粺璁�</a-radio>
-      <a-radio :value="2">涓氬姟缁熻</a-radio>
-      <a-radio :value="3">鎴戠殑浠诲姟</a-radio>
-    </a-radio-group>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import IndexDef from './homePage/IndexDef.vue';
-  import IndexChart from './homePage/IndexChart.vue';
-  import IndexBdc from './homePage/IndexBdc.vue';
-  import IndexTask from './homePage/IndexTask.vue';
-
-  const indexStyle = ref(0);
-</script>
diff --git a/src/views/dashboard/control/api.ts b/src/views/dashboard/control/api.ts
deleted file mode 100644
index 703be84..0000000
--- a/src/views/dashboard/control/api.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  sendCommand = '/dry/real/sendCommand',
-  sendWriteCommand = '/dry/opc/sendWriteCommand',
-  listAll = '/dry/dryOpcDevice/listAll'
-}
-/**
- * 鍙戦�佸懡浠�
- * @param params
- */
-export const sendCommand = (params) => defHttp.post({ url: Api.sendCommand, params },{ isTransformResponse: false });
-
-/**
- * 鍙戦�丱PC鍐欐寚浠�
- */
-
-export const sendWriteCommand = (params) => defHttp.post({url: Api.sendWriteCommand, params},{isTransformResponse: false})
-
-/**
- * 鏌ヨ鎵�鏈塐PC璁惧
- */
-
-export const listAll = (params) => defHttp.get({url:Api.listAll, params})
-
diff --git a/src/views/dashboard/control/index.vue b/src/views/dashboard/control/index.vue
deleted file mode 100644
index 9cda79a..0000000
--- a/src/views/dashboard/control/index.vue
+++ /dev/null
@@ -1,513 +0,0 @@
-<template>
-  <a-modal v-model:visible="visible" centered :mask="true" :maskClosable="false" :keyboard="false" :closable="false" :cancelText="null" title="璀﹀憡"
-           @ok="hideModal" @cancel="cnacelModal" >
-    <a-card>
-       <div class="indented-text">鍦ㄤ娇鐢ㄨ繙绋嬫帶鍒惰澶囧墠锛岃纭繚鏈哄櫒鍛ㄥ洿娌℃湁鍏朵粬浜哄憳銆傚缓绔嬩竴涓畨鍏ㄥ尯鍩燂紝纭繚娌℃湁浜鸿兘澶熻繘鍏ヨ鍖哄煙锛岄槻姝笉蹇呰鐨勪激瀹炽��</div>
-      <div style="display: flex; justify-content: space-between; padding-top: 20px; "> 
-        <p style="font-weight: bold;" >璇疯緭鍏ュ瘑鐮侊細</p>
-        <p style="color: red">{{ error }}</p>
-      </div>
-       <div >
-        <a-input-password v-model:value="password" placeholder="璇疯緭鍏ュ瘑鐮侊紒"></a-input-password>
-       </div>
-    </a-card>
-
-  </a-modal>
-  <div class="app">
-    <a-row>
-      <div style="width: 60%">
-      <a-card title="鐓ф槑" >
-      <div class="light-box">
-        <div v-for="item in lightList" :key="item.identifier"  class="center">
-          <!-- <a-button v-if="item.type == 0"  type="primary" class="com-btn"
-                  @click="deviceClick(item)">
-          {{ item.name }}
-        </a-button> -->
-          <div v-if="item.type==0" @click="deviceClick(item)">
-            <div   :class="[ item.value?'lightOn':'lightOff' ,'device']">
-
-              
-            </div>
-            <div class="text-center">{{ item.name }}</div>
-              
-            </div>
-        </div>
-       
-      </div>
-    </a-card>
-  </div>
-  <div style="width: 40%">
-    <a-card title="鐩戞帶" style=" margin-left: 10px;">
-      <div class="monitor-box">
-        <div v-for="item in lightList" :key="item.identifier" class="center" >
-          <div v-if="item.type==1" @click="deviceClick(item)">
-            <div   :class="[ item.value?'camOn':'camOff' ,'device']">
-
-              
-            </div>
-            <div class="text-center">{{ item.name }}</div>
-            </div>
-      </div>
-      </div>
-    </a-card>
-</div>
-    </a-row>
- <a-row>
-      <div style="width: 50%">
-<a-card title="鎸囦护" style="margin-top: 10px; ">
-      <div class="com-box">
-        <!-- <a-button v-for="item in comList" :key="item.id" type="primary" class="com-btn"
-                  @click="comClick(item)">
-          {{ item.title }}
-        </a-button> -->
-        <div style="width: 500px;"  >
-        
-        <a-row class="button-row">
-          <a-button type="primary" :disabled="btnDisabled"  @click="clickButton(1010, '骞茬嚗鍚姩')" class="com-btn">  
-            <div> <PlayCircleOutlined style="font-size: 20px;" /> </div>
-          <div>  骞茬嚗鍚姩 </div>
-          
-        </a-button>
-        <!-- <a-button type="normal" @click="clickButton(1012)" class="com-btn">
-          <div> <SplitCellsOutlined style="font-size: 20px;" /> </div>
-          <div>  鍚庨棬寮�鍏� </div>
-          
-        </a-button> -->
-        <a-button type="default" :disabled="btnDisabled"  @click="clickButton(1003,'婊氱瓛鍗�')" class="com-btn w300">
-          <div> <UpCircleOutlined style="font-size: 20px;" /> </div>
-          <div>  婊氱瓛鍗� </div>
-          
-        </a-button>
-        <a-button type="normal" :disabled="btnDisabled" @click="clickButton(1016,'娓呴櫎')" class="com-btn">
-          <div> <ClearOutlined style="font-size: 20px;" /> </div>
-          <div>  娓呴櫎 </div>
-          
-        </a-button>
-        </a-row>
-        <a-row class="button-row">
-          <a-button type="normal" :disabled="btnDisabled"  @click="clickButton(1005,'婊氱瓛姝h浆')" class="com-btn h100">
-            <div>  <RedoOutlined style="font-size: 20px;" /> </div>
-            <div> 婊氱瓛姝h浆 </div>
-        </a-button>
-          <a-button type="danger" :disabled="btnDisabled"  @click="clickButton(1007,'鍋滄')" class="com-btn h100 w300 " >
-            <div> <PauseCircleOutlined style="font-size: 20px;" />  </div>
-            <div>  鍋滄 </div>
-        </a-button>
-        <a-button type="normal" :disabled="btnDisabled"  @click="clickButton(1006,'婊氱瓛鍙嶈浆')" class="com-btn h100">
-          <div> <UndoOutlined style="font-size: 20px;" /> </div>
-          <div>  婊氱瓛鍙嶈浆 </div>
-        </a-button>
-        </a-row>
-        <a-row class="button-row">
-          <a-button type="success" :disabled="btnDisabled"  @click="clickButton(1015,'鍑烘枡')" class="com-btn">
-            <div> <DownloadOutlined style="font-size: 20px;" /> </div>
-            <div>  鍑烘枡 </div>
-          
-        </a-button>
-        <!-- <a-button type="normal" @click="clickButton(1010)" class="com-btn">
-          <div> <SplitCellsOutlined style="font-size: 20px;" /> </div>
-          <div>  鍓嶉棬寮�鍏� </div>
-        </a-button> -->
-        <a-button type="normal" :disabled="btnDisabled"  @click="clickButton(1004,'婊氱瓛闄�')" class="com-btn w300">
-          <div> <DownCircleOutlined style="font-size: 20px;" /> </div>
-          <div>  婊氱瓛闄� </div>
-        </a-button>
-        <a-button type="normal" :disabled="btnDisabled"  @click="clickButton(1013,'鐑鍚姩')" class="com-btn">
-          <div> <FireOutlined style="font-size: 20px;" /> </div>
-            <div>  鐑鍚姩 </div>
-          
-        </a-button>
-      </a-row>
-       
-        </div>
-
-
-      </div>
-    </a-card>
-    </div>
-    <div style="width: 50%">
-    <a-card title="鐘舵��" style="margin-left: 10px;margin-top:10px">
-      <div class="com-box">
-        <div>
-      <div>
-          <a-button type="warning" :disabled="btnDisabled"  @click="clickButton(1017,'鎵嬪姩/鑷姩')" class="com-btn">
-            <div> <SyncOutlined style="font-size: 20px;" /> </div>
-          <div>  鎵嬪姩/鑷姩 </div>
-          
-        </a-button>
-       
-      </div>
-      <div>
-        <a-button type="info" :disabled="btnDisabled"  @click="clickButton(1014, '寮�闂ㄨ瀵�')" class="com-btn">
-          <div> <SettingOutlined style="font-size: 20px;" /> </div>
-          <div>  寮�闂ㄨ瀵� </div>
-          
-        </a-button>
-       
-      </div>
-      <div>
-        <a-button type="normal" @click="lock()" class="com-btn">
-          <div> <Icon :icon="lockIcon" :size="28" /> </div>
-          <div>  {{lockText}} </div>
-          
-        </a-button>
-      </div>
-      </div>
-    </div>
-    </a-card>
-  </div>
-    </a-row>
-    
-    <a-card title="鎺у埗鍙�" style="margin-top: 10px; ">
-      <div class="log-box">
-        <p v-for="log in logList" :key="log"> {{ log }}</p>
-      </div>
-
-    </a-card>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, onMounted } from "vue";
-import { sendCommand, sendWriteCommand, listAll } from "./api";
-import { useGlobSetting } from '/@/hooks/setting';
-import { connectWebSocket, onWebSocket } from '/@/hooks/web/useWebSocket';
-import { useUserStore } from '/@/store/modules/user';
-import { RedoOutlined ,SettingOutlined, UndoOutlined,FireOutlined, SplitCellsOutlined, DownloadOutlined, PauseCircleOutlined,ClearOutlined, SyncOutlined,PlayCircleOutlined, SwapOutlined , UpCircleOutlined, DownCircleOutlined, LeftCircleOutlined, RightCircleOutlined} from '@ant-design/icons-vue';
-import { router } from '/@/router'
-const error = ref('')
-const lockIcon = ref('tdesign:lock-off')
-const lockText = ref('瑙i攣')
-const password = ref()
-const visible = ref<boolean>(false);
-  const glob = useGlobSetting();
-interface Commant {
-  id: number;
-  title: string;
-  icon: string;
-}
-
-interface Device {
-  name: string;
-  identifier: string;
-  value: boolean;
-  sort_order: number;
-}
-const userStore = useUserStore();
-const logList = ref<string[]>([]);
-const comList = ref<Commant[]>([
-  {
-    id: 1010,
-    title: "骞茬嚗鍚姩",
-    icon: "caret-right-outlined"
-  }, {
-    id: 1007,
-    title: "鍋滄杩愯",
-    icon: "caret-right-outlined"
-  }, {
-    id: 1013,
-    title: "鐑鍚姩",
-    icon: "caret-right-outlined"
-  }, {
-    id: 1012,
-    title: "鍚庨棬寮�鍏�",
-    icon: "caret-right-outlined"
-  }, {
-    id: 1003,
-    title: "婊氱瓛鍗�",
-    icon: "caret-right-outlined"
-  }, {
-    id: 1004,
-    title: "婊氱瓛闄�",
-    icon: "caret-right-outlined"
-  }, {
-    id: 1005,
-    title: "婊氱瓛姝h浆",
-    icon: "caret-right-outlined"
-  }, {
-    id: 1006,
-    title: "婊氱瓛鍙嶈浆",
-    icon: "caret-right-outlined"
-  }, {
-    id: 1014,
-    title: "寮�闂ㄨ瀵�",
-    icon: "caret-right-outlined"
-  }, {
-    id: 1015,
-    title: "鍑烘枡",
-    icon: "caret-right-outlined"
-  }, {
-    id: 1016,
-    title: "娓呴櫎",
-    icon: "caret-right-outlined"
-  }, {
-    id: 1017,
-    title: "鎵嬪姩/鑷姩",
-    icon: "caret-right-outlined"
-  }]);
-
-const btnDisabled = ref(true)
-const lightList = ref<Device[]>([]);
-const monitorList = ref<Device[]>([]);
-
-function lock() {
-  btnDisabled.value = !btnDisabled.value
-  lockIcon.value = btnDisabled.value?'tdesign:lock-off':'tdesign:lock-on'
-  lockText.value = btnDisabled.value?'瑙i攣': '閿佸畾'
-  if (btnDisabled.value) {
-    showModal()
-  }
-}
-
-function comClick(item) {
-  addLog("鍙戦��", item.title);
-  //鍙戦�佹寚浠�
-  sendCmd(item);
-}
-
-/**
- * 鍙戦�佹寚浠�
- * @param item
- */
-function sendCmd(item) {
-  var params = { msg: item.title, code: item.id, tenantId: 1003, machineId: "GM001" };
-  sendCommand(params).then(res => {
-    if (res.success) {
-      addLog("鍝嶅簲", res.message);
-      console.info(res);
-    } else {
-      console.info(res);
-      addLog("鍝嶅簲", res.message);
-    }
-
-  });
-}
-
-/**
- * 娣诲姞log
- * @param type
- * @param msg
- */
-function addLog(type, msg) {
-  //鍙戦�乴og
-  const date = new Date();
-  const format = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")} ${date.getHours().toString().padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}:${date.getSeconds().toString().padStart(2, "0")}`;
-  const log = format + " " + type + ":" + msg;
-  logList.value.unshift(log);
-}
-
-const showModal = () => {
-  visible.value = true;
-};
-
-const cnacelModal = () => {
-  router.back()
-}
-
-const hideModal = () => {
-  if(!password.value || password.value.length<=0) {
-    error.value="璇疯緭鍏ュ瘑鐮侊紒"
-  }else
-  if(password.value === 'LBit@123') {
-    visible.value = false;
-    password.value = ''
-    error.value = ''
-  } else {
-    error.value = '瀵嗙爜閿欒锛�'
-  }
-  
-  
-};
-
-/**
- * 鏌ヨ鐏拰鎽勫儚澶村垪琛�
- */
-function queryDevice() {
-  listAll({}).then(res => {
-    console.log("ress000:",res);
-    lightList.value = res
-  })
-
-
-}
-
-function clickButton(cmd, msg) {
-  console.log("target::::",cmd);
-  let tenantId = userStore.getTenant;
-  var params = { msg: msg, code: cmd, tenantId: tenantId, machineId: "GM001" };
-  sendCommand(params).then(res => {
-    if (res.success) {
-      addLog("鍝嶅簲", res.message);
-      console.info(res);
-    } else {
-      console.info(res);
-      addLog("鍝嶅簲", res.message);
-    }
-
-  });
-}
-
-
-
-
-function deviceClick(item) {
-  //console.log("item===",item.value);
-  let params = {code: item.identifier, msg: !item.value}
-  sendWriteCommand(params).then(res => {
-    console.log("鍐欐寚浠ょ粨鏋滐細锛�", res)
-    if(res.success) {
-      lightList.value.forEach(device => {
-          if(device.identifier == item.identifier) {
-            device.value = !item.value
-          }
-        })
-    }
-  }) 
-
-}
-
-    // 鍒濆鍖� WebSocket
-    function initWebSocket() {
-
-        let user = userStore.getUserInfo;
-        let tenantId = user.loginTenantId;
-
-        console.log(user);
-        // WebSocket涓庢櫘閫氱殑璇锋眰鎵�鐢ㄥ崗璁湁鎵�涓嶅悓锛寃s绛夊悓浜巋ttp锛寃ss绛夊悓浜巋ttps
-         let url = glob.domainUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/drySocket/' + tenantId;
-        
-         connectWebSocket(url);
-         onWebSocket(onWebSocketMessage);
-      }
-
-      function onWebSocketMessage(data) {
-        console.log("drysocket:data::",data)
-        lightList.value.forEach(item => {
-          if(item.identifier == data.identifier) {
-            item.value = data.value
-          }
-        })
-      }
-
-      function keydown(e) {
-        error.value = ''
-        if(e.keyCode == 13) {
-          hideModal()
-        }
-      }
-
-onMounted(() => {
-  showModal();
-  initWebSocket();
-  window.addEventListener('keydown', keydown)
-});
-
-queryDevice()
-
-
-</script>
-
-<style lang="less" scoped>
-.app {
-  margin: 10px;
-}
-
-.com-box {
-  // margin-left: 200px;
-
-  display: flex;
-  justify-content: center;
-  
-  .com-btn {
-    border-radius: 5px;
-    width: 100px;
-    margin: 10px;
-    height: 70px;
-  }
-}
-
-.button-row {
-  display: flex; justify-content: space-between;
-}
-
-.log-box {
-  min-height: 150px;
-  max-height: 150px;
-  overflow-y: auto;
-}
-.indented-text {
-  text-indent: 20px;
-  font-size: 16px;
-}
-
-.light-box {
-  display: flex;
-  justify-items: center;
-justify-content: center;
-  flex-wrap: wrap;
-
-}
-.center {
-  display: flex;
-justify-items: center;
-justify-content: center;
-}
-
-.text-center {
-  text-align: center;
-}
-
-.lightOn {
-    background-image: url(/src/assets/images/dry/control/light.png);
-    background-repeat: no-repeat;
-		background-size: 50px;
-		/* border-radius: 10px; */
-		background-position: 48px 0px;
-  }
-  .lightOff {
-    background-image: url(/src/assets/images/dry/control/light-close.png);
-    background-repeat: no-repeat;
-		background-size: 50px;
-		/* border-radius: 10px; */
-		background-position: 48px 0px;
-  }
-
-  .camOn {
-    background-image: url(/src/assets/images/dry/control/cam1.png);
-    background-repeat: no-repeat;
-		background-size: 50px;
-		/* border-radius: 10px; */
-		background-position: 48px 0px;
-  }
-  .camOff {
-    background-image: url(/src/assets/images/dry/control/cam0.png);
-    background-repeat: no-repeat;
-		background-size: 50px;
-		/* border-radius: 10px; */
-		background-position: 48px 0px;
-  }
-
-
-.device {
-  width: 150px; height: 60px; 
-  
-}
-
-.h100 {
-  height: 70px !important;
-}
-
-.w300 {
-  width: 100px !important;
-}
-
-.monitor-box {
-  display: flex;
-  justify-items: center;
-justify-content: center;
-flex-wrap: wrap;
-  
-}
-
-
-</style>
diff --git a/src/views/dashboard/video/index.vue b/src/views/dashboard/video/index.vue
deleted file mode 100644
index 1ebb98f..0000000
--- a/src/views/dashboard/video/index.vue
+++ /dev/null
@@ -1,272 +0,0 @@
-<template>
-  <div>
-    <div class="app">
-      <div class="video-box">
-        <div class="video-item">
-          <div class="item-title">
-            鏅鸿兘涓崏鑽�
-          </div>
-          <div id="video-container1" class="item-player">
-          </div>
-
-        </div>
-        <div class="video-item">
-          <div class="item-title">
-            鏅鸿兘涓崏鑽�
-          </div>
-          <div id="video-container2" class="item-player">
-
-          </div>
-
-        </div>
-        <div class="video-item">
-          <div class="item-title">
-            鏅鸿兘涓崏鑽�
-          </div>
-          <div id="video-container3" class="item-player">
-
-          </div>
-
-        </div>
-
-        <div class="video-item">
-          <div class="item-title">
-            鏅鸿兘涓崏鑽�
-          </div>
-          <div id="video-container4" class="item-player">
-
-          </div>
-
-        </div>
-        <div class="video-item">
-          <div class="item-title">
-            鏅鸿兘涓崏鑽�
-          </div>
-          <div id="video-container5" class="item-player">
-
-          </div>
-
-        </div>
-        <div class="video-item">
-          <div class="item-title">
-            鏅鸿兘涓崏鑽�
-          </div>
-          <div id="video-container5_2" class="item-player">
-
-          </div>
-
-        </div>
-
-      </div>
-
-    </div>
-  </div>
-
-
-</template>
-
-<script setup lang="ts">
-import { onMounted, ref, onUnmounted } from "vue";
-import EZUIKit from "ezuikit-js/ezuikit";
-import axios from "axios";
-
-
-const playerWidth = 420;
-const playerHeight = 270;
-const templateCode = "bef3c43bae064cc78f60bc76709ef2f2";
-
-// TODO token鑾峰彇閫昏緫鏀惧埌鏈嶅姟绔�
-const accessToken = ref();
-const appKey = "bcd4b89660734f48b595cfcd80ab4ee4";
-const appSecret = "8701a6ce59ddfc0e5335f89832bab23c";
-
-//鐩存挱鍦板潃  BB2645510-鎽勫儚鏈哄簭鍒楀彿  hd-楂樻竻锛堝幓鎺夊垯鎾斁鏅�氾級 1-閫氶亾鍙�
-const url1 = "ezopen://open.ys7.com/BB2645510/1.hd.live";
-const url2 = "ezopen://open.ys7.com/BB2646044/1.hd.live";
-const url3 = "ezopen://open.ys7.com/BB2646084/1.hd.live";
-const url4 = "ezopen://open.ys7.com/BB2646113/1.hd.live";
-const url5 = "ezopen://open.ys7.com/BB5066611/1.hd.live";
-const url5_2 = "ezopen://open.ys7.com/BB5066611/2.hd.live";
-
-
-let player1 = ref();
-
-
-function initPlayer1() {
-  player1 = new EZUIKit.EZUIKitPlayer({
-    id: "video-container1", // 瑙嗛瀹瑰櫒ID
-    accessToken: accessToken.value,
-    url: url1,
-    template: templateCode,
-    plugin: ["talk"], // 鍔犺浇鎻掍欢锛宼alk-瀵硅
-    width: playerWidth,
-    height: playerHeight,
-    handleSuccess: (res => {
-        console.info(res);
-        console.info("鍒濆鍖栨垚鍔�");
-      }
-    ),
-    handleError: (res => {
-        console.info(res);
-        if (res.retcode == "10002") {
-          console.info("鍒濆鍖栧け璐ワ紝token杩囨湡");
-        }
-      }
-    )
-  });
-  setTimeout(() => {
-    console.info("寮�濮嬭嚜鍔ㄦ挱鏀�1鍙�")
-    player1.play();
-  }, 1000);
-}
-
-function initPlayer2() {
-  new EZUIKit.EZUIKitPlayer({
-    id: "video-container2", // 瑙嗛瀹瑰櫒ID
-    accessToken: accessToken.value,
-    url: url2,
-    template: templateCode,
-    plugin: ["talk"], // 鍔犺浇鎻掍欢锛宼alk-瀵硅
-    header: ["zoom"],
-    width: playerWidth,
-    height: playerHeight
-  });
-}
-
-function initPlayer3() {
-  new EZUIKit.EZUIKitPlayer({
-    id: "video-container3", // 瑙嗛瀹瑰櫒ID
-    accessToken: accessToken.value,
-    url: url3,
-    template: templateCode,
-    plugin: ["talk"], // 鍔犺浇鎻掍欢锛宼alk-瀵硅
-    width: playerWidth,
-    height: playerHeight
-  });
-}
-
-function initPlayer4() {
-  new EZUIKit.EZUIKitPlayer({
-    id: "video-container4", // 瑙嗛瀹瑰櫒ID
-    accessToken: accessToken.value,
-    url: url4,
-    template: templateCode,
-    plugin: ["talk"], // 鍔犺浇鎻掍欢锛宼alk-瀵硅
-    width: playerWidth,
-    height: playerHeight
-  });
-}
-
-function initPlayer5() {
-  new EZUIKit.EZUIKitPlayer({
-    id: "video-container5", // 瑙嗛瀹瑰櫒ID
-    accessToken: accessToken.value,
-    url: url5,
-    template: templateCode,
-    plugin: ["talk"], // 鍔犺浇鎻掍欢锛宼alk-瀵硅
-    width: playerWidth,
-    height: playerHeight
-  });
-}
-
-function initPlayer5_2() {
-  new EZUIKit.EZUIKitPlayer({
-    id: "video-container5_2", // 瑙嗛瀹瑰櫒ID
-    accessToken: accessToken.value,
-    url: url5_2,
-    template: templateCode,
-    plugin: ["talk"], // 鍔犺浇鎻掍欢锛宼alk-瀵硅
-    width: playerWidth,
-    height: playerHeight
-  });
-}
-
-function initPlayer() {
-  initPlayer1();
-  initPlayer2();
-  initPlayer3();
-  initPlayer4();
-  initPlayer5();
-  initPlayer5_2();
-}
-
-function checkAccessToken() {
-  const ez_expireTime = localStorage.getItem("ez_expireTime");
-  const ez_accessToken = localStorage.getItem("ez_accessToken");
-  const now = new Date().getTime();
-  const time = ez_expireTime - now; //鍒ゆ柇token鏄惁杩囨湡
-
-  accessToken.value = ez_accessToken;
-  if (ez_accessToken && (time > 1000 * 60)) {
-    initPlayer();
-  } else {
-    getAccessToken();
-  }
-
-
-}
-
-async function getAccessToken() {
-  const api = axios.create({
-    baseURL: "https://open.ys7.com" // 璁剧疆涓虹┖瀛楃涓诧紝鎴栬�呰缃负绗笁鏂规帴鍙g殑鍩烘湰URL
-  });
-  try {
-    const response = await api.post("/api/lapp/token/get?appKey=" + appKey + "&appSecret=" + appSecret); // 杩欓噷鐨勮矾寰勪负鐩稿璺緞锛屼笉鍖呭惈鍓嶇紑
-    if (response && response.data && response.data.code == 200) {
-      localStorage.setItem("ez_accessToken", response.data.data.accessToken);
-      localStorage.setItem("ez_expireTime", response.data.data.expireTime);
-      accessToken.value = response.data.data.accessToken;
-      initPlayer();
-    }
-    console.log(response);
-    // 澶勭悊鎴愬姛鍝嶅簲鏁版嵁
-  } catch (error) {
-    console.error(error);
-    // 澶勭悊閿欒
-  }
-}
-
-
-// DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛�
-onMounted(() => {
-  checkAccessToken();
-
-});
-
-onUnmounted(() => {
-
-});
-</script>
-
-<style lang="less" scoped>
-.app {
-  width: 100%;
-  display: flex;
-}
-
-.video-box {
-  width: 100%;
-  margin: 10px;
-  display: flex;
-  justify-content: flex-start;
-  flex-wrap: wrap;
-  background-color: white;
-}
-
-.video-item {
-  height: 300px;
-  margin: 10px;
-  width: 420px;
-  display: flex;
-  flex-direction: column;
-
-  .item-title {
-    width: 100%;
-    height: 30px;
-    font-weight: bold;
-  }
-
-}
-
-
-</style>
diff --git a/src/views/dashboard/workbench/components/DynamicInfo.vue b/src/views/dashboard/workbench/components/DynamicInfo.vue
deleted file mode 100644
index 4be8f1f..0000000
--- a/src/views/dashboard/workbench/components/DynamicInfo.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-<template>
-  <Card title="鏈�鏂板姩鎬�" v-bind="$attrs">
-    <template #extra>
-      <a-button type="link" size="small">鏇村</a-button>
-    </template>
-    <List item-layout="horizontal" :data-source="dynamicInfoItems">
-      <template #renderItem="{ item }">
-        <ListItem>
-          <ListItemMeta>
-            <template #description>
-              {{ item.date }}
-            </template>
-            <!-- eslint-disable-next-line -->
-            <template #title> {{ item.name }} <span v-html="item.desc"> </span> </template>
-            <template #avatar>
-              <Icon :icon="item.avatar" :size="30" />
-            </template>
-          </ListItemMeta>
-        </ListItem>
-      </template>
-    </List>
-  </Card>
-</template>
-<script lang="ts" setup>
-  import { Card, List } from 'ant-design-vue';
-  import { dynamicInfoItems } from './data';
-  import { Icon } from '/@/components/Icon';
-
-  const ListItem = List.Item;
-  const ListItemMeta = List.Item.Meta;
-</script>
diff --git a/src/views/dashboard/workbench/components/ProjectCard.vue b/src/views/dashboard/workbench/components/ProjectCard.vue
deleted file mode 100644
index 0957031..0000000
--- a/src/views/dashboard/workbench/components/ProjectCard.vue
+++ /dev/null
@@ -1,34 +0,0 @@
-<template>
-  <Card title="椤圭洰" v-bind="$attrs">
-    <template #extra>
-      <a-button type="link" size="small">鏇村</a-button>
-    </template>
-
-    <template v-for="item in items" :key="item">
-      <CardGrid class="!md:w-1/3 !w-full">
-        <span class="flex">
-          <Icon :icon="item.icon" :color="item.color" size="30" />
-          <span class="text-lg ml-4">{{ item.title }}</span>
-        </span>
-        <div class="flex mt-2 h-10 text-secondary"> {{ item.desc }} </div>
-        <div class="flex justify-between text-secondary">
-          <span>{{ item.group }}</span>
-          <span>{{ item.date }}</span>
-        </div>
-      </CardGrid>
-    </template>
-  </Card>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Card } from 'ant-design-vue';
-  import { Icon } from '/@/components/Icon';
-  import { groupItems } from './data';
-
-  export default defineComponent({
-    components: { Card, CardGrid: Card.Grid, Icon },
-    setup() {
-      return { items: groupItems };
-    },
-  });
-</script>
diff --git a/src/views/dashboard/workbench/components/QuickNav.vue b/src/views/dashboard/workbench/components/QuickNav.vue
deleted file mode 100644
index 4e004d1..0000000
--- a/src/views/dashboard/workbench/components/QuickNav.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-<template>
-  <Card title="蹇嵎瀵艰埅" v-bind="$attrs">
-    <template v-for="item in navItems" :key="item">
-      <CardGrid>
-        <span class="flex flex-col items-center">
-          <Icon :icon="item.icon" :color="item.color" size="20" />
-          <span class="text-md mt-2">{{ item.title }}</span>
-        </span>
-      </CardGrid>
-    </template>
-  </Card>
-</template>
-<script lang="ts" setup>
-  import { Card } from 'ant-design-vue';
-  import { navItems } from './data';
-  import { Icon } from '/@/components/Icon';
-
-  const CardGrid = Card.Grid;
-</script>
diff --git a/src/views/dashboard/workbench/components/SaleRadar.vue b/src/views/dashboard/workbench/components/SaleRadar.vue
deleted file mode 100644
index 99965a7..0000000
--- a/src/views/dashboard/workbench/components/SaleRadar.vue
+++ /dev/null
@@ -1,100 +0,0 @@
-<template>
-  <Card title="閿�鍞粺璁�" :loading="loading">
-    <div ref="chartRef" :style="{ width, height }"></div>
-  </Card>
-</template>
-<script lang="ts" setup>
-  import { Ref, ref, watch } from 'vue';
-  import { Card } from 'ant-design-vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  const props = defineProps({
-    loading: Boolean,
-    width: {
-      type: String as PropType<string>,
-      default: '100%',
-    },
-    height: {
-      type: String as PropType<string>,
-      default: '400px',
-    },
-  });
-
-  const chartRef = ref<HTMLDivElement | null>(null);
-  const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
-  watch(
-    () => props.loading,
-    () => {
-      if (props.loading) {
-        return;
-      }
-      setOptions({
-        legend: {
-          bottom: 0,
-          data: ['Visits', 'Sales'],
-        },
-        tooltip: {},
-        radar: {
-          radius: '60%',
-          splitNumber: 8,
-          indicator: [
-            {
-              text: '2017',
-              max: 100,
-            },
-            {
-              text: '2017',
-              max: 100,
-            },
-            {
-              text: '2018',
-              max: 100,
-            },
-            {
-              text: '2019',
-              max: 100,
-            },
-            {
-              text: '2020',
-              max: 100,
-            },
-            {
-              text: '2021',
-              max: 100,
-            },
-          ],
-        },
-        series: [
-          {
-            type: 'radar',
-            symbolSize: 0,
-            areaStyle: {
-              shadowBlur: 0,
-              shadowColor: 'rgba(0,0,0,.2)',
-              shadowOffsetX: 0,
-              shadowOffsetY: 10,
-              opacity: 1,
-            },
-            data: [
-              {
-                value: [90, 50, 86, 40, 50, 20],
-                name: 'Visits',
-                itemStyle: {
-                  color: '#b6a2de',
-                },
-              },
-              {
-                value: [70, 75, 70, 76, 20, 85],
-                name: 'Sales',
-                itemStyle: {
-                  color: '#67e0e3',
-                },
-              },
-            ],
-          },
-        ],
-      });
-    },
-    { immediate: true }
-  );
-</script>
diff --git a/src/views/dashboard/workbench/components/WorkbenchHeader.vue b/src/views/dashboard/workbench/components/WorkbenchHeader.vue
deleted file mode 100644
index 9a75adc..0000000
--- a/src/views/dashboard/workbench/components/WorkbenchHeader.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-<template>
-  <div class="lg:flex">
-    <Avatar :src="userinfo.avatar || headerImg" :size="72" class="!mx-auto !block" />
-    <div class="md:ml-6 flex flex-col justify-center md:mt-0 mt-2">
-      <h1 class="md:text-lg text-md">鏃╁畨, {{ userinfo.realname }}, 寮�濮嬫偍涓�澶╃殑宸ヤ綔鍚э紒</h1>
-      <span class="text-secondary"> 浠婃棩鏅达紝20鈩� - 32鈩冿紒 </span>
-    </div>
-    <div class="flex flex-1 justify-end md:mt-0 mt-4">
-      <div class="flex flex-col justify-center text-right">
-        <span class="text-secondary"> 寰呭姙 </span>
-        <span class="text-2xl">2/10</span>
-      </div>
-
-      <div class="flex flex-col justify-center text-right md:mx-16 mx-12">
-        <span class="text-secondary"> 椤圭洰 </span>
-        <span class="text-2xl">8</span>
-      </div>
-      <div class="flex flex-col justify-center text-right md:mr-10 mr-4">
-        <span class="text-secondary"> 鍥㈤槦 </span>
-        <span class="text-2xl">300</span>
-      </div>
-    </div>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { computed } from 'vue';
-  import { Avatar } from 'ant-design-vue';
-  import { useUserStore } from '/@/store/modules/user';
-  import headerImg from '/@/assets/images/header.jpg';
-
-  const userStore = useUserStore();
-  const userinfo = computed(() => userStore.getUserInfo);
-</script>
diff --git a/src/views/dashboard/workbench/components/data.ts b/src/views/dashboard/workbench/components/data.ts
deleted file mode 100644
index 50a5756..0000000
--- a/src/views/dashboard/workbench/components/data.ts
+++ /dev/null
@@ -1,156 +0,0 @@
-interface GroupItem {
-  title: string;
-  icon: string;
-  color: string;
-  desc: string;
-  date: string;
-  group: string;
-}
-
-interface NavItem {
-  title: string;
-  icon: string;
-  color: string;
-}
-
-interface DynamicInfoItem {
-  avatar: string;
-  name: string;
-  date: string;
-  desc: string;
-}
-
-export const navItems: NavItem[] = [
-  {
-    title: '棣栭〉',
-    icon: 'ion:home-outline',
-    color: '#1fdaca',
-  },
-  {
-    title: '浠〃鐩�',
-    icon: 'ion:grid-outline',
-    color: '#bf0c2c',
-  },
-  {
-    title: '缁勪欢',
-    icon: 'ion:layers-outline',
-    color: '#e18525',
-  },
-  {
-    title: '绯荤粺绠$悊',
-    icon: 'ion:settings-outline',
-    color: '#3fb27f',
-  },
-  {
-    title: '鏉冮檺绠$悊',
-    icon: 'ion:key-outline',
-    color: '#4daf1bc9',
-  },
-  {
-    title: '鍥捐〃',
-    icon: 'ion:bar-chart-outline',
-    color: '#00d8ff',
-  },
-];
-
-export const dynamicInfoItems: DynamicInfoItem[] = [
-  {
-    avatar: 'dynamic-avatar-1|svg',
-    name: '濞佸粔',
-    date: '鍒氬垰',
-    desc: `鍦� <a>寮�婧愮粍</a> 鍒涘缓浜嗛」鐩� <a>Vue</a>`,
-  },
-  {
-    avatar: 'dynamic-avatar-2|svg',
-    name: '鑹炬枃',
-    date: '1涓皬鏃跺墠',
-    desc: `鍏虫敞浜� <a>濞佸粔</a> `,
-  },
-  {
-    avatar: 'dynamic-avatar-3|svg',
-    name: '鍏嬮噷鏂�',
-    date: '1澶╁墠',
-    desc: `鍙戝竷浜� <a>涓汉鍔ㄦ��</a> `,
-  },
-  {
-    avatar: 'dynamic-avatar-4|svg',
-    name: 'Jeecg',
-    date: '2澶╁墠',
-    desc: `鍙戣〃鏂囩珷 <a>濡備綍缂栧啓涓�涓猇ite鎻掍欢</a> `,
-  },
-  {
-    avatar: 'dynamic-avatar-5|svg',
-    name: '鐨壒',
-    date: '3澶╁墠',
-    desc: `鍥炲浜� <a>鏉板厠</a> 鐨勯棶棰� <a>濡備綍杩涜椤圭洰浼樺寲锛�</a>`,
-  },
-  {
-    avatar: 'dynamic-avatar-6|svg',
-    name: '鏉板厠',
-    date: '1鍛ㄥ墠',
-    desc: `鍏抽棴浜嗛棶棰� <a>濡備綍杩愯椤圭洰</a> `,
-  },
-  {
-    avatar: 'dynamic-avatar-1|svg',
-    name: '濞佸粔',
-    date: '1鍛ㄥ墠',
-    desc: `鍙戝竷浜� <a>涓汉鍔ㄦ��</a> `,
-  },
-  {
-    avatar: 'dynamic-avatar-1|svg',
-    name: '濞佸粔',
-    date: '2021-04-01 20:00',
-    desc: `鎺ㄩ�佷簡浠g爜鍒� <a>Github</a>`,
-  },
-];
-
-export const groupItems: GroupItem[] = [
-  {
-    title: 'Github',
-    icon: 'carbon:logo-github',
-    color: '',
-    desc: '涓嶈绛夊緟鏈轰細锛岃�岃鍒涢�犳満浼氥��',
-    group: '寮�婧愮粍',
-    date: '2021-04-01',
-  },
-  {
-    title: 'Vue',
-    icon: 'ion:logo-vue',
-    color: '#3fb27f',
-    desc: '鐜板湪鐨勪綘鍐冲畾灏嗘潵鐨勪綘銆�',
-    group: '绠楁硶缁�',
-    date: '2021-04-01',
-  },
-  {
-    title: 'Html5',
-    icon: 'ion:logo-html5',
-    color: '#e18525',
-    desc: '娌℃湁浠�涔堟墠鑳芥瘮鍔姏鏇撮噸瑕併��',
-    group: '涓婄彮鎽搁奔',
-    date: '2021-04-01',
-  },
-  {
-    title: 'Angular',
-    icon: 'ion:logo-angular',
-    color: '#bf0c2c',
-    desc: '鐑儏鍜屾鏈涘彲浠ョ獊鐮翠竴鍒囬毦鍏炽��',
-    group: 'UI',
-    date: '2021-04-01',
-  },
-  {
-    title: 'React',
-    icon: 'bx:bxl-react',
-    color: '#00d8ff',
-    desc: '鍋ュ悍鐨勮韩浣撴槸瀹炵洰鏍囩殑鍩虹煶銆�',
-    group: '鎶�鏈墰',
-    date: '2021-04-01',
-  },
-  {
-    title: 'Js',
-    icon: 'ion:logo-javascript',
-    color: '#4daf1bc9',
-    desc: '璺槸璧板嚭鏉ョ殑锛岃�屼笉鏄┖鎯冲嚭鏉ョ殑銆�',
-    group: '鏋舵瀯缁�',
-    date: '2021-04-01',
-  },
-];
diff --git a/src/views/dashboard/workbench/index.vue b/src/views/dashboard/workbench/index.vue
deleted file mode 100644
index cc17cae..0000000
--- a/src/views/dashboard/workbench/index.vue
+++ /dev/null
@@ -1,36 +0,0 @@
-<template>
-  <PageWrapper>
-    <template #headerContent> <WorkbenchHeader /> </template>
-    <div class="lg:flex">
-      <div class="lg:w-7/10 w-full !mr-4 enter-y">
-        <ProjectCard :loading="loading" class="enter-y" />
-        <DynamicInfo :loading="loading" class="!my-4 enter-y" />
-      </div>
-      <div class="lg:w-3/10 w-full enter-y">
-        <QuickNav :loading="loading" class="enter-y" />
-
-        <Card class="!my-4 enter-y" :loading="loading">
-          <img class="xl:h-50 h-30 mx-auto" src="../../../assets/svg/illustration.svg" />
-        </Card>
-
-        <SaleRadar :loading="loading" class="enter-y" />
-      </div>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { Card } from 'ant-design-vue';
-  import { PageWrapper } from '/@/components/Page';
-  import WorkbenchHeader from './components/WorkbenchHeader.vue';
-  import ProjectCard from './components/ProjectCard.vue';
-  import QuickNav from './components/QuickNav.vue';
-  import DynamicInfo from './components/DynamicInfo.vue';
-  import SaleRadar from './components/SaleRadar.vue';
-
-  const loading = ref(true);
-
-  setTimeout(() => {
-    loading.value = false;
-  }, 500);
-</script>
diff --git a/src/views/demo/charts/Line.vue b/src/views/demo/charts/Line.vue
deleted file mode 100644
index c078942..0000000
--- a/src/views/demo/charts/Line.vue
+++ /dev/null
@@ -1,117 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, onMounted } from 'vue';
-
-  import { useECharts } from '/@/hooks/web/useECharts';
-  import { getLineData } from './data';
-
-  export default defineComponent({
-    props: {
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup() {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions, echarts } = useECharts(chartRef as Ref<HTMLDivElement>);
-      const { barData, lineData, category } = getLineData;
-      onMounted(() => {
-        setOptions({
-          backgroundColor: '#0f375f',
-          tooltip: {
-            trigger: 'axis',
-            axisPointer: {
-              type: 'shadow',
-              label: {
-                show: true,
-                backgroundColor: '#333',
-              },
-            },
-          },
-          legend: {
-            data: ['line', 'bar'],
-            textStyle: {
-              color: '#ccc',
-            },
-          },
-          xAxis: {
-            data: category,
-            axisLine: {
-              lineStyle: {
-                color: '#ccc',
-              },
-            },
-          },
-          yAxis: {
-            splitLine: { show: false },
-            axisLine: {
-              lineStyle: {
-                color: '#ccc',
-              },
-            },
-          },
-          series: [
-            {
-              name: 'line',
-              type: 'line',
-              smooth: true,
-              showAllSymbol: 'auto',
-              symbol: 'emptyCircle',
-              symbolSize: 15,
-              data: lineData,
-            },
-            {
-              name: 'bar',
-              type: 'bar',
-              barWidth: 10,
-              itemStyle: {
-                borderRadius: 5,
-                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                  { offset: 0, color: '#14c8d4' },
-                  { offset: 1, color: '#43eec6' },
-                ]),
-              },
-              data: barData,
-            },
-            {
-              name: 'line',
-              type: 'bar',
-              barGap: '-100%',
-              barWidth: 10,
-              itemStyle: {
-                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                  { offset: 0, color: 'rgba(20,200,212,0.5)' },
-                  { offset: 0.2, color: 'rgba(20,200,212,0.2)' },
-                  { offset: 1, color: 'rgba(20,200,212,0)' },
-                ]),
-              },
-              z: -12,
-              data: lineData,
-            },
-            {
-              name: 'dotted',
-              type: 'pictorialBar',
-              symbol: 'rect',
-              itemStyle: {
-                color: '#0f375f',
-              },
-              symbolRepeat: true,
-              symbolSize: [12, 4],
-              symbolMargin: 1,
-              z: -10,
-              data: lineData,
-            },
-          ],
-        });
-      });
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/views/demo/charts/Map.vue b/src/views/demo/charts/Map.vue
deleted file mode 100644
index e07344c..0000000
--- a/src/views/demo/charts/Map.vue
+++ /dev/null
@@ -1,75 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, onMounted } from 'vue';
-
-  import { useECharts } from '/@/hooks/web/useECharts';
-  import { mapData } from './data';
-  import { registerMap } from 'echarts';
-
-  export default defineComponent({
-    props: {
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup() {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
-
-      onMounted(async () => {
-        const json = (await (await import('./china.json')).default) as any;
-        registerMap('china', json);
-        setOptions({
-          visualMap: [
-            {
-              min: 0,
-              max: 1000,
-              left: 'left',
-              top: 'bottom',
-              text: ['楂�', '浣�'],
-              calculable: false,
-              orient: 'horizontal',
-              inRange: {
-                color: ['#e0ffff', '#006edd'],
-                symbolSize: [30, 100],
-              },
-            },
-          ],
-          tooltip: {
-            trigger: 'item',
-            backgroundColor: 'rgba(0, 0, 0, .6)',
-            textStyle: {
-              color: '#fff',
-              fontSize: 12,
-            },
-          },
-          series: [
-            {
-              name: 'iphone4',
-              type: 'map',
-              map: 'china',
-              label: {
-                show: true,
-                color: 'rgb(249, 249, 249)',
-                fontSize: 10,
-              },
-              itemStyle: {
-                areaColor: '#2f82ce',
-                borderColor: '#0DAAC1',
-              },
-              data: mapData,
-            },
-          ],
-        });
-      });
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/views/demo/charts/Pie.vue b/src/views/demo/charts/Pie.vue
deleted file mode 100644
index 4f6110d..0000000
--- a/src/views/demo/charts/Pie.vue
+++ /dev/null
@@ -1,135 +0,0 @@
-<template>
-  <div ref="chartRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, PropType, ref, Ref, onMounted } from 'vue';
-
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  export default defineComponent({
-    props: {
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup() {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
-      const dataAll = [389, 259, 262, 324, 232, 176, 196, 214, 133, 370];
-      const yAxisData = ['鍘熷洜1', '鍘熷洜2', '鍘熷洜3', '鍘熷洜4', '鍘熷洜5', '鍘熷洜6', '鍘熷洜7', '鍘熷洜8', '鍘熷洜9', '鍘熷洜10'];
-      onMounted(() => {
-        setOptions({
-          backgroundColor: '#0f375f',
-          title: [
-            {
-              text: '鍚勬笭閬撴姇璇夊崰姣�',
-              left: '2%',
-              top: '1%',
-              textStyle: {
-                color: '#fff',
-                fontSize: 14,
-              },
-            },
-            {
-              text: '鎶曡瘔鍘熷洜TOP10',
-              left: '40%',
-              top: '1%',
-              textStyle: {
-                color: '#fff',
-                fontSize: 14,
-              },
-            },
-            {
-              text: '鍚勭骇鍒姇璇夊崰姣�',
-              left: '2%',
-              top: '50%',
-              textStyle: {
-                color: '#fff',
-                fontSize: 14,
-              },
-            },
-          ],
-          grid: [{ left: '50%', top: '7%', width: '45%', height: '90%' }],
-          tooltip: {
-            formatter: '{b} ({c})',
-          },
-          xAxis: [
-            {
-              gridIndex: 0,
-              axisTick: { show: false },
-              axisLabel: { show: false },
-              splitLine: { show: false },
-              axisLine: { show: false },
-            },
-          ],
-          yAxis: [
-            {
-              gridIndex: 0,
-              interval: 0,
-              data: yAxisData.reverse(),
-              axisTick: { show: false },
-              axisLabel: { show: true },
-              splitLine: { show: false },
-              axisLine: { show: true, lineStyle: { color: '#6173a3' } },
-            },
-          ],
-          series: [
-            {
-              name: '鍚勬笭閬撴姇璇夊崰姣�',
-              type: 'pie',
-              radius: '30%',
-              center: ['22%', '25%'],
-              data: [
-                { value: 335, name: '瀹㈡湇鐢佃瘽' },
-                { value: 310, name: '濂ヨ开瀹樼綉' },
-                { value: 234, name: '濯掍綋鏇濆厜' },
-                { value: 135, name: '璐ㄦ鎬诲眬' },
-                { value: 105, name: '鍏朵粬' },
-              ],
-              labelLine: { show: false },
-              label: {
-                show: true,
-                formatter: '{b} \n ({d}%)',
-                color: '#B1B9D3',
-              },
-            },
-            {
-              name: '鍚勭骇鍒姇璇夊崰姣�',
-              type: 'pie',
-              radius: '30%',
-              center: ['22%', '75%'],
-              labelLine: { show: false },
-              data: [
-                { value: 335, name: 'A绾�' },
-                { value: 310, name: 'B绾�' },
-                { value: 234, name: 'C绾�' },
-                { value: 135, name: 'D绾�' },
-              ],
-              label: {
-                show: true,
-                formatter: '{b} \n ({d}%)',
-                color: '#B1B9D3',
-              },
-            },
-            {
-              name: '鎶曡瘔鍘熷洜TOP10',
-              type: 'bar',
-              xAxisIndex: 0,
-              yAxisIndex: 0,
-              barWidth: '45%',
-              itemStyle: { color: '#86c9f4' },
-              label: { show: true, position: 'right', color: '#9EA7C4' },
-              data: dataAll.sort(),
-            },
-          ],
-        });
-      });
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/views/demo/charts/SaleRadar.vue b/src/views/demo/charts/SaleRadar.vue
deleted file mode 100644
index ea7ed2a..0000000
--- a/src/views/demo/charts/SaleRadar.vue
+++ /dev/null
@@ -1,106 +0,0 @@
-<template>
-  <Card title="閿�鍞粺璁�" :loading="loading">
-    <div ref="chartRef" :style="{ width, height }"></div>
-  </Card>
-</template>
-<script lang="ts">
-  import type { Ref } from 'vue';
-  import { defineComponent, ref, watch } from 'vue';
-  import { Card } from 'ant-design-vue';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  export default defineComponent({
-    components: { Card },
-    props: {
-      loading: Boolean,
-      width: {
-        type: String as PropType<string>,
-        default: '100%',
-      },
-      height: {
-        type: String as PropType<string>,
-        default: '400px',
-      },
-    },
-    setup(props) {
-      const chartRef = ref<HTMLDivElement | null>(null);
-      const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
-      watch(
-        () => props.loading,
-        () => {
-          if (props.loading) {
-            return;
-          }
-          setOptions({
-            legend: {
-              bottom: 0,
-              data: ['Visits', 'Sales'],
-            },
-            tooltip: {},
-            radar: {
-              radius: '60%',
-              splitNumber: 8,
-              indicator: [
-                {
-                  text: '2017',
-                  max: 100,
-                },
-                {
-                  text: '2017',
-                  max: 100,
-                },
-                {
-                  text: '2018',
-                  max: 100,
-                },
-                {
-                  text: '2019',
-                  max: 100,
-                },
-                {
-                  text: '2020',
-                  max: 100,
-                },
-                {
-                  text: '2021',
-                  max: 100,
-                },
-              ],
-            },
-            series: [
-              {
-                type: 'radar',
-                symbolSize: 0,
-                areaStyle: {
-                  shadowBlur: 0,
-                  shadowColor: 'rgba(0,0,0,.2)',
-                  shadowOffsetX: 0,
-                  shadowOffsetY: 10,
-                  opacity: 1,
-                },
-                data: [
-                  {
-                    value: [90, 50, 86, 40, 50, 20],
-                    name: 'Visits',
-                    itemStyle: {
-                      color: '#9f8ed7',
-                    },
-                  },
-                  {
-                    value: [70, 75, 70, 76, 20, 85],
-                    name: 'Sales',
-                    itemStyle: {
-                      color: '#1edec5',
-                    },
-                  },
-                ],
-              },
-            ],
-          });
-        },
-        { immediate: true }
-      );
-      return { chartRef };
-    },
-  });
-</script>
diff --git a/src/views/demo/charts/china.json b/src/views/demo/charts/china.json
deleted file mode 100644
index 96d37e5..0000000
--- a/src/views/demo/charts/china.json
+++ /dev/null
@@ -1,839 +0,0 @@
-{
-  "type": "FeatureCollection",
-  "features": [
-    {
-      "type": "Feature",
-      "id": "710000",
-      "properties": {
-        "id": "710000",
-        "cp": [121.509062, 24.044332],
-        "name": "鍙版咕",
-        "childNum": 6
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@掳脺炉脹"],
-          ["@@茮拇脮茒脡杉模潞冒蕗\\茙s脝N艑脭臍盲聹n脺皮蓨膫莯膯拇聻膜菉浓x臍漠莻坪貌茖聜聳芒脭庐漠X纽牛聘Z没脨聥茣茟G膽篓沫M贸路臋c毛茲蓧l脻漂止脜艃^脫路聫聺艣艃菋茝膹聧铆氓蓻G蓧聶驴@膬茟聨楼臉W乾脧亩艁芒"],
-          ["@@\\p|WoYG驴楼I聠j@垄"],
-          ["@@聟隆聣@聛聢V^Rq聢B聛bA聦nTXeRz陇L聻芦鲁I"],
-          ["@@脝EE聴聞kWq毛聽@聹"],
-          ["@@fced"],
-          ["@@聞炉蓽脛猫聫a矛炉脴菗I摹慕"],
-          ["@@莽没臇毛膭聳h貌艡聽"]
-        ],
-        "encodeOffsets": [
-          [[122886, 24033]],
-          [[123335, 22980]],
-          [[122375, 24193]],
-          [[122518, 24117]],
-          [[124427, 22618]],
-          [[124862, 26043]],
-          [[126259, 26318]],
-          [[127671, 26683]]
-        ]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "130000",
-      "properties": {
-        "id": "130000",
-        "cp": [114.502461, 38.045474],
-        "name": "娌冲寳",
-        "childNum": 3
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@o~聠Z]聜陋r聣潞c_魔虏G录s`j脦鸥n眉s脗聹艂NX_聯M`脟陆脫nUK聟臏聛膿s陇颅漏yr媒搂u模聦聫c聠J聤聸e"],
-          ["@@U`Ts驴m脗聜"],
-          [
-            "@@o潞茓脛d聳eV聨DJj拢聙J|脜dz脗聲Ft~聻K浓赂I脝v|聰聡垄r}猫聠聨onb聵}`R脦脛n掳脪d脼虏聞^庐聮ln脨猫膭l冒脫聹脳]陋脝}聬聧Li膫卤脰聫`^掳脟露p庐膽Dc聹艐`聧聳Z脭聮露锚qvF脝職聠N庐膯TH庐娄O聮戮聤Ib脨茫麓B膼散糯脝铆圈p聳膼脼XR聙路nndO聻陇聮O脌膱茠颅Qg聵碌Fo|g葤臋SWb漏osx|hYh聲g艃fm脰末n潞聙T脤聮Sp聸垄dY膜露U膱jl聮菒p盲矛毛|鲁k脹fw虏Xjz~脗qbT聤脩聞臎浓@|oM聡聮zv垄Zr脙Vw卢脓臇赂f聦掳脨T聙陋q聨s{S聻炉r聽忙脻lNd庐虏臑聽菃iG臉聜J聶录lr}~K篓鸥茞脤W枚聙聶脝聤zR職陇l锚m臑L脦聞聮聺@隆|q]SvK聙脩cwp脧脧聛聠目聫膰猫n莫W聬l膭kT}聢J聰陇~聝脠T聛聞d聞聶pdd示默聤聰聨BVt聞E脌垄么P膸茥猫@~聜k聳眉\\r脢臄脰忙W_搂录F聵聠麓漏貌D貌j聬聮聢Y脠rb臑膩酶艀G{苺|娄冒rb|脌H`p蕿kv聜GpuARh脼脝嵌g臉聤T聫羌乒S拢篓隆霉鲁艠脥]驴脗y聧聶么EP聽xX露聫鹿脺聡O隆聯g脷隆Iw脙茅聭娄脜B聡脧|脟掳聟N芦煤mH炉聺聥芒聼D霉聨y艤聻挪I脛u膼篓D聛聻聲赂d蓚聡聬聜F聼聝聲聸Oh聡膽漏O聼聸i脙`ww^聝脤k聼聭脩H芦茋扦艞暮tFu聟{Z}脰@U聡麓聟蕷Lg庐炉O谋掳脙w聼聽^聵聴聙Vb脡s聡聢mA聟锚]]w聞搂聸RRl拢聡拳碌u炉b{脥D臎茂每颧聨uT拢摹聝臎艞苾臐聯Q篓fV聠茓聲茀n颅a@聭鲁@職膹聞y脙陆聫I墓脢K職怒f膵虐贸聦xV@t聧聢漂聦J聰]e聝R戮fe|rHA聵|h~臇茘l搂脧聤lT铆b聽脴o聢脜bbx鲁^z聬脙亩職露Sj庐A聰y脗h冒k`職芦P聙聰脣聢碌EF聠脹卢Y篓幕r玫qi录聣Wi掳搂聬聮脨卤麓掳^[聢脌|臓O@脝xO\\t聨a\\t臅t没{摹聦颧X媒莫脫j霉脦Rb聸職^脦聸fK[脻聫d臎Yf铆脵Ty聨uUSy艑艔暖@Oi陆聮茅艆颅aVc艡搂ax鹿X呕谩c聡聻WU拢么茫潞Q篓梅脩ws楼qEH聣脵|聣聸拧YQo艜脟y谩膫拢M脙掳o钮聫脢聣P隆m聫職WO隆聙v聠{么v卯膿脺ISp脤hp篓聽聭j聠de艛Q脰j聵X鲁脿聶膱[n`Yp@U聻聳cM`聮RKh聦Eb聹聰p艦lNut庐Etq聜ns脕聤gA聺聥i煤聛聥oH聡qCX聡聰hfgu聯~脧聥WP陆垄G^}炉脜墨GC聼聺脩^茫ziM谩募MT脙茦rMc|O_聫聻炉艓麓|聡morDkO\\m膯Jfl@c蘑卢垄a摩tR谋脪聶戮霉苺^ju懦艙K颅聝UFy聶聴茲聟聸墨脹梅膮V脳q匹V驴a葔d鲁聺B聸qPBm聸a脣膽呕模m聯脜庐V聤鹿d^K聡Ko聼nYg聯炉Xhqa聰Ldu楼聲脥p菂隆K膮脜聝k臐臋臎hq聡}Hy脙聯]鹿千拢聟脥梅驴q谩碌搂職聶g聭陇o^谩戮ZE聡陇i`某{n聲聝Ol聫禄聼W脻臄寞hg聧聸F[驴隆聴脽kO眉拧_聣聙奴聥i聞潜脿Ut臈Gyl聝}聧聦脫M}聙jpEC~隆FtoQi聭職Hk聺k{聬脙m茂聜"
-          ]
-        ],
-        "encodeOffsets": [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "140000",
-      "properties": {
-        "id": "140000",
-        "cp": [111.849248, 36.857014],
-        "name": "灞辫タ",
-        "childNum": 1
-      },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": [
-          "@@脼末脪聝S聣ra}脕聙yWix卤脺e麓l猫聯脽脫菑ok聭膰i碌VZ模隆co聹聭TS脣鹿莫mn脮艅e聳hZg{gtw陋pXa臍Th葢p{露Eh聴庐R膰茟P驴拢聭P聺mc赂mQ脻W聲膹去o脜卯伞懦A膹盲鲁a脧聣J聭陆楼PG颅膮SM颅聶聟E脜ru碌茅聙聭Y脫聨聲艑_d聸膾Co颅脠碌]炉聬_虏脮j膩聨K~聫漏脜脴^脭聸k茂莽膬m脧聭k]颅卤聝c脻炉脩脙mQ脥~_a聴pm聟聧~莽隆q聯聢u{J脜脓路聺Ls}聳Ey脕脝cI{陇Ii聧CfUc聲茖脙p搂]臎聸芦vD@隆S脌聭碌M聜脜wu聨YY聡隆Db脩c隆h聝脳]nkoQdaM莽~eD聲脹tT聣漏卤@楼霉@脡隆聣ZcW|WqOJm末l芦魔艧vO脫芦Iq聧膬V聴楼聼D[mI~脫垄cehi脥]茡~磨qX聤路e品聹n卤聯}v聲[臎膹聨艜]_聭艙聲`聣鹿聝搂脮艒I聶o漏b颅s^}脡t聧卤奴芦鲁p拢每路W碌|隆楼膬F脧s脳聦楼艆x聼脢d脪{潞v拇脦锚脤蓨虏露聙眉篓|脼聘碌炔聭LL煤脡茙陇蠆臋臄V`聞_b陋聥S^|聼d聤zY|dz楼p聠Zb脝拢露脪K}t摩脭艈茽聜PYzn聙脥vX露臍n聽臓聛脭聞z媒娄陋聵梅聻脩母脵聨U葘赂聜d貌脺J冒麓聮矛煤NM卢聦XZ麓聭陇艎歉_tldI職{娄苺冒臓趣楼NehXn聛YG聜聡R掳聽片Dj卢赂|C臑聞Kq聜潞f茞i暮漏陋~膯OQ陋聽陇@矛铅蓪虏忙B聦脢聰T聹鸥聵蕚艒臇聮職拇艦聳葊聹脝每葎l扭膾枚聞t聰脦陆卯录抹Xh聦聭聵|陋M陇脨z"
-        ],
-        "encodeOffsets": [[116874, 41716]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "150000",
-      "properties": {
-        "id": "150000",
-        "cp": [111.670801, 41.818311],
-        "name": "鍐呰挋鍙�",
-        "childNum": 2
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          [
-            "@@炉聧Pq聝FB聟聣|S聲鲁C|k帽聲H聥聫d聭i脛楼聧s聢艍脜聭聟P贸脩脩E^聭脜Ppy_YtS聶聧hQ路aHwsOn艍脙職s漏iqj聸聣聙USi潞]茂W職聣芦gW聛隆A聳聛R毛楼_聨sg脕nUI芦m聣聟聞聥]j聡vV录聧euhwqA聞聫aW聵聝_碌j聟禄莽jioQR鹿膿脙脽t@r鲁[脹l膰脣^脥脡谩G聯聸OU脹聴OB卤聲X聼k脜聡鹿拢k|e]ol聶聼kV脥录脮qta脧玫jg脕拢搂U^聦聰RL聢脣nX掳脟聮Bz聧聠^~wfv聢ypV聽炉聞偏膲谁全茥欧煽每目茟藘臐每脙莾脽脣艖贸漏菒葝艗聺臇M脳脥Eyx聥镁p]脡v茂猫聭v聺苺n脗拇脰@聜聣聠V~膱聛v娄w臇t聴膿jy脛DX脛xGQuv_聸i娄aB莽w聭藳wD聶漏{聼t膩mQ聙{EJ聫搂KP艣茦瓶楼聧@聣sCT聲脡}蓛w聢茋y卤聼g聬脩聯}T[梅k脨莽娄芦聟S脪楼赂毛BX陆聣H谩脜碌脌臒tS聬脻脗a[疲掳炉聛娄聛P茂隆聛]拢摹聯聳聯脪k庐G虏聞猫Q掳贸Mq}E聤贸茞脟\\聛聝聡@谩眉gQ脥聥u楼F聝聯T脮聸驴J没聡]|mv膩脦Yua聛^Wo脌a路颅z膮脪ot脳露CL茥i炉陇m茙H菉陇卯矛删艎矛Td氓wsR聧脰g膾懦煤聛脥摹盲脮}Q露聴聢驴A聲聠聥[隆聦{d脳uQA聝聸M聲xV聥vMOm膬l芦ct[w潞_職脟脢聤聨聼jb脗拢摩S_茅聯QZ聯_lwgOi媒e`YYLq搂I脕聢浅拢脵脣[脮陋u茝鲁脥T聴s路b聛脕慕盲臈[聸b[聢艞f茫cn楼卯C驴梅碌[艔脌Q颅艒職膲m驴脕^拢mJVm聡聴聫L[{脧_聺拢聸F楼脰聧{殴A}聟脳Wu漏脜a懦某瞥hB{路TQq脵I姆脣聭Z膽漏Yc|M隆聟L聲聺eVU贸K_聺聺QWk聮_磨聭驴茫Z聫聲聛禄X\\拇uU聝猫聡lG庐臎艂T臓臒D艃聰Or脥d聜脝脥z]聥卤聟怒漏聼脜聮]聦脜脨}U脣楼漏T膵聶茂xgckfWgi\\脧膾楼Hk碌E聵毛{禄脧etcG卤ahUi帽iWs蓙聢路c聺聳C聜脮k]w葢|膰a}w聟Va臍谩聽聻聦G掳霉nM卢炉聠{脠聢脨脝A聮楼脛锚Jx脵垄聰hP垄脹聢潞聙碌聬wWO聼贸F聨職脕z^脌艞脦煤麓搂垄T陇腔坪S聬臈聣堑h脻脜QgvBHou聛蕽l_o驴Ga{茂q{楼|趴目H膫梅a臐脟q聡Z聫聭帽i帽C鲁陋聴聟禄E`篓氓X膿脮q脡没[l聲}聛莽@膷茦贸O驴隆聝FUs聧A聣聯式墨cc職oc聝聜聝脟S}聞聯拢聡IS~膬l聫k末X莽m聬膱聟艀脨聜o脨dx脪uL^T{r@垄聭聻脥聝臐K茅n拢kQ聶聣y職脜玫脣X欧茝L搂~}kq職禄聛IH臈菂j臐聼禄脩脼o聼氓掳qT聺t|r聧漏脧S聥炉路e浓臅x芦脠[eM聢驴yu聢聭pN~鹿脧yN拢{漏聮聴g聥魔W铆禄脥戮s聯蓹拧菂_脙膧蓷卤膮聶某膲聫蕧艑欧聴S聸脡聯A聥卤氓钎蓩@毛聼拢R漏膮P漏}墓陋茝j鹿er聛聝LD臐路{i芦偏C拢碌sKC職聟GS|煤镁X聰gp聸{脕X驴聼膰{票葟帽Z谩臄yo脕hA聫聶}艆膯fd艍聞_鹿聞Y掳臈签脩隆H炉露oMQq冒隆脣聶|聭脩`骗艁X陆路贸脹聯聧x臒寞脜cQ聡聢聯聝s芦t葖菂F聯聼聛聺霉^i聧聭t芦膶炉[聸h聛聛Ai漏谩楼脟臍脳l|鹿y炉Y鹊茡聥帽聬菣碌茂聜膵聶幕|D聹聶眉拳露隆聵聸o沤盲脮G\\脛聫T驴脪玫r炉聹聼Lgu脧Y臋R譬職煞艑O\\陌脨垄忙^艎聽牟榷葐b脺G聨臐卢驴臍V膸g陋聧^铆u陆j每臅臋j谋k@慕聝]臈l楼脣聡沫没脕聞聝臈茅V漏卤膰n漏颅葒聻脥q炉陆聲Y脙脭艍聯脡N脩聺脜脻y鹿Nq谩蕝D恰脣帽颅苼Y脜y瘫os搂葖碌式菢菑片杀脿聭瓢N垄茢脢u木媒木蠋泉坪蓚募聻x聹Z膱}脤艍弄聵暮艙聨沫F袥慕虆龋徒脪诺矛譬脟蠇每犬恰艔莽茟暖臅~脟聧聸录瘸脨Uf聠dIx每\\G聽聫聢z芒蓮脵O潞路pqy拢聠@聬聦聤q镁@菫私IB盲疲zs脗Z聠脕脿幕d帽掳艜z茅脴疟z葯C矛D葠拇暮f庐聨脌木瓢酶@蓽脰脼K膴艊苿搂聜蛻t臎茂汀VA摹脩脩禄d鲁枚菎脻X膲臅脰{镁膲u赂脣蕝臒U處茅h晒茊虠坍葮菉芝啷溹“牛嗒久裁な甒卢庐覍e专奴葼k涩苫碳茫眉f茽S爪嫂蟼氓葓H蠚脦K浅筒O冒脧葐茦录C蠚菤啖毸夹っ斅偮て屄災灺澨猀胜麓录m葼J藔聼撇脌蔂m菒n菙膸葐脼菭N~聙盛臏聜露茖膯臉藕蕟痊霜臍膾赂臑G葨拼苺j`蘑莽亩膩脿艃潞膿蘑聝臇膰職Y聦脌艓眉么Q脨脗艓艦菃艦锚茤職聵o藛D膜脮潞脩菢脹摔鲁蛝g艅聛茦臄脌^聻陋苽`陋t戮盲茪锚摩膧录脨聙臄菐篓葦禄蜖^水脢圈皮酶xRr艤H陇赂脗xD脛聺聦|酶藗藴飘聬脨卢蓺w刹Fj臄虏脛w掳菃d脌脡聻_母d卯脿艓j脢聹锚T臑陋艑聡艤W脠|tq蘑UB~麓掳脦FC聲聨U录p膧膿苿N娄聧戮O露聤艂K膴Oj聯臍聰j麓臏Yp聵{娄聞聢S臍脥\\T職脳陋V聳梅艩铆篓脜DK掳脽t艊臄K職篓堑脗c木蹋臍牵葎慕F聡l摹U牡聹艊聥龋F蕢蓙聝M臒寞蕪贫煞脴怒O墙芦平聬奴鹿票艖虧权搂葹蕵臇i蓽啥师}篓知酄溙�茋乾鹿迁E甩磨陋脭锚F聨x煤Q聬聞Er麓W聞rh陇茞聽\\tal膱DJ聵脺|[Pll虤赂茙G煤麓P聻卢W娄聠^娄聳H]prR聯n|聬or戮聬wLVn脟Iujkmon拢cX^聫Bh`楼V聰聞娄U陇赂}聙xRj聳[^xN[~陋聤xQ聞聜[`陋H脝脗Exx^w職N露脢聵|篓矛聠聵聙Mr聹dYp聜聬oRzNy聵脌Ds~聙bcf脤`L聳戮n聥|戮T聜掳c篓脠垄a聜r陇聳`[|貌D艦臄枚xEl脰dH聞脌I`聞膸\\脌矛聛~脝聨R录tf聲娄^垄姆露e聰脨脷M聦ptgj聳聞伞膶脜y摹L没聶艊V庐聤脛聫脠苺聠膸掳P|陋VV聠陋j聳卢臍脪锚p卢聳E|努脗c|脌t茞K聽f聢{臉F膾聹茖X撇膮o陆臉聭\\楼聳o}聸脹u拢莽颅kX聭{u末芦膩铆脫U艆脽泞q聙聫扭楼ly艌[聙oi{娄聥L聡艅聡冒F泉葨聰聺膾L聞驴脤聥聢f聦拢K拢屎聶oqN聼聝w臒c`ue聴tOj脳掳KJ卤q聝脝摹m聣臍艞os卢聟qehqsu聹聝H{赂kH隆聤聟脢R仟脟茖b葐垄麓盲脺聧垄N矛脡蕱娄芒漏臓u娄枚膶^芒拢膫h聳職臇M脠脛w聜\\f纽掳W聽垄戮lu鸥D聞w聤\\虁蕢脤脹M聟膧[b脫聻En}露Vc聟锚聯s聝"
-          ]
-        ],
-        "encodeOffsets": [[[129102, 52189]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "210000",
-      "properties": {
-        "id": "210000",
-        "cp": [123.429096, 41.796767],
-        "name": "杈藉畞",
-        "childNum": 16
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@L聳聨@@s聶a"],
-          ["@@MnNm"],
-          ["@@聛d聜c"],
-          ["@@e脌聜C@b聜聯聺聣"],
-          ["@@f聡聟Xwkbr聳脛`qg"],
-          ["@@^jtW聭Q"],
-          ["@@聛~聽Y]c"],
-          ["@@G`臄N^_驴聛Z聜脙M"],
-          ["@@iX露B聥Y"],
-          ["@@聞Y聝Z"],
-          ["@@L_{Epf"],
-          ["@@^WqCT\\"],
-          ["@@\\[聯聥搂t|聰陇_"],
-          ["@@m`n_"],
-          ["@@脧x菍{q_脳^Giip"],
-          [
-            "@@@聹茅^B聠聡nt聢a脢U聴聵聼]x聽炉脛P牟颅掳h聙蕶K鲁聠V聢脮@Y~聠|Ev墓s脟聞聧娄颅L^p脙聜虏鸥脪G聽聮脣l]聞xx脛_聵fT陇膸陇c聨聹P聞聳C篓赂TVjbgH虏sd脦dH聬t`B聢聴虏卢GJj臋露[脨hjeXdlwh職冒S膶娄陋V脢脧聙聥脝聭Z聵脝哦庐虏聠^聦脦y聛脜脦cPq艅聯臍DM魔臏艁H颅聢k聞莽vV[某录W聳聜Y聬脌盲摩聮聭`Xl聻R`聻么LUV聻fK聳垄聠{NZd膾陋聮Y母脤脷JRr赂SA|拼g糯拇脝bv陋脴X~聠藕B聨|娄脮聹E聻陇脨`\\|聬K聢聵UnnI]陇脌脗膴n艓聶R庐艕驴露\\脌酶铆Dm娄脦b浓ab聣聹a臉\\木茫聜脗赂a聵t脦S茞麓漏v\\脰脷脤谴陇脗聡篓JKr聙Z_Z聙fj镁hPkx聙`Y聰聮RI聦jJcVf~sCN陇聽聢E聜聹h忙聫m聣聳sHy篓S冒脩脤\\\\聼膼RZk掳IS搂fq艗脽媒谩臑聧脵脡脰[^炉扦挪聞锚麓\\娄卢膯PM炉拢聼聢禄u茂p霉zEx聙聻an碌yoluqe娄W^拢脢L}帽rkqW艌没P聶聣UP隆么J聤oo路聦U}拢聦聞[路篓@X聦母聼聯聥聥DXm颅脹脻聫潞聡聸GU聥C脕陋陆{铆膫^聬cj聡k聯露脙[q陇聯L脡枚鲁cux芦zZf聝虏BW脟庐Y脽陆ve卤脙C聲媒拢W{脷^聮q^s脩路篓聥脥O聛t聯鹿路C聛楼聡GD聫聸r铆@w聧脮K牛脙聺聥聵聼芦V路i}x脣脥梅聭i漏臐聡蓾恰]聝聢{c聶卤OW聥鲁Ya卤聼聣_莽漏聜H聻臅o偏聙艊q聝r聺鲁聣Lys[聞帽鲁炉OS聳膹OMisZ聠卤脜FC楼Pq{聫聜脙[Pg}\\聴驴gh膰O聟聲k^模脕聧F谋膲磨M颅oEqqZ没臎艍鲁F聭娄o牡聴h聼脮P{聫炉~T聺脥l陋聣N聣脽Y聯脨{Ps{脙VU聶聶e膸wk卤艍V脫陆沤J茫聛脟脟禄Jm掳dhc脌ff聭dF~聢聙膧e臇聙d`sx虏聽職聝庐E偶膧dQ聧聥脗d^~膬脭H聢娄\\聸LKp膭Vez陇NP聽枪脫聴R聶脝膮JSh颅a[娄麓脗ghwm聙B聬脨篓藕hI|聻VV聨聴聨|p]聽脗录猫N盲露脺B脰录聯L`聜录b脴忙聦KV聰聼po聹煤NZ脼脪Kxpw|脢EMnzEQ職聨IZ聰聨Z聡NB聢膷脷F脺莽m末聜W莫帽t聭脼牡脟帽Z芦uD聜卤|茝l某楼茫n路卤Pm脥a聣聳d聫a聡聽CL聡菓k霉贸隆鲁脧芦Qa膵脧聭O脙楼脮膽Q去膵骗y聥鲁脙A"
-          ]
-        ],
-        "encodeOffsets": [
-          [[123686, 41445]],
-          [[126019, 40435]],
-          [[124393, 40128]],
-          [[126117, 39963]],
-          [[125322, 40140]],
-          [[126686, 40700]],
-          [[126041, 40374]],
-          [[125584, 40168]],
-          [[125453, 40165]],
-          [[125362, 40214]],
-          [[125280, 40291]],
-          [[125774, 39997]],
-          [[125976, 40496]],
-          [[125822, 39993]],
-          [[125509, 40217]],
-          [[122731, 40949]]
-        ]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "220000",
-      "properties": { "id": "220000", "cp": [125.3245, 43.886841], "name": "鍚夋灄", "childNum": 1 },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": [
-          "@@聭p盲聰鲁PCl聝Fbb脥z職聙wBG聮沫聙Z聞脜i聯禄聝lY颅膵虏Sg聨k脟拢聴^S聣聯qd炉聲聥R聟漏茅聨拢炉S聠\\cZ鹿i疟茝Cu茘脫X聡oR}聯M^o聲拢聟R}o陋U颅F聟uuXHl聫E脜聲聡聙脧漏陇脹mT聨镁陇D聳虏脛uf脿脌颅XX脠卤Ae聞yYw卢dv玫麓K脢拢聰\\r碌脛l聰i聢聫d膩]|卯漏戮D脗V聦聹H鹿聢脼聬庐脺Wn聦C聰聦姆聽W聥搂@\\赂聥聝~陇聥Vp赂聣p贸IO垄聤VO職艊眉rXql~貌脡K]陇楼Xrfkvzpm露聺bwyFo煤v冒聡录陇聽N掳膮O楼芦鲁[聝茅恰疟_掳脮\\脷脢臐聨镁芒艖脿erR篓颅JYl膹Q[聽脧Y毛脨搂TGz聲tn聤脽聬隆gF聛聫kM聼膩G脕陇ia聧聽脡聣聶脠鹿`\\xs聙卢d膯kNnuNU聤聳u聻P@聜vRY戮聲聳\\垄聟聦G陋贸膭~R茫脰脦蘑霉聜膽糯脮hQ聨xtc忙毛S山艍铆毛菈拢茘G拢nj掳K茦碌Ds脴脩py膯赂庐驴bXp聜]vb脥Zu膫{n聢^I眉聹脌S脰聞聰娄E聦vR脦没h@芒聞聢[聜茝脠聣么~FNr炉么莽R卤聝颅H脩l聲聮蘑聳^陇垄聜O冒聼聦忙vxs艗]脼脕T聫臓s露驴芒脝聤GW戮矛A娄路T脩卢聠猫楼聙脧脨J篓录聫脪脰录聝痞蓜x脢~S聳tD@聤膫录糯隆jl潞W聻v脨聣聢z痞Z脨聨虏CH聴聽聞A聺xiukd聥聦Ggetqmc聻脹拢Ozy楼cE}|聟戮cZ聟聧k聜聣驴u艕茫[oxGikfe盲T@聟職SUwpi脷FM漏聮拢猫^脷聼聜`@v露e艌聠f聛聽h聵eP露聬聻t聯盲Ol脙聰Ug聝脼z鸥U`l聹}脭脝Uv脴_艑卢脰i^膲i搂虏脙聤B~隆膱聶脷Egc|DC_圈m虏rBx录M脭娄女d抹脙芒Yx聭茦DV脟暮目g聧驴cw脜\\鹿聵楼Y沫l聛聹陇聻Ov聠職LjM_a聽W`z募M啪路\\swq脻SA聡職聴q聣艢某炉聤聭掳k聬聤R膿掳wx^膼k莻脪聯聞聹聻聯聹聨聞聥\\]聵nr膫}虏膴挪脪酶茫h路M{yMzys臎n聺膾摹V路掳聯G鲁录X脌聯聯聶陇鹿聧i麓o陇艃職聼脠`脤聝遣脛U臑d\\i脰職聦聢m脠B膜脺刹DEh聽LG戮苺脛戮{Wa聦聧Y脥脠聫蘑臉脭R卯膼j聥}脟聻聯ccj聡oUb陆職聧{聯h搂蔷{K聥茤碌脦梅聻G膧脰艩氓瓢脦s颅l聸聲yi膿芦聥`氓搂聺H楼Ae聺^搂聞GK聛}i茫\\c]v漏模Z聯m脙|聯[M}模T蔁牡脗聭脗`脌聳莽m聣聭FK楼脷铆脕bX職鲁脤Q脪聭Ho聛f{聣]e聙pt路G艐臏Y眉n膸懦VY^聮聵yd玫k脜ZW聞芦WUa~U路Sb聲wG莽菓聜聯iW^q聥F聜聯聸uN臐聧聴路Ew聞聥UtW路脻膹忙漏PuqEzwAV聲聴XR聣茫Q`颅漏G聦M聡ehc聸c聰聺膹脧聺d聡漏脩W_脧聴Y茀聦禄聟茅\\聧聝晒~菣G鲁m脴漏B拧聬uT搂膜陆垄脙_脙陆聭L隆聧聭媒聼qT^rme聶\\Pp聲ZZb聝y聼聮uy聛bQ聴ef碌]Uh目DCm没va職脵NSk聺Cwn聣c膰fv~聟Y聥聞脟G"
-        ],
-        "encodeOffsets": [[130196, 42528]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "230000",
-      "properties": {
-        "id": "230000",
-        "cp": [128.642464, 46.756967],
-        "name": "榛戦緳姹�",
-        "childNum": 2
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          [
-            "@@U聝碌N每楼墨猫莽聛聥聲聺H脥酶茣露L聦墙|g篓|聰聶聨a戮pVi聢dd聺聰~脠i聦铆膹脫Q摹臈脟聬Z脦聥聨Xb陆|趴脙H陆聼KFg杀C模脹脟A聡n聶聥j脮c[V臐潜脙脣聞脟_聶聽拢艅鲁p聨j拢潞聰職驴聰禄WH麓炉聰U赂膽蘑m聻t臏yzzNN|g赂梅盲疟脩卤膲膩~mq^聴聦[聧聝聰聸聸聺聰聝莵脩膹lw]炉xQ臄聫聣炉l聣聮聙掳艡拇r聤聶聵B聢脼Txr[t沤赂幕N_y聼X`biN聶Ku聟聺P聸拢k聜Z漠聴娄[潞x脝脌dh聨墓艀U脠茥Cw聮谩Z魔脛怒c脫楼禄NAw卤q去nD`{Chd脵F膰職}垄聣A卤脛j篓]膴脮j艐芦脳`Vu脫脜聸~_k欧V脻yh聞聯Vk脛茫Ps聰聫聺O碌聴f聼ge聜艊聟碌f@u聛_脵聽脵c聼陋N陋脵EojVx聶T@聠茫SefjlwH\\p艔盲脌v聛聤聨lY聠陆d{聠F~娄dyz陇P聺脺ndsrhf聥Hc聦vlwjF聹拢聛G聵卤D脧聧匹Y聡y脧聤聺u鹿Xik目娄脧q茥莯O艤篓LI聬|FR膫n聽s陋|C職藴zx聬A猫楼b聹fudTrFW脕鹿Am|聵臄臅s姆脝F聡麓N職聣}膰聟U聛聤脮@脕某趴mu聻莽聮u冒^脢媒ow聦Fz脴脦臅N艖聻菑葞么陋脤艗莿脿膧脛藙臑艀茠蕗膧茦鸥水痊片膴掳聝U聼zou聡xe]}聨聟Ay脠聭W炉脤mK聡聯Q]聥莫潞if赂脛X|sZt|陆脷U脦聽lk職^p{f陇l聢潞l脝W聽聳聙A虏聵PV脺聹PH聰脢芒]脦膱脤脺k麓\\@q脿s臄脛Q潞pRij录猫i聠`露聴聞bX聝聬rBgxfv禄聨uUi聢聦^v聧~聰J卢mVp麓拢聦麓VWrnP陆矛垄BX聜卢h聶聤冒X鹿^TjV聹聤ri陋j聶t艎脛m聙tPGx赂bgR職聨sT`Zoz脝O]聮脪F么脪聠O脝聮聡艎聦v脜聻聰p聮cG聦锚聤sx麓DR聳聦{A聠聞EOr掳聦聲聻x|铆聹b聢鲁Wm~聺DVj聧潞茅NN聠脣脺藳啥颅G聝x欧CSt聼}]没艒聲Smtu脟脙臅N聲聶膩g禄職铆T芦u}莽陆B牡脼剩楼毛脢隆M脹聨鲁茫葏隆茓a签脠脡Q聣聠G垄路lG|聸聞tvgrrf芦聠pt臋艠n聤脜蘑r聞I虏炉Li脴sPf聵_v臓d聞xM聽pr使職L陇聥陇聡e脣聦聝脌膽K聯聻茂脵VY搂]I聡贸谩磨]姆聠K聢楼聦j|p艊\\kz牛娄聬拧n艈盲脭V膫卯莫卢|vW聮庐l陇猫脴r聜聵聲xm露膬~l脛漂膭蛣枚葎E脭陇脴Q膭聳膭禄脾j圈O呛篓矛S艝脝片y聰聧Q聹v`聳cw聝ZS脤庐眉卤莿]艀莽卢B卢漏艅z坪欧蓜e聬eO聛抹S聮聺聦fm聽膴聜苺P處膿z漏膴聜脛脮脢mg聼脟sJ楼茢聢艎艣忙聮脦聛脩qv驴铆UO碌陋聣脗n摩脕_陆盲@锚铆聟拢P}臓[@g摹}g聯蓨脳聯没脧WX谩垄u啪苹脤sN脥陆聺茙脕搂膷艕聸A聫膿eL鲁脿ydl聸娄臉V莽艁p艣菃慕暮趴脢聝Q铆脺莽脹摹脭聫s臅卢聴歉炉Y脽膵摹H碌聽隆e氓`聺募聝r膲艠贸脾F矛聯膸W酶x脢k聠聰茍d片聫v|聳I|路漏Nq艅R艀聝陇茅聰e艎聹艀聸聢脿艀U虏艜苺B聜Q拢膸}L鹿脦k@漏膱u前懦迁聰脷搂茍nT脣脟茅茻脢cf膷扭^Xm聡聴H聧膴臅脣芦W路膵毛x鲁菙姆脨膵J膩聜w陌_母聵葊^么Wr颅掳o煤卢摩聟浓K~聰劝C膼麓嵌拢聮fN脦猫芒w垄Xn女e脗脝亩聨聬戮戮x盲L拇聛臉l募O陇脪抹A垄脢蓺篓庐聜脴C脭聽努G茽聰痞Y臏聡臉脺片DJ聴g_庭艙@膷艆幕A聯露炉@w脦qC陆膱禄N聼膬毛K聶膹脥Q聯脵偏[芦脙铆聲g脽脭脟O脻谩W聭帽聫uZ聯炉磨聙聼聧艜膩隆脩姆Ju陇E聽聼氓炉掳WK脡卤_d_}}聧vy聼玫u卢茂鹿脫U卤陆@g脧驴r脙陆D聣聠g聟Cd聣碌聴掳MF聛聫Yxw驴CG拢聥R茮陆脮{]L搂{qq膮職驴B脟苹臒毛職墉菉脣|c虏}F碌}聸脵Rs脫p聫g卤聤QNq谦艐Rw艜n茅脩脡K聼聠芦SeYR聟艐聥@{陇SJ}職D聽脹菛謲聼]g聺r隆碌欧jqW脹ham鲁~S芦聯聞聸脼]"
-          ]
-        ],
-        "encodeOffsets": [[[134456, 44547]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "320000",
-      "properties": {
-        "id": "320000",
-        "cp": [119.767413, 33.041544],
-        "name": "姹熻嫃",
-        "childNum": 1
-      },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": [
-          "@@c镁脜Pi聤`Z聼Ru楼脡\\]~掳聨Y`碌聠脫聝^ph脕bn脌艧煤聨貌a聳默潞T脰艗b聜聵e娄娄聙{赂Z芒膰Np聦漏聻Hr|^聢mjh聤SEb\\afv`sz^lk聨lj聥脛tg聥陇D聵颅戮X職驴脌聮|膼聰iZ聞聺葊氓B路卯}GL垄玫c脽ja聼yBF碌脧C^沫聲c脵t驴s臒H]j{s漏HM垄聝QnD脌漏Da脺脼聦路jg脿iDbPufjDk`dPO卯聝hw隆磨聡楼職G聵聼P虏膼ob潞rY聠聞卯露aH泞麓聽]麓聜r谋l聺w鲁r_{拢DB_脹d氓uk|聢浓炉F聽C潞yr{XFy聶e鲁脼膵聡驴脗聶k沫B驴聞Mv脹pm`r脷茫聰@臉鹿h氓g脣脰瓶xnl膷露脜矛陆Ot戮dJl聤VJ膫聤聹莯聹艦qvnO聤^聼J聰Z聭偶路Q}锚脥聨脜m碌脪]聨茘娄Dq}卢R^猫膫麓艀幕膴I脭聮t聻牟yQ艕臓MNt聹R庐貌Lh聫聣聸臍s漏禄聹}O脫聦GZz露A\\j抹F聢盲O膜聵HY職聠Jv聬脼HNi脺a膸職脡聳nFQl職NM陇聢B麓膭N枚蓚tp聳努df氓聟聢聥qm驴Q没聤霉艦聡脷b陇u艃J糯u禄鹿膭聲l聛葨魔糯w虒诺虏枪菭蜎h沫艂茣r莽眉卤Y聶xci聡t臒庐聺j疟垄KO姆聲Coy`氓庐VTa颅_膧]艕脻蔀茂虏石脢^]afY歉脙膯膿莫龋J膽蛵么茓脛聺脛脥聨墨聣莽脹蓤钎拢颅脹mY`贸拢Z聧芦搂掳脫鲁QafusN谋菂_k}垄m[脻贸D碌聴隆RL膷iXy聡脜N茂膬隆赂i臄脧聭N脤艜o膿d艒卯氓扭没Hcs}~脹wb霉鹿拢娄脫C聛t聥OPr聝E^脪o聤g聶膲I碌聻脹脜使K聟陇陆phM聤眉`o忙聙聠艀"
-        ],
-        "encodeOffsets": [[121740, 32276]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "330000",
-      "properties": {
-        "id": "330000",
-        "cp": [120.153576, 29.287459],
-        "name": "娴欐睙",
-        "childNum": 45
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@E^dQ]K"],
-          ["@@聛jX^j聡"],
-          ["@@sf聤bU聡"],
-          ["@@qP\\xz[ck"],
-          ["@@聭R聝垄聜FX}掳[s_"],
-          ["@@Cb聹\\聴}"],
-          ["@@e|v\\la{u"],
-          ["@@v~u}"],
-          ["@@Qx脗F炉}"],
-          ["@@鹿n聦v脼s炉o"],
-          ["@@rSkUEj"],
-          ["@@bi颅Z聦P"],
-          ["@@p[}INf"],
-          ["@@脌驴聙"],
-          ["@@鹿dnb聦聟"],
-          ["@@rS聼BnR"],
-          ["@@g~h}"],
-          ["@@FlEk"],
-          ["@@OdPc"],
-          ["@@v[u\\"],
-          ["@@Fj芒L~wyoo~聸s碌L聳\\"],
-          ["@@卢e鹿aN聢"],
-          ["@@\\n脭隆q]L鲁毛\\每庐聦Q脰聨"],
-          ["@@脢A颅漏[卢"],
-          ["@@Kx聦v颅"],
-          ["@@@hlIk]"],
-          ["@@pW{聧o||j"],
-          ["@@Md|_mC"],
-          ["@@垄聟X拢脧聧ylD录X聢tH"],
-          ["@@hl脺[LykAvy聫聛fw聧^E聻聸陇"],
-          ["@@fp陇Mus聯R"],
-          ["@@庐_ma~聫聲L脕卢職Z"],
-          ["@@i聺M聞xZ"],
-          ["@@ZcYd"],
-          ["@@Z~dOSo|A驴qZv"],
-          ["@@@`聰EN聫隆v"],
-          ["@@|聳TY聫{"],
-          ["@@@n@m"],
-          ["@@XWkCT\\"],
-          ["@@潞w職ZRk臅WO垄"],
-          ["@@聶X庐卤Gr脝陋\\脭谩Xq{聥"],
-          ["@@暖TG掳膭LHm掳UC聥"],
-          [
-            "@@陇聨聙a脺x~}dt眉G忙牛艓铆臄c艝pM脣脨聮j膿垄路冒膭脝Mz聢jWK膸垄Q露聵脌_锚聮聰_B谋聙i芦pZ聙gf聙陇Nrq]搂膫N庐芦H卤聡y瞥铆戮脳鸥墨脿L艂膷糯菨膫铆脌B艝脮陋聢聤脕艝H艞艍氓q没玫聬i篓h脺路聝帽t禄鹿媒v_[芦赂m聣YL炉聣Q陋聟m膲脜dM聢聲g脟jc潞芦聲臋聹卢颅K颅麓聝B芦脗膮co膵\\xKd隆g臎脓芦庐谩聮[~谋xu路脜聰Ks脣脡聫c垄脵\\沫茮毛bf鹿聺颅模S聝臏聺k谩茐脭颅膱ZB{聤aM聭碌聣fz艍f氓脗脓寞茓菨脢臅聛摹膰拢g鲁ne颅膮禄@颅娄S庐聜\\脽冒C職h聶iq陋沫iAu聡A聺颅碌聰聧_W楼疲O\\l膵蘑ttC篓拢t`聢聶PZ盲uX脽B聧s聡幕yek聙聺O膽摹牡HuXB職碌]脳聦聡颅颅\\聸掳庐卢F垄聫戮p聬碌录k艠贸卢W盲t聮赂|@聻聲L篓赂碌r聯潞霉鲁脵~搂WI聥聼ZW聨庐聮卤脨篓脪脡x聙`聣虏p臏聲rO貌gt脕Z}镁脵]聞聮隆聦聼FK聜wsPlU[}娄Rv聧n`hq卢\\聰聬nQ麓臉RWb聰聜_聽rt膶FI脰聤k聤聤摩PJ露脰脌脰J膱膭T臍貌聻C聽虏@P煤聟脴z聹漏P卯垄拢聹C脠脷聹膾卤聞h艝聡l卢芒~nm篓f漏聳i募芦m聡nt聳u聠脰Z脺脛j聯聤L聨庐E脤聹F陋虏i脢x脴篓聻I脠hhst"
-          ],
-          ["@@o\\V聮zRZ}y聛"],
-          ["@@聠@掳隆m脹聸G臅篓搂Ian谩[媒皮jf忙聡脴L聳聲盲Gr聶"]
-        ],
-        "encodeOffsets": [
-          [[125592, 31553]],
-          [[125785, 31436]],
-          [[125729, 31431]],
-          [[125513, 31380]],
-          [[125223, 30438]],
-          [[125115, 30114]],
-          [[124815, 29155]],
-          [[124419, 28746]],
-          [[124095, 28635]],
-          [[124005, 28609]],
-          [[125000, 30713]],
-          [[125111, 30698]],
-          [[125078, 30682]],
-          [[125150, 30684]],
-          [[124014, 28103]],
-          [[125008, 31331]],
-          [[125411, 31468]],
-          [[125329, 31479]],
-          [[125626, 30916]],
-          [[125417, 30956]],
-          [[125254, 30976]],
-          [[125199, 30997]],
-          [[125095, 31058]],
-          [[125083, 30915]],
-          [[124885, 31015]],
-          [[125218, 30798]],
-          [[124867, 30838]],
-          [[124755, 30788]],
-          [[124802, 30809]],
-          [[125267, 30657]],
-          [[125218, 30578]],
-          [[125200, 30562]],
-          [[124968, 30474]],
-          [[125167, 30396]],
-          [[124955, 29879]],
-          [[124714, 29781]],
-          [[124762, 29462]],
-          [[124325, 28754]],
-          [[123990, 28459]],
-          [[125366, 31477]],
-          [[125115, 30363]],
-          [[125369, 31139]],
-          [[122495, 31878]],
-          [[125329, 30690]],
-          [[125192, 30787]]
-        ]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "340000",
-      "properties": { "id": "340000", "cp": [117.283042, 31.26119], "name": "瀹夊窘", "childNum": 3 },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@^iuLX^"],
-          ["@@聜e漏Ehl"],
-          [
-            "@@掳Z脝毛膸碌mk莯w脤脮忙h潞gB臐芒聧q脵膴聫z聸脰g艈t脌脕膫聤脝谩聮hEz|WzqD鹿聙聼掳E聡脓l{忙v脺cA`陇C`|麓q聻x牟k聛q^鲁鲁聼G拧碌b聝铆Z聟鹿qpa卤膹聽OH聴娄聶摩聢x垄聞gP铆cOl_iCveaOjCh脽赂i脻聥b脹陋CC驴聙m聞RV搂垄A|t^i臓G脌t脷s聳d]漠脨DE露zAb聽脿i枚dK隆~H赂铆忙A聻强Y聝聯j{膹驴聭聶脌陆W聴庐拢Ch聦脙si聦聧kkly]_teu[bFa聣Tig聡n{]Gq陋聺o聥膱MY谩|路楼f楼聛聴艖aS脮臈聶N碌聧帽臑芦Im聦_m驴脗a]u臏p聽聟Z_搂{C聝盲g陇掳r[_Yj聣脝Od媒聯[聨I[谩路楼聯Q_n聡霉gL戮mv聶藠B脺脝露聺膴Jh職p聯c鹿聵O]i艩]聹楼聽jtsggJ脟搂聺w脳j脡漏卤聸EF脣聧颅聣Ki聰脹脙脮Yv聟s聲聢m卢nj幕陋聲搂emn谩}k芦艜聢聝g膽虏脵聸D脟陇聸铆隆陋Oy聸聠脳O霉卤@D聼帽聺S臋膰膬脮I脮驴I碌磨O聣聣聫jN脮脣T隆聧驴tN忙艊脿氓y姆r臅q搂脛末sW脝脽聨F露聺聻X庐驴聣m聦聶w聟RI脼聯f脽oG聭鲁戮漏uyH聭寞{苼魔炉AFnuP聫聟脥脭z職聦V聴d脿么潞^脨忙d麓聙聡oG陇{S聣卢膰x茫}聸脓脳K钎末芦聻脮OE脨路脰d脰s茦脩篓[聮脹^Xr垄录聵搂xv脛聸脝碌`K聰搂聽t脪麓Cvlo赂fz浓冒戮NY麓谋~脡臄膿聟脽煤聺L脙脙聫聳_脠脧|]脗脧Fl聰g`b職e聻聻聙n戮垄pU聜h~拼臇露_聜r聽s膭~c聻聰茍]|r聽c~`录{脌{葤iJjz聫`卯脌聧T楼脹鲁聟]聮u}聸f聟茂Ql{skl聯oNd聼j聼盲脣zDv膷oQ聤膹HI娄rb聯tH臄~BmlR職聴V_聞魔TLn帽H卤聮D聻聹L聭录L聵陋l聬搂扭a赂聦臍lK虏聙\\R貌vDc脦Jbt[陇聙D@庐hh~kt掳蔷z聫脰@戮聧陋db聞Yh眉贸Z聽艌露vHr木\\脢聴JuxAT|dm脌O聞聥[脙脭聥G路臍膮膼l弄脷pSJ篓母聢Lv脼cP忙姆浓聨庐m脨聬聢谩l聼wKh茂gA垄懦脝漏脼聳陇O脠聹m聮掳聦K麓聬"
-          ]
-        ],
-        "encodeOffsets": [[[121722, 32278]], [[119475, 30423]], [[119168, 35472]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "350000",
-      "properties": {
-        "id": "350000",
-        "cp": [118.306239, 26.075302],
-        "name": "绂忓缓",
-        "childNum": 18
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@聯zht麓聫聡]"],
-          ["@@aj^~膯G聴聫漏O"],
-          ["@@ed篓聞C}}i"],
-          ["@@@v聢PGsQ"],
-          ["@@聣sBz聜ddW]Q"],
-          ["@@S聨篓Q聯{"],
-          ["@@N聨VucW"],
-          ["@@qptBAq"],
-          ["@@聣聮赂[mu"],
-          ["@@Q\\pD]_"],
-          ["@@jSwUadpF"],
-          ["@@eX陋~聝聲"],
-          ["@@AjvFso"],
-          ["@@fT聳聸_脟铆\\聼聶聴v|ba娄jZ脝y聙掳"],
-          ["@@IjJi"],
-          ["@@wJI聙聢x職芦录AoNe{M颅聬"],
-          ["@@K聣卤隆脫聢聰膶盲eZ聛"],
-          [
-            "@@k隆鹿Eh~c庐wBk聥Upl脌隆I聲~M膩聧e拢bN篓gZ媒隆a卤脰cp漏Ph聻I聰聼垄Qq聟脟Gj聺聺聥|楼U聶聽g[Ky卢聧聧艔聧聳v@Op聢t脡E聼聬F聞聬\\@聽氓A卢聢V{X模聣膼聺By聟cp聛臎聟录鲁膫p聫路陇聝楼o聯hqq脷隆艆Ls聛聝^脙隆聴聻搂ql聼脌hH聛篓MCe禄氓脟GD楼zPO拢膷脵kJA录脽聳臈聫u聸臅e没脪聧i脕脓聬SW楼聵Q聤没艞陆霉臎c脻搂S霉末膮SW贸芦铆臋AC碌聸eR聴氓聛莾RC脪脟Z脥垄聥藕卤^dls聦tjD赂聲聜Zpu聻脭芒脙聮H戮oLU锚脙脭jj膿貌麓膭W聜茮聧聟^脩楼聥摩聼@脟貌聳聤m聦聝Ow隆玫yJ聠yD}垄膹聫脩脠摹f聧聤Zd聳a漏潞虏z拢職N聳聝jD掳脰tj露卢ZS脦~戮c掳露脨m聵x聜O赂垄Pl麓聻SL|楼聻A聠泉臇M聮艈牟g庐谩IJ膶膾眉`聽聨QF聡卢h|膫聯J@z碌聽|锚鲁脠聽赂U脰努努脌Ett母r聜]聙聵冒聨M陇亩牟Ht脧聽A聮聠聻默kvsq聡^a脦bv聦d聳聶f脢貌SD聙麓Z^聮xPs膫聻rv聥茷艀聵聺jJd脳艠脡聽庐A聳脦娄膜d聙x膯qA聦聠ZR聰脌M藕聦n膴禄聦陌脨Z聴聽YX聳忙J聤y膴虏聢路露q搂路聳K@聺路{s聭X茫么芦l艞露禄o聫聬陆E隆颅芦垄卤篓Y聢庐脴聥露^A聶vW亩G膾蘑聻Plzf聢募聨t脿AvWY茫職O_聡陇sD搂ss膶摹[k皮PX娄聨`露聯聻庐聢BBv莫jv漏職jx[L楼脿茂聛[F聟录脥脣禄臒V`芦聲Ip聶}cc脜磨ZE聥茫oP聟麓B@聤D聴赂m卤聯z芦瞥聴驴氓鲁BR脴露聢聹Wl芒镁盲膮`聯]Z聫拢T聛c聴聽墓G碌露H聶m@_漏聴k聦聣戮x抹聡么葔冒X芦陆膽CI聫b膰qK鲁脕聥脛拧卢OA聧w茫禄aL艍聡脣磨W[聯脗GI聴脗Nx某陇D垄聨聫卯膸脦B搂掳_J聹Gs聝楼E@聟陇u膰聟P聭氓聠c聬uMuw垄BI驴聡]zG鹿gu漠ck\\_"
-          ]
-        ],
-        "encodeOffsets": [
-          [[123250, 27563]],
-          [[122541, 27268]],
-          [[123020, 27189]],
-          [[122916, 27125]],
-          [[122887, 26845]],
-          [[122808, 26762]],
-          [[122568, 25912]],
-          [[122778, 26197]],
-          [[122515, 26757]],
-          [[122816, 26587]],
-          [[123388, 27005]],
-          [[122450, 26243]],
-          [[122578, 25962]],
-          [[121255, 25103]],
-          [[120987, 24903]],
-          [[122339, 25802]],
-          [[121042, 25093]],
-          [[122439, 26024]]
-        ]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "360000",
-      "properties": {
-        "id": "360000",
-        "cp": [115.592151, 27.676493],
-        "name": "姹熻タ",
-        "childNum": 1
-      },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": [
-          "@@聫蘑抹茞g募聢录脗MD~艈陋e^\\^搂聞媒聺漏j脳聧cZ聠脴篓zd脪a聬露聢l脪聧J聦矛玫`oz梅@聺陇u艦赂麓聠么臋枚Y录聣H膶贫ajl脼譬楼茅Z[聰|h}^U聽聦聽楼p聞膭啪痞O聽lt赂脝聽聙Q\\聙聤a脝|Cn脗Ojt颅臍膜d聮脠聦F`聮露聞@脨毛聰聽娄艒脪聻篓S锚v聠H蘑没XD庐聟Qg脛聴Wi脴P脼矛潞r陇菃聙N臓垄l聳聲膭tZo聹C茷脭潞Cxrp臓V庐脢{f_Y`_聝eq聮聮庐Aot`@o聜DXfkp篓|聤s卢\\D聭脛Sf猫漏Hn卢聟^Dh脝y酶Jh聯脴x蘑膧L脢聢聞茽P偶膵膭w葼臍娄G庐聫菕膜盲T聬艩脝~摩w聤芦|TF隆聤n聙c鲁脧氓鹿]膲膽xe{聫脦脫聬聠vOEm掳B苽抹陌|G聮vz陆陋麓聙H聮脿p聰eJ脻聠Q職xn聥脌聤W颅聻聺E碌脿聧X脜莫t篓脙臇r脛w脌F脦|艌脫M氓录ib碌炉禄氓DT卤聫m[聯r芦_g聨mQu~楼V\\OkxtL聛聽E垄聥聝聭脷^~媒锚聥P贸聳qo臎聤卤_脢w搂脩陋氓茥膩录聥m膲殴聥驴NQ聯聟YB聥膮rw模c脥楼B聲聼颅艞脢c脴iI聴聻茲目u聦聺qt膩wO]聭鲁YC帽Te脡聲職聥caub脥聢]trlu聙墨聟聺B聭脨聼Gs牡谋N拢茂聧聴聛^姆qss驴F奴奴V脮聼路麓脟{茅膱媒聣每聸OE聢聧R_聼膽没I膵芒Jh颅艆谋N聭醛臅B聟娄聺K{聺Tk鲁隆OP路w聛n聴碌脧d炉}陆T脥芦Yi碌脮sC炉聞iM聲陇聶颅聲娄聺炉P|每聧UHv聯he楼oFTu聣玫\\聫聨OSs聥M貌膽茋ia潞膰X聼膴牡脿聺路莽h苾梅脟聹{聭铆gu^聸膽g聮m[脳zkKN聺聛聫聭露脮聺禄l膷脫{XS脝聣v漏_聺脠毛JbVk聞臄V脌陇P戮潞脠M脰xl貌~陋脷脿G膫垄B聞卤聮脤聦K聵y聮谩V聡录脙~颅聺聟`g聸聼s脵fI聸茓l臋鹿e|聳~udj聢uTlX碌f`聬驴Jd聤[\\聵聞L聜聭虏"
-        ],
-        "encodeOffsets": [[116689, 26234]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "370000",
-      "properties": {
-        "id": "370000",
-        "cp": [118.000923, 36.275807],
-        "name": "灞变笢",
-        "childNum": 13
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@Xjd]{K"],
-          ["@@itbFHy"],
-          ["@@HlGk"],
-          ["@@T聜聦G聼y"],
-          ["@@K卢聵聲聥U"],
-          ["@@WdXc"],
-          ["@@PtOs"],
-          ["@@聲LnXhc"],
-          ["@@ppV聝u]Or"],
-          ["@@cdzAUa"],
-          ["@@udRhnCI聡"],
-          ["@@聢oI聝聫pR聞"],
-          [
-            "@@慕膷{fz皮卯聮K職聳脦M漠]聠聴ZF聢陆Y]芒拢ph聮聶職露篓r芒酶脌聠脦迁陇^潞脛聰Gz聢~gr臍臏l臑脝聞L膯菃垄脦o娄聳cv聯Kb聙gr掳Wh聰mZp聽聢L]L潞cU聣脝颅n聰偶膜脤膾聹bAnrOA聹麓聻葕c脌b痞U脴r膯U脺酶聹默茷聠職聵Ez聞VL庐枚脴Bk艝脻膼臇鹿脓虅卤脌b脦脡聹nb虏摩h艈B臇聸聻寞摩氓X膰矛@L炉麓yw聛茣C茅脙碌臈聽瓶赂聭l碌戮Z|聠ZWyFY聼篓Mf~C驴`聙脿_R脟zw茖fQnny麓INo片聢猫么潞|sT聞JU職聸聜L聞卯Vj聞菐戮膾脴聧聜Dz虏XPn卤聬糯P猫赂艛L茢脺坪_T聭眉脙膜BB膵脠聣枚A麓fa聞聵M篓{芦M`聡露聛d隆么聣脰掳職m劝B脭jj聦麓PM|聰c^d陇u聲聝陇脹麓聦盲芦脾fPk露M么l聢]Lb聞}su聫^聫ke{lC聭聟M聲rD聤脟颅]N聛脩Fsmo玫木H聣yG膬{{莽rn聺脫E聣聥茣ZG陋鹿Fj垄茂聫W聟u酶C欠毛聫隆膮uh脹隆^Kx聲C`聫C\\b脜x矛虏臐脻驴_N聣墨C冉目氓B楼垄路I艝脮y聧\\聡鹿kx聡脙拢聫膶脳GDy脙聲陇脕莽FQ隆聞Kt诺茓]Cg脧A聺聫霉Sed聡c脷藕聴聤uYf聝yMmh聛UWp聫S聧yG聫wMPq艀聴聸脕录zK聸露聠G聲颅Y搂脣聝@聳麓艣脟碌茣聛Bm聹聛@Io聜g聴聴Z聫炉u聥TMx聛}C聭聣VK聜茂{茅频P聴聶_K芦聶p脹脵q膵tkk霉]g聨聥T臒wo聲蓙sM玫鲁膬聡AN拢聶MRkmE脢聲膷聶脹bMj脻Gu聫聟IZ聶聴GP模聡茫魔E[i碌BEu聼DP脭聸~陋录臋t聤聹]聦没G搂聙隆QMs臒NP艔寞zs聺拢Ug{膽J目募膩鲁]莽芦Qr~楼C聧茙脩^n露聧脝茅脦R~呕赂Y聮I聯]聽P聣um艥r瓶聸聣聸I膩聥[x聣e脟鲁聫聥L聭炉聫v炉s聺卢脕Y聟~}聟钮u艁聦g聸茓p脻膭_艈墨露脧SR麓脕P~聻驴Cy聻膵聛脽dwk聺麓Ss聲X|t聣`脛聽聧脠冒聙A陋矛脦T掳娄Dd聳聙a^l膸D亩脷Y掳聨`莫糯菕聢聰脿艩v\\聬eb聦ZH聞艝R卢泞票霉臋O聲聫脩M颅聺鲁F脹聝Wp[聝"
-          ]
-        ],
-        "encodeOffsets": [
-          [[123806, 39303]],
-          [[123821, 39266]],
-          [[123742, 39256]],
-          [[123702, 39203]],
-          [[123649, 39066]],
-          [[123847, 38933]],
-          [[123580, 38839]],
-          [[123894, 37288]],
-          [[123043, 36624]],
-          [[123344, 38676]],
-          [[123522, 38857]],
-          [[123628, 38858]],
-          [[118260, 36742]]
-        ]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "410000",
-      "properties": {
-        "id": "410000",
-        "cp": [113.665412, 33.757975],
-        "name": "娌冲崡",
-        "childNum": 1
-      },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": [
-          "@@聲媒L聶霉碌P鲁swI脫xc泞臑冒聠麓E庐聻脷Pt聠拇X脴x脗露聵@芦艜艜QG聝聥Yfa[聫艧u聯脽签聶膽拧聧_X鲁某脮膷C]kbc聲楼CS炉毛脥B漏梅聥聳鲁颅聛Si聢_}m聵YTt聻鲁xl脿c膶聜z聺脌D}聺脗OQ鲁脨T抹炉聠茥貌脣艝[h聹艂聥纽v~聠聠}脗Z聻芦陇lP脟聲拢陋脻糯脜R搂脴nhc聦t芒k聫聡n脧聧颅木殴U脫脻dKu姆聡I搂oT农脵膹k臋膯H赂脫聦\\脛聝聦驴PcnS{wBIv脡聵慕[Gq碌u聼艊么Yg没聝Zca聨漏@陆聬脮墙ys炉}lgg@颅C\\拢as聙Id脥uCQ帽[L卤臋k路聥牛b聫篓漏kK聴聮禄聸KC聺虏聭貌GKm抹S`聝聵UQ聶nk}AG膿聰sqaJ楼膼GR聣膸pCu脤y聽茫聽iMc聰plk|tRk聠冒聹ev~^聭麓聠娄脺聨S铆驴聬_iyjI|葢|驴_禄d}q聼^{聯茋d聺膬}聼t聛q碌`瞥臅g}V聛隆om陆聺f聺a聶脟o鲁TTj楼聞t臓聴Ry聰聫K{霉脫ju碌{t}u脣R聭i聼vG聤莽JFj碌聤脥yq脦聵脿Q脗FewixGw陆Y欧p碌煤鲁X聺U聸陆摹y聶艂氓聣k脷wZX聢路l聞垄脕垄K聰zO聞脦聸脦聙jc录htoDHr聟|颅J聯陆}JZ_炉iPq{t臋陆臅娄Zp牡酶芦kQ聟墓陇聝]M聧脹f聛aQp臎卤墙戮]u颅Fu聥梅n聝聶膷脛炉ADp}AjmcE脟聮a陋鲁o鲁脝脥S茋膱脵DIz脣聭膷木聼^聢KL聹聴i聴脼帽聙[聹聝aA虏zz聣脤梅D聹|[職铆脛鲁gf聜脮脼d庐|`聝膯~聞o臓茟么鲁艎聭D脳掳炉Cs聤酶脌芦矛聣UMhT潞篓赂恰卯S聳脭聞Dru脗脟Z聲脰E聨聮v聧PZ聞聻W聰~脴聥脨t膭E垄娄脨y赂b聤么麓o努卢聨虏脢s~聙聙]庐t陋a職p艓J篓脰潞聞_聤艛聳`聮艝^膼聧\\臏u聳聰~m虏聘聸赂fW聣摩r茢}脦^gjdf脭隆J}\\n聽C聵娄镁Wx聬陋JR脭艩u卢抹抹mF聠dM{\\d\\聤Y脢垄煤@@娄陋虏S聤脺sC聳}fN猫cbpRml脴^g聞d垄a脪垄CZ聢聧Zxv聛脝露N驴聮垄T@聙uC聹卢^膴冒聛脛n|聫聻lGl聮聶Rjsp垄ED}聙Fio~脭N聨聥聞~zk臉HVs遣脽j聝努聦聤泞`P没脿l垄聵\\脌聹Eh聨陌g脼膿聽X聬录Pk聳聞|m"
-        ],
-        "encodeOffsets": [[118256, 37017]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "420000",
-      "properties": {
-        "id": "420000",
-        "cp": [113.298572, 30.684355],
-        "name": "婀栧寳",
-        "childNum": 3
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@A聛B聜"],
-          ["@@lskt"],
-          [
-            "@@戮芦}{ra庐p卯脙\\聶聸{酶C聤脣yyB卤聞b\\聸貌聵脻聵jK聸聡L聽]膸慕脤聮Jy脷C茍膰脦T麓脜麓pb漏脠聭dFin~BCo掳B膸脙聞職酶mv聦庐E^v蔷陆臏虏Ro聜b脺eN聨聞^暮拢R聠卢l亩梅Yo臇楼臍戮|sOr掳jY`~I聰戮庐I聠{GqpCgyl{聡拢聹脥聝脥yPL聯脗隆聝隆赂kW聡xYl脵忙聤職艁蘑z聹戮聻V麓W露霉鸥o戮ZHxjwfx聞GN脕聲鲁X茅忙l露聣Ei猫IH聣聽u聮j脤Q~v|sv露脭i|煤垄Fh聧聵Qs臒娄聝Si艩Bg聶脨E^脕脨{聳膷nO脗脠聻U脦贸臄聠脢膿牟}Z鲁陆M脓茂eyp路uk鲁Ds脩篓聼L聯露_聹脜u脙篓w禄聴聙隆Wq脺]\\聭脪搂t茥c脮赂脮F脧菨膲膬x呕膶茻O聡聝K脡摹每脳wg聰梅I脜zCg聠]m芦陋Ge莽脙TC聮芦[聣t搂{loWe聛C@ps_Bp聭颅r聭聞f_``Z|ei隆聴o膵Mqow聙鹿D茲脫聸DYp没s聲聳聥Yk谋莾}s楼莽鲁[搂聼cY聤搂HK聞芦Qy聣]垄聯ww枚聙赂茂x录艈戮Xv庐脟脌碌R臓脨聥聻聛HM聻卤c脧d聞茠菎农葏确卤DSy聛煤臐拢聧扭膧脿t脰每茂[卯b\\}p沫脡I卤脩y聟驴鲁x炉N聣o聣|鹿H聶脧脹m聥聺j煤脣~T職聺聲u聵臋jC枚Aw臎卢R聮膽l炉聽脩b颅聣艊T聠目_[聦聭I膷膭士nM娄臒\\脡[T路聶k鹿聹漏o臅@A聫戮w聲ya楼聬Y\\楼脗az炉茫脕隆k楼ne拢脹w聠聺E漏脢艒露藫u聫oj_U聝隆cF鹿颅[Wv聯P漏w聴hu脮yBF聯聝`R聥qJUw\\i隆{j聼聼EP茂每陆f膰聟Q脩脌聛Q{聻聜掳聡fL脭聛~wXg聴墨聛t锚脻戮聳暮聭Hd聢鲁fJd]聥聧HJ虏聟E聙聝oU楼聠HhwQs茞禄Xmg卤莽ve聸]Dm脥聜P聢oCc戮聥_h聰聳h酶Yr艎U露eD掳膶_N~酶墓臍路`z聮]脛镁p录聟盲脤Q聦v\\rC聦茅戮Tnk啪艕脷聙脺a聡聯录脻茊蘑露脹o聟d聟臄艌脨垄Jq聮Pb聽戮|J聦戮fX聤茞卯抹_Z炉脌}煤撇聥N_膾脛聤^聞聭膱a艕yp禄C脟脛聲K聤職帽L鲁聤摹M聦虏wrI脪怒xjb[聹聻n芦酶聹聵聴忙聢脿聝聽^虏颅h炉脷聙艕陋脼赂聙Y虏膾V酶}膧^陌聶麓聜L聤脷m聬聞楼脌J脼{JV聦懦脼艃x脳sxx茍膿聽模M艡聳脷冒貌If聳膴聯艗\\飘卤艗d脢搂臉D聠v膶_脌忙~D聦膵麓A庐碌聠篓脴LV娄锚H脪陇"
-          ]
-        ],
-        "encodeOffsets": [[[113712, 34000]], [[115612, 30507]], [[113649, 34054]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "430000",
-      "properties": { "id": "430000", "cp": [111.782279, 28.09409], "name": "婀栧崡", "childNum": 3 },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@聴n聞FTs"],
-          ["@@脽脜脝谩聣陆脭Xr聴聠CO聶聬聯聟脣R聭茂每聧末颅TooQy職脫[聥艆BE卢聳脦脫Xa聞寞搂脙赂G聽掳ITx聧p聣煤x脷某楼脧職聳蘑戮聤ed聻脛漏母聫G聟聹脿Gh聜聙M陇聳脗_U}膴}垄pczf聤镁g陇聙聰脟貌AV聭聥M"],
-          [
-            "@@聬漏K聛聴聝A路鲁CQ卤脕芦鲁BU聤茟鹿A聤聧t膰Ow聬聶D]聦聺Ji脴Sm炉b拢聭yl聝聸X聟聧H脣脩卤H聲芦聛聳聭C^玫木A聳聺脜搂陇脡聫楼聞茂yu菣uA垄聧^{脤C麓颅娄欧J拢^[聠聫聺聯陋驴聡臅~聲茋聟聲N聟聽sk贸膩聧聡鹿驴聙茂]膬~梅O搂颅@聴聺Vm隆聥Q膽娄垄膜{潞j脭聫聨聦陋楼nf麓聲~脮o聼聻脳脹膮聥M膮谋uZ聹mZc脪聽牟莫虏S脢莿哦篓茪聝聮C脰艓陋Q脴录r怒聨颅芦}N脧眉r脢卢聦mjr聙@臉rTW聽颅SsdHz茡^脟脗yUi炉D脜Yl殴u{hT聹}m膲聳鹿楼聺臎聣D每毛漏谋脫[O潞拢聻聯楼贸t聙艂鹿M脮聞聻篇聝`P職聟Di聳脹U聤戮脜芒聙聦矛聢U聮帽B聯脠拢媒he聣dy隆o膵聙`pfmjP~聜kZa聟聧Zs脨d掳wj搂聝@聙拇庐w~^聜k脌脜KvNmX\\篓聛a聯聰艃聛qv铆贸驴F聞陇隆@农脩Vw}S@j聺}聛戮芦p膫r聳陋g聽脿脌虏NJ露露D聬么聟K聜|^陋聠聨聛掳LX戮糯盲P莫卤聹拢EXd聸聰^露聸牟脼脺聯~聭u赂菙聵聨聸MRhsR聟e聠`脛ofI脭\\脴聽聽i聰膰ymn煤篓cj聽垄禄聳G膶矛茒每脨篓Xe膱膧戮O冒聽Fi聽垄|[jVxrIQ聦聞_E聰zAN娄zLU`聹c陋x聰OTu聽RL脛垄dV聞i`聬p藬v艓碌陋脡聻F~聝脴聙d垄潞g陌脿w赂脕b[娄聫Zb娄聳z陆xB聬臇@陋p潞聸職lS赂脰\\臄[N楼藔m膸膬聮J\\聥艀`聙聟艌S脷聤臇脕膼iO聯臏芦BxD玫臍iv聴聻聳S聶脤}i霉聦聻脺n職脨潞G聤{聤p掳M麓w聠脌脪zJ虏貌篓聽oT莽眉枚o脹每帽聨艖臑陇聜霉Tz虏C葐雀菐弄聝茟脨c掳dP聺脦聼臒脣露[脠陆u炉陆WM隆颅脡聻聯聮B路r铆聻nZ聼脪聽`聡篓GA聛戮\\p膿聵Xh脙聠RC颅眉WG摹u聟T茅聺搂艓脩聺漏貌鲁I卤鲁}_聭聥E聧脙魔g庐臋is脕PDm脜{聣b[R脜聼s路聙kP聼沤匹聝贸Ro聰O聥聼V聼~]{g\\聯锚Y篇娄k脻bi膵频聤GZ禄臍玫聟贸路鲁v艥聻拢酶@py枚_聥毛聨Ik脩碌聡b聫c脩搂y聟脳dY脴聨陋i镁聻篓聝[]f]艆漏C}脕N聡禄h幕魔茝聮末"
-          ]
-        ],
-        "encodeOffsets": [[[115640, 30489]], [[112543, 27312]], [[116690, 26230]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "440000",
-      "properties": {
-        "id": "440000",
-        "cp": [113.280637, 23.125178],
-        "name": "骞夸笢",
-        "childNum": 24
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@Qd聢Aua"],
-          ["@@聝lxDLo"],
-          ["@@sbhNLo"],
-          ["@@膫聽膩聼"],
-          ["@@WltO[["],
-          ["@@Kr聹]聫S"],
-          ["@@e聞聞I]y"],
-          ["@@I|聞Mym"],
-          ["@@聝脹鲁LS聦聬聻录Y"],
-          ["@@nv潞B聳毛ui漏`聺戮"],
-          ["@@zd職脹聸Jw庐"],
-          ["@@聠掳聟炉"],
-          ["@@a聽yA陋赂脣JIx脴聦@聙膧HAm脙聼V隆o聲fu聲o"],
-          ["@@職s聣艞脙脭臈A苼聸Z職脛聽~掳膶P聜聥盲h"],
-          ["@@聥露脻聮脤聜vm臑h颅谋聡Q"],
-          ["@@H聹聤dSj膾垄D}war聟聯u芦ZqadYM"],
-          ["@@el聦\\LqqU"],
-          ["@@~rM聧o\\"],
-          ["@@f聞^聝C"],
-          ["@@酶P陋oj梅脥脻魔X膶x聰掳Q篓谋XNv"],
-          ["@@g脟瞥聢聨聢聰o聢聤聢[~tly"],
-          ["@@E聳脝C驴聭"],
-          ["@@O聨P聧"],
-          [
-            "@@w聥聠膽贸g聣聶臐聴[鲁聥聛隆V脵忙脜枚M脤鲁鹿p脕a脣媒媒漏D漏脺聯J殴茣模G膮陇{脵奴聟脟聵O虏芦B票茅A聴脪聣磨聡隆聫芦Bhlmt脙P碌yU炉uc聯d路w_b艥c墨铆mGO聨|KP聮葟聡殴茫艥I艜怒艜@脫oo驴膿聥卤脽}聨聟怒聜聼牟W脠C艖芒U芒菣I聸臒艍漏I聸聧某E脳聟脕聰鲁A贸聸wXJ镁卤脤聦脺脫聰抹拢L]膱脵坪Z蔷膯臇M母膜f聦脦牡l聲浓n脠聢聭膼tF聰聤聳F膜聳聜锚k露聹^k掳f露g聤聨聹}庐Fa聵f`聧vX挪聧xl聵聞娄聳脭脕虏卢脨聼娄pq脢脤虏聢i聙X聼脴RD脦}聠脛@Z臓聮s聞x庐AR~庐ETt膭Z聠聳聬茍f艩艩H芒脪脨A聠碌\\S赂聞^w臇kRz聤al聨艤|E篓脠N膧艌ZT聦聮pBh拢\\聦膸苺uX臇tKL聳露G|聨禄暮E募臑~脺蘑脹膴r聢O聵脵卯vd]聬n聢卢V聹脢臏掳R脰聼pM聠聠聳聜苽陋Fbw聻E脌聢聵漏聦聻\\聟陇]鸥I庐楼D鲁|脣聨]C聺枚A扭娄聟忙聮麓楼赂Lv录聙聲垄慕Ba么聳F~聴職庐虏G脤脪聬EY聞聞聹zk陇聮掳ahlV脮聻I^聥職Cx聫膱P聨sB聣茠潞V聣赂@戮陋R虏抹N]聧麓_eavSi聡vc聲}p}膼录茖kJ聹脷e聽th聹聠_赂聽潞x卤貌_x聧N聸脣聥虏聭@聝膬隆脽H漏脵帽}wkN脮鹿脟O陆驴拢臅]ly_W矛I聻脟陋`聤uT脜xY膾脰录k脰聻聮碌聜聬M聻jJ脷wn\\h聭聹膾v]卯h|聮脠聸苿酶猫g聻赂亩脽聽膲膱Wb鹿苺d茅臉聦NTt聧P[聬聤枚SvrCZ聻聻aGu聹bo麓艝聛脪脟膼聬~隆zCI聟枚zx垄聞Pn聥聲聣脠帽聽@聦磨脪娄聠]茷聤V}鲁膬臄帽ii脛脫V茅pKG陆脛聭脫谩v聺Yo聳聛C路sit聥ia脌y聞脓脦隆脠YD脩暖m}聣媒|m[w臋玫膲Z脜xUO}梅N鹿鲁膲o_qt膬聯qw碌艁Y脵聞菨艜鹿t茂聺脹U脙炉mRC潞聟聢沫|碌聛聸脮脢K聶陆R聭膿聽贸]聭聳G陋臋Ax聳禄HO拢聫|膩m聡隆di膹脳Y茂聧YW陋艍Oe脷t膼芦z膽鹿T聟膩聡煤E聶谩虏\\聥姆脥}jY脿脵脝趴驴脟d臒路霉T脽脟牛蕜隆XgW脌菄臒路驴脙聢Oj聬聽Y脟梅Q臎聥i"
-          ]
-        ],
-        "encodeOffsets": [
-          [[117381, 22988]],
-          [[116552, 22934]],
-          [[116790, 22617]],
-          [[116973, 22545]],
-          [[116444, 22536]],
-          [[116931, 22515]],
-          [[116496, 22490]],
-          [[116453, 22449]],
-          [[113301, 21439]],
-          [[118726, 21604]],
-          [[118709, 21486]],
-          [[113210, 20816]],
-          [[115482, 22082]],
-          [[113171, 21585]],
-          [[113199, 21590]],
-          [[115232, 22102]],
-          [[115739, 22373]],
-          [[115134, 22184]],
-          [[113056, 21175]],
-          [[119573, 21271]],
-          [[119957, 24020]],
-          [[115859, 22356]],
-          [[116561, 22649]],
-          [[116285, 22746]]
-        ]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "450000",
-      "properties": { "id": "450000", "cp": [108.320004, 22.82402], "name": "骞胯タ", "childNum": 2 },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@H聳聽TQ搂聲A"],
-          [
-            "@@抹脢陋聝L聝茒D脦墓膼C铅臈赂z脷Gn拢戮聸r陋艀脺t卢@脰聸脷聢Sx~酶O艗聵哦脨脗忙葼\\聞脠脺Ob臇w^o脼聞Lf卢掳bI聽lT脴B脤聢F拢膯鹿g帽膜aY聯t驴陇VS帽聹K赂陇nM聠录聜JE卤聞陆赂職聤帽o聥脺C茊忙莫^聤臍Q脰娄^聡聢聢f麓聛Q聠眉脺脢聺z炉職lzU暮拧@矛聡聙p露n]sxtx露@聛聞~脪膫Jb漏gk聜{掳聜~c掳`脭聶卢rV\\聯la录陇么谩`炉鹿聺LC聠脝b聦xEr忙O聬聜v[H颅聵聞[~|aB拢脰s潞dA膼zN脗冒s聨脼脝聰聟膜陋b聝聳ab`ho隆鲁F芦猫Vlo聨陇聶脭Rzpp庐S聨莫潞篓脰聝潞N聟某聞d`聮a聰娄陇聺F鲁潞D脦艅膧矛聤C聻臏潞娄膴聲~nS聸|g藕vZkC脝j掳zV脠脕茢]L聧脢FZg聟膷P颅kini芦聥q脟聙cz脥聰Y庐卢女聧禄qR脳艒漏D脮聞聭搂茩莾诺T脡末卤聼谋d脩nYY聸牟vN膯膯聦脴脺聽聺脰p聳}e鲁娄m聥漏聬聧i脫|鹿聼魔艈聸|陋娄QF垄脗卢蕱ovg驴em聡^聫uc脿梅g脮聨u聦铆脵膰臐}F幕录墓{聧碌HK聲sLS膽苾r聥膷陇[Ag聭oS聥艊YM每搂脟{F聧艣bky聣lQx臅聝]T路露[B聟脩脧G谩艧艧茋e聙聫聟聲膬YSs颅FQ}颅B聝w聭tY臒脙@~聟C脥聙Q聽脳W聡j脣卤r脡楼o脧聽卤芦脫脗楼聲聝聙k聴聨wW疟聦mcih聫鲁K聸~聣聧碌h炉e]l碌聸茅l聲聛E模聣聲E聯膹s聡聮m脟聳脓膿`茫貌gK_脹sU蕽聯膰聫臒露h聦枚聦O陇菦n鲁聨聺c聭`隆y聥娄C聭聛ez聙Y聤wa聶聳聭[膹牡疟M臋搂]X聵脦_聜铆聸聵聧脹]茅聮脹U膰陌脮B疲卤聟d聝y鹿T^d聛聻没脜脩纽路聡P幕镁脵`K聙娄聵聟垄脥e聛聹磨R驴聦鲁拢[~聦盲u录dl聣t聜聠W赂oRM垄膹\\z聹}脝zdv艌聳{脦XF露掳脗_聞脪脗脧L漏脰聲Tmu聼录茫l聣聸墨kiq茅fA聞路脢碌\\艖Dc楼脻F聯y聸脭膰聵c聙疟H_hL脺聥锚暮膼篓c}rn`陆聞脤@赂露陋VL聦聤h艗聥\\聲泞暮k~聨臓i冒掳|g聦tT沫母^x聭vK聵聫VGr茅A聛茅聭bUu聸MJ聬聣V脙O隆聟q膫X脣S聣模茫l媒脿聼_ju聡Y脹脪B聠聹G^聵茅脰聤露搂聨聝EG聰脜z臎聝漂陇Ek聡N[kd氓uc茅卢dnYp聫Ay膶{`]镁炉T聮b聬脺脠k聜隆臓聲v聦脿h聞脗苿垄J卯露虏"
-          ]
-        ],
-        "encodeOffsets": [[[111707, 21520]], [[107619, 25527]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "460000",
-      "properties": { "id": "460000", "cp": [109.83119, 19.031971], "name": "娴峰崡", "childNum": 1 },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": ["@@職娄艤il垄聰X痞聭茷貌聳茂猫搂艦C锚蓵r脓暖脟膮幕玫聶路膲鲁艙聛虆k脟m@膵颧聝脓磨聣慕蕢聧颅茀趴聯葥脪脣娄艥E}潞茟[脥臏葖聽g脦f菒脧膜篓锚聺坪\\茊赂臓膸v蕜葊聹脨戮jN冒膧脪R聦職Z菃聶z脨艠脦掳H篓聧脾b虏_臓聽"],
-        "encodeOffsets": [[112750, 20508]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "510000",
-      "properties": {
-        "id": "510000",
-        "cp": [104.065735, 30.659462],
-        "name": "鍥涘窛",
-        "childNum": 2
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@LqKr"],
-          [
-            "@@聤[幕茅V拢聻_牛摹帽pG聽聲r茅脧路~膮Sfy脳脥聜路潞聫趴平i脥谋疲谋幕mHH}siaX@i脟掳脕脙脳t芦聝颅T聝陇J聳JJ聦yJ聲脠聤`Oh脽娄隆u脣hIyCjm每w聟ZG聟聟Ti聥S聢sO聣聻B虏聼fNmsPa聢{M{聤玫E聭^Hj}gYpaeu聻炉聭o谩wHj脕陆M隆pM聯聳u氓聡mni{fk聰\\o聝脦qCw聠EZ聛录K聸臐聤聝Ay{m梅L聡wO脳SimRI聧炉rK聶玫BS芦sFe聡]f碌垄贸Y_脝PRcue掳Cb聛o脳聦bd拢艑IHgtrnyPt娄foaX膹x聸lBowz聥_{脢茅Wi锚E聞聛Gh脺赂潞uF聺膱Ixf庐聨聲Y陆膧菣]聛陇聺Ey聼F聧虏膵聮w赂驴@g垄搂RGv禄聳聛谩聼W`脙牡Jwi]t楼wO颅陆a[脳聢]`脙i颅眉聫L聙娄LabbT脌氓聮c}脥h聶脝h聢聥庐BH聙卯|卯聝潞脡k颅陇S聠聺y拢聞ia漏ta寞路茐`艒楼Uh聯O聟聝臐Lk}漏Fos聣麓聸Jm聞碌l艁u聺聴聟酶聳n脩JW脦陋聳Y脌茂AetT聻艆聜脫聧G聶脣芦bo聣{谋wod茻陆聝聻聛O摹脺聭脗碌x脿N脰戮P虏搂HKv戮聳]|聲B聡脝氓oZ`隆脴`脌m潞臓~脤脨搂n脟聟驴陇]w臒@s聝聣r臒u聣~聭Io聰[茅卤鹿聽驴聻趴膽脫聣@q聥g聢鹿z票艡a铆掳Kt脟陇V禄脙[末黔茟^脟脫@谩钮聴s聸Z脧聲聥聹脜沫聙茓聲臎pwD贸脰谩聢呕neQ脣聦聺q路聲GC艙媒S]x聼路媒聥q鲁聲O脮聹聦露Qz脽ti{艡聣谩脥脟W艥怒帽z脟W聥p莽驴J聦聶聜X聹末猫陆c聧聦F聳脗LiVjx}\\N聠艊臇楼Ge聳聯JA录脛Hf脠u~赂脝芦dE鲁脡MA|聛b聵脪聟聵膰hG卢CM聜玫聤聞皮膮Av聝眉V聙茅艀聣_V脤鲁膼wQj麓路Ze脠脕篓X麓聧脝隆Qu路禄聼聯聵脮Z鲁摹qDo聣y`L卢gdp掳艧聤p娄臈矛脜漠Z聨掳I盲聰h聜聭聢z聤牡聹f虏氓聽聸臍脩聙Kp聥IN|聥聞脩z]艅聟聟路FU脳茅禄R鲁聶M聝脡禄GM芦聙聫ki聙聶茅r聶}脙`鹿膬脼m脠聺n脕卯R莯鲁臏o陌z艛w嵌V脷拢脌]蓽禄膯l苽虏臓聟镁T潞路脿U葹脧师露聠I聮芦d慕蘑d默驴聳禄臄脳聤h\\c卢聠盲虏G锚毛膜艂楼脌强偶脙脝M潞}B脮蘑yFVvw聳聢xB猫幕膾漏膱聯tC蘑山艩龋娄膩忙路H慕卯聯么N脭聯~^陇茒聹u聞聹^s录{TA录酶掳垄陌陋D猫戮艊露脻J聭庐Z麓臒~Sn|陋W脷漏貌zPO聬雀聜b冒垄|聥酶臑聤聦聹艗Q矛脹脨@臑聶菐RS陇脕搂d聟i聯麓ez脻煤聫脴茫聫]Hq聞kI聼镁脣Q脟娄脙s脟陇[E聺卢脡弄脥xX茠路脰苼陌l茷鹿陋鹿|X脢wn聭脝苿m脌锚Er膾tD庐膵忙cQ聝聰E庐鲁^沫楼漏l}盲Qto聵艝脺q脝聨k碌聳聞陋聫脭幕拇隆@膴掳B虏脠w^^Rs潞T膧拢艢忙聹QP聭Jv脛z聞聬^膼鹿脝炉fL脿麓GC虏聭dt聵颅膧Rt录陇摩O冒臒f脭冒D浓艁臑茦茂聻P脠聠庐芒bM眉脌XZ聽赂拢@脜職聸禄禄Q脡颅聶]d聯s脰脳_脥聳_脤锚女Pr臄膼脮G膫eZ脺卯臉qBhtO聽陇tE[h|Y聥脭聜Z艣脦s麓x潞卤U聦聮帽聢t|O聮末臓潞Nbg镁聤Jy^d脗Y聽漠聞]艠z娄gC聜鲁聙R`膧聤z聮垄Aj聦赂CL聞陇R脝禄@颅艓k\\脟麓拢YW}z@Z}聣脙露聯o没露]麓^N聡脪}猫N聜陋聳P聵脥y鹿`S掳麓聠ATe聙VamdU膼w蕜v漠脮\\聝u聥脝艞篓Yp鹿脿Z脗m聶Wh{谩聞}W脴菎聲脡眉w聶ga搂谩CN臋脦[膧脮莫g脰脡陋X聵聧酶x卢陆女娄娄[聙聴聞N脦聠L聙脺U脰麓貌r脵艩xR^聳聠J聵k聞某nDX{U聝~ET{募潞娄PZc聰jF虏臇@聨p聵g聙聢篓聯B{聝u篓聺纽yho脷D庐炉垄聵聽W貌聬脿F脦陇篓GD聫盲z娄k女P聹摹q脣職楼脌]聙聼聵e聨芒脷麓陋Kx墨聞P聢聴脰|忙[x脙陇J脼磨聜s聮N脰陆聻聙I聠卢n抹Y麓庐脨聴茞聤聙mD聶艥u盲膽膽Eb聛聟e聮聛e_聶v隆}矛臋菉膿}q聰脡氓聼聛T炉碌Rs隆M@}暖a聠聫a颅炉wv聺茐氓Zw聻\\Z{氓没^聸"
-          ]
-        ],
-        "encodeOffsets": [[[108815, 30935]], [[110617, 31811]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "520000",
-      "properties": {
-        "id": "520000",
-        "cp": [106.713478, 26.578343],
-        "name": "璐靛窞",
-        "childNum": 3
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@聠G\\聠lY拢聭in"],
-          ["@@q聜|聢聜mc炉t脧聡VS脦"],
-          [
-            "@@h脩拢Is聡Ng聛脽H聠聸聬H陋姆聺脙h_鹿聝隆臐脛搂艅娄u脵聤霉聨gS炉JH聼|s脻脜t聧脕茂yMD膷禄e脮tA陇{b\\}聴聝G庐u\\聫聛氓PFq聥w脜aD聟聻K掳潞芒_拢霉b碌聰m脕聥脹聹墓M[q聛|hla陋膩I}脩聜聝碌@swtwm^o碌聢D茅慕艩yV聶ky掳脡聻没脹R聟鲁聜聡e聢聡楼]R脮聥臎魔[茀氓脹Dp聦聛聰J聞iV聶聶聣脗F虏聛I聟禄mN路拢聸Lb脪Yb聴Ws脌b聨聶pki聶TZ膭膬露H聦q`聟聟磨_J聼炉ae芦聝Kp脻x]a臅脹P聝脟葻[脕氓诺脧艖聴梅Pw}聡T聹脵@脮s芦目脹q漏陆聹m陇脵H路y钎臉膲B碌抹脮n膽]K聞漏聞艙谩聥聼G莽艧聧搂脮脽g聡聧菞摩T猫皮坪{露脡H脦d戮艢脢路O脨jXWr茫Lyz脡AL戮臋垄b亩臈y_qM臄膮ro录h膴聻w露酶V陇w聰虏膱]脢職Kx|`藕娄脗脠dr聞c脠聛be赂聸`I录膷TF麓聺录脫媒葍r鹿脥J漏k_葯l鲁麓_聬p膼聺`o脪h聨露pa聜^聬脫臄}D禄聺^Xy聹`d聵[Kv聟JPh猫hCr膫臍脗^脢茖聽w聢ZL颅臓拢職脕brzOIl聮MM聰莫艕啪脣r脳脦e纽聨tw|聦垄mK聛jS菢艌膫St聧脦纽EtqFT聠戮聠E矛卢卢么x脤O垄聼聽K聤鲁艀潞盲Y聠聞聰PVg艓娄艎m艦录VZwVl聦聧聞z陇聟聻拢Tl庐ct慕脷贸{G颅A聡聦脟ge職~脦聭d驴忙aSba楼KK没聬j庐_脛聡^\\脴戮bP庐娄x^sxj亩I_脛聽X聜芒录聲Hu篓Qh隆脌@聬脣么}聨卤聻GN矛膸lT赂聢聟`V~R掳tb脮膴`赂煤脹t脧聙FDu聙[聝Mf聛qGH路楼yA聣zt聬MFe|R聜_Gk聠ChZe脷掳to聵v`x聥b聞聦Dn脨{E}職Z聵猫聙x聴聠NE脼聤REn聵[Pv@{~r膯AB搂聜EO驴|UZ~矛聞Uf篓J虏膫脻脝聙聜s陋聳B`聞s露聹fv聛枚娄聤脮~d脭q篓赂潞禄u霉聬[[搂麓sb陇垄z镁F聹垄脝聟脌h聢聶聬脗聢W\\谋聨脣I脻聤o卤沫艩拢镁聢脢s}隆R聺聫]聦臎聝D聺聜g麓VG垄聜j卤庐猫聠潞脙m聧pU[脕聸聭聦毛潞掳r聸脺bNu赂}聨潞录聡`ni聰潞脭X膭陇录脭da碌聙脕_脙聙聟聠ftQQg聹R聴聭路菗聮v聰}脻脳聹牡]碌聹聯Wc陇F虏聸O末懦茫W陆炉K聧聜漏聟]聙聛{聠L聫贸碌CI碌卤M脽驴h聼聲漏膩q卢o聜陆聻~@i~TUx弄脪垄@聝拢脌E卯么ru艅聜聰聯聜b[搂nWuM脝Ll驴]聛x}某颅聙陆"
-          ]
-        ],
-        "encodeOffsets": [[[112158, 27383]], [[112105, 27474]], [[112095, 27476]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "530000",
-      "properties": {
-        "id": "530000",
-        "cp": [101.512251, 24.740609],
-        "name": "浜戝崡",
-        "childNum": 1
-      },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": [
-          "@@聧聛[聞霉x陆}脩RH聭聛Y墨暮没s脥n聭iEo茫陆Ya聛虏臈{c卢臐g聲膫sA聲脴脜w膹聜玫zFjw}聴芦Dx驴聛}U农l聼锚聶@聲聫H聫脜颅F聣篓脟oJ麓脫n农u膮隆脙垄p脪脜聦聯脴聽TF虏聜xa虏脣X聙聜c脢聥lH卯A脽脣艁k呕茟欧脡漏h聶W颅忙脽U聡聯脣s隆娄}聲te猫脝露St脟聙脟}Fd拢j聥膱Z膯聬脝聥陇T聜膷\\D聝}O梅職拢聛U聢搂~艃G聶聜氓聛艃D臐赂聹Tsd露露B陋職陇u垄艑膸o~t戮脥哦脪tD娄脷聞i么枚聣聙z聸脴X虏gh寞h陆聬脹卤炉聙每m路zR娄茻`陋艎脙h垄rO脭聧麓拢Ym录猫锚聧f炉弄慕n聞聠c脷b聦w\\zlvW聻陋芒聢聽娄g聳聫m目B墓聼拢垄乒艡b磨k谦脽eeZk脵IKueT聛聺禄sVesb聭聧a聬臅聽聽露庐dN聹膭脛p陋y聨聬录聴聞鲁BE聵庐l聡聨G聹怒C聹嵌w锚偶臄脗e聞p脥脌Q茷pC聞聳录挪脠颅聬A脦么露R聞盲聮Q^脴u卢掳職_脠么c麓鹿貌篓P脦垄hl膸娄麓摩聯脝麓s芒脟聞聫挪Pn脢D^炉掳聮Upv聠}庐聛BP脤陋聳j乾x聳S枚wlf貌陋v聙q母|`H聙颅vi募聙nd臏颅膯h艌聲聜em路Fy脼聛q贸聻S寞炉聭鲁X_臑莽锚tryvL陇搂z聞娄c娄楼jn艦k聵聢lD陇酶z陆臏脿聻膫脓M脜|谩茊脿脢c冒脗F脺聨聜谩泞楼\\\\潞聶陌酶脪脨J拇聡聞卯D娄聬zK虏菑脦Eh~聮CD聬颅hMn^脤枚脛漏膶Z脌聻a眉聞f森y艙p寞麓臎F疟k]脭臎垄ql脜膯脵a露~脛q職職锚聙lj聬N卢录H聞脢職NQ麓锚录V脴赂E聠聠^艃脪y聦聝M{聦JLo脪聹臋忙聼e卤亩聸y聣聮聡g聛茫聯炉JY聧脝沫臉毛o楼艩聣o炉hcK芦z_p聤rC麓蘑脰Y聰聴录聽v赂垄R聨脜W鲁脗搂f脟赂Yi鲁xR麓膹U脣聤`锚目U聞没聙u膯B聝疲枚聣N聛聙DH芦膱g聠聴聴脩聜aB{脢NF麓卢c路脜v}e脟脙GB禄聰If聲娄H艌臅M聟~[iwjU脕KE聲聨聥戮d莫莽W聸職聛I聥猫脌聦o脠X貌y艦女脠X芒脦艢聤j|脿sRy聥碌脰聸聳Pr麓镁聦聽赂^w镁TD艛聳Hr赂聥聻R脤mf聡偶脮芒C么ox聳臏茖脝漠聦聸脨聳聹Y聵t芒纽脭@]脠钱茠\\莫录脛拢Us脠炉Lb卯撇艢潞yh聡r聦聤@膾脭聺苺聼脌虏潞\\锚p聯聮J聤}臓v聤qt聞臓@^x脌拢脠聠篓m脣脧臒}n鹿_驴垄脳Y_忙p聢脜聳A^{陆聲Lu篓GO卤脮陆脽M露w聮脕蘑脹聜P聜聸脾录pc牟x聤|ap脤卢H職脨聦艎S聺fs冒BZ驴漏聯X脧脪K聲k聠梅E没驴聣S聟rEFs脮奴k聰贸V钎艍iTL聜隆n{聥ux牛聧脧h聶么艥卢臒艒N聯聭NJkyPaq聶脗臒陇K庐聡Y聼x脡茓脕]膩臋Dq莽gOg聠ILu聴\\_gz聴]W录聻~C脭膿]聫b聛碌og聧p脩聻_o膹`聫麓鲁葰kl`I陋潞脦葎q脭镁聻禄E鲁膸SJ禄聹_f路聜ad脟q聝脟c楼脕_殴w{聶L^脡卤膰x聯U拢碌梅聺xg膲p禄膯qN膿`r臉za牡臍隆K陆脢Bzy盲KXqiWP脧脡赂陆艡脥c脢G|碌茣疲G脣聸梅聼k掳_^媒|_z膵聬BZocm酶炉hhc忙\\l聢MFl瓢拢臏聞脝yH聯聞F篓聧聣碌锚脮]聴聸HA聟脿脫聞^it聽`镁脽盲k聤膜脦T~Wl每篓聞脭PzUC聫聳NVv聽[j芒么D么膹[}聻聣z驴聳msSh聥炉{j茂聧臒l}拧墓[聳艖聦聣gK聥漏U路碌脣@戮聝m_~q隆f鹿聟脜脣^禄聭f鲁酶}Q聲聞隆脰脣鲁g脥卤^脟聛聟\\毛脙聝A_聴驴bW聸脧[露茮茅聫聺拢F{墨Zgm@|kH黔苼膰娄U臄钮聝脳毛}菨聝e膹潞取葮脧铆B脡聶拢膩臉P陋某露聯艍每聡y漏n聣膹拢G鹿隆I聸聤卤L脡暮脩d膲脺聡W楼聵聣}g聵脕聠{aq脙楼a聤聺谋臋聺脧Z聴茂`"
-        ],
-        "encodeOffsets": [[104636, 22969]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "540000",
-      "properties": { "id": "540000", "cp": [89.132212, 30.860361], "name": "瑗胯棌", "childNum": 1 },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": [
-          "@@脗聺h聻木x聨聺艝聣x聝脪V聨聠潞脜芒A莫脻葐碌臋炉艊a卤r_w~uS脮艌聭qOj]蓜Q聟拢Z聟聟UD没oY聮禄漏M[聥L聧录q茫脣{V脥聲莽WV聫i聫聨]毛漏脛梅脿y聛茮h聸脷U掳聦聦a聰d聞cQ聝~Mx楼聶cc隆脵aSyF聴脰聛k颅聦uR媒q驴脭碌聺聲Q慕鲁aG{驴F碌毛陋茅臏每陋@卢路聳K聣路脿ar聧i臅膧芦V禄哦聶拇奴聵g猫L谴艊贫af聥t聦猫B艢拢^聤芒聠菒脻庐聳職M娄脕菫每卢Lh聼聨J戮贸凭脝潞cxw聧聥f]Y聟麓聝娄|聹QLn掳a聹d膴聟聹\\篓o聮聹莯脥艓聹麓末膧d`t脢Q艦艜|聜篓C^漏聹膱娄聞娄脦J膴{聨毛膸j陋聫虏r脨聣職l`录膭[t|娄St猫戮聣P聦脺K赂聙d聵苿谋]s陇聴卯_v鹿脦V貌聺纽j聵拢茝sc聴卢_臑麓|艁聵聺娄Av聨娄w`膬聫a聬聧脻aa颅垄e陇谋虏漏陋S陋職脠M膭w聻脡脴艛矛@T聭陇聴臉聶\\玫陋@聰镁o麓颅xA聽聬聬s聰脗t艓Kz贸麓脟膴碌垄r聻^n膴颅脝卢脳眉G聻垄聜鲁聽{芒膴]職聶G聜~b脌gVj聛zlh嵌聧f聙聻O聛職fd聤聣陋B]pj聞聲TO聳t膴聜n陇}庐娄聝膶楼d垄录禄dd職聰Y录聨t聴垄e趣J陇}蔷隆掳搂陇A脨聯lc@臐聰s陋膰募膽A莽聡wx聲UuzE脰摹~AN鹿脛脜葊呕娄驴模艁茅矛卤H聟茫d芦g[脴聣录膿脌聲c墨木摹卢cJ聭碌聟脨圣V葷赂脽S鹿聠媒卤臒k苼录膮^蓻陇脹每聣聺b[}卢艒玫脙]脣Nm庐g@聧聲Bg}脥F卤菒yL楼聫铆C聢聝I某聙脧梅脩職寞[鹿娄[芒拧聧聛E脹茂脕脡d茀脽{芒N脝膩浓脽聺戮臎梅yC拢聡k颅麓脫H@脗鹿聠TZ楼垄寞聝路脤A脨搂庐聴Z聫c聟v陆聼Z颅聧鹿|脜聲WZqgW聯|ieZ脜YV脫聛qdq聫聲bc虏R@聛聠c聡楼R茫禄Ge聠聼e苾墨Q聲}J[脪聯K聟卢茝|o聮臈j摹臓脩N隆冒炉EB膷nw么蓫聫臈陋聝虏聲C位殴摹菨蕝寞沫茫蹋奴裙]螕艇g拧sg冉贸惜碌菦聠臋g趴露覎膰`臉膮艑J脼職盲陇r脜艌楼脰脕U臎t臋u暖脼i膴脛脌\\脝s娄脫Rb|脗^艡脤k脛欧露陆梅聡f卤iM脻聭聸聣@磨掳G卢脙M楼n拢脴膮聜臒炉脽聰搂a毛b茅眉脩O膷聹k拢{\\聭e碌陋脳M聭職脡fm芦茟{脜脳聝G艔签茫y鲁漏W脩膬没聜路路聭Q聴貌谋}炉茫聣I聲茅脮脗Z篓墨猫s露Z脠s聨忙臄T艠v聨g脤sN@卯谩戮贸@聣聵脵wU卤脡T氓禄拢T膽聼Wx聫q鹿Zo聭b聥s[脳聦炉c末v聡聦臈脓鲁BM|鹿k聣陋魔聴楼TzNYn脻聧脽p聧聛臋r帽臓膲RS~陆聤臎VV聤碌聜玫聡芦聦M拢拢碌B聲膲楼谩潞ae聛~鲁Au膼h`聫脺鲁莽聺@B脹聵茂目a漏|z虏脻录D聰拢脿膷虏聥鸥聝I聝没聸聛I聽膩聙贸K聧楼}r脻_脕麓茅Ma艌篓聙~陋S膱陆聨陆K脵贸目e苾脝B聨路卢毛n脳W聧|U潞}LJr瞥聵l艗碌`b脭`Q聢聢脨脫@s卢帽I聦脥@没ws隆氓Q脩脽脕`艐拇{莫聯T聲脷脜TS脛鲁聜聥Yo|脟[脟戮碌MW垄沫i脮脴驴@聵職Mh聟p脮]j聠茅貌驴O茋膯茋p聙锚膲芒l脴w聳臎s聫聢签聜牡赂c聟聺bU鹿艡篓WavquSM聺zeo_^gs脧路楼脫@~炉聺驴Ri墨B聶聤\\聰qTG陋脟臏莽Po聤每f帽貌膮娄贸Q墨脠谩P聲聹膩b脽{聝Z艞母I忙脜聞hnsz脕C脣矛帽職脧路膮臍脻Um庐贸颅L路膬U聸脠铆o霉麓聛脢j掳艁扭_u碌^聭掳聦矛脟聳@t亩膾隆脝聡M鲁蘑芦聵陌抹脜庐臒聠R聨膩冒聯gghe脝垄z聜脢漏脭\\掳脻膸z~藕陇Pn聳M莫脰B拢聬聼k聶n茅聞搂偶膰聤聵膯K聞膾掳聬录L露猫聣芒z篓u娄楼LD臉z卢媒脦m臉d戮脽聰Fz聯hg虏聶Fy娄臐陇膵艈b脦聸@y聜膭忙m掳N漠聛ZR脰铆聨J虏枚L母脪篓Y庐茖脨V聣脿聵tt_脷聙脗y臓z聻]泞h聙z膸{脗聠蘑X聰聢c|職脨q聨職fO垄陇枚g聜脤HN聨聞PK艝聹聨聵U煤麓xx[x聢v膼C没膧聤矛脰T卢赂^}脤s貌d麓_聨聡Kg啪L拇聟脌Bon|H@聳脢x聵聴娄Bp聺虐聢艑驴f碌茖A戮z菆Rx聤露F聰聹k膭藕聬Rz艀聢~露[聰麓Hn陋聳V茷u膾颅脠篓茙c聬平脤m赂脕脠M娄x蛫毛脌x菃B聮職煤^麓W聠拢聳d聞k删默p聹w聜藗脴搔募默I艢聹脢聲n聸艛a赂聶~J掳卯聰l蓪x膜脢脠冒h脤庐聜g聵T麓酶聨脿C聢聨脌^陋err茦d聻垄陌P|聧臇聽鸥W聹陋摩^露麓脗L聞aT卤眉W茰聵莯R脗職哦U艅職臇[QhlL眉A聠聥脺\\聠qR聸膭漏"
-        ],
-        "encodeOffsets": [[90849, 37210]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "610000",
-      "properties": {
-        "id": "610000",
-        "cp": [108.948024, 34.263161],
-        "name": "闄曡タ",
-        "childNum": 1
-      },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": [
-          "@@聵p垄聴犬碌職没G聶摩}摩職冒聛菤露貌聫苿聙j蓚z掳{潞脴k脠臋芒娄j陋聜Bg聜\\聹膵掳s卢聨聮]j聻煤聽聜E聰葘菃卢s聞t聡聰R聢脝d臓陌聨w脺聰赂么W戮飘艂脪_{聮脤職没录聞j潞鹿垄G仟脪炉臉聝Z`潞艎聝ec艈膮職~B聬脗gzp芒膿貌Y菭劝脤T脦篓脗W聹|fc聼膬搂uF聴聦@N聼垄XL聝聤RM潞[臒龋趴茂|楼J聶kc`s艍欠聮聺Y鹿聥W@碌梅K聟茫茂鲁脹Ic帽路聛V葖脷聧脪姆酶聺漏聴镁楼聝y聜脫聼臒臋mW碌脦umZy聛O艆茻磨脫~s脩L陇碌a脜聟Y娄ocyZ{聣y聽c]{聦Ta漏聝`U_臍膿拢蠅脢茘K霉聮K露缺脻品搂{没禄脜脕裙脥茅u某|鹿c脩d聭聤矛UY聝聨O聭uF聧聳脮脠Yv脕Cq脫聝T聲洽铆搂路S鹿Ng聤V卢毛梅脕t聡掳D脴炉聮C麓艍茠贸p模}聞膵聛cE脣聟F聼聼茅GU楼脳K聟搂颅露鲁B聥膶}C驴氓膵`聧w摹B路陇艖c骗虏艖[脜^axwQO聟每E脣脽艢聲膜N臄聼w茋聢聛脛聤艅w莫颅聤o[聞_K脫陋鲁聯聫脵nK聣脟聝臎聹每]膹聙膬_d漏路漏脻艔掳脵庐g]卤聞聼聡脽聵氓聸聴卢梅聺m\\聸ia菓k臎X{垄|ZKl莽hLt聛聙艊卯诺聙艙猫[聙脡@茐膭E聹聡t茋聫脧聵鲁颅魔Z芦mJ聟聸脳戮聭M聛t脻摩拢Iw脛氓\\脮{聡聵聝Ow默漏L脵鲁聛脵gB茣艀r脤聸蘑怒O楼l茫yC聬搂H脥拢脽E帽聫聼X隆聴颅掳脵Cgp钮z聭聢b`wI聞vA|搂聰聡聴h聧o臅@E卤聯iYd楼O幕鹿S|}F@戮oAO虏{tf聻脺聴垄F莻脪聢W虏掳B膜h^Wx{@聞卢聜颅F赂隆聞姆n拢聬P|聼陋拇@^臓膱忙b聳脭c露l聵Yi聟聳^Mi聵c膸掳脗[盲聙v茂露gv@聬脌聯默路lJ赂sn|录u~聧a]聮脝脠t艑潞Jp聮聝镁拢KKf~聤娄Uby盲I職暮茫n聡脭驴^颅聻诺MT聳h臓脺陇ko录艓矛膮菧h`[t聦Rd虏牟_聹XPr刹聣l聭聜X聻iL搂脿聝聳鹿聨H聵掳圈q聬潞庐QC聴bA聠聞艑J赂聬臅脷鲁暮搂聽`d篓Yj聻iZvR暮卤枚VKkjG葕脛聬eP臑聻Zm募K脌聙聜[聤聨`枚s矛h聠茂脦o默dtK脼{卢猫脪脪B聦脭p牟脟默J艎聛娄卤J芦聢Y搂聥@路pH聙碌脿氓VKe聸pW聠ftsA聛脜qC路卢ko芦pH脝uK@o聼H聛膯脹聞姆h聧x聯e聭n聸S鲁脿菎rq贫Rbzy聙赂脣脨聬l聸录E潞p膜录聦x录陆~臑聮聛聰脿@聠脷眉dK^聢m聬脤Sj"
-        ],
-        "encodeOffsets": [[110234, 38774]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "620000",
-      "properties": {
-        "id": "620000",
-        "cp": [103.823557, 36.058039],
-        "name": "鐢樿們",
-        "childNum": 2
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@VuUv"],
-          [
-            "@@农聥E聧臓tt~nkh`Q聣娄脜脛脺dw聵Ab脳臓膮J聢陇D眉猫g暮qBq聹j掳lI隆抹脪陇煤SHb職聡聤j脦聭B聤掳aZ聢垄KJ聨聮O[聬|A拢聻Dx}N膫卢聲HUnrk聞聽kp聙录Y聽kMJn[aG聜谩脷脧[陆rc聠}aQxOgsPMnUs聡nc聫聥Z聟聻聳sK煤vA聸t聞脼摹聮拢庐膧YKdnFw職垄JE掳聰Latf`录h卢we|聙脝聡職bj}GA聙路~W聨聰聴`聠垄MC陇tL漏牟掳qdf聰O聜聯b脼默鹿ttu`^Z煤聺E`聦[@聞脝s卯z庐隆聮C聞瞥茰G虏聯R聭垄R聮m聰f聨w母g脺聝聜膮聽G@pzJM陆聬m聤hVy赂u脠脭O卤篓{Lf忙U露脽G膫q\\陋卢聡虏I聜楼I艍脠墨o谋聥脫脩A莽脩|芦L脻csp墨冒脥g聟t毛_玫聣聧聛\\膲帽LYn臐聺g聮聼R恰脕iHLl玫U墓虏uQjYi聺搂Z_c篓聼麓墓臇脵路聫艐I聟聝aBD聵颅R聫鹿去r聴炉聧G聲潞脽聞K篓聺j聛Wk聮杀聤Oq聸W某\\a颅聥Q\\sg_膯菦艒毛p禄拢l臒脹聙gS聲哦N庐聺脌]聢脫盲m聶墓茫Jaz楼V}聣Le陇L聞媒o聭鹿Is艐脜脟^聭聨bz聟鲁tmE脕麓a聤鹿c膷ec脟N聲膴茫脕\\膷炉聴dNj聲]j聠聴Z碌k脫da聲膰氓]臒某@聽漏O{陇聫母m垄聝E路聛庐聝芦|@Xwg]A模卤炉聡X莵脩浅陋c聸wQ脷艥帽s脮鲁脹V_聫媒聝聵楼\\暖楼漏戮梅w聴聨漏W脮脢末h每脰脕Ro赂V卢芒Db篓職h没x聳脢脳菍~Z芒聝g|職X脕n脽Yo潞搂Z脜艠v聦[聞沫脰蕛u膹xcVbnUSf聟B炉鲁_Tz潞聴脦聲O聛漏莽M脩~M聢鲁]碌^p眉碌聰聤脛Y~y@X~陇Z鲁聙[脠艒l@庐脜录拢QK聝路Di聥隆By聭每聣Q_麓D聛楼h艞y聝^聼沫脕Z]cIz媒聣ah鹿M莫臒P聭s{貌聡聥聭虏Vw鹿t鲁艤脣聛[聨脩}X\\gsF聼拢sPAg臎p脳毛fYH膩膹脰q膿怒O脧毛聯dL眉聲\\i聦聰t^c庐職R脢潞露聴垄H掳m聢聭rY聼拢B聼鹿膷Io木u露uI]v模SQ{聝U呕聰脜}Q脗|脤聥掳茀陇末弄U聽臋膭聻脤Z脪聻\\v聵虏P臄禄脾NH聝膫yAm苽wVm聻`聰]脠聫b聲聰H`聣脤垄虏ILv臏聴H庐陇Dlt_聞垄JJ脛盲m聬猫脭D毛镁g潞偏聬聶聰a蕩脤r锚Yi~聽脦陌陇Np脌A戮臄录b聟冒梅聮聨聢聡庐聜聰眉s聰zMz脰臇Qd权媒聠v搂T猫|聺陋H聮脙戮a赂|職脨聽茠wK蘑x娄ivr^每聽赂l聽枚忙f茻拇路PJv}n\\h鹿露v聠路脌|\\苼臍N麓臏聙莽猫脕z]聬摹陇虏篓Q脪浓TIl聡陋钮脴}录藯痞v脛霉脴E脗聥聮芦F茂脣聸Iq聰艒聦Tv膩脺艔聜铆脹脽聹脹V聴j鲁芒wG膬脗铆NO聤聢聤P矛yV鲁艍臇媒Zso搂H脩聳聧iY聬w[脽聠\\X娄楼c]脭譬脺路芦j聡脨qv脕娄m^膵卤R聶娄螊茍钮臍g脌禄I茂抹蕳飘聨掳茲聵幕镁脥A茐趴卤t脥E脮脼膩NU脥聴隆\\聛趴膷氓脪驶臉m聽骗脤殴枚圣聮毛Q陇碌颅脟c茣陋oI媒聢聣I脡聬_mkl鲁膬聣茡娄j聴隆Yz聲艊i聳}Ms脽玫聳墨蕥聽聴}聝脕Vm聼_[n}e谋聬颅U磨录聭陋聲I{脦搂D脫聹苹臈oj聭qYh墓T漏o奴亩拢]膹x末聥菓M臐聣q`B麓苾撕效聴莽~聶虏艈j@聰楼@膽麓委}磨tP艅脟戮V卢uf脫聝脡C聥t脫袒聣聟鹿拢G鲁聙]茤凭艓莫弄臉號篓蕡蘑苽l蓸郦眉潞艌U冒菧娶脾偶虒圈羌聜膜艎刹臇脗颅Kq麓茂娄聴潞膾遣艈删陋莯脼膱膫D聠陆膭膸脤艞臑r么帽n聨聹N录芒戮蕜木詥|莿聨枝啷浫椙壧樚浩吤猤V虓蕟臓路脤膴v|媒臇脮W膴菐脼麓玫录c脪脪B蘑廷U臏冒蛼s篓聛艌苾L膲脮脻@蓻漂梅驴慕颅聧墓e葟某毛C葰D挪y锚脳艝y貌炉募c脗脽Y聟t脕皮yA茫司J@菨r媒聥聣@聫陇聟rz赂oP鹿蓯脷y谩聬聡H聼膧[Jw聟cVe却脧聹禄脠聨臇}茠虐艕猫拳洽蠈膧篇脠哦毛途脩虇趣袦木漠E艛聧聴墓艎农~脣U膬{聼幕聺乒蓙蠉醛镁慕v慕茡脡@膿聞慕刹脽菒偏示菞膾p盲W脨xns脌^茊wW漏娄c脜隆聛Ji搂v聫煤F露聨篓c~c录墨聦eX聺菤聥\\膽戮J聨w脌膹ks茫A聧聥f脮娄聧L}wa聜o聰Z聮聥D陆聠Ml芦]e脪脜a脡虏谩o聺陆F玫脹]幕脪隆wYR拢垄rv脫庐y庐LF聥Lz膱聞么e]聛gx}聲|KK}xklL]c娄拢fRt铆v娄聠P膜oH{tK"
-          ]
-        ],
-        "encodeOffsets": [[[108619, 36299]], [[108589, 36341]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "630000",
-      "properties": { "id": "630000", "cp": [96.778916, 35.623178], "name": "闈掓捣", "childNum": 2 },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@InJm"],
-          [
-            "@@C聝脝陆O艃摩s伟~膾鲁娄@@聯艆i職卤猫}楔聵苿斯A鲁r_臑聤菕N莫聦膼w陇^努牡陋p暮SZg聮rpi萍臉脭聸篓C|脥聳J聮漏摩禄庐V牟聫~f\\m聽`Un聞脗聵~蕦聼聲默脿枚Nt聲~艌jy聳垄Zi聵茢楼膭聤k麓nl聫`J脢聡聤J镁漏pd茤庐脠拢露矛R师聭藕玫飘脣n聼始臈忙脩苺膸[聜聵垄V脦膫M脰脻脦F虏s茒苺脦B募媒茷聴聧炉蕵骗冒魔录Jh驴纽臋螌茋職楼虏Q]膶楼nu脗脧ri聢赂卢篇脹^脫娄d聙楼[W脿聟x\\Z聫聨j脪聲篓Gtp镁Y艎臅麓聙zUO毛聡聣P聣卯M膭脕xH麓谩聵i脺U脿聸卯脺艕聛膫脹Su艓聥r聯聹J冒脤卢E聦聭F脕煤脳u脙脦kr聯膾{V}陌芦O_脤脣默漏聨脫脓SR脩卤搂蘑拢^聫脗y猫莽臎M鲁苽臋{[赂驴u聟潞碌[gt拢赂O皮目茅Y聼玫路k膧聼q]juw楼D末茘聙玫脟P茅脛陆G聭聻漏茫聡陇G聟u颧镁Rc脮臅Ny聯y没t聛聯聢颅聧聡酶聭聠茂禄a陆膿驴BMo寞拢聼脥j}茅Z脣qb蕧職聯片聫h鹿矛每脫A聫莽茫nI脙隆I`聝ks拢CG颅臎聵Uy脳Cy聲聟聮聼@聛露省脢Bn膩zG聞啤M膿录卤O梅玫J聫聺脣臍膬V聼莫农茊拢聦炉{脣L陆脤z偶聯聞VR|臓TbuvJv碌h幕臇H聰聬A毛谩a聟颅O脟冒聺帽臋Nw聡聟艙木路L聸mI卤铆臓末P脡脳庐每s聴聮cB鲁卤JK脽膴芦`聟a膽禄路聫QAmO聮聭V牛茅每陇鹿SQt]]脟x聙卤炉A@膲某垄脫募漏聬聲聝l露脜聧脹r聴艜sp茫Rk~娄陋]漠颅麓聯FR聞氓d颅膶sCq膽茅Fn驴脜苾m聮脡x{W漏潞茲潞寞k脮苽茟赂wW奴脨漏脠F聻拢\\t脠楼脛R脠媒脤J聽聝lGr聬^脳盲霉聬y脼鲁fj聰c聠聙篓拢脗Z|菗M臐職脧@毛脺艖R聥聸臐聣聦梅隆{a茂确聛P聫u掳脣X脵{漏Tm臓}Y鲁聮颅脼I艌碌莽陆漏C隆寞梅炉B禄|St禄聸]v聝懦聝s禄聰}M脫聽每湿茻黔A隆fs聵禄聧聺PY聫录c隆禄娄c聞膵颅楼拢~聛ms膲P聲聳Si聝^o漏A聣聤ec聜聶聺Pe堑聨kg聜yUi驴h}aH聛聶職膲^|谩麓聼隆聛H聺脴没脜芦膲庐]m聺聙隆q膲露鲁脠y么艒L脕st聯聫聫B聼庐wn卤聺膬楼HS貌臈職拢聵S聮毛@脳艙聺脢膬x脟N漏聶漏T卤陋拢牟隆fb庐脼b聫聨聬b_膭楼xu聧楼B聴聻{艂臐鲁芦`d聵茞t聴陇钮i帽聻脥Uu潞铆`拢聵^t苾牟c聴路脹LO聥陆聤s莽楼Ts{膬\\_禄聶k脧聤卤q漏聬膷i聧矛膲|脥I聝楼膰楼聸聙]陋搂D{聛艥艝脡R_s每c鲁莫艒聸瓶脦聭聸搂p聸[膲聠聸c炉bKm聸R楼{鲁聞Z聠e^聨聦wx鹿d平脜陆么聧Ig聽搂M臅聽乒拇驴聴牵脺脥聝]聥脻聳聛]sn氓A{聥e聦骗`腔艎目\\某努疟聰Y脗每卢j臇q聨脽b聤赂聲L芦赂漏@臎膧漏锚露矛脌EH|麓bR木聻聳脫露r脌Q镁聥vl庐脮聜E聵Tz脺db聽聵hw陇{LR聞聝d聯c聥b炉聥脵Vg聹聜茰脽z脙么矛庐聧^j聬U聬猫X脦聳|U盲脤禄rK聨\\聦陋N聭录pZC眉聠VY聠聠陇蓛Ri^rP艊聮T脰}|br掳q艌b臍掳陋i贫GQ戮虏聞x娄P聹ml艤聭[聛膜隆螢s摩聼脭脧芒\\陋脷艗U\\f聟垄N虏搂x|陇搂聞x臄sZP貌蕸虏S脨qF`陋聞V聝脼艤亩屁VZ聦脤L`聢垄d艕Iqr\\聬o盲玫聳F脦路陇禄哦脳h鹿]Cl脵聙\\娄膹脤寞卢艡tT雍茩gQ脟脫H牛膾聰麓脙bE脛lb蕯C聰|C聢女聬聢聬k聞飘[始卢艌聹麓K女脠伟脤莫露贫l冒聰募A聠TUvdT聤G聠潞碳聤脭聙聦s脢D脭聞veOg"
-          ]
-        ],
-        "encodeOffsets": [[[105308, 37219]], [[95370, 40081]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "640000",
-      "properties": { "id": "640000", "cp": [106.278179, 37.26637], "name": "瀹佸", "childNum": 2 },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          [
-            "@@K毛脌臋臑芦O臋瓤葧聼谋]艍隆氓寞脮脭芦谴玫篇聶臍Q脨Zhv聽K掳聸枚q脌脩聬S[脙脰H茤膷聫脣聡nL]没c聟脵脽@聜聯臐聭戮}w禄禄聥o模F鹿聹禄聫k脤脧路{zP聝搂B颅垄铆y脜t@聝聺@谩職]Yv_ss模录i脽聛聰幕L戮摹sKD拢隆N_聟聯聵X聧赂}B~Hai聢聶脜f{芦x禄ge_bs聯KF炉隆Ix聶mELc每Z陇颅蘑聭聝脻聹suBL霉聲t聠聺聦Yd聬聢mVtNmtOPhRw~bd聟戮q脨\\芒脵H聛\\bImlNZ聼禄lo聝聼qlVm聳G膩搂~QCw陇聶{A\\聫聭PK聫聼NY聡炉bF聡kC楼聮sk聥聤s_脙\\膬芦垄魔kJi炉r聸rAh墓没莽拢CU聡臅膴_脭聴Bix脜脵聫膭n陋脩aM~魔p聛Ou楼s卯eQ楼陇^dkKwlL~{L~聳hw^聜贸f膰聝KyE聦颅K颅zu脭隆qQ陇xZ脩垄^募枚脺戮Ep聻卤芒b脢脩脝^fk卢聟NC戮聭聦聯Y聛pxbK~楼聨e脰聨聦盲Blt驴膼聧x陆I[膾菣聦W聻聥f禄默}d搂d碌聧霉Eu聬j篓聜I脝垄楼dX陋茀x驴]mt脧w脽R亩聦X垄蛶v脝z苽Z貌庐洽脤蕟Cr芒潞M脼z聻脝M脪聰脢脫艎Z脛戮聳r掳聺脦庐葓m陋虏膱U陋臍卯聛聢酶潞聢漠娄脤臉k聞^F艂默h臍i膧臇戮i陌bj脮"
-          ],
-          ["@@mfw臎wMr泞陋v@G聣"]
-        ],
-        "encodeOffsets": [[[109366, 40242]], [[108600, 36303]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "650000",
-      "properties": { "id": "650000", "cp": [85.617733, 40.792818], "name": "鏂扮枂", "childNum": 1 },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": [
-          "@@Q脴臄虏X篓聰~菢B潞j蕫脽脴vK聰茢X篓v膴O聻脙聝路垄i@聛~c聴聡臐e_芦聰E職聯}Qxg瑟毛脧脙@s脜yXo艝{么芦鸥uX聟锚聲脦f`聧聹C聜聛鹿脗每脨G漠脮臑X弄艒鸥M藕脠坪Q猫慕么e|驴聘JR陇臉EjcU贸潞炉抹_艠脕聫M陋梅脨楼O茅脠聡聧驴脰臒扦欠脗F脪聡z脡x[]颅膜臐聣艙娄EP}没匹茅驴陌品T臈偏艙艜茀聶票B禄膼卤聮膿O聟娄E聳聲}聭`c群r摩谩艝u脪聻陋芦牟聡蟺d坪脧脴Z拼w蕜陇臇G膼聶莻Z亩聝猫H露}脷Z爪圣莫茂|脟摩M艛禄陌臐菆聥矛楼螔聹ba颅炉楼菚菤k膯诺摩蓱暮漂x奴袛痰n啤蕛慕谩陆M禄聧聸貌mq贸艠臐膷脣戮膬C聟膰膩瓶脻山漏潜艆鹿膽楼聵鲁冒Lr脕庐杀臅模艍腔聛虌去啤呕菦取V茂鹿艊郓没k蓷摹苼搂蕠臈虝末农平艒^茣聤Uv拢苼Q茂聯频k艔陆螇脙怒脟鲁L艊聸驶芦骗\\l聝聡聫怒聫D聡聯{蕮DkaF脙脛a聯鲁扭膽脭GR脠茪hS庸艢s陌芦膼脣[楼脷Dk潞^脴g录诺赂拢E脥枚聲聙暖艍T隆c_聡脣KY聥僻U艣牡聞脻聝U_漏rET脧蕼卤O帽tYw膿篓聝{拢篓uM鲁x陆艧L漏脵谩[脫脨磨聽螡t模垄\\聜艣聮nkO聸w楼卤聝T禄品F莎脿末脼谩B鹿脝聧聟脩Uw聞艜聤聧聻慕w[聯mG陆脠氓~聡脝梅Qy聤臎CFm沫Z墨聴诺V脕聶瓶Q茮聴没XS虏聣b陆K脧陆膲S聸漏欧X臅聼{聨臅K路楼茥cqq漏f驴]聡聧脽D玫聧U鲁h聴颅聛g脣脟茂模脡蓩w聯k炉铆}I路職艙bm聹脡聳艡聸墨J丧幕藖脳x聛o聸晒墨聡l聲c聟陇鲁X霉]聭聶菂A驴w蛪矛楼w脟N路脗脣n聫凭茘d脟搂膽庐茲v聲Um漏鲁G\\聯}碌目聡Qy殴聫l膬聯聸碌Ew聣菄Q陆y茓Be露艐脌暖聡o聻楼A聴聵脡w@聲{Gpm驴A某聠沤KLh聧聢鲁`帽c脣tW聜卤禄脮S聣毛眉每膹D聡u\\www霉鲁聴V聸聧L艜聝OM聧脣Gh聛拢玫P隆聶er聧聶脧d{聯聡摹W脕聟膷|y拧g聺^臒y脕z脵s`聴s|脡氓陋脟}m垄艃篓`x楼聮霉^聲}聝脤楼H芦聣Y陋茀聰A脨鹿n~藕炉職f陇谩脌z聞g聤脟DI脭聺麓A艌膧脪聞露没EYosp玫D[{霉掳]u聸Jq聧聲U聲|So膵x牛[玫脭磨k艐脼怒Z脣潞贸Y脣眉膵rw聽聙脼kr钮脣驴XG聫脡b艡aD眉路膾梅A脙陋[脛盲聙I脗庐B脮膼聵脼_垄膩臓p聤脹脛葔臇摹DK聺wb聺m聡脛N么聡聤f聹偏V脡vi聠浅聴H聭聥Q碌芒F職霉颅脗艙鲁聧娄{YG聻聝d垄臍脺O聽聞聙{脰娄脼脥脌P聦^b聳凭聤l聨[聞vt脳膱脥E脣篓隆膼~麓卯赂霉脦h聙u猫`赂聼H脮艛V潞w臓芒芒W貌聡@{聹脵N脻麓蓹虏葧n{驴楼{l聴梅e茅^e聮膹聢Xj漏卯\\陋脩貌聵脺矛c\\眉q聢脮[聛膶隆xo脗膵陋b脴颅聦酶|聙露却Zd脝脗職o艅茅聦G職\\聰录聬C掳脤脝聛n麓nx職脢O抹聮弄聛拼母垄赂貌Tx脢仟M墨臑聵脰挪脙蓭Ov聢师脾~F聨聡R臎貌聴驴摹~氓艎聹煤聣N職聻職赂q聨聮臉[臄露脗膰n聬脪P膾脺v煤膧脢b脰{脛卯赂~艛眉np陇脗H戮聹膭Y脪漏脢f潞m脭聢臉cDo默M努聮聵S陇聞s虏聜聰蕵脷聠啪葌V纽聽聳聨猫W掳陋B|牟X艛镁脠J摩脝忙F臍锚聤Y膫陋膫]酶陋艝N脼眉A聙聮f扫J聙聵炉脦rDD職膜聙`聙mz\\聞搂~D卢{vJ聬脗聵芦l碌膫b聳陇p聙艑虐N膭篓膴XW|懦聽驴戮蓜摩茞MT聰聡貌P聵梅f脴亩K垄葷藬S么鹿貌E冒颅聰`茤陆菕脗艌脳盲谋聳搂膜茲搂C~隆聜hl氓聜呛纽艦k芒聮~}聨F酶脿牟a臑聜f聬茽楼聨聞艛d聻聵庐U赂聢藕X聹v垄a茊煤弄t艩懦茽jd聲坪聤坪脜矛nrh\\暮炉盲蓾摩]猫p膭娄麓L茷默聤麓皮乾思膾筛陇r潞羌虏篓z脤P冒艀b镁鹿募D垄鹿聹\\臏脩艢聼露Z苿鲁脿j抹o芒聤却L脢聣犬聦膼颅臍膬聨脌锚Z菤艕陇q葌\\L垄艑陌f脝s|z潞e陋脵忙搂微{膧麓茞脷卢篓拇脿虏艂h屎K脼潞脰T聤i脾戮陋矛掳`枚酶u庐脢戮茫脴"
-        ],
-        "encodeOffsets": [[88824, 50096]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "110000",
-      "properties": {
-        "id": "110000",
-        "cp": [116.405285, 39.904989],
-        "name": "鍖椾含",
-        "childNum": 1
-      },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": [
-          "@@慕O脕聸没t欧mi脥t_H禄抹卤d`聤鹿颅{bw聟Yr聯鲁S]搂搂o鹿聙qGtm_S脓聙聯oa聸聥FLg聭QN_聲dV聺聙@Zom_膰\\脽職c脗卤x炉o艙Rcfe聟拢聮o搂脣gTo脹J铆臄贸u聟|wP陇聶Xn聬O垄脡聢纽聬炉rN脛膩陇z芒艝脠Rp泞Z聤聹脷{G聤rFt娄脪x搂酶鹿R贸盲V陇聺Xd聢偶芒潞Wbw艢篓Ud庐b锚艈戮聭jn艓G艃哦聤nz聧脷Se卯臏Z聬cz卯戮i]脥聹聶Qa煤脥脭i镁末权W蘑聥眉|臇u[q聧b[swP@脜臒P驴{\\聡楼A篓脧聭脩篓聧j炉聤X\\炉聹MK聭pA鲁[H聟墨u}}"
-        ],
-        "encodeOffsets": [[120023, 41045]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "120000",
-      "properties": {
-        "id": "120000",
-        "cp": [117.190182, 39.125596],
-        "name": "澶╂触",
-        "childNum": 1
-      },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": [
-          "@@努gX搂脺芦E聟露F脤聡聯卢O_聶茂l脕g聯z卤AXe聶碌脛牡{聫露]gitg職Ij路聸楼卯akS聙聣篓脨茙k}臅{gB聴qGf{驴a聠U^fI聯瓢聥聬鲁玫{Y聝谋毛N目聻k漏茂脣Z艔聭R搂貌oY脳脫gc聟磨s隆b摹芦@dek膮I[nlPqCnp{聢艒鲁聺掳`聬{PNd茥qS脛幕NN芒yj]盲聻脪D聽默H掳脝]~隆HO戮聦X}脨x聦gp聯gW聢rDG聢聦p霉聜聤^L聜聫聢rzWx聢Z^篓麓T\\|~@I聣z聝聳b膜聥聹je膴陋z拢庐臄v臎聙L聠mV戮脭_脠聰NW~zb默vG聠虏ZmDM~聰~"
-        ],
-        "encodeOffsets": [[120237, 41215]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "310000",
-      "properties": {
-        "id": "310000",
-        "cp": [121.472644, 31.231706],
-        "name": "涓婃捣",
-        "childNum": 6
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@骚瓢卢Ep聛聘脕x聺c聡"],
-          ["@@漏聞陋聝"],
-          ["@@聰MA聥聭職"],
-          ["@@Qp陌聛E搂脡C聧戮"],
-          ["@@b艥脮聲脮E龋脷匹锚聫Im聛蓢铅猫脺臓聦脷聫聻脙茖脙蛶贸"],
-          ["@@菧没痊蓩聤怒聶脳^聣sY聫聦蓫D艐聭沤膮帽CG虏芦陋膷@h聳_p炉A{聡oloY聙卢j@牟聧`聲gQ脷聸hr|莯^M牟vtbe麓R炉脭卢篓Y聨么陇r]矛聠片寞"]
-        ],
-        "encodeOffsets": [[[124702, 32062]], [[124547, 32200]], [[124808, 31991]], [[124726, 32110]], [[124903, 32376]], [[124438, 32149]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "500000",
-      "properties": {
-        "id": "500000",
-        "cp": [107.304962, 29.533155],
-        "name": "閲嶅簡",
-        "childNum": 2
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          [
-            "@@vjG~nG艠努亩葌苺凭鹿聬聛赂脴脦ez膯T赂}锚脨聳qH聼冒q臇盲聮聤楼^C脝聮Ij聳虏p聟\\_聽忙眉Y|聺[Yx茒忙u聻掳xb庐聟聬虐b@~垄NQt掳露聜S忙聽聯脢~r菈臄毛臍垄~職uf`聭聜聠fa聜臄J氓膴聞n脰]聞j茙膰脢@聤拢戮a庐拢虐{哦臅F聥猫gLk{Y|隆臏W茢t片J脩xq聥卤蘑N麓聣貌K聣聶聳L脠脙录D|s`艐聮膰]聝脙聣`膽聦M没票陆~Y掳魔`茝铆W聣陆eI聥陆{a聼聭OIr脧隆臅艊a聠p聠碌脺茀摹聭聹^脰脹b脵沤艔ml陆S聥锚qDu[R聥茫脣禄聠每w`禄y聭赂_暮臋}梅`M炉膵fCV碌q艍梅Z聲gg聯聦`d陆pDO聡脦聛Cn聹^uf虏猫nh录Wt茝xRGg娄聟pV聞聠FI卤聨G^聦Ic麓ec聡聮G聲墓脼陆s毛默聞h聵xW聜}K脫聢e颅Xsbk聰F娄聸L聭脴gTk茂频N茂露}Gy聯w\\o帽隆nm膱zj聺聼聲@聶脫c拢禄W膬鹿脫j聯_m禄聢聧鹿路~Mv脹aq聹禄颅聣锚聹聮\\脗oVn聨脫脴脥聶虏芦聧聥bq驴e聛fE聽聞聙聥臏聬^Q聻~聽脡v媒聡艧陇虏漠聣pE陌}zc暮聝L聥陆聡職驴g脜聠聸隆媒E隆ya拢鲁t\\篓聫\\v煤禄录搂路脩r聫_o脪媒楼u聜聲_n禄_聝聲At漏聛脼脜卤膩搂IVe毛聝Y}{VP脌聛FA篓膮B}q@|Ou聴\\Fm聣QF脻聟Mw聵氓}]聲聙聺|Fm脧聥Ca聝w聦u_p聴炉sf脵gY聟DHl聛`{QEf聫NysB聤娄zG赂rHe聜聞N\\CvEs脨霉脺_路脰膲saQ炉聙}_U聡聠x脙膽聤q聸聛NH卢聲脛d^脻虐R卢茫掳we膰JE聻路v脻路Hg聝聜茅FXj脡锚`|y聦pxkAw聹W膼pb楼eOsmzwqCh贸UQl楼F^laf聥an貌sr聸EvfQd脕UVf聴脦v脺^ef聢tET卢么A\\聹垄sJ聨nQTjP脴聢x酶K|nBz聣聞聹臑禄LY聜聟FDx脫聞vr聯[eh木職聲vN聰垄o戮Ni脗xGp芒卢聬z聸bfZo~hGi聮]枚F|聣|Nb聡tOMn聽eA卤聤聺tPT聡LjpYQ|聠SH聠聠Y膧xinzDJ聙脤g垄v脿楼Pg聣_聳脟zII聥聙II聲聞拢庐S卢聞脴s脦录聬拢聦N"
-          ],
-          ["@@ifjN@s"]
-        ],
-        "encodeOffsets": [[[109628, 30765]], [[111725, 31320]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "810000",
-      "properties": {
-        "id": "810000",
-        "cp": [114.173355, 22.320048],
-        "name": "棣欐腐",
-        "childNum": 5
-      },
-      "geometry": {
-        "type": "MultiPolygon",
-        "coordinates": [
-          ["@@AlBk"],
-          ["@@m聨n聧"],
-          ["@@EpFo"],
-          ["@@ea垄pl聫赂E玫鹿聡hj[聝]脭C脦聳@聫lj聵隆uBX聼聟聛聲麓聥AI鹿聬聟[聥yDU聢]W`莽wZkmc聳聟M聸聻p聙脜v聸}I聥oJl聧ca聝f艃聭K聨掳盲卢XJm脨聽膽hI庐忙脭tSHn聙E聢聞脪r脠c"],
-          ["@@rMUw聡AS庐聙e"]
-        ],
-        "encodeOffsets": [[[117111, 23002]], [[117072, 22876]], [[117045, 22887]], [[116975, 23082]], [[116882, 22747]]]
-      }
-    },
-    {
-      "type": "Feature",
-      "id": "820000",
-      "properties": { "id": "820000", "cp": [113.54909, 22.198951], "name": "婢抽棬", "childNum": 1 },
-      "geometry": {
-        "type": "Polygon",
-        "coordinates": ["@@k脢d聬掳氓搂s"],
-        "encodeOffsets": [[116279, 22639]]
-      }
-    }
-  ],
-  "UTF8Encoding": true
-}
diff --git a/src/views/demo/charts/data.ts b/src/views/demo/charts/data.ts
deleted file mode 100644
index 547c089..0000000
--- a/src/views/demo/charts/data.ts
+++ /dev/null
@@ -1,189 +0,0 @@
-export const mapData: any = [
-  {
-    name: '鍖椾含',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '澶╂触',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '涓婃捣',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '閲嶅簡',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '娌冲寳',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '娌冲崡',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '浜戝崡',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '杈藉畞',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '榛戦緳姹�',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '婀栧崡',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '瀹夊窘',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '灞变笢',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '鏂扮枂',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '姹熻嫃',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '娴欐睙',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '姹熻タ',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '婀栧寳',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '骞胯タ',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '鐢樿們',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '灞辫タ',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '鍐呰挋鍙�',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '闄曡タ',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '鍚夋灄',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '绂忓缓',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '璐靛窞',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '骞夸笢',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '闈掓捣',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '瑗胯棌',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '鍥涘窛',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '瀹佸',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '娴峰崡',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '鍙版咕',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '棣欐腐',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-  {
-    name: '婢抽棬',
-    value: Math.round(Math.random() * 1000),
-    tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
-  },
-];
-
-export const getLineData = (() => {
-  const category: any[] = [];
-  let dottedBase = +new Date();
-  const lineData: any[] = [];
-  const barData: any[] = [];
-
-  for (let i = 0; i < 20; i++) {
-    const date = new Date((dottedBase += 1000 * 3600 * 24));
-    category.push([date.getFullYear(), date.getMonth() + 1, date.getDate()].join('-'));
-    const b = Math.random() * 200;
-    const d = Math.random() * 200;
-    barData.push(b);
-    lineData.push(d + b);
-  }
-  return { barData, category, lineData };
-})();
diff --git a/src/views/demo/charts/map/Baidu.vue b/src/views/demo/charts/map/Baidu.vue
deleted file mode 100644
index b126ae6..0000000
--- a/src/views/demo/charts/map/Baidu.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<template>
-  <div ref="wrapRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, nextTick, unref, onMounted } from 'vue';
-
-  import { useScript } from '/@/hooks/web/useScript';
-
-  const BAI_DU_MAP_URL = 'https://api.map.baidu.com/getscript?v=3.0&ak=OaBvYmKX3pjF7YFUFeeBCeGdy9Zp7xB2&services=&t=20210201100830&s=1';
-  export default defineComponent({
-    name: 'BaiduMap',
-    props: {
-      width: {
-        type: String,
-        default: '100%',
-      },
-      height: {
-        type: String,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup() {
-      const wrapRef = ref<HTMLDivElement | null>(null);
-      const { toPromise } = useScript({ src: BAI_DU_MAP_URL });
-
-      async function initMap() {
-        await toPromise();
-        await nextTick();
-        const wrapEl = unref(wrapRef);
-        if (!wrapEl) return;
-        const BMap = (window as any).BMap;
-        const map = new BMap.Map(wrapEl);
-        const point = new BMap.Point(116.404, 39.915);
-        map.centerAndZoom(point, 15);
-        map.enableScrollWheelZoom(true);
-      }
-
-      onMounted(() => {
-        initMap();
-      });
-
-      return { wrapRef };
-    },
-  });
-</script>
diff --git a/src/views/demo/charts/map/Gaode.vue b/src/views/demo/charts/map/Gaode.vue
deleted file mode 100644
index 52728b8..0000000
--- a/src/views/demo/charts/map/Gaode.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-<template>
-  <div ref="wrapRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, nextTick, unref, onMounted } from 'vue';
-
-  import { useScript } from '/@/hooks/web/useScript';
-
-  const A_MAP_URL = 'https://webapi.amap.com/maps?v=2.0&key=06313eb9c6563b674a8fd789db0692c3';
-
-  export default defineComponent({
-    name: 'AMap',
-    props: {
-      width: {
-        type: String,
-        default: '100%',
-      },
-      height: {
-        type: String,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup() {
-      const wrapRef = ref<HTMLDivElement | null>(null);
-      const { toPromise } = useScript({ src: A_MAP_URL });
-
-      async function initMap() {
-        await toPromise();
-        await nextTick();
-        const wrapEl = unref(wrapRef);
-        if (!wrapEl) return;
-        const AMap = (window as any).AMap;
-        new AMap.Map(wrapEl, {
-          zoom: 11,
-          center: [116.397428, 39.90923],
-          viewMode: '3D',
-        });
-      }
-
-      onMounted(() => {
-        initMap();
-      });
-
-      return { wrapRef };
-    },
-  });
-</script>
diff --git a/src/views/demo/charts/map/Google.vue b/src/views/demo/charts/map/Google.vue
deleted file mode 100644
index bc86d15..0000000
--- a/src/views/demo/charts/map/Google.vue
+++ /dev/null
@@ -1,52 +0,0 @@
-<template>
-  <div ref="wrapRef" :style="{ height, width }"></div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, nextTick, unref, onMounted } from 'vue';
-
-  import { useScript } from '/@/hooks/web/useScript';
-
-  const MAP_URL = 'https://maps.googleapis.com/maps/api/js?key=AIzaSyBQWrGwj4gAzKndcbwD5favT9K0wgty_0&signed_in=true';
-
-  export default defineComponent({
-    name: 'GoogleMap',
-    props: {
-      width: {
-        type: String,
-        default: '100%',
-      },
-      height: {
-        type: String,
-        default: 'calc(100vh - 78px)',
-      },
-    },
-    setup() {
-      const wrapRef = ref<HTMLDivElement | null>(null);
-      const { toPromise } = useScript({ src: MAP_URL });
-
-      async function initMap() {
-        await toPromise();
-        await nextTick();
-        const wrapEl = unref(wrapRef);
-        if (!wrapEl) return;
-        const google = (window as any).google;
-        const latLng = { lat: 116.404, lng: 39.915 };
-        const map = new google.maps.Map(wrapEl, {
-          zoom: 4,
-          center: latLng,
-        });
-        new google.maps.Marker({
-          position: latLng,
-          map: map,
-          title: 'Hello World!',
-        });
-      }
-
-      onMounted(() => {
-        initMap();
-      });
-
-      return { wrapRef };
-    },
-  });
-</script>
diff --git a/src/views/demo/codemirror/index.vue b/src/views/demo/codemirror/index.vue
deleted file mode 100644
index fe17d91..0000000
--- a/src/views/demo/codemirror/index.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-  <div>
-    <textarea ref="textarea">
-鐧芥棩渚濆北灏斤紝榛勬渤鍏ユ捣娴併��
-娆茬┓鍗冮噷鐩紝鏇翠笂涓�灞傛ゼ銆�
-        </textarea
-    >
-  </div>
-</template>
-
-<script lang="ts">
-  import { defineComponent, onMounted, ref, reactive } from 'vue';
-  // 寮曞叆鍏ㄥ眬瀹炰緥
-  import _CodeMirror from 'codemirror';
-
-  // 鏍稿績鏍峰紡
-  import 'codemirror/lib/codemirror.css';
-  // 寮曞叆涓婚鍚庤繕闇�瑕佸湪 options 涓寚瀹氫富棰樻墠浼氱敓鏁�
-  import 'codemirror/theme/cobalt.css';
-
-  // 闇�瑕佸紩鍏ュ叿浣撶殑璇硶楂樹寒搴撴墠浼氭湁瀵瑰簲鐨勮娉曢珮浜晥鏋�
-  // codemirror 瀹樻柟鍏跺疄鏀寔閫氳繃 /addon/mode/loadmode.js 鍜� /mode/meta.js 鏉ュ疄鐜板姩鎬佸姞杞藉搴旇娉曢珮浜簱
-  // 浣� vue 璨屼技娌℃湁鏃犳硶鍦ㄥ疄渚嬪垵濮嬪寲鍚庡啀鍔ㄦ�佸姞杞藉搴� JS 锛屾墍浠ユ澶勬墠鎶婂搴旂殑 JS 鎻愬墠寮曞叆
-  import 'codemirror/mode/javascript/javascript.js';
-  import 'codemirror/mode/css/css.js';
-  import 'codemirror/mode/xml/xml.js';
-  import 'codemirror/mode/clike/clike.js';
-  import 'codemirror/mode/markdown/markdown.js';
-  import 'codemirror/mode/python/python.js';
-  import 'codemirror/mode/r/r.js';
-  import 'codemirror/mode/shell/shell.js';
-  import 'codemirror/mode/sql/sql.js';
-  import 'codemirror/mode/swift/swift.js';
-  import 'codemirror/mode/vue/vue.js';
-  // 灏濊瘯鑾峰彇鍏ㄥ眬瀹炰緥
-
-  export default defineComponent({
-    components: {},
-    setup() {
-      const CodeMirror = window.CodeMirror || _CodeMirror;
-
-      const textarea = ref(null);
-      const options = reactive({
-        // 缂╄繘鏍煎紡
-        tabSize: 2,
-        // 涓婚锛屽搴斾富棰樺簱 JS 闇�瑕佹彁鍓嶅紩鍏�
-        theme: 'cobalt',
-        // 鏄剧ず琛屽彿
-        lineNumbers: true,
-        line: true,
-      });
-      onMounted(() => {
-        init();
-      });
-
-      function init() {
-        CodeMirror.fromTextArea(textarea.value, options);
-      }
-
-      return {
-        textarea,
-      };
-    },
-  });
-</script>
-
-<style lang="css" scoped></style>
diff --git a/src/views/demo/comp/button/index.vue b/src/views/demo/comp/button/index.vue
deleted file mode 100644
index dda3462..0000000
--- a/src/views/demo/comp/button/index.vue
+++ /dev/null
@@ -1,110 +0,0 @@
-<template>
-  <PageWrapper
-    contentFullHeight
-    title="鍩虹缁勪欢"
-    content=" 鍩虹缁勪欢渚濊禆浜巃nt-design-vue,缁勪欢搴撳凡鏈夌殑鍩虹缁勪欢,椤圭洰涓笉浼氬啀娆¤繘琛宒emo灞曠ず锛堜簩娆″皝瑁呯粍浠堕櫎澶栵級"
-  >
-    <a-row :gutter="[20, 20]">
-      <a-col :xl="10" :lg="24">
-        <a-card title="BasicButton Color">
-          <div class="my-2">
-            <h3>success</h3>
-            <div class="py-2">
-              <a-button color="success"> 鎴愬姛 </a-button>
-              <a-button color="success" class="ml-2" disabled> 绂佺敤 </a-button>
-              <a-button color="success" class="ml-2" loading> loading </a-button>
-              <a-button color="success" type="link" class="ml-2"> link </a-button>
-              <a-button color="success" type="link" class="ml-2" loading> loading link </a-button>
-              <a-button color="success" type="link" class="ml-2" disabled> disabled link </a-button>
-            </div>
-          </div>
-
-          <div class="my-2">
-            <h3>warning</h3>
-            <a-button color="warning"> 璀﹀憡 </a-button>
-            <a-button color="warning" class="ml-2" disabled> 绂佺敤 </a-button>
-            <a-button color="warning" class="ml-2" loading> loading </a-button>
-            <a-button color="warning" type="link" class="ml-2"> link </a-button>
-            <a-button color="warning" type="link" class="ml-2" loading> loading link </a-button>
-            <a-button color="warning" type="link" class="ml-2" disabled> disabled link </a-button>
-          </div>
-
-          <div class="my-2">
-            <h3>error</h3>
-            <a-button color="error"> 閿欒 </a-button>
-            <a-button color="error" class="ml-2" disabled> 绂佺敤 </a-button>
-            <a-button color="error" class="ml-2" loading> loading </a-button>
-            <a-button color="error" type="link" class="ml-2"> link </a-button>
-            <a-button color="error" type="link" class="ml-2" loading> loading link </a-button>
-            <a-button color="error" type="link" class="ml-2" disabled> disabled link </a-button>
-          </div>
-
-          <div class="my-2">
-            <h3>ghost</h3>
-            <a-button ghost color="success" class="ml-2"> 骞界伒鎴愬姛 </a-button>
-            <a-button ghost color="warning" class="ml-2"> 骞界伒璀﹀憡 </a-button>
-            <a-button ghost color="error" class="ml-2"> 骞界伒閿欒 </a-button>
-            <a-button ghost type="dashed" color="warning" class="ml-2"> 骞界伒璀﹀憡dashed </a-button>
-            <a-button ghost danger class="ml-2"> 骞界伒鍗遍櫓 </a-button>
-          </div>
-        </a-card>
-      </a-col>
-      <a-col :xl="14" :lg="24">
-        <a-card title="BasicButton Types">
-          <div class="my-2">
-            <h3>primary</h3>
-            <a-button type="primary" preIcon="mdi:page-next-outline"> 涓绘寜閽� </a-button>
-            <a-button type="primary" class="ml-2" disabled> 绂佺敤 </a-button>
-            <a-button type="primary" class="ml-2" danger preIcon="mdi:page-next-outline"> 鍗遍櫓 </a-button>
-            <a-button type="primary" class="ml-2" loading> loading </a-button>
-            <a-button type="link" class="ml-2"> link </a-button>
-            <a-button type="link" class="ml-2" loading> loading link </a-button>
-            <a-button type="link" class="ml-2" disabled> disabled link </a-button>
-          </div>
-
-          <div class="my-2">
-            <h3>default</h3>
-            <a-button type="default"> 榛樿 </a-button>
-            <a-button type="default" class="ml-2" disabled> 绂佺敤 </a-button>
-            <a-button type="default" class="ml-2" danger> 鍗遍櫓 </a-button>
-            <a-button type="default" class="ml-2" loading> loading </a-button>
-            <a-button type="link" class="ml-2"> link </a-button>
-            <a-button type="link" class="ml-2" loading> loading link </a-button>
-            <a-button type="link" class="ml-2" disabled> disabled link </a-button>
-          </div>
-
-          <div class="my-2">
-            <h3>dashed</h3>
-            <a-button type="dashed"> dashed </a-button>
-            <a-button type="dashed" class="ml-2" disabled> 绂佺敤 </a-button>
-            <a-button type="dashed" class="ml-2" danger> 鍗遍櫓 </a-button>
-            <a-button type="dashed" class="ml-2" loading> loading </a-button>
-          </div>
-
-          <div class="my-2">
-            <h3>ghost 甯歌骞界伒鎸夐挳閫氬父鐢ㄤ簬鏈夎壊鑳屾櫙涓�</h3>
-            <div class="bg-gray-400 py-2">
-              <a-button ghost type="primary" class="ml-2"> 骞界伒涓昏 </a-button>
-              <a-button ghost type="default" class="ml-2"> 骞界伒榛樿 </a-button>
-              <a-button ghost type="dashed" class="ml-2"> 骞界伒dashed </a-button>
-              <a-button ghost type="primary" class="ml-2" disabled> 绂佺敤 </a-button>
-              <a-button ghost type="primary" class="ml-2" loading> loading </a-button>
-            </div>
-            <!-- antd 鎸夐挳涓嶈兘鍚屾椂浣跨敤ghost鍜宭ink -->
-            <!--      <a-button ghost type="link" class="ml-2"> link </a-button>-->
-            <!--      <a-button ghost type="link" class="ml-2" loading> loading link </a-button>-->
-            <!--      <a-button ghost type="link" class="ml-2" disabled> disabled link </a-button>-->
-          </div>
-        </a-card>
-      </a-col>
-    </a-row>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { Card, Row, Col } from 'ant-design-vue';
-  export default defineComponent({
-    components: { PageWrapper, ACard: Card, ARow: Row, ACol: Col },
-  });
-</script>
diff --git a/src/views/demo/comp/card-list/index.vue b/src/views/demo/comp/card-list/index.vue
deleted file mode 100644
index f13af04..0000000
--- a/src/views/demo/comp/card-list/index.vue
+++ /dev/null
@@ -1,32 +0,0 @@
-<template>
-  <PageWrapper title="鍗$墖鍒楄〃绀轰緥" content="鍩虹灏佽">
-    <CardList :params="params" :api="demoListApi" @getMethod="getMethod" @delete="handleDel">
-      <template #header>
-        <Button type="primary" color="error"> 鎸夐挳1 </Button>
-        <Button type="primary" color="success"> 鎸夐挳2 </Button>
-      </template>
-    </CardList>
-  </PageWrapper>
-</template>
-<script lang="ts" setup>
-  import { CardList } from '/@/components/CardList';
-  import { Button } from '/@/components/Button';
-  import { PageWrapper } from '/@/components/Page';
-  import { demoListApi } from '/@/api/demo/table';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  const { notification } = useMessage();
-  // 璇锋眰api鏃堕檮甯﹀弬鏁�
-  const params = {};
-
-  let reload = () => {};
-  // 鑾峰彇鍐呴儴fetch鏂规硶;
-  function getMethod(m: any) {
-    reload = m;
-  }
-  //鍒犻櫎鎸夐挳浜嬩欢
-  function handleDel(id) {
-    console.log(id);
-    notification.success({ message: `鎴愬姛鍒犻櫎${id}` });
-    reload();
-  }
-</script>
diff --git a/src/views/demo/comp/count-to/index.vue b/src/views/demo/comp/count-to/index.vue
deleted file mode 100644
index 12b3ff3..0000000
--- a/src/views/demo/comp/count-to/index.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-<template>
-  <PageWrapper title="鏁板瓧鍔ㄧ敾绀轰緥">
-    <Card>
-      <CardGrid class="count-to-demo-card">
-        <CountTo prefix="$" :color="'#409EFF'" :startVal="1" :endVal="200000" :duration="8000" />
-      </CardGrid>
-      <CardGrid class="count-to-demo-card">
-        <CountTo suffix="$" :color="'red'" :startVal="1" :endVal="300000" :decimals="2" :duration="6000" />
-      </CardGrid>
-      <CardGrid class="count-to-demo-card">
-        <CountTo suffix="$" :color="'rgb(0,238,0)'" :startVal="1" :endVal="400000" :duration="7000" />
-      </CardGrid>
-      <CardGrid class="count-to-demo-card">
-        <CountTo separator="-" :color="'rgba(138,43,226,.6)'" :startVal="10000" :endVal="500000" :duration="8000" />
-      </CardGrid>
-    </Card>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Card } from 'ant-design-vue';
-  import { CountTo } from '/@/components/CountTo/index';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: {
-      Card,
-      CardGrid: Card.Grid,
-      CountTo,
-      PageWrapper,
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .count-to-demo {
-    &-card {
-      width: 50%;
-      font-size: 30px;
-      text-align: center;
-    }
-  }
-</style>
diff --git a/src/views/demo/comp/cropper/index.vue b/src/views/demo/comp/cropper/index.vue
deleted file mode 100644
index cac50fa..0000000
--- a/src/views/demo/comp/cropper/index.vue
+++ /dev/null
@@ -1,94 +0,0 @@
-<template>
-  <PageWrapper title="鍥剧墖瑁佸壀绀轰緥" content="闇�瑕佸紑鍚祴璇曟帴鍙f湇鍔℃墠鑳借繘琛屼笂浼犳祴璇曪紒">
-    <CollapseContainer title="澶村儚瑁佸壀">
-      <CropperAvatar :uploadApi="uploadApi" :value="avatar" />
-    </CollapseContainer>
-
-    <CollapseContainer title="鐭╁舰瑁佸壀" class="my-4">
-      <div class="container p-4">
-        <div class="cropper-container mr-10">
-          <CropperImage ref="refCropper" :src="img" @cropend="handleCropend" style="width: 40vw" />
-        </div>
-        <img :src="cropperImg" class="croppered" v-if="cropperImg" alt="" />
-      </div>
-      <p v-if="cropperImg">瑁佸壀鍚庡浘鐗囦俊鎭細{{ info }}</p>
-    </CollapseContainer>
-
-    <CollapseContainer title="鍦嗗舰瑁佸壀">
-      <div class="container p-4">
-        <div class="cropper-container mr-10">
-          <CropperImage ref="refCropper" :src="img" @cropend="handleCircleCropend" style="width: 40vw" circled />
-        </div>
-        <img :src="circleImg" class="croppered" v-if="circleImg" />
-      </div>
-      <p v-if="circleImg">瑁佸壀鍚庡浘鐗囦俊鎭細{{ circleInfo }}</p>
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { CollapseContainer } from '/@/components/Container';
-  import { CropperImage, CropperAvatar } from '/@/components/Cropper';
-  import { uploadApi } from '/@/api/sys/upload';
-  import img from '/@/assets/images/header.jpg';
-  import { useUserStore } from '/@/store/modules/user';
-
-  export default defineComponent({
-    components: {
-      PageWrapper,
-      CropperImage,
-      CollapseContainer,
-      CropperAvatar,
-    },
-    setup() {
-      const info = ref('');
-      const cropperImg = ref('');
-      const circleInfo = ref('');
-      const circleImg = ref('');
-      const userStore = useUserStore();
-      const avatar = ref(userStore.getUserInfo?.avatar || '');
-      function handleCropend({ imgBase64, imgInfo }) {
-        info.value = imgInfo;
-        cropperImg.value = imgBase64;
-      }
-
-      function handleCircleCropend({ imgBase64, imgInfo }) {
-        circleInfo.value = imgInfo;
-        circleImg.value = imgBase64;
-      }
-
-      return {
-        img,
-        info,
-        circleInfo,
-        cropperImg,
-        circleImg,
-        handleCropend,
-        handleCircleCropend,
-        avatar,
-        uploadApi: uploadApi as any,
-      };
-    },
-  });
-</script>
-
-<style scoped>
-  .container {
-    display: flex;
-    width: 100vw;
-    align-items: center;
-  }
-
-  .cropper-container {
-    width: 40vw;
-  }
-
-  .croppered {
-    height: 360px;
-  }
-
-  p {
-    margin: 10px;
-  }
-</style>
diff --git a/src/views/demo/comp/desc/index.vue b/src/views/demo/comp/desc/index.vue
deleted file mode 100644
index f00c3c2..0000000
--- a/src/views/demo/comp/desc/index.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<template>
-  <PageWrapper title="璇︽儏缁勪欢绀轰緥">
-    <Description title="鍩虹绀轰緥" :collapseOptions="{ canExpand: true, helpMessage: 'help me' }" :column="3" :data="mockData" :schema="schema" />
-
-    <Description
-      class="mt-4"
-      title="鍨傜洿绀轰緥"
-      layout="vertical"
-      :collapseOptions="{ canExpand: true, helpMessage: 'help me' }"
-      :column="2"
-      :data="mockData"
-      :schema="schema"
-    />
-
-    <Description @register="register" class="mt-4" />
-    <Description @register="register1" class="mt-4" />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Description, DescItem, useDescription } from '/@/components/Description/index';
-  import { PageWrapper } from '/@/components/Page';
-
-  const mockData: Recordable = {
-    username: 'test',
-    nickName: 'VB',
-    age: '123',
-    phone: '15695909xxx',
-    email: '190848757@qq.com',
-    addr: '鍘﹂棬甯傛�濇槑鍖�',
-    sex: '鐢�',
-    certy: '3504256199xxxxxxxxx',
-    tag: 'orange',
-  };
-  const schema: DescItem[] = [
-    {
-      field: 'username',
-      label: '鐢ㄦ埛鍚�',
-    },
-    {
-      field: 'nickName',
-      label: '鏄电О',
-      render: (curVal, data) => {
-        return `${data.username}-${curVal}`;
-      },
-    },
-    {
-      field: 'phone',
-      label: '鑱旂郴鐢佃瘽',
-    },
-    {
-      field: 'email',
-      label: '閭',
-    },
-    {
-      field: 'addr',
-      label: '鍦板潃',
-    },
-  ];
-  export default defineComponent({
-    components: { Description, PageWrapper },
-    setup() {
-      const [register] = useDescription({
-        title: 'useDescription',
-        data: mockData,
-        schema: schema,
-      });
-
-      const [register1] = useDescription({
-        title: '鏃犺竟妗�',
-        bordered: false,
-        data: mockData,
-        schema: schema,
-      });
-
-      return { mockData, schema, register, register1 };
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/drawer/Drawer1.vue b/src/views/demo/comp/drawer/Drawer1.vue
deleted file mode 100644
index 7f29613..0000000
--- a/src/views/demo/comp/drawer/Drawer1.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" title="Drawer Title" width="50%"> Drawer Info. </BasicDrawer>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicDrawer } from '/@/components/Drawer';
-  export default defineComponent({
-    components: { BasicDrawer },
-    setup() {
-      return {};
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/drawer/Drawer2.vue b/src/views/demo/comp/drawer/Drawer2.vue
deleted file mode 100644
index 020b298..0000000
--- a/src/views/demo/comp/drawer/Drawer2.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="register" title="Drawer Title" width="50%">
-    Drawer Info.
-    <a-button type="primary" @click="closeDrawer"> 鍐呴儴鍏抽棴drawer </a-button>
-  </BasicDrawer>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-  export default defineComponent({
-    components: { BasicDrawer },
-    setup() {
-      const [register, { closeDrawer }] = useDrawerInner();
-      return { register, closeDrawer };
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/drawer/Drawer3.vue b/src/views/demo/comp/drawer/Drawer3.vue
deleted file mode 100644
index b8944f4..0000000
--- a/src/views/demo/comp/drawer/Drawer3.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" title="Modal Title" width="50%" showFooter @ok="handleOk">
-    <p class="h-20" v-for="index in 40" :key="index"> 鏍规嵁灞忓箷楂樺害鑷�傚簲 </p>
-    <template #insertFooter>
-      <a-button> btn</a-button>
-    </template>
-    <template #centerFooter>
-      <a-button> btn2</a-button>
-    </template>
-
-    <template #appendFooter>
-      <a-button> btn3</a-button>
-    </template>
-
-    <!-- <template #footer>
-      <a-button> customerFooter</a-button>
-    </template> -->
-  </BasicDrawer>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicDrawer } from '/@/components/Drawer';
-  export default defineComponent({
-    components: { BasicDrawer },
-    setup() {
-      return {
-        handleOk: () => {
-          console.log('=====================');
-          console.log('ok');
-          console.log('======================');
-        },
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/drawer/Drawer4.vue b/src/views/demo/comp/drawer/Drawer4.vue
deleted file mode 100644
index 454156e..0000000
--- a/src/views/demo/comp/drawer/Drawer4.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="register" title="Drawer Title" width="50%">
-    <div>
-      <BasicForm @register="registerForm" />
-    </div>
-  </BasicDrawer>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-
-  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
-  const schemas: FormSchema[] = [
-    {
-      field: 'field1',
-      component: 'Input',
-      label: '瀛楁1',
-      colProps: {
-        span: 12,
-      },
-      defaultValue: '111',
-    },
-    {
-      field: 'field2',
-      component: 'Input',
-      label: '瀛楁2',
-      colProps: {
-        span: 12,
-      },
-    },
-  ];
-  export default defineComponent({
-    components: { BasicDrawer, BasicForm },
-    setup() {
-      const [registerForm, { setFieldsValue }] = useForm({
-        labelWidth: 120,
-        schemas,
-        showActionButtonGroup: false,
-        actionColOptions: {
-          span: 24,
-        },
-      });
-      const [register] = useDrawerInner((data) => {
-        // 鏂瑰紡1
-        setFieldsValue({
-          field2: data.data,
-          field1: data.info,
-        });
-      });
-      return { register, schemas, registerForm };
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/drawer/Drawer5.vue b/src/views/demo/comp/drawer/Drawer5.vue
deleted file mode 100644
index 5f0f6fe..0000000
--- a/src/views/demo/comp/drawer/Drawer5.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" :isDetail="true" title="Drawer Title5">
-    <p class="h-20"> Content Message </p>
-    <template #titleToolbar> toolbar </template>
-  </BasicDrawer>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicDrawer } from '/@/components/Drawer';
-  export default defineComponent({
-    components: { BasicDrawer },
-  });
-</script>
diff --git a/src/views/demo/comp/drawer/index.vue b/src/views/demo/comp/drawer/index.vue
deleted file mode 100644
index 44f1e26..0000000
--- a/src/views/demo/comp/drawer/index.vue
+++ /dev/null
@@ -1,69 +0,0 @@
-<template>
-  <PageWrapper title="鎶藉眽缁勪欢浣跨敤绀轰緥">
-    <Alert message="浣跨敤 useDrawer 杩涜鎶藉眽鎿嶄綔" show-icon />
-    <a-button type="primary" class="my-4" @click="openDrawerLoading"> 鎵撳紑Drawer </a-button>
-
-    <Alert message="鍐呭鍚屾椂鎺у埗鏄剧ず闅愯棌" show-icon />
-    <a-button type="primary" class="my-4" @click="openDrawer2(true)"> 鎵撳紑Drawer </a-button>
-    <Alert message="鑷�傚簲楂樺害/鏄剧ずfooter" show-icon />
-    <a-button type="primary" class="my-4" @click="openDrawer3(true)"> 鎵撳紑Drawer </a-button>
-
-    <Alert message="鍐呭鏁版嵁浜や簰" show-icon />
-    <a-button type="primary" class="my-4" @click="send"> 鎵撳紑Drawer骞朵紶閫掓暟鎹� </a-button>
-    <Alert message="璇︽儏椤垫ā寮�" show-icon />
-    <a-button type="primary" class="my-4" @click="openDrawer5(true)"> 鎵撳紑璇︽儏Drawer </a-button>
-    <Drawer1 @register="register1" />
-    <Drawer2 @register="register2" />
-    <Drawer3 @register="register3" />
-    <Drawer4 @register="register4" />
-    <Drawer5 @register="register5" />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Alert } from 'ant-design-vue';
-  import { useDrawer } from '/@/components/Drawer';
-  import Drawer1 from './Drawer1.vue';
-  import Drawer2 from './Drawer2.vue';
-  import Drawer3 from './Drawer3.vue';
-  import Drawer4 from './Drawer4.vue';
-  import Drawer5 from './Drawer5.vue';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { Alert, PageWrapper, Drawer1, Drawer2, Drawer3, Drawer4, Drawer5 },
-    setup() {
-      const [register1, { openDrawer: openDrawer1, setDrawerProps }] = useDrawer();
-      const [register2, { openDrawer: openDrawer2 }] = useDrawer();
-      const [register3, { openDrawer: openDrawer3 }] = useDrawer();
-      const [register4, { openDrawer: openDrawer4 }] = useDrawer();
-      const [register5, { openDrawer: openDrawer5 }] = useDrawer();
-      function send() {
-        openDrawer4(true, {
-          data: 'content',
-          info: 'Info',
-        });
-      }
-      function openDrawerLoading() {
-        openDrawer1();
-        setDrawerProps({ loading: true });
-        setTimeout(() => {
-          setDrawerProps({ loading: false });
-        }, 2000);
-      }
-      return {
-        register1,
-        openDrawer1,
-        register2,
-        openDrawer2,
-        register3,
-        openDrawer3,
-        register4,
-        register5,
-        openDrawer5,
-        send,
-        openDrawerLoading,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/lazy/TargetContent.vue b/src/views/demo/comp/lazy/TargetContent.vue
deleted file mode 100644
index e098254..0000000
--- a/src/views/demo/comp/lazy/TargetContent.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-<template>
-  <Card hoverable :style="{ width: '240px', background: '#fff' }">
-    <template #cover>
-      <img alt="example" src="https://os.alipayobjects.com/rmsportal/QBnOOoLaAfKPirc.png" />
-    </template>
-    <CardMeta title="鎳掑姞杞界粍浠�" />
-  </Card>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Card } from 'ant-design-vue';
-
-  export default defineComponent({
-    components: { CardMeta: Card.Meta, Card },
-    setup() {
-      return {};
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/lazy/Transition.vue b/src/views/demo/comp/lazy/Transition.vue
deleted file mode 100644
index 420dd98..0000000
--- a/src/views/demo/comp/lazy/Transition.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-<template>
-  <PageWrapper title="鎳掑姞杞借嚜瀹氫箟鍔ㄧ敾绀轰緥" content="鎳掑姞杞界粍浠舵樉绀哄姩鐢�">
-    <div class="lazy-base-demo-wrap">
-      <h1>鍚戜笅婊氬姩</h1>
-
-      <div class="lazy-base-demo-box">
-        <LazyContainer transitionName="custom">
-          <TargetContent />
-        </LazyContainer>
-      </div>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import TargetContent from './TargetContent.vue';
-  import { LazyContainer } from '/@/components/Container/index';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { LazyContainer, TargetContent, PageWrapper },
-  });
-</script>
-<style lang="less">
-  .lazy-base-demo {
-    &-wrap {
-      display: flex;
-      width: 50%;
-      height: 2000px;
-      margin: 20px auto;
-      text-align: center;
-      background-color: @component-background;
-      justify-content: center;
-      flex-direction: column;
-      align-items: center;
-    }
-
-    &-box {
-      width: 300px;
-      height: 300px;
-    }
-
-    h1 {
-      height: 1300px;
-      margin: 20px 0;
-    }
-  }
-
-  .custom-enter {
-    opacity: 0;
-    transform: scale(0.4) translate(100%);
-  }
-
-  .custom-enter-to {
-    opacity: 1;
-  }
-
-  .custom-enter-active {
-    position: absolute;
-    top: 0;
-    width: 100%;
-    transition: all 0.5s;
-  }
-
-  .custom-leave {
-    opacity: 1;
-  }
-
-  .custom-leave-to {
-    opacity: 0;
-    transform: scale(0.4) translate(-100%);
-  }
-
-  .custom-leave-active {
-    transition: all 0.5s;
-  }
-</style>
diff --git a/src/views/demo/comp/lazy/index.vue b/src/views/demo/comp/lazy/index.vue
deleted file mode 100644
index 426cc3a..0000000
--- a/src/views/demo/comp/lazy/index.vue
+++ /dev/null
@@ -1,52 +0,0 @@
-<template>
-  <PageWrapper title="鎳掑姞杞藉熀纭�绀轰緥" content="鍚戜笅婊氬姩鍒板彲瑙佸尯鍩熸墠浼氬姞杞界粍浠�">
-    <div class="lazy-base-demo-wrap">
-      <h1>鍚戜笅婊氬姩</h1>
-
-      <div class="lazy-base-demo-box">
-        <LazyContainer>
-          <TargetContent />
-          <template #skeleton>
-            <Skeleton :rows="10" />
-          </template>
-        </LazyContainer>
-      </div>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Skeleton } from 'ant-design-vue';
-  import TargetContent from './TargetContent.vue';
-  import { LazyContainer } from '/@/components/Container/index';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { LazyContainer, PageWrapper, TargetContent, Skeleton },
-  });
-</script>
-<style lang="less">
-  .lazy-base-demo {
-    &-wrap {
-      display: flex;
-      width: 50%;
-      height: 2000px;
-      margin: 20px auto;
-      text-align: center;
-      background-color: @component-background;
-      justify-content: center;
-      flex-direction: column;
-      align-items: center;
-    }
-
-    &-box {
-      width: 300px;
-      height: 300px;
-    }
-
-    h1 {
-      height: 1300px;
-      margin: 20px 0;
-    }
-  }
-</style>
diff --git a/src/views/demo/comp/loading/index.vue b/src/views/demo/comp/loading/index.vue
deleted file mode 100644
index f7ac1e8..0000000
--- a/src/views/demo/comp/loading/index.vue
+++ /dev/null
@@ -1,101 +0,0 @@
-<template>
-  <PageWrapper v-loading="loadingRef" loading-tip="鍔犺浇涓�..." title="Loading缁勪欢绀轰緥">
-    <div ref="wrapEl">
-      <a-alert message="缁勪欢鏂瑰紡" />
-      <a-button class="my-4 mr-4" type="primary" @click="openCompFullLoading"> 鍏ㄥ睆 Loading </a-button>
-      <a-button class="my-4" type="primary" @click="openCompAbsolute"> 瀹瑰櫒鍐� Loading </a-button>
-      <Loading :loading="loading" :absolute="absolute" :theme="theme" :background="background" :tip="tip" />
-
-      <a-alert message="鍑芥暟鏂瑰紡" />
-
-      <a-button class="my-4 mr-4" type="primary" @click="openFnFullLoading"> 鍏ㄥ睆 Loading </a-button>
-      <a-button class="my-4" type="primary" @click="openFnWrapLoading"> 瀹瑰櫒鍐� Loading </a-button>
-
-      <a-alert message="鎸囦护鏂瑰紡" />
-      <a-button class="my-4 mr-4" type="primary" @click="openDirectiveLoading"> 鎵撳紑鎸囦护Loading </a-button>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, reactive, toRefs, ref } from 'vue';
-  import { Loading, useLoading } from '/@/components/Loading';
-  import { PageWrapper } from '/@/components/Page';
-  import { Alert } from 'ant-design-vue';
-
-  export default defineComponent({
-    components: { Loading, PageWrapper, [Alert.name]: Alert },
-    setup() {
-      const wrapEl = ref<ElRef>(null);
-
-      const loadingRef = ref(false);
-      const compState = reactive({
-        absolute: false,
-        loading: false,
-        theme: 'dark',
-        background: 'rgba(111,111,111,.7)',
-        tip: '鍔犺浇涓�...',
-      });
-      const [openFullLoading, closeFullLoading] = useLoading({
-        tip: '鍔犺浇涓�...',
-      });
-
-      const [openWrapLoading, closeWrapLoading] = useLoading({
-        target: wrapEl,
-        props: {
-          tip: '鍔犺浇涓�...',
-          absolute: true,
-        },
-      });
-
-      function openLoading(absolute: boolean) {
-        compState.absolute = absolute;
-        compState.loading = true;
-        setTimeout(() => {
-          compState.loading = false;
-        }, 2000);
-      }
-
-      function openCompFullLoading() {
-        openLoading(false);
-      }
-
-      function openCompAbsolute() {
-        openLoading(true);
-      }
-
-      function openFnFullLoading() {
-        openFullLoading();
-
-        setTimeout(() => {
-          closeFullLoading();
-        }, 2000);
-      }
-
-      function openFnWrapLoading() {
-        openWrapLoading();
-
-        setTimeout(() => {
-          closeWrapLoading();
-        }, 2000);
-      }
-
-      function openDirectiveLoading() {
-        loadingRef.value = true;
-        setTimeout(() => {
-          loadingRef.value = false;
-        }, 2000);
-      }
-
-      return {
-        openCompFullLoading,
-        openFnFullLoading,
-        openFnWrapLoading,
-        openCompAbsolute,
-        wrapEl,
-        loadingRef,
-        openDirectiveLoading,
-        ...toRefs(compState),
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/modal/Modal1.vue b/src/views/demo/comp/modal/Modal1.vue
deleted file mode 100644
index f9dfdca..0000000
--- a/src/views/demo/comp/modal/Modal1.vue
+++ /dev/null
@@ -1,58 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" destroyOnClose @register="register" title="Modal Title" :helpMessage="['鎻愮ず1', '鎻愮ず2']" @visible-change="handleShow">
-    <template #insertFooter>
-      <a-button type="primary" danger @click="setLines" :disabled="loading">鐐规垜鏇存柊鍐呭</a-button>
-    </template>
-    <template v-if="loading">
-      <div class="empty-tips"> 鍔犺浇涓紝绋嶇瓑3绉掆�︹�� </div>
-    </template>
-    <template v-if="!loading">
-      <ul>
-        <li v-for="index in lines" :key="index">鍔犺浇瀹屾垚{{ index }}锛�</li>
-      </ul>
-    </template>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, watch } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  export default defineComponent({
-    components: { BasicModal },
-    setup() {
-      const loading = ref(true);
-      const lines = ref(10);
-      const [register, { setModalProps, redoModalHeight }] = useModalInner();
-
-      watch(
-        () => lines.value,
-        () => {
-          redoModalHeight();
-        }
-      );
-
-      function handleShow(visible: boolean) {
-        if (visible) {
-          loading.value = true;
-          setModalProps({ loading: true, confirmLoading: true });
-          setTimeout(() => {
-            lines.value = Math.round(Math.random() * 30 + 5);
-            loading.value = false;
-            setModalProps({ loading: false, confirmLoading: false });
-          }, 3000);
-        }
-      }
-
-      function setLines() {
-        lines.value = Math.round(Math.random() * 20 + 10);
-      }
-      return { register, loading, handleShow, lines, setLines };
-    },
-  });
-</script>
-<style scoped>
-  .empty-tips {
-    height: 100px;
-    line-height: 100px;
-    text-align: center;
-  }
-</style>
diff --git a/src/views/demo/comp/modal/Modal2.vue b/src/views/demo/comp/modal/Modal2.vue
deleted file mode 100644
index da9581d..0000000
--- a/src/views/demo/comp/modal/Modal2.vue
+++ /dev/null
@@ -1,23 +0,0 @@
-<template>
-  <BasicModal @register="register" title="Modal Title" :helpMessage="['鎻愮ず1', '鎻愮ず2']" :okButtonProps="{ disabled: true }">
-    <a-button type="primary" @click="closeModal" class="mr-2"> 浠庡唴閮ㄥ叧闂脊绐� </a-button>
-    <a-button type="primary" @click="setModalProps"> 浠庡唴閮ㄤ慨鏀箃itle </a-button>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  export default defineComponent({
-    components: { BasicModal },
-    setup() {
-      const [register, { closeModal, setModalProps }] = useModalInner();
-      return {
-        register,
-        closeModal,
-        setModalProps: () => {
-          setModalProps({ title: 'Modal New Title' });
-        },
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/modal/Modal3.vue b/src/views/demo/comp/modal/Modal3.vue
deleted file mode 100644
index 2ddd583..0000000
--- a/src/views/demo/comp/modal/Modal3.vue
+++ /dev/null
@@ -1,15 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" title="Modal Title" :helpMessage="['鎻愮ず1', '鎻愮ず2']" width="700px">
-    <p class="h-20" v-for="index in 20" :key="index"> 鏍规嵁灞忓箷楂樺害鑷�傚簲 </p>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicModal } from '/@/components/Modal';
-  export default defineComponent({
-    components: { BasicModal },
-    setup() {
-      return {};
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/modal/Modal4.vue b/src/views/demo/comp/modal/Modal4.vue
deleted file mode 100644
index 90894ea..0000000
--- a/src/views/demo/comp/modal/Modal4.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="register" title="Modal Title" @visible-change="handleVisibleChange">
-    <div class="pt-3px pr-3px">
-      <BasicForm @register="registerForm" :model="model" />
-    </div>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, nextTick } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
-
-  const schemas: FormSchema[] = [
-    {
-      field: 'field1',
-      component: 'Input',
-      label: '瀛楁1',
-      colProps: {
-        span: 24,
-      },
-      defaultValue: '111',
-    },
-    {
-      field: 'field2',
-      component: 'Input',
-      label: '瀛楁2',
-      colProps: {
-        span: 24,
-      },
-    },
-  ];
-  export default defineComponent({
-    components: { BasicModal, BasicForm },
-    props: {
-      userData: { type: Object },
-    },
-    setup(props) {
-      const modelRef = ref({});
-      const [
-        registerForm,
-        {
-          // setFieldsValue,
-          // setProps
-        },
-      ] = useForm({
-        labelWidth: 120,
-        schemas,
-        showActionButtonGroup: false,
-        actionColOptions: {
-          span: 24,
-        },
-      });
-
-      const [register] = useModalInner((data) => {
-        data && onDataReceive(data);
-      });
-
-      function onDataReceive(data) {
-        console.log('Data Received', data);
-        // 鏂瑰紡1;
-        // setFieldsValue({
-        //   field2: data.data,
-        //   field1: data.info,
-        // });
-
-        // // 鏂瑰紡2
-        modelRef.value = { field2: data.data, field1: data.info };
-
-        // setProps({
-        //   model:{ field2: data.data, field1: data.info }
-        // })
-      }
-
-      function handleVisibleChange(v) {
-        v && props.userData && nextTick(() => onDataReceive(props.userData));
-      }
-
-      return { register, schemas, registerForm, model: modelRef, handleVisibleChange };
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/modal/index.vue b/src/views/demo/comp/modal/index.vue
deleted file mode 100644
index 21137d9..0000000
--- a/src/views/demo/comp/modal/index.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-<template>
-  <PageWrapper title="modal缁勪欢浣跨敤绀轰緥">
-    <Alert
-      message="浣跨敤 useModal 杩涜寮圭獥鎿嶄綔锛岄粯璁ゅ彲浠ユ嫋鍔紝鍙互閫氳繃 draggable
-    鍙傛暟杩涜鎺у埗鏄惁鍙互鎷栧姩/鍏ㄥ睆锛屽苟婕旂ず浜嗗湪Modal鍐呭姩鎬佸姞杞藉唴瀹瑰苟鑷姩璋冩暣楂樺害"
-      show-icon
-    />
-    <a-button type="primary" class="my-4" @click="openModalLoading"> 鎵撳紑寮圭獥,鍔犺浇鍔ㄦ�佹暟鎹苟鑷姩璋冩暣楂樺害(榛樿鍙互鎷栧姩/鍏ㄥ睆) </a-button>
-
-    <Alert message="鍐呭鍚屾椂鍚屾椂鏄剧ず闅愯棌" show-icon />
-    <a-button type="primary" class="my-4" @click="openModal2"> 鎵撳紑寮圭獥</a-button>
-    <Alert message="鑷�傚簲楂樺害" show-icon />
-    <a-button type="primary" class="my-4" @click="openModal3"> 鎵撳紑寮圭獥</a-button>
-
-    <Alert message="鍐呭鏁版嵁浜や簰" show-icon />
-    <a-button type="primary" class="my-4" @click="send"> 鎵撳紑寮圭獥骞朵紶閫掓暟鎹�</a-button>
-
-    <Alert message="浣跨敤鍔ㄦ�佺粍浠剁殑鏂瑰紡鍦ㄩ〉闈㈠唴浣跨敤澶氫釜寮圭獥" show-icon />
-    <a-space>
-      <a-button type="primary" class="my-4" @click="openTargetModal(1)"> 鎵撳紑寮圭獥1</a-button>
-      <a-button type="primary" class="my-4" @click="openTargetModal(2)"> 鎵撳紑寮圭獥2</a-button>
-      <a-button type="primary" class="my-4" @click="openTargetModal(3)"> 鎵撳紑寮圭獥3</a-button>
-      <a-button type="primary" class="my-4" @click="openTargetModal(4)"> 鎵撳紑寮圭獥4</a-button>
-    </a-space>
-
-    <component :is="currentModal" v-model:visible="modalVisible" :userData="userData" />
-
-    <Modal1 @register="register1" :minHeight="100" />
-    <Modal2 @register="register2" />
-    <Modal3 @register="register3" />
-    <Modal4 @register="register4" />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, shallowRef, ComponentOptions, ref, nextTick } from 'vue';
-  import { Alert, Space } from 'ant-design-vue';
-  import { useModal } from '/@/components/Modal';
-  import Modal1 from './Modal1.vue';
-  import Modal2 from './Modal2.vue';
-  import Modal3 from './Modal3.vue';
-  import Modal4 from './Modal4.vue';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { Alert, Modal1, Modal2, Modal3, Modal4, PageWrapper, ASpace: Space },
-    setup() {
-      const currentModal = shallowRef<Nullable<ComponentOptions>>(null);
-      const [register1, { openModal: openModal1 }] = useModal();
-      const [register2, { openModal: openModal2 }] = useModal();
-      const [register3, { openModal: openModal3 }] = useModal();
-      const [register4, { openModal: openModal4 }] = useModal();
-      const modalVisible = ref<Boolean>(false);
-      const userData = ref<any>(null);
-
-      function send() {
-        openModal4(true, {
-          data: 'content',
-          info: 'Info',
-        });
-      }
-
-      function openModalLoading() {
-        openModal1(true);
-        // setModalProps({ loading: true });
-        // setTimeout(() => {
-        //   setModalProps({ loading: false });
-        // }, 2000);
-      }
-
-      function openTargetModal(index) {
-        switch (index) {
-          case 1:
-            currentModal.value = Modal1;
-            break;
-          case 2:
-            currentModal.value = Modal2;
-            break;
-          case 3:
-            currentModal.value = Modal3;
-            break;
-          default:
-            currentModal.value = Modal4;
-            break;
-        }
-        nextTick(() => {
-          // `useModal` not working with dynamic component
-          // passing data through `userData` prop
-          userData.value = { data: Math.random(), info: 'Info222' };
-          // open the target modal
-          modalVisible.value = true;
-        });
-      }
-
-      return {
-        register1,
-        openModal1,
-        register2,
-        openModal2,
-        register3,
-        openModal3,
-        register4,
-        openModal4,
-        modalVisible,
-        userData,
-        openTargetModal,
-        send,
-        currentModal,
-        openModalLoading,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/qrcode/index.vue b/src/views/demo/comp/qrcode/index.vue
deleted file mode 100644
index a96fc18..0000000
--- a/src/views/demo/comp/qrcode/index.vue
+++ /dev/null
@@ -1,117 +0,0 @@
-<template>
-  <PageWrapper title="浜岀淮鐮佺粍浠朵娇鐢ㄧず渚�">
-    <div class="flex flex-wrap">
-      <CollapseContainer title="鍩虹绀轰緥" :canExpan="true" class="text-center mb-6 qrcode-demo-item">
-        <QrCode :value="qrCodeUrl" />
-      </CollapseContainer>
-
-      <CollapseContainer title="娓叉煋鎴恑mg鏍囩绀轰緥" class="text-center mb-6 qrcode-demo-item">
-        <QrCode :value="qrCodeUrl" tag="img" />
-      </CollapseContainer>
-
-      <CollapseContainer title="閰嶇疆鏍峰紡绀轰緥" class="text-center mb-6 qrcode-demo-item">
-        <QrCode
-          :value="qrCodeUrl"
-          :options="{
-            color: { dark: '#55D187' },
-          }"
-        />
-      </CollapseContainer>
-
-      <CollapseContainer title="鏈湴logo绀轰緥" class="text-center mb-6 qrcode-demo-item">
-        <QrCode :value="qrCodeUrl" :logo="LogoImg" />
-      </CollapseContainer>
-
-      <CollapseContainer title="鍦ㄧ嚎logo绀轰緥" class="text-center mb-6 qrcode-demo-item">
-        <QrCode
-          :value="qrCodeUrl"
-          logo="http://jeecg.com/images/logo.png"
-          :options="{
-            color: { dark: '#55D187' },
-          }"
-        />
-      </CollapseContainer>
-
-      <CollapseContainer title="logo閰嶇疆绀轰緥" class="text-center mb-6 qrcode-demo-item">
-        <QrCode
-          :value="qrCodeUrl"
-          :logo="{
-            src: 'http://jeecg.com/images/logo.png',
-            logoSize: 0.2,
-            borderSize: 0.05,
-            borderRadius: 50,
-            bgColor: 'blue',
-          }"
-        />
-      </CollapseContainer>
-
-      <CollapseContainer title="涓嬭浇绀轰緥" class="text-center qrcode-demo-item">
-        <QrCode :value="qrCodeUrl" ref="qrRef" :logo="LogoImg" />
-        <a-button class="mb-2" type="primary" @click="download"> 涓嬭浇 </a-button>
-        <div class="msg"> (鍦ㄧ嚎logo浼氬鑷村浘鐗囪法鍩燂紝闇�瑕佷笅杞藉浘鐗囬渶瑕佽嚜琛岃В鍐宠法鍩熼棶棰�) </div>
-      </CollapseContainer>
-
-      <CollapseContainer title="閰嶇疆澶у皬绀轰緥" class="text-center qrcode-demo-item">
-        <QrCode :value="qrCodeUrl" :width="300" />
-      </CollapseContainer>
-
-      <CollapseContainer title="鎵╁睍缁樺埗绀轰緥" class="text-center qrcode-demo-item">
-        <QrCode :value="qrCodeUrl" :width="200" :options="{ margin: 5 }" ref="qrDiyRef" :logo="LogoImg" @done="onQrcodeDone" />
-        <a-button class="mb-2" type="primary" @click="downloadDiy"> 涓嬭浇 </a-button>
-        <div class="msg"> 瑕佽繘琛屾墿灞曠粯鍒跺垯涓嶈兘灏唗ag璁句负img </div>
-      </CollapseContainer>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, unref } from 'vue';
-  import { QrCode, QrCodeActionType } from '/@/components/Qrcode/index';
-  import LogoImg from '/@/assets/images/lanpu.png';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { PageWrapper } from '/@/components/Page';
-
-  const qrCodeUrl = 'https://www.vvbin.cn';
-  export default defineComponent({
-    components: { CollapseContainer, QrCode, PageWrapper },
-    setup() {
-      const qrRef = ref<Nullable<QrCodeActionType>>(null);
-      const qrDiyRef = ref<Nullable<QrCodeActionType>>(null);
-      function download() {
-        const qrEl = unref(qrRef);
-        if (!qrEl) return;
-        qrEl.download('鏂囦欢鍚�');
-      }
-      function downloadDiy() {
-        const qrEl = unref(qrDiyRef);
-        if (!qrEl) return;
-        qrEl.download('Qrcode');
-      }
-
-      function onQrcodeDone({ ctx }: any) {
-        if (ctx instanceof CanvasRenderingContext2D) {
-          // 棰濆缁樺埗
-          ctx.fillStyle = 'black';
-          ctx.font = '16px "寰蒋闆呴粦"';
-          ctx.textBaseline = 'bottom';
-          ctx.textAlign = 'center';
-          ctx.fillText('浣犲竻浣犲厛鎵�', 100, 195, 200);
-        }
-      }
-      return {
-        onQrcodeDone,
-        qrCodeUrl,
-        LogoImg,
-        download,
-        downloadDiy,
-        qrRef,
-        qrDiyRef,
-      };
-    },
-  });
-</script>
-<style scoped>
-  .qrcode-demo-item {
-    width: 30%;
-    margin-right: 1%;
-  }
-</style>
diff --git a/src/views/demo/comp/scroll/Action.vue b/src/views/demo/comp/scroll/Action.vue
deleted file mode 100644
index 78148a1..0000000
--- a/src/views/demo/comp/scroll/Action.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <PageWrapper title="婊氬姩缁勪欢鍑芥暟绀轰緥" content="鍩轰簬el-scrollbar">
-    <div class="my-4">
-      <a-button @click="scrollTo(100)" class="mr-2"> 婊氬姩鍒�100px浣嶇疆 </a-button>
-      <a-button @click="scrollTo(800)" class="mr-2"> 婊氬姩鍒�800px浣嶇疆 </a-button>
-      <a-button @click="scrollTo(0)" class="mr-2"> 婊氬姩鍒伴《閮� </a-button>
-      <a-button @click="scrollBottom()" class="mr-2"> 婊氬姩鍒板簳閮� </a-button>
-    </div>
-    <div class="scroll-wrap">
-      <ScrollContainer class="mt-4" ref="scrollRef">
-        <ul class="p-3">
-          <template v-for="index in 100" :key="index">
-            <li class="p-2" :style="{ border: '1px solid #eee' }">
-              {{ index }}
-            </li>
-          </template>
-        </ul>
-      </ScrollContainer>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, unref } from 'vue';
-  import { ScrollContainer, ScrollActionType } from '/@/components/Container/index';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { ScrollContainer, PageWrapper },
-    setup() {
-      const scrollRef = ref<Nullable<ScrollActionType>>(null);
-      const getScroll = () => {
-        const scroll = unref(scrollRef);
-        if (!scroll) {
-          throw new Error('scroll is Null');
-        }
-        return scroll;
-      };
-
-      function scrollTo(top: number) {
-        getScroll().scrollTo(top);
-      }
-      function scrollBottom() {
-        getScroll().scrollBottom();
-      }
-      return {
-        scrollTo,
-        scrollRef,
-        scrollBottom,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .scroll-wrap {
-    width: 50%;
-    height: 300px;
-    background-color: @component-background;
-  }
-</style>
diff --git a/src/views/demo/comp/scroll/VirtualScroll.vue b/src/views/demo/comp/scroll/VirtualScroll.vue
deleted file mode 100644
index f7ebc3b..0000000
--- a/src/views/demo/comp/scroll/VirtualScroll.vue
+++ /dev/null
@@ -1,64 +0,0 @@
-<template>
-  <PageWrapper class="virtual-scroll-demo">
-    <Divider>鍩虹婊氬姩绀轰緥</Divider>
-    <div class="virtual-scroll-demo-wrap">
-      <VScroll :itemHeight="41" :items="data" :height="300" :width="300">
-        <template #default="{ item }">
-          <div class="virtual-scroll-demo__item">
-            {{ item.title }}
-          </div>
-        </template>
-      </VScroll>
-    </div>
-
-    <Divider>鍗充娇涓嶅彲瑙侊紝涔熼鍏堝姞杞�50鏉℃暟鎹紝闃叉绌虹櫧</Divider>
-    <div class="virtual-scroll-demo-wrap">
-      <VScroll :itemHeight="41" :items="data" :height="300" :width="300" :bench="50">
-        <template #default="{ item }">
-          <div class="virtual-scroll-demo__item">
-            {{ item.title }}
-          </div>
-        </template>
-      </VScroll>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { VScroll } from '/@/components/VirtualScroll/index';
-
-  import { Divider } from 'ant-design-vue';
-  import { PageWrapper } from '/@/components/Page';
-  const data: Recordable[] = (() => {
-    const arr: Recordable[] = [];
-    for (let index = 1; index < 20000; index++) {
-      arr.push({
-        title: '鍒楄〃椤�' + index,
-      });
-    }
-    return arr;
-  })();
-  export default defineComponent({
-    components: { VScroll: VScroll, Divider, PageWrapper },
-    setup() {
-      return { data: data };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .virtual-scroll-demo {
-    &-wrap {
-      display: flex;
-      margin: 0 30%;
-      background-color: @component-background;
-      justify-content: center;
-    }
-
-    &__item {
-      height: 40px;
-      padding: 0 20px;
-      line-height: 40px;
-      border-bottom: 1px solid @border-color-base;
-    }
-  }
-</style>
diff --git a/src/views/demo/comp/scroll/index.vue b/src/views/demo/comp/scroll/index.vue
deleted file mode 100644
index b9bb651..0000000
--- a/src/views/demo/comp/scroll/index.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-<template>
-  <PageWrapper title="婊氬姩缁勪欢绀轰緥" content="鍩轰簬el-scrollbar">
-    <div class="scroll-wrap">
-      <ScrollContainer class="mt-4">
-        <ul class="p-3">
-          <template v-for="index in 100" :key="index">
-            <li class="p-2" :style="{ border: '1px solid #eee' }">
-              {{ index }}
-            </li>
-          </template>
-        </ul>
-      </ScrollContainer>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { ScrollContainer } from '/@/components/Container/index';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { ScrollContainer, PageWrapper },
-  });
-</script>
-<style lang="less" scoped>
-  .scroll-wrap {
-    width: 50%;
-    height: 300px;
-    background-color: @component-background;
-  }
-</style>
diff --git a/src/views/demo/comp/strength-meter/index.vue b/src/views/demo/comp/strength-meter/index.vue
deleted file mode 100644
index a5c6293..0000000
--- a/src/views/demo/comp/strength-meter/index.vue
+++ /dev/null
@@ -1,32 +0,0 @@
-<template>
-  <PageWrapper title="瀵嗙爜寮哄害鏍¢獙缁勪欢">
-    <div class="flex justify-center">
-      <div class="demo-wrap p-10">
-        <StrengthMeter placeholder="榛樿" />
-        <StrengthMeter placeholder="绂佺敤" disabled />
-        <br />
-        <StrengthMeter placeholder="闅愯棌input" :show-input="false" value="!@#qwe12345" />
-      </div>
-    </div>
-  </PageWrapper>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { StrengthMeter } from '/@/components/StrengthMeter';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: {
-      StrengthMeter,
-      PageWrapper,
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .demo-wrap {
-    width: 50%;
-    background-color: @component-background;
-    border-radius: 10px;
-  }
-</style>
diff --git a/src/views/demo/comp/time/index.vue b/src/views/demo/comp/time/index.vue
deleted file mode 100644
index 49f6c57..0000000
--- a/src/views/demo/comp/time/index.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-<template>
-  <PageWrapper title="鏃堕棿缁勪欢绀轰緥">
-    <CollapseContainer title="鍩虹绀轰緥">
-      <Time :value="time1" />
-      <br />
-      <Time :value="time2" />
-    </CollapseContainer>
-
-    <CollapseContainer title="瀹氭椂鏇存柊" class="my-4">
-      <Time :value="now" :step="1" />
-      <br />
-      <Time :value="now" :step="5" />
-    </CollapseContainer>
-
-    <CollapseContainer title="瀹氭椂鏇存柊">
-      <Time :value="now" mode="date" />
-      <br />
-      <Time :value="now" mode="datetime" />
-      <br />
-      <Time :value="now" />
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, reactive, toRefs } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { Time } from '/@/components/Time';
-  import { CollapseContainer } from '/@/components/Container/index';
-
-  export default defineComponent({
-    components: { PageWrapper, Time, CollapseContainer },
-    setup() {
-      const now = new Date().getTime();
-      const state = reactive({
-        time1: now - 60 * 3 * 1000,
-        time2: now - 86400 * 3 * 1000,
-      });
-      return {
-        ...toRefs(state),
-        now,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/transition/index.vue b/src/views/demo/comp/transition/index.vue
deleted file mode 100644
index 177a4bc..0000000
--- a/src/views/demo/comp/transition/index.vue
+++ /dev/null
@@ -1,91 +0,0 @@
-<template>
-  <PageWrapper title="鍔ㄧ敾缁勪欢绀轰緥">
-    <div class="flex">
-      <Select :options="options" v-model:value="value" placeholder="閫夋嫨鍔ㄧ敾" :style="{ width: '150px' }" />
-      <a-button type="primary" class="ml-4" @click="start"> start </a-button>
-    </div>
-    <component :is="`${value}Transition`">
-      <div class="box" v-show="show"></div>
-    </component>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { Select } from 'ant-design-vue';
-  import { PageWrapper } from '/@/components/Page';
-  import {
-    FadeTransition,
-    ScaleTransition,
-    SlideYTransition,
-    ScrollYTransition,
-    SlideYReverseTransition,
-    ScrollYReverseTransition,
-    SlideXTransition,
-    ScrollXTransition,
-    SlideXReverseTransition,
-    ScrollXReverseTransition,
-    ScaleRotateTransition,
-    ExpandXTransition,
-    ExpandTransition,
-  } from '/@/components/Transition';
-
-  const transitionList = [
-    'Fade',
-    'Scale',
-    'SlideY',
-    'ScrollY',
-    'SlideYReverse',
-    'ScrollYReverse',
-    'SlideX',
-    'ScrollX',
-    'SlideXReverse',
-    'ScrollXReverse',
-    'ScaleRotate',
-    'ExpandX',
-    'Expand',
-  ];
-  const options = transitionList.map((item) => ({
-    label: item,
-    value: item,
-    key: item,
-  }));
-
-  export default defineComponent({
-    components: {
-      Select,
-      PageWrapper,
-      FadeTransition,
-      ScaleTransition,
-      SlideYTransition,
-      ScrollYTransition,
-      SlideYReverseTransition,
-      ScrollYReverseTransition,
-      SlideXTransition,
-      ScrollXTransition,
-      SlideXReverseTransition,
-      ScrollXReverseTransition,
-      ScaleRotateTransition,
-      ExpandXTransition,
-      ExpandTransition,
-    },
-    setup() {
-      const value = ref('Fade');
-      const show = ref(true);
-      function start() {
-        show.value = false;
-        setTimeout(() => {
-          show.value = true;
-        }, 300);
-      }
-      return { options, value, start, show };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .box {
-    width: 150px;
-    height: 150px;
-    margin-top: 20px;
-    background-color: rgb(126, 170, 236);
-  }
-</style>
diff --git a/src/views/demo/comp/upload/index.vue b/src/views/demo/comp/upload/index.vue
deleted file mode 100644
index c9091e6..0000000
--- a/src/views/demo/comp/upload/index.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-<template>
-  <PageWrapper title="涓婁紶缁勪欢绀轰緥">
-    <a-alert message="鍩虹绀轰緥" />
-    <BasicUpload :maxSize="20" :maxNumber="10" @change="handleChange" :api="uploadApi" class="my-5" :accept="['image/*']" />
-
-    <a-alert message="宓屽叆琛ㄥ崟,鍔犲叆琛ㄥ崟鏍¢獙" />
-
-    <BasicForm @register="register" class="my-5" />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicUpload } from '/@/components/Upload';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
-  import { PageWrapper } from '/@/components/Page';
-  import { Alert } from 'ant-design-vue';
-  import { uploadApi } from '/@/api/sys/upload';
-
-  const schemas: FormSchema[] = [
-    {
-      field: 'field1',
-      component: 'Upload',
-      label: '瀛楁1',
-      colProps: {
-        span: 8,
-      },
-      rules: [{ required: true, message: '璇烽�夋嫨涓婁紶鏂囦欢' }],
-      componentProps: {
-        api: uploadApi,
-      },
-    },
-  ];
-  export default defineComponent({
-    components: { BasicUpload, BasicForm, PageWrapper, [Alert.name]: Alert },
-    setup() {
-      const { createMessage } = useMessage();
-      const [register] = useForm({
-        labelWidth: 120,
-        schemas,
-        actionColOptions: {
-          span: 16,
-        },
-      });
-      return {
-        handleChange: (list: string[]) => {
-          createMessage.info(`宸蹭笂浼犳枃浠�${JSON.stringify(list)}`);
-        },
-        uploadApi,
-        register,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/comp/verify/Rotate.vue b/src/views/demo/comp/verify/Rotate.vue
deleted file mode 100644
index 1ef552d..0000000
--- a/src/views/demo/comp/verify/Rotate.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-<template>
-  <PageWrapper title="鏃嬭浆鏍¢獙绀轰緥">
-    <div class="flex justify-center p-4 items-center bg-gray-700">
-      <RotateDragVerify :src="img" ref="el" @success="handleSuccess" />
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { RotateDragVerify } from '/@/components/Verify/index';
-
-  import img from '/@/assets/images/header.jpg';
-
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { RotateDragVerify, PageWrapper },
-    setup() {
-      const handleSuccess = () => {
-        console.log('success!');
-      };
-      return {
-        handleSuccess,
-        img,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .bg-gray-700 {
-    background-color: #4a5568;
-  }
-</style>
diff --git a/src/views/demo/comp/verify/index.vue b/src/views/demo/comp/verify/index.vue
deleted file mode 100644
index aa93473..0000000
--- a/src/views/demo/comp/verify/index.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-<template>
-  <PageWrapper title="鎷栧姩鏍¢獙绀轰緥">
-    <div class="flex justify-center p-4 items-center bg-gray-700">
-      <BasicDragVerify ref="el1" @success="handleSuccess" />
-      <a-button type="primary" class="ml-2" @click="handleBtnClick(el1)"> 杩樺師 </a-button>
-    </div>
-
-    <div class="flex justify-center p-4 items-center bg-gray-700">
-      <BasicDragVerify ref="el2" @success="handleSuccess" circle />
-      <a-button type="primary" class="ml-2" @click="handleBtnClick(el2)"> 杩樺師 </a-button>
-    </div>
-
-    <div class="flex justify-center p-4 items-center bg-gray-700">
-      <BasicDragVerify
-        ref="el3"
-        @success="handleSuccess"
-        text="鎷栧姩浠ヨ繘琛屾牎楠�"
-        successText="鏍¢獙鎴愬姛"
-        :barStyle="{
-          backgroundColor: '#018ffb',
-        }"
-      />
-      <a-button type="primary" class="ml-2" @click="handleBtnClick(el3)"> 杩樺師 </a-button>
-    </div>
-
-    <div class="flex justify-center p-4 items-center bg-gray-700">
-      <BasicDragVerify ref="el4" @success="handleSuccess">
-        <template #actionIcon="isPassing">
-          <BugOutlined v-if="isPassing" />
-          <RightOutlined v-else />
-        </template>
-      </BasicDragVerify>
-      <a-button type="primary" class="ml-2" @click="handleBtnClick(el4)"> 杩樺師 </a-button>
-    </div>
-
-    <div class="flex justify-center p-4 items-center bg-gray-700">
-      <BasicDragVerify ref="el5" @success="handleSuccess">
-        <template #text="isPassing">
-          <div v-if="isPassing">
-            <BugOutlined />
-            鎴愬姛
-          </div>
-          <div v-else>
-            鎷栧姩
-            <RightOutlined />
-          </div>
-        </template>
-      </BasicDragVerify>
-      <a-button type="primary" class="ml-2" @click="handleBtnClick(el5)"> 杩樺師 </a-button>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { BasicDragVerify, DragVerifyActionType, PassingData } from '/@/components/Verify/index';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { BugOutlined, RightOutlined } from '@ant-design/icons-vue';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { BasicDragVerify, BugOutlined, RightOutlined, PageWrapper },
-    setup() {
-      const { createMessage } = useMessage();
-      const el1 = ref<Nullable<DragVerifyActionType>>(null);
-      const el2 = ref<Nullable<DragVerifyActionType>>(null);
-      const el3 = ref<Nullable<DragVerifyActionType>>(null);
-      const el4 = ref<Nullable<DragVerifyActionType>>(null);
-      const el5 = ref<Nullable<DragVerifyActionType>>(null);
-
-      function handleSuccess(data: PassingData) {
-        const { time } = data;
-        createMessage.success(`鏍¢獙鎴愬姛,鑰楁椂${time}绉抈);
-      }
-
-      function handleBtnClick(elRef: Nullable<DragVerifyActionType>) {
-        if (!elRef) {
-          return;
-        }
-        elRef.resume();
-      }
-      return {
-        handleSuccess,
-        el1,
-        el2,
-        el3,
-        el4,
-        el5,
-        handleBtnClick,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .bg-gray-700 {
-    background-color: #4a5568;
-  }
-</style>
diff --git a/src/views/demo/editor/json/index.vue b/src/views/demo/editor/json/index.vue
deleted file mode 100644
index 622da81..0000000
--- a/src/views/demo/editor/json/index.vue
+++ /dev/null
@@ -1,91 +0,0 @@
-<template>
-  <PageWrapper title="浠g爜缂栬緫鍣ㄧ粍浠剁ず渚�" contentFullHeight fixedHeight contentBackground>
-    <template #extra>
-      <a-space size="middle">
-        <a-button @click="showData" type="primary">鑾峰彇鏁版嵁</a-button>
-        <RadioGroup button-style="solid" v-model:value="modeValue" @change="handleModeChange">
-          <RadioButton value="application/json"> json鏁版嵁 </RadioButton>
-          <RadioButton value="htmlmixed"> html浠g爜 </RadioButton>
-          <RadioButton value="javascript"> javascript浠g爜 </RadioButton>
-        </RadioGroup>
-      </a-space>
-    </template>
-    <CodeEditor v-model:value="value" :mode="modeValue" />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { CodeEditor } from '/@/components/CodeEditor';
-  import { PageWrapper } from '/@/components/Page';
-  import { Radio, Space, Modal } from 'ant-design-vue';
-
-  const jsonData =
-    '{"name":"BeJson","url":"http://www.xxx.com","page":88,"isNonProfit":true,"address":{"street":"绉戞妧鍥矾.","city":"姹熻嫃鑻忓窞","country":"涓浗"},"links":[{"name":"Google","url":"http://www.xxx.com"},{"name":"Baidu","url":"http://www.xxx.com"},{"name":"SoSo","url":"http://www.xxx.com"}]}';
-
-  const jsData = `
-      (() => {
-        var htmlRoot = document.getElementById('htmlRoot');
-        var theme = window.localStorage.getItem('__APP__DARK__MODE__');
-        if (htmlRoot && theme) {
-          htmlRoot.setAttribute('data-theme', theme);
-          theme = htmlRoot = null;
-        }
-      })();
-  `;
-
-  const htmlData = `
-     <!DOCTYPE html>
-<html lang="en" id="htmlRoot">
-  <head>
-    <meta charset="UTF-8" />
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
-    <meta name="renderer" content="webkit" />
-    <meta
-      name="viewport"
-      content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"
-    />
-    <title><%= title %></title>
-    <link rel="icon" href="/favicon.ico" />
-  </head>
-  <body>
-    <div id="app">
-    </div>
-  </body>
-</html>
-  `;
-  export default defineComponent({
-    components: {
-      CodeEditor,
-      PageWrapper,
-      RadioButton: Radio.Button,
-      RadioGroup: Radio.Group,
-      ASpace: Space,
-    },
-    setup() {
-      const modeValue = ref('application/json');
-      const value = ref(jsonData);
-
-      function handleModeChange(e: ChangeEvent) {
-        const mode = e.target.value;
-        if (mode === 'application/json') {
-          value.value = jsonData;
-          return;
-        }
-        if (mode === 'htmlmixed') {
-          value.value = htmlData;
-          return;
-        }
-        if (mode === 'javascript') {
-          value.value = jsData;
-          return;
-        }
-      }
-
-      function showData() {
-        Modal.info({ title: '缂栬緫鍣ㄥ綋鍓嶅��', content: value.value });
-      }
-
-      return { value, modeValue, handleModeChange, showData };
-    },
-  });
-</script>
diff --git a/src/views/demo/editor/markdown/Editor.vue b/src/views/demo/editor/markdown/Editor.vue
deleted file mode 100644
index 6c731bd..0000000
--- a/src/views/demo/editor/markdown/Editor.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <PageWrapper title="MarkDown缁勪欢宓屽叆Form绀轰緥">
-    <CollapseContainer title="MarkDown琛ㄥ崟">
-      <BasicForm :labelWidth="100" :schemas="schemas" :actionColOptions="{ span: 24 }" @submit="handleSubmit" />
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, h } from 'vue';
-  import { BasicForm, FormSchema } from '/@/components/Form/index';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { MarkDown } from '/@/components/Markdown';
-  import { PageWrapper } from '/@/components/Page';
-
-  const schemas: FormSchema[] = [
-    {
-      field: 'title',
-      component: 'Input',
-      label: 'title',
-      defaultValue: '鏍囬',
-      rules: [{ required: true }],
-    },
-    {
-      field: 'markdown',
-      component: 'Input',
-      label: 'markdown',
-      defaultValue: 'defaultValue',
-      rules: [{ required: true, trigger: 'blur' }],
-      render: ({ model, field }) => {
-        return h(MarkDown, {
-          value: model[field],
-          onChange: (value: string) => {
-            model[field] = value;
-          },
-        });
-      },
-    },
-  ];
-  export default defineComponent({
-    components: { BasicForm, CollapseContainer, PageWrapper },
-    setup() {
-      const { createMessage } = useMessage();
-
-      return {
-        schemas,
-        handleSubmit: (values: any) => {
-          createMessage.success('click search,values:' + JSON.stringify(values));
-        },
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/editor/markdown/index.vue b/src/views/demo/editor/markdown/index.vue
deleted file mode 100644
index 7d94947..0000000
--- a/src/views/demo/editor/markdown/index.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-<template>
-  <PageWrapper title="MarkDown缁勪欢绀轰緥">
-    <div>
-      <a-button @click="toggleTheme" class="mb-2" type="primary"> 榛戞殫涓婚 </a-button>
-      <a-button @click="clearValue" class="mb-2" type="default"> 娓呯┖鍐呭 </a-button>
-      <MarkDown v-model:value="value" @change="handleChange" ref="markDownRef" placeholder="杩欐槸鍗犱綅鏂囨湰" />
-    </div>
-    <div class="mt-2">
-      <a-card title="Markdown Viewer 缁勪欢婕旂ず">
-        <MarkdownViewer :value="value" />
-      </a-card>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, unref } from 'vue';
-  import { MarkDown, MarkDownActionType, MarkdownViewer } from '/@/components/Markdown';
-  import { PageWrapper } from '/@/components/Page';
-  import { Card } from 'ant-design-vue';
-
-  export default defineComponent({
-    components: { MarkDown, PageWrapper, MarkdownViewer, ACard: Card },
-    setup() {
-      const markDownRef = ref<Nullable<MarkDownActionType>>(null);
-      const valueRef = ref(`
-# title
-
-# content
-`);
-
-      function toggleTheme() {
-        const markDown = unref(markDownRef);
-        if (!markDown) return;
-        const vditor = markDown.getVditor();
-        vditor.setTheme('dark');
-      }
-
-      function handleChange(v: string) {
-        valueRef.value = v;
-      }
-
-      function clearValue() {
-        valueRef.value = '';
-      }
-
-      return {
-        value: valueRef,
-        toggleTheme,
-        markDownRef,
-        handleChange,
-        clearValue,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/editor/tinymce/Editor.vue b/src/views/demo/editor/tinymce/Editor.vue
deleted file mode 100644
index b109c02..0000000
--- a/src/views/demo/editor/tinymce/Editor.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <PageWrapper title="瀵屾枃鏈祵鍏ヨ〃鍗曠ず渚�">
-    <CollapseContainer title="瀵屾枃鏈〃鍗�">
-      <BasicForm :labelWidth="100" :schemas="schemas" :actionColOptions="{ span: 24 }" @submit="handleSubmit" />
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, h } from 'vue';
-  import { BasicForm, FormSchema } from '/@/components/Form/index';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { Tinymce } from '/@/components/Tinymce/index';
-  import { PageWrapper } from '/@/components/Page';
-
-  const schemas: FormSchema[] = [
-    {
-      field: 'title',
-      component: 'Input',
-      label: 'title',
-      defaultValue: 'defaultValue',
-      rules: [{ required: true }],
-    },
-    {
-      field: 'tinymce',
-      component: 'Input',
-      label: 'tinymce',
-      defaultValue: 'defaultValue',
-      rules: [{ required: true }],
-      render: ({ model, field }) => {
-        return h(Tinymce, {
-          value: model[field],
-          onChange: (value: string) => {
-            model[field] = value;
-          },
-        });
-      },
-    },
-  ];
-  export default defineComponent({
-    components: { BasicForm, CollapseContainer, PageWrapper },
-    setup() {
-      const { createMessage } = useMessage();
-
-      return {
-        schemas,
-        handleSubmit: (values: any) => {
-          createMessage.success('click search,values:' + JSON.stringify(values));
-        },
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/editor/tinymce/index.vue b/src/views/demo/editor/tinymce/index.vue
deleted file mode 100644
index 9bba89b..0000000
--- a/src/views/demo/editor/tinymce/index.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-<template>
-  <PageWrapper title="瀵屾枃鏈粍浠剁ず渚�">
-    <Tinymce v-model="value" @change="handleChange" width="100%" />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { Tinymce } from '/@/components/Tinymce/index';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { Tinymce, PageWrapper },
-    setup() {
-      const value = ref('hello world!');
-      function handleChange(value: string) {
-        console.log(value);
-      }
-      return { handleChange, value };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/breadcrumb/ChildrenList.vue b/src/views/demo/feat/breadcrumb/ChildrenList.vue
deleted file mode 100644
index cc2b26d..0000000
--- a/src/views/demo/feat/breadcrumb/ChildrenList.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-<template>
-  <PageWrapper title="灞傜骇闈㈠寘灞戠ず渚�" content="瀛愮骇椤甸潰闈㈠寘灞戜細娣诲姞鍒板綋鍓嶅眰绾у悗闈�">
-    <router-link to="/feat/breadcrumb/children/childrenDetail"> 杩涘叆瀛愮骇璇︽儏椤� </router-link>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { PageWrapper },
-  });
-</script>
diff --git a/src/views/demo/feat/breadcrumb/ChildrenListDetail.vue b/src/views/demo/feat/breadcrumb/ChildrenListDetail.vue
deleted file mode 100644
index 4994c44..0000000
--- a/src/views/demo/feat/breadcrumb/ChildrenListDetail.vue
+++ /dev/null
@@ -1,10 +0,0 @@
-<template>
-  <PageWrapper title="瀛愮骇璇︽儏椤�">
-    <div> 瀛愮骇璇︽儏椤靛唴瀹瑰湪姝� </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-  export default defineComponent({ components: { PageWrapper } });
-</script>
diff --git a/src/views/demo/feat/breadcrumb/FlatList.vue b/src/views/demo/feat/breadcrumb/FlatList.vue
deleted file mode 100644
index d480bab..0000000
--- a/src/views/demo/feat/breadcrumb/FlatList.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-<template>
-  <PageWrapper title="骞崇骇闈㈠寘灞戠ず渚�" content="瀛愮骇椤甸潰闈㈠寘灞戜細瑕嗙洊褰撳墠灞傜骇">
-    <router-link to="/feat/breadcrumb/flatDetail"> 杩涘叆骞崇骇璇︽儏椤� </router-link>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { PageWrapper },
-  });
-</script>
diff --git a/src/views/demo/feat/breadcrumb/FlatListDetail.vue b/src/views/demo/feat/breadcrumb/FlatListDetail.vue
deleted file mode 100644
index 1dfc75a..0000000
--- a/src/views/demo/feat/breadcrumb/FlatListDetail.vue
+++ /dev/null
@@ -1,8 +0,0 @@
-<template>
-  <div> 骞崇骇璇︽儏椤� </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-
-  export default defineComponent({});
-</script>
diff --git a/src/views/demo/feat/click-out-side/index.vue b/src/views/demo/feat/click-out-side/index.vue
deleted file mode 100644
index 32652d9..0000000
--- a/src/views/demo/feat/click-out-side/index.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-<template>
-  <PageWrapper title="鐐瑰唴澶栭儴瑙﹀彂浜嬩欢">
-    <ClickOutSide @clickOutside="handleClickOutside" class="flex justify-center">
-      <div @click="innerClick" class="demo-box">
-        {{ text }}
-      </div>
-    </ClickOutSide>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { ClickOutSide } from '/@/components/ClickOutSide';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { ClickOutSide, PageWrapper },
-    setup() {
-      const text = ref('Click');
-      function handleClickOutside() {
-        text.value = 'Click Out Side';
-      }
-
-      function innerClick() {
-        text.value = 'Click Inner';
-      }
-      return { innerClick, handleClickOutside, text };
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .demo-box {
-    display: flex;
-    width: 100%;
-    height: 300px;
-    font-size: 24px;
-    color: #fff;
-    background-color: #408ede;
-    border-radius: 10px;
-    justify-content: center;
-    align-items: center;
-  }
-</style>
diff --git a/src/views/demo/feat/context-menu/index.vue b/src/views/demo/feat/context-menu/index.vue
deleted file mode 100644
index 0bde0cf..0000000
--- a/src/views/demo/feat/context-menu/index.vue
+++ /dev/null
@@ -1,85 +0,0 @@
-<template>
-  <PageWrapper title="鍙抽敭鑿滃崟绀轰緥">
-    <CollapseContainer title="Simple">
-      <a-button type="primary" @contextmenu="handleContext"> Right Click on me </a-button>
-    </CollapseContainer>
-
-    <CollapseContainer title="Multiple" class="mt-4">
-      <a-button type="primary" @contextmenu="handleMultipleContext"> Right Click on me </a-button>
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { useContextMenu } from '/@/hooks/web/useContextMenu';
-  import { CollapseContainer } from '/@/components/Container';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { CollapseContainer, PageWrapper },
-    setup() {
-      const [createContextMenu] = useContextMenu();
-      const { createMessage } = useMessage();
-      function handleContext(e: MouseEvent) {
-        createContextMenu({
-          event: e,
-          items: [
-            {
-              label: 'New',
-              icon: 'bi:plus',
-              handler: () => {
-                createMessage.success('click new');
-              },
-            },
-            {
-              label: 'Open',
-              icon: 'bx:bxs-folder-open',
-              handler: () => {
-                createMessage.success('click open');
-              },
-            },
-          ],
-        });
-      }
-
-      function handleMultipleContext(e: MouseEvent) {
-        createContextMenu({
-          event: e,
-          items: [
-            {
-              label: 'New',
-              icon: 'bi:plus',
-
-              children: [
-                {
-                  label: 'New1-1',
-                  icon: 'bi:plus',
-                  divider: true,
-                  children: [
-                    {
-                      label: 'New1-1-1',
-                      handler: () => {
-                        createMessage.success('click new');
-                      },
-                    },
-                    {
-                      label: 'New1-2-1',
-                      disabled: true,
-                    },
-                  ],
-                },
-                {
-                  label: 'New1-2',
-                  icon: 'bi:plus',
-                },
-              ],
-            },
-          ],
-        });
-      }
-
-      return { handleContext, handleMultipleContext };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/copy/index.vue b/src/views/demo/feat/copy/index.vue
deleted file mode 100644
index b442056..0000000
--- a/src/views/demo/feat/copy/index.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-<template>
-  <PageWrapper title="鏂囨湰澶嶅埗绀轰緥">
-    <CollapseContainer class="w-full h-32 bg-white rounded-md" title="Copy Example">
-      <div class="flex justify-center">
-        <a-input placeholder="璇疯緭鍏�" v-model:value="value" />
-        <a-button type="primary" @click="handleCopy"> Copy </a-button>
-      </div>
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, unref, ref } from 'vue';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    name: 'Copy',
-    components: { CollapseContainer, PageWrapper },
-    setup() {
-      const valueRef = ref('');
-      const { createMessage } = useMessage();
-      const { clipboardRef, copiedRef } = useCopyToClipboard();
-
-      function handleCopy() {
-        const value = unref(valueRef);
-        if (!value) {
-          createMessage.warning('璇疯緭鍏ヨ鎷疯礉鐨勫唴瀹癸紒');
-          return;
-        }
-        clipboardRef.value = value;
-        if (unref(copiedRef)) {
-          createMessage.warning('copy success锛�');
-        }
-      }
-      return { handleCopy, value: valueRef };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/download/imgBase64.ts b/src/views/demo/feat/download/imgBase64.ts
deleted file mode 100644
index 306bdd1..0000000
--- a/src/views/demo/feat/download/imgBase64.ts
+++ /dev/null
@@ -1 +0,0 @@
-export default `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wAAAAAzJ3zzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH5AodAjIGrlVB/QAAABBjYU52AAAAygAAAMAAAAAFAAAAAASpeQ4AAC6ASURBVHja7b133G1Vdaj9jDnXWruXt7+ncDhIEVCKaCiidATsgIjRm1gTu1FjTbl++ZmYqMmNRPOZm5tc400+Y65iwUQFEUSRIkixgNI5cA6nvX33veYc3x97v2IBpZzzzvdw1sNvc/5gH/ZYY80xy5ijQEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkbG7kZCC7CaeevLu3QSyPXBKBL3RSIHKOE050EtULdqakaXvr/E+EiR9kbLRz6Wvc5HSxRagNVMIw+bnhyz/m6HbTtNvGjsAQENMNZk+FGB1EOjBfu9okLvbvj6N0Nra88kmzIegte+yDEapbRKMPp/EuZe3rcqOm37sjFKqQOKMDSFFUXxRFicVO1mqZi7/QMLS70DahS2QO9guOB92St9NGQrwEPgUBZFKHZVtr28p3ko5PucWko5MZfKmD5oACuKAM5jU6WP5S7N8+W0XLm6NYomHuZMaM3teWQG8BAkKoypknThoAM3c9ed6548lcrrJvpyTFElBUQDyCUKqUK3iMYJaTevhdufZG470LEzl0dSpyHE2qPJ1stf4vfO6eOdYTTpykc+V9BXn+02rvP+NQf25C1jTkaWvxfEADy4BJJJGB+D+aLcdGXefPCGIpf859tpvPUjsF8v5Ue5iP/9nuzVPhKyFeCXaKSGMsIb0qa+71yopsnhY44Xl5SKCpqysk6gn/+ttsHZEm6yhh2PiaI+B6y1+tI7nNz8nI/RqKXIxVWrLlsHHjHZrnHI61/S4/Uv7ZFDeJZxfK1TN7f7/NSY46RJJ4fESuQGXxV50CGz2z8CMjxxCHl8voKvxBgDWvFa3q+vJ2zo6bPmYgovWPSMpDDi4R1/mVnBIyEzgCG5rrJUEwq5vlxUUX5U0uJG6b90BP+CopcIFdUAW0ZhsAqkIloti5muSZxYJPVIrDCd6uRBHf3dExf1hOtKhn+/aompLqzph9bonkFmAMAdP/XMN6HaFSYMVNqKWibXpJw27uQAA6oS5rwkCl7QbpFOroIbSTSyg+MATtCSYg/qc+z+PZ711QrF9adWGffIXAR/8iHlbR/LVoJfR2YAQLEIb7kgIul6+br36lLqlT7PH03NYWUnKGEOvTC48PIWLdehUhq+sKEwDsQAk47ilOPkw1uc8pp5H310Ek0FZhPo5kJrd3WTGQCQ7oC/f5Njcga+9zlHtctR421eVVT2UyHI1gcGP9q3eM3jp8ok4wkJyi9cQHjAojrZ12MP6uorjTf7vmIzTPSQdV1lrB1au6ubvd4AvvLvjn4VvvWdlD/+RsynPpVbW0NOnOyZA4pecKEEU8CD5PDxiPQLOSVGf+X+wQ8/U07tfqkeVVROcnVG3nMe2lKRpoW3fzTbBj0ce70BnPYyKBeRe7SAyL9ptSPPGlF5YcmRN0DIg29LcKaAn6pi8xGSPvzds+SAMafTa1N96VifA//gIjhiUbHAfDmUdlc/e60BvOF8x++90DNzr3DZxxwX/YGamdYr1ud2csaY40hjNHYSaO8ztLo0jy+U0fFY45xg/MN/nZ6gBU9h354+c21fT7m3Rm1tpHLMnZ5SCu/6s2wVeCj22ouwnKRcMJ6w9m+cbF4b6fQDfuTWd7tzp3bIs+siSIR6DTP+vYJa0XodGauptYLob4g8ciAxMOG1tK7NuYd57v2vgrnw+3V6hy8if310sHP8qmavNYA2lnXXwuw+0L3Hs7kvk/v25XkGDogi1AWa/I1Cx+B6eXrrStjRhFiV33gWWQ6TThQ29DiyqZx6TY5vrumxfawPR18PZ/6ZosAHP5CFSSyzV26B3vrbbSIVzjsk5e++bjUp6/iagp6xIWcOq0UiyzkvIXADt44UalAuKMnQ1fmI/u7wz3HVaK3j2HWOM+uqxU9UVU/30JS99IX/GvZKfex3f0JsUk7ZIfLBs1uMOPesMe9fVVKdMhrG7SkMLr16gto8ur6quXpC7PxgS/RI8QOD0RGvh+6X6msnvDzlBT1ho1MZ8craYG6t1cleZQB/9D7HO/5bj1LJUBDkhb+1qD+tMz7iOGayL4cmTsSF2h0Mb9t8gZ6tS7eUg/gxhF0rkAIjXuVJTp9ad3pyLmXqdTs62jHCJgt/+sHsOLDMXmUAqXpmY88t9Y7cU3T6h/cW4jUNe1alL88pOyLDYAZdabmEwfalLfhCCZmsYhID/jGm3OjwQDzqtTLtOXfa8YwPTeb54LVLxEB7xVN5Vi97jQH80XsdiRdG+obygvDZf/oP+mI2TLTlnHpfjgLESxi3z3Ca17SAq5Qx0wm5+Ne4PR8JPUGtEq93+oy1Ts/YHsn0l44smcOcp+DhT/9S+dM/z1aCvcYA2nenfOPGNgbkK2+J9V3v+92xInLmSCqHVYf7nlDDwQ/jGcoj4ksVQUQfd8aZBzGKjnk1E16fs1b1JTcUTeXzIwZyyP0VKHYDPfAqYq8xABk1PP/wMhNtOO0rjmKffcdTObfsZR8TsNDJstuzk9P+aFFlJFHj9NEdfB/yeQEVxCo67fSgjY6zxDC5TwtGVZlogJ4Z4olXF3uFAbz9vC65kkH3gbKK6IiZKC7oaeN9jsoriZNAs7+CejAJ5Gui1Ty2AGZXWeJynFDdI2t7evhYX5+vjrGvedFKpFI8Hj6wZe/eBu0VBjCRxnQ3p3Lx3U3uKXqJ73Sn5nb680upVKxIuHgfgZ6IzxdF14xIVEwwzu9aY/SDrDKtqq5f1+Y1ky2OO/tvPS+51NP8O/jRxEo/+eriCW0Af/CylLe/LKWRE/JdWLNTmO27ymiLZ4515PDIY0IUuAKWR7l2inSlQq+WqI1BdoebPgVKCvumesC4cuJt/2w2HPy1lOQLcPB2+MB3995V4AltAHnnmE0MHdfjmprq+n5UGk/NC6qYE6sqkQx2IEFwHvpAuYKMVjAJu08YD2KBuiee9PrcdX1OfSs5ueZyiArI/DMDKWEV8IQ1gHed5zjurp2M9ZWSE9m/bTBi9htL7e+UHYcLoIGC3YyCM2iaJx0rEU/nyBkZpDnuDoTBKiComXZ66IYl/7zKPPs/8zo1T/lXpdKC9/+x8icf2vtWgiesASjwzSdPoqry8f1RiUytqHL8VN8cXHWCH+T5BsErSILPjZAWSuqjXeD2fCS/iYG6USbu02Mn/1V/e8f1Mv3pUdHkfyNLFZiIw+gjJE/YaFAnUOjDvj3Pq+5T8s4fOdKTV5Q8kxboBywK1ha8yalfVxFbSTDpLj74PhQ/c4sKOrbEuo0NnteM+cZxli0HtT3NimG2GEoj4XjCGcA7X+oxCqjy5Jl76FYOkK7vjU/1/emjqT0mUpJUwvj9ZRjvo3l8riI6kiMqgFmpCibLcUIVA+usHrQt5nl35GTLeTXu3bTFs5B7wm4IHpYn3BP3XYcj5n+Egnxr7QFsikkqXk4vOfOcqpPYarh4Hw/0EV8qi47XRWKLPNZ4n8fK0OWrZdX6Oqe/8yT09Fcfa+Rd/8MwbldaK+F5whmAtxGfnSqS81Dpe3qG8njfnF53cmSkA997qHgfD76V125SVDeWDDK9QkQnpwKxh7WODdOeJ31rEcOVUA7kFAjJE8oA3nxel09cGnNwdyMfeqGqVa3lvD9rxMlxFSfx8s1oCJwHNUi5hqmXMXnBmEBOF8NgImgLSx1YrMVAZeCW3dt4whjAxW9OOeqS7fzes3tUUy9v/KrDqj+4lvpXl7w/wGqYCg8wrO8jqMvhJmsSjRUkVh5/vM9jxSjSNvTvzfGdTTn53ifm8Hrkq1mM9r684SeMAYwlcMqrxpksiXxgCp2LbbHiePpUj8OKTqyXQC93GO+jOVIzIp1CXjU3LDQaQiAD2gNmI3lgZ1k+/aM1fLdxi+dtf/spFgpBNBSUJ4wB9EX5xBbh6S/YobV9YyZa7sRaKudXnNRCzf7L9X3aoFEe1taIStGuj/d5pBggAlkUadwfyXfnErl+dInuTwuG28vQyg7Bex63vc9z27s8zS7cP6dyzsvW8qYf9iZrPZ470ud4A7ELNPvL0OpcDpevwESiuYJgAqblageYtdy21crnupbtf/dGaAj6uxen1HvhBAvFHn8P8JrrPd+50NL9oOGz38grf05hBE4SJ0ePOLFGBiVOQmz+vYKz+GKNtFoTMaKDW+AAslgGq84OI90dVq7sK9/acS+NT/4p0i6jL/98DJ8PIFhg9vgVoBgr3Aqttsq17/GkjolJJ+eVHUfYYaJLiAFnBhUefCvRXrWETOQ1EkFCHHwVsApOJJ2xcvkDVr783G5//t6N0IjRhT1+FDx29uhHf+fLPO8/0PCfn0r55Lcts11GL93sTs935Zi6Ss5JOLenejAR5OtCpYQtgl0+E6w0BrQrsN3QmjdyyQMR1x7RhDNngc6gmNbeyh577PmD8/psfa5l583Q3NaVzlp0c1OOaSz4t1S7cmgJsT5AU4vl3kZdwZuS+MkJMaNFjPFhOkvCoLzKkpH+3bFcsT2Wz6jRu7ZHIg2ErTF88I/3uvuvn7FHrgBvO29wZXP/n30N1/O8++tet47GSaEnT6/1zDMSL0lQt6dCL0ffV7RbTVQKDCo8BOksyaCx35Llztmc/NNckRv+n39rs6lg1NZgbC8vkbJHmv47XtJjcylmfdvJA7Hoho7mvPFn7NMz71rX5dmRH0SDrjTC4OCbKmpHceNT4qbymiSChOjcaIYybRe6dyfmwvsK8t6W5f6RPrLZoh95PwTq/LRq2ONWgA+/wfHDO3qs73gS5ymkjqbxIyM9zq729TgT6IIJBm5PBe0WSEtlmM6Ti02Ywb9MH2jGcnMjz5dqkc41q5CL0dfNe/7mL8LJtVrY4wwA4APvKIF6/urd29R6SYoqx46l9ohaKhGgPmCii7doUqNfrJDaZYsIIIsFnMKckXa/IF9fv1a++vr/2W4eN6dy0hh8qW541168919mjzOAnnhmroNS28kb/3qMqnMH1nv66qLXg4cn+mDxPh3QXqxuskQ8kScGgvn9I4W+0N1i5aodkXz70zfRPFJzRCVRm4f3vj8b/LCHGcCH3+iInfAPNzZ45mhCdSSulVROGE85vuC14AYN7YJgBvV9fFLD1wrYooTzsMnQ7TlnZWnW8qUlw02f2ejkhBdbWg5u2hlKstXHHmUA57/CEMeGr3/3B5z16Vs03+PpZS8vqjkp5zRcfR8UOuCjAn58REw+gdQRxBqFwfX+kpH+1kiubxr51pYWM/8yZ3lz3OO4Frz07dnsv8weEwrx7vM77FsC11R55f95ph6zlUJ6kzup1OfZsZKE2vcP9/jazkmvWkbHE03ygkkDbX0E1KtI08iPdsbyqbboHX85plwwY/TWiYReGkhPq5Q9YgV49/kdDgL+7IKUH06lut83++UdP07PyLX19JqTohCunakfdHKXchUzVsPmLUbCDX4UZKdRv81yc8Py7WYsnX/cIRJbuOy2QEpaxewRK0CnkvJDZyg3kNp9qs1Uxkd65vykJ0fGDKodhAov7gnay9GfKiMTeSIhnNvTMEh3nInl+q2Jfq0iMjsXQdPBnIGPf1z4eBjRVi2rfgV4x3ldnoKQaxv+4tKcakRcUI6c6JunVZ3J+zBbbWAQ7+MjvKnRKxTV50RlOfl9pTGgTmFWZHEuks9vrpv/fP3tvr9P22OKovW9Md/xEbDqDaBr4c6FiKmuyBvP7FJsm6NKqXlNWdkYq6KPoY3QrkCAjqLEsKZKMpIn8j6g2xOkZejfb7l5ZyTfm5jT1hfHlW5sWMzOvA/LqjWAt5/teNfZPQookRNeviWmK1Kq9OXZo105MXHkQsX7yNDqfB5na6SjeeKiwQa88NW2B5/I1skx+ewBY9z6zv8uFNcZPaqqFDvw9j/NrOChWLVngA5QBCQV/nJjn/GOkdE+R1e9nDyamlIEOAlT3NADKWhcwo2MiI+tqneB6owyMMYdIp68XH/CPvJfVy3o9p/8PXLG0aI8A04IkhGxZ7BqV4BTeoZRJxScl9+/Dx7I92vjfc6uOk62qNn91TQfGjPw+mgz0X6hiKzJaRIbTKiD77DekMxbbn4gki9TYNszXyBM1EWxIFNh5NpTWJUG8LazlWuTPnPW88Fvpxq7QiXy5qR6KidUnRQ0dKILQqkmVKtIQbChAvDMMO5p1oifM3LVXMSlpL73hj9Wdrbh3h/Cpr8JpKg9hFVpALMemlFMUY38/kklYmVt1cv5ZSf7J4ORHyzepye4Xo7+WFVktIBd7ucVKM9XUiHdHssNC5F842LH5nNefI9/xgbB5mDjK4UNv5Ntf34dq84A3nOuUgFihX17cE0spuw5ciI1x5eUsg8Y74OHNMH7Gr1KXikN9RdIHnUKLTGzjUj+v5kyV+wowZkffpJctsOT7OWJLo+UVXcI/knU5cmaY7YOjW7EaT3/7Ir6V1Q805EX0kBpjqrQU8jlseMjxJUEE6q9jDCwvCWBbYbbO3DVPovMv21J5WtHbtdrTt7Ki3oxR1z5490vi4Iay32ThtkDxoE68dLd9Kv7h1HOo2RVGcBLL2hw5DU5miDtFnpzmfz+bU4ec5ycUwlW23YY1k8vT69aQSfymhQMkg7jL1ZaIBnYo6TYu2Zj/cyPpxt3/OA9ZUb/eQs/nJ6TSs/iVuCUZHTQZaSXeNpFUVgCGugelGm+agzg5rtT/uKiDjt3wpsnvP53cWa8HT1tIpVjxlJTtqh6CVPiZLmbQKGCq9ZEE1HEhdk/Dp1fsiSmO5PTb85X0/9YKvVmL1n4Fw6/+niFBF0hLYkqNhVKM4LrCOsnLKU4TztKMbqVS2Q6gIYeHavGAHqp8rT9DZft05QjOqlOOzN5kk9e1hF77KwFL4pnZWfb5S4aTsW7mP5oVSQtk2yBQY+lAPIYBa/idsb+zhunG3dc/NSttXbO5Q+/6pgCpD5aqZvx4aroBWmVTTo7aeZ+WosXpLWdSlpkKdkz2tCvGgN4xgER/3xll298qQuxY+msZOONvnfcjsjURQdLfogBJ6r4yPT9SPxAeVQqhTxjzj/YYmalDsCD31KMmo6J3c7u2Lx/YP3MGc2kc5R4ceLFDgtSrJSKVME4QTpFu3WpwmWjre636ozMO9cUuEcv1xYny+ruu7QqDOCYP0yBLt++QeUzX6xqPmHynf/SOvm2NF2/uSDByogDoNqVUjTv18R9VzSDRNtQojiLxL6bjC9tqazZOZ0UWk+13iAefABflHHgLbSqZq5bZd99Ef2pn76ECu2/YZyTKLCP3sN9sjGYzn7jM4QWAODog4SrfmK55eN36stP/H+5d7s72qDniDJlFKyqWFVW7MPwTw82tvNSiuZMZCatMmIZlBm0rNBHf+5PxSX5brs8sTOOi+0ENYhf7jy2oiz/XifNm83NehRRNKcr7rcvN+2Nr2UH/8iCABzL6q65HnQFOOiNHVDBo/zeJxfgzKfK77/wkH0uur57snP6lFIsEg0CPlf27KsPfrQQ4WtJhJE8Ts0vfGel8ACC5PpbctXGjkKuM21UR7w3g/8QAOOhVzTdual4sV21OYHKdtxxf8LsCRNED/yUDfPPZgvrsBT0LtrypBBi/kaCGsD6OMdOB1++2ks1HtOD1pFceFXnNCQ9vRBLPo4CNbMebPCd5sxOLUddzZkxwIbai6kKqPik1G4nY/Me4+vem1wQYZb1o8z38jK/NGrr/ZiSBRbxU1fROhfMbXkal3fpYshzGDluDibsryfYFmif189ze39+cGqLOsz0UyT264s5PSsXc5gIEi7TRUGkTyWa0aJNUa2iGmyyEFFnk3R7UmuYuNRcL9bHBOryvRwK3s/LbLNmG/0cNUUKgBrIWeT4BE7LY0dOo0ANkZuZ4UzdynXaCaXChyXcGcArxkIjXZI4cVrIt8d7rvU8I+5pkSzXWgiFpMTSphTVJGfGGBwLgqDOgNFuMrqwKa4vdhAdU5UwPd0H6W4KtBpjcX5hKprwVnLDtAwZFgYuAqc2cc+5FC3MoVqnJoeRo78KW5AFMYDD3t8gzg3udNPU0e+kONyTU9JzvOoGXXkX+4N4IDENrSVbtGBzKloLXD6zZyK3GNeXSlGxMxj8gWZ/FNTQ65bM5kbdpN2cjKsMyr7//Lc8engKL4qRtaDM0+UWety2CvtQBjGANRtytFse8YYFr6qxmRQvp4jKEUCY2W2AgvY1b9u+FhuNJCJUWWcGe3+TuMW43twaFdsTiK4JNvgBk+I0ktbiuE3bFRPJw5bXlwL4Y2vIadeyT0U5SGdIZQnPvnpPMPkf8plC/Gja7GJFiIp9pkfVaE9PUMcLVLU6/EqYgy+giZ3Vgu0SyQZEaiH0MxBEFC8uKrdahemdXZvvGnWBvdZCo1cw843RaLqTM1PLvRB++VuDLZFuEPT862g/Tfgm13Ab51PmeFbXxdiKavTkD3c49eM97t8M/Y6XO/5uJ6LJOlU9BdXDV1qeX2C5b2klams97mPIDdwvIWQRAG8Stzkqt5dsobMv1lcf7//2sSI6dHuWTH9xMu50iybh1zRXGeyUxDbxT/tnFk85l6eugZ6ewBYET1HvCvUov8KKDrjL3/ttJqZjDjg0L2/56Ki+8otPLoroc1Q5USFHyIOvSE9js11LkZA3dQyhWmwsGwBJrbGUjCx4xI/jJQmmm8HRd7ZTNs3FUVvzlug3eAXEIHTQyo10nnchSyfCgXYTnn+nKeXVcf8KrKABHPK6BX734tPpO+W+29r8+5832XZv+iSf6ouBg4dTbaCDr4KVPpVkh+ZthNdxNFxxW0WdSdxcPLIYR+XmCCjqwwyaYWSd7xXNzmbddvsJEx7JP6K/C9YiR8XIWWVY36JDGWE7Hc5YJW7RFdNqzwg/urjJj77blJFiXuOEybtv6ZzWbesR1krI+RbAayyp1qIyOVNCw0mjXjCxW4xHlu6MSi0jolME7OUmHvVGegsTcWFxNBrxhuiRKkcGa5kBju3iXwDR6CJe15GXkymQrgK36IoZQN5DY6djy1KXOzctsjSbHtZYTM9NnU4PAx3CHHwVSOwM1Xir5k0FQ2XF5fh5vDgTu35udD5v852qOhOvWID/Q4ljafaK9r5m3dhuwgg8qhc1TKbT/VI42yAHQpPNzDCD41jyXK6tUI8GrJABPOkNi6gqncRRz+Wo2miCmJNNJE8XISbk3l9xWrBtrSUpljw+VD6TDNyeuXQ2rjVmo2JrrURuNJheAJvi3MDt2e8WJZFB6MxjMcZY0SNzcOZfsXHqt9moH2VOAF7LjpCPuDIGUCzm6EYixVyBHJK0RU9LRU8HzQXd+4MnlnmKNtKc2YBIIdzWB0VxcbU5l5ucXZA4zauTcLFag6vIhW7ZdBbHzD69REaXm+49SkRAwY8Kes52eid8hlGjPEm/RJNnBY4W3a0K3v/NKT5t0uum9L2Suj7WyLT3cqZXjpCQtzqDg6/TWjyj1SgGnUbDuScEUon8zrjcJiq2N4hoIdzBd5B93a6Y5uJE1OrnzRSPY7JUBrWUUvSQr9E67R623fwF5u8oEvvzKVPSu/AQJGJ0t2vY2Bz9vpPEODXeV7zT01COFTRcNOOAHrGZpxxFmrclQkTVD1FvwKom9caOqNowIn6NasBIXZVUYGezZtOlkajmDfI4B4qYQQ+H+Fa6J3+BpedCXHAIn6YhFuFwwgyH3WYA+78lBf0JzvVJ05ROx+FVD/bOvwT1+y0rJshTeyAybS3HM5qzdZRJJOQlHKlJ0qVkfM7ElUZOFQ0Z7amGtFsyO1o1a/sJU7Br7iBkcEF2YIQ8rwAHdZmhgtDAESFB3KK77aW7Xg/kENCejKzdpkmpPA56AvijlIAHXx38SwvWaT02GpsIH6658MDtmc7F5cYmW2jXET8VNA7Woy6WdG46LjTrtgSYXekTHp4jDkvhHGF0QwN0X2K5kjVB3KK7zQBsUgCUl757VH/wrxegytGq8mKFZc9GoCkOT2K3aSma05wZxfCILnV2CyrgBVvopcnEPDbpl9WbZMUz4H6mGlDLfLdgtjRrptiLqMqunRqW3aITDn2hok9L2Y+7uUbfy1wQt+guN4B9Xtdg3WuXQDyu15V/+It75IDn//2UOn8aym8x2NuGmeOGM72WbINK1MdQRTVgiIGqSdzOqNpsxZXmtESuEHDro8bhennbWhyPer2c5GWwUu8OgQzoQQY965XsPBA28BFuF4CT+faKPvcuN4Buv89E1eJ7HfL5go4kU8V+t3ma9/1nK+SQFa9u8jNE8BLLEsWooAU7CRKF3Pogksb1xgO50YUFMa6uKiEdA4phvl0zLI5H+6SxKe+m7cGwmozmQc9skz5XObagHK2fZlGUM1b0oXe5p2H7nKdcUJx30mg31RpZo/gXq+phBE10UTQybarx/VqKqkCdkG5YlVSMW0qqzUJUbo4BOQL1eh1OSdoqm7mlUUsaMz3IcNx9Pzl80n2vo3Pqi9h69Tb6N1xLO/0v2pT1bgAast/j+IlHxi59yJvvTuEOIYm8bPpMXrs9al79SQi/BYH8XA/SJzZtrcaR5kwBr4YQCfcMZn+JXDepL22OKo2cGL+GUKHgAuLpKcwujVjTrJqyyO4XRhAVhHvoP+MiGudcS38sIeZCmiLAaSv0+LvsOTt9z+EbLaeeG5N6B0c36afuiNS5l6C6XCQyULyPQmwalOyS5swaDOMrLscvyCTO5nuN/ORsLyq2rXoJFnwnHtTQ7ZbMzlYtKvdjmdKVCb4TBm7RNRHy3AI87VAKxtNDgCtWSCG7zABy0WBs33i3k0++oaSvPy83gvBs9XIMoWP9FbRo2zqatIkkWHmT5fhIE/mdcbk7awud9Rg3PtiJhdn+GK/0C8bPrY2TdsUkK119e+gW3ejh7FvpPKVAXtqktFZIjF260n36sh6z/1bX0w6LYq/6LEHPUtX68D+H2m+nxGa7FqKez9lxNRIHM0U/yPONK61ufny2J3FaHbg9A6HgRXZ0i7KjWbf11EpphU1x2S1acugZDn12Hxk3lHErJMAuOwRf+N0+Lzsh4d7/aNuLv58eum3Ov9Aanm4G2gxz+PUKRlTL8TzlKAEdxz/eW/3HjgpOrFuMq0tpVF0cRdSETHQRj+tUpLk0FvX6ESXCFCRYtrkNoKcL/n6le9EwTmy3T1W7zAA+/KWuXPDVvnZ7Pv7K99KnzDf9ofmYvAgapLrbACW2XapRnqItoBqswZJ6gzG+n9SWNkXVZk7R9UK4+j7i1amRhaXRKLcwFo14S2LC7VKHvU/0ADCHgrtopXbMu8wAbt2WaqcnFCKcWt1ajmQxEUFDKdUrxHaBSrRFC3ZEhXqw1pIAHjWJ7yUjS/mo3KyikoTKuRcP3kjarthtrbotphHTITrv/LxIDCzgTsHfqitYeH6Xrb9rppTIwYYy6dS0/2Ec6ZXesyXI+B8U1PXkTE+rsWpkCnjdXbeaj0CeYZpjrbklrjSrErkxAjoFjKOrkSwsTti4VbLFcEfwgXaGn83ApcDV8aCA1oroZ9dtQFPL+vWGbV8tKt7M5ZLo63FkLkMkXS65sxIP9DNis6DFqKd5sw5DJWSFB/WitthdSiZmliTXi9UFjPdR8JZWp2zmm7VovB/LRMDZXxkoomkwlxjMlYLOpOQxe5oX6IP3VnnKVIX15yt3/uud6bFPLf+gXIovE8PWFXU7Dpr2ei3bWa1Fi2oooIHSHIcVFYzVWVvqpFGpvUGsq4UubNup2HRuOpZeQeKwtQh+Nv1vjpAvV8n/qI/3EUJhhdIhdpkBvHPdTpo9pZizTJ25UW66pdXPJfZqQS5RkSVWqqOQSF+smacYWc3bMSRgYdvBQJe4tjSXG5tvi01H8YEOvgOcwgPtklls1OyoN5KErjXn0RkHl3q4sUUvjYjxeGorFKS7y56/ms+zo9kl7Xqq5bz+8IIi5UJ8J8oXBe5ckafxihhxWopmtBDlEKYI2gNBUoncfDyy6OPaYl5EJeTBF8V3KnaxWbfeWWoasA7rsJ8ZJeKb11D6wjTF7U2uY5qSGgw7WZmw6F02OH7y18NqIn+UckhHWf/aBfGqfWvkJhH5jsC+io6wO+8EFNVYer4eowVjf1buMATeINa140rz/qjYroGuUSTMVmwQ75O6RBqLk1GlMWZLGGxIt+cw5W12lPwVz2f6ujx0v8Vz5ARq+rEVPB7t8hXwOGB8tEQUGT2gUgXDNhHzBRW5YTjud9fgh1hmfSnapgVTx1ALub1VDzZONTcxZ6JSu4CXYPV9xIOPpdWu2M3NqpHUUFvBbpK/ohoGv50ClyWYr/89LP0P1rIPZf3bFRZmlxvA1R+K2DHbJooM97aaYiVKxZjrgMuBneyOOXk54K1gu9SSFCtlfMCkewWTuLm41toRVVojEqflgI5GNY5umkhrYSpKugWTD+z2XGYz6FfLRDcD7MP1fJnncTormxe8W85AP/lEiW4vRQwqvRbdfrNpjHzLGK4Q6O36X1RPxKIWI6FoJwgY7zPo52U0KrfnkvH5OROlZZwJVvxGFPGWxU7Vtho1u64fyUhgn78AS4K5TDHX3sSObsSdch+38Sy+wKWysqrabU4AI5a4INh8HvGRJAXzfRvJV0TY+XPKePwM4n1SrcSbtRI1VKiiGuxwJ4oXo4241I7iSmOtGF8MdvBVRRRt12xvfiJK0+SR1/XcrXIhd1rs5xNyt++HIyZWqFMIkBKx235x0/+qECXgOoYksfi+64jwPYUrURrsulXYYU2bSpyjaKug4WZ/bxCjaVJb2hzXF3pi3IQSrrkeKj01bGnVbK9ZNWMq2NCFyRVmgCsM5vuC9rdQlD6GA5jkGys8+8NuTvzpNpTI9okKsR58fhWTjzdF+fhzEpnbHtTH40ABa9qUop3ko5qKTIbK8hrK44jSZjI2l0aVZqyKDZbm6EGN+FY1WmjWrHURoxCw1OJQrAjzvYT4yxaZq1AmJtIyOTbRDSLQbjWAuz9ZhYKlNF3kpxd1JRkpNAuTpSttbK9Vpf24B6uqat50dCRuaSLgQuX4DsqbSOSbUaUzY4vdSbF+3cDrE+zWN01jac9NRbVm1dT5WeuiIKhH8egMRJeNMnZ1k9/pLdJkP9bRoU0vUCPt3b4i3vGJKrkqJMVY1x8DlWl2iuGrgn4PHkd8pqJYmaEQLfmcmVIj5ZVU3C/KoqgKUbHTz0/NtG2xk6iXx1pJ+XEjCi6W+U7Fbm5XTC41VHZxfZ/HIlLbwzdT5Iot3NuBvxKIeQFCV/YNJtiKbAkbW1Jc23PLZ2dIKjhBrxK4BFgYfuXRvZyB2QiluKWVqI+VUcIm3XuJ/FxUbi3GlUZNojQJWd/HOrq9vHQWJm2S5iRvHkw6CYGmKKOYzc+n/OU3Ufux41ucw/76JhL+gW2BxBqwIgZw64di4iTCRjF3fmVG+jt7s8B3EK5HSHm0L0fwRNLUSiSUo8qggXOoRJdBnm9Ubu2I64stET+Jl5CtENVFzLZrxjdqZkNqKYd3e2pzgug7f87oNYdA67mcLRcywRgRszL9uH/k8bBiTgGHY/auHUSVCCmCWLlJjHxeRLb8nLJ+M6pgpaOl6F4tWK/COAFbCKGiYrWX1Bu5pLpUQzQOleZovKLgGyO2tTge91wUNPBuiADmBynmc0eQ2/QmapxCUQG+szuuhB4lK/ambv1QxNHP2x9A1VhRkSURvo3KdSAdHuEqIJ5BXf9qbDVviniNQ9b3MZFrx7Xmpri6ZCRyEyup018VSDpYtjZGItuqmFFWoL7PI2AW5Irt+GtHuD9NuEvexfu5gg4Xy0Ro2VZWP7f9eB4Z/mPEgMr9IBcJ8tPhV379KqBAJEsUo3nydhwjI4H0NsCLSpJ2cuOz7ajYjtSbXOB4n16rFs23K6bojIwScmXkZ76xqy1y8SJufp4ODhSewUkBfP4PxYoawKZ/GkFV8baqznmZ6dsGxl6iwnfhN5wFBpGdqsVoQUfiOY0lRgNdMimggkTaiIrtVlRurZM4HQ9ZaVGUtJuXdHZNVG2XTUGCXogwaHGAzgjyX3ny1/4W9/lRYhyGs3huOMl+iRVfIe/9xzqWFCTS6kiJpXpxm8BlwA0wSAZ9aMRhWNC8xRfsNDZcPy+GxSWiSmsxPzk3Z5J+IWSiy9Dtub1TNltbZVN1QilwsJsADYUrBK529No3sFYc8EymgtYm+GWCzKDqu1TiiF67QTrbo1wqXdV36Vd6Lj3QqY7IL+cMDOJ9oBzPaSUyGJkIOsEJTsQ34nKzF9caFTHeBqvv41Gj9Fp121uYiCMXST7w1l8VlYjonjyF/xsR3THD0dS5Wg2W77M9qN//lwmiKK/CLZt3MFkq0+sL9811HohILuv0uKWfqv+VXbTisNL2tdhpObLDm6cwGvMGBB9X2jviStOIuPWDUt9hEMG5WGYaIyZp1uwGbyQfOs1R0VZMfM0k01dVqDWmuEmexhQm8KXXQxFEV/f9rxLVeomeh4lynqPW1cjH9qe5yHzRGu7Vny8MMzj4NrUYbdGcKSFMEDK4XkEi55LRBaLqUqwQBZz98Vb6jVE736zbvjfkw0d7KgLfE+SLFdjxcmKKlDQFdq5QZuyjIdhkcVC9inrHu8+JVJNFWTdiZv/w7NzXDloT3djto84P+suKV4iNaj32JFLAay7Y9mcw+JfiSmtLVG0UTJLWh9X1g2A8TWeYWRy1xXbR1AyhAq+XtQMgcyCXAVd/FPof5jaZYY57aLOBw8NJ9zAEiw68/oKIf7nU86oXtbjyuhLHH4JCcteNd6eX3HSve6qIHhQZgcgsUYoaWopGiSQfrLKzDsKd42KnnRubW7K5Xh1nisHKmiukiXRadbvYrth1zkgtWPmLoUhAH+Rqgcs7tOZO5UYS6lqlyn1Bm988PEG3i1ffqjDuOf4Qo3LKgohs6ni4BJFLRekO6gZH230tmcdQDrnXBlQs7ajU0bjSmDZxvxwu0QWMV9ctGz+3Ni71ChIHTHCH4ewvyAOCXCjIDSkpeUakx+2E35Y9PEEN4H++1XL1xRVSL5x1SqRwE59+a/Eer3KFwE/ESEuLtqRFO46QC+Q/Ux3G9MfVxvbc+Py8SdK66q7pnfuYBALvrDzQrpiFdsmMeSQfPt6HJnAV6NUgrYhEQDTPoSwwE06630Dwm/LjDrb8eJPja5/pc/jbT5XohUsaW3OdzUWf10p8OyU7imGKUCVFBkVFkMj3kvqijapLNRUSQhSbk2EoiBHXGIv80qgteqFM2PcoAAa5xWI/Z7CbInJYrAI4eizKuoDi/XpCZwgBcOR+ESd9oMNd21VlC9TXR/e5WC/zFbuP5mwBqCH44etfiQpzy78hgBFDx0R+0SQpYtOSYlIUGXa83N08KIsgopp6kVarajutapRTQc2DprFSZZWXFxwF4kGDSXNtQnKtQLNHX8qUdZFF+rL/Cojz2FkVBgBw8x1dqsUcx312kRveN5JOTLvvgbkJiPFIuGh2BUQHQc8IXgLKAsMAN1UZiMIw+Cho/ykApJfiO5OsZ5ZtupPtIE8JJtUjZdUYQKlkKJcs37kQ6rUGUa6S9mKTYuTBdI4Qb3n5Vk4UMQpmOcQ9kKKGxe58BB4h8OGX5RcjQJEKs2zF4yhSXqHiho+PVWMAkYlodlL2u7yO32BJ+w76RvAKNnBkiw7q/SwfhoOPOcD2Fat+0FcltDAMMlR7NNUQ4ehjwh8vMzIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJWHf8/ftAmPsVSYvIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjAtMTAtMjlUMDI6NTA6MDYrMDA6MDASZ++eAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIwLTEwLTI5VDAyOjUwOjA2KzAwOjAwYzpXIgAAAABJRU5ErkJggg==`;
diff --git a/src/views/demo/feat/download/index.vue b/src/views/demo/feat/download/index.vue
deleted file mode 100644
index 47c8655..0000000
--- a/src/views/demo/feat/download/index.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <PageWrapper title="鏂囦欢涓嬭浇绀轰緥">
-    <a-alert message="鏍规嵁鍚庡彴鎺ュ彛鏂囦欢娴佷笅杞�" />
-    <a-button type="primary" class="my-4" @click="handleDownByData"> 鏂囦欢娴佷笅杞� </a-button>
-
-    <a-alert message="鏍规嵁鏂囦欢鍦板潃涓嬭浇鏂囦欢" />
-    <a-button type="primary" class="my-4" @click="handleDownloadByUrl"> 鏂囦欢鍦板潃涓嬭浇 </a-button>
-
-    <a-alert message="base64娴佷笅杞�" />
-    <a-button type="primary" class="my-4" @click="handleDownloadByBase64"> base64娴佷笅杞� </a-button>
-
-    <a-alert message="鍥剧墖Url涓嬭浇,濡傛灉鏈夎法鍩熼棶棰橈紝闇�瑕佸鐞嗗浘鐗囪法鍩�" />
-    <a-button type="primary" class="my-4" @click="handleDownloadByOnlineUrl"> 鍥剧墖Url涓嬭浇 </a-button>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { downloadByUrl, downloadByData, downloadByBase64, downloadByOnlineUrl } from '/@/utils/file/download';
-  import imgBase64 from './imgBase64';
-  import { PageWrapper } from '/@/components/Page';
-  import { Alert } from 'ant-design-vue';
-
-  export default defineComponent({
-    components: { PageWrapper, [Alert.name]: Alert },
-    setup() {
-      function handleDownByData() {
-        downloadByData('text content', 'testName.txt');
-      }
-      function handleDownloadByUrl() {
-        downloadByUrl({
-          url: 'https://codeload.github.com/anncwb/vue-Jeecg-admin-doc/zip/master',
-          target: '_self',
-        });
-
-        downloadByUrl({
-          url: 'https://vebn.oss-cn-beijing.aliyuncs.com/Jeecg/logo.png',
-          target: '_self',
-        });
-      }
-
-      function handleDownloadByBase64() {
-        downloadByBase64(imgBase64, 'logo.png');
-      }
-
-      function handleDownloadByOnlineUrl() {
-        downloadByOnlineUrl(
-          'https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5944817f47b8408e9f1442ece49d68ca~tplv-k3u1fbpfcp-watermark.image',
-          'logo.png'
-        );
-      }
-      return {
-        handleDownloadByUrl,
-        handleDownByData,
-        handleDownloadByBase64,
-        handleDownloadByOnlineUrl,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/full-screen/index.vue b/src/views/demo/feat/full-screen/index.vue
deleted file mode 100644
index aefa3fe..0000000
--- a/src/views/demo/feat/full-screen/index.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<template>
-  <PageWrapper title="鍏ㄥ睆绀轰緥">
-    <CollapseContainer class="w-full h-32 bg-white rounded-md" title="Window Full Screen">
-      <a-button type="primary" @click="enter" class="mr-2"> Enter Window Full Screen </a-button>
-      <a-button color="success" @click="toggle" class="mr-2"> Toggle Window Full Screen </a-button>
-
-      <a-button color="error" @click="exit" class="mr-2"> Exit Window Full Screen </a-button>
-
-      Current State: {{ isFullscreen }}
-    </CollapseContainer>
-
-    <CollapseContainer class="w-full mt-5 bg-white rounded-md" title="Dom Full Screen">
-      <a-button type="primary" @click="toggleDom" class="mr-2"> Enter Dom Full Screen </a-button>
-    </CollapseContainer>
-
-    <div ref="domRef" class="flex items-center justify-center w-1/2 h-64 mx-auto mt-10 bg-white rounded-md">
-      <a-button type="primary" @click="toggleDom" class="mr-2"> Exit Dom Full Screen </a-button>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { useFullscreen } from '@vueuse/core';
-
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { CollapseContainer, PageWrapper },
-    setup() {
-      const domRef = ref<Nullable<HTMLElement>>(null);
-      const { enter, toggle, exit, isFullscreen } = useFullscreen();
-
-      const { toggle: toggleDom } = useFullscreen(domRef);
-      return {
-        enter,
-        toggleDom,
-        toggle,
-        isFullscreen,
-        exit,
-        domRef,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/icon/index.vue b/src/views/demo/feat/icon/index.vue
deleted file mode 100644
index 7e3d50f..0000000
--- a/src/views/demo/feat/icon/index.vue
+++ /dev/null
@@ -1,96 +0,0 @@
-<template>
-  <PageWrapper title="Icon缁勪欢绀轰緥">
-    <CollapseContainer title="Antv Icon浣跨敤 (鐩存帴鎸夐渶寮曞叆鐩稿簲缁勪欢鍗冲彲)">
-      <div class="flex justify-around">
-        <GithubFilled :style="{ fontSize: '30px' }" />
-        <QqCircleFilled :style="{ fontSize: '30px' }" />
-        <WechatFilled :style="{ fontSize: '30px' }" />
-        <AlipayCircleFilled :style="{ fontSize: '30px' }" />
-        <IeCircleFilled :style="{ fontSize: '30px' }" />
-        <TaobaoCircleFilled :style="{ fontSize: '30px' }" />
-        <CodepenCircleFilled :style="{ fontSize: '30px' }" />
-      </div>
-    </CollapseContainer>
-
-    <CollapseContainer title="IconIfy 缁勪欢浣跨敤" class="my-5">
-      <div class="flex justify-around flex-wrap">
-        <Icon icon="ion:layers-outline" :size="30" />
-        <Icon icon="ion:bar-chart-outline" :size="30" />
-        <Icon icon="ion:tv-outline" :size="30" />
-        <Icon icon="ion:settings-outline" :size="30" />
-      </div>
-    </CollapseContainer>
-
-    <CollapseContainer title="svg 闆ⅶ鍥�" class="my-5">
-      <div class="flex justify-around flex-wrap">
-        <SvgIcon name="test" size="32" />
-        <template v-for="item in 6" :key="item">
-          <SvgIcon :name="`dynamic-avatar-${item}`" size="32" />
-        </template>
-      </div>
-    </CollapseContainer>
-
-    <CollapseContainer title="鍥炬爣閫夋嫨鍣�(Iconify)" class="my-5">
-      <div class="flex justify-around flex-wrap">
-        <IconPicker />
-      </div>
-    </CollapseContainer>
-
-    <CollapseContainer title="鍥炬爣閫夋嫨鍣�(Svg)" class="my-5">
-      <div class="flex justify-around flex-wrap">
-        <IconPicker mode="svg" />
-      </div>
-    </CollapseContainer>
-
-    <Alert
-      show-icon
-      message="鎺ㄨ崘浣跨敤Iconify缁勪欢"
-      description="Icon缁勪欢鍩烘湰鍖呭惈鎵�鏈夌殑鍥炬爣,鍦ㄤ笅闈㈢綉鍧�鍐呬綘鍙互鏌ヨ鍒颁綘鎯宠鐨勪换浣曞浘鏍囥�傚苟涓旀墦鍖呭彧浼氭墦鍖呮墍鐢ㄥ埌鐨勫浘鏍囥��"
-    />
-    <a-button type="link" @click="toIconify"> Iconify 鍥炬爣澶у叏 </a-button>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { Alert } from 'ant-design-vue';
-  import {
-    QqCircleFilled,
-    GithubFilled,
-    WechatFilled,
-    AlipayCircleFilled,
-    IeCircleFilled,
-    TaobaoCircleFilled,
-    CodepenCircleFilled,
-  } from '@ant-design/icons-vue';
-
-  import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index';
-
-  import { openWindow } from '/@/utils';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: {
-      PageWrapper,
-      CollapseContainer,
-      GithubFilled,
-      QqCircleFilled,
-      WechatFilled,
-      AlipayCircleFilled,
-      IeCircleFilled,
-      TaobaoCircleFilled,
-      CodepenCircleFilled,
-      Icon,
-      Alert,
-      IconPicker,
-      SvgIcon,
-    },
-    setup() {
-      return {
-        toIconify: () => {
-          openWindow('https://iconify.design/');
-        },
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/img-preview/index.vue b/src/views/demo/feat/img-preview/index.vue
deleted file mode 100644
index 721dc2a..0000000
--- a/src/views/demo/feat/img-preview/index.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-<template>
-  <PageWrapper title="鍥剧墖棰勮绀轰緥">
-    <h1>鏈夐瑙堝浘</h1>
-    <ImagePreview :imageList="imgList" />
-    <a-divider />
-    <h1>鏃犻瑙堝浘</h1>
-    <a-button @click="openImg" type="primary">鐐瑰嚮棰勮</a-button>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { createImgPreview, ImagePreview } from '/@/components/Preview/index';
-  import { PageWrapper } from '/@/components/Page';
-  import { ImageProps } from '/@/components/Preview/src/typing';
-
-  const imgList: ImageProps[] = [
-    { src: 'https://jeecgos.oss-cn-beijing.aliyuncs.com/upload/test/login_1658829954004.png', width: 300 },
-    { src: 'https://jeecgos.oss-cn-beijing.aliyuncs.com/upload/test/home_index_1658830084684.png', width: 300 },
-    { src: 'https://jeecgos.oss-cn-beijing.aliyuncs.com/upload/test/design_1658830200539.png', width: 300 },
-    { src: 'https://static.jeecg.com/upload/test/13_1592320121058.png', width: 300 },
-    { src: 'https://static.jeecg.com/upload/test/16_1592320251436.png', width: 300 },
-  ];
-  export default defineComponent({
-    components: { PageWrapper, ImagePreview },
-    setup() {
-      function openImg() {
-        const onImgLoad = ({ index, url, dom }) => {
-          console.log(`绗�${index + 1}寮犲浘鐗囧凡鍔犺浇锛孶RL涓猴細${url}`, dom);
-        };
-        // 鍙互浣跨敤createImgPreview杩斿洖鐨� PreviewActions 鏉ユ帶鍒堕瑙堥�昏緫锛屽疄鐜扮被浼煎够鐏墖銆佽嚜鍔ㄦ棆杞箣绫荤殑楠氭搷浣�
-        let imageList = imgList.map<string>((i) => i.src);
-        createImgPreview({ imageList: imageList, defaultWidth: 700, rememberState: true, onImgLoad });
-      }
-
-      return { imgList, openImg };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/menu-params/index.vue b/src/views/demo/feat/menu-params/index.vue
deleted file mode 100644
index 1a566b2..0000000
--- a/src/views/demo/feat/menu-params/index.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-<template>
-  <PageWrapper title="甯﹀弬鏁拌彍鍗曪紙璺敱锛�" content="鏀寔澶氱骇鍙傛暟">
-    褰撳墠鍙傛暟锛歿{ params }}
-    <br />
-    杈撳叆鍙傛暟鍒囨崲璺敱锛�
-    <Input v-model:value="value" placeholder="寤鸿涓簎rl鏍囧噯瀛楃锛岃緭鍏ュ悗鐐瑰嚮鍒囨崲" />
-    <a-button type="primary" @click="handleClickGo">鍒囨崲璺敱</a-button>
-    <br />
-    鍒囨崲璺敱鍚�
-    <ul>
-      <li>鍙埛鏂伴〉闈㈡祴璇曡矾鐢卞弬鏁版儏鍐垫槸鍚︽甯搞��</li>
-      <li>鍙簬宸︿晶鑿滃崟涓睍寮�瀛愯彍鍗曪紝鐐瑰嚮娴嬭瘯鍙傛暟鏄惁鎼哄甫姝e父銆�</li>
-    </ul>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { Input } from 'ant-design-vue';
-  import { computed, defineComponent, ref, unref } from 'vue';
-  import { useRouter } from 'vue-router';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    name: 'TestMenu',
-    components: { PageWrapper, Input },
-    setup() {
-      const { currentRoute, replace } = useRouter();
-      const value = ref<string>('');
-
-      const handleClickGo = () => {
-        const { name } = unref(currentRoute);
-        replace({ name: name!, params: { id: unref(value) } });
-      };
-      return {
-        value,
-        handleClickGo,
-        params: computed(() => {
-          return unref(currentRoute).params;
-        }),
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/msg/index.vue b/src/views/demo/feat/msg/index.vue
deleted file mode 100644
index f0eb5a3..0000000
--- a/src/views/demo/feat/msg/index.vue
+++ /dev/null
@@ -1,85 +0,0 @@
-<template>
-  <PageWrapper title="娑堟伅绀轰緥">
-    <CollapseContainer class="w-full h-32 bg-white rounded-md" title="Message">
-      <a-button @click="infoMsg('Info message')" class="mr-2"> Info </a-button>
-      <a-button @click="successMsg('Success message')" class="mr-2" color="success"> Success </a-button>
-      <a-button @click="warningMsg('Warning message')" class="mr-2" color="warning"> Warning </a-button>
-      <a-button @click="errorMsg('Error message')" class="mr-2" color="error"> Error </a-button>
-      <a-button @click="handleLoading" class="mr-2" type="primary"> Loading </a-button>
-    </CollapseContainer>
-
-    <CollapseContainer class="w-full h-32 mt-5 bg-white rounded-md" title="Comfirm">
-      <a-button @click="handleConfirm('info')" class="mr-2"> Info </a-button>
-      <a-button @click="handleConfirm('warning')" color="warning" class="mr-2"> Warning </a-button>
-      <a-button @click="handleConfirm('success')" color="success" class="mr-2"> Success </a-button>
-      <a-button @click="handleConfirm('error')" color="error" class="mr-2"> Error </a-button>
-    </CollapseContainer>
-
-    <CollapseContainer class="w-full h-32 mt-5 bg-white rounded-md" title="Modal">
-      <a-button @click="handleInfoModal" class="mr-2"> Info </a-button>
-      <a-button @click="handleSuccessModal" color="success" class="mr-2"> Success </a-button>
-      <a-button @click="handleErrorModal" color="error" class="mr-2"> Error </a-button>
-      <a-button @click="handleWarningModal" color="warning" class="mr-2"> Warning </a-button>
-    </CollapseContainer>
-
-    <CollapseContainer class="w-full h-32 mt-5 bg-white rounded-md" title="Notification 鐢ㄦ硶涓庝笂闈竴鑷�">
-      <a-button @click="handleNotify" color="success" class="mr-2"> Success </a-button>
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { CollapseContainer, PageWrapper },
-    setup() {
-      const { createMessage, createConfirm, createSuccessModal, createInfoModal, createErrorModal, createWarningModal, notification } = useMessage();
-      const { info, success, warning, error } = createMessage;
-
-      function handleLoading() {
-        createMessage.loading('Loading...');
-      }
-      function handleConfirm(type: 'warning' | 'error' | 'success' | 'info') {
-        createConfirm({
-          iconType: type,
-          title: 'Tip',
-          content: 'content message...',
-        });
-      }
-      function handleSuccessModal() {
-        createSuccessModal({ title: 'Tip', content: 'content message...' });
-      }
-      function handleErrorModal() {
-        createErrorModal({ title: 'Tip', content: 'content message...' });
-      }
-      function handleWarningModal() {
-        createWarningModal({ title: 'Tip', content: 'content message...' });
-      }
-      function handleInfoModal() {
-        createInfoModal({ title: 'Tip', content: 'content message...' });
-      }
-      function handleNotify() {
-        notification.success({
-          message: 'Tip',
-          description: 'content message...',
-        });
-      }
-      return {
-        infoMsg: info,
-        successMsg: success,
-        warningMsg: warning,
-        errorMsg: error,
-        handleLoading,
-        handleConfirm,
-        handleSuccessModal,
-        handleErrorModal,
-        handleWarningModal,
-        handleInfoModal,
-        handleNotify,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/print/index.vue b/src/views/demo/feat/print/index.vue
deleted file mode 100644
index 723e201..0000000
--- a/src/views/demo/feat/print/index.vue
+++ /dev/null
@@ -1,46 +0,0 @@
-<template>
-  <PageWrapper title="鎵撳嵃绀轰緥">
-    <CollapseContainer title="json鎵撳嵃琛ㄦ牸">
-      <a-button type="primary" @click="jsonPrint">鎵撳嵃</a-button>
-    </CollapseContainer>
-
-    <a-button type="primary" class="mt-5" @click="imagePrint">Image Print</a-button>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { CollapseContainer } from '/@/components/Container/index';
-
-  import printJS from 'print-js';
-
-  export default defineComponent({
-    name: 'AppLogo',
-    components: { PageWrapper, CollapseContainer },
-    setup() {
-      function jsonPrint() {
-        printJS({
-          printable: [
-            { name: 'll', email: '123@gmail.com', phone: '123' },
-            { name: 'qq', email: '456@gmail.com', phone: '456' },
-          ],
-          properties: ['name', 'email', 'phone'],
-          type: 'json',
-        });
-      }
-
-      function imagePrint() {
-        printJS({
-          printable: ['https://anncwb.github.io/anncwb/images/preview1.png', 'https://anncwb.github.io/anncwb/images/preview2.png'],
-          type: 'image',
-          header: 'Multiple Images',
-          imageStyle: 'width:100%;',
-        });
-      }
-      return {
-        jsonPrint,
-        imagePrint,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/ripple/index.vue b/src/views/demo/feat/ripple/index.vue
deleted file mode 100644
index afd4b0a..0000000
--- a/src/views/demo/feat/ripple/index.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-<template>
-  <PageWrapper title="Ripple绀轰緥">
-    <div class="demo-box" v-ripple> content </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import RippleDirective from '/@/directives/ripple';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { PageWrapper },
-    directives: {
-      Ripple: RippleDirective,
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .demo-box {
-    display: flex;
-    width: 300px;
-    height: 300px;
-    font-size: 24px;
-    color: #fff;
-    background-color: #408ede;
-    border-radius: 10px;
-    justify-content: center;
-    align-items: center;
-  }
-</style>
diff --git a/src/views/demo/feat/session-timeout/index.vue b/src/views/demo/feat/session-timeout/index.vue
deleted file mode 100644
index 5ad7a92..0000000
--- a/src/views/demo/feat/session-timeout/index.vue
+++ /dev/null
@@ -1,51 +0,0 @@
-<template>
-  <PageWrapper title="鐧诲綍杩囨湡绀轰緥" content="鐢ㄦ埛鐧诲綍杩囨湡绀轰緥锛屼笉鍐嶈烦杞櫥褰曢〉锛岀洿鎺ョ敓鎴愰〉闈㈣鐩栧綋鍓嶉〉闈紝鏂逛究淇濇寔杩囨湡鍓嶇殑鐢ㄦ埛鐘舵�侊紒">
-    <a-card title="璇风偣鍑讳笅闈㈢殑鎸夐挳璁块棶娴嬭瘯鎺ュ彛" extra="鎵�璁块棶鐨勬帴鍙d細杩斿洖Token杩囨湡鍝嶅簲">
-      <a-card-grid style="width: 50%; text-align: center">
-        <a-button type="primary" @click="test1">HttpStatus == 401</a-button>
-      </a-card-grid>
-      <a-card-grid style="width: 50%; text-align: center">
-        <span></span>
-        <a-button class="ml-4" type="primary" @click="test2">Response.code == 401</a-button>
-      </a-card-grid>
-    </a-card>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { useUserStore } from '/@/store/modules/user';
-
-  import { sessionTimeoutApi, tokenExpiredApi } from '/@/api/demo/account';
-  import { Card } from 'ant-design-vue';
-
-  export default defineComponent({
-    name: 'TestSessionTimeout',
-    components: { ACardGrid: Card.Grid, ACard: Card, PageWrapper },
-    setup() {
-      const userStore = useUserStore();
-      async function test1() {
-        // 绀轰緥缃戠珯鐢熶骇鐜鐢ㄧ殑鏄痬ock鏁版嵁锛屼笉鑳借繑鍥濰ttp鐘舵�佺爜锛�
-        // 鎵�浠ュ湪鐢熶骇鐜鐩存帴鏀瑰彉鐘舵�佹潵杈惧埌娴嬭瘯鏁堟灉
-        if (import.meta.env.PROD) {
-          userStore.setToken(undefined);
-          userStore.setSessionTimeout(true);
-        } else {
-          // 杩欎釜api浼氳繑鍥炵姸鎬佺爜涓�401鐨勫搷搴�
-          await sessionTimeoutApi();
-        }
-      }
-
-      async function test2() {
-        // 杩欎釜api浼氳繑鍥瀋ode涓�401鐨刯son鏁版嵁锛孒ttp鐘舵�佺爜涓�200
-        try {
-          await tokenExpiredApi();
-        } catch (err) {
-          console.log('鎺ュ彛璁块棶閿欒锛�', (err as Error).message || '閿欒');
-        }
-      }
-
-      return { test1, test2 };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/tab-params/index.vue b/src/views/demo/feat/tab-params/index.vue
deleted file mode 100644
index c2e06fe..0000000
--- a/src/views/demo/feat/tab-params/index.vue
+++ /dev/null
@@ -1,27 +0,0 @@
-<template>
-  <PageWrapper title="甯﹀弬鏁版爣绛鹃〉" content="鏀寔甯﹀弬鏁板tab缂撳瓨">
-    Current Param : {{ params }}
-    <br />
-    Keep Alive
-    <Input />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { computed, defineComponent, unref } from 'vue';
-  import { useRouter } from 'vue-router';
-  import { PageWrapper } from '/@/components/Page';
-  import { Input } from 'ant-design-vue';
-
-  export default defineComponent({
-    name: 'TestTab',
-    components: { PageWrapper, Input },
-    setup() {
-      const { currentRoute } = useRouter();
-      return {
-        params: computed(() => {
-          return unref(currentRoute).params;
-        }),
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/tabs/TabDetail.vue b/src/views/demo/feat/tabs/TabDetail.vue
deleted file mode 100644
index d768cca..0000000
--- a/src/views/demo/feat/tabs/TabDetail.vue
+++ /dev/null
@@ -1,28 +0,0 @@
-<template>
-  <PageWrapper title="Tab璇︽儏椤甸潰">
-    <div>{{ index }} - 璇︽儏椤靛唴瀹瑰湪姝�</div>
-  </PageWrapper>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { useTabs } from '/@/hooks/web/useTabs';
-  import { useRoute } from 'vue-router';
-
-  export default defineComponent({
-    name: 'TabDetail',
-    components: { PageWrapper },
-    setup() {
-      const route = useRoute();
-      const index = route.params?.id ?? -1;
-      const { setTitle } = useTabs();
-
-      // 璁剧疆鏍囪瘑
-      setTitle(`No.${index} - 璇︽儏淇℃伅`);
-      return {
-        index,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/tabs/index.vue b/src/views/demo/feat/tabs/index.vue
deleted file mode 100644
index 53422c3..0000000
--- a/src/views/demo/feat/tabs/index.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-  <PageWrapper title="鏍囩椤垫搷浣滅ず渚�">
-    <CollapseContainer title="鍦ㄤ笅闈㈣緭鍏ユ杈撳叆鏂囨湰,鍒囨崲鍚庡洖鏉ュ唴瀹逛細淇濆瓨">
-      <a-alert banner message="璇ユ搷浣滀笉浼氬奖鍝嶉〉闈㈡爣棰橈紝浠呬慨鏀筎ab鏍囬" />
-      <div class="mt-2 flex flex-grow-0">
-        <a-button class="mr-2" @click="setTabTitle" type="primary"> 璁剧疆Tab鏍囬 </a-button>
-        <a-input placeholder="璇疯緭鍏�" v-model:value="title" class="mr-4 w-12" />
-      </div>
-    </CollapseContainer>
-
-    <CollapseContainer class="mt-4" title="鏍囩椤垫搷浣�">
-      <a-button class="mr-2" @click="closeAll"> 鍏抽棴鎵�鏈� </a-button>
-      <a-button class="mr-2" @click="closeLeft"> 鍏抽棴宸︿晶 </a-button>
-      <a-button class="mr-2" @click="closeRight"> 鍏抽棴鍙充晶 </a-button>
-      <a-button class="mr-2" @click="closeOther"> 鍏抽棴鍏朵粬 </a-button>
-      <a-button class="mr-2" @click="closeCurrent"> 鍏抽棴褰撳墠 </a-button>
-      <a-button class="mr-2" @click="refreshPage"> 鍒锋柊褰撳墠 </a-button>
-    </CollapseContainer>
-
-    <CollapseContainer class="mt-4" title="鏍囩椤靛鐢ㄨ秴鍑洪檺鍒惰嚜鍔ㄥ叧闂�(浣跨敤鍦烘櫙: 鍔ㄦ�佽矾鐢�)">
-      <a-button v-for="index in 6" :key="index" class="mr-2" @click="toDetail(index)"> 鎵撳紑{{ index }}璇︽儏椤� </a-button>
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { CollapseContainer } from '/@/components/Container';
-  import { useTabs } from '/@/hooks/web/useTabs';
-  import { PageWrapper } from '/@/components/Page';
-  import { Input, Alert } from 'ant-design-vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useGo } from '/@/hooks/web/usePage';
-
-  export default defineComponent({
-    name: 'TabsDemo',
-    components: { CollapseContainer, PageWrapper, [Input.name]: Input, [Alert.name]: Alert },
-    setup() {
-      const go = useGo();
-      const title = ref<string>('');
-      const { closeAll, closeLeft, closeRight, closeOther, closeCurrent, refreshPage, setTitle } = useTabs();
-      const { createMessage } = useMessage();
-      function setTabTitle() {
-        if (title.value) {
-          setTitle(title.value);
-        } else {
-          createMessage.error('璇疯緭鍏ヨ璁剧疆鐨凾ab鏍囬锛�');
-        }
-      }
-
-      function toDetail(index: number) {
-        go(`/comp/basic/tabs/detail/${index}`);
-      }
-      return {
-        closeAll,
-        closeLeft,
-        closeRight,
-        closeOther,
-        closeCurrent,
-        toDetail,
-        refreshPage,
-        setTabTitle,
-        title,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/watermark/index.vue b/src/views/demo/feat/watermark/index.vue
deleted file mode 100644
index b1acd7e..0000000
--- a/src/views/demo/feat/watermark/index.vue
+++ /dev/null
@@ -1,28 +0,0 @@
-<template>
-  <PageWrapper title="姘村嵃绀轰緥">
-    <CollapseContainer class="w-full h-32 bg-white rounded-md" title="Global WaterMark">
-      <a-button type="primary" class="mr-2" @click="setWatermark('WaterMark Info')"> Create </a-button>
-      <a-button color="error" class="mr-2" @click="clear"> Clear </a-button>
-      <a-button color="warning" class="mr-2" @click="setWatermark('WaterMark Info New')"> Reset </a-button>
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { useWatermark } from '/@/hooks/web/useWatermark';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { CollapseContainer, PageWrapper },
-    setup() {
-      const areaRef = ref<Nullable<HTMLElement>>(null);
-      const { setWatermark, clear } = useWatermark();
-      return {
-        setWatermark,
-        clear,
-        areaRef,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/feat/ws/index.vue b/src/views/demo/feat/ws/index.vue
deleted file mode 100644
index 348fe33..0000000
--- a/src/views/demo/feat/ws/index.vue
+++ /dev/null
@@ -1,120 +0,0 @@
-<template>
-  <PageWrapper title="WebSocket 绀轰緥">
-    <div class="flex">
-      <div class="w-1/3 bg-white p-4">
-        <div class="flex items-center">
-          <span class="text-lg font-medium mr-4"> 杩炴帴鐘舵��: </span>
-          <Tag :color="getTagColor">{{ status }}</Tag>
-        </div>
-        <hr class="my-4" />
-
-        <div class="flex">
-          <a-input v-model:value="server" disabled>
-            <template #addonBefore> 鏈嶅姟鍦板潃 </template>
-          </a-input>
-          <a-button :type="getIsOpen ? 'danger' : 'primary'" @click="toggle">
-            {{ getIsOpen ? '鍏抽棴杩炴帴' : '寮�鍚繛鎺�' }}
-          </a-button>
-        </div>
-        <p class="text-lg font-medium mt-4">璁剧疆</p>
-        <hr class="my-4" />
-
-        <InputTextArea placeholder="闇�瑕佸彂閫佸埌鏈嶅姟鍣ㄧ殑鍐呭" :disabled="!getIsOpen" v-model:value="sendValue" allowClear />
-
-        <a-button type="primary" block class="mt-4" :disabled="!getIsOpen" @click="handlerSend"> 鍙戦�� </a-button>
-      </div>
-
-      <div class="w-2/3 bg-white ml-4 p-4">
-        <span class="text-lg font-medium mr-4"> 娑堟伅璁板綍: </span>
-        <hr class="my-4" />
-
-        <div class="max-h-80 overflow-auto">
-          <ul>
-            <li v-for="item in getList" class="mt-2" :key="item.time">
-              <div class="flex items-center">
-                <span class="mr-2 text-primary font-medium">鏀跺埌娑堟伅:</span>
-                <span>{{ formatToDateTime(item.time) }}</span>
-              </div>
-              <div>
-                {{ item.res }}
-              </div>
-            </li>
-          </ul>
-        </div>
-      </div>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, reactive, watchEffect, computed, toRefs } from 'vue';
-  import { Tag, Input } from 'ant-design-vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { useWebSocket } from '@vueuse/core';
-  import { formatToDateTime } from '/@/utils/dateUtil';
-
-  export default defineComponent({
-    components: {
-      PageWrapper,
-      [Input.name]: Input,
-      InputTextArea: Input.TextArea,
-      Tag,
-    },
-    setup() {
-      const state = reactive({
-        server: 'ws://localhost:3300/test',
-        sendValue: '',
-        recordList: [] as { id: number; time: number; res: string }[],
-      });
-
-      const { status, data, send, close, open } = useWebSocket(state.server, {
-        autoReconnect: false,
-        heartbeat: true,
-      });
-
-      watchEffect(() => {
-        if (data.value) {
-          try {
-            const res = JSON.parse(data.value);
-            state.recordList.push(res);
-          } catch (error) {
-            state.recordList.push({
-              res: data.value,
-              id: Math.ceil(Math.random() * 1000),
-              time: new Date().getTime(),
-            });
-          }
-        }
-      });
-
-      const getIsOpen = computed(() => status.value === 'OPEN');
-      const getTagColor = computed(() => (getIsOpen.value ? 'success' : 'red'));
-
-      const getList = computed(() => {
-        return [...state.recordList].reverse();
-      });
-
-      function handlerSend() {
-        send(state.sendValue);
-        state.sendValue = '';
-      }
-
-      function toggle() {
-        if (getIsOpen.value) {
-          close();
-        } else {
-          open();
-        }
-      }
-      return {
-        status,
-        formatToDateTime,
-        ...toRefs(state),
-        handlerSend,
-        getList,
-        toggle,
-        getIsOpen,
-        getTagColor,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/form/AdvancedForm.vue b/src/views/demo/form/AdvancedForm.vue
deleted file mode 100644
index c1e7f75..0000000
--- a/src/views/demo/form/AdvancedForm.vue
+++ /dev/null
@@ -1,190 +0,0 @@
-<template>
-  <PageWrapper title="鍙姌鍙犺〃鍗曠ず渚�">
-    <CollapseContainer title="鍩虹鏀剁缉绀轰緥">
-      <BasicForm @register="register" />
-    </CollapseContainer>
-
-    <CollapseContainer title="瓒呰繃3琛岃嚜鍔ㄦ敹璧凤紝鎶樺彔鏃朵繚鐣�2琛�" class="mt-4">
-      <BasicForm @register="register1" />
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
-  import { CollapseContainer } from '/@/components/Container';
-  import { PageWrapper } from '/@/components/Page';
-
-  const getSchamas = (): FormSchema[] => {
-    return [
-      {
-        field: 'field1',
-        component: 'Input',
-        label: '瀛楁1',
-        colProps: {
-          span: 8,
-        },
-        componentProps: {
-          placeholder: '鑷畾涔塸laceholder',
-          onChange: (e: any) => {
-            console.log(e);
-          },
-        },
-      },
-      {
-        field: 'field2',
-        component: 'Input',
-        label: '瀛楁2',
-        colProps: {
-          span: 8,
-        },
-      },
-      {
-        field: 'field3',
-        component: 'DatePicker',
-        label: '瀛楁3',
-        colProps: {
-          span: 8,
-        },
-      },
-      {
-        field: 'field4',
-        component: 'Select',
-        label: '瀛楁4',
-        colProps: {
-          span: 8,
-        },
-        componentProps: {
-          options: [
-            {
-              label: '閫夐」1',
-              value: '1',
-              key: '1',
-            },
-            {
-              label: '閫夐」2',
-              value: '2',
-              key: '2',
-            },
-          ],
-        },
-      },
-      {
-        field: 'field5',
-        component: 'CheckboxGroup',
-        label: '瀛楁5',
-        colProps: {
-          span: 8,
-        },
-        componentProps: {
-          options: [
-            {
-              label: '閫夐」1',
-              value: '1',
-            },
-            {
-              label: '閫夐」2',
-              value: '2',
-            },
-          ],
-        },
-      },
-      // {
-      //   field: 'field7',
-      //   component: 'RadioGroup',
-      //   label: '瀛楁7',
-      //   colProps: {
-      //     span: 8,
-      //   },
-      //   componentProps: {
-      //     options: [
-      //       {
-      //         label: '閫夐」1',
-      //         value: '1',
-      //       },
-      //       {
-      //         label: '閫夐」2',
-      //         value: '2',
-      //       },
-      //     ],
-      //   },
-      // },
-    ];
-  };
-
-  function getAppendSchemas(): FormSchema[] {
-    return [
-      {
-        field: 'field10',
-        component: 'Input',
-        label: '瀛楁10',
-        colProps: {
-          span: 8,
-        },
-      },
-      {
-        field: 'field11',
-        component: 'Input',
-        label: '瀛楁11',
-        colProps: {
-          span: 8,
-        },
-      },
-      {
-        field: 'field12',
-        component: 'Input',
-        label: '瀛楁12',
-        colProps: {
-          span: 8,
-        },
-      },
-      {
-        field: 'field13',
-        component: 'Input',
-        label: '瀛楁13',
-        colProps: {
-          span: 8,
-        },
-      },
-    ];
-  }
-  export default defineComponent({
-    components: { BasicForm, CollapseContainer, PageWrapper },
-    setup() {
-      const [register] = useForm({
-        labelWidth: 120,
-        schemas: getSchamas(),
-        actionColOptions: {
-          span: 24,
-        },
-        compact: true,
-        showAdvancedButton: true,
-      });
-      const extraSchemas: FormSchema[] = [];
-      for (let i = 14; i < 30; i++) {
-        extraSchemas.push({
-          field: 'field' + i,
-          component: 'Input',
-          label: '瀛楁' + i,
-          colProps: {
-            span: 8,
-          },
-        });
-      }
-      const [register1] = useForm({
-        labelWidth: 120,
-        schemas: [...getSchamas(), ...getAppendSchemas(), { field: '', component: 'Divider', label: '鏇村瀛楁' }, ...extraSchemas],
-        actionColOptions: {
-          span: 24,
-        },
-        compact: true,
-        showAdvancedButton: true,
-        alwaysShowLines: 2,
-      });
-      return {
-        register,
-        register1,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/form/AppendForm.vue b/src/views/demo/form/AppendForm.vue
deleted file mode 100644
index 91ee937..0000000
--- a/src/views/demo/form/AppendForm.vue
+++ /dev/null
@@ -1,118 +0,0 @@
-<template>
-  <PageWrapper title="琛ㄥ崟澧炲垹绀轰緥">
-    <CollapseContainer title="琛ㄥ崟澧炲垹">
-      <BasicForm @register="register" @submit="handleSubmit">
-        <template #add="{ field }">
-          <Button v-if="Number(field) === 0" @click="add">+</Button>
-          <Button v-if="field > 0" @click="del(field)">-</Button>
-        </template>
-      </BasicForm>
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { Input } from 'ant-design-vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { Button } from '/@/components/Button';
-
-  export default defineComponent({
-    components: { BasicForm, CollapseContainer, PageWrapper, [Input.name]: Input, Button },
-    setup() {
-      const [register, { appendSchemaByField, removeSchemaByFiled, validate }] = useForm({
-        schemas: [
-          {
-            field: 'field0a',
-            component: 'Input',
-            label: '瀛楁0',
-            colProps: {
-              span: 8,
-            },
-            required: true,
-          },
-          {
-            field: 'field0b',
-            component: 'Input',
-            label: '瀛楁0',
-            colProps: {
-              span: 8,
-            },
-            required: true,
-          },
-          {
-            field: '0',
-            component: 'Input',
-            label: ' ',
-            colProps: {
-              span: 8,
-            },
-            slot: 'add',
-          },
-        ],
-        labelWidth: 100,
-        actionColOptions: { span: 24 },
-      });
-
-      async function handleSubmit() {
-        try {
-          const data = await validate();
-          console.log(data);
-        } catch (e) {
-          console.log(e);
-        }
-      }
-
-      const n = ref(1);
-
-      function add() {
-        appendSchemaByField(
-          {
-            field: `field${n.value}a`,
-            component: 'Input',
-            label: '瀛楁' + n.value,
-            colProps: {
-              span: 8,
-            },
-            required: true,
-          },
-          ''
-        );
-        appendSchemaByField(
-          {
-            field: `field${n.value}b`,
-            component: 'Input',
-            label: '瀛楁' + n.value,
-            colProps: {
-              span: 8,
-            },
-            required: true,
-          },
-          ''
-        );
-
-        appendSchemaByField(
-          {
-            field: `${n.value}`,
-            component: 'Input',
-            label: ' ',
-            colProps: {
-              span: 8,
-            },
-            slot: 'add',
-          },
-          ''
-        );
-        n.value++;
-      }
-
-      function del(field) {
-        removeSchemaByFiled([`field${field}a`, `field${field}b`, `${field}`]);
-        n.value--;
-      }
-
-      return { register, handleSubmit, add, del };
-    },
-  });
-</script>
diff --git a/src/views/demo/form/CustomerForm.vue b/src/views/demo/form/CustomerForm.vue
deleted file mode 100644
index abb384d..0000000
--- a/src/views/demo/form/CustomerForm.vue
+++ /dev/null
@@ -1,85 +0,0 @@
-<template>
-  <PageWrapper title="鑷畾涔夌粍浠剁ず渚�">
-    <CollapseContainer title="鑷畾涔夎〃鍗�">
-      <BasicForm @register="register" @submit="handleSubmit">
-        <template #f3="{ model, field }">
-          <a-input v-model:value="model[field]" placeholder="鑷畾涔塻lot" />
-        </template>
-      </BasicForm>
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, h } from 'vue';
-  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { Input } from 'ant-design-vue';
-  import { PageWrapper } from '/@/components/Page';
-
-  const schemas: FormSchema[] = [
-    {
-      field: 'field1',
-      component: 'Input',
-      label: 'render鏂瑰紡',
-      colProps: {
-        span: 8,
-      },
-      rules: [{ required: true }],
-      render: ({ model, field }) => {
-        return h(Input, {
-          placeholder: '璇疯緭鍏�',
-          value: model[field],
-          onChange: (e: ChangeEvent) => {
-            model[field] = e.target.value;
-          },
-        });
-      },
-    },
-    {
-      field: 'field2',
-      component: 'Input',
-      label: 'render缁勪欢slot',
-      colProps: {
-        span: 8,
-      },
-      rules: [{ required: true }],
-      renderComponentContent: () => {
-        return {
-          suffix: () => 'suffix',
-        };
-      },
-    },
-    {
-      field: 'field3',
-      component: 'Input',
-      label: '鑷畾涔塖lot',
-      slot: 'f3',
-      colProps: {
-        span: 8,
-      },
-      rules: [{ required: true }],
-    },
-  ];
-  export default defineComponent({
-    components: { BasicForm, CollapseContainer, PageWrapper, [Input.name]: Input },
-    setup() {
-      const { createMessage } = useMessage();
-      const [register, { setProps }] = useForm({
-        labelWidth: 120,
-        schemas,
-        actionColOptions: {
-          span: 24,
-        },
-      });
-      return {
-        register,
-        schemas,
-        handleSubmit: (values: any) => {
-          createMessage.success('click search,values:' + JSON.stringify(values));
-        },
-        setProps,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/form/DynamicForm.vue b/src/views/demo/form/DynamicForm.vue
deleted file mode 100644
index 077904c..0000000
--- a/src/views/demo/form/DynamicForm.vue
+++ /dev/null
@@ -1,258 +0,0 @@
-<template>
-  <PageWrapper title="鍔ㄦ�佽〃鍗曠ず渚�">
-    <div class="mb-4">
-      <a-button @click="changeLabel3" class="mr-2"> 鏇存敼瀛楁3label </a-button>
-      <a-button @click="changeLabel34" class="mr-2"> 鍚屾椂鏇存敼瀛楁3,4label </a-button>
-      <a-button @click="appendField" class="mr-2"> 寰�瀛楁3鍚庨潰鎻掑叆瀛楁10 </a-button>
-      <a-button @click="deleteField" class="mr-2"> 鍒犻櫎瀛楁11 </a-button>
-    </div>
-    <CollapseContainer title="鍔ㄦ�佽〃鍗曠ず渚�,鍔ㄦ�佹牴鎹〃鍗曞唴鍏朵粬鍊兼敼鍙�">
-      <BasicForm @register="register" />
-    </CollapseContainer>
-
-    <CollapseContainer class="mt-5" title="componentProps鍔ㄦ�佹敼鍙�">
-      <BasicForm @register="register1" />
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { PageWrapper } from '/@/components/Page';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  const { hasPermission } = usePermission();
-  const schemas: FormSchema[] = [
-    {
-      field: 'field5',
-      component: 'Switch',
-      label: '鏄惁鏄剧ず瀛楁1(css鎺у埗)',
-      defaultValue: true,
-      colProps: {
-        span: 12,
-      },
-      labelWidth: 200,
-    },
-    {
-      field: 'field1',
-      component: 'Input',
-      label: '瀛楁1',
-      colProps: {
-        span: 12,
-      },
-      show: ({ values }) => {
-        return hasPermission('test001');
-      },
-    },
-    {
-      field: 'field6',
-      component: 'Switch',
-      label: '鏄惁鏄剧ず瀛楁2(dom鎺у埗)',
-      defaultValue: true,
-      colProps: {
-        span: 12,
-      },
-      labelWidth: 200,
-    },
-    {
-      field: 'field2',
-      component: 'Input',
-      label: '瀛楁2',
-      colProps: {
-        span: 12,
-      },
-      ifShow: ({ values }) => {
-        return !!values.field6;
-      },
-    },
-    {
-      field: 'field7',
-      component: 'Switch',
-      label: '鏄惁绂佺敤瀛楁3',
-      colProps: {
-        span: 12,
-      },
-      labelWidth: 200,
-    },
-    {
-      field: 'field3',
-      component: 'DatePicker',
-      label: '瀛楁3',
-      colProps: {
-        span: 12,
-      },
-      dynamicDisabled: ({ values }) => {
-        return !!values.field7;
-      },
-    },
-    {
-      field: 'field8',
-      component: 'Switch',
-      label: '瀛楁4鏄惁蹇呭~',
-      colProps: {
-        span: 12,
-      },
-      labelWidth: 200,
-    },
-    {
-      field: 'field4',
-      component: 'Select',
-      label: '瀛楁4',
-      colProps: {
-        span: 12,
-      },
-      dynamicRules: ({ values }) => {
-        return values.field8 ? [{ required: true, message: '瀛楁蹇呭~' }] : [];
-      },
-      componentProps: {
-        options: [
-          {
-            label: '閫夐」1',
-            value: '1',
-            key: '1',
-          },
-          {
-            label: '閫夐」2',
-            value: '2',
-            key: '2',
-          },
-        ],
-      },
-    },
-    {
-      field: 'field11',
-      component: 'DatePicker',
-      label: '瀛楁11',
-      colProps: {
-        span: 8,
-      },
-    },
-  ];
-
-  const schemas1: FormSchema[] = [
-    {
-      field: 'f1',
-      component: 'Input',
-      label: 'F1',
-      colProps: {
-        span: 12,
-      },
-      labelWidth: 200,
-      componentProps: ({ formModel }) => {
-        return {
-          placeholder: '鍚屾f2鐨勫�间负f1',
-          onChange: (e: ChangeEvent) => {
-            formModel.f2 = e.target.value;
-          },
-        };
-      },
-    },
-    {
-      field: 'f2',
-      component: 'Input',
-      label: 'F2',
-      colProps: {
-        span: 12,
-      },
-      labelWidth: 200,
-      componentProps: { disabled: true },
-    },
-    {
-      field: 'f3',
-      component: 'Input',
-      label: 'F3',
-      colProps: {
-        span: 12,
-      },
-      labelWidth: 200,
-      // @ts-ignore
-      componentProps: ({ formActionType }) => {
-        return {
-          placeholder: '鍊兼敼鍙樻椂鎵ц鏌ヨ,鏌ョ湅鎺у埗鍙�',
-          onChange: async () => {
-            const { validate } = formActionType;
-            // tableAction鍙�傜敤浜庡湪琛ㄦ牸鍐呭紑鍚〃鍗曠殑渚嬪瓙
-            // const { reload } = tableAction;
-            const res = await validate();
-            console.log(res);
-          },
-        };
-      },
-    },
-  ];
-
-  export default defineComponent({
-    components: { BasicForm, CollapseContainer, PageWrapper },
-    setup() {
-      const [register, { setProps, updateSchema, appendSchemaByField, removeSchemaByFiled }] = useForm({
-        labelWidth: 120,
-        schemas,
-        //绂佺敤琛ㄥ崟鎵�鏈夌粍浠�
-        disabled: true,
-        labelCol: {
-          xs: { span: 24 },
-          sm: { span: 6 },
-        },
-        wrapperCol: {
-          xs: { span: 24 },
-          sm: { span: 18 },
-        },
-        actionColOptions: {
-          span: 24,
-        },
-      });
-      const [register1] = useForm({
-        labelWidth: 120,
-        schemas: schemas1,
-        actionColOptions: {
-          span: 24,
-        },
-      });
-      function changeLabel3() {
-        updateSchema({
-          field: 'field3',
-          label: '瀛楁3 New',
-        });
-      }
-      function changeLabel34() {
-        updateSchema([
-          {
-            field: 'field3',
-            label: '瀛楁3 New++',
-          },
-          {
-            field: 'field4',
-            label: '瀛楁4 New++',
-          },
-        ]);
-      }
-
-      function appendField() {
-        appendSchemaByField(
-          {
-            field: 'field10',
-            label: '瀛楁10',
-            component: 'Input',
-            colProps: {
-              span: 8,
-            },
-          },
-          'field3'
-        );
-      }
-      function deleteField() {
-        removeSchemaByFiled('field11');
-      }
-      return {
-        register,
-        register1,
-        schemas,
-        setProps,
-        changeLabel3,
-        changeLabel34,
-        appendField,
-        deleteField,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/form/RefForm.vue b/src/views/demo/form/RefForm.vue
deleted file mode 100644
index 29b2136..0000000
--- a/src/views/demo/form/RefForm.vue
+++ /dev/null
@@ -1,174 +0,0 @@
-<template>
-  <PageWrapper title="Ref鎿嶄綔绀轰緥">
-    <div class="mb-4">
-      <a-button @click="setProps({ labelWidth: 150 })" class="mr-2"> 鏇存敼labelWidth </a-button>
-      <a-button @click="setProps({ labelWidth: 120 })" class="mr-2"> 杩樺師labelWidth </a-button>
-      <a-button @click="setProps({ size: 'large' })" class="mr-2"> 鏇存敼Size </a-button>
-      <a-button @click="setProps({ size: 'default' })" class="mr-2"> 杩樺師Size </a-button>
-      <a-button @click="setProps({ disabled: true })" class="mr-2"> 绂佺敤琛ㄥ崟 </a-button>
-      <a-button @click="setProps({ disabled: false })" class="mr-2"> 瑙i櫎绂佺敤 </a-button>
-      <a-button @click="setProps({ compact: true })" class="mr-2"> 绱у噾琛ㄥ崟 </a-button>
-      <a-button @click="setProps({ compact: false })" class="mr-2"> 杩樺師姝e父闂磋窛 </a-button>
-      <a-button @click="setProps({ actionColOptions: { span: 8 } })" class="mr-2"> 鎿嶄綔鎸夐挳浣嶇疆 </a-button>
-    </div>
-    <div class="mb-4">
-      <a-button @click="setProps({ showActionButtonGroup: false })" class="mr-2"> 闅愯棌鎿嶄綔鎸夐挳 </a-button>
-      <a-button @click="setProps({ showActionButtonGroup: true })" class="mr-2"> 鏄剧ず鎿嶄綔鎸夐挳 </a-button>
-      <a-button @click="setProps({ showResetButton: false })" class="mr-2"> 闅愯棌閲嶇疆鎸夐挳 </a-button>
-      <a-button @click="setProps({ showResetButton: true })" class="mr-2"> 鏄剧ず閲嶇疆鎸夐挳 </a-button>
-      <a-button @click="setProps({ showSubmitButton: false })" class="mr-2"> 闅愯棌鏌ヨ鎸夐挳 </a-button>
-      <a-button @click="setProps({ showSubmitButton: true })" class="mr-2"> 鏄剧ず鏌ヨ鎸夐挳 </a-button>
-      <a-button
-        @click="
-          setProps({
-            resetButtonOptions: {
-              disabled: true,
-              text: '閲嶇疆New',
-            },
-          })
-        "
-        class="mr-2"
-      >
-        淇敼閲嶇疆鎸夐挳
-      </a-button>
-      <a-button
-        @click="
-          setProps({
-            submitButtonOptions: {
-              disabled: true,
-              loading: true,
-            },
-          })
-        "
-        class="mr-2"
-      >
-        淇敼鏌ヨ鎸夐挳
-      </a-button>
-    </div>
-    <CollapseContainer title="浣跨敤ref璋冪敤琛ㄥ崟鍐呴儴鍑芥暟绀轰緥">
-      <BasicForm :schemas="schemas" ref="formElRef" :labelWidth="100" @submit="handleSubmit" :actionColOptions="{ span: 24 }" />
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { BasicForm, FormSchema, FormActionType, FormProps } from '/@/components/Form/index';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { PageWrapper } from '/@/components/Page';
-
-  const schemas: FormSchema[] = [
-    {
-      field: 'field1',
-      component: 'Input',
-      label: '瀛楁1',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        placeholder: '鑷畾涔塸laceholder',
-        onChange: (e: any) => {
-          console.log(e);
-        },
-      },
-    },
-    {
-      field: 'field2',
-      component: 'Input',
-      label: '瀛楁2',
-      colProps: {
-        span: 8,
-      },
-    },
-    {
-      field: 'field3',
-      component: 'DatePicker',
-      label: '瀛楁3',
-      colProps: {
-        span: 8,
-      },
-    },
-    {
-      field: 'field4',
-      component: 'Select',
-      label: '瀛楁4',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        options: [
-          {
-            label: '閫夐」1',
-            value: '1',
-            key: '1',
-          },
-          {
-            label: '閫夐」2',
-            value: '2',
-            key: '2',
-          },
-        ],
-      },
-    },
-    {
-      field: 'field5',
-      component: 'CheckboxGroup',
-      label: '瀛楁5',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        options: [
-          {
-            label: '閫夐」1',
-            value: '1',
-          },
-          {
-            label: '閫夐」2',
-            value: '2',
-          },
-        ],
-      },
-    },
-    {
-      field: 'field7',
-      component: 'RadioGroup',
-      label: '瀛楁7',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        options: [
-          {
-            label: '閫夐」1',
-            value: '1',
-          },
-          {
-            label: '閫夐」2',
-            value: '2',
-          },
-        ],
-      },
-    },
-  ];
-
-  export default defineComponent({
-    components: { BasicForm, CollapseContainer, PageWrapper },
-    setup() {
-      const formElRef = ref<Nullable<FormActionType>>(null);
-      const { createMessage } = useMessage();
-      return {
-        formElRef,
-        schemas,
-        handleSubmit: (values: any) => {
-          createMessage.success('click search,values:' + JSON.stringify(values));
-        },
-        setProps(props: FormProps) {
-          const formEl = formElRef.value;
-          if (!formEl) return;
-          formEl.setProps(props);
-        },
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/form/RuleForm.vue b/src/views/demo/form/RuleForm.vue
deleted file mode 100644
index 958f496..0000000
--- a/src/views/demo/form/RuleForm.vue
+++ /dev/null
@@ -1,260 +0,0 @@
-<template>
-  <PageWrapper title="琛ㄥ崟鏍¢獙绀轰緥">
-    <div class="mb-4">
-      <a-button @click="validateForm" class="mr-2"> 鎵嬪姩鏍¢獙琛ㄥ崟</a-button>
-      <a-button @click="resetValidate" class="mr-2"> 娓呯┖鏍¢獙淇℃伅</a-button>
-      <a-button @click="getFormValues" class="mr-2"> 鑾峰彇琛ㄥ崟鍊�</a-button>
-      <a-button @click="setFormValues" class="mr-2"> 璁剧疆琛ㄥ崟鍊�</a-button>
-      <a-button @click="resetFields" class="mr-2"> 閲嶇疆</a-button>
-    </div>
-    <CollapseContainer title="琛ㄥ崟鏍¢獙">
-      <BasicForm @register="register" @submit="handleSubmit" />
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
-  import { CollapseContainer } from '/@/components/Container';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { PageWrapper } from '/@/components/Page';
-  import { isAccountExist } from '/@/api/demo/system';
-
-  const schemas: FormSchema[] = [
-    {
-      field: 'field1',
-      component: 'Input',
-      label: '瀛楁1',
-      colProps: {
-        span: 8,
-      },
-      required: true,
-    },
-    {
-      field: 'field2',
-      component: 'Input',
-      label: '瀛楁2',
-      colProps: {
-        span: 8,
-      },
-      required: true,
-    },
-    {
-      field: 'id',
-      label: 'id',
-      required: true,
-      defaultValue: 0,
-      component: 'InputNumber',
-      show: false,
-    },
-    {
-      field: 'field3',
-      component: 'DatePicker',
-      label: '瀛楁3',
-      colProps: {
-        span: 8,
-      },
-      required: true,
-    },
-    {
-      field: 'field33',
-      component: 'DatePicker',
-      label: '瀛楁33',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        valueFormat: 'YYYY-MM-DD',
-      },
-      rules: [{ required: true, type: 'string' }],
-    },
-    {
-      field: 'field44',
-      component: 'InputCountDown',
-      label: '楠岃瘉鐮�',
-      colProps: {
-        span: 8,
-      },
-      required: true,
-    },
-    {
-      field: 'field4',
-      component: 'Select',
-      label: '瀛楁4',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        mode: 'multiple',
-        options: [
-          {
-            label: '閫夐」1',
-            value: '1',
-            key: '1',
-          },
-          {
-            label: '閫夐」2',
-            value: '2',
-            key: '2',
-          },
-        ],
-      },
-      rules: [
-        {
-          required: true,
-          message: '璇疯緭鍏a',
-          type: 'array',
-        },
-      ],
-    },
-    {
-      field: 'field441',
-      component: 'Input',
-      label: '鑷畾涔夋牎楠�',
-      colProps: {
-        span: 8,
-      },
-      rules: [
-        {
-          required: true,
-          // @ts-ignore
-          validator: async (rule, value) => {
-            if (!value) {
-              /* eslint-disable-next-line */
-              return Promise.reject('鍊间笉鑳戒负绌�');
-            }
-            if (value === '1') {
-              /* eslint-disable-next-line */
-              return Promise.reject('鍊间笉鑳戒负1');
-            }
-            return Promise.resolve();
-          },
-          trigger: 'change',
-        },
-      ],
-    },
-    {
-      field: 'field5',
-      component: 'CheckboxGroup',
-      label: '瀛楁5',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        options: [
-          {
-            label: '閫夐」1',
-            value: '1',
-          },
-          {
-            label: '閫夐」2',
-            value: '2',
-          },
-        ],
-      },
-      rules: [{ required: true }],
-    },
-    {
-      field: 'field7',
-      component: 'RadioGroup',
-      label: '瀛楁7',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        options: [
-          {
-            label: '閫夐」1',
-            value: '1',
-          },
-          {
-            label: '閫夐」2',
-            value: '2',
-          },
-        ],
-      },
-      rules: [{ required: true, message: '瑕嗙洊榛樿鐢熸垚鐨勬牎楠屼俊鎭�' }],
-    },
-    {
-      field: 'field8',
-      component: 'Input',
-      label: '鍚庣寮傛楠岃瘉',
-      colProps: {
-        span: 8,
-      },
-      helpMessage: ['鏈瓧娈垫紨绀哄紓姝ラ獙璇�', '鏈湴瑙勫垯锛氬繀椤诲~鍐�', '鍚庣瑙勫垯锛氫笉鑳藉寘鍚玜dmin'],
-      rules: [
-        {
-          required: true,
-          message: '璇疯緭鍏ユ暟鎹�',
-        },
-        {
-          validator(_, value) {
-            return new Promise((resolve, reject) => {
-              isAccountExist(value)
-                .then(() => resolve())
-                .catch((err) => {
-                  reject(err.message || '楠岃瘉澶辫触');
-                });
-            });
-          },
-        },
-      ],
-    },
-  ];
-
-  export default defineComponent({
-    components: { BasicForm, CollapseContainer, PageWrapper },
-    setup() {
-      const { createMessage } = useMessage();
-      const [register, { validateFields, clearValidate, getFieldsValue, resetFields, setFieldsValue }] = useForm({
-        labelWidth: 120,
-        schemas,
-        actionColOptions: {
-          span: 24,
-        },
-      });
-
-      async function validateForm() {
-        try {
-          const res = await validateFields();
-          console.log('passing', res);
-        } catch (error) {
-          console.log('not passing', error);
-        }
-      }
-
-      async function resetValidate() {
-        clearValidate();
-      }
-
-      function getFormValues() {
-        const values = getFieldsValue();
-        createMessage.success('values:' + JSON.stringify(values));
-      }
-
-      function setFormValues() {
-        setFieldsValue({
-          field1: 1111,
-          field5: ['1'],
-          field7: '1',
-          field33: '2020-12-12',
-          field3: '2020-12-12',
-        });
-      }
-
-      return {
-        register,
-        schemas,
-        handleSubmit: (values: any) => {
-          createMessage.success('click search,values:' + JSON.stringify(values));
-        },
-        getFormValues,
-        setFormValues,
-        validateForm,
-        resetValidate,
-        resetFields,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/form/UseForm.vue b/src/views/demo/form/UseForm.vue
deleted file mode 100644
index 1abf4ce..0000000
--- a/src/views/demo/form/UseForm.vue
+++ /dev/null
@@ -1,189 +0,0 @@
-<template>
-  <PageWrapper title="UseForm鎿嶄綔绀轰緥">
-    <div class="mb-4">
-      <a-button @click="setProps({ labelWidth: 150 })" class="mr-2"> 鏇存敼labelWidth </a-button>
-      <a-button @click="setProps({ labelWidth: 120 })" class="mr-2"> 杩樺師labelWidth </a-button>
-      <a-button @click="setProps({ size: 'large' })" class="mr-2"> 鏇存敼Size </a-button>
-      <a-button @click="setProps({ size: 'default' })" class="mr-2"> 杩樺師Size </a-button>
-      <a-button @click="setProps({ disabled: true })" class="mr-2"> 绂佺敤琛ㄥ崟 </a-button>
-      <a-button @click="setProps({ disabled: false })" class="mr-2"> 瑙i櫎绂佺敤 </a-button>
-      <a-button @click="setProps({ compact: true })" class="mr-2"> 绱у噾琛ㄥ崟 </a-button>
-      <a-button @click="setProps({ compact: false })" class="mr-2"> 杩樺師姝e父闂磋窛 </a-button>
-      <a-button @click="setProps({ actionColOptions: { span: 8 } })" class="mr-2"> 鎿嶄綔鎸夐挳浣嶇疆 </a-button>
-    </div>
-    <div class="mb-4">
-      <a-button @click="setProps({ showActionButtonGroup: false })" class="mr-2"> 闅愯棌鎿嶄綔鎸夐挳 </a-button>
-      <a-button @click="setProps({ showActionButtonGroup: true })" class="mr-2"> 鏄剧ず鎿嶄綔鎸夐挳 </a-button>
-      <a-button @click="setProps({ showResetButton: false })" class="mr-2"> 闅愯棌閲嶇疆鎸夐挳 </a-button>
-      <a-button @click="setProps({ showResetButton: true })" class="mr-2"> 鏄剧ず閲嶇疆鎸夐挳 </a-button>
-      <a-button @click="setProps({ showSubmitButton: false })" class="mr-2"> 闅愯棌鏌ヨ鎸夐挳 </a-button>
-      <a-button @click="setProps({ showSubmitButton: true })" class="mr-2"> 鏄剧ず鏌ヨ鎸夐挳 </a-button>
-      <a-button
-        @click="
-          setProps({
-            resetButtonOptions: {
-              disabled: true,
-              text: '閲嶇疆New',
-            },
-          })
-        "
-        class="mr-2"
-      >
-        淇敼閲嶇疆鎸夐挳
-      </a-button>
-      <a-button
-        @click="
-          setProps({
-            submitButtonOptions: {
-              disabled: true,
-              loading: true,
-            },
-          })
-        "
-        class="mr-2"
-      >
-        淇敼鏌ヨ鎸夐挳
-      </a-button>
-    </div>
-    <CollapseContainer title="useForm绀轰緥">
-      <BasicForm @register="register" @submit="handleSubmit" />
-    </CollapseContainer>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { PageWrapper } from '/@/components/Page';
-
-  const schemas: FormSchema[] = [
-    {
-      field: 'field1',
-      component: 'Input',
-      label: '瀛楁1',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        placeholder: '鑷畾涔塸laceholder',
-        onChange: (e: any) => {
-          console.log(e);
-        },
-      },
-    },
-    {
-      field: 'field2',
-      component: 'Input',
-      label: '瀛楁2',
-      colProps: {
-        span: 8,
-      },
-    },
-    {
-      field: 'field3',
-      component: 'DatePicker',
-      label: '瀛楁3',
-      colProps: {
-        span: 8,
-      },
-    },
-    {
-      field: 'fieldTime',
-      component: 'RangePicker',
-      label: '鏃堕棿瀛楁',
-      componentProps: {
-        valueType: 'Date',
-      },
-      colProps: {
-        span: 8,
-      },
-    },
-    {
-      field: 'field4',
-      component: 'Select',
-      label: '瀛楁4',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        options: [
-          {
-            label: '閫夐」1',
-            value: '1',
-            key: '1',
-          },
-          {
-            label: '閫夐」2',
-            value: '2',
-            key: '2',
-          },
-        ],
-      },
-    },
-    {
-      field: 'field5',
-      component: 'CheckboxGroup',
-      label: '瀛楁5',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        options: [
-          {
-            label: '閫夐」1',
-            value: '1',
-          },
-          {
-            label: '閫夐」2',
-            value: '2',
-          },
-        ],
-      },
-    },
-    {
-      field: 'field7',
-      component: 'RadioGroup',
-      label: '瀛楁7',
-      colProps: {
-        span: 8,
-      },
-      componentProps: {
-        options: [
-          {
-            label: '閫夐」1',
-            value: '1',
-          },
-          {
-            label: '閫夐」2',
-            value: '2',
-          },
-        ],
-      },
-    },
-  ];
-
-  export default defineComponent({
-    components: { BasicForm, CollapseContainer, PageWrapper },
-    setup() {
-      const { createMessage } = useMessage();
-
-      const [register, { setProps }] = useForm({
-        labelWidth: 120,
-        schemas,
-        actionColOptions: {
-          span: 24,
-        },
-        fieldMapToTime: [['fieldTime', ['startTime', 'endTime'], 'YYYY-MM']],
-      });
-      return {
-        register,
-        schemas,
-        handleSubmit: (values: Recordable) => {
-          createMessage.success('click search,values:' + JSON.stringify(values));
-        },
-        setProps,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/form/index.vue b/src/views/demo/form/index.vue
deleted file mode 100644
index 22719f0..0000000
--- a/src/views/demo/form/index.vue
+++ /dev/null
@@ -1,621 +0,0 @@
-<template>
-	<PageWrapper title="琛ㄥ崟鍩虹绀轰緥" contentFullHeight>
-		<CollapseContainer title="鍩虹绀轰緥">
-			<BasicForm
-				autoFocusFirstItem
-				:labelWidth="200"
-				:schemas="schemas"
-				:actionColOptions="{ span: 24 }"
-				:labelCol="{ span: 8 }"
-				@submit="handleSubmit"
-				@reset="handleReset"
-			>
-				<template #jAreaLinkage="{ model, field }">
-					<JAreaLinkage v-model:value="model[field]" :showArea="true" :showAll="false" />
-				</template>
-				<template #localSearch="{ model, field }">
-					<ApiSelect
-						:api="optionsListApi"
-						showSearch
-						v-model:value="model[field]"
-						optionFilterProp="label"
-						resultField="list"
-						labelField="name"
-						valueField="id"
-					/>
-				</template>
-				<template #selectA="{ model, field }">
-					<a-select :options="optionsA" mode="multiple" v-model:value="model[field]" @change="valueSelectA = model[field]" allowClear />
-				</template>
-				<template #selectB="{ model, field }">
-					<a-select :options="optionsB" mode="multiple" v-model:value="model[field]" @change="valueSelectB = model[field]" allowClear />
-				</template>
-				<template #remoteSearch="{ model, field }">
-					<ApiSelect
-						:api="optionsListApi"
-						showSearch
-						v-model:value="model[field]"
-						:filterOption="false"
-						resultField="list"
-						labelField="name"
-						valueField="id"
-						@search="onSearch"
-					/>
-				</template>
-			</BasicForm>
-		</CollapseContainer>
-	</PageWrapper>
-</template>
-<script lang="ts">
-	import { computed, defineComponent, unref, ref } from 'vue'
-	import { BasicForm, FormSchema, ApiSelect, JAreaLinkage } from '/@/components/Form/index'
-	import { CollapseContainer } from '/@/components/Container'
-	import { useMessage } from '/@/hooks/web/useMessage'
-	import { PageWrapper } from '/@/components/Page'
-
-	import { optionsListApi } from '/@/api/demo/select'
-	import { useDebounceFn } from '@vueuse/core'
-	import { treeOptionsListApi } from '/@/api/demo/tree'
-	import { Select } from 'ant-design-vue'
-	import { cloneDeep } from 'lodash-es'
-
-	const valueSelectA = ref<string[]>([])
-	const valueSelectB = ref<string[]>([])
-	const options = ref<Recordable[]>([])
-	for (let i = 1; i < 10; i++) options.value.push({ label: '閫夐」' + i, value: `${i}` })
-
-	const optionsA = computed(() => {
-		return cloneDeep(unref(options)).map((op) => {
-			op.disabled = unref(valueSelectB).indexOf(op.value) !== -1
-			return op
-		})
-	})
-	const optionsB = computed(() => {
-		return cloneDeep(unref(options)).map((op) => {
-			op.disabled = unref(valueSelectA).indexOf(op.value) !== -1
-			return op
-		})
-	})
-	const provincesOptions = [
-		{
-			id: 'guangdong',
-			label: '骞夸笢鐪�',
-			value: '1',
-			key: '1',
-		},
-		{
-			id: 'jiangsu',
-			label: '姹熻嫃鐪�',
-			value: '2',
-			key: '2',
-		},
-	]
-	const citiesOptionsData = {
-		guangdong: [
-			{
-				label: '鐝犳捣甯�',
-				value: '1',
-				key: '1',
-			},
-			{
-				label: '娣卞湷甯�',
-				value: '2',
-				key: '2',
-			},
-			{
-				label: '骞垮窞甯�',
-				value: '3',
-				key: '3',
-			},
-		],
-		jiangsu: [
-			{
-				label: '鍗椾含甯�',
-				value: '1',
-				key: '1',
-			},
-			{
-				label: '鏃犻敗甯�',
-				value: '2',
-				key: '2',
-			},
-			{
-				label: '鑻忓窞甯�',
-				value: '3',
-				key: '3',
-			},
-		],
-	}
-
-	const schemas: FormSchema[] = [
-		{
-			field: 'divider-basic',
-			component: 'Divider',
-			label: '鍩虹瀛楁',
-		},
-		{
-			field: 'field1',
-			component: 'Input',
-			label: '瀛楁1',
-
-			colProps: {
-				span: 8,
-			},
-			// componentProps:{},
-			// can func
-			componentProps: ({ schema, formModel }) => {
-				console.log('form:', schema)
-				console.log('formModel:', formModel)
-				return {
-					placeholder: '鑷畾涔塸laceholder',
-					onChange: (e: any) => {
-						console.log(e)
-					},
-				}
-			},
-			renderComponentContent: () => {
-				return {
-					prefix: () => 'pSlot',
-					suffix: () => 'sSlot',
-				}
-			},
-		},
-		{
-			field: 'field2',
-			component: 'Input',
-			label: '瀛楁2',
-			defaultValue: '111',
-			colProps: {
-				span: 8,
-			},
-			componentProps: {
-				onChange: (e: any) => {
-					console.log(e)
-				},
-			},
-			suffix: '澶�',
-		},
-		{
-			field: 'field3',
-			component: 'DatePicker',
-			label: '瀛楁3',
-			colProps: {
-				span: 8,
-			},
-		},
-		{
-			field: 'field4',
-			component: 'Select',
-			label: '瀛楁4',
-			colProps: {
-				span: 8,
-			},
-			componentProps: {
-				options: [
-					{
-						label: '閫夐」1',
-						value: '1',
-						key: '1',
-					},
-					{
-						label: '閫夐」2',
-						value: '2',
-						key: '2',
-					},
-				],
-			},
-		},
-		{
-			field: 'field5',
-			component: 'CheckboxGroup',
-			label: '瀛楁5',
-			colProps: {
-				span: 8,
-			},
-			componentProps: {
-				options: [
-					{
-						label: '閫夐」1',
-						value: '1',
-					},
-					{
-						label: '閫夐」2',
-						value: '2',
-					},
-				],
-			},
-		},
-		{
-			field: 'field7',
-			component: 'RadioGroup',
-			label: '瀛楁7',
-			colProps: {
-				span: 8,
-			},
-			componentProps: {
-				options: [
-					{
-						label: '閫夐」1',
-						value: '1',
-					},
-					{
-						label: '閫夐」2',
-						value: '2',
-					},
-				],
-			},
-		},
-		{
-			field: 'field8',
-			component: 'Checkbox',
-			label: '瀛楁8',
-			colProps: {
-				span: 8,
-			},
-			renderComponentContent: 'Check',
-		},
-		{
-			field: 'field9',
-			component: 'Switch',
-			label: '瀛楁9',
-			colProps: {
-				span: 8,
-			},
-		},
-		{
-			field: 'field10',
-			component: 'RadioButtonGroup',
-			label: '瀛楁10',
-			colProps: {
-				span: 8,
-			},
-			componentProps: {
-				options: [
-					{
-						label: '閫夐」1',
-						value: '1',
-					},
-					{
-						label: '閫夐」2',
-						value: '2',
-					},
-				],
-			},
-		},
-		{
-			field: 'field11',
-			component: 'Cascader',
-			label: '瀛楁11',
-			colProps: {
-				span: 8,
-			},
-			componentProps: {
-				options: [
-					{
-						value: 'zhejiang',
-						label: 'Zhejiang',
-						children: [
-							{
-								value: 'hangzhou',
-								label: 'Hangzhou',
-								children: [
-									{
-										value: 'xihu',
-										label: 'West Lake',
-									},
-								],
-							},
-						],
-					},
-					{
-						value: 'jiangsu',
-						label: 'Jiangsu',
-						children: [
-							{
-								value: 'nanjing',
-								label: 'Nanjing',
-								children: [
-									{
-										value: 'zhonghuamen',
-										label: 'Zhong Hua Men',
-									},
-								],
-							},
-						],
-					},
-				],
-			},
-		},
-		{
-			field: 'divider-api-select',
-			component: 'Divider',
-			label: '杩滅▼涓嬫媺婕旂ず',
-		},
-		{
-			field: 'field30',
-			component: 'ApiSelect',
-			label: '鎳掑姞杞借繙绋嬩笅鎷�',
-			required: true,
-			componentProps: {
-				// more details see /src/components/Form/src/components/ApiSelect.vue
-				api: optionsListApi,
-				params: {
-					id: 1,
-				},
-				resultField: 'list',
-				// use name as label
-				labelField: 'name',
-				// use id as value
-				valueField: 'id',
-				// not request untill to select
-				immediate: false,
-				onChange: (e) => {
-					console.log('selected:', e)
-				},
-				// atfer request callback
-				onOptionsChange: (options) => {
-					console.log('get options', options.length, options)
-				},
-			},
-			colProps: {
-				span: 8,
-			},
-			defaultValue: '0',
-		},
-		{
-			field: 'field311',
-			component: 'JAreaLinkage',
-			label: '鐪佸競鍖洪�夋嫨',
-			helpMessage: ['JAreaLinkage缁勪欢', '鐪佸競鍖洪�夋嫨'],
-			required: true,
-			slot: 'jAreaLinkage',
-			colProps: {
-				span: 8,
-			},
-			defaultValue: ['130000', '130200'],
-		},
-		{
-			field: 'field31',
-			component: 'Input',
-			label: '涓嬫媺鏈湴鎼滅储',
-			helpMessage: ['ApiSelect缁勪欢', '杩滅▼鏁版嵁婧愭湰鍦版悳绱�', '鍙彂璧蜂竴娆¤姹傝幏鍙栨墍鏈夐�夐」'],
-			required: true,
-			slot: 'localSearch',
-			colProps: {
-				span: 8,
-			},
-			defaultValue: '0',
-		},
-		{
-			field: 'field32',
-			component: 'Input',
-			label: '涓嬫媺杩滅▼鎼滅储',
-			helpMessage: ['ApiSelect缁勪欢', '灏嗗叧閿瘝鍙戦�佸埌鎺ュ彛杩涜杩滅▼鎼滅储'],
-			required: true,
-			slot: 'remoteSearch',
-			colProps: {
-				span: 8,
-			},
-			defaultValue: '0',
-		},
-		{
-			field: 'field33',
-			component: 'ApiTreeSelect',
-			label: '杩滅▼涓嬫媺鏍�',
-			helpMessage: ['ApiTreeSelect缁勪欢', '浣跨敤鎺ュ彛鎻愪緵鐨勬暟鎹敓鎴愰�夐」'],
-			required: true,
-			componentProps: {
-				api: treeOptionsListApi,
-				resultField: 'list',
-			},
-			colProps: {
-				span: 8,
-			},
-		},
-		{
-			field: 'field34',
-			component: 'ApiRadioGroup',
-			label: '杩滅▼Radio',
-			helpMessage: ['ApiRadioGroup缁勪欢', '浣跨敤鎺ュ彛鎻愪緵鐨勬暟鎹敓鎴愰�夐」'],
-			required: true,
-			componentProps: {
-				api: optionsListApi,
-				params: {
-					count: 2,
-				},
-				resultField: 'list',
-				// use name as label
-				labelField: 'name',
-				// use id as value
-				valueField: 'id',
-			},
-			defaultValue: '1',
-			colProps: {
-				span: 8,
-			},
-		},
-		{
-			field: 'field35',
-			component: 'ApiRadioGroup',
-			label: '杩滅▼Radio',
-			helpMessage: ['ApiRadioGroup缁勪欢', '浣跨敤鎺ュ彛鎻愪緵鐨勬暟鎹敓鎴愰�夐」'],
-			required: true,
-			componentProps: {
-				api: optionsListApi,
-				params: {
-					count: 2,
-				},
-				resultField: 'list',
-				// use name as label
-				labelField: 'name',
-				// use id as value
-				valueField: 'id',
-				isBtn: true,
-			},
-			colProps: {
-				span: 8,
-			},
-		},
-		{
-			field: 'divider-linked',
-			component: 'Divider',
-			label: '瀛楁鑱斿姩',
-		},
-		{
-			field: 'province',
-			component: 'Select',
-			label: '鐪佷唤',
-			colProps: {
-				span: 8,
-			},
-			componentProps: ({ formModel, formActionType }) => {
-				return {
-					options: provincesOptions,
-					placeholder: '鐪佷唤涓庡煄甯傝仈鍔�',
-					onChange: (e: any) => {
-						// console.log(e)
-						let citiesOptions = e == 1 ? citiesOptionsData[provincesOptions[0].id] : citiesOptionsData[provincesOptions[1].id]
-						// console.log(citiesOptions)
-						if (e === undefined) {
-							citiesOptions = []
-						}
-						formModel.city = undefined //  reset city value
-						const { updateSchema } = formActionType
-						updateSchema({
-							field: 'city',
-							componentProps: {
-								options: citiesOptions,
-							},
-						})
-					},
-				}
-			},
-		},
-		{
-			field: 'city',
-			component: 'Select',
-			label: '鍩庡競',
-			colProps: {
-				span: 8,
-			},
-			componentProps: {
-				options: [], // defalut []
-				placeholder: '鐪佷唤涓庡煄甯傝仈鍔�',
-			},
-		},
-		{
-			field: 'divider-selects',
-			component: 'Divider',
-			label: '浜掓枼澶氶��',
-			helpMessage: ['涓や釜Select鍏辩敤鏁版嵁婧�', '浣嗕笉鍙�夋嫨瀵规柟宸查�変腑鐨勯」鐩�'],
-		},
-		{
-			field: 'selectA',
-			component: 'Select',
-			label: '浜掓枼SelectA',
-			slot: 'selectA',
-			defaultValue: [],
-			colProps: {
-				span: 8,
-			},
-		},
-		{
-			field: 'selectB',
-			component: 'Select',
-			label: '浜掓枼SelectB',
-			slot: 'selectB',
-			defaultValue: [],
-			colProps: {
-				span: 8,
-			},
-		},
-		{
-			field: 'divider-others',
-			component: 'Divider',
-			label: '鍏跺畠',
-		},
-		{
-			field: 'field20',
-			component: 'InputNumber',
-			label: '瀛楁20',
-			required: true,
-			colProps: {
-				span: 8,
-			},
-		},
-		{
-			field: 'field21',
-			component: 'Slider',
-			label: '瀛楁21',
-			componentProps: {
-				min: 0,
-				max: 100,
-				range: true,
-				marks: {
-					20: '20掳C',
-					60: '60掳C',
-				},
-			},
-			colProps: {
-				span: 8,
-			},
-		},
-		{
-			field: 'field22',
-			component: 'Rate',
-			label: '瀛楁22',
-			defaultValue: 3,
-			colProps: {
-				span: 8,
-			},
-			componentProps: {
-				disabled: false,
-				allowHalf: true,
-			},
-		},
-	]
-
-	export default defineComponent({
-		components: {
-			BasicForm,
-			CollapseContainer,
-			PageWrapper,
-			ApiSelect,
-			JAreaLinkage,
-			ASelect: Select,
-		},
-		setup() {
-			const check = ref(null)
-			const { createMessage } = useMessage()
-			const keyword = ref<string>('')
-			const searchParams = computed<Recordable>(() => {
-				return { keyword: unref(keyword) }
-			})
-
-			function onSearch(value: string) {
-				keyword.value = value
-			}
-			function areaChange(value) {
-				alert(value)
-			}
-
-			return {
-				schemas,
-				optionsListApi,
-				optionsA,
-				optionsB,
-				valueSelectA,
-				valueSelectB,
-				onSearch: useDebounceFn(onSearch, 300),
-				searchParams,
-				handleReset: () => {
-					keyword.value = ''
-				},
-				handleSubmit: (values: any) => {
-					createMessage.success('click search,values:' + JSON.stringify(values))
-				},
-				check,
-			}
-		},
-	})
-</script>
diff --git a/src/views/demo/jeecg/AsyncTreeTable.vue b/src/views/demo/jeecg/AsyncTreeTable.vue
deleted file mode 100644
index f3e24fa..0000000
--- a/src/views/demo/jeecg/AsyncTreeTable.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <PageWrapper>
-    <a-card :bordered="false">
-      <BasicTable :loading="loading" :dataSource="dataSource" @register="registerTable" @expand="onExpand" />
-    </a-card>
-  </PageWrapper>
-</template>
-
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { PageWrapper } from '/@/components/Page';
-  import { BasicTable, useTable } from '/@/components/Table';
-
-  const url = '/mock/api/asynTreeList';
-
-  const loading = ref<boolean>(false);
-  const dataSource = ref<any[]>([]);
-  const [registerTable, { setLoading }] = useTable({
-    rowKey: 'id',
-    bordered: true,
-    canResize: false,
-    // 鏍戣〃鏍�
-    isTreeTable: true,
-    showIndexColumn: true,
-    columns: [
-      { title: '鍚嶇О', dataIndex: 'name' },
-      { title: '缁勪欢', dataIndex: 'component' },
-      { title: '鎺掑簭', dataIndex: 'orderNum' },
-    ],
-  });
-
-  async function loadData(params) {
-    loading.value = true;
-    let result = await defHttp.get({ url, params });
-    loading.value = false;
-    return result.map((item) => {
-      if (item.hasChildren) {
-        return { ...item, children: [] };
-      } else {
-        return item;
-      }
-    });
-  }
-
-  async function loadRootData() {
-    dataSource.value = await loadData({ id: '0' });
-  }
-
-  loadRootData();
-
-  async function onExpand(isExpand, rowData) {
-    if (isExpand && rowData.hasChildren && rowData.children.length === 0) {
-      rowData.children = await loadData({ id: rowData.id });
-    }
-  }
-</script>
diff --git a/src/views/demo/jeecg/ImgDragSort.vue b/src/views/demo/jeecg/ImgDragSort.vue
deleted file mode 100644
index cb289e5..0000000
--- a/src/views/demo/jeecg/ImgDragSort.vue
+++ /dev/null
@@ -1,80 +0,0 @@
-<template>
-  <div>
-    <draggable @end="end" v-model="dataArr" item-key="id" style="display: flex">
-      <template #item="{ element }">
-        <div class="imgDiv">
-          <img :src="element.filePath" preview="index" />
-        </div>
-      </template>
-      <template #footer>
-        <a-button @click="sureChange" type="primary" style="margin-top: 100px">纭畾</a-button>
-      </template>
-    </draggable>
-    <a-divider>json鏁版嵁</a-divider>
-    <a-row>
-      <a-col :span="12">
-        <p>鎷栨嫿鍓嶏細</p>
-        <textarea rows="25" style="width: 780px">{{ oldDateSource }}</textarea>
-      </a-col>
-      <a-col :span="12">
-        <p>鎷栨嫿鍚庯細</p>
-        <textarea rows="25" style="width: 780px">{{ newDateSource }}</textarea>
-      </a-col>
-    </a-row>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import draggable from 'vuedraggable';
-  import { defineComponent, ref, unref } from 'vue';
-
-  const mockData = [
-    { id: '000', sort: 0, filePath: 'https://static.jeecg.com/upload/test/1_1588149743473.jpg' },
-    { id: '111', sort: 1, filePath: 'https://static.jeecg.com/upload/test/u27356337152749454924fm27gp0_1588149731821.jpg' },
-    { id: '222', sort: 2, filePath: 'https://static.jeecg.com/upload/test/u24454681402491956848fm27gp0_1588149712663.jpg' },
-    { id: '333', sort: 3, filePath: 'https://static.jeecg.com/temp/鍥界偓杞欢logo_1606575029126.png' },
-    { id: '444', sort: 4, filePath: 'https://static.jeecg.com/upload/test/u8891206113801177793fm27gp0_1588149704459.jpg' },
-  ];
-
-  //鏁版嵁闆�
-  const dataArr = ref(mockData);
-  //鍘熷鏁版嵁
-  const oldDateSource = ref(mockData);
-  //鏇存敼鍚庣殑鏁版嵁
-  const newDateSource = ref([]);
-
-  /**
-   * 鎷栧姩缁撴潫浜嬩欢
-   * @param evt
-   */
-  function end(evt) {
-    console.log('鎷栧姩鍓嶇殑浣嶇疆' + evt.oldIndex);
-    console.log('鎷栧姩鍚庣殑浣嶇疆' + evt.newIndex);
-  }
-
-  /**
-   * 纭鏇存敼浜嬩欢
-   * @param evt
-   */
-  function sureChange() {
-    for (let i = 0; i < unref(dataArr).length; i++) {
-      dataArr.value[i].sort = i;
-    }
-    newDateSource.value = unref(dataArr);
-  }
-</script>
-
-<style scoped lang="less">
-  .imgDiv {
-    padding: 8px;
-    border: 1px solid #d9d9d9;
-    border-radius: 4px;
-    margin: 0 8px 8px 0;
-
-    img {
-      width: 120px;
-      height: 120px;
-      object-fit: cover;
-    }
-  }
-</style>
diff --git a/src/views/demo/jeecg/ImgTurnPage.vue b/src/views/demo/jeecg/ImgTurnPage.vue
deleted file mode 100644
index 9859c2e..0000000
--- a/src/views/demo/jeecg/ImgTurnPage.vue
+++ /dev/null
@@ -1,170 +0,0 @@
-<template>
-  <div style="min-width: 800px">
-    <a-row>
-      <!-- 宸︿晶鏂囦欢鏍� -->
-      <a-col :span="6">
-        <a-tree
-          showLine
-          :treeData="treeData"
-          :expandedKeys="[expandedKeys[0]]"
-          :selectedKeys="selectedKeys"
-          :style="{ height: '500px', 'border-right': '2px solid #c1c1c1', 'overflow-y': 'auto' }"
-          @expand="onExpand"
-          @select="onSelect"
-        ></a-tree>
-      </a-col>
-
-      <!--鍙充晶缂╃暐鍥�-->
-      <a-col :span="18">
-        <a-row style="margin-top: 10px; padding-left: 2%">
-          <a-col :span="24" style="margin-bottom: 10px">
-            <a-button @click="prev" preIcon="ant-design:left-outlined" type="primary">涓婁竴椤�</a-button>
-            <a-button @click="next" preIcon="ant-design:right-outlined" style="margin-left: 8px" type="primary">涓嬩竴椤�</a-button>
-            <span style="margin-left: 100px; font-weight: bolder">{{ navName }}</span>
-          </a-col>
-          <a-col :span="24">
-            <img :src="imgUrl" preview />
-          </a-col>
-        </a-row>
-      </a-col>
-    </a-row>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { ref, unref, onMounted } from 'vue';
-  //mock鏁版嵁
-  const mockdata = [
-    {
-      title: '绗竴椤�',
-      key: '0-0',
-      children: [
-        {
-          title: '1椤�',
-          key: '0-0-0',
-          imgUrl: 'https://static.jeecg.com/upload/test/1_1588149743473.jpg',
-        },
-        {
-          title: '2椤�',
-          key: '0-0-1',
-          imgUrl: 'https://static.jeecg.com/upload/test/u27356337152749454924fm27gp0_1588149731821.jpg',
-        },
-      ],
-    },
-    {
-      title: '绗簩椤�',
-      key: '0-1',
-      children: [
-        {
-          title: '1椤�',
-          key: '0-1-0',
-          imgUrl: 'https://static.jeecg.com/upload/test/u24454681402491956848fm27gp0_1588149712663.jpg',
-        },
-        {
-          title: '2椤�',
-          key: '0-1-1',
-          imgUrl: 'https://static.jeecg.com/upload/test/u8891206113801177793fm27gp0_1588149704459.jpg',
-        },
-      ],
-    },
-    {
-      title: '绗笁椤�',
-      key: '0-2',
-      children: [
-        {
-          title: '1椤�',
-          key: '0-2-0',
-          imgUrl: 'https://static.jeecg.com/upload/test/1374962_1587621329085.jpg',
-        },
-      ],
-    },
-  ];
-  /**
-   * 宸︿晶鏍戝舰鏁版嵁
-   */
-  const treeData = ref(mockdata);
-  //閫変腑鐨刱ey
-  const selectedKeys = ref([]);
-  //灞曞紑鐨刱ey
-  const expandedKeys = ref([]);
-  const sort = ref(0);
-  //鍥剧墖閾炬帴
-  const imgUrl = ref('');
-  //椤电爜鏍囬
-  const navName = ref('');
-  //鍥剧墖闆嗗悎
-  const imgList = ref([]);
-
-  onMounted(getImgList);
-
-  /**
-   * 鍔犺浇鍥剧墖闆嗗悎
-   */
-  function getImgList() {
-    var count = 0;
-    for (var i = 0; i < unref(treeData).length; i++) {
-      for (var j = 0; j < unref(treeData)[i].children.length; j++) {
-        imgList.value.push({
-          key: unref(treeData)[i].children[j].key,
-          pkey: unref(treeData)[i].key,
-          sort: count++,
-          imgUrl: unref(treeData)[i].children[j].imgUrl,
-          navName: unref(treeData)[i].title + '/' + unref(treeData)[i].children[j].title,
-        });
-      }
-    }
-    setValue(imgList.value[unref(sort)]);
-  }
-  /**
-   * 鑺傜偣閫変腑浜嬩欢
-   */
-  function onSelect(selectedKeys, info) {
-    for (var i = 0; i < unref(imgList).length; i++) {
-      if (unref(imgList)[i].key === selectedKeys[0]) {
-        sort.value = unref(imgList)[i].sort;
-        setValue(unref(imgList)[i]);
-        break;
-      }
-    }
-  }
-  /**
-   * 鑺傜偣灞曞紑浜嬩欢
-   */
-  function onExpand(expandedKey) {
-    expandedKeys.value = [];
-    if (expandedKey !== null && expandedKey !== '') {
-      expandedKeys.value[0] = expandedKey[1];
-    }
-  }
-  /**
-   * 涓婁竴椤�
-   */
-  function prev() {
-    if (unref(sort) === 0) {
-      sort.value = unref(imgList).length - 1;
-    } else {
-      sort.value = sort.value - 1;
-    }
-    setValue(unref(imgList)[unref(sort)]);
-  }
-  /**
-   * 涓嬩竴椤�
-   */
-  function next() {
-    if (unref(sort) === unref(imgList).length - 1) {
-      sort.value = 0;
-    } else {
-      sort.value = unref(sort) + 1;
-    }
-    setValue(unref(imgList)[unref(sort)]);
-  }
-
-  // 璁剧疆鍙楁帶鑺傜偣鍊�
-  function setValue(value) {
-    selectedKeys.value = [];
-    imgUrl.value = value.imgUrl;
-    selectedKeys.value[0] = value.key;
-    expandedKeys.value[0] = value.pkey;
-    navName.value = value.navName;
-  }
-</script>
diff --git a/src/views/demo/jeecg/InnerExpandTable.vue b/src/views/demo/jeecg/InnerExpandTable.vue
deleted file mode 100644
index 2b011ed..0000000
--- a/src/views/demo/jeecg/InnerExpandTable.vue
+++ /dev/null
@@ -1,243 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <BasicTable @register="registerTable" :expandedRowKeys="expandedRowKeys" :rowSelection="rowSelection" @expand="handleExpand">
-      <template #tableTitle>
-        <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 鏂板</a-button>
-      </template>
-      <template #expandedRowRender>
-        <BasicTable bordered size="middle" rowKey="id" :canResize="false" :columns="innerColumns" :dataSource="innerData" :pagination="false">
-        </BasicTable>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-    <JVxeTableModal @register="registerModal" @success="reload()"></JVxeTableModal>
-  </a-card>
-</template>
-
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import JVxeTableModal from '/@/views/demo/vextable/jvxetable/JVxeTableModal.vue';
-  //鎺ュ彛url
-  const url = {
-    list: '/test/order/orderList',
-    delete: '/test/order/delete',
-    deleteBatch: '/test/order/deleteBatch',
-    customerListByMainId: '/test/order/listOrderCustomerByMainId',
-  };
-  // 灞曞紑key
-  const expandedRowKeys = ref<any[]>([]);
-  // 閫夋嫨key
-  const checkedKeys = ref<any[]>([]);
-  // 瀛愯〃鏁版嵁
-  const innerData = ref<any[]>([]);
-  // 涓昏〃琛ㄥご
-  const columns = [
-    {
-      title: '璁㈠崟鍙�',
-      align: 'center',
-      dataIndex: 'orderCode',
-      width: 100,
-    },
-    {
-      title: '璁㈠崟绫诲瀷',
-      align: 'center',
-      dataIndex: 'ctype',
-      width: 100,
-      customRender: ({ text }) => {
-        let re = '';
-        if (text === '1') {
-          re = '鍥藉唴璁㈠崟';
-        } else if (text === '2') {
-          re = '鍥介檯璁㈠崟';
-        }
-        return re;
-      },
-    },
-    {
-      title: '璁㈠崟鏃ユ湡',
-      align: 'center',
-      width: 100,
-      dataIndex: 'orderDate',
-    },
-    {
-      title: '璁㈠崟閲戦',
-      align: 'center',
-      dataIndex: 'orderMoney',
-      width: 100,
-    },
-    {
-      title: '璁㈠崟澶囨敞',
-      align: 'center',
-      dataIndex: 'content',
-      width: 100,
-    },
-  ];
-  // 瀛愯〃琛ㄥご
-  const innerColumns = [
-    {
-      title: '瀹㈡埛鍚�',
-      align: 'center',
-      width: 100,
-      dataIndex: 'name',
-      key: 'name',
-    },
-    {
-      title: '鎬у埆',
-      align: 'center',
-      dataIndex: 'sex',
-      customRender: function (text) {
-        //console.log(typeof  text )
-        //console.log(text)
-        if (text.value == '1') {
-          return '鐢�';
-        } else if (text.value == '2') {
-          return '濂�';
-        } else {
-          return text;
-        }
-      },
-    },
-    {
-      title: '韬唤璇佸彿鐮�',
-      align: 'center',
-      dataIndex: 'idcard',
-    },
-    {
-      title: '鐢佃瘽',
-      dataIndex: 'telphone',
-      align: 'center',
-    },
-  ];
-  const list = (params) => defHttp.get({ url: url.list, params });
-  const [registerModal, { openModal }] = useModal();
-  const [registerTable, { reload }] = useTable({
-    columns,
-    api: list,
-    rowKey: 'id',
-    striped: true,
-    useSearchForm: false,
-    showTableSetting: true,
-    clickToRowSelect: false,
-    bordered: true,
-    actionColumn: {
-      width: 110,
-      title: '鎿嶄綔',
-      dataIndex: 'action',
-      slots: { customRender: 'action' },
-      fixed: undefined,
-    },
-  });
-
-  /**
-   * 閫夋嫨鍒楅厤缃�
-   */
-  const rowSelection = {
-    type: 'checkbox',
-    columnWidth: 30,
-    selectedRowKeys: checkedKeys,
-    onChange: onSelectChange,
-  };
-
-  /**
-   * 閫夋嫨浜嬩欢
-   */
-  function onSelectChange(selectedRowKeys: (string | number)[]) {
-    checkedKeys.value = selectedRowKeys;
-  }
-  /**
-   * 灞曞紑浜嬩欢
-   * */
-  function handleExpand(expanded, record) {
-    expandedRowKeys.value = [];
-    innerData.value = [];
-    if (expanded === true) {
-      expandedRowKeys.value.push(record.id);
-      defHttp.get({ url: url.customerListByMainId, params: { orderId: record.id } }, { isTransformResponse: false }).then((res) => {
-        if (res.success) {
-          innerData.value = res.result.records;
-        }
-      });
-    }
-  }
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleAdd() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  function handleEdit(record) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  function handleDelete(record) {
-    defHttp.delete({ url: url.delete, data: { id: record.id } }, { joinParamsToUrl: true }).then(() => {
-      reload();
-    });
-  }
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
-<style scoped>
-  .ant-card-body .table-operator {
-    margin-bottom: 18px;
-  }
-
-  .ant-table-tbody .ant-table-row td {
-    padding-top: 15px;
-    padding-bottom: 15px;
-  }
-
-  .anty-row-operator button {
-    margin: 0 5px;
-  }
-
-  .ant-btn-danger {
-    background-color: #ffffff;
-  }
-
-  .ant-modal-cust-warp {
-    height: 100%;
-  }
-
-  .ant-modal-cust-warp .ant-modal-body {
-    height: calc(100% - 110px) !important;
-    overflow-y: auto;
-  }
-
-  .ant-modal-cust-warp .ant-modal-content {
-    height: 90% !important;
-    overflow-y: hidden;
-  }
-</style>
diff --git a/src/views/demo/jeecg/JCodeEditDemo.vue b/src/views/demo/jeecg/JCodeEditDemo.vue
deleted file mode 100644
index 80c4233..0000000
--- a/src/views/demo/jeecg/JCodeEditDemo.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-  <BasicForm
-    :labelWidth="200"
-    :schemas="schemas"
-    :showResetButton="false"
-    :showSubmitButton="false"
-    :actionColOptions="{ span: 24 }"
-    @submit="handleSubmit"
-    @reset="handleReset"
-    style="height: 800px"
-  >
-    <template #jCodeEdit="{ model, field }">
-      <JCodeEditor v-model:value="model[field]" mode="js" height="300px" :fullScreen="true" />
-    </template>
-  </BasicForm>
-</template>
-<script lang="ts">
-  import { computed, defineComponent, unref, ref } from 'vue';
-  import { BasicForm, FormSchema, JCodeEditor } from '/@/components/Form';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { optionsListApi } from '/@/api/demo/select';
-  import { useDebounceFn } from '@vueuse/core';
-
-  const schemas: FormSchema[] = [
-    {
-      field: 'field1',
-      component: 'JCodeEditor',
-      label: '浠g爜缂栬緫鍣�',
-      required: true,
-      slot: 'jCodeEdit',
-      colProps: {
-        span: 15,
-      },
-      defaultValue: 'Hello JeecgBoot',
-    },
-  ];
-
-  export default defineComponent({
-    components: { BasicForm, JCodeEditor },
-    setup() {
-      const check = ref(null);
-      const { createMessage } = useMessage();
-      const keyword = ref<string>('');
-      const searchParams = computed<Recordable>(() => {
-        return { keyword: unref(keyword) };
-      });
-
-      function onSearch(value: string) {
-        keyword.value = value;
-      }
-
-      return {
-        schemas,
-        optionsListApi,
-        onSearch: useDebounceFn(onSearch, 300),
-        searchParams,
-        handleReset: () => {
-          keyword.value = '';
-        },
-        handleSubmit: (values: any) => {
-          createMessage.success('click search,values:' + JSON.stringify(values));
-        },
-        check,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/jeecg/JEditorDemo.vue b/src/views/demo/jeecg/JEditorDemo.vue
deleted file mode 100644
index 10657eb..0000000
--- a/src/views/demo/jeecg/JEditorDemo.vue
+++ /dev/null
@@ -1,99 +0,0 @@
-<template>
-  <div class="p-4">
-    <div class="p-4 bg-white">
-      <a-button-group class="j-table-operator">
-        <a-button type="primary" @click="setDis(0)">鍚敤</a-button>
-        <a-button type="primary" @click="setDis(1)">绂佺敤</a-button>
-        <a-button type="primary" @click="getValues()">鏍¢獙琛ㄥ崟骞惰幏鍙栧��</a-button>
-        <a-button type="primary" @click="setValues()">璁剧疆鍊�</a-button>
-      </a-button-group>
-
-      <BasicForm @register="register" @submit="handleSubmit" />
-    </div>
-  </div>
-</template>
-
-<script lang="ts">
-  export default {
-    title: '瀵屾枃鏈� | Markdown',
-    name: 'MarkdownDemo',
-  };
-</script>
-
-<script lang="ts" setup>
-  import { FormSchema, useForm, BasicForm } from '/@/components/Form';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const { createMessage, createSuccessModal } = useMessage();
-
-  const schemas: FormSchema[] = [
-    {
-      field: 'name',
-      component: 'Input',
-      label: '濮撳悕',
-      required: true,
-      defaultValue: 'zhangsan',
-    },
-    {
-      field: 'tinymce',
-      component: 'JEditor',
-      label: '瀵屾枃鏈�',
-      defaultValue: 'defaultValue',
-      required: true,
-    },
-    {
-      field: 'markdown',
-      component: 'JMarkdownEditor',
-      label: 'Markdown',
-      defaultValue: '# 寮犱笁',
-      required: true,
-      componentProps: {
-        height: 300,
-      },
-    },
-  ];
-
-  const [register, { setProps, validate, setFieldsValue }] = useForm({
-    labelWidth: 120,
-    schemas: schemas,
-    actionColOptions: {
-      span: 24,
-    },
-    compact: true,
-    showResetButton: false,
-    showSubmitButton: false,
-    showAdvancedButton: false,
-    disabled: false,
-  });
-
-  function handleSubmit(values) {
-    console.log(values);
-  }
-
-  function setDis(flag) {
-    setProps({ disabled: !!flag });
-  }
-
-  async function getValues() {
-    try {
-      const values = await validate();
-      console.log(values);
-      createSuccessModal({
-        title: '鏍¢獙閫氳繃',
-        content: `${JSON.stringify(values)}`,
-      });
-    } catch (error) {
-      createMessage.warning('妫�楠屼笉閫氳繃');
-    }
-  }
-
-  function setValues() {
-    setFieldsValue({
-      name: 'LiSi',
-      markdown: '# 鏉庡洓',
-      tinymce: '<p><strong><span style="font-size: 18pt;">寮�<span style="color: #e03e2d;">涓�</span>涓�</span></strong></p>',
-    });
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/jeecg/JUploadDemo.vue b/src/views/demo/jeecg/JUploadDemo.vue
deleted file mode 100644
index c7f2cd8..0000000
--- a/src/views/demo/jeecg/JUploadDemo.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-<template>
-  <a-button-group class="j-table-operator">
-    <a-button type="primary" @click="setDisabled(0)">鍚敤</a-button>
-    <a-button type="primary" @click="setDisabled(1)">绂佺敤</a-button>
-    <a-button type="primary" @click="showUploadModal">鏂囦欢寮圭獥</a-button>
-  </a-button-group>
-  <BasicForm @register="register" @submit="handleSubmit" />
-  <JUploadModal v-model:value="uploadModalValue" @register="registerModel" />
-</template>
-
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { FormSchema, useForm, BasicForm } from '/@/components/Form';
-  import { UploadTypeEnum } from '/@/components/Form/src/jeecg/components/JUpload';
-  import { JUploadModal } from '/@/components/Form/src/jeecg/components/JUpload';
-  import { useModal } from '/@/components/Modal';
-
-  const uploadModalValue = ref('');
-
-  const schemas: FormSchema[] = [
-    {
-      field: 'uploadFile',
-      component: 'JUpload',
-      helpMessage: '鏃犻檺鍒朵笂浼�',
-      label: '涓婁紶鏂囦欢',
-    },
-    {
-      field: 'uploadFileMax',
-      component: 'JUpload',
-      helpMessage: '鏈�澶氫笂浼�3涓枃浠�',
-      label: '涓婁紶鏂囦欢锛�3锛�',
-      componentProps: { maxCount: 3 },
-    },
-    {
-      field: 'uploadImage',
-      component: 'JUpload',
-      label: '涓婁紶鍥剧墖',
-      helpMessage: '鏃犻檺鍒朵笂浼�',
-      componentProps: {
-        fileType: UploadTypeEnum.image,
-      },
-    },
-    {
-      field: 'uploadImageMax',
-      component: 'JUpload',
-      label: '涓婁紶鍥剧墖锛�1锛�',
-      helpMessage: '鏈�澶氫笂浼�1寮犲浘鐗�',
-      componentProps: {
-        fileType: UploadTypeEnum.image,
-        maxCount: 1,
-      },
-    },
-  ];
-
-  const [registerModel, { openModal }] = useModal();
-
-  const [register, { setProps, validate, setFieldsValue }] = useForm({
-    labelWidth: 120,
-    schemas: schemas,
-    actionColOptions: {
-      span: 24,
-    },
-    compact: true,
-    showResetButton: false,
-    showSubmitButton: false,
-    showAdvancedButton: false,
-    disabled: false,
-  });
-
-  function handleSubmit(values) {
-    console.log(values);
-  }
-
-  function setDisabled(flag) {
-    setProps({ disabled: !!flag });
-  }
-
-  function showUploadModal() {
-    openModal(true, {
-      maxCount: 9,
-      fileType: UploadTypeEnum.image,
-    });
-  }
-</script>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo1.vue b/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo1.vue
deleted file mode 100644
index 32293bf..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo1.vue
+++ /dev/null
@@ -1,384 +0,0 @@
-<template>
-  <a-space>
-    <a-button @click="onToggleLoading">鍒囨崲鍔犺浇</a-button>
-    <a-button @click="onToggleDisabled">鍒囨崲绂佺敤</a-button>
-  </a-space>
-
-  <JVxeTable
-    ref="tableRef"
-    stripe
-    toolbar
-    rowNumber
-    rowSelection
-    rowExpand
-    resizable
-    asyncRemove
-    clickSelectRow
-    :maxHeight="480"
-    :checkboxConfig="{ range: true }"
-    :disabledRows="{ input: ['text--16', 'text--18'] }"
-    :loading="loading"
-    :disabled="disabled"
-    :columns="columns"
-    :dataSource="dataSource"
-    @remove="onJVxeRemove"
-  >
-    <template #toolbarSuffix>
-      <a-button @click="handleTableCheck">琛ㄥ崟楠岃瘉</a-button>
-      <a-tooltip placement="top" title="鑾峰彇鍊硷紝蹇界暐琛ㄥ崟楠岃瘉" :autoAdjustOverflow="true">
-        <a-button @click="onGetData">鑾峰彇鏁版嵁</a-button>
-      </a-tooltip>
-      <a-tooltip placement="top" title="妯℃嫙鍔犺浇1000鏉℃暟鎹�" :autoAdjustOverflow="true">
-        <a-button @click="handleTableSet">璁剧疆鍊�</a-button>
-      </a-tooltip>
-      <a-button @click="onGetSelData">鑾峰彇閫変腑鏁版嵁</a-button>
-      <a-button @click="onClearSel">娓呯┖閫変腑</a-button>
-      <a-button @click="onDelFirst">鍒犻櫎绗竴琛屾暟鎹�</a-button>
-      <a-button @click="onDelSel">鍒犻櫎閫変腑鏁版嵁</a-button>
-    </template>
-
-    <template #expandContent="props">
-      <div style="padding: 20px">
-        <span>Hello! My name is: {{ props.row.input }}!</span>
-      </div>
-    </template>
-
-    <template #myAction="props">
-      <a @click="onLookRow(props)">鏌ョ湅</a>
-      <a-divider type="vertical" />
-      <Popconfirm title="纭畾鍒犻櫎鍚楋紵" @confirm="onDeleteRow(props)">
-        <a>鍒犻櫎</a>
-      </Popconfirm>
-    </template>
-  </JVxeTable>
-</template>
-
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  // noinspection ES6UnusedImports
-  import { Popconfirm } from 'ant-design-vue';
-  import { JVxeTypes, JVxeColumn, JVxeTableInstance } from '/@/components/jeecg/JVxeTable/types';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { random } from 'lodash-es';
-  import { buildUUID } from '/@/utils/uuid';
-  import dayjs from 'dayjs';
-  import { pushIfNotExist } from '/@/utils/common/compUtils';
-
-  const { createMessage } = useMessage();
-  const tableRef = ref<JVxeTableInstance>();
-  const loading = ref(false);
-  const disabled = ref(false);
-  const columns = ref<JVxeColumn[]>([
-    {
-      title: 'ID',
-      key: 'id',
-      type: JVxeTypes.hidden,
-    },
-    {
-      title: '涓嶅彲缂栬緫',
-      key: 'noEdit',
-      type: JVxeTypes.normal,
-      width: 180,
-      defaultValue: 'noEdit-new',
-    },
-    {
-      title: '鍗曡鏂囨湰',
-      key: 'input',
-      type: JVxeTypes.input,
-      width: 180,
-      defaultValue: '',
-      placeholder: '璇疯緭鍏�${title}',
-      validateRules: [
-        {
-          required: true, // 蹇呭~
-          message: '璇疯緭鍏�${title}', // 鏄剧ず鐨勬枃鏈�
-        },
-        {
-          pattern: /^[a-z|A-Z][a-z|A-Z\d_-]*$/, // 姝e垯
-          message: '蹇呴』浠ュ瓧姣嶅紑澶达紝鍙寘鍚暟瀛椼�佷笅鍒掔嚎銆佹í鏉�',
-        },
-        {
-          unique: true,
-          message: '${title}涓嶈兘閲嶅',
-        },
-        {
-          handler({ cellValue, row, column }, callback, target) {
-            // cellValue 褰撳墠鏍¢獙鐨勫��
-            // callback(flag, message) 鏂规硶蹇呴』鎵ц涓斿彧鑳芥墽琛屼竴娆�
-            //          flag = 鏄惁閫氳繃浜嗘牎楠岋紝涓嶅~鍐欐垨鑰呭~鍐� null 浠h〃涓嶈繘琛屼换浣曟搷浣�
-            //          message = 鎻愮ず鐨勭被鍨嬶紝榛樿浣跨敤閰嶇疆鐨� message
-            // target 琛岀紪杈戠殑瀹炰緥瀵硅薄
-            if (cellValue === 'abc') {
-              callback(false, '${title}涓嶈兘鏄痑bc'); // false = 鏈�氳繃鏍¢獙
-            } else {
-              callback(true); // true = 閫氳繃楠岃瘉
-            }
-          },
-          message: '${title}榛樿鎻愮ず',
-        },
-      ],
-    },
-    {
-      title: '澶氳鏂囨湰',
-      key: 'textarea',
-      type: JVxeTypes.textarea,
-      width: 200,
-    },
-    {
-      title: '鏁板瓧',
-      key: 'number',
-      type: JVxeTypes.inputNumber,
-      width: 80,
-      defaultValue: 32,
-      // 銆愮粺璁″垪銆憇um = 姹傚拰銆乤verage = 骞冲潎鍊�
-      statistics: ['sum', 'average'],
-    },
-    {
-      title: '涓嬫媺妗�',
-      key: 'select',
-      type: JVxeTypes.select,
-      width: 180,
-      // 涓嬫媺閫夐」
-      options: [
-        { title: 'String', value: 'string' },
-        { title: 'Integer', value: 'int' },
-        { title: 'Double', value: 'double' },
-        { title: 'Boolean', value: 'boolean' },
-      ],
-      // allowInput: true,
-      allowSearch: true,
-      placeholder: '璇烽�夋嫨',
-    },
-    {
-      title: '涓嬫媺妗哶瀛楀吀',
-      key: 'select_dict',
-      type: JVxeTypes.select,
-      width: 180,
-      options: [],
-      dictCode: 'sex',
-      placeholder: '璇烽�夋嫨',
-    },
-    {
-      title: '涓嬫媺妗哶澶氶��',
-      key: 'select_multiple',
-      type: JVxeTypes.selectMultiple,
-      width: 205,
-      options: [
-        { title: 'String', value: 'string' },
-        { title: 'Integer', value: 'int' },
-        { title: 'Double', value: 'double' },
-        { title: 'Boolean', value: 'boolean' },
-      ],
-      defaultValue: ['int', 'boolean'], // 澶氫釜榛樿椤�
-      // defaultValue: 'string,double,int', // 涔熷彲浣跨敤杩欑鏂瑰紡
-      placeholder: '澶氶��',
-    },
-    {
-      title: '涓嬫媺妗哶鎼滅储',
-      key: 'select_search',
-      type: JVxeTypes.selectSearch,
-      width: 180,
-      options: [
-        { title: 'String', value: 'string' },
-        { title: 'Integer', value: 'int' },
-        { title: 'Double', value: 'double' },
-        { title: 'Boolean', value: 'boolean' },
-      ],
-    },
-    {
-      title: '鏃ユ湡鏃堕棿',
-      key: 'datetime',
-      type: JVxeTypes.datetime,
-      width: 200,
-      defaultValue: '2019-04-30 14:52:22',
-      placeholder: '璇烽�夋嫨',
-    },
-    {
-      title: '鏃堕棿',
-      key: 'time',
-      type: JVxeTypes.time,
-      width: 200,
-      defaultValue: '14:52:22',
-      placeholder: '璇烽�夋嫨',
-    },
-    {
-      title: '澶嶉�夋',
-      key: 'checkbox',
-      type: JVxeTypes.checkbox,
-      width: 100,
-      customValue: ['Y', 'N'], // true ,false
-      defaultChecked: false,
-    },
-    {
-      title: '鎿嶄綔',
-      key: 'action',
-      type: JVxeTypes.slot,
-      fixed: 'right',
-      minWidth: 100,
-      align: 'center',
-      slotName: 'myAction',
-    },
-  ]);
-  const dataSource = ref<any[]>([]);
-
-  /* 闅忔満鐢熸垚鏁版嵁 */
-  function randomPage(current, pageSize, isLoading = false) {
-    if (isLoading) {
-      loading.value = true;
-    }
-
-    let randomDatetime = () => {
-      let time = random(1000, 9999999999999);
-      return dayjs(new Date(time)).format('YYYY-MM-DD HH:mm:ss');
-    };
-
-    let limit = (current - 1) * pageSize;
-
-    let options = ['string', 'int', 'double', 'boolean'];
-
-    let begin = Date.now();
-    let values: any[] = [];
-    for (let i = 0; i < pageSize; i++) {
-      values.push({
-        id: buildUUID(),
-        noEdit: `noEdit-${limit + i + 1}`,
-        input: `text-${limit + i + 1}`,
-        textarea: `textarea-${limit + i + 1}`,
-        number: random(0, 233),
-        select: options[random(0, 3)],
-        select_dict: random(1, 2).toString(),
-        select_multiple: (() => {
-          let length = random(1, 4);
-          let arr = [];
-          for (let j = 0; j < length; j++) {
-            pushIfNotExist(arr, options[random(0, 3)]);
-          }
-          return arr.join(',');
-        })(),
-        select_search: options[random(0, 3)],
-        datetime: randomDatetime(),
-        checkbox: ['Y', 'N'][random(0, 1)],
-      });
-    }
-
-    dataSource.value = values;
-    let end = Date.now();
-    let diff = end - begin;
-
-    if (isLoading && diff < pageSize) {
-      setTimeout(() => (loading.value = false), pageSize - diff);
-    }
-  }
-
-  randomPage(0, 20, true);
-
-  function onLookRow(props) {
-    createMessage.success('璇峰湪鎺у埗鍙版煡鐪嬭緭鍑�');
-    // 鍙傛暟浠嬬粛锛�
-    // props.value          褰撳墠鍗曞厓鏍肩殑鍊�
-    // props.row            褰撳墠琛岀殑鏁版嵁
-    // props.rowId          褰撳墠琛孖D
-    // props.rowIndex       褰撳墠琛屼笅鏍�
-    // props.column         褰撳墠鍒楃殑閰嶇疆
-    // props.columnIndex    褰撳墠鍒椾笅鏍�
-    // props.$table         vxe瀹炰緥锛屽彲浠ヨ皟鐢╲xe鍐呯疆鏂规硶
-    // props.target         JVXE瀹炰緥锛屽彲浠ヨ皟鐢↗VXE鍐呯疆鏂规硶
-    // props.caseId         JVXE瀹炰緥鍞竴ID
-    // props.scrolling      鏄惁姝e湪婊氬姩
-    // props.triggerChange  瑙﹀彂change浜嬩欢锛岀敤浜庢洿鏀箂lot鐨勫��
-    console.log('鏌ョ湅: ', { props });
-  }
-
-  async function onDeleteRow(props) {
-    // 璋冪敤鍒犻櫎鏂规硶
-    const res = await tableRef.value?.removeRows(props.row);
-    if (res && res.rows.length > 0) {
-      createMessage.success('鍒犻櫎鎴愬姛');
-    }
-  }
-
-  function handleValueChange(event) {
-    console.log('handleValueChange.event: ', event);
-  }
-
-  /** 琛ㄥ崟楠岃瘉 */
-  function handleTableCheck() {
-    tableRef.value!.validateTable().then((errMap) => {
-      if (errMap) {
-        console.log('琛ㄥ崟楠岃瘉鏈�氳繃锛�', { errMap });
-        createMessage.error('楠岃瘉鏈�氳繃锛岃鍦ㄦ帶鍒跺彴鏌ョ湅璇︾粏');
-      } else {
-        createMessage.success('楠岃瘉閫氳繃');
-      }
-    });
-  }
-
-  /** 鑾峰彇鍊硷紝蹇界暐琛ㄥ崟楠岃瘉 */
-  function onGetData() {
-    const values = tableRef.value!.getTableData();
-    console.log('鑾峰彇鍊�:', { values });
-    createMessage.success('鑾峰彇鍊兼垚鍔燂紝璇风湅鎺у埗鍙拌緭鍑�');
-  }
-
-  /** 妯℃嫙鍔犺浇1000鏉℃暟鎹� */
-  function handleTableSet() {
-    randomPage(1, 1000, true);
-  }
-
-  function onDelFirst() {
-    const xTable = tableRef.value!.getXTable();
-    const record = xTable.getTableData().fullData[0];
-    tableRef.value!.removeRows(record);
-  }
-
-  function onDelSel() {
-    const xTable = tableRef.value!.getXTable();
-    xTable.removeCheckboxRow();
-  }
-
-  function onGetSelData() {
-    createMessage.info('璇风湅鎺у埗鍙�');
-    console.log(tableRef.value!.getSelectionData());
-  }
-
-  function onClearSel() {
-    tableRef.value!.clearSelection();
-  }
-
-  function onToggleLoading() {
-    loading.value = !loading.value;
-  }
-
-  function onToggleDisabled() {
-    disabled.value = !disabled.value;
-  }
-
-  function doDelete(deleteRows) {
-    return new Promise((resolve) => {
-      let rowId = deleteRows.map((row) => row.id);
-      console.log('鍒犻櫎 rowId: ', rowId);
-      setTimeout(() => resolve(true), 1500);
-    });
-  }
-
-  /** 寮傛鍒犻櫎绀轰緥 */
-  async function onJVxeRemove(event) {
-    const hideLoading = createMessage.loading('鍒犻櫎涓��', 0);
-    try {
-      // 1. 鍚戝悗鍙颁紶閫� event.deleteRows 浠ュ垹闄�
-      let flag = await doDelete(event.deleteRows);
-      if (flag) {
-        // 娉細濡傛灉鍚敤浜嗚〃鏍肩殑 loading 鐘舵�侊紝鍒欏繀椤诲厛鍋滄鍐嶅垹闄わ紝鍚﹀垯浼氬鑷存棤娉曚粠琛ㄦ牸涓婂垹闄ゆ暟鎹�
-        // 2. 璋冪敤 event.confirmRemove 鏂规硶纭鍒犻櫎鎴愬姛
-        await tableRef.value!.removeSelection();
-        // await event.confirmRemove()
-        createMessage.success('鍒犻櫎鎴愬姛锛�');
-      } else {
-        // 3. 鑻ュ垹闄ゅけ璐ワ紝涓嶈皟鐢� event.confirmRemove() 鏂规硶灏变笉浼氬垹闄ゆ暟鎹�
-        createMessage.warn('鍒犻櫎澶辫触锛�');
-      }
-    } finally {
-      hideLoading();
-    }
-  }
-</script>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo2.vue b/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo2.vue
deleted file mode 100644
index b7ef461..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo2.vue
+++ /dev/null
@@ -1,179 +0,0 @@
-<template>
-  <JVxeTable
-    ref="tableRef"
-    toolbar
-    row-number
-    row-selection
-    keep-source
-    :height="484"
-    :loading="loading"
-    :dataSource="dataSource"
-    :columns="columns"
-    :pagination="pagination"
-    style="margin-top: 8px"
-    @pageChange="handlePageChange"
-  >
-    <template #toolbarSuffix>
-      <a-button @click="handleTableGet">鑾峰彇鏁版嵁</a-button>
-    </template>
-  </JVxeTable>
-</template>
-
-<script lang="ts" setup>
-  import { reactive, ref } from 'vue';
-  // noinspection ES6UnusedImports
-  import { Popconfirm } from 'ant-design-vue';
-  import { JVxeColumn, JVxeTableInstance, JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { random } from 'lodash-es';
-  import { buildUUID } from '/@/utils/uuid';
-  import { uploadUrl } from '/@/api/common/api';
-
-  const tableRef = ref<JVxeTableInstance>();
-  const { createMessage } = useMessage();
-  const loading = ref(false);
-  const columns = ref<JVxeColumn[]>([
-    {
-      title: '涓嬫媺妗哶瀛楀吀琛ㄦ悳绱�',
-      key: 'select_dict_search',
-      type: JVxeTypes.selectDictSearch,
-      width: 200,
-      async: true, // 寮傛鎼滅储锛岄粯璁や负 true
-      // 瀛楀吀琛ㄩ厤缃俊鎭細鏁版嵁搴撹〃鍚�,鏄剧ず瀛楁鍚�,瀛樺偍瀛楁鍚�
-      dict: 'sys_user,realname,username',
-      tipsContent: '璇疯緭鍏ユ煡璇㈡潯浠�',
-    },
-    {
-      title: 'JPopup',
-      key: 'popup',
-      type: JVxeTypes.popup,
-      width: 180,
-      popupCode: 'demo',
-      // field: 'name,sex,age',
-      // orgFields: 'name,sex,age',
-      // destFields: 'popup,popup_sex,popup_age',
-      fieldConfig: [
-        { source: 'name', target: 'popup' },
-        { source: 'sex', target: 'popup_sex' },
-        { source: 'age', target: 'popup_age' },
-      ],
-    },
-    {
-      title: 'JP-鎬у埆',
-      key: 'popup_sex',
-      type: JVxeTypes.select,
-      dictCode: 'sex',
-      disabled: true,
-      width: 100,
-    },
-    {
-      title: 'JP-骞撮緞',
-      key: 'popup_age',
-      type: JVxeTypes.normal,
-      width: 80,
-    },
-    {
-      title: '鐢ㄦ埛閫夋嫨',
-      key: 'userSelect',
-      type: JVxeTypes.userSelect,
-      width: 240,
-    },
-    {
-      title: '閮ㄩ棬閫夋嫨',
-      key: 'departSelect',
-      type: JVxeTypes.departSelect,
-      width: 240,
-    },
-    {
-      title: '鍗曢��',
-      key: 'radio',
-      type: JVxeTypes.radio,
-      width: 130,
-      options: [
-        { text: '鐢�', value: '1' },
-        { text: '濂�', value: '2' },
-      ],
-      // 鍏佽娓呴櫎閫夋嫨锛堝啀鐐逛竴娆″彇娑堥�夋嫨锛�
-      allowClear: false,
-    },
-    {
-      title: '涓婁紶',
-      key: 'upload',
-      type: JVxeTypes.upload,
-      width: 180,
-      btnText: '鐐瑰嚮涓婁紶',
-      token: true,
-      responseName: 'message',
-      action: uploadUrl,
-    },
-    {
-      title: '鍥剧墖涓婁紶',
-      key: 'image',
-      type: JVxeTypes.image,
-      width: 180,
-      maxCount: 6,
-    },
-    {
-      title: '鏂囦欢涓婁紶',
-      key: 'file',
-      type: JVxeTypes.file,
-      width: 180,
-      maxCount: 2,
-    },
-    {
-      title: '杩涘害鏉�',
-      key: 'progress',
-      type: JVxeTypes.progress,
-      minWidth: 320,
-    },
-  ]);
-  const dataSource = ref<any[]>([]);
-  const pagination = reactive({
-    current: 1,
-    pageSize: 10,
-    pageSizeOptions: ['10', '20', '30', '100', '200'],
-    total: 1000,
-  });
-
-  randomPage(pagination.current, pagination.pageSize, true);
-
-  // 褰撳垎椤靛弬鏁板彉鍖栨椂瑙﹀彂鐨勪簨浠�
-  function handlePageChange(event) {
-    // 閲嶆柊璧嬪��
-    pagination.current = event.current;
-    pagination.pageSize = event.pageSize;
-    // 鏌ヨ鏁版嵁
-    randomPage(event.current, event.pageSize, true);
-  }
-
-  /** 鑾峰彇鍊硷紝蹇界暐琛ㄥ崟楠岃瘉 */
-  function handleTableGet() {
-    const values = tableRef.value!.getTableData();
-    console.log('鑾峰彇鍊�:', { values });
-    createMessage.success('鑾峰彇鍊兼垚鍔燂紝璇风湅鎺у埗鍙拌緭鍑�');
-  }
-
-  /* 闅忔満鐢熸垚鍒嗛〉鏁版嵁 */
-  function randomPage(current, pageSize, $loading = false) {
-    if ($loading) {
-      loading.value = true;
-    }
-    let begin = Date.now();
-    let values: any[] = [];
-    for (let i = 0; i < pageSize; i++) {
-      let radio = random(0, 2);
-      values.push({
-        id: buildUUID(),
-        select_dict_search: ['admin', '', 'jeecg'][random(0, 2)],
-        progress: random(0, 100),
-        radio: radio ? radio.toString() : null,
-      });
-    }
-    dataSource.value = values;
-    let end = Date.now();
-    let diff = end - begin;
-    if ($loading && diff < pageSize) {
-      setTimeout(() => (loading.value = false), pageSize - diff);
-    }
-  }
-</script>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo3.vue b/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo3.vue
deleted file mode 100644
index 3b94b40..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo3.vue
+++ /dev/null
@@ -1,127 +0,0 @@
-<template>
-  <div>
-    <ol style="border: 1px solid #cccccc; width: 600px; padding: 8px">
-      <li>1. 寮�鍚� dragSort 灞炴�т箣鍚庡嵆鍙疄鐜颁笂涓嬫嫋鎷芥帓搴忋��</li>
-      <li>2. 浣跨敤 sortKey 灞炴�у彲浠ヨ嚜瀹氫箟鎺掑簭淇濆瓨鐨� key锛岄粯璁や负 orderNum銆�</li>
-      <li>3. 浣跨敤 sortBegin 灞炴�у彲浠ヨ嚜瀹氫箟鎺掑簭鐨勮捣濮嬪�硷紝榛樿涓� 0銆�</li>
-      <li>4. sortKey 瀹氫箟鐨勫瓧娈典笉闇�瑕佸畾涔夊湪 columns 涓篃鑳芥甯歌幏鍙栧埌鍊笺��</li>
-      <li>5. 褰撳瓨鍦� fixed 鍒楁椂锛屾嫋鎷芥帓搴忓皢浼氬け鏁堬紝浠呰兘涓婁笅鎺掑簭銆�</li>
-    </ol>
-
-    <p> 浠ヤ笅绀轰緥寮�鍚簡鎷栨嫿鎺掑簭锛屾帓搴忓�间繚瀛樺瓧娈典负 sortNum锛屾帓搴忚捣濮嬪�间负 3<br /> </p>
-
-    <JVxeTable
-      ref="tableRef1"
-      toolbar
-      dragSort
-      sortKey="sortNum"
-      :sortBegin="3"
-      rowSelection
-      :maxHeight="580"
-      :columns="table1.columns"
-      :dataSource="table1.data"
-    >
-      <template #toolbarSuffix>
-        <a-button @click="onGetData1">鑾峰彇鏁版嵁</a-button>
-      </template>
-    </JVxeTable>
-
-    <br />
-    <p>浠ヤ笅 fixed 琛ㄦ牸涓嶆敮鎸佹嫋鎷芥帓搴忥紝浠呮敮鎸佺偣鍑讳笂涓嬫帓搴�</p>
-
-    <JVxeTable ref="tableRef2" toolbar dragSort rowSelection :maxHeight="580" :columns="table2.columns" :dataSource="table2.data">
-      <template #toolbarSuffix>
-        <a-button @click="onGetData2">鑾峰彇鏁版嵁</a-button>
-      </template>
-    </JVxeTable>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { ref, reactive } from 'vue';
-  import { JVxeTypes, JVxeColumn, JVxeTableInstance } from '/@/components/jeecg/JVxeTable/types';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const tableRef1 = ref<JVxeTableInstance>();
-  const tableRef2 = ref<JVxeTableInstance>();
-  const table1 = reactive({
-    columns: [
-      {
-        title: 'ID',
-        key: 'id',
-        width: 120,
-        type: JVxeTypes.normal,
-      },
-      {
-        title: '濮撳悕',
-        key: 'name',
-        width: 240,
-        type: JVxeTypes.input,
-        defaultValue: 'new name',
-      },
-      {
-        title: '瀛楁闀垮害',
-        key: 'dbLength',
-        width: 240,
-        type: JVxeTypes.inputNumber,
-        defaultValue: 32,
-      },
-      {
-        title: 'sortNum',
-        key: 'sortNum',
-        width: 120,
-        type: JVxeTypes.normal,
-      },
-    ] as JVxeColumn[],
-    data: [
-      { id: 'uuid-0001', name: '寮犱笁', dbLength: 123 },
-      { id: 'uuid-0002', name: '鏉庡洓', dbLength: 777 },
-      { id: 'uuid-0003', name: '鐜嬩簲', dbLength: 666 },
-      { id: 'uuid-0004', name: '璧靛叚', dbLength: 233 },
-    ],
-  });
-
-  const table2 = reactive({
-    columns: [
-      {
-        title: 'ID',
-        key: 'id',
-        width: 320,
-        fixed: 'left',
-        type: JVxeTypes.normal,
-      },
-      {
-        title: '濮撳悕',
-        key: 'name',
-        width: 720,
-        type: JVxeTypes.input,
-        defaultValue: 'new name',
-      },
-      {
-        title: '瀛楁闀垮害',
-        key: 'dbLength',
-        width: 720,
-        type: JVxeTypes.inputNumber,
-        defaultValue: 32,
-      },
-    ] as JVxeColumn[],
-    data: [
-      { id: 'uuid-0001', name: '寮犱笁', dbLength: 123 },
-      { id: 'uuid-0002', name: '鏉庡洓', dbLength: 777 },
-      { id: 'uuid-0003', name: '鐜嬩簲', dbLength: 666 },
-      { id: 'uuid-0004', name: '璧靛叚', dbLength: 233 },
-    ],
-  });
-
-  const { createMessage } = useMessage();
-
-  function onGetData1() {
-    createMessage.info('璇风湅鎺у埗鍙�');
-    console.log(tableRef1.value!.getTableData());
-  }
-
-  function onGetData2() {
-    createMessage.info('璇风湅鎺у埗鍙�');
-    console.log(tableRef2.value!.getTableData());
-  }
-</script>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo4.vue b/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo4.vue
deleted file mode 100644
index d11f699..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo4.vue
+++ /dev/null
@@ -1,153 +0,0 @@
-<template>
-  <JVxeTable
-    ref="vTable"
-    toolbar
-    rowNumber
-    rowSelection
-    :maxHeight="580"
-    :dataSource="dataSource"
-    :columns="columns"
-    :linkageConfig="linkageConfig"
-  />
-</template>
-
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { JVxeTypes, JVxeColumn, JVxeLinkageConfig } from '/@/components/jeecg/JVxeTable/types';
-
-  // 鑱斿姩閰嶇疆
-  const linkageConfig = ref<JVxeLinkageConfig[]>([
-    { requestData: requestMockData, key: 's1' },
-    // 鍙厤缃涓仈鍔�
-    { requestData: requestMenu, key: 'menu1' },
-  ]);
-
-  const columns = ref<JVxeColumn[]>([
-    {
-      title: '鎬у埆',
-      key: 'sex',
-      type: JVxeTypes.select,
-      dictCode: 'sex',
-      width: '180px',
-      placeholder: '璇烽�夋嫨${title}',
-    },
-    {
-      title: '鐪�/鐩磋緰甯�/鑷不鍖�',
-      key: 's1',
-      type: JVxeTypes.select,
-      width: '180px',
-      placeholder: '璇烽�夋嫨${title}',
-      // 鑱斿姩瀛楁锛堝嵆涓嬩竴绾х殑瀛楁锛�
-      linkageKey: 's2',
-    },
-    {
-      title: '甯�',
-      key: 's2',
-      type: JVxeTypes.select,
-      width: '180px',
-      placeholder: '璇烽�夋嫨${title}',
-      // 鑱斿姩瀛楁锛堝嵆涓嬩竴绾х殑瀛楁锛�
-      linkageKey: 's3',
-    },
-    {
-      title: '鍘�/鍖�',
-      key: 's3',
-      type: JVxeTypes.select,
-      width: '180px',
-      options: [],
-      placeholder: '璇烽�夋嫨${title}',
-    },
-    {
-      title: '涓�绾ц彍鍗�',
-      key: 'menu1',
-      type: JVxeTypes.select,
-      width: '180px',
-      placeholder: '璇烽�夋嫨${title}',
-      // 鑱斿姩瀛楁锛堝嵆涓嬩竴绾х殑瀛楁锛�
-      linkageKey: 'menu2',
-    },
-    {
-      title: '浜岀骇鑿滃崟',
-      key: 'menu2',
-      type: JVxeTypes.select,
-      width: '180px',
-      placeholder: '璇烽�夋嫨${title}',
-      // 鑱斿姩瀛楁锛堝嵆涓嬩竴绾х殑瀛楁锛�
-      linkageKey: 'menu3',
-    },
-    {
-      title: '涓夌骇鑿滃崟',
-      key: 'menu3',
-      type: JVxeTypes.select,
-      width: '180px',
-      placeholder: '璇烽�夋嫨${title}',
-    },
-  ]);
-
-  const dataSource = ref([
-    { sex: '1', s1: '110000', s2: '110100', s3: '110101' },
-    { sex: '2', s1: '130000', s2: '130300', s3: '130303' },
-  ]);
-
-  // 妯℃嫙鏁版嵁
-  const mockData = [
-    { text: '鍖椾含甯�', value: '110000', parent: '' },
-    { text: '澶╂触甯�', value: '120000', parent: '' },
-    { text: '娌冲寳鐪�', value: '130000', parent: '' },
-    { text: '涓婃捣甯�', value: '310000', parent: '' },
-
-    { text: '鍖椾含甯�', value: '110100', parent: '110000' },
-    { text: '澶╂触甯傚競', value: '120100', parent: '120000' },
-    { text: '鐭冲搴勫競', value: '130100', parent: '130000' },
-    { text: '鍞愬北甯�', value: '130200', parent: '130000' },
-    { text: '绉︾殗宀涘競', value: '130300', parent: '130000' },
-    { text: '涓婃捣甯�', value: '310100', parent: '310000' },
-
-    { text: '涓滃煄鍖�', value: '110101', parent: '110100' },
-    { text: '瑗垮煄鍖�', value: '110102', parent: '110100' },
-    { text: '鏈濋槼鍖�', value: '110105', parent: '110100' },
-    { text: '鍜屽钩鍖�', value: '120101', parent: '120100' },
-    { text: '娌充笢鍖�', value: '120102', parent: '120100' },
-    { text: '娌宠タ鍖�', value: '120103', parent: '120100' },
-    { text: '榛勬郸鍖�', value: '310101', parent: '310100' },
-    { text: '寰愭眹鍖�', value: '310104', parent: '310100' },
-    { text: '闀垮畞鍖�', value: '310105', parent: '310100' },
-    { text: '闀垮畨鍖�', value: '130102', parent: '130100' },
-    { text: '妗ヨタ鍖�', value: '130104', parent: '130100' },
-    { text: '鏂板崕鍖�', value: '130105', parent: '130100' },
-    { text: '璺崡鍖�', value: '130202', parent: '130200' },
-    { text: '璺寳鍖�', value: '130203', parent: '130200' },
-    { text: '鍙ゅ喍鍖�', value: '130204', parent: '130200' },
-    { text: '娴锋腐鍖�', value: '130302', parent: '130300' },
-    { text: '灞辨捣鍏冲尯', value: '130303', parent: '130300' },
-    { text: '鍖楁埓娌冲尯', value: '130304', parent: '130300' },
-  ];
-
-  /** 妯℃嫙浠庡悗鍙版煡璇㈡暟鎹� */
-  function requestMockData(parent) {
-    return new Promise((resolve) => {
-      let data = mockData.filter((i) => i.parent === parent);
-      setTimeout(() => resolve(data), 500);
-    });
-  }
-
-  /** 鏌ヨ鍚庡彴鐪熷疄鏁版嵁 */
-  async function requestMenu(parent) {
-    let result;
-    // 濡傛灉parent涓虹┖锛屽垯鏌ヨ绗竴绾ц彍鍗�
-    if (parent === '') {
-      result = await defHttp.get({
-        url: '/sys/permission/getSystemMenuList',
-        params: {},
-      });
-    } else {
-      result = await defHttp.get({
-        url: '/sys/permission/getSystemSubmenu',
-        params: { parentId: parent },
-      });
-    }
-    // 杩斿洖鐨勬暟鎹噷蹇呴』鍖呭惈 value 鍜� text 瀛楁
-    return result.map((item) => ({ value: item.id, text: item.name }));
-  }
-</script>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo5.vue b/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo5.vue
deleted file mode 100644
index c756fc2..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/JVxeDemo5.vue
+++ /dev/null
@@ -1,129 +0,0 @@
-<template>
-  <div>
-    <b>閿洏鎿嶄綔蹇嵎閿細</b>
-    <div style="border: 1px solid #cccccc; padding: 8px; width: 740px">
-      <pre>
-             F2 | 濡傛灉瀛樺湪锛屾縺娲诲崟鍏冩牸涓虹紪杈戠姸鎬�
-            Esc | 濡傛灉瀛樺湪锛屽彇娑堝崟鍏冩牸缂栬緫鐘舵��
-              鈫� | 濡傛灉瀛樺湪锛屽垯绉诲姩鍒颁笂闈㈢殑鍗曞厓鏍�
-              鈫� | 濡傛灉瀛樺湪锛屽垯绉诲姩鍒颁笅闈㈢殑鍗曞厓鏍�
-              鈫� | 濡傛灉瀛樺湪锛屽垯绉诲姩鍒板乏杈圭殑鍗曞厓鏍�
-              鈫� | 濡傛灉瀛樺湪锛屽垯绉诲姩鍒板彸杈圭殑鍗曞厓鏍�
-            Tab | 濡傛灉瀛樺湪锛屽垯绉诲姩鍒板彸杈瑰崟鍏冩牸锛涘鏋滅Щ鍔ㄥ埌鏈�鍚庝竴鍒楋紝鍒欎粠涓嬩竴琛屽紑濮嬬Щ鍒帮紝浠ユ寰幆
-    Shift + Tab | 濡傛灉瀛樺湪锛屽垯绉诲姩鍒板乏杈瑰崟鍏冩牸锛屽鏋滅Щ鍔ㄥ埌绗竴鍒楋紝鍒欎粠涓婁竴琛屽紑濮嬬Щ鍒帮紝浠ユ寰幆
-          Enter | 濡傛灉瀛樺湪锛屽彇娑堝崟鍏冩牸缂栬緫骞剁Щ鍔ㄥ埌涓嬮潰鐨勫崟鍏冩牸
-  Shift + Enter | 濡傛灉瀛樺湪锛屽彇娑堝崟鍏冩牸缂栬緫骞剁Щ鍔ㄥ埌涓婇潰鐨勫崟鍏冩牸</pre
-      >
-    </div>
-
-    <JVxeTable ref="tableRef" stripe toolbar rowNumber rowSelection keyboardEdit :columns="columns" :dataSource="dataSource"> </JVxeTable>
-  </div>
-</template>
-<script lang="ts">
-  import { ref, onMounted, nextTick, defineComponent } from 'vue';
-  import { Popconfirm } from 'ant-design-vue';
-  import { JVxeTypes, JVxeColumn, JVxeTableInstance } from '/@/components/jeecg/JVxeTable/types';
-
-  export default defineComponent({
-    name: 'JVxeDemo5',
-    components: { [Popconfirm.name]: Popconfirm },
-    setup() {
-      const tableRef = ref<JVxeTableInstance>();
-      const columns = ref<JVxeColumn[]>([
-        {
-          title: '鍗曡鏂囨湰',
-          key: 'input',
-          type: JVxeTypes.input,
-          width: 220,
-          defaultValue: '',
-          placeholder: '璇疯緭鍏�${title}',
-        },
-        {
-          title: '澶氳鏂囨湰',
-          key: 'textarea',
-          type: JVxeTypes.textarea,
-          width: 240,
-        },
-        {
-          title: '鏁板瓧',
-          key: 'number',
-          type: JVxeTypes.inputNumber,
-          width: 120,
-          defaultValue: 32,
-        },
-        {
-          title: '鏃ユ湡鏃堕棿',
-          key: 'datetime',
-          type: JVxeTypes.datetime,
-          width: 240,
-          defaultValue: '2019-04-30 14:51:22',
-          placeholder: '璇烽�夋嫨',
-        },
-        {
-          title: '鏃堕棿',
-          key: 'time',
-          type: JVxeTypes.time,
-          width: 220,
-          defaultValue: '14:52:22',
-          placeholder: '璇烽�夋嫨',
-        },
-        {
-          title: '涓嬫媺妗�',
-          key: 'select',
-          type: JVxeTypes.select,
-          width: 220,
-          // 涓嬫媺閫夐」
-          options: [
-            { title: 'String', value: 'string' },
-            { title: 'Integer', value: 'int' },
-            { title: 'Double', value: 'double' },
-            { title: 'Boolean', value: 'boolean' },
-          ],
-          // allowInput: true,
-          allowSearch: true,
-          placeholder: '璇烽�夋嫨',
-        },
-        {
-          title: '澶嶉�夋',
-          key: 'checkbox',
-          type: JVxeTypes.checkbox,
-          // width: 100,
-          customValue: ['Y', 'N'], // true ,false
-          defaultChecked: false,
-        },
-      ]);
-      const dataSource = ref([]);
-
-      function handleView(props) {
-        // 鍙傛暟浠嬬粛锛�
-        // props.value          褰撳墠鍗曞厓鏍肩殑鍊�
-        // props.row            褰撳墠琛岀殑鏁版嵁
-        // props.rowId          褰撳墠琛孖D
-        // props.rowIndex       褰撳墠琛屼笅鏍�
-        // props.column         褰撳墠鍒楃殑閰嶇疆
-        // props.columnIndex    褰撳墠鍒椾笅鏍�
-        // props.$table         vxe-table瀹炰緥锛屽彲浠ヨ皟鐢╲xe-table鍐呯疆鏂规硶
-        // props.scrolling      鏄惁姝e湪婊氬姩
-        // props.reloadEffect   鏄惁寮�鍚簡鏁版嵁鍒锋柊鐗规晥
-        // props.triggerChange  瑙﹀彂change浜嬩欢锛岀敤浜庢洿鏀箂lot鐨勫��
-        console.log('props: ', props);
-      }
-
-      function handleDelete({ row }) {
-        // 浣跨敤瀹炰緥锛氬垹闄ゅ綋鍓嶆搷浣滅殑琛�
-        tableRef.value?.removeRows(row);
-      }
-
-      onMounted(async () => {
-        console.log(tableRef.value);
-        await nextTick();
-        // 榛樿娣诲姞浜旇鏁版嵁
-        tableRef.value!.addRows([{ input: 'input_1' }, { input: 'input_2' }, { input: 'input_3' }, { input: 'input_4' }, { input: 'input_5' }], {
-          setActive: false,
-        });
-      });
-
-      return { tableRef, columns, dataSource, handleView, handleDelete };
-    },
-  });
-</script>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/func-demo/JSBCDemo.vue b/src/views/demo/jeecg/JVxeTableDemo/func-demo/JSBCDemo.vue
deleted file mode 100644
index b44d4ef..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/func-demo/JSBCDemo.vue
+++ /dev/null
@@ -1,224 +0,0 @@
-<template>
-  <a-card title="鍗虫椂淇濆瓨绀轰緥" :bordered="false">
-    <!--
-      銆愬嵆鏃朵繚瀛樺ぇ浣撴�濊矾銆戯細
-      1. JVxeTable 涓婂繀椤诲姞 keep-source 灞炴��
-      2. 鐩戝惉 edit-closed浜嬩欢锛岃繖涓簨浠舵槸鍦ㄧ紪杈戝畬鎴愬悗瑙﹀彂
-      3. 鍦ㄨ繖涓簨浠堕噷闈㈠垽鏂暟鎹槸鍚︽洿鏀癸紝濡傛灉鏇存敼浜嗗氨璋冪敤鎺ュ彛杩涜淇濆瓨鎿嶄綔
-    -->
-    <JVxeTable
-      toolbar
-      :toolbarConfig="toolbarConfig"
-      rowNumber
-      rowSelection
-      keepSource
-      asyncRemove
-      :height="340"
-      :loading="loading"
-      :columns="columns"
-      :dataSource="dataSource"
-      :pagination="pagination"
-      @save="handleTableSave"
-      @removed="handleTableRemove"
-      @edit-closed="handleEditClosed"
-      @pageChange="handlePageChange"
-      @selectRowChange="handleSelectRowChange"
-    />
-  </a-card>
-</template>
-
-<script lang="ts" setup>
-  // 鍗虫椂淇濆瓨绀轰緥
-  import { reactive, ref } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { JVxeColumn, JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const { createMessage } = useMessage();
-  // 宸ュ叿鏍忕殑鎸夐挳閰嶇疆
-  const toolbarConfig = reactive({
-    // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
-    btn: ['add', 'save', 'remove', 'clearSelection'],
-  });
-  // 鏄惁姝e湪鍔犺浇
-  const loading = ref(false);
-  // 鍒嗛〉鍣ㄥ弬鏁�
-  const pagination = reactive({
-    // 褰撳墠椤电爜
-    current: 1,
-    // 姣忛〉鐨勬潯鏁�
-    pageSize: 200,
-    // 鍙垏鎹㈢殑鏉℃暟
-    pageSizeOptions: ['10', '20', '30', '100', '200'],
-    // 鏁版嵁鎬绘暟锛堢洰鍓嶅苟涓嶇煡閬撶湡瀹炵殑鎬绘暟锛屾墍浠ュ厛濉啓0锛屽湪鍚庡彴鏌ュ嚭鏉ュ悗鍐嶈祴鍊硷級
-    total: 0,
-  });
-  // 閫夋嫨鐨勮
-  const selectedRows = ref<Recordable[]>([]);
-  // 鏁版嵁婧愶紝鎺у埗琛ㄦ牸鐨勬暟鎹�
-  const dataSource = ref<Recordable[]>([]);
-  // 鍒楅厤缃紝鎺у埗琛ㄦ牸鏄剧ず鐨勫垪
-  const columns = ref<JVxeColumn[]>([
-    { key: 'num', title: '搴忓彿', width: 80, type: JVxeTypes.normal },
-    {
-      // 瀛楁key锛岃窡鍚庡彴鏁版嵁鐨勫瓧娈靛悕鍖归厤
-      key: 'ship_name',
-      // 鍒楃殑鏍囬
-      title: '鑸瑰悕',
-      // 鍒楃殑瀹藉害
-      width: 180,
-      // 濡傛灉鍔犱笂浜嗚灞炴�э紝灏变唬琛ㄥ綋鍓嶅崟鍏冩牸鏄彲缂栬緫鐨勶紝type灏辨槸琛ㄥ崟鐨勭被鍨嬶紝input灏辨槸绠�鍗曠殑杈撳叆妗�
-      type: JVxeTypes.input,
-    },
-    { key: 'call', title: '鍛煎彨', width: 80, type: JVxeTypes.input },
-    { key: 'len', title: '闀�', width: 80, type: JVxeTypes.input },
-    { key: 'ton', title: '鍚�', width: 120, defaultValue: 233, type: JVxeTypes.input },
-    { key: 'payer', title: '浠樻鏂�', width: 120, defaultValue: '寮犱笁', type: JVxeTypes.input },
-    { key: 'count', title: '鏁�', width: 40, type: JVxeTypes.normal },
-    {
-      key: 'company',
-      title: '鍏徃',
-      // 鏈�灏忓搴︼紝涓庡搴︿笉鍚岀殑鏄紝杩欎釜涓嶆槸鍥哄畾鐨勫搴︼紝濡傛灉琛ㄦ牸鏈夊浣欑殑绌洪棿锛屼細骞冲潎鍒嗛厤缁欒缃簡 minWidth 鐨勫垪
-      // 濡傛灉瑕佸仛鍗犳弧琛ㄦ牸鐨勫垪鍙互杩欎箞鍐�
-      minWidth: 180,
-      type: JVxeTypes.input,
-    },
-    { key: 'trend', title: '鍔ㄥ悜', width: 120, type: JVxeTypes.input },
-  ]);
-
-  // 鏌ヨurl鍦板潃
-  enum Api {
-    getData = '/mock/vxe/getData',
-    // 妯℃嫙淇濆瓨鍗曡鏁版嵁锛堝嵆鏃朵繚瀛橈級
-    saveRow = '/mock/vxe/immediateSaveRow',
-    // 妯℃嫙淇濆瓨鏁翠釜琛ㄦ牸鐨勬暟鎹�
-    saveAll = '/mock/vxe/immediateSaveAll',
-  }
-
-  loadData();
-
-  // 鍔犺浇鏁版嵁
-  async function loadData() {
-    loading.value = true;
-    // 璋冪敤鏌ヨ鏁版嵁鎺ュ彛
-    await defHttp
-      .get({
-        // 璇锋眰鍦板潃
-        url: Api.getData,
-        // 灏佽鏌ヨ鏉′欢
-        params: {
-          pageNo: pagination.current,
-          pageSize: pagination.pageSize,
-        },
-      })
-      .then((result) => {
-        // 鍚庡彴鏌ヨ鍥炴潵鐨� total锛屾暟鎹�绘暟閲�
-        pagination.total = result.total;
-        // 灏嗘煡璇㈢殑鏁版嵁璧嬪�肩粰 dataSource
-        dataSource.value = result.records;
-        // 閲嶇疆閫夋嫨
-        selectedRows.value = [];
-      })
-      .finally(() => {
-        // 杩欓噷鏄棤璁烘垚鍔熸垨澶辫触閮戒細鎵ц鐨勬柟娉曪紝鍦ㄨ繖閲屽叧闂璴oading
-        loading.value = false;
-      });
-  }
-
-  // 銆愭暣浣撲繚瀛樸�戠偣鍑讳繚瀛樻寜閽椂瑙﹀彂鐨勪簨浠�
-  function handleTableSave({ $table, target }) {
-    // 鏍¢獙鏁翠釜琛ㄦ牸
-    $table.validate().then((errMap) => {
-      // 鏍¢獙閫氳繃
-      if (!errMap) {
-        // 鑾峰彇鎵�鏈夋暟鎹�
-        let tableData = target.getTableData();
-        console.log('褰撳墠淇濆瓨鐨勬暟鎹槸锛�', tableData);
-        // 鑾峰彇鏂板鐨勬暟鎹�
-        let newData = target.getNewData();
-        console.log('-- 鏂板鐨勬暟鎹細', newData);
-        // 鑾峰彇鍒犻櫎鐨勬暟鎹�
-        let deleteData = target.getDeleteData();
-        console.log('-- 鍒犻櫎鐨勬暟鎹細', deleteData);
-        // 銆愭ā鎷熶繚瀛樸��
-        loading.value = true;
-        defHttp
-          .post({
-            url: Api.saveAll,
-            params: tableData,
-          })
-          .then(() => {
-            createMessage.success(`淇濆瓨鎴愬姛锛乣);
-          })
-          .finally(() => {
-            loading.value = false;
-          });
-      }
-    });
-  }
-
-  // 瑙﹀彂鍗曞厓鏍煎垹闄や簨浠�
-  function handleTableRemove(event) {
-    // 鎶� event.deleteRows 浼犵粰鍚庡彴杩涜鍒犻櫎锛堟敞鎰忥細杩欓噷涓嶄細浼犻�掑墠绔�昏緫鏂板鐨勬暟鎹紝鍥犱负涓嶉渶瑕佽姹傚悗鍙板垹闄わ級
-    console.log('寰呭垹闄ょ殑鏁版嵁: ', event.deleteRows);
-    // 涔熷彲浠ュ彧浼營D锛屽洜涓哄彲浠ユ牴鎹甀D鍒犻櫎
-    let deleteIds = event.deleteRows.map((row) => row.id);
-    console.log('寰呭垹闄ょ殑鏁版嵁ids: ', deleteIds);
-
-    // 妯℃嫙璇锋眰鍚庡彴鍒犻櫎
-    loading.value = true;
-    window.setTimeout(() => {
-      loading.value = false;
-      createMessage.success('鍒犻櫎鎴愬姛');
-      // 鍋囪鍚庡彴杩斿洖鍒犻櫎鎴愬姛锛屽繀椤昏璋冪敤 confirmRemove() 鏂规硶锛屾墠浼氱湡姝e湪琛ㄦ牸閲岀Щ闄わ紙浼氬悓鏃跺垹闄ら�変腑鐨勯�昏緫鏂板鐨勬暟鎹級
-      event.confirmRemove();
-    }, 1000);
-  }
-
-  // 鍗曞厓鏍肩紪杈戝畬鎴愪箣鍚庤Е鍙戠殑浜嬩欢
-  function handleEditClosed(event) {
-    let { $table, row, column } = event;
-    let field = column.property;
-    // 鍒ゆ柇鍗曞厓鏍煎�兼槸鍚﹁淇敼
-    if ($table.isUpdateByRow(row, field)) {
-      // 鏍¢獙褰撳墠琛�
-      $table.validate(row).then((errMap) => {
-        // 鏍¢獙閫氳繃
-        if (!errMap) {
-          // 銆愭ā鎷熶繚瀛樸��
-          let hideLoading = createMessage.loading(`姝e湪淇濆瓨"${column.title}"`, 0);
-          console.log('鍗虫椂淇濆瓨鏁版嵁锛�', row);
-          defHttp
-            .put({
-              url: Api.saveRow,
-              params: row,
-            })
-            .then((res) => {
-              createMessage.success(`"${column.title}"淇濆瓨鎴愬姛锛乣);
-              // 灞�閮ㄦ洿鏂板崟鍏冩牸涓哄凡淇濆瓨鐘舵��
-              $table.reloadRow(row, null, field);
-            })
-            .finally(() => {
-              hideLoading();
-            });
-        }
-      });
-    }
-  }
-
-  // 褰撳垎椤靛弬鏁板彉鍖栨椂瑙﹀彂鐨勪簨浠�
-  function handlePageChange(event) {
-    // 閲嶆柊璧嬪��
-    pagination.current = event.current;
-    pagination.pageSize = event.pageSize;
-    // 鏌ヨ鏁版嵁
-    loadData();
-  }
-
-  // 褰撻�夋嫨鐨勮鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-  function handleSelectRowChange(event) {
-    selectedRows.value = event.selectedRows;
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/func-demo/PopupSubTable.vue b/src/views/demo/jeecg/JVxeTableDemo/func-demo/PopupSubTable.vue
deleted file mode 100644
index 6febff6..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/func-demo/PopupSubTable.vue
+++ /dev/null
@@ -1,244 +0,0 @@
-<template>
-  <a-card title="寮瑰嚭瀛愯〃绀轰緥" :bordered="false">
-    <!--
-      銆愬脊鍑哄瓙琛ㄥぇ浣撴�濊矾銆�
-      1. 蹇呴』瑕佹湁 clickRowShowSubForm 灞炴�э紝濡傛灉璇ュ睘鎬ц涓篺alse锛岄偅涔堝氨涓嶄細寮瑰嚭瀛愯〃
-      2. 蹇呴』瑕佹湁 subForm 鎻掓Ы锛岀敤浜庤瀹氬脊鍑哄瓙琛ㄧ殑鍐呭
-      3. highlightCurrentRow 灞炴�у彲鏈夊彲鏃狅紝濡傛灉鏈夊垯鐐瑰嚮涓�琛岀殑鏃跺�欙紝璇ヨ浼氳儗鏅壊浼氬父浜�
-    -->
-    <!--
-      銆愬脊鍑鸿缁嗕俊鎭ぇ浣撴�濊矾銆�
-      1. 蹇呴』瑕佹湁 clickRowShowMainForm 灞炴�э紝濡傛灉璇ュ睘鎬ц涓篺alse锛岄偅涔堝氨涓嶄細寮瑰嚭璇︾粏淇℃伅
-      2. 蹇呴』瑕佹湁 mainForm 鎻掓Ы锛岀敤浜庤瀹氬脊鍑虹殑鍐呭
-    -->
-    <JVxeTable
-      toolbar
-      rowNumber
-      rowSelection
-      highlightCurrentRow
-      clickRowShowSubForm
-      clickRowShowMainForm
-      :height="750"
-      :loading="loading"
-      :columns="columns"
-      :dataSource="dataSource"
-      @detailsConfirm="handleDetailsConfirm"
-    >
-      <!-- 涓昏〃鍗� -->
-      <template #mainForm="{ row }">
-        <template v-if="row">
-          <a-form ref="form2" :model="row" :rules="rules" :label-col="labelCol" :wrapper-col="wrapperCol">
-            <a-row :gutter="8">
-              <a-col :span="8">
-                <a-form-item label="ID" name="id">
-                  <a-input v-model:value="row.id" disabled />
-                </a-form-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-item label="搴忓彿" name="num">
-                  <a-input v-model:value="row.num" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-item label="鑸瑰悕" name="ship_name">
-                  <a-input v-model:value="row.ship_name" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-item label="鍛煎彨" name="call">
-                  <a-input v-model:value="row.call" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-item label="闀�" name="len">
-                  <a-input v-model:value="row.len" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-item label="鍚�" name="ton">
-                  <a-input v-model:value="row.ton" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-item label="浠樻鏂�" name="payer">
-                  <a-input v-model:value="row.payer" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-item label="鏁�" name="count">
-                  <a-input v-model:value="row.count" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-item label="鍏徃" name="company">
-                  <a-input v-model:value="row.company" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-item label="鍔ㄥ悜" name="trend">
-                  <a-input v-model:value="row.trend" />
-                </a-form-item>
-              </a-col>
-            </a-row>
-          </a-form>
-        </template>
-      </template>
-
-      <!-- 瀛愯〃鍗� -->
-      <template #subForm="{ row }">
-        <template v-if="loadSubData(row)">
-          <JVxeTable
-            ref="subFormTable"
-            height="auto"
-            :max-height="350"
-            :loading="subTable.loading"
-            :columns="subTable.columns"
-            :dataSource="subTable.dataSource"
-          />
-        </template>
-      </template>
-    </JVxeTable>
-  </a-card>
-</template>
-
-<script lang="ts" setup>
-  // 寮瑰嚭瀛愯〃绀轰緥
-  import { reactive, ref } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { JVxeColumn, JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const { createMessage } = useMessage();
-  const loading = ref(false);
-  const dataSource = ref([]);
-  const columns = ref<JVxeColumn[]>([
-    { key: 'num', title: '搴忓彿', width: '80px' },
-    { key: 'ship_name', title: '鑸瑰悕', width: '180px', type: JVxeTypes.input },
-    { key: 'call', title: '鍛煎彨', width: '80px' },
-    { key: 'len', title: '闀�', width: '80px' },
-    { key: 'ton', title: '鍚�', width: '120px' },
-    { key: 'payer', title: '浠樻鏂�', width: '120px' },
-    { key: 'count', title: '鏁�', width: '40px' },
-    {
-      key: 'company',
-      title: '鍏徃',
-      minWidth: '180px',
-      // 鏄惁鐐瑰嚮鏄剧ず璇︾粏淇℃伅
-      // 鍙湁褰撳墠鍗曞厓鏍间笉鑳界紪杈戠殑鏃跺�欐墠鑳界敓鏁�
-      // 濡傛灉涓嶈鐨勮瘽锛岀偣鍑诲氨鍙脊鍑哄瓙琛紝涓嶄細寮瑰嚭涓昏〃鐨勮缁嗕俊鎭�
-      showDetails: true,
-    },
-    { key: 'trend', title: '鍔ㄥ悜', width: '120px' },
-  ]);
-  const selectedRows = ref([]);
-  // 瀛愯〃鐨勪俊鎭�
-  const subTable = reactive({
-    currentRowId: null,
-    loading: false,
-    pagination: { current: 1, pageSize: 200, pageSizeOptions: ['100', '200'], total: 0 },
-    selectedRows: [],
-    dataSource: [],
-    columns: [
-      { key: 'dd_num', title: '璋冨害搴忓彿', width: '120px' },
-      { key: 'tug', title: '鎷栬疆', width: '180px', type: JVxeTypes.input },
-      { key: 'work_start_time', title: '浣滀笟寮�濮嬫椂闂�', width: '180px', type: JVxeTypes.input },
-      { key: 'work_stop_time', title: '浣滀笟缁撴潫鏃堕棿', width: '180px', type: JVxeTypes.input },
-      { key: 'type', title: '鑸硅埗鍒嗙被', width: '120px', type: JVxeTypes.input },
-      { key: 'port_area', title: '鎵�灞炴腐鍖�', minWidth: '120px', type: JVxeTypes.input },
-    ] as JVxeColumn[],
-  });
-
-  // form琛ㄥ崟 col
-  const labelCol = reactive({ span: 4 });
-  const wrapperCol = reactive({ span: 20 });
-  const rules = reactive({
-    num: [{ required: true, message: '蹇呴』杈撳叆搴忓彿' }],
-  });
-
-  // 鏌ヨurl鍦板潃
-  enum Api {
-    getData = '/mock/vxe/getData',
-  }
-
-  loadData();
-
-  // 鍔犺浇鏁版嵁
-  function loadData() {
-    // 灏佽鏌ヨ鏉′欢
-    // 璋冪敤鏌ヨ鏁版嵁鎺ュ彛
-    loading.value = true;
-    defHttp
-      .get({
-        url: Api.getData,
-        params: {
-          pageNo: 1,
-          pageSize: 30,
-        },
-      })
-      .then((result) => {
-        // 灏嗘煡璇㈢殑鏁版嵁璧嬪�肩粰 dataSource
-        dataSource.value = result.records;
-        // 閲嶇疆閫夋嫨
-        selectedRows.value = [];
-      })
-      .finally(() => {
-        // 杩欓噷鏄棤璁烘垚鍔熸垨澶辫触閮戒細鎵ц鐨勬柟娉曪紝鍦ㄨ繖閲屽叧闂璴oading
-        loading.value = false;
-      });
-  }
-
-  // 鏌ヨ瀛愯〃鏁版嵁
-  function loadSubData(row) {
-    if (row) {
-      // 杩欓噷涓�瀹氳鍋氶檺鍒讹紝闄愬埗涓嶈兘閲嶅鏌ヨ锛屽惁鑰呬細鍑虹幇姝诲惊鐜�
-      if (subTable.currentRowId === row.id) {
-        return true;
-      }
-      subTable.currentRowId = row.id;
-      subTable.loading = true;
-      defHttp
-        .get({
-          url: Api.getData,
-          params: {
-            pageNo: 1,
-            pageSize: 30,
-            parentId: row.id,
-          },
-        })
-        .then((result) => {
-          // 灏嗘煡璇㈢殑鏁版嵁璧嬪�肩粰 dataSource
-          subTable.dataSource = result.records;
-        })
-        .finally(() => {
-          // 杩欓噷鏄棤璁烘垚鍔熸垨澶辫触閮戒細鎵ц鐨勬柟娉曪紝鍦ㄨ繖閲屽叧闂璴oading
-          subTable.loading = false;
-        });
-      return true;
-    } else {
-      return false;
-    }
-  }
-
-  // 璇︾粏淇℃伅閲岀偣浜嗙‘璁ゆ寜閽�
-  function handleDetailsConfirm({ row, $table, callback }) {
-    console.log('淇濆瓨鐨勬暟鎹細', row);
-    // 鏍¢獙褰撳墠琛�
-    $table.validate(row).then((errMap) => {
-      // 鏍¢獙閫氳繃
-      if (!errMap) {
-        // 鏍¢獙瀛愯〃锛屽鏋滈渶瑕佺殑璇濓紝鍙互鎿嶄綔涓嬮潰杩欎釜瀵硅薄锛�
-        callback(true);
-        loading.value = true;
-        setTimeout(() => {
-          loading.value = false;
-          createMessage.success('淇濆瓨鎴愬姛');
-        }, 1000);
-      } else {
-        callback(false);
-        createMessage.warn('鏍¢獙澶辫触');
-      }
-    });
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/func-demo/SocketReload.vue b/src/views/demo/jeecg/JVxeTableDemo/func-demo/SocketReload.vue
deleted file mode 100644
index 1ee4c9d..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/func-demo/SocketReload.vue
+++ /dev/null
@@ -1,126 +0,0 @@
-<template>
-  <a-card title="鏃犵棔鍒锋柊绀轰緥" :bordered="false">
-    <div style="margin-bottom: 8px">
-      <span>鍚敤鏁版嵁鍙樺姩鐗规晥锛�</span>
-      <a-switch v-model:checked="reloadEffect" />
-    </div>
-
-    <!--
-      銆愭棤鐥曞埛鏂板ぇ浣撴�濊矾銆戯細
-      1. 璇ュ姛鑳戒緷璧栦簬銆愬嵆鏃朵繚瀛樸�戝姛鑳斤紝璇峰厛鐪嬪嵆鏃朵繚瀛樼ず渚�
-      2. 蹇呴』瑕佹湁 socket-reload 灞炴�э紝涓旇涓� true
-      3. 蹇呴』瑕佹湁 socket-key 灞炴�э紝璇ュ睘鎬т负褰撳墠琛ㄦ牸鐨勫敮涓�鏍囪瘑锛�
-         绯荤粺浼氳嚜鍔ㄦ洿鏂版墍鏈� socket-key 鐩稿悓鐨勮〃鏍�
-      4. 鍦ㄥ眬閮ㄤ繚瀛� edit-closed 浜嬩欢涓紝
-         淇濆瓨鎴愬姛鍚庤皟鐢� socketSendUpdateRow 鏂规硶锛屽皢褰撳墠 row 浼犻�掕繃鍘诲嵆鍙� 锛堣绗� 102 琛岋級
-    -->
-    <JVxeTable
-      ref="tableRef"
-      rowNumber
-      rowSelection
-      keepSource
-      socketReload
-      socketKey="demo-socket-reload"
-      :reloadEffect="reloadEffect"
-      :height="340"
-      :loading="loading"
-      :columns="columns"
-      :dataSource="dataSource"
-      @valueChange="onValueChange"
-      @edit-closed="handleEditClosed"
-    />
-  </a-card>
-</template>
-
-<script lang="ts" setup>
-  // 鏃犵棔鍒锋柊绀轰緥
-  import { ref } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { JVxeColumn, JVxeTableInstance, JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const { createMessage } = useMessage();
-  const tableRef = ref<JVxeTableInstance>();
-  // 鏄惁鍚敤鏃ュ巻鍒锋柊鏁堟灉
-  const reloadEffect = ref(true);
-  const loading = ref(false);
-  const dataSource = ref<Recordable[]>([]);
-  const columns = ref<JVxeColumn[]>([
-    { key: 'num', title: '搴忓彿', width: 80 },
-    { key: 'enabled', title: '鍚敤', width: 80, type: JVxeTypes.checkbox },
-    { key: 'ship_name', title: '鑸瑰悕', width: 180, type: JVxeTypes.input },
-    { key: 'call', title: '鍛煎彨', width: 80, type: JVxeTypes.input },
-    { key: 'len', title: '闀�', width: 80, type: JVxeTypes.input },
-    { key: 'ton', title: '鍚�', width: 120, type: JVxeTypes.input },
-    { key: 'payer', title: '浠樻鏂�', width: 120, type: JVxeTypes.input },
-    { key: 'count', title: '鏁�', width: 40 },
-    { key: 'company', title: '鍏徃', minWidth: 180, type: JVxeTypes.input },
-    { key: 'trend', title: '鍔ㄥ悜', width: 120, type: JVxeTypes.input },
-  ]);
-
-  // 鏌ヨurl鍦板潃
-  enum Api {
-    getData = '/mock/vxe/getData',
-  }
-
-  loadData();
-
-  // 鍔犺浇鏁版嵁
-  function loadData() {
-    loading.value = true;
-    defHttp
-      .get({
-        url: Api.getData,
-        params: { pageNo: 1, pageSize: 200 },
-      })
-      .then((result) => {
-        dataSource.value = result.records;
-      })
-      .finally(() => {
-        loading.value = false;
-      });
-  }
-
-  /** 鍗曞厓鏍煎�煎彉鍖栨椂瑙﹀彂鐨勪簨浠� */
-  function onValueChange(event) {
-    switch (event.type) {
-      // 鎵�鏈変笉鑳借Е鍙� editClosed 浜嬩欢鐨勭粍浠讹紝閮介渶瑕佸畾涔夊湪杩欓噷锛屽彲浠ュ畨瑁呬綘鑷繁鐨勪笟鍔¢渶姹傛潵瀹屽杽姝ゅ鐨刢ase
-      case JVxeTypes.radio:
-      case JVxeTypes.checkbox:
-        doSendUpdateRow(event);
-        break;
-    }
-  }
-
-  // 鍗曞厓鏍肩紪杈戝畬鎴愪箣鍚庤Е鍙戠殑浜嬩欢
-  function handleEditClosed(event) {
-    doSendUpdateRow(event);
-  }
-
-  // 鍙戦�佸彉鏇磋璇锋眰
-  function doSendUpdateRow(event) {
-    let { $table, row, column } = event;
-    let field = column.property;
-    // 鍒ゆ柇鍗曞厓鏍煎�兼槸鍚﹁淇敼
-    if ($table.isUpdateByRow(row, field)) {
-      // 鏍¢獙褰撳墠琛�
-      $table.validate(row).then((errMap) => {
-        // 鏍¢獙閫氳繃
-        if (!errMap) {
-          // 銆愭ā鎷熶繚瀛樸�戯紙姝ゅ闇�瑕佹浛鎹㈡垚鐪熷疄鐨勮姹傦級
-          let hideLoading = createMessage.loading(`姝e湪淇濆瓨"${column.title}"`, 0);
-          setTimeout(() => {
-            hideLoading();
-            createMessage.success(`"${column.title}"淇濆瓨鎴愬姛锛乣);
-            // 灞�閮ㄦ洿鏂板崟鍏冩牸涓哄凡淇濆瓨鐘舵��
-            $table.reloadRow(row, null, field);
-            // 鍙戦�佹洿鏂版秷鎭�
-            tableRef.value?.socketSendUpdateRow(row);
-          }, 555);
-        }
-      });
-    }
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/index.vue b/src/views/demo/jeecg/JVxeTableDemo/index.vue
deleted file mode 100644
index 9e73f3c..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/index.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-<template>
-  <PageWrapper>
-    <a-card :bordered="false">
-      <a-tabs defaultActiveKey="1">
-        <a-tab-pane tab="鍩虹绀轰緥" key="1">
-          <JVxeDemo1 />
-        </a-tab-pane>
-        <a-tab-pane tab="楂樼骇绀轰緥" key="2">
-          <JVxeDemo2 />
-        </a-tab-pane>
-        <a-tab-pane tab="鎺掑簭绀轰緥" key="3">
-          <JVxeDemo3 />
-        </a-tab-pane>
-        <a-tab-pane tab="鑱斿姩绀轰緥" key="4">
-          <JVxeDemo4 />
-        </a-tab-pane>
-        <a-tab-pane tab="閿洏鎿嶄綔" key="5">
-          <JVxeDemo5 />
-        </a-tab-pane>
-      </a-tabs>
-    </a-card>
-  </PageWrapper>
-</template>
-
-<script lang="ts" setup>
-  // noinspection ES6UnusedImports
-  import { PageWrapper } from '/@/components/Page';
-  import JVxeDemo1 from './JVxeDemo1.vue';
-  import JVxeDemo2 from './JVxeDemo2.vue';
-  import JVxeDemo3 from './JVxeDemo3.vue';
-  import JVxeDemo4 from './JVxeDemo4.vue';
-  import JVxeDemo5 from './JVxeDemo5.vue';
-</script>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/ErpTemplate.vue b/src/views/demo/jeecg/JVxeTableDemo/layout-demo/ErpTemplate.vue
deleted file mode 100644
index c468134..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/ErpTemplate.vue
+++ /dev/null
@@ -1,319 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <JVxeTable
-      toolbar
-      :toolbarConfig="toolbarConfig"
-      rowNumber
-      rowSelection
-      rowSelectionType="radio"
-      clickSelectRow
-      highlightCurrentRow
-      :height="tableHeight"
-      :loading="table1.loading"
-      :columns="table1.columns"
-      :dataSource="table1.dataSource"
-      :pagination="table1.pagination"
-      :expandConfig="expandConfig"
-      style="margin-bottom: 8px"
-      @pageChange="handleTable1PageChange"
-      @selectRowChange="handleTable1SelectRowChange"
-    ></JVxeTable>
-
-    <a-tabs v-show="subTabs.show" :class="{ 'sub-tabs': true, 'un-expand': !subTabs.expand }">
-      <a-tab-pane tab="瀛愯〃1" key="1">
-        <JVxeTable
-          toolbar
-          row-number
-          row-selection
-          height="auto"
-          :maxHeight="350"
-          :loading="table2.loading"
-          :columns="table2.columns"
-          :dataSource="table2.dataSource"
-          :pagination="table2.pagination"
-          @pageChange="handleTable2PageChange"
-          @selectRowChange="handleTable2SelectRowChange"
-        />
-      </a-tab-pane>
-      <a-tab-pane tab="瀛愯〃2" key="2">
-        <h1>杩欓噷鏄瓙琛�2</h1>
-        <h1>杩欓噷鏄瓙琛�2</h1>
-        <h1>杩欓噷鏄瓙琛�2</h1>
-        <h1>杩欓噷鏄瓙琛�2</h1>
-        <h1>杩欓噷鏄瓙琛�2</h1>
-        <h1>杩欓噷鏄瓙琛�2</h1>
-      </a-tab-pane>
-    </a-tabs>
-  </a-card>
-</template>
-
-<script>
-  import { h } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-  import { Button, Checkbox } from 'ant-design-vue';
-  import { UpOutlined, DownOutlined } from '@ant-design/icons-vue';
-
-  export default {
-    name: 'ErpTemplate',
-    data() {
-      return {
-        toolbarConfig: {
-          // prefix 鍓嶇紑锛泂uffix 鍚庣紑
-          slot: ['prefix', 'suffix'],
-          // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
-          btn: ['add', 'remove', 'clearSelection'],
-        },
-
-        expandConfig: {
-          // 鏄惁鍙兘鍚屾椂灞曞紑涓�琛�
-          accordion: true,
-        },
-
-        // 瀛愯〃 tabs
-        subTabs: {
-          show: false,
-          // 鏄惁灞曞紑
-          expand: true,
-          // 鏄惁鑷姩灞曞紑
-          autoExpand: true,
-        },
-
-        table1: {
-          // 鏄惁姝e湪鍔犺浇
-          loading: false,
-          // 鍒嗛〉鍣ㄥ弬鏁�
-          pagination: {
-            // 褰撳墠椤电爜
-            current: 1,
-            // 姣忛〉鐨勬潯鏁�
-            pageSize: 200,
-            // 鍙垏鎹㈢殑鏉℃暟
-            pageSizeOptions: ['10', '20', '30', '100', '200'],
-            // 鏁版嵁鎬绘暟锛堢洰鍓嶅苟涓嶇煡閬撶湡瀹炵殑鎬绘暟锛屾墍浠ュ厛濉啓0锛屽湪鍚庡彴鏌ュ嚭鏉ュ悗鍐嶈祴鍊硷級
-            total: 0,
-            showTotal: (total, range) => {
-              // 姝ゅ涓� jsx 璇硶
-              let text = h('span', `${range[0]}-${range[1]} 鍏� ${total} 鏉);
-              // 鍒ゆ柇瀛愯〃鏄惁鏄剧ず锛屽鏋滄樉绀哄氨娓叉煋灞曞紑鏀惰捣鎸夐挳
-              if (this.subTabs.show) {
-                let expand = h('span', {}, [
-                  h(
-                    Button,
-                    {
-                      type: 'link',
-                      onClick: this.handleToggleTabs,
-                    },
-                    () => [this.subTabs.expand ? h(UpOutlined) : h(DownOutlined), h('span', {}, this.subTabs.expand ? '鏀惰捣' : '灞曞紑')]
-                  ),
-                  h(
-                    Checkbox,
-                    {
-                      // h 鍐欐硶涓嶆敮鎸� v-model , 鎵�浠ラ渶瑕佹墜鍔ㄨ祴鍊�
-                      checked: this.subTabs.autoExpand,
-                      'onUpdate:checked': (checked) => (this.subTabs.autoExpand = checked),
-                    },
-                    () => '鑷姩灞曞紑'
-                  ),
-                ]);
-                // 杩斿洖澶氫釜dom鐢ㄦ暟缁�
-                return [expand, text];
-              } else {
-                // 鐩存帴杩斿洖鍗曚釜dom
-                return text;
-              }
-            },
-          },
-          // 閫夋嫨鐨勮
-          selectedRows: [],
-          // 鏁版嵁婧愶紝鎺у埗琛ㄦ牸鐨勬暟鎹�
-          dataSource: [],
-          // 鍒楅厤缃紝鎺у埗琛ㄦ牸鏄剧ず鐨勫垪
-          columns: [
-            { key: 'num', title: '搴忓彿', width: '80px' },
-            {
-              // 瀛楁key锛岃窡鍚庡彴鏁版嵁鐨勫瓧娈靛悕鍖归厤
-              key: 'ship_name',
-              // 鍒楃殑鏍囬
-              title: '鑸瑰悕',
-              // 鍒楃殑瀹藉害
-              width: '180px',
-              // 濡傛灉鍔犱笂浜嗚灞炴�э紝灏变唬琛ㄥ綋鍓嶅崟鍏冩牸鏄彲缂栬緫鐨勶紝type灏辨槸琛ㄥ崟鐨勭被鍨嬶紝input灏辨槸绠�鍗曠殑杈撳叆妗�
-              type: JVxeTypes.input,
-            },
-            { key: 'call', title: '鍛煎彨', width: '990px', type: JVxeTypes.input },
-            { key: 'len', title: '闀�', width: '80px', type: JVxeTypes.inputNumber },
-            { key: 'ton', title: '鍚�', width: '120px', type: JVxeTypes.inputNumber },
-            { key: 'payer', title: '浠樻鏂�', width: '120px', type: JVxeTypes.input },
-            { key: 'count', title: '鏁�', width: '40px' },
-            {
-              key: 'company',
-              title: '鍏徃',
-              // 鏈�灏忓搴︼紝涓庡搴︿笉鍚岀殑鏄紝杩欎釜涓嶆槸鍥哄畾鐨勫搴︼紝濡傛灉琛ㄦ牸鏈夊浣欑殑绌洪棿锛屼細骞冲潎鍒嗛厤缁欒缃簡 minWidth 鐨勫垪
-              // 濡傛灉瑕佸仛鍗犳弧琛ㄦ牸鐨勫垪鍙互杩欎箞鍐�
-              minWidth: '180px',
-              type: JVxeTypes.input,
-            },
-            { key: 'trend', title: '鍔ㄥ悜', width: '120px', type: JVxeTypes.input },
-          ],
-        },
-        // 瀛愮骇琛ㄧ殑閰嶇疆淇℃伅 锛堥厤缃拰涓昏〃鐨勫畬鍏ㄤ竴鑷达紝灏变笉鍐欏啑浣欑殑娉ㄩ噴浜嗭級
-        table2: {
-          currentRowId: null,
-          loading: false,
-          pagination: { current: 1, pageSize: 10, pageSizeOptions: ['5', '10', '20', '30'], total: 0 },
-          selectedRows: [],
-          dataSource: [],
-          columns: [
-            { key: 'dd_num', title: '璋冨害搴忓彿', width: '120px' },
-            { key: 'tug', title: '鎷栬疆', width: '180px', type: JVxeTypes.input },
-            { key: 'work_start_time', title: '浣滀笟寮�濮嬫椂闂�', width: '180px', type: JVxeTypes.input },
-            { key: 'work_stop_time', title: '浣滀笟缁撴潫鏃堕棿', width: '180px', type: JVxeTypes.input },
-            { key: 'type', title: '鑸硅埗鍒嗙被', width: '120px', type: JVxeTypes.input },
-            { key: 'port_area', title: '鎵�灞炴腐鍖�', width: '120px', type: JVxeTypes.input },
-          ],
-        },
-        currentSubRow: null,
-        // 鏌ヨurl鍦板潃
-        url: {
-          getData: '/mock/vxe/getData',
-        },
-      };
-    },
-    computed: {
-      tableHeight() {
-        let { show, expand } = this.subTabs;
-        return show ? (expand ? 350 : 482) : 482;
-      },
-    },
-    created() {
-      this.loadTable1Data();
-    },
-    methods: {
-      // 鍔犺浇table1銆愪富琛ㄣ�戠殑鏁版嵁
-      loadTable1Data() {
-        // 灏佽鏌ヨ鏉′欢
-        let formData = {
-          pageNo: this.table1.pagination.current,
-          pageSize: this.table1.pagination.pageSize,
-        };
-        // 璋冪敤鏌ヨ鏁版嵁鎺ュ彛
-        this.table1.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            // 鍚庡彴鏌ヨ鍥炴潵鐨� total锛屾暟鎹�绘暟閲�
-            this.table1.pagination.total = result.total;
-            // 灏嗘煡璇㈢殑鏁版嵁璧嬪�肩粰 dataSource
-            this.table1.dataSource = result.records;
-            // 閲嶇疆閫夋嫨
-            this.table1.selectedRows = [];
-          })
-          .finally(() => {
-            // 杩欓噷鏄棤璁烘垚鍔熸垨澶辫触閮戒細鎵ц鐨勬柟娉曪紝鍦ㄨ繖閲屽叧闂璴oading
-            this.table1.loading = false;
-          });
-      },
-
-      // 鏌ヨ瀛愯〃鏁版嵁
-      loadSubData(row) {
-        if (row) {
-          // 杩欓噷涓�瀹氳鍋氶檺鍒讹紝闄愬埗涓嶈兘閲嶅鏌ヨ锛屽惁鑰呬細鍑虹幇姝诲惊鐜�
-          if (this.table2.currentRowId === row.id) {
-            return true;
-          }
-          this.table2.currentRowId = row.id;
-          this.loadTable2Data();
-          return true;
-        } else {
-          return false;
-        }
-      },
-      // 鏌ヨ瀛愯〃鏁版嵁
-      loadTable2Data() {
-        let table2 = this.table2;
-        let formData = {
-          parentId: table2.currentRowId,
-          pageNo: this.table2.pagination.current,
-          pageSize: this.table2.pagination.pageSize,
-        };
-        table2.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            // 灏嗘煡璇㈢殑鏁版嵁璧嬪�肩粰 dataSource
-            table2.selectedRows = [];
-            table2.dataSource = result.records;
-            table2.pagination.total = result.total;
-          })
-          .finally(() => {
-            // 杩欓噷鏄棤璁烘垚鍔熸垨澶辫触閮戒細鎵ц鐨勬柟娉曪紝鍦ㄨ繖閲屽叧闂璴oading
-            table2.loading = false;
-          });
-      },
-
-      // table1銆愪富琛ㄣ�戝綋閫夋嫨鐨勮鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-      handleTable1SelectRowChange(event) {
-        this.table1.selectedRows = event.selectedRows;
-        this.subTabs.show = true;
-        if (this.subTabs.autoExpand) {
-          this.subTabs.expand = true;
-        }
-        this.loadSubData(event.selectedRows[0]);
-      },
-      // table2銆愬瓙琛ㄣ�戝綋閫夋嫨鐨勮鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-      handleTable2SelectRowChange(event) {
-        this.table2.selectedRows = event.selectedRows;
-      },
-
-      handleTable1PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table1.pagination.current = event.current;
-        this.table1.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable1Data();
-      },
-      // 褰搕able2銆愬瓙琛ㄣ�戝垎椤靛弬鏁板彉鍖栨椂瑙﹀彂鐨勪簨浠�
-      handleTable2PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table2.pagination.current = event.current;
-        this.table2.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable2Data();
-      },
-
-      // 灞曞紑鎴栨敹璧峰瓙琛╰abs
-      handleToggleTabs() {
-        this.subTabs.expand = !this.subTabs.expand;
-      },
-    },
-  };
-</script>
-
-<style lang="less" scoped>
-  .sub-tabs {
-    &.un-expand {
-      :deep(.ant-tabs-content) {
-        height: 0 !important;
-      }
-
-      :deep(.ant-tabs-nav) {
-        border-color: transparent !important;
-      }
-
-      :deep(.ant-tabs-ink-bar) {
-        background-color: transparent !important;
-      }
-
-      :deep(.ant-tabs-tab) {
-        display: none !important;
-      }
-    }
-  }
-</style>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template1.vue b/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template1.vue
deleted file mode 100644
index 37ab585..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template1.vue
+++ /dev/null
@@ -1,332 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <a-row :gutter="8">
-      <!-- 杩欓噷鏄埗绾ц妭鐐� -->
-      <a-col :span="24" style="margin-bottom: 4px">
-        <JVxeTable
-          toolbar
-          rowNumber
-          rowSelection
-          clickSelectRow
-          highlightCurrentRow
-          :radioConfig="{ highlight: false }"
-          :checkboxConfig="{ highlight: false }"
-          :height="340"
-          :loading="table1.loading"
-          :columns="table1.columns"
-          :dataSource="table1.dataSource"
-          :pagination="table1.pagination"
-          @pageChange="handleTable1PageChange"
-          @selectRowChange="handleTable1SelectRowChange"
-        />
-      </a-col>
-      <!-- 杩欓噷鏄瓙绾ц妭鐐� -->
-      <a-col :span="12">
-        <JVxeTable
-          toolbar
-          rowNumber
-          rowSelection
-          clickSelectRow
-          highlightCurrentRow
-          :radioConfig="{ highlight: false }"
-          :checkboxConfig="{ highlight: false }"
-          :height="340"
-          :loading="table2.loading"
-          :columns="table2.columns"
-          :dataSource="table2.dataSource"
-          :pagination="table2.pagination"
-          @pageChange="handleTable2PageChange"
-          @selectRowChange="handleTable2SelectRowChange"
-        >
-        </JVxeTable>
-      </a-col>
-      <!-- 杩欓噷鏄瓩绾ц妭鐐� -->
-      <a-col :span="12">
-        <JVxeTable
-          toolbar
-          rowNumber
-          rowSelection
-          :height="340"
-          :loading="table3.loading"
-          :columns="table3.columns"
-          :dataSource="table3.dataSource"
-          :pagination="table3.pagination"
-          @pageChange="handleTable3PageChange"
-        >
-        </JVxeTable>
-      </a-col>
-    </a-row>
-  </a-card>
-</template>
-
-<script>
-  import { defHttp } from '/@/utils/http/axios';
-  import { JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-
-  // 銆愬绉嶅竷灞�妯℃澘銆戜笂闈㈢埗銆佸乏涓嬪瓙銆佸彸涓嬪瓩
-  export default {
-    name: 'Template1',
-    data() {
-      return {
-        table1: {
-          // 鏄惁姝e湪鍔犺浇
-          loading: false,
-          // 鍒嗛〉鍣ㄥ弬鏁�
-          pagination: {
-            // 褰撳墠椤电爜
-            current: 1,
-            // 姣忛〉鐨勬潯鏁�
-            pageSize: 200,
-            // 鍙垏鎹㈢殑鏉℃暟
-            pageSizeOptions: ['10', '20', '30', '100', '200'],
-            // 鏁版嵁鎬绘暟锛堢洰鍓嶅苟涓嶇煡閬撶湡瀹炵殑鎬绘暟锛屾墍浠ュ厛濉啓0锛屽湪鍚庡彴鏌ュ嚭鏉ュ悗鍐嶈祴鍊硷級
-            total: 0,
-          },
-          // 鏈�鍚庨�変腑鐨勮
-          lastRow: null,
-          // 閫夋嫨鐨勮
-          selectedRows: [],
-          // 鏁版嵁婧愶紝鎺у埗琛ㄦ牸鐨勬暟鎹�
-          dataSource: [],
-          // 鍒楅厤缃紝鎺у埗琛ㄦ牸鏄剧ず鐨勫垪
-          columns: [
-            { key: 'num', title: '搴忓彿', width: '80px' },
-            {
-              // 瀛楁key锛岃窡鍚庡彴鏁版嵁鐨勫瓧娈靛悕鍖归厤
-              key: 'ship_name',
-              // 鍒楃殑鏍囬
-              title: '鑸瑰悕',
-              // 鍒楃殑瀹藉害
-              width: '180px',
-              // 濡傛灉鍔犱笂浜嗚灞炴�э紝灏变唬琛ㄥ綋鍓嶅崟鍏冩牸鏄彲缂栬緫鐨勶紝type灏辨槸琛ㄥ崟鐨勭被鍨嬶紝input灏辨槸绠�鍗曠殑杈撳叆妗�
-              type: JVxeTypes.input,
-              formatter({ cellValue, row, column }) {
-                let foo = '';
-                if (row.company === '浣т紥渚句蒋鏈夐檺鍏徃') {
-                  foo += '-233';
-                }
-                return cellValue + foo;
-              },
-            },
-            { key: 'call', title: '鍛煎彨', width: '80px', type: JVxeTypes.input },
-            { key: 'len', title: '闀�', width: '80px', type: JVxeTypes.inputNumber },
-            { key: 'ton', title: '鍚�', width: '120px', type: JVxeTypes.inputNumber },
-            { key: 'payer', title: '浠樻鏂�', width: '120px', type: JVxeTypes.input },
-            { key: 'count', title: '鏁�', width: '40px' },
-            {
-              key: 'company',
-              title: '鍏徃',
-              // 鏈�灏忓搴︼紝涓庡搴︿笉鍚岀殑鏄紝杩欎釜涓嶆槸鍥哄畾鐨勫搴︼紝濡傛灉琛ㄦ牸鏈夊浣欑殑绌洪棿锛屼細骞冲潎鍒嗛厤缁欒缃簡 minWidth 鐨勫垪
-              // 濡傛灉瑕佸仛鍗犳弧琛ㄦ牸鐨勫垪鍙互杩欎箞鍐�
-              minWidth: '180px',
-              type: JVxeTypes.input,
-            },
-            { key: 'trend', title: '鍔ㄥ悜', width: '120px', type: JVxeTypes.input },
-          ],
-        },
-        // 瀛愮骇琛ㄧ殑閰嶇疆淇℃伅 锛堥厤缃拰涓昏〃鐨勫畬鍏ㄤ竴鑷达紝灏变笉鍐欏啑浣欑殑娉ㄩ噴浜嗭級
-        table2: {
-          loading: false,
-          pagination: { current: 1, pageSize: 200, pageSizeOptions: ['100', '200'], total: 0 },
-          // 鏈�鍚庨�変腑鐨勮
-          lastRow: null,
-          selectedRows: [],
-          dataSource: [],
-          columns: [
-            { key: 'dd_num', title: '璋冨害搴忓彿', width: '120px' },
-            { key: 'tug', title: '鎷栬疆', width: '180px', type: JVxeTypes.input },
-            { key: 'work_start_time', title: '浣滀笟寮�濮嬫椂闂�', width: '180px', type: JVxeTypes.input },
-            { key: 'work_stop_time', title: '浣滀笟缁撴潫鏃堕棿', width: '180px', type: JVxeTypes.input },
-            { key: 'type', title: '鑸硅埗鍒嗙被', width: '120px', type: JVxeTypes.input },
-            { key: 'port_area', title: '鎵�灞炴腐鍖�', width: '120px', type: JVxeTypes.input },
-          ],
-        },
-        // 瀛欑骇琛ㄧ殑閰嶇疆淇℃伅 锛堥厤缃拰涓昏〃鐨勫畬鍏ㄤ竴鑷达紝灏变笉鍐欏啑浣欑殑娉ㄩ噴浜嗭級
-        table3: {
-          loading: false,
-          pagination: { current: 1, pageSize: 200, pageSizeOptions: ['100', '200'], total: 0 },
-          selectedRows: [],
-          dataSource: [],
-          columns: [
-            { key: 'dd_num', title: '璋冨害搴忓彿', width: '120px' },
-            { key: 'tug', title: '鎷栬疆', width: '120px', type: JVxeTypes.input },
-            { key: 'power', title: '椹姏', width: '120px', type: JVxeTypes.input },
-            { key: 'nature', title: '鎬ц川', width: '120px', type: JVxeTypes.input },
-            { key: 'departure_time', title: '鍙戣埞鏃堕棿', width: '180px', type: JVxeTypes.input },
-          ],
-        },
-        // 鏌ヨurl鍦板潃
-        url: {
-          getData: '/mock/vxe/getData',
-        },
-      };
-    },
-    // 鐩戝惉鍣�
-    watch: {
-      // 鐩戝惉table1 銆愪富琛ㄣ�戦�夋嫨鐨勬暟鎹彂鐢熶簡鍙樺寲
-      ['table1.lastRow'](row) {
-        this.loadTable2Data();
-      },
-      // 鐩戝惉table2 銆愬瓙琛ㄣ�戦�夋嫨鐨勬暟鎹彂鐢熶簡鍙樺寲
-      ['table2.lastRow']() {
-        this.loadTable3Data();
-      },
-    },
-    created() {
-      this.loadTable1Data();
-    },
-    methods: {
-      // 鍔犺浇table1銆愪富琛ㄣ�戠殑鏁版嵁
-      loadTable1Data() {
-        // 灏佽鏌ヨ鏉′欢
-        let formData = {
-          pageNo: this.table1.pagination.current,
-          pageSize: this.table1.pagination.pageSize,
-        };
-        // 璋冪敤鏌ヨ鏁版嵁鎺ュ彛
-        this.table1.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            // 鍚庡彴鏌ヨ鍥炴潵鐨� total锛屾暟鎹�绘暟閲�
-            this.table1.pagination.total = result.total;
-            // 灏嗘煡璇㈢殑鏁版嵁璧嬪�肩粰 dataSource
-            this.table1.dataSource = result.records;
-            // 閲嶇疆閫夋嫨
-            this.table1.selectedRows = [];
-          })
-          .finally(() => {
-            // 杩欓噷鏄棤璁烘垚鍔熸垨澶辫触閮戒細鎵ц鐨勬柟娉曪紝鍦ㄨ繖閲屽叧闂璴oading
-            this.table1.loading = false;
-          });
-      },
-
-      // 褰搕able1銆愪富琛ㄣ�戝垎椤靛弬鏁板彉鍖栨椂瑙﹀彂鐨勪簨浠�
-      handleTable1PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table1.pagination.current = event.current;
-        this.table1.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable1Data();
-      },
-
-      // table1銆愪富琛ㄣ�戝綋閫夋嫨鐨勮鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-      handleTable1SelectRowChange(event) {
-        this.handleTableSelectRowChange(this.table1, event);
-      },
-
-      // 鍔犺浇table2銆愬瓙琛ㄣ�戠殑鏁版嵁锛屾牴鎹富琛ㄧ殑id杩涜鏌ヨ
-      loadTable2Data() {
-        // 濡傛灉涓昏〃娌℃湁閫夋嫨锛屽垯涓嶆煡璇�
-        let selectedRows = this.table1.selectedRows;
-        if (!selectedRows || selectedRows.length === 0) {
-          this.table2.pagination.total = 0;
-          this.table2.dataSource = [];
-          this.table2.selectedRows = [];
-          return;
-        } else if (this.table1.lastRow == null) {
-          this.table1.lastRow = selectedRows[selectedRows.length - 1];
-        }
-        let formData = {
-          parentId: this.table1.lastRow.id,
-          pageNo: this.table2.pagination.current,
-          pageSize: this.table2.pagination.pageSize,
-        };
-        this.table2.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            this.table2.pagination.total = result.total;
-            this.table2.dataSource = result.records;
-            this.table2.selectedRows = [];
-          })
-          .finally(() => {
-            this.table2.loading = false;
-          });
-      },
-
-      // table2銆愬瓙琛ㄣ�戝綋閫夋嫨鐨勮鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-      handleTable2SelectRowChange(event) {
-        this.handleTableSelectRowChange(this.table2, event);
-      },
-
-      // 褰搕able2銆愬瓙琛ㄣ�戝垎椤靛弬鏁板彉鍖栨椂瑙﹀彂鐨勪簨浠�
-      handleTable2PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table2.pagination.current = event.current;
-        this.table2.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable2Data();
-      },
-
-      // 鍔犺浇table3銆愬瓩琛ㄣ�戠殑鏁版嵁锛屾牴鎹瓙琛ㄧ殑id杩涜鏌ヨ
-      loadTable3Data() {
-        // 濡傛灉涓昏〃娌℃湁閫夋嫨锛屽垯涓嶆煡璇�
-        let selectedRows = this.table2.selectedRows;
-        if (!selectedRows || selectedRows.length === 0) {
-          this.table3.pagination.total = 0;
-          this.table3.dataSource = [];
-          this.table3.selectedRows = [];
-          return;
-        } else if (this.table2.lastRow == null) {
-          this.table2.lastRow = selectedRows[selectedRows.length - 1];
-        }
-        let formData = {
-          parentId: this.table2.lastRow.id,
-          pageNo: this.table3.pagination.current,
-          pageSize: this.table3.pagination.pageSize,
-        };
-        this.table3.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            this.table3.pagination.total = result.total;
-            this.table3.dataSource = result.records;
-          })
-          .finally(() => {
-            this.table3.loading = false;
-          });
-      },
-      // 褰搕able3銆愬瓩琛ㄣ�戝垎椤靛弬鏁板彉鍖栨椂瑙﹀彂鐨勪簨浠�
-      handleTable3PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table3.pagination.current = event.current;
-        this.table3.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable3Data();
-      },
-
-      /** 鍏叡鏂规硶锛氬鐞嗚〃鏍奸�変腑鍙樺寲浜嬩欢 */
-      handleTableSelectRowChange(table, event) {
-        let { row, action, selectedRows, $table } = event;
-        // 鑾峰彇鏈�鍚庝竴涓�変腑鐨�
-        let lastSelected = selectedRows[selectedRows.length - 1];
-        if (action === 'selected') {
-          table.lastRow = row;
-        } else if (action === 'selected-all') {
-          // 鍙栨秷鍏ㄩ��
-          if (selectedRows.length === 0) {
-            table.lastRow = null;
-          } else if (!table.lastRow) {
-            table.lastRow = lastSelected;
-          }
-        } else if (action === 'unselected' && row === table.lastRow) {
-          table.lastRow = lastSelected;
-        }
-        $table.setCurrentRow(table.lastRow);
-        table.selectedRows = selectedRows;
-      },
-    },
-  };
-</script>
-
-<style lang="less"></style>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template2.vue b/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template2.vue
deleted file mode 100644
index cb4e22c..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template2.vue
+++ /dev/null
@@ -1,249 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <a-row :gutter="8">
-      <!-- 宸︿晶鐖� -->
-      <a-col :span="12">
-        <JVxeTable
-          toolbar
-          rowNumber
-          rowSelection
-          clickSelectRow
-          highlightCurrentRow
-          :radioConfig="{ highlight: false }"
-          :checkboxConfig="{ highlight: false }"
-          :height="790"
-          :loading="table1.loading"
-          :columns="table1.columns"
-          :dataSource="table1.dataSource"
-          :pagination="table1.pagination"
-          @pageChange="handleTable1PageChange"
-          @selectRowChange="handleTable1SelectRowChange"
-        />
-      </a-col>
-      <a-col :span="12">
-        <!-- 宸︿晶閫夋嫨鐨勬暟鎹睍绀哄湪杩欓噷 -->
-        <JVxeTable rowNumber :height="375" :columns="table1.columns" :dataSource="table1.selectedRows" style="margin: 52px 0 8px" />
-
-        <!-- 鍙充笅瀛� -->
-        <JVxeTable
-          toolbar
-          rowNumber
-          rowSelection
-          clickSelectRow
-          :height="355"
-          :loading="table2.loading"
-          :columns="table2.columns"
-          :dataSource="table2.dataSource"
-          :pagination="table2.pagination"
-          @pageChange="handleTable2PageChange"
-          @selectRowChange="handleTable2SelectRowChange"
-        />
-      </a-col>
-    </a-row>
-  </a-card>
-</template>
-
-<script>
-  import { defHttp } from '/@/utils/http/axios';
-  import { JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-
-  // 銆愬绉嶅竷灞�妯℃澘銆� 宸﹁竟閫夋嫨鍚庯紝璁板綍閫夊埌鍙充晶锛屽彸渚ф槸鐖躲�佸瓙
-  export default {
-    name: 'Template2',
-    data() {
-      return {
-        table1: {
-          // 鏄惁姝e湪鍔犺浇
-          loading: false,
-          // 鍒嗛〉鍣ㄥ弬鏁�
-          pagination: {
-            // 褰撳墠椤电爜
-            current: 1,
-            // 姣忛〉鐨勬潯鏁�
-            pageSize: 200,
-            // 鍙垏鎹㈢殑鏉℃暟
-            pageSizeOptions: ['10', '20', '30', '100', '200'],
-            // 鏁版嵁鎬绘暟锛堢洰鍓嶅苟涓嶇煡閬撶湡瀹炵殑鎬绘暟锛屾墍浠ュ厛濉啓0锛屽湪鍚庡彴鏌ュ嚭鏉ュ悗鍐嶈祴鍊硷級
-            total: 0,
-          },
-          // 鏈�鍚庨�変腑鐨勮
-          lastRow: null,
-          // 閫夋嫨鐨勮
-          selectedRows: [],
-          // 鏁版嵁婧愶紝鎺у埗琛ㄦ牸鐨勬暟鎹�
-          dataSource: [],
-          // 鍒楅厤缃紝鎺у埗琛ㄦ牸鏄剧ず鐨勫垪
-          columns: [
-            { key: 'num', title: '搴忓彿', width: '80px' },
-            {
-              // 瀛楁key锛岃窡鍚庡彴鏁版嵁鐨勫瓧娈靛悕鍖归厤
-              key: 'ship_name',
-              // 鍒楃殑鏍囬
-              title: '鑸瑰悕',
-              // 鍒楃殑瀹藉害
-              width: '180px',
-              // 濡傛灉鍔犱笂浜嗚灞炴�э紝灏变唬琛ㄥ綋鍓嶅崟鍏冩牸鏄彲缂栬緫鐨勶紝type灏辨槸琛ㄥ崟鐨勭被鍨嬶紝input灏辨槸绠�鍗曠殑杈撳叆妗�
-              type: JVxeTypes.input,
-            },
-            { key: 'call', title: '鍛煎彨', width: '80px', type: JVxeTypes.input },
-            { key: 'len', title: '闀�', width: '80px', type: JVxeTypes.input },
-            { key: 'ton', title: '鍚�', width: '120px', type: JVxeTypes.input },
-            { key: 'payer', title: '浠樻鏂�', width: '120px', type: JVxeTypes.input },
-            { key: 'count', title: '鏁�', width: '40px' },
-            {
-              key: 'company',
-              title: '鍏徃',
-              // 鏈�灏忓搴︼紝涓庡搴︿笉鍚岀殑鏄紝杩欎釜涓嶆槸鍥哄畾鐨勫搴︼紝濡傛灉琛ㄦ牸鏈夊浣欑殑绌洪棿锛屼細骞冲潎鍒嗛厤缁欒缃簡 minWidth 鐨勫垪
-              // 濡傛灉瑕佸仛鍗犳弧琛ㄦ牸鐨勫垪鍙互杩欎箞鍐�
-              minWidth: '180px',
-              type: JVxeTypes.input,
-            },
-            { key: 'trend', title: '鍔ㄥ悜', width: '120px', type: JVxeTypes.input },
-          ],
-        },
-        // 瀛愮骇琛ㄧ殑閰嶇疆淇℃伅 锛堥厤缃拰涓昏〃鐨勫畬鍏ㄤ竴鑷达紝灏变笉鍐欏啑浣欑殑娉ㄩ噴浜嗭級
-        table2: {
-          loading: false,
-          pagination: { current: 1, pageSize: 200, pageSizeOptions: ['100', '200'], total: 0 },
-          selectedRows: [],
-          dataSource: [],
-          columns: [
-            { key: 'dd_num', title: '璋冨害搴忓彿', width: '120px' },
-            { key: 'tug', title: '鎷栬疆', width: '180px', type: JVxeTypes.input },
-            { key: 'work_start_time', title: '浣滀笟寮�濮嬫椂闂�', width: '180px', type: JVxeTypes.input },
-            { key: 'work_stop_time', title: '浣滀笟缁撴潫鏃堕棿', width: '180px', type: JVxeTypes.input },
-            { key: 'type', title: '鑸硅埗鍒嗙被', width: '120px', type: JVxeTypes.input },
-            { key: 'port_area', title: '鎵�灞炴腐鍖�', width: '120px', type: JVxeTypes.input },
-          ],
-        },
-        // 鏌ヨurl鍦板潃
-        url: {
-          getData: '/mock/vxe/getData',
-        },
-      };
-    },
-    // 鐩戝惉鍣�
-    watch: {
-      // 鐩戝惉table1 銆愪富琛ㄣ�戦�夋嫨鐨勬暟鎹彂鐢熶簡鍙樺寲
-      ['table1.lastRow']() {
-        this.loadTable2Data();
-      },
-    },
-    created() {
-      this.loadTable1Data();
-    },
-    methods: {
-      // 鍔犺浇table1銆愪富琛ㄣ�戠殑鏁版嵁
-      loadTable1Data() {
-        // 灏佽鏌ヨ鏉′欢
-        let formData = {
-          pageNo: this.table1.pagination.current,
-          pageSize: this.table1.pagination.pageSize,
-        };
-        // 璋冪敤鏌ヨ鏁版嵁鎺ュ彛
-        this.table1.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            // 鍚庡彴鏌ヨ鍥炴潵鐨� total锛屾暟鎹�绘暟閲�
-            this.table1.pagination.total = result.total;
-            // 灏嗘煡璇㈢殑鏁版嵁璧嬪�肩粰 dataSource
-            this.table1.dataSource = result.records;
-            // 閲嶇疆閫夋嫨
-            this.table1.selectedRows = [];
-          })
-          .finally(() => {
-            // 杩欓噷鏄棤璁烘垚鍔熸垨澶辫触閮戒細鎵ц鐨勬柟娉曪紝鍦ㄨ繖閲屽叧闂璴oading
-            this.table1.loading = false;
-          });
-      },
-
-      // 鍔犺浇table2銆愬瓙琛ㄣ�戠殑鏁版嵁锛屾牴鎹富琛ㄧ殑id杩涜鏌ヨ
-      loadTable2Data() {
-        // 濡傛灉涓昏〃娌℃湁閫夋嫨锛屽垯涓嶆煡璇�
-        let selectedRows = this.table1.selectedRows;
-        if (!selectedRows || selectedRows.length === 0) {
-          this.table2.pagination.total = 0;
-          this.table2.dataSource = [];
-          this.table2.selectedRows = [];
-          return;
-        } else if (this.table1.lastRow == null) {
-          this.table1.lastRow = selectedRows[selectedRows.length - 1];
-        }
-        let formData = {
-          parentId: this.table1.lastRow.id,
-          pageNo: this.table2.pagination.current,
-          pageSize: this.table2.pagination.pageSize,
-        };
-        this.table2.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            this.table2.pagination.total = result.total;
-            this.table2.dataSource = result.records;
-            this.table2.selectedRows = [];
-          })
-          .finally(() => {
-            this.table2.loading = false;
-          });
-      },
-
-      // table1銆愪富琛ㄣ�戝綋閫夋嫨鐨勮鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-      handleTable1SelectRowChange(event) {
-        this.handleTableSelectRowChange(this.table1, event);
-      },
-
-      // table2銆愬瓙琛ㄣ�戝綋閫夋嫨鐨勮鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-      handleTable2SelectRowChange(event) {
-        this.table2.selectedRows = event.selectedRows;
-      },
-
-      // 褰搕able1銆愪富琛ㄣ�戝垎椤靛弬鏁板彉鍖栨椂瑙﹀彂鐨勪簨浠�
-      handleTable1PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table1.pagination.current = event.current;
-        this.table1.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable1Data();
-      },
-
-      // 褰搕able2銆愬瓙琛ㄣ�戝垎椤靛弬鏁板彉鍖栨椂瑙﹀彂鐨勪簨浠�
-      handleTable2PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table2.pagination.current = event.current;
-        this.table2.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable2Data();
-      },
-
-      /** 鍏叡鏂规硶锛氬鐞嗚〃鏍奸�変腑鍙樺寲浜嬩欢 */
-      handleTableSelectRowChange(table, event) {
-        let { row, action, selectedRows, $table } = event;
-        // 鑾峰彇鏈�鍚庝竴涓�変腑鐨�
-        let lastSelected = selectedRows[selectedRows.length - 1];
-        if (action === 'selected') {
-          table.lastRow = row;
-        } else if (action === 'selected-all') {
-          // 鍙栨秷鍏ㄩ��
-          if (selectedRows.length === 0) {
-            table.lastRow = null;
-          } else if (!table.lastRow) {
-            table.lastRow = lastSelected;
-          }
-        } else if (action === 'unselected' && row === table.lastRow) {
-          table.lastRow = lastSelected;
-        }
-        $table.setCurrentRow(table.lastRow);
-        table.selectedRows = selectedRows;
-      },
-    },
-  };
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template3.vue b/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template3.vue
deleted file mode 100644
index 8ff7272..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template3.vue
+++ /dev/null
@@ -1,237 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <a-row :gutter="8">
-      <a-col :span="12">
-        <!-- 宸︿笂鐖� -->
-        <JVxeTable
-          toolbar
-          rowNumber
-          rowSelection
-          clickSelectRow
-          highlightCurrentRow
-          :radioConfig="{ highlight: false }"
-          :checkboxConfig="{ highlight: false }"
-          :height="357"
-          :loading="table1.loading"
-          :columns="table1.columns"
-          :dataSource="table1.dataSource"
-          :pagination="table1.pagination"
-          style="margin-bottom: 8px"
-          @pageChange="handleTable1PageChange"
-          @selectRowChange="handleTable1SelectRowChange"
-        />
-
-        <!-- 宸︿笅瀛� -->
-        <JVxeTable
-          toolbar
-          rowNumber
-          rowSelection
-          clickSelectRow
-          :height="356"
-          :loading="table2.loading"
-          :columns="table2.columns"
-          :dataSource="table2.dataSource"
-          :pagination="table2.pagination"
-          @pageChange="handleTable2PageChange"
-        />
-      </a-col>
-      <!-- 宸︿晶鐖堕�夋嫨鐨勬暟鎹睍绀哄湪杩欓噷 -->
-      <a-col :span="12">
-        <JVxeTable rowNumber :height="812" :columns="table1.columns" :dataSource="table1.selectedRows" style="margin-top: 52px" />
-      </a-col>
-    </a-row>
-  </a-card>
-</template>
-
-<script>
-  import { defHttp } from '/@/utils/http/axios';
-  import { JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-
-  // 銆愬绉嶅竷灞�妯℃澘銆戝乏渚т笂杈规槸涓昏〃銆佷笅杈规槸瀛愯〃锛屽彸渚ф槸閫変腑鏁版嵁
-  export default {
-    name: 'Template3',
-    components: {},
-    data() {
-      return {
-        // 涓昏〃鐨勯厤缃俊鎭�
-        table1: {
-          // 鏄惁姝e湪鍔犺浇
-          loading: false,
-          // 鍒嗛〉鍣ㄥ弬鏁�
-          pagination: {
-            // 褰撳墠椤电爜
-            current: 1,
-            // 姣忛〉鐨勬潯鏁�
-            pageSize: 200,
-            // 鍙垏鎹㈢殑鏉℃暟
-            pageSizeOptions: ['10', '20', '30', '100', '200'],
-            // 鏁版嵁鎬绘暟锛堢洰鍓嶅苟涓嶇煡閬撶湡瀹炵殑鎬绘暟锛屾墍浠ュ厛濉啓0锛屽湪鍚庡彴鏌ュ嚭鏉ュ悗鍐嶈祴鍊硷級
-            total: 0,
-          },
-          // 鏈�鍚庨�変腑鐨勮
-          lastRow: null,
-          // 閫夋嫨鐨勮
-          selectedRows: [],
-          // 鏁版嵁婧愶紝鎺у埗琛ㄦ牸鐨勬暟鎹�
-          dataSource: [],
-          // 鍒楅厤缃紝鎺у埗琛ㄦ牸鏄剧ず鐨勫垪
-          columns: [
-            { key: 'num', title: '搴忓彿', width: '80px' },
-            {
-              // 瀛楁key锛岃窡鍚庡彴鏁版嵁鐨勫瓧娈靛悕鍖归厤
-              key: 'ship_name',
-              // 鍒楃殑鏍囬
-              title: '鑸瑰悕',
-              // 鍒楃殑瀹藉害
-              width: '180px',
-              // 濡傛灉鍔犱笂浜嗚灞炴�э紝灏变唬琛ㄥ綋鍓嶅崟鍏冩牸鏄彲缂栬緫鐨勶紝type灏辨槸琛ㄥ崟鐨勭被鍨嬶紝input灏辨槸绠�鍗曠殑杈撳叆妗�
-              type: JVxeTypes.input,
-            },
-            { key: 'call', title: '鍛煎彨', width: '80px', type: JVxeTypes.input },
-            { key: 'len', title: '闀�', width: '80px', type: JVxeTypes.input },
-            { key: 'ton', title: '鍚�', width: '120px', type: JVxeTypes.input },
-            { key: 'payer', title: '浠樻鏂�', width: '120px', type: JVxeTypes.input },
-            { key: 'count', title: '鏁�', width: '40px' },
-            { key: 'company', title: '鍏徃', width: '180px', type: JVxeTypes.input },
-            { key: 'trend', title: '鍔ㄥ悜', width: '120px', type: JVxeTypes.input },
-          ],
-        },
-        // 瀛愯〃鐨勯厤缃俊鎭� 锛堥厤缃拰涓昏〃鐨勫畬鍏ㄤ竴鑷达紝灏变笉鍐欏啑浣欑殑娉ㄩ噴浜嗭級
-        table2: {
-          loading: false,
-          pagination: { current: 1, pageSize: 200, pageSizeOptions: ['100', '200'], total: 0 },
-          dataSource: [],
-          columns: [
-            { key: 'dd_num', title: '璋冨害搴忓彿', width: '120px' },
-            { key: 'tug', title: '鎷栬疆', width: '180px', type: JVxeTypes.input },
-            { key: 'work_start_time', title: '浣滀笟寮�濮嬫椂闂�', width: '180px', type: JVxeTypes.input },
-            { key: 'work_stop_time', title: '浣滀笟缁撴潫鏃堕棿', width: '180px', type: JVxeTypes.input },
-            { key: 'type', title: '鑸硅埗鍒嗙被', width: '120px', type: JVxeTypes.input },
-            { key: 'port_area', title: '鎵�灞炴腐鍖�', width: '120px', type: JVxeTypes.input },
-          ],
-        },
-        // 鏌ヨurl鍦板潃
-        url: {
-          getData: '/mock/vxe/getData',
-        },
-      };
-    },
-
-    // 鐩戝惉鍣�
-    watch: {
-      // 鐩戝惉table1 銆愪富琛ㄣ�戦�夋嫨鐨勬暟鎹彂鐢熶簡鍙樺寲
-      ['table1.lastRow'](row) {
-        this.loadTable2Data();
-      },
-    },
-    created() {
-      this.loadTable1Data();
-    },
-    methods: {
-      // 鍔犺浇table1锛堜富琛級鐨勬暟鎹�
-      loadTable1Data() {
-        // 灏佽鏌ヨ鏉′欢
-        let formData = {
-          pageNo: this.table1.pagination.current,
-          pageSize: this.table1.pagination.pageSize,
-        };
-        // 璋冪敤鏌ヨ鏁版嵁鎺ュ彛
-        this.table1.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            // 鍚庡彴鏌ヨ鍥炴潵鐨� total锛屾暟鎹�绘暟閲�
-            this.table1.pagination.total = result.total;
-            // 灏嗘煡璇㈢殑鏁版嵁璧嬪�肩粰 dataSource
-            this.table1.dataSource = result.records;
-          })
-          .finally(() => {
-            // 杩欓噷鏄棤璁烘垚鍔熸垨澶辫触閮戒細鎵ц鐨勬柟娉曪紝鍦ㄨ繖閲屽叧闂璴oading
-            this.table1.loading = false;
-          });
-      },
-      // 鍔犺浇table2锛堝瓙琛級鐨勬暟鎹紝鏍规嵁涓昏〃鐨刬d杩涜鏌ヨ
-      loadTable2Data() {
-        // 濡傛灉涓昏〃娌℃湁閫夋嫨锛屽垯涓嶆煡璇�
-        let selectedRows = this.table1.selectedRows;
-        if (!selectedRows || selectedRows.length === 0) {
-          this.table2.pagination.total = 0;
-          this.table2.dataSource = [];
-          return;
-        } else if (this.table1.lastRow == null) {
-          this.table1.lastRow = selectedRows[selectedRows.length - 1];
-        }
-        let formData = {
-          parentId: this.table1.lastRow.id,
-          pageNo: this.table2.pagination.current,
-          pageSize: this.table2.pagination.pageSize,
-        };
-        this.table2.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            this.table2.pagination.total = result.total;
-            this.table2.dataSource = result.records;
-          })
-          .finally(() => {
-            this.table2.loading = false;
-          });
-      },
-
-      // table1銆愪富琛ㄣ�戝綋鍒嗛〉鍙傛暟鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-      handleTable1PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table1.pagination.current = event.current;
-        this.table1.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable1Data();
-        // 鍒嗛〉鍚庨噸缃�夋嫨
-        this.table1.selectedRows = [];
-        this.loadTable2Data();
-      },
-
-      // table2銆愬瓙琛ㄣ�戝綋鍒嗛〉鍙傛暟鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-      handleTable2PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table1.pagination.current = event.current;
-        this.table1.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable2Data();
-      },
-
-      // table1銆愪富琛ㄣ�戝綋閫夋嫨鐨勮鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-      handleTable1SelectRowChange(event) {
-        this.handleTableSelectRowChange(this.table1, event);
-      },
-
-      /** 鍏叡鏂规硶锛氬鐞嗚〃鏍奸�変腑鍙樺寲浜嬩欢 */
-      handleTableSelectRowChange(table, event) {
-        let { row, action, selectedRows, $table } = event;
-        // 鑾峰彇鏈�鍚庝竴涓�変腑鐨�
-        let lastSelected = selectedRows[selectedRows.length - 1];
-        if (action === 'selected') {
-          table.lastRow = row;
-        } else if (action === 'selected-all') {
-          // 鍙栨秷鍏ㄩ��
-          if (selectedRows.length === 0) {
-            table.lastRow = null;
-          } else if (!table.lastRow) {
-            table.lastRow = lastSelected;
-          }
-        } else if (action === 'unselected' && row === table.lastRow) {
-          table.lastRow = lastSelected;
-        }
-        $table.setCurrentRow(table.lastRow);
-        table.selectedRows = selectedRows;
-      },
-    },
-  };
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template4.vue b/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template4.vue
deleted file mode 100644
index 67f2411..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template4.vue
+++ /dev/null
@@ -1,340 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <a-row :gutter="8">
-      <a-col :span="12">
-        <!-- 宸︿笂鐖� -->
-        <JVxeTable
-          toolbar
-          rowNumber
-          rowSelection
-          clickSelectRow
-          highlightCurrentRow
-          :radioConfig="{ highlight: false }"
-          :checkboxConfig="{ highlight: false }"
-          :height="340"
-          :loading="table1.loading"
-          :columns="table1.columns"
-          :dataSource="table1.dataSource"
-          :pagination="table1.pagination"
-          style="margin-bottom: 8px"
-          @pageChange="handleTable1PageChange"
-          @selectRowChange="handleTable1SelectRowChange"
-        />
-        <!-- 宸︿笅瀛� -->
-        <JVxeTable
-          toolbar
-          rowNumber
-          rowSelection
-          clickSelectRow
-          :height="350"
-          :loading="table2.loading"
-          :columns="table2.columns"
-          :dataSource="table2.dataSource"
-          :pagination="table2.pagination"
-          @pageChange="handleTable2PageChange"
-        />
-      </a-col>
-      <!-- 宸︿晶鐖堕�夋嫨鐨勬暟鎹睍绀哄湪杩欓噷 -->
-      <a-col :span="12">
-        <!-- 鍙充笂鐖� -->
-        <JVxeTable
-          rowNumber
-          rowSelection
-          clickSelectRow
-          highlightCurrentRow
-          :radioConfig="{ highlight: false }"
-          :checkboxConfig="{ highlight: false }"
-          :height="340"
-          :columns="table1.columns"
-          :dataSource="table1.selectedRows"
-          style="margin: 52px 0 8px"
-          @selectRowChange="handleTable3SelectRowChange"
-        />
-        <!-- 鍙充笅瀛� -->
-        <JVxeTable
-          toolbar
-          rowNumber
-          rowSelection
-          clickSelectRow
-          :height="350"
-          :loading="table4.loading"
-          :columns="table4.columns"
-          :dataSource="table4.dataSource"
-          :pagination="table4.pagination"
-          style="margin: 48px 0 0"
-        />
-      </a-col>
-    </a-row>
-  </a-card>
-</template>
-
-<script>
-  import { defHttp } from '/@/utils/http/axios';
-  import { JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-
-  export default {
-    name: 'Template4',
-    data() {
-      return {
-        table1: {
-          // 鏄惁姝e湪鍔犺浇
-          loading: false,
-          // 鍒嗛〉鍣ㄥ弬鏁�
-          pagination: {
-            // 褰撳墠椤电爜
-            current: 1,
-            // 姣忛〉鐨勬潯鏁�
-            pageSize: 200,
-            // 鍙垏鎹㈢殑鏉℃暟
-            pageSizeOptions: ['10', '20', '30', '100', '200'],
-            // 鏁版嵁鎬绘暟锛堢洰鍓嶅苟涓嶇煡閬撶湡瀹炵殑鎬绘暟锛屾墍浠ュ厛濉啓0锛屽湪鍚庡彴鏌ュ嚭鏉ュ悗鍐嶈祴鍊硷級
-            total: 0,
-          },
-          // 鏈�鍚庨�変腑鐨勮
-          lastRow: null,
-          // 閫夋嫨鐨勮
-          selectedRows: [],
-          // 鏁版嵁婧愶紝鎺у埗琛ㄦ牸鐨勬暟鎹�
-          dataSource: [],
-          // 鍒楅厤缃紝鎺у埗琛ㄦ牸鏄剧ず鐨勫垪
-          columns: [
-            { key: 'num', title: '搴忓彿', width: '80px' },
-            {
-              // 瀛楁key锛岃窡鍚庡彴鏁版嵁鐨勫瓧娈靛悕鍖归厤
-              key: 'ship_name',
-              // 鍒楃殑鏍囬
-              title: '鑸瑰悕',
-              // 鍒楃殑瀹藉害
-              width: '180px',
-              // 濡傛灉鍔犱笂浜嗚灞炴�э紝灏变唬琛ㄥ綋鍓嶅崟鍏冩牸鏄彲缂栬緫鐨勶紝type灏辨槸琛ㄥ崟鐨勭被鍨嬶紝input灏辨槸绠�鍗曠殑杈撳叆妗�
-              type: JVxeTypes.input,
-            },
-            { key: 'call', title: '鍛煎彨', width: '80px', type: JVxeTypes.input },
-            { key: 'len', title: '闀�', width: '80px', type: JVxeTypes.input },
-            { key: 'ton', title: '鍚�', width: '120px', type: JVxeTypes.input },
-            { key: 'payer', title: '浠樻鏂�', width: '120px', type: JVxeTypes.input },
-            { key: 'count', title: '鏁�', width: '40px' },
-            {
-              key: 'company',
-              title: '鍏徃',
-              // 鏈�灏忓搴︼紝涓庡搴︿笉鍚岀殑鏄紝杩欎釜涓嶆槸鍥哄畾鐨勫搴︼紝濡傛灉琛ㄦ牸鏈夊浣欑殑绌洪棿锛屼細骞冲潎鍒嗛厤缁欒缃簡 minWidth 鐨勫垪
-              // 濡傛灉瑕佸仛鍗犳弧琛ㄦ牸鐨勫垪鍙互杩欎箞鍐�
-              minWidth: '180px',
-              type: JVxeTypes.input,
-            },
-            { key: 'trend', title: '鍔ㄥ悜', width: '120px', type: JVxeTypes.input },
-          ],
-        },
-        // 瀛愮骇琛ㄧ殑閰嶇疆淇℃伅 锛堥厤缃拰涓昏〃鐨勫畬鍏ㄤ竴鑷达紝灏变笉鍐欏啑浣欑殑娉ㄩ噴浜嗭級
-        table2: {
-          loading: false,
-          pagination: { current: 1, pageSize: 200, pageSizeOptions: ['100', '200'], total: 0 },
-          selectedRows: [],
-          dataSource: [],
-          columns: [
-            { key: 'dd_num', title: '璋冨害搴忓彿', width: '120px' },
-            { key: 'tug', title: '鎷栬疆', width: '180px', type: JVxeTypes.input },
-            { key: 'work_start_time', title: '浣滀笟寮�濮嬫椂闂�', width: '180px', type: JVxeTypes.input },
-            { key: 'work_stop_time', title: '浣滀笟缁撴潫鏃堕棿', width: '180px', type: JVxeTypes.input },
-            { key: 'type', title: '鑸硅埗鍒嗙被', width: '120px', type: JVxeTypes.input },
-            { key: 'port_area', title: '鎵�灞炴腐鍖�', width: '120px', type: JVxeTypes.input },
-          ],
-        },
-        table3: {
-          // 鏈�鍚庨�変腑鐨勮
-          lastRow: null,
-          // 閫夋嫨鐨勮
-          selectedRows: [],
-        },
-        table4: {
-          loading: false,
-          pagination: { current: 1, pageSize: 200, pageSizeOptions: ['100', '200'], total: 0 },
-          selectedRows: [],
-          dataSource: [],
-          columns: [
-            { key: 'dd_num', title: '璋冨害搴忓彿', width: '120px' },
-            { key: 'tug', title: '鎷栬疆', width: '180px', type: JVxeTypes.input },
-            { key: 'work_start_time', title: '浣滀笟寮�濮嬫椂闂�', width: '180px', type: JVxeTypes.input },
-            { key: 'work_stop_time', title: '浣滀笟缁撴潫鏃堕棿', width: '180px', type: JVxeTypes.input },
-            { key: 'type', title: '鑸硅埗鍒嗙被', width: '120px', type: JVxeTypes.input },
-            { key: 'port_area', title: '鎵�灞炴腐鍖�', width: '120px', type: JVxeTypes.input },
-          ],
-        },
-        // 鏌ヨurl鍦板潃
-        url: {
-          getData: '/mock/vxe/getData',
-        },
-      };
-    },
-    // 鐩戝惉鍣�
-    watch: {
-      // 鐩戝惉table1 宸︿笂銆愪富琛ㄣ�戦�夋嫨鐨勬暟鎹彂鐢熶簡鍙樺寲
-      ['table1.lastRow']() {
-        this.loadTable2Data();
-      },
-      // 鐩戝惉table3 鍙充笂銆愪富琛ㄣ�戦�夋嫨鐨勬暟鎹彂鐢熶簡鍙樺寲
-      ['table3.lastRow']() {
-        this.loadTable4Data();
-      },
-    },
-    created() {
-      this.loadTable1Data();
-    },
-    methods: {
-      // 鍔犺浇table1宸︿笂銆愪富琛ㄣ�戠殑鏁版嵁
-      loadTable1Data() {
-        // 灏佽鏌ヨ鏉′欢
-        let formData = {
-          pageNo: this.table1.pagination.current,
-          pageSize: this.table1.pagination.pageSize,
-        };
-        // 璋冪敤鏌ヨ鏁版嵁鎺ュ彛
-        this.table1.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            // 鍚庡彴鏌ヨ鍥炴潵鐨� total锛屾暟鎹�绘暟閲�
-            this.table1.pagination.total = result.total;
-            // 灏嗘煡璇㈢殑鏁版嵁璧嬪�肩粰 dataSource
-            this.table1.dataSource = result.records;
-            // 閲嶇疆閫夋嫨
-            this.table1.selectedRows = [];
-          })
-          .finally(() => {
-            // 杩欓噷鏄棤璁烘垚鍔熸垨澶辫触閮戒細鎵ц鐨勬柟娉曪紝鍦ㄨ繖閲屽叧闂璴oading
-            this.table1.loading = false;
-          });
-      },
-
-      // 褰搕able1宸︿笂銆愪富琛ㄣ�戝垎椤靛弬鏁板彉鍖栨椂瑙﹀彂鐨勪簨浠�
-      handleTable1PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table1.pagination.current = event.current;
-        this.table1.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable1Data();
-      },
-
-      // table1宸︿笂銆愪富琛ㄣ�戝綋閫夋嫨鐨勮鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-      handleTable1SelectRowChange(event) {
-        this.handleTableSelectRowChange(this.table1, event);
-      },
-
-      // 鍔犺浇table2宸︿笅銆愬瓙琛ㄣ�戠殑鏁版嵁锛屾牴鎹富琛ㄧ殑id杩涜鏌ヨ
-      loadTable2Data() {
-        // 濡傛灉涓昏〃娌℃湁閫夋嫨锛屽垯涓嶆煡璇�
-        let selectedRows = this.table1.selectedRows;
-        if (!selectedRows || selectedRows.length === 0) {
-          this.table2.pagination.total = 0;
-          this.table2.dataSource = [];
-          this.table2.selectedRows = [];
-          return;
-        } else if (this.table1.lastRow == null) {
-          this.table1.lastRow = selectedRows[selectedRows.length - 1];
-        }
-        let formData = {
-          parentId: this.table1.lastRow.id,
-          pageNo: this.table2.pagination.current,
-          pageSize: this.table2.pagination.pageSize,
-        };
-        this.table2.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            this.table2.pagination.total = result.total;
-            this.table2.dataSource = result.records;
-            this.table2.selectedRows = [];
-          })
-          .finally(() => {
-            this.table2.loading = false;
-          });
-      },
-
-      // 褰搕able2宸︿笅銆愬瓙琛ㄣ�戝垎椤靛弬鏁板彉鍖栨椂瑙﹀彂鐨勪簨浠�
-      handleTable2PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table2.pagination.current = event.current;
-        this.table2.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable2Data();
-      },
-
-      // table3鍙充笂銆愪富琛ㄣ�戝綋閫夋嫨鐨勮鍙樺寲鏃惰Е鍙戠殑浜嬩欢
-      handleTable3SelectRowChange(event) {
-        this.handleTableSelectRowChange(this.table3, event);
-      },
-
-      // 鍔犺浇table4鍙充笅銆愬瓙琛ㄣ�戠殑鏁版嵁锛屾牴鎹富琛ㄧ殑id杩涜鏌ヨ
-      loadTable4Data() {
-        let parentIds = [];
-        // 濡傛灉涓昏〃娌℃湁閫夋嫨锛屽垯涓嶆煡璇�
-        let selectedRows = this.table3.selectedRows;
-        if (!selectedRows || selectedRows.length === 0) {
-          this.table4.pagination.total = 0;
-          this.table4.dataSource = [];
-          this.table4.selectedRows = [];
-          return;
-        } else if (this.table3.lastRow == null) {
-          this.table3.lastRow = selectedRows[selectedRows.length - 1];
-        }
-        let formData = {
-          parentId: this.table3.lastRow.id,
-          pageNo: this.table4.pagination.current,
-          pageSize: this.table4.pagination.pageSize,
-        };
-        this.table4.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            this.table4.pagination.total = result.total;
-            this.table4.dataSource = result.records;
-            this.table4.selectedRows = [];
-          })
-          .finally(() => {
-            this.table4.loading = false;
-          });
-      },
-
-      // 褰搕able4鍙充笅銆愬瓙琛ㄣ�戝垎椤靛弬鏁板彉鍖栨椂瑙﹀彂鐨勪簨浠�
-      handleTable4PageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.table4.pagination.current = event.current;
-        this.table4.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadTable4Data();
-      },
-
-      /** 鍏叡鏂规硶锛氬鐞嗚〃鏍奸�変腑鍙樺寲浜嬩欢 */
-      handleTableSelectRowChange(table, event) {
-        let { row, action, selectedRows, $table } = event;
-        // 鑾峰彇鏈�鍚庝竴涓�変腑鐨�
-        let lastSelected = selectedRows[selectedRows.length - 1];
-        if (action === 'selected') {
-          table.lastRow = row;
-        } else if (action === 'selected-all') {
-          // 鍙栨秷鍏ㄩ��
-          if (selectedRows.length === 0) {
-            table.lastRow = null;
-          } else if (!table.lastRow) {
-            table.lastRow = lastSelected;
-          }
-        } else if (action === 'unselected' && row === table.lastRow) {
-          table.lastRow = lastSelected;
-        }
-        $table.setCurrentRow(table.lastRow);
-        table.selectedRows = selectedRows;
-      },
-    },
-  };
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template5.vue b/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template5.vue
deleted file mode 100644
index a28076d..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/Template5.vue
+++ /dev/null
@@ -1,221 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <a-row :gutter="8">
-      <a-col :span="6">
-        <!-- 鍔犱笂 show-line 灞炴�у悗锛屽睍寮�鏀惰捣鍥炬爣鑷姩鍙樻垚 +- 鏍峰紡 -->
-        <a-tree
-          class="template-5-tree"
-          :tree-data="treeData"
-          show-icon
-          show-line
-          :expandedKeys="treeExpandedKeys"
-          :selectedKeys="[pagination.current]"
-          @expand="handleTreeExpand"
-          @select="handleTreeSelect"
-        >
-          <!-- 鑷畾涔夊瓙鑺傜偣鍥炬爣 -->
-          <a-icon slot="myIcon" type="unordered-list" style="color: #0c8fcf" />
-        </a-tree>
-      </a-col>
-      <a-col :span="18">
-        <JVxeTable
-          rowNumber
-          rowSelection
-          :height="750"
-          :loading="loading"
-          :columns="columns"
-          :dataSource="dataSource"
-          :pagination="pagination"
-          @pageChange="handleTablePageChange"
-        />
-      </a-col>
-    </a-row>
-  </a-card>
-</template>
-
-<script>
-  import { defHttp } from '/@/utils/http/axios';
-  import { JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-
-  // 銆愬绉嶅竷灞�妯℃澘銆戝乏渚т负鏍戯紝鍙充晶涓鸿缂栬緫
-  export default {
-    name: 'Template5',
-    data() {
-      return {
-        // 鏄惁姝e湪鍔犺浇
-        loading: false,
-        // 鍒嗛〉鍣ㄥ弬鏁�
-        pagination: {
-          // 褰撳墠椤电爜
-          current: 1,
-          // 姣忛〉鐨勬潯鏁�
-          pageSize: 50,
-          // 鍙垏鎹㈢殑鏉℃暟
-          pageSizeOptions: ['50'],
-          // 鏁版嵁鎬绘暟锛堢洰鍓嶅苟涓嶇煡閬撶湡瀹炵殑鎬绘暟锛屾墍浠ュ厛濉啓0锛屽湪鍚庡彴鏌ュ嚭鏉ュ悗鍐嶈祴鍊硷級
-          total: 0,
-        },
-        // 閫夋嫨鐨勮
-        selectedRows: [],
-        // 鏁版嵁婧愶紝鎺у埗琛ㄦ牸鐨勬暟鎹�
-        dataSource: [],
-        // 鍒楅厤缃紝鎺у埗琛ㄦ牸鏄剧ず鐨勫垪
-        columns: [
-          { key: 'num', title: '搴忓彿', width: '80px' },
-          {
-            // 瀛楁key锛岃窡鍚庡彴鏁版嵁鐨勫瓧娈靛悕鍖归厤
-            key: 'ship_name',
-            // 鍒楃殑鏍囬
-            title: '鑸瑰悕',
-            // 鍒楃殑瀹藉害
-            width: '180px',
-            // 濡傛灉鍔犱笂浜嗚灞炴�э紝灏变唬琛ㄥ綋鍓嶅崟鍏冩牸鏄彲缂栬緫鐨勶紝type灏辨槸琛ㄥ崟鐨勭被鍨嬶紝input灏辨槸绠�鍗曠殑杈撳叆妗�
-            type: JVxeTypes.input,
-          },
-          { key: 'call', title: '鍛煎彨', width: '80px', type: JVxeTypes.input },
-          { key: 'len', title: '闀�', width: '80px', type: JVxeTypes.input },
-          { key: 'ton', title: '鍚�', width: '120px', type: JVxeTypes.input },
-          { key: 'payer', title: '浠樻鏂�', width: '120px', type: JVxeTypes.input },
-          { key: 'count', title: '鏁�', width: '40px' },
-          {
-            key: 'company',
-            title: '鍏徃',
-            // 鏈�灏忓搴︼紝涓庡搴︿笉鍚岀殑鏄紝杩欎釜涓嶆槸鍥哄畾鐨勫搴︼紝濡傛灉琛ㄦ牸鏈夊浣欑殑绌洪棿锛屼細骞冲潎鍒嗛厤缁欒缃簡 minWidth 鐨勫垪
-            // 濡傛灉瑕佸仛鍗犳弧琛ㄦ牸鐨勫垪鍙互杩欎箞鍐�
-            minWidth: '180px',
-            type: JVxeTypes.input,
-          },
-          { key: 'trend', title: '鍔ㄥ悜', width: '120px', type: JVxeTypes.input },
-        ],
-        // 鏍戠殑鏁版嵁锛岃繖閲屾ā鎷熷垎椤靛浐瀹氭暟鎹紝瀹為檯鎯呭喌搴旇鏄悗鍙版煡鍑烘潵鐨勬暟鎹�
-        treeData: [
-          // 绗�1绾ф暟鎹�
-          {
-            title: '1-10椤�',
-            key: '1-10',
-            // 绗�2绾ф暟鎹�
-            children: [
-              { title: '绗� 1 椤�', key: 1, slots: { icon: 'myIcon' } },
-              { title: '绗� 2 椤�', key: 2, slots: { icon: 'myIcon' } },
-              {
-                title: '绗� 3 椤�',
-                key: 3,
-                slots: { icon: 'myIcon' },
-                // 绗�3绾ф暟鎹�
-                children: [
-                  { title: '绗� 333 椤�', key: 333, slots: { icon: 'myIcon' } },
-                  { title: '绗� 444 椤�', key: 444, slots: { icon: 'myIcon' } },
-                  { title: '绗� 555 椤�', key: 555, slots: { icon: 'myIcon' } },
-                  // 绗�4绗�5绾т互姝ょ被鎺紝鍔犱笂 children 灞炴�у嵆鍙�
-                ],
-              },
-              { title: '绗� 4 椤�', key: 4, slots: { icon: 'myIcon' } },
-              { title: '绗� 5 椤�', key: 5, slots: { icon: 'myIcon' } },
-              { title: '绗� 6 椤�', key: 6, slots: { icon: 'myIcon' } },
-              { title: '绗� 7 椤�', key: 7, slots: { icon: 'myIcon' } },
-              { title: '绗� 8 椤�', key: 8, slots: { icon: 'myIcon' } },
-              { title: '绗� 9 椤�', key: 9, slots: { icon: 'myIcon' } },
-              { title: '绗� 10 椤�', key: 10, slots: { icon: 'myIcon' } },
-            ],
-            slots: { icon: 'myIcon' },
-          },
-          {
-            title: '11-20椤�',
-            key: '11-20',
-            children: [
-              { title: '绗� 11 椤�', key: 11, slots: { icon: 'myIcon' } },
-              { title: '绗� 12 椤�', key: 12, slots: { icon: 'myIcon' } },
-              { title: '绗� 13 椤�', key: 13, slots: { icon: 'myIcon' } },
-              { title: '绗� 14 椤�', key: 14, slots: { icon: 'myIcon' } },
-              { title: '绗� 15 椤�', key: 15, slots: { icon: 'myIcon' } },
-              { title: '绗� 16 椤�', key: 16, slots: { icon: 'myIcon' } },
-              { title: '绗� 17 椤�', key: 17, slots: { icon: 'myIcon' } },
-              { title: '绗� 18 椤�', key: 18, slots: { icon: 'myIcon' } },
-              { title: '绗� 19 椤�', key: 19, slots: { icon: 'myIcon' } },
-              { title: '绗� 20 椤�', key: 20, slots: { icon: 'myIcon' } },
-            ],
-            slots: { icon: 'myIcon' },
-          },
-        ],
-        // 鏍戝睍寮�鐨勫垪锛岄粯璁� 1-10
-        treeExpandedKeys: ['1-10'],
-        // 鏌ヨurl鍦板潃
-        url: {
-          getData: '/mock/vxe/getData',
-        },
-      };
-    },
-    created() {
-      this.loadData();
-    },
-    methods: {
-      // 鍔犺浇琛岀紪杈戠殑鏁版嵁
-      loadData() {
-        // 灏佽鏌ヨ鏉′欢
-        let formData = {
-          pageNo: this.pagination.current,
-          pageSize: this.pagination.pageSize,
-        };
-        // 璋冪敤鏌ヨ鏁版嵁鎺ュ彛
-        this.loading = true;
-        defHttp
-          .get({
-            url: this.url.getData,
-            params: formData,
-          })
-          .then((result) => {
-            // 鍚庡彴鏌ヨ鍥炴潵鐨� total锛屾暟鎹�绘暟閲�
-            this.pagination.total = result.total;
-            // 灏嗘煡璇㈢殑鏁版嵁璧嬪�肩粰 dataSource
-            this.dataSource = result.records;
-            // 閲嶇疆閫夋嫨
-            this.selectedRows = [];
-          })
-          .finally(() => {
-            // 杩欓噷鏄棤璁烘垚鍔熸垨澶辫触閮戒細鎵ц鐨勬柟娉曪紝鍦ㄨ繖閲屽叧闂璴oading
-            this.loading = false;
-          });
-      },
-
-      handleTablePageChange(event) {
-        // 閲嶆柊璧嬪��
-        this.pagination.current = event.current;
-        this.pagination.pageSize = event.pageSize;
-        // 鏌ヨ鏁版嵁
-        this.loadData();
-        // 鍒ゆ柇鏍戝睍寮�鐨刱ey
-        if (event.current <= 10) {
-          this.treeExpandedKeys = ['1-10'];
-        } else {
-          this.treeExpandedKeys = ['11-20'];
-        }
-      },
-
-      // 鏍戣閫夋嫨瑙﹀彂鐨勪簨浠�
-      handleTreeSelect(selectedKeys) {
-        let key = selectedKeys[0];
-        if (typeof key === 'string') {
-          // 鎺у埗鏍戝睍寮�涓哄綋鍓嶉�夋嫨鐨勫垪
-          this.treeExpandedKeys = selectedKeys;
-        } else {
-          this.pagination.current = key;
-          this.loadData();
-        }
-      },
-
-      // 鏍戣閫夋嫨瑙﹀彂鐨勪簨浠�
-      handleTreeExpand(expandedKeys) {
-        this.treeExpandedKeys = expandedKeys;
-      },
-    },
-  };
-</script>
-
-<style lang="less">
-  /** 闅愯棌鏂囦欢灏忓浘鏍� */
-  .template-5-tree.ant-tree {
-    li span.ant-tree-switcher.ant-tree-switcher-noop {
-      display: none;
-    }
-  }
-</style>
diff --git a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/index.vue b/src/views/demo/jeecg/JVxeTableDemo/layout-demo/index.vue
deleted file mode 100644
index 15a8832..0000000
--- a/src/views/demo/jeecg/JVxeTableDemo/layout-demo/index.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <a-tabs>
-      <a-tab-pane tab="ERP甯冨眬妯℃澘" key="erp">
-        <erp-template />
-      </a-tab-pane>
-      <a-tab-pane tab="甯冨眬妯℃澘1" key="1">
-        <template1 />
-      </a-tab-pane>
-      <a-tab-pane tab="甯冨眬妯℃澘2" key="2">
-        <template2 />
-      </a-tab-pane>
-      <a-tab-pane tab="甯冨眬妯℃澘3" key="3">
-        <template3 />
-      </a-tab-pane>
-      <a-tab-pane tab="甯冨眬妯℃澘4" key="4">
-        <template4 />
-      </a-tab-pane>
-      <a-tab-pane tab="甯冨眬妯℃澘5" key="5">
-        <template5 />
-      </a-tab-pane>
-    </a-tabs>
-  </a-card>
-</template>
-
-<script lang="ts" setup>
-  import Template1 from './Template1.vue';
-  import Template2 from './Template2.vue';
-  import Template3 from './Template3.vue';
-  import Template4 from './Template4.vue';
-  import Template5 from './Template5.vue';
-  import ErpTemplate from './ErpTemplate.vue';
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/jeecg/JeecgComponents.vue b/src/views/demo/jeecg/JeecgComponents.vue
deleted file mode 100644
index b12f70f..0000000
--- a/src/views/demo/jeecg/JeecgComponents.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-  <BasicForm
-    ref="formElRef"
-    :class="'jee-select-demo-form'"
-    :labelCol="{ span: 5 }"
-    :wrapperCol="{ span: 15 }"
-    :showResetButton="false"
-    :showSubmitButton="false"
-    :schemas="schemas"
-    :actionColOptions="{ span: 24 }"
-    @submit="handleSubmit"
-    @reset="handleReset"
-    style="height: 100%"
-  >
-    <template #jAreaLinkage="{ model, field }">
-      <JAreaLinkage v-model:value="model[field]" :showArea="true" :showAll="false" />
-    </template>
-    <template #jAreaLinkage1="{ model, field }">
-      <JAreaLinkage :disabled="isDisabledAuth(['demo.dbarray'])" v-model:value="model[field]" :showArea="true" :showAll="false" />
-    </template>
-    <template #JPopup="{ model, field }">
-      <JPopup v-model:value="model[field]" :formElRef="formElRef" code="report_user" :fieldConfig="[{ source: 'username', target: 'pop1' }]" />
-    </template>
-    <template #JAreaSelect="{ model, field }">
-      <JAreaSelect v-model:value="model[field]" />
-    </template>
-    <template #JCheckbox="{ model, field }">
-      <JCheckbox v-model:value="model[field]" dictCode="remindMode" />
-    </template>
-    <template #JInput="{ model, field }">
-      <JInput v-model:value="model[field]" :type="model['jinputtype']" />
-    </template>
-    <template #dargVerify="{ model, field }">
-      <BasicDragVerify v-model:value="model[field]" />
-    </template>
-    <template #superQuery="{ model, field }">
-      <super-query :config="superQueryConfig" @search="(value)=>handleSuperQuery(value, model, field)"/>
-    </template>
-  </BasicForm>
-</template>
-<script lang="ts">
-  import { computed, defineComponent, unref, ref } from 'vue';
-  import { BasicForm, ApiSelect, JAreaLinkage, JPopup, JAreaSelect, FormActionType, JCheckbox, JInput, JEllipsis } from '/@/components/Form';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { optionsListApi } from '/@/api/demo/select';
-  import { useDebounceFn } from '@vueuse/core';
-  import { schemas } from './jeecgComponents.data';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  import { BasicDragVerify } from '/@/components/Verify';
-
-  export default defineComponent({
-    components: {
-      BasicForm,
-      ApiSelect,
-      JAreaLinkage,
-      JPopup,
-      JAreaSelect,
-      JCheckbox,
-      JInput,
-      JEllipsis,
-      BasicDragVerify,
-    },
-    name: 'JeecgComponents',
-    setup() {
-      const { isDisabledAuth } = usePermission();
-      const check = ref(null);
-      const formElRef = ref<Nullable<FormActionType>>(null);
-      const { createMessage } = useMessage();
-      const keyword = ref<string>('');
-      const submitButtonOptions = ref({
-        text: '纭畾',
-      });
-      const searchParams = computed<Recordable>(() => {
-        return { keyword: unref(keyword) };
-      });
-
-      function onSearch(value: string) {
-        keyword.value = value;
-      }
-      
-      const superQueryConfig = {
-        name:{ title: "鍚嶇О", view: "text", type: "string", order: 1 },
-        birthday:{ title: "鐢熸棩", view: "date", type: "string", order: 2 },
-        age:{ title: "骞撮緞", view: "number", type: "number", order: 4 },
-        sex:{ title: "鎬у埆", view: "list", type: "string", dictCode: "sex", order: 5 },
-        bpmStatus:{ title: "娴佺▼鐘舵��", view: "list_multi", type: "string",  dictCode: "bpm_status", order: 6 },
-      }
-      function handleSuperQuery(value, model, field){
-        if(value){
-          let str = decodeURI(value.superQueryParams)
-          console.log(str)
-          model[field] = str
-        }
-      }
-
-      return {
-        schemas,
-        formElRef,
-        isDisabledAuth,
-        optionsListApi,
-        submitButtonOptions,
-        onSearch: useDebounceFn(onSearch, 300),
-        searchParams,
-        superQueryConfig,
-        handleSuperQuery,
-        handleReset: () => {
-          keyword.value = '';
-        },
-        handleSubmit: (values: any) => {
-          console.log('values:', values);
-          createMessage.success('click search,values:' + JSON.stringify(values));
-        },
-        check,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  /**update-begin-author:taoyan date:20220324 for: VUEN-351銆恦ue3銆戝睍绀轰笉鍏�*/
-  .jee-select-demo-form .ant-col-5 {
-    flex: 0 0 159px;
-    max-width: 159px;
-  }
-  /**update-end-author:taoyan date:20220324 for: VUEN-351銆恦ue3銆戝睍绀轰笉鍏�*/
-</style>
diff --git a/src/views/demo/jeecg/JeecgPdfView.vue b/src/views/demo/jeecg/JeecgPdfView.vue
deleted file mode 100644
index 0a009e9..0000000
--- a/src/views/demo/jeecg/JeecgPdfView.vue
+++ /dev/null
@@ -1,93 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <a-row>
-      <!-- 宸︿晶鏂囦欢鏍� -->
-      <a-col :span="4" class="clName">
-        <a-tree :treeData="treeData" :defaultExpandAll="true" @select="onSelect" style="height: 500px; overflow-y: auto"> </a-tree>
-      </a-col>
-      <!--鍙充晶缂╃暐鍥�-->
-      <a-col :span="18">
-        <div v-for="(file, key) in dataSource" :key="key">
-          <a-col :span="24">
-            <a-divider orientation="left">{{ file.fileName }}</a-divider>
-          </a-col>
-          <!-- 棰勮鍖哄煙 -->
-          <a-col :span="24">
-            <template v-if="file.filePdfPath">
-              <div @click="pdfPreview(file.title)">
-                <img style="width: 80px; height: 80px" src="../../../assets/images/pdf4.jpg" />
-              </div>
-            </template>
-            <template v-else> (鏆傛棤鏉愭枡锛岀偣鍑�"閫夋嫨鏂囦欢"鎴�"鎵弿涓婁紶"涓婁紶鏂囦欢) </template>
-          </a-col>
-        </div>
-      </a-col>
-    </a-row>
-    <div style="display: none">
-      <iframe id="pdfPreviewIframe" :src="url" frameborder="0" width="100%" height="550px" scrolling="auto"></iframe>
-    </div>
-  </a-card>
-</template>
-
-<script lang="ts">
-  import { defineComponent, ref, unref, onMounted } from 'vue';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { getToken } from '/@/utils/auth';
-
-  const mockdata = [
-    {
-      id: '1',
-      key: '1',
-      title: '瀹炰緥.pdf',
-      fileCode: 'shili',
-      fileName: '瀹炰緥',
-      filePdfPath: '瀹炰緥',
-    },
-  ];
-
-  export default defineComponent({
-    name: 'JeecgPdfView',
-    setup() {
-      const glob = useGlobSetting();
-      const treeData = ref([
-        {
-          title: '鎵�鏈塒DF鐢靛瓙妗�',
-          key: '0-0',
-          children: mockdata,
-        },
-      ]);
-      const dataSource = ref(mockdata);
-      const allData = ref(mockdata);
-      const url = ref(`${glob.domainUrl}/sys/common/pdf/pdfPreviewIframe`);
-
-      /**
-       * 鎵撳紑iframe绐楀彛
-       * @param title
-       */
-      function pdfPreview(title) {
-        let iframe = document.getElementById('pdfPreviewIframe');
-        let json = { title: title, token: getToken() };
-        iframe.contentWindow.postMessage(json, '*');
-      }
-
-      // 閫夋嫨PDF鏂囦欢
-      function onSelect(selectedKeys, info) {
-        dataSource.value = [];
-        if (selectedKeys[0] === undefined || selectedKeys[0] === '0-0') {
-          dataSource.value = unref(allData);
-        } else {
-          dataSource.value.push(info.node.dataRef);
-        }
-      }
-
-      return {
-        url,
-        dataSource,
-        treeData,
-        allData,
-        onSelect,
-        pdfPreview,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/jeecg/Native/less/TableExpand.less b/src/views/demo/jeecg/Native/less/TableExpand.less
deleted file mode 100644
index 407ff14..0000000
--- a/src/views/demo/jeecg/Native/less/TableExpand.less
+++ /dev/null
@@ -1,102 +0,0 @@
-/** [琛ㄦ牸涓婚鏍峰紡涓�] 琛ㄦ牸寮哄埗鍒椾笉鎹㈣ */
-.j-table-force-nowrap {
-  td,
-  th {
-    white-space: nowrap;
-  }
-
-  .ant-table-selection-column {
-    padding: 12px 22px !important;
-  }
-
-  /** 鍒楄嚜閫傚簲锛屽紛绔細瀵艰嚧鍒楀澶辨晥 */
-
-  &.ant-table-wrapper .ant-table-content {
-    overflow-x: auto;
-  }
-}
-
-/** 鏌ヨ鍖哄煙閫氱敤鏍峰紡*/
-.table-page-search-wrapper {
-  .ant-form-inline {
-    .ant-form-item {
-      display: flex;
-      margin-bottom: 24px;
-      margin-right: 0;
-
-      .ant-form-item-control-wrapper {
-        flex: 1 1;
-        display: inline-block;
-        vertical-align: middle;
-      }
-
-      > .ant-form-item-label {
-        line-height: 32px;
-        padding-right: 8px;
-        width: auto;
-      }
-
-      .ant-form-item-control {
-        height: 32px;
-        line-height: 32px;
-      }
-    }
-  }
-
-  .table-page-search-submitButtons {
-    display: block;
-    margin-bottom: 24px;
-    white-space: nowrap;
-  }
-}
-
-/*鍒楄〃涓婃柟鎿嶄綔鎸夐挳鍖哄煙*/
-.ant-card-body .table-operator {
-  margin-bottom: 8px;
-}
-
-/** Button鎸夐挳闂磋窛 */
-.table-operator .ant-btn {
-  margin: 0 8px 8px 0;
-}
-
-.table-operator .ant-btn-group .ant-btn {
-  margin: 0;
-}
-
-.table-operator .ant-btn-group .ant-btn:last-child {
-  margin: 0 8px 8px 0;
-}
-
-/*鍒楄〃td鐨刾adding璁剧疆 鍙互鎺у埗鍒楄〃澶у皬*/
-.ant-table-tbody .ant-table-row td {
-  padding-top: 15px;
-  padding-bottom: 15px;
-}
-
-/*鍒楄〃椤甸潰寮瑰嚭modal*/
-.ant-modal-cust-warp {
-  height: 100%;
-}
-
-/*寮瑰嚭modal Y杞存粴鍔ㄦ潯*/
-.ant-modal-cust-warp .ant-modal-body {
-  height: calc(100% - 110px) !important;
-  overflow-y: auto;
-}
-
-/*寮瑰嚭modal 鍏堟湁content鍚庢湁body 鏁呮粴鍔ㄦ潯鎺у埗鍦╞ody涓�*/
-.ant-modal-cust-warp .ant-modal-content {
-  height: 90% !important;
-  overflow-y: hidden;
-}
-
-/*鍒楄〃涓湁鍥剧墖鐨勫姞杩欎釜鏍峰紡 鍙傝�冪敤鎴风鐞�*/
-.anty-img-wrap {
-  height: 25px;
-  position: relative;
-}
-
-.antd-more a {
-  color: #000000;
-}
diff --git a/src/views/demo/jeecg/Native/one/OneNativeList.vue b/src/views/demo/jeecg/Native/one/OneNativeList.vue
deleted file mode 100644
index 2896398..0000000
--- a/src/views/demo/jeecg/Native/one/OneNativeList.vue
+++ /dev/null
@@ -1,418 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
-    <div class="table-operator">
-      <a-button @click="handleAdd" type="primary" preIcon="ant-design:plus">鏂板</a-button>
-      <!--      <a-button type="primary" preIcon="ant-design:download" @click="handleExportExcel('鍗曡〃鍘熺敓鍒楄〃')">瀵煎嚭</a-button>-->
-      <!--      <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="handleImportExcel">瀵煎叆</j-upload-button>-->
-      <a-dropdown v-if="selectedRowKeys.length > 0">
-        <template #overlay>
-          <a-menu>
-            <a-menu-item key="1" @click="batchDel">
-              <Icon icon="ant-design:delete-outlined"></Icon>
-              鍒犻櫎
-            </a-menu-item>
-          </a-menu>
-        </template>
-        <a-button
-          >鎵归噺鎿嶄綔
-          <Icon icon="mdi:chevron-down"></Icon>
-        </a-button>
-      </a-dropdown>
-    </div>
-
-    <!-- table鍖哄煙-begin -->
-    <div>
-      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px">
-        <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a
-        >椤�
-        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
-      </div>
-
-      <a-table
-        ref="table"
-        size="middle"
-        :scroll="{ x: true }"
-        bordered
-        rowKey="id"
-        class="j-table-force-nowrap"
-        :columns="columns"
-        :dataSource="dataSource"
-        :pagination="ipagination"
-        :loading="loading"
-        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
-        @change="handleTableChange"
-      >
-        <template slot="htmlSlot" slot-scope="text">
-          <div v-html="text"></div>
-        </template>
-        <template #imgSlot="{ text, record }">
-          <span v-if="!text" style="font-size: 12px; font-style: italic">鏃犲浘鐗�</span>
-          <img v-else :src="getImgView(text)" :preview="record.id" alt="" class="anty-img-wrap" />
-        </template>
-        <template #pcaSlot="{ text }">
-          <div>{{ getAreaTextByCode(text) }}</div>
-        </template>
-        <template #fileSlot="{ text }">
-          <span v-if="!text" style="font-size: 12px; font-style: italic">鏃犳枃浠�</span>
-          <a-button v-else :ghost="true" type="primary" preIcon="ant-design:download" size="small" @click="downloadFile(text)"> 涓嬭浇 </a-button>
-        </template>
-
-        <template #action="{ text, record }">
-          <a @click="handleEdit(record)">缂栬緫</a>
-          <a-divider type="vertical" />
-          <a-dropdown>
-            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
-            <template #overlay>
-              <a-menu class="antd-more">
-                <a-menu-item>
-                  <a @click="handleDetail(record)">璇︽儏</a>
-                </a-menu-item>
-                <a-menu-item>
-                  <Popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
-                    <a>鍒犻櫎</a>
-                  </Popconfirm>
-                </a-menu-item>
-              </a-menu>
-            </template>
-          </a-dropdown>
-        </template>
-      </a-table>
-    </div>
-    <OneNativeModal ref="oneProtogenesisModal" @ok="handleSuccess"></OneNativeModal>
-  </a-card>
-</template>
-
-<script lang="ts" setup>
-  import '../less/TableExpand.less';
-  import { onMounted, ref, reactive } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { filterMultiDictText } from '/@/utils/dict/JDictSelectUtil.js';
-  import { getAreaTextByCode } from '/@/components/Form/src/utils/Area';
-  import OneNativeModal from './components/OneNativeModal.vue';
-  import { Modal, Popconfirm } from 'ant-design-vue';
-  import { JSelectUserByDept, JDictSelectTag, JSelectDept, JSearchSelect } from '/@/components/Form';
-  import { filterObj, getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-  import { loadCategoryData } from '/@/api/common/api';
-  import { getToken } from '/@/utils/auth';
-  import { useMethods } from '/@/hooks/system/useMethods';
-  import { downloadFile } from '/@/utils/common/renderUtils';
-  import { initDictOptions } from '/@/utils/dict';
-
-  const { handleExportXls, handleImportXls } = useMethods();
-  const modalVisible = ref<boolean>(false);
-  const queryParam = ref<any>({});
-  const loading = ref<boolean>(false);
-  const dictOptions = ref<any>([]);
-  const oneProtogenesisModal = ref();
-  const tokenHeader = { 'X-Access-Token': getToken() };
-  //琛ㄥご
-  const columns = ref<any>([
-    {
-      title: '鏂囨湰',
-      align: 'center',
-      dataIndex: 'name',
-    },
-    {
-      title: '瀛楀吀涓嬫媺',
-      align: 'center',
-      dataIndex: 'xiala',
-      customRender: ({ text }) => (text ? filterMultiDictText(dictOptions.value['xiala'], text) : ''),
-    },
-    {
-      title: '瀛楀吀鍗曢��',
-      align: 'center',
-      dataIndex: 'danxuan',
-      customRender: ({ text }) => (text ? filterMultiDictText(dictOptions.value['danxuan'], text) : ''),
-    },
-    {
-      title: '瀛楀吀澶氶��',
-      align: 'center',
-      dataIndex: 'duoxuan',
-      customRender: ({ text }) => (text ? filterMultiDictText(dictOptions.value['duoxuan'], text) : ''),
-    },
-    {
-      title: '寮�鍏�',
-      align: 'center',
-      dataIndex: 'kaiguan',
-      customRender: ({ text }) => (text ? filterMultiDictText(dictOptions.value['kaiguan'], text) : ''),
-    },
-    {
-      title: '鏃ユ湡',
-      align: 'center',
-      dataIndex: 'riqi',
-      customRender: function ({ text }) {
-        return !text ? '' : text.length > 10 ? text.substr(0, 10) : text;
-      },
-    },
-    {
-      title: '骞存湀鏃ユ椂鍒嗙',
-      align: 'center',
-      dataIndex: 'nyrsfm',
-    },
-    {
-      title: '鏃堕棿',
-      align: 'center',
-      dataIndex: 'shijian',
-    },
-    {
-      title: '鏂囦欢',
-      align: 'center',
-      dataIndex: 'wenjian',
-      slots: { customRender: 'fileSlot' },
-    },
-    {
-      title: '鍥剧墖',
-      align: 'center',
-      dataIndex: 'tupian',
-      slots: { customRender: 'imgSlot' },
-    },
-    {
-      title: '鎿嶄綔',
-      dataIndex: 'action',
-      align: 'center',
-      fixed: 'right',
-      width: 147,
-      slots: { customRender: 'action' },
-    },
-  ]);
-
-  const Api = reactive<any>({
-    list: '/test/jeecgDemo/oneNative/list',
-    delete: '/test/jeecgDemo/oneNative/delete',
-    exportXls: '/test/jeecgDemo/oneNative/exportXls',
-    importExcel: 'test/jeecgDemo/oneNative/importExcel',
-  });
-
-  const dataSource = ref<any>([]);
-  const toggleSearchStatus = ref<boolean>(false);
-  const ipagination = ref<any>({
-    current: 1,
-    pageSize: 10,
-    pageSizeOptions: ['10', '20', '30'],
-    showTotal: (total, range) => {
-      return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�';
-    },
-    showQuickJumper: true,
-    showSizeChanger: true,
-    total: 0,
-  });
-
-  const selectedRowKeys = ref<any>([]);
-  const selectionRows = ref<any>([]);
-  const iSorter = ref<any>({ column: 'createTime', order: 'desc' });
-  const iFilters = ref<any>({});
-  const { createMessage } = useMessage();
-
-  /**
-   * 澶嶉�夋閫変腑浜嬩欢
-   * @param rowKeys
-   * @param rows
-   */
-  function onSelectChange(rowKeys, rows) {
-    selectedRowKeys.value = rowKeys;
-    selectionRows.value = rows;
-  }
-
-  /**
-   * 琛ㄦ牸鏀瑰彉浜嬩欢
-   */
-  function handleTableChange({ pagination, filters, sorter }) {
-    ipagination.value = pagination;
-    iSorter.value = sorter;
-    iFilters.value = { ...filters };
-  }
-
-  /**
-   * 鏂板
-   */
-  function handleAdd() {
-    oneProtogenesisModal.value.disableSubmit = false;
-    oneProtogenesisModal.value.add();
-  }
-
-  /**
-   * 娓呴櫎閫変腑琛�
-   */
-  function onClearSelected() {
-    selectedRowKeys.value = [];
-    selectionRows.value = [];
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎
-   */
-  function batchDel() {
-    Modal.confirm({
-      title: '纭鍒犻櫎',
-      content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-      okText: '纭',
-      cancelText: '鍙栨秷',
-      onOk: () => {
-        defHttp.delete({ url: Api.delete, data: { ids: selectedRowKeys.value } }, { joinParamsToUrl: true }).then(() => {
-          handleSuccess();
-        });
-      },
-    });
-  }
-
-  /**
-   * 瀵煎嚭excel
-   */
-  function handleExportExcel(title) {
-    let paramsForm = getQueryParams();
-    if (selectedRowKeys.value && selectedRowKeys.value.length > 0) {
-      paramsForm['selections'] = selectedRowKeys.join(',');
-    }
-    handleExportXls(title, Api.exportXls, filterObj(paramsForm));
-  }
-
-  /**
-   * 瀵煎叆excel
-   */
-  function handleImportExcel(file) {
-    handleImportXls(file, Api.importExcel, '').then(() => {
-      handleSuccess();
-    });
-  }
-
-  /**
-   * 鑾峰彇鏌ヨ鍙傛暟
-   */
-  function getQueryParams() {
-    let params = Object.assign(queryParam.value, iSorter.value, iFilters.value);
-    params.field = getQueryField();
-    params.pageNo = ipagination.value.current;
-    params.pageSize = ipagination.value.pageSize;
-    return filterObj(params);
-  }
-
-  /**
-   * 瀛楁鏉冮檺鎺у埗
-   */
-  function getQueryField() {
-    let str = 'id,';
-    columns.value.forEach(function (value) {
-      str += ',' + value.dataIndex;
-    });
-    return str;
-  }
-
-  /**
-   * 鍒濆鍖栨暟鎹�
-   */
-  function loadData(arg?) {
-    if (arg === 1) {
-      ipagination.value.current = 1;
-    }
-    loading.value = true;
-    let params = getQueryParams();
-    defHttp
-      .get({ url: Api.list, params }, { isTransformResponse: false })
-      .then((res) => {
-        if (res.success) {
-          dataSource.value = res.result.records;
-          if (res.result && res.result.total) {
-            ipagination.value.total = res.result.total;
-          } else {
-            ipagination.value.total = 0;
-          }
-        } else {
-          createMessage.warning(res.message);
-        }
-      })
-      .finally(() => {
-        loading.value = false;
-      });
-  }
-
-  //鏌ヨ
-  function searchQuery() {
-    loadData(1);
-    selectedRowKeys.value = [];
-    selectionRows.value = [];
-  }
-
-  /**
-   * 鏌ヨ鍖哄煙灞曞紑鍏抽棴
-   */
-  function handleToggleSearch() {
-    toggleSearchStatus.value = !toggleSearchStatus.value;
-  }
-
-  /**
-   * 閲嶇疆鎸夐挳
-   */
-  function searchReset() {
-    queryParam.value = {};
-    loadData(1);
-  }
-
-  /**
-   * 鑾峰彇棰勮鍥剧墖
-   */
-  function getImgView(text) {
-    if (text && text.indexOf(',') > 0) {
-      text = text.substring(0, text.indexOf(','));
-    }
-    return getFileAccessHttpUrl(text);
-  }
-
-  /**
-   * 缂栬緫
-   * @param record
-   */
-  function handleEdit(record) {
-    oneProtogenesisModal.value.disableSubmit = false;
-    oneProtogenesisModal.value.edit(record);
-  }
-
-  /**
-   * 璇︽儏
-   * @param record
-   */
-  function handleDetail(record) {
-    oneProtogenesisModal.value.disableSubmit = true;
-    oneProtogenesisModal.value.edit(record);
-  }
-
-  /**
-   * 鍒犻櫎
-   * @param id
-   */
-  function handleDelete(id) {
-    defHttp.delete({ url: Api.delete, data: { ids: id } }, { joinParamsToUrl: true }).then((res) => {
-      handleSuccess();
-    });
-  }
-
-  /**
-   * 鍒濆鍖栧瓧鍏搁�夐」
-   */
-  async function initDictConfig() {
-    dictOptions.value['flzds'] = await loadCategoryData({ code: 'B01' });
-    dictOptions.value['xiala'] = await initDictOptions('sex');
-    dictOptions.value['danxuan'] = await initDictOptions('sex');
-    dictOptions.value['duoxuan'] = await initDictOptions('urgent_level');
-  }
-
-  /**
-   * 淇濆瓨琛ㄥ崟鍚庡洖璋冧簨浠�
-   */
-  function handleSuccess() {
-    selectedRowKeys.value = [];
-    selectionRows.value = [];
-    loadData(1);
-  }
-  onMounted(() => {
-    dictOptions.value['kaiguan'] = [
-      { text: '鏄�', value: '1' },
-      { text: '鍚�', value: '2' },
-    ];
-    //鍒濆鍔犺浇椤甸潰
-    loadData();
-    //鍒濆鍖栧瓧鍏搁�夐」
-    initDictConfig();
-  });
-</script>
diff --git a/src/views/demo/jeecg/Native/one/components/OneNativeForm.vue b/src/views/demo/jeecg/Native/one/components/OneNativeForm.vue
deleted file mode 100644
index 092f7f9..0000000
--- a/src/views/demo/jeecg/Native/one/components/OneNativeForm.vue
+++ /dev/null
@@ -1,455 +0,0 @@
-<template>
-  <a-spin :spinning="confirmLoading">
-    <a-form class="antd-modal-form" ref="formRef" :model="formState" :rules="validatorRules">
-      <a-row>
-        <a-col :span="24">
-          <a-form-item label="鏂囨湰" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.name">
-            <a-input v-model:value="formState.name" placeholder="璇疯緭鍏ユ枃鏈�"></a-input>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.miMa">
-            <a-input-password v-model:value="formState.miMa" placeholder="璇疯緭鍏ュ瘑鐮�" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="瀛楀吀涓嬫媺" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.xiala">
-            <JDictSelectTag type="select" v-model:value="formState.xiala" dictCode="sex" placeholder="璇烽�夋嫨瀛楀吀涓嬫媺" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="瀛楀吀鍗曢��" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.danxuan">
-            <JDictSelectTag type="radio" v-model:value="formState.danxuan" dictCode="sex" placeholder="璇烽�夋嫨瀛楀吀鍗曢��" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="瀛楀吀澶氶��" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.duoxuan">
-            <JCheckbox v-model:value="formState.duoxuan" dictCode="urgent_level" placeholder="璇烽�夋嫨瀛楀吀澶氶��" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="寮�鍏�" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.kaiguan">
-            <JSwitch v-model:value="formState.kaiguan" :options="['1', '0']"></JSwitch>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="鏃ユ湡" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.riqi">
-            <a-date-picker placeholder="璇烽�夋嫨鏃ユ湡" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD" v-model:value="formState.riqi" style="width: 100%" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="骞存湀鏃ユ椂鍒嗙" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.nyrsfm">
-            <a-date-picker show-time v-model:value="formState.nyrsfm" style="width: 100%" valueFormat="YYYY-MM-DD HH:mm:ss" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.shijian">
-            <TimePicker placeholder="璇烽�夋嫨鏃堕棿" v-model:value="formState.shijian" style="width: 100%" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="鏂囦欢" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.wenjian">
-            <JUpload v-model:value="formState.wenjian"></JUpload>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="鍥剧墖" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.tupian">
-            <JImageUpload :fileMax="2" v-model:value="formState.tupian"></JImageUpload>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="澶氳鏂囨湰妗�" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.dhwb">
-            <a-textarea v-model:value="formState.dhwb" rows="4" placeholder="璇疯緭鍏ュ琛屾枃鏈" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="瀛楀吀琛ㄤ笅鎷夋悳绱㈡" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.xlss">
-            <JSearchSelect v-model:value="formState.xlss" dict="sys_user,realname,username" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="popup寮圭獥" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.popup">
-            <JPopup
-              v-model:value="formState.popup"
-              :fieldConfig="[
-                { source: 'name', target: 'popup' },
-                { source: 'id', target: 'popback' },
-              ]"
-              code="report_user"
-              :multi="true"
-              :setFieldsValue="setFieldsValue"
-            />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="popback" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.popback">
-            <a-input v-model:value="formState.popback" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="鍒嗙被瀛楀吀鏍�" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.flzds">
-            <JCategorySelect
-              @change="(value) => handleFormChange('flzds', value)"
-              v-model:value="formState.flzds"
-              pcode="B02"
-              placeholder="璇烽�夋嫨鍒嗙被瀛楀吀鏍�"
-            />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="閮ㄩ棬閫夋嫨" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.bmxz">
-            <JSelectDept v-model:value="formState.bmxz" :multi="true" type="array" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="鐢ㄦ埛閫夋嫨" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.yhxz">
-            <JSelectUserByDept v-model:value="formState.yhxz" :multi="true" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="瀵屾枃鏈�" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.fwb">
-            <JEditor v-model:value="formState.fwb" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="markdown" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.markdownString">
-            <JMarkdownEditor v-model:value="formState.markdownString"></JMarkdownEditor>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="鐪佸競鍖篔AreaSelect" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.shq">
-            <JAreaSelect v-model:value="formState.shq" placeholder="璇疯緭鍏ョ渷甯傚尯" />
-          </a-form-item>
-        </a-col>
-
-        <a-col :span="24">
-          <a-form-item label="鐪佸競鍖篔AreaLinkage" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.jssq">
-            <JAreaLinkage v-model:value="formState.jssq" placeholder="璇疯緭鍏ョ渷甯傚尯" />
-          </a-form-item>
-        </a-col>
-
-        <a-col :span="24">
-          <a-form-item label="JInputPop" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.ldzje">
-            <JInputPop
-              v-model:value="formState.ldzje"
-              placeholder="璇疯緭鍏InputPop"
-              @change="(value) => handleFormChange('ldzje', value)"
-            ></JInputPop>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="JSelectInput" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.ldzjs">
-            <JSelectInput
-              v-model:value="formState.ldzjs"
-              placeholder="璇烽�夋嫨JSelectInput"
-              :options="ldzjsOptions"
-              @change="(value) => handleFormChange('ldzjs', value)"
-            ></JSelectInput>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="涓嬫媺澶氶��" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.zddtjxl">
-            <JSelectMultiple v-model:value="formState.zddtjxl" placeholder="璇烽�夋嫨涓嬫媺澶氶��" dictCode="sex"></JSelectMultiple>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="鐢ㄦ埛" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.yongHu">
-            <JSelectUser v-model:value="formState.yongHu" placeholder="璇烽�夋嫨鐢ㄦ埛"></JSelectUser>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="鑱屽姟" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.zhiWu">
-            <JSelectPosition
-              v-model:value="formState.zhiWu"
-              placeholder="璇烽�夋嫨鑱屽姟"
-              @change="(value) => handleFormChange('zhiWu', value)"
-            ></JSelectPosition>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="瑙掕壊" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.jueSe">
-            <JSelectRole v-model:value="formState.jueSe" placeholder="璇烽�夋嫨瑙掕壊" @change="(value) => handleFormChange('jueSe', value)"></JSelectRole>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="鑷畾涔夋爲" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.zdys">
-            <JTreeSelect
-              ref="treeSelect"
-              placeholder="璇烽�夋嫨鑷畾涔夋爲"
-              v-model:value="formState.zdys"
-              dict="sys_category,name,id"
-              pidValue="0"
-              loadTriggleChange
-            >
-            </JTreeSelect>
-          </a-form-item>
-        </a-col>
-
-        <a-col :span="24">
-          <a-form-item label="鏁板��" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.yuanjia">
-            <a-input-number v-model:value="formState.yuanjia" placeholder="璇疯緭鍏ouble绫诲瀷" style="width: 100%" />
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="杈撳叆2鍒�10浣嶇殑瀛楁瘝" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.ywzz">
-            <a-input v-model:value="formState.ywzz" placeholder="璇疯緭鍏�2鍒�10浣嶇殑瀛楁瘝"></a-input>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="JTreeDict" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.zdbxl">
-            <JTreeDict
-              v-model:value="formState.zdbxl"
-              placeholder="璇烽�夋嫨JTreeDict"
-              @change="(value) => handleFormChange('zdbxl', value)"
-            ></JTreeDict>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="JCodeEditor" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.zdmrz">
-            <JCodeEditor
-              v-model:value="formState.zdmrz"
-              placeholder="璇疯緭鍏CodeEditor"
-              @change="(value) => handleFormChange('zdmrz', value)"
-            ></JCodeEditor>
-          </a-form-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-item label="鍙傛暟" :labelCol="labelCol" :wrapperCol="wrapperCol" v-bind="validateInfos.jsonParam">
-            <JAddInput v-model:value="formState.jsonParam" placeholder="鍙傛暟"></JAddInput>
-          </a-form-item>
-        </a-col>
-      </a-row>
-    </a-form>
-  </a-spin>
-</template>
-
-<script lang="ts" setup>
-  import { ref, reactive, defineExpose, nextTick } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import dayjs from 'dayjs';
-  import { TimePicker, Form } from 'ant-design-vue';
-  import JCheckbox from '/@/components/Form/src/jeecg/components/JCheckbox.vue';
-  import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
-  import JSwitch from '/@/components/Form/src/jeecg/components/JSwitch.vue';
-  import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
-  import JImageUpload from '/@/components/Form/src/jeecg/components/JImageUpload.vue';
-  import JSearchSelect from '/@/components/Form/src/jeecg/components/JSearchSelect.vue';
-  import JPopup from '/@/components/Form/src/jeecg/components/JPopup.vue';
-  import JCategorySelect from '/@/components/Form/src/jeecg/components/JCategorySelect.vue';
-  import JSelectUserByDept from '/@/components/Form/src/jeecg/components/JSelectUserByDept.vue';
-  import JEditor from '/@/components/Form/src/jeecg/components/JEditor.vue';
-  import JMarkdownEditor from '/@/components/Form/src/jeecg/components/JMarkdownEditor.vue';
-  import JTreeSelect from '/@/components/Form/src/jeecg/components/JTreeSelect.vue';
-  import JInputPop from '/@/components/Form/src/jeecg/components/JInputPop.vue';
-  import JSelectInput from '/@/components/Form/src/jeecg/components/JSelectInput.vue';
-  import JSelectPosition from '/@/components/Form/src/jeecg/components/JSelectPosition.vue';
-  import JSelectMultiple from '/@/components/Form/src/jeecg/components/JSelectMultiple.vue';
-  import JInput from '/@/components/Form/src/jeecg/components/JInput.vue';
-  import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue';
-  import JSelectUser from '/@/components/Form/src/jeecg/components/JSelectUser.vue';
-  import JAreaSelect from '/@/components/Form/src/jeecg/components/JAreaSelect.vue';
-  import JAreaLinkage from '/@/components/Form/src/jeecg/components/JAreaLinkage.vue';
-  import JSelectRole from '/@/components/Form/src/jeecg/components/JSelectRole.vue';
-  import JTreeDict from '/@/components/Form/src/jeecg/components/JTreeDict.vue';
-  import JCodeEditor from '/@/components/Form/src/jeecg/components/JCodeEditor.vue';
-  import JAddInput from '/@/components/Form/src/jeecg/components/JAddInput.vue';
-  import { getValueType } from '/@/utils';
-
-  const emit = defineEmits(['register', 'ok']);
-  //update-begin---author:wangshuai ---date:20220616  for锛氭姤琛ㄧず渚嬮獙璇佷慨鏀�--------------
-  const formState = reactive<Record<string, any>>({
-    name: '',
-    miMa: '',
-    ywzz: '',
-    xiala: '',
-    danxuan: '',
-    duoxuan: '',
-    riqi: '',
-    shijian: '',
-    wenjian: '',
-    tupian: '',
-    dhwb: '',
-    xlss: '',
-    popup: '',
-    flzds: '',
-    yhxz: '',
-    fwb: '',
-    shq: '',
-    ldzje: '',
-    ldzjs: '',
-    zddtjxl: '',
-    yongHu: '',
-    zhiWu: '',
-    jueSe: '',
-    zdys: '',
-    jssq: '',
-    zdbxl: '',
-    zdmrz: '',
-    jsonParam: '',
-    bmxz: '',
-    yuanjia: '',
-    nyrsfm: '',
-  });
-  //update-end---author:wangshuai ---date:20220616  for锛氭姤琛ㄧず渚嬮獙璇佷慨鏀�--------------
-  const { createMessage } = useMessage();
-  const formRef = ref();
-  const useForm = Form.useForm;
-  const url = reactive<any>({
-    duplicateCheck: '/sys/duplicate/check',
-    add: '/test/jeecgDemo/oneNative/add',
-    edit: '/test/jeecgDemo/oneNative/edit',
-  });
-  const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
-  const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
-  const confirmLoading = ref<boolean>(false);
-  //琛ㄥ崟楠岃瘉
-  const validatorRules = {
-    name: [{ required: false, message: '璇疯緭鍏ユ枃鏈�!' }],
-    miMa: [{ required: false, message: '璇疯緭鍏ュ瘑鐮�!' }],
-    ywzz: [{ required: false }, { pattern: '^[a-z|A-Z]{2,10}$', message: '涓嶇鍚堟牎楠岃鍒�!' }],
-    xiala: [{ required: false, message: '璇烽�夋嫨涓嬫媺缁勪欢!' }],
-    danxuan: [{ required: false, message: '璇烽�夋嫨鍗曢�夌粍浠�!' }],
-    duoxuan: [{ required: false, message: '璇烽�夋嫨澶氶�夌粍浠�!' }],
-    riqi: [{ required: false, message: '璇烽�夋嫨鏃ユ湡!' }],
-    shijian: [{ required: false, message: '璇烽�夋嫨鏃堕棿!' }],
-    wenjian: [{ required: false, message: '璇蜂笂浼犳枃浠�!' }],
-    tupian: [{ required: false, message: '璇蜂笂浼犲浘鐗�!' }],
-    dhwb: [{ required: false, message: '璇峰~鍐欏琛屾枃鏈�!' }],
-    xlss: [{ required: false, message: '璇烽�夋嫨瀛楀吀涓嬫媺鎼滅储!' }],
-    popup: [{ required: false, message: '璇烽�夋嫨popup寮圭獥!' }],
-    flzds: [{ required: false, message: '璇烽�夋嫨鍒嗙被瀛楀吀鏍�!' }],
-    yhxz: [{ required: false, message: '璇烽�夋嫨鐢ㄦ埛!' }],
-    fwb: [{ required: false, message: '璇峰~鍐欏瘜鏂囨湰!' }],
-    shq: [{ required: false, message: '璇烽�夋嫨鐪佸競绾�!' }],
-    ldzje: [{ required: false, message: '璇疯緭鍏InputPop!' }],
-    ldzjs: [{ required: false, message: '璇烽�夋嫨涓嬫媺杈撳叆妗�!' }],
-    zddtjxl: [{ required: false, message: '璇烽�夋嫨澶氶�夎緭鍏ユ!' }],
-    yongHu: [{ required: false, message: '璇烽�夋嫨鐢ㄦ埛!' }],
-    zhiWu: [{ required: false, message: '璇烽�夋嫨鑱屽姟!' }],
-    jueSe: [{ required: false, message: '璇烽�夋嫨瑙掕壊!' }],
-    zdys: [{ required: false, message: '璇烽�夋嫨鑷畾涔夋爲!' }],
-    jssq: [{ required: false, message: '璇烽�夋嫨涓夌骇鑱斿姩!' }],
-    zdbxl: [{ required: false, message: '璇烽�夋嫨JTreeDict!' }],
-    zdmrz: [{ required: false, message: '璇疯緭鍏CodeEditor!' }],
-    jsonParam: [{ required: false, message: '璇疯緭鍏ュ弬鏁�!' }],
-    bmxz: [{ required: false, message: '璇烽�夋嫨閮ㄩ棬!' }],
-    yuanjia: [{ required: false, message: '璇疯緭鍏ユ暟鍊�!' }],
-    nyrsfm: [{ required: false, message: '璇烽�夋嫨骞存湀鏃ユ椂鍒嗙!' }],
-  };
-  //update-begin---author:wangshuai ---date:20220616  for锛氭姤琛ㄧず渚嬮獙璇佷慨鏀�------------
-  const { resetFields, validate, validateInfos } = useForm(formState, validatorRules, { immediate: false });
-  //update-end---author:wangshuai ---date:20220616  for锛氭姤琛ㄧず渚嬮獙璇佷慨鏀�------------
-  const ldzjsOptions = ref([
-    { label: '鐢�', value: '1' },
-    { label: '濂�', value: '2' },
-  ]);
-
-  /**
-   * 鏂板
-   */
-  function add() {
-    edit({});
-  }
-
-  /**
-   * 缂栬緫
-   */
-  function edit(record) {
-    nextTick(() => {
-      resetFields();
-      //璧嬪��
-      Object.assign(formState, record);
-    });
-  }
-
-  /**
-   * 鎻愪氦鏁版嵁
-   */
-  async function submitForm() {
-    // 瑙﹀彂琛ㄥ崟楠岃瘉
-    //update-begin---author:wangshuai ---date:20220616  for锛氭姤琛ㄧず渚嬮獙璇佷慨鏀�------------
-    await validate();
-    confirmLoading.value = true;
-    let httpurl = '';
-    let method = '';
-    //鏃堕棿鏍煎紡鍖�
-    let model = formState;
-    if (!model.id) {
-      httpurl += url.add;
-      method = 'post';
-    } else {
-      httpurl += url.edit;
-      method = 'put';
-    }
-    //寰幆鏁版嵁濡傛灉鏄暟缁�
-    for (let data in formState) {
-      //濡傛灉璇ユ暟鎹槸鏁扮粍骞朵笖鏄瓧绗︿覆绫诲瀷
-      if (formState[data] instanceof Array) {
-        let valueType = getValueType(formRef.value.getProps, data);
-        //濡傛灉鏄瓧绗︿覆绫诲瀷鐨勯渶瑕佸彉鎴愪互閫楀彿鍒嗗壊鐨勫瓧绗︿覆
-        if (valueType === 'string') {
-          formState[data] = formState[data].join(',');
-        }
-      }
-    }
-    defHttp
-      .request(
-        {
-          url: httpurl,
-          params: model,
-          method: method,
-        },
-        { isTransformResponse: false }
-      )
-      .then((res) => {
-        if (res.success) {
-          createMessage.success(res.message);
-          emit('ok');
-        } else {
-          createMessage.warning(res.message);
-        }
-      })
-      .finally(() => {
-        confirmLoading.value = false;
-      });
-    //update-end---author:wangshuai ---date:20220616  for锛氭姤琛ㄧず渚嬮獙璇佷慨鏀�--------------
-  }
-
-  /**
-   * popup鎴愬姛鍥炶皟浜嬩欢
-   */
-  function popupHandleSuccess(values) {
-    Object.assign(formState, values);
-  }
-
-  /**
-   *  popup缁勪欢鍊兼敼鍙樹簨浠�
-   */
-  function setFieldsValue(map) {
-    Object.keys(map).map((key) => {
-      formState[key] = map[key];
-    });
-  }
-
-  /**
-   * 鍊兼敼鍙樹簨浠惰Е鍙�
-   * @param key
-   * @param value
-   */
-  function handleFormChange(key, value) {
-    formState[key] = value;
-  }
-
-  defineExpose({
-    add,
-    edit,
-    submitForm,
-  });
-</script>
-
-<style lang="less" scoped>
-  .antd-modal-form {
-    padding: 24px 24px 24px 24px;
-  }
-</style>
diff --git a/src/views/demo/jeecg/Native/one/components/OneNativeModal.vue b/src/views/demo/jeecg/Native/one/components/OneNativeModal.vue
deleted file mode 100644
index 5681df4..0000000
--- a/src/views/demo/jeecg/Native/one/components/OneNativeModal.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-<template>
-  <BasicModal
-    :title="title"
-    :width="width"
-    :visible="visible"
-    :height="600"
-    @ok="handleOk"
-    :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }"
-    @cancel="handleCancel"
-    cancelText="鍏抽棴"
-  >
-    <OneNativeForm ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></OneNativeForm>
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { ref, nextTick, defineExpose } from 'vue';
-  import OneNativeForm from './OneNativeForm.vue';
-  import { BasicModal } from '/@/components/Modal';
-  
-  const title = ref<string>('');
-  const width = ref<number>(800);
-  const visible = ref<boolean>(false);
-  const disableSubmit = ref<boolean>(false);
-  const realForm = ref();
-  const emit = defineEmits(['register', 'ok']);
-
-  function add() {
-    title.value = '鏂板';
-    visible.value = true;
-    nextTick(() => {
-      realForm.value.add();
-    });
-  }
-
-  function edit(record) {
-    title.value = disableSubmit.value ? '璇︽儏' : '缂栬緫';
-    visible.value = true;
-    nextTick(() => {
-      realForm.value.edit(record);
-    });
-  }
-
-  function handleOk() {
-    realForm.value.submitForm();
-  }
-
-  function submitCallback() {
-    handleCancel();
-    emit('ok');
-  }
-
-  function handleCancel() {
-    visible.value = false;
-  }
-
-  defineExpose({
-    add,
-    edit,
-    disableSubmit,
-  });
-</script>
-
-<style lang="less" scoped>
-</style>
diff --git a/src/views/demo/jeecg/PrintDemo.vue b/src/views/demo/jeecg/PrintDemo.vue
deleted file mode 100644
index c5ff362..0000000
--- a/src/views/demo/jeecg/PrintDemo.vue
+++ /dev/null
@@ -1,202 +0,0 @@
-<template>
-  <PageWrapper>
-    <a-card :bordered="false" class="j-print-demo">
-      <div style="text-align: right">
-        <a-button type="primary" ghost @click="onPrint">鎵撳嵃</a-button>
-      </div>
-      <section ref="print" id="printContent">
-        <div style="text-align: center">
-          <p style="font-size: 24px; font-weight: 800">鎵撳嵃娴嬭瘯琛ㄥ崟</p>
-        </div>
-        <!--绛惧瓧-->
-        <a-col :md="24" :sm="24">
-          <div class="sign" style="text-align: center; height: inherit">
-            <a-col :span="24">
-              <span>鎵撳嵃浜哄憳:</span>
-              <a-input style="width: 30%" v-model:value="model.printer" />
-              <span style="margin-left: 12.5%">鎵撳嵃鏃ユ湡:</span>
-              <a-input style="width: 30%" v-model:value="model.printTime" />
-            </a-col>
-            <a-col :span="24"> </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鍐呭:</span>
-              <a-input style="width: 80%" v-model:value="model.printContent" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑1:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑2:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑3:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑4:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑5:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑6:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑7:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑8:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑9:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑10:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑11:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑12:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑13:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col :span="24" style="margin-top: 20px">
-              <span>鎵撳嵃鐩殑14:</span>
-              <a-input style="width: 80%" v-model:value="model.printReason" />
-            </a-col>
-            <a-col style="margin-top: 20px" :span="24">
-              <span>鎵撳嵃鍥剧墖:</span>
-              <br />
-              <a-upload
-                action="/jsonplaceholder.typicode.com/posts/"
-                listType="picture-card"
-                :fileList="model.fileList"
-                @preview="handlePreview"
-                @change="handleChange"
-              >
-                <div v-if="model.fileList.length < 3">
-                  <Icon icon="ant-design:plus-outlined" />
-                  <div class="ant-upload-text">Upload</div>
-                </div>
-              </a-upload>
-              <a-modal :visible="previewVisible" :footer="null" @cancel="previewVisible = false">
-                <img alt="example" style="width: 100%" :src="previewImage" />
-              </a-modal>
-            </a-col>
-          </div>
-        </a-col>
-      </section>
-    </a-card>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { ref, reactive } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-  import Icon from '/@/components/Icon/src/Icon.vue';
-  import { printJS } from '/@/hooks/web/usePrintJS';
-
-  export default {
-    name: 'PrintDemo',
-    components: { PageWrapper, Icon },
-    props: {
-      reBizCode: {
-        type: String,
-        default: '',
-      },
-    },
-    setup() {
-      const model = reactive({
-        printer: '寮犱笁',
-        printTime: '2021-12-31 23:59:59',
-        printContent: '鎵撳嵃鍐呭锛氳繖鏄竴涓墦鍗版祴璇曪紒',
-        printReason: '鍋氫竴涓墦鍗版祴璇�',
-        fileList: [
-          {
-            uid: '-1',
-            name: 'xxx.png',
-            status: 'done',
-            url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
-          },
-          {
-            uid: '-2',
-            name: 'pic1.png',
-            status: 'done',
-            url: 'https://www.gizbot.com/img/2016/11/whatsapp-error-lead-image-08-1478607387.jpg',
-          },
-        ],
-      });
-      const previewImage = ref('');
-      const previewVisible = ref(false);
-
-      function onPrint() {
-        printJS({
-          printable: '#printContent',
-          type: 'html',
-        });
-      }
-
-      function handlePreview(file) {
-        previewImage.value = file.url || file.thumbUrl;
-        previewVisible.value = true;
-      }
-
-      function handleChange({ fileList }) {
-        model.fileList = fileList;
-      }
-
-      return {
-        model,
-        previewImage,
-        previewVisible,
-        onPrint,
-        handlePreview,
-        handleChange,
-      };
-    },
-  };
-</script>
-<style lang="less" scoped>
-  .j-print-demo .ant-card-body {
-    margin-left: 0;
-    margin-right: 0;
-    margin-bottom: 1%;
-    border: 0 solid black;
-    min-width: 800px;
-    color: #000000 !important;
-  }
-
-  .sign .ant-input {
-    font-weight: bolder;
-    text-align: center;
-    border-left-width: 0 !important;
-    border-top-width: 0 !important;
-    border-right-width: 0 !important;
-    outline: none !important;
-    box-shadow: none !important;
-  }
-
-  /* you can make up upload button and sample style by using stylesheets */
-  .ant-upload-select-picture-card i {
-    font-size: 32px;
-    color: #999;
-  }
-
-  .ant-upload-select-picture-card .ant-upload-text {
-    margin-top: 8px;
-    color: #666;
-  }
-</style>
diff --git a/src/views/demo/jeecg/TableTotal.vue b/src/views/demo/jeecg/TableTotal.vue
deleted file mode 100644
index d95e312..0000000
--- a/src/views/demo/jeecg/TableTotal.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <PageWrapper>
-    <a-card :bordered="false">
-      <BasicTable @register="registerTable" />
-    </a-card>
-  </PageWrapper>
-</template>
-
-<script lang="ts" setup>
-  import { PageWrapper } from '/@/components/Page';
-  import { BasicTable, useTable } from '/@/components/Table';
-  import { mapTableTotalSummary } from '/@/utils/common/compUtils';
-
-  const [registerTable] = useTable({
-    rowKey: 'id',
-    bordered: true,
-    canResize: false,
-    columns: [
-      { title: '濮撳悕', dataIndex: 'name' },
-      { title: '璐$尞鐐�', dataIndex: 'point' },
-      { title: '绛夌骇', dataIndex: 'level' },
-      { title: '鏇存柊鏃堕棿', dataIndex: 'updateTime' },
-    ],
-    dataSource: [
-      { id: 0, name: '寮犱笁', point: 23, level: 3, updateTime: '2019-8-14' },
-      { id: 1, name: '灏忛箍', point: 33, level: 9, updateTime: '2019-8-10' },
-      { id: 2, name: '灏忕帇', point: 6, level: 1, updateTime: '2019-8-13' },
-      { id: 3, name: '鏉庡洓', point: 53, level: 8, updateTime: '2019-8-12' },
-      { id: 4, name: '灏忕孩', point: 44, level: 5, updateTime: '2019-8-11' },
-      { id: 5, name: '鐜嬩簲', point: 97, level: 10, updateTime: '2019-8-10' },
-      { id: 6, name: '灏忔槑', point: 33, level: 2, updateTime: '2019-8-10' },
-      { id: 7, name: '灏忓紶', point: 33, level: 4, updateTime: '2019-8-10' },
-      { id: 8, name: '灏忓叚', point: 33, level: 2, updateTime: '2019-8-10' },
-      { id: 9, name: '灏忎簲', point: 33, level: 7, updateTime: '2019-8-10' },
-      { id: 10, name: '灏忚档', point: 33, level: 2, updateTime: '2019-8-10' },
-      { id: 11, name: '鏉庡崕', point: 33, level: 8, updateTime: '2019-8-10' },
-      { id: 12, name: '灏忓悍', point: 33, level: 5, updateTime: '2019-8-10' },
-    ],
-    // 鏄剧ず搴曢儴鍚堣
-    showSummary: true,
-    // 搴曢儴鍚堣璁$畻鏂规硶
-    summaryFunc: onSummary,
-  });
-
-  function onSummary(tableData: Recordable[]) {
-    // 鍙敤宸ュ叿鏂规硶鑷姩璁$畻鍚堣
-    const totals = mapTableTotalSummary(tableData, ['point', 'level']);
-    return [
-      totals,
-      {
-        _row: '骞冲潎',
-        _index: '骞冲潎',
-        // 璁$畻骞冲潎鍊�
-        point: (totals.point / tableData.length).toFixed(2),
-        level: (totals.level / tableData.length).toFixed(0),
-      },
-    ];
-  }
-</script>
diff --git a/src/views/demo/jeecg/erplist/JeecgOrderCustomerList.vue b/src/views/demo/jeecg/erplist/JeecgOrderCustomerList.vue
deleted file mode 100644
index a8bde6b..0000000
--- a/src/views/demo/jeecg/erplist/JeecgOrderCustomerList.vue
+++ /dev/null
@@ -1,165 +0,0 @@
-<template>
-  <div>
-    <!--琛ㄦ牸-->
-    <BasicTable @register="registerTable" :rowSelection="rowSelection" :searchInfo="searchInfo">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 鏂板</a-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="mdi:chevron-down"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-    <!-- 琛ㄥ崟鍖哄煙 -->
-    <JeecgOrderCustomerModal @register="registerModal" @success="handleSuccess"></JeecgOrderCustomerModal>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  //ts璇硶
-  import type { ComputedRef } from 'vue';
-  import { ref, computed, unref, watch, inject } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import JeecgOrderCustomerModal from './components/JeecgOrderCustomerModal.vue';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { useModal } from '/@/components/Modal';
-  import { customColumns } from './erplist.data';
-  import { customList, deleteCustomer, deleteBatchCustomer } from './erplist.api';
-  import { isEmpty } from '/@/utils/is';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  //鎺ユ敹涓昏〃id
-  const orderId = inject<ComputedRef<string>>(
-    'orderId',
-    computed(() => '')
-  );
-  //鎻愮ず寮圭獥
-  const $message = useMessage();
-  //寮圭獥model
-  const [registerModal, { openModal }] = useModal();
-  const searchInfo = {};
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext } = useListPage({
-    tableProps: {
-      api: getCustomList,
-      tableSetting:{
-        cacheKey:'customer'
-      },
-      columns: customColumns,
-      canResize: false,
-      useSearchForm: false,
-      actionColumn: {
-        width: 180,
-      },
-      pagination: {
-        current: 1,
-        pageSize: 5,
-        pageSizeOptions: ['5', '10', '20'],
-      },
-    },
-  });
-
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload, setSelectedRowKeys }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  watch(orderId, () => {
-    searchInfo['orderId'] = unref(orderId);
-    reload();
-    // 涓昏〃id鍙樺寲鏃讹紝娓呯┖瀛愯〃鐨勯�変腑鐘舵��
-    setSelectedRowKeys([]);
-  });
-
-  async function getCustomList(params) {
-    let { orderId } = params;
-    // 涓昏〃Id涓虹┖鏃讹紝涓嶆煡璇㈠瓙琛ㄦ暟鎹紝鐩存帴杩斿洖绌烘暟缁�
-    if (orderId == null || isEmpty(orderId)) {
-      return [];
-    }
-    return await customList(params);
-  }
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleCreate() {
-    console.log('orderId=====銆�', orderId);
-    if (isEmpty(unref(orderId))) {
-      $message.createMessage.warning('璇烽�夋嫨涓�涓鍗曚俊鎭�');
-      return;
-    }
-    openModal(true, {
-      isUpdate: false,
-      showFooter: true,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  async function handleEdit(record: Recordable) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-      showFooter: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteCustomer({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await deleteBatchCustomer({ ids: selectedRowKeys.value }, () => {
-      selectedRowKeys.value = [];
-      reload();
-    });
-  }
-
-  /**
-   * 鎴愬姛鍥炶皟
-   */
-  function handleSuccess() {
-    reload();
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/jeecg/erplist/JeecgOrderTicketList.vue b/src/views/demo/jeecg/erplist/JeecgOrderTicketList.vue
deleted file mode 100644
index ebb3246..0000000
--- a/src/views/demo/jeecg/erplist/JeecgOrderTicketList.vue
+++ /dev/null
@@ -1,164 +0,0 @@
-<template>
-  <div>
-    <!--琛ㄦ牸-->
-    <BasicTable @register="registerTable" :rowSelection="rowSelection" :searchInfo="searchInfo">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 鏂板</a-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="mdi:chevron-down"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-    <!-- 琛ㄥ崟鍖哄煙 -->
-    <JeecgOrderTicketModal @register="registerModal" @success="handleSuccess"></JeecgOrderTicketModal>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  //ts璇硶
-  import type { ComputedRef } from 'vue';
-  import { ref, computed, unref, watch, inject } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import JeecgOrderTicketModal from './components/JeecgOrderTicketModal.vue';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { useModal } from '/@/components/Modal';
-  import { ticketColumns } from './erplist.data';
-  import { ticketList, deleteTicket, deleteBatchTicket } from './erplist.api';
-  import { isEmpty } from '/@/utils/is';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  //鎺ユ敹涓昏〃id
-  const orderId = inject<ComputedRef<string>>(
-    'orderId',
-    computed(() => '')
-  );
-  //鎻愮ず寮圭獥
-  const $message = useMessage();
-  //寮圭獥model
-  const [registerModal, { openModal }] = useModal();
-  const searchInfo = {};
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext } = useListPage({
-    tableProps: {
-      api: getTicketList,
-      tableSetting:{
-        cacheKey:'ticket'
-      },
-      columns: ticketColumns,
-      canResize: false,
-      useSearchForm: false,
-      actionColumn: {
-        width: 180,
-      },
-      pagination: {
-        current: 1,
-        pageSize: 5,
-        pageSizeOptions: ['5', '10', '20'],
-      },
-    },
-  });
-
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload, setSelectedRowKeys }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  watch(orderId, () => {
-    searchInfo['orderId'] = unref(orderId);
-    reload();
-    // 涓昏〃id鍙樺寲鏃讹紝娓呯┖瀛愯〃鐨勯�変腑鐘舵��
-    setSelectedRowKeys([]);
-  });
-
-  async function getTicketList(params) {
-    let { orderId } = params;
-    // 涓昏〃Id涓虹┖鏃讹紝涓嶆煡璇㈠瓙琛ㄦ暟鎹紝鐩存帴杩斿洖绌烘暟缁�
-    if (orderId == null || isEmpty(orderId)) {
-      return [];
-    }
-    return await ticketList(params);
-  }
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleCreate() {
-    if (isEmpty(unref(orderId))) {
-      $message.createMessage.warning('璇烽�夋嫨涓�涓鍗曚俊鎭�');
-      return;
-    }
-    openModal(true, {
-      isUpdate: false,
-      showFooter: true,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  async function handleEdit(record: Recordable) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-      showFooter: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteTicket({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await deleteBatchTicket({ ids: selectedRowKeys.value }, () => {
-      selectedRowKeys.value = [];
-      reload();
-    });
-  }
-
-  /**
-   * 鎴愬姛鍥炶皟
-   */
-  function handleSuccess() {
-    reload();
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/jeecg/erplist/components/JeecgOrderCustomerModal.vue b/src/views/demo/jeecg/erplist/components/JeecgOrderCustomerModal.vue
deleted file mode 100644
index 3590ea6..0000000
--- a/src/views/demo/jeecg/erplist/components/JeecgOrderCustomerModal.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" :width="700">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref, inject } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { customerFormSchema } from '../erplist.data';
-  import { saveOrUpdateCustomer } from '../erplist.api';
-  //鎺ユ敹涓昏〃id
-  const orderId = inject('orderId') || '';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    labelWidth: 150,
-    schemas: customerFormSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-  //璁剧疆鏍囬
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      setModalProps({ confirmLoading: true });
-      if (unref(orderId)) {
-        values.orderId = unref(orderId);
-      }
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateCustomer(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/demo/jeecg/erplist/components/JeecgOrderModal.vue b/src/views/demo/jeecg/erplist/components/JeecgOrderModal.vue
deleted file mode 100644
index f5511cf..0000000
--- a/src/views/demo/jeecg/erplist/components/JeecgOrderModal.vue
+++ /dev/null
@@ -1,52 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" :width="700">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from '../erplist.data';
-  import { saveOrUpdate } from '../erplist.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    labelWidth: 150,
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-  //璁剧疆鏍囬
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdate(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/demo/jeecg/erplist/components/JeecgOrderTicketModal.vue b/src/views/demo/jeecg/erplist/components/JeecgOrderTicketModal.vue
deleted file mode 100644
index 3890222..0000000
--- a/src/views/demo/jeecg/erplist/components/JeecgOrderTicketModal.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" :width="500" :minHeight="20" :maxHeight="20">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref, inject } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { ticketFormSchema } from '../erplist.data';
-  import { saveOrUpdateTicket } from '../erplist.api';
-  //鎺ユ敹涓昏〃id
-  const orderId = inject('orderId');
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    labelWidth: 150,
-    schemas: ticketFormSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-  //璁剧疆鏍囬
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      setModalProps({ confirmLoading: true });
-      if (unref(orderId)) {
-        values.orderId = unref(orderId);
-      }
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateTicket(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/demo/jeecg/erplist/erplist.api.ts b/src/views/demo/jeecg/erplist/erplist.api.ts
deleted file mode 100644
index ca9509d..0000000
--- a/src/views/demo/jeecg/erplist/erplist.api.ts
+++ /dev/null
@@ -1,139 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/test/order/orderList',
-  save = '/test/order/add',
-  edit = '/test/order/edit',
-  deleteOne = '/test/order/delete',
-  deleteBatch = '/test/order/deleteBatch',
-  customList = '/test/order/listOrderCustomerByMainId',
-  saveCustomer = '/test/order/addCustomer',
-  editCustomer = '/test/order/editCustomer',
-  deleteCustomer = '/test/order/deleteCustomer',
-  deleteBatchCustomer = '/test/order/deleteBatchCustomer',
-  ticketList = '/test/order/listOrderTicketByMainId',
-  saveTicket = '/test/order/addTicket',
-  editTicket = '/test/order/editTicket',
-  deleteTicket = '/test/order/deleteTicket',
-  deleteBatchTicket = '/test/order/deleteBatchTicket',
-}
-
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-
-/**
- * 鍒犻櫎
- */
-export const deleteOne = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteOne, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDelete = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const customList = (params) => defHttp.get({ url: Api.customList, params });
-
-/**
- * 鍒犻櫎
- */
-export const deleteCustomer = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteCustomer, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const deleteBatchCustomer = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatchCustomer, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdateCustomer = (params, isUpdate) => {
-  let url = isUpdate ? Api.editCustomer : Api.saveCustomer;
-  return defHttp.post({ url: url, params });
-};
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const ticketList = (params) => defHttp.get({ url: Api.ticketList, params });
-
-/**
- * 鍒犻櫎
- */
-export const deleteTicket = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteTicket, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const deleteBatchTicket = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatchTicket, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdateTicket = (params, isUpdate) => {
-  let url = isUpdate ? Api.editTicket : Api.saveTicket;
-  return defHttp.post({ url: url, params });
-};
diff --git a/src/views/demo/jeecg/erplist/erplist.data.ts b/src/views/demo/jeecg/erplist/erplist.data.ts
deleted file mode 100644
index eb7a756..0000000
--- a/src/views/demo/jeecg/erplist/erplist.data.ts
+++ /dev/null
@@ -1,238 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-import { render } from '/@/utils/common/renderUtils';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '璁㈠崟鍙�',
-    dataIndex: 'orderCode',
-    width: 260,
-  },
-  {
-    title: '璁㈠崟绫诲瀷',
-    dataIndex: 'ctype',
-    width: 160,
-    customRender: ({ text }) => {
-      return text == '1' ? '鍥藉唴璁㈠崟' : text == '2' ? '鍥介檯璁㈠崟' : '';
-    },
-  },
-  {
-    title: '璁㈠崟鏃ユ湡',
-    dataIndex: 'orderDate',
-    width: 300,
-  },
-  {
-    title: '璁㈠崟閲戦',
-    width: 200,
-    dataIndex: 'orderMoney',
-  },
-  {
-    title: '璁㈠崟澶囨敞',
-    width: 200,
-    dataIndex: 'content',
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    label: '璁㈠崟鍙�',
-    field: 'orderCode',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '璁㈠崟绫诲瀷',
-    field: 'ctype',
-    component: 'Select',
-    componentProps: {
-      options: [
-        {
-          label: '鍥藉唴璁㈠崟',
-          value: '1',
-          key: '1',
-        },
-        {
-          label: '鍥介檯璁㈠崟',
-          value: '2',
-          key: '2',
-        },
-      ],
-    },
-    colProps: { span: 6 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '璁㈠崟鍙�',
-    field: 'orderCode',
-    component: 'Input',
-    required: true,
-  },
-  {
-    label: '璁㈠崟绫诲瀷',
-    field: 'ctype',
-    component: 'Select',
-    componentProps: {
-      options: [
-        {
-          label: '鍥藉唴璁㈠崟',
-          value: '1',
-          key: '1',
-        },
-        {
-          label: '鍥介檯璁㈠崟',
-          value: '2',
-          key: '2',
-        },
-      ],
-    },
-  },
-  {
-    label: '璁㈠崟鏃ユ湡',
-    field: 'orderDate',
-    component: 'DatePicker',
-    componentProps: {
-      valueFormat: 'YYYY-MM-DD hh:mm:ss',
-    },
-  },
-  {
-    label: '璁㈠崟閲戦',
-    field: 'orderMoney',
-    component: 'InputNumber',
-  },
-  {
-    label: '璁㈠崟澶囨敞',
-    field: 'content',
-    component: 'Input',
-  },
-];
-
-export const customColumns: BasicColumn[] = [
-  {
-    title: '瀹㈡埛鍚�',
-    dataIndex: 'name',
-    width: 260,
-  },
-  {
-    title: '鎬у埆',
-    dataIndex: 'sex',
-    width: 100,
-    customRender: ({ text }) => {
-      return render.renderDict(text, 'sex');
-    },
-  },
-  {
-    title: '韬唤璇佸彿',
-    dataIndex: 'idcard',
-    width: 300,
-  },
-  {
-    title: '鐢佃瘽',
-    width: 200,
-    dataIndex: 'telphone',
-  },
-];
-
-export const customerFormSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '瀹㈡埛濮撳悕',
-    field: 'name',
-    component: 'Input',
-    required: true,
-  },
-  {
-    label: '鎬у埆',
-    field: 'sex',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'sex',
-      placeholder: '璇烽�夋嫨鎬у埆',
-    },
-  },
-  {
-    label: '韬唤璇佸彿鐮�',
-    field: 'idcard',
-    component: 'Input',
-  },
-  {
-    label: '韬唤璇佹壂鎻忎欢',
-    field: 'idcardPic',
-    component: 'JImageUpload',
-    componentProps: {
-      fileMax: 2,
-    },
-  },
-  {
-    label: '鑱旂郴鏂瑰紡',
-    field: 'telphone',
-    component: 'Input',
-    rules: [{ required: false, pattern: /^1[3456789]\d{9}$/, message: '鎵嬫満鍙风爜鏍煎紡鏈夎' }],
-  },
-  {
-    label: 'orderId',
-    field: 'orderId',
-    component: 'Input',
-    show: false,
-  },
-];
-
-export const ticketColumns: BasicColumn[] = [
-  {
-    title: '鑸彮鍙�',
-    dataIndex: 'ticketCode',
-  },
-  {
-    title: '鑸彮鏃堕棿',
-    dataIndex: 'tickectDate',
-  },
-  {
-    title: '鍒涘缓浜�',
-    dataIndex: 'createBy',
-  },
-  {
-    title: '鍒涘缓鏃堕棿',
-    dataIndex: 'createTime',
-  },
-];
-
-export const ticketFormSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '鑸彮鍙�',
-    field: 'ticketCode',
-    component: 'Input',
-    required: true,
-  },
-  {
-    label: '鑸彮鏃堕棿',
-    field: 'tickectDate',
-    component: 'DatePicker',
-    componentProps: {
-      valueFormat: 'YYYY-MM-DD',
-    },
-  },
-  {
-    label: 'orderId',
-    field: 'orderId',
-    component: 'Input',
-    show: false,
-  },
-];
diff --git a/src/views/demo/jeecg/erplist/index.vue b/src/views/demo/jeecg/erplist/index.vue
deleted file mode 100644
index 29db61d..0000000
--- a/src/views/demo/jeecg/erplist/index.vue
+++ /dev/null
@@ -1,163 +0,0 @@
-<template>
-  <div>
-    <!--涓昏〃琛ㄦ牸-->
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 鏂板</a-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="mdi:chevron-down"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-    <!--瀛愯〃琛ㄦ牸tab-->
-    <a-tabs defaultActiveKey="1" style="margin: 10px">
-      <a-tab-pane tab="瀹㈡埛淇℃伅" key="1">
-        <JeecgOrderCustomerList />
-      </a-tab-pane>
-      <a-tab-pane tab="鏈虹エ淇℃伅" key="2" forceRender>
-        <JeecgOrderTicketList />
-      </a-tab-pane>
-    </a-tabs>
-  </div>
-  <!-- 琛ㄥ崟鍖哄煙 -->
-  <JeecgOrderModal @register="registerModal" @success="handleSuccess"></JeecgOrderModal>
-</template>
-
-<script lang="ts" name="tab-list" setup>
-  //ts璇硶
-  import { ref, computed, unref, watch, provide } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { useModal } from '/@/components/Modal';
-  import JeecgOrderModal from './components/JeecgOrderModal.vue';
-  import JeecgOrderCustomerList from './JeecgOrderCustomerList.vue';
-  import JeecgOrderTicketList from './JeecgOrderTicketList.vue';
-  import { columns, searchFormSchema } from './erplist.data';
-  import { list, deleteOne, batchDelete } from './erplist.api';
-
-  //寮圭獥model
-  const [registerModal, { openModal }] = useModal();
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { tableContext } = useListPage({
-    tableProps: {
-      api: list,
-      tableSetting:{
-        cacheKey:'erp_main'
-      },
-      columns: columns,
-      canResize: false,
-      rowSelection: { type: 'radio' },
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-      actionColumn: {
-        width: 180,
-      },
-      pagination: {
-        current: 1,
-        pageSize: 5,
-        pageSizeOptions: ['5', '10', '20'],
-      },
-    },
-  });
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload, updateTableDataRecord }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  const orderId = computed(() => (unref(selectedRowKeys).length > 0 ? unref(selectedRowKeys)[0] : ''));
-  //涓嬪彂 orderId,瀛愮粍浠舵帴鏀�
-  provide('orderId', orderId);
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleCreate() {
-    openModal(true, {
-      isUpdate: false,
-      showFooter: true,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  async function handleEdit(record: Recordable) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-      showFooter: true,
-    });
-  }
-
-  /**
-   * 璇︽儏
-   */
-  async function handleDetail(record: Recordable) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-      showFooter: false,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteOne({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDelete({ ids: selectedRowKeys.value }, () => {
-      selectedRowKeys.value = [];
-      reload();
-    });
-  }
-
-  /**
-   * 鎴愬姛鍥炶皟
-   */
-  function handleSuccess() {
-    reload();
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/jeecg/index.vue b/src/views/demo/jeecg/index.vue
deleted file mode 100644
index 4f10c7f..0000000
--- a/src/views/demo/jeecg/index.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-<template>
-  <div class="p-4">
-    <a-card :bordered="false" style="height: 100%">
-      <a-tabs v-model:activeKey="activeKey" @change="tabChange">
-        <a-tab-pane key="JeecgComponents" tab="涓嬫媺閫夋嫨缁勪欢"></a-tab-pane>
-        <a-tab-pane key="JCodeEditDemo" tab="浠g爜缂栬緫鍣�" force-render></a-tab-pane>
-        <a-tab-pane key="JEditorDemo" tab="瀵屾枃鏈�&MakeDown"></a-tab-pane>
-        <a-tab-pane key="ImgDragSort" tab="鍥剧墖鎷栨嫿"></a-tab-pane>
-        <a-tab-pane key="ImgTurnPage" tab="鍥剧墖缈婚〉"></a-tab-pane>
-        <a-tab-pane key="JeecgPdfView" tab="PDF棰勮"></a-tab-pane>
-        <a-tab-pane key="JUploadDemo" tab="鏂囦欢涓婁紶"></a-tab-pane>
-      </a-tabs>
-      <component :is="currentComponent"></component>
-    </a-card>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, computed } from 'vue';
-  import JeecgComponents from './JeecgComponents.vue';
-  import JEditorDemo from './JEditorDemo.vue';
-  import JCodeEditDemo from './JCodeEditDemo.vue';
-  import ImgDragSort from './ImgDragSort.vue';
-  import ImgTurnPage from './ImgTurnPage.vue';
-  import JeecgPdfView from './JeecgPdfView.vue';
-  import JUploadDemo from './JUploadDemo.vue';
-  export default defineComponent({
-    name: 'comp-jeecg-basic',
-    setup() {
-      const activeKey = ref('JeecgComponents');
-      const currentComponent = computed(() => {
-        const componentType = {
-          JeecgComponents: JeecgComponents,
-          JEditorDemo: JEditorDemo,
-          JCodeEditDemo: JCodeEditDemo,
-          ImgDragSort: ImgDragSort,
-          ImgTurnPage: ImgTurnPage,
-          JeecgPdfView: JeecgPdfView,
-          JUploadDemo: JUploadDemo,
-        };
-        return componentType[activeKey.value];
-      });
-
-      //浣跨敤component鍔ㄦ�佸垏鎹ab
-      function tabChange(key) {
-        activeKey.value = key;
-      }
-      return {
-        activeKey,
-        currentComponent,
-        tabChange,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/jeecg/jeecgComponents.data.ts b/src/views/demo/jeecg/jeecgComponents.data.ts
deleted file mode 100644
index f8e0814..0000000
--- a/src/views/demo/jeecg/jeecgComponents.data.ts
+++ /dev/null
@@ -1,692 +0,0 @@
-import { FormSchema, JCronValidator } from '/@/components/Form';
-import { usePermission } from '/@/hooks/web/usePermission';
-
-const { isDisabledAuth } = usePermission();
-export const schemas: FormSchema[] = [
-  {
-    field: 'jdst',
-    component: 'JDictSelectTag',
-    label: '鎬у埆涓嬫媺',
-    helpMessage: ['component妯″紡'],
-    componentProps: {
-      dictCode: 'sex',
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'jdst',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'jdst1',
-    component: 'JDictSelectTag',
-    label: '鎬у埆閫夋嫨',
-    helpMessage: ['component妯″紡'],
-    componentProps: {
-      dictCode: 'sex',
-      type: 'radioButton',
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'jdst1',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'jdst2',
-    component: 'JDictSelectTag',
-    label: '瀛楀吀琛ㄤ笅鎷�',
-    helpMessage: ['component妯″紡'],
-    componentProps: {
-      dictCode: 'sys_user,realname,id',
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'jdst2',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'jdst3',
-    component: 'JDictSelectTag',
-    label: '瀛楀吀琛ㄤ笅鎷�(甯︽潯浠�)',
-    helpMessage: ['component妯″紡'],
-    componentProps: {
-      dictCode: "sys_user,realname,id,username!='admin' order by create_time",
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'jdst3',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'jsst',
-    component: 'JSearchSelect',
-    label: '瀛楀吀鎼滅储(鍚屾)',
-    colProps: { span: 12 },
-    componentProps: {
-      //dict: "sys_depart,depart_name,id",
-      dictOptions: [
-        {
-          text: '閫夐」涓�',
-          value: '1',
-        },
-        {
-          text: '閫夐」浜�',
-          value: '2',
-        },
-        {
-          text: '閫夐」涓�',
-          value: '3',
-        },
-      ],
-    },
-  },
-  {
-    field: 'jsst',
-    component: 'JEllipsis',
-    label: '閫夋嫨鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'jsst2',
-    component: 'JSearchSelect',
-    label: '瀛楀吀鎼滅储(寮傛)',
-    colProps: { span: 12 },
-    componentProps: {
-      dict: 'sys_depart,depart_name,id',
-      pageSize: 6,
-      async: true,
-    },
-  },
-  {
-    field: 'jsst2',
-    component: 'JEllipsis',
-    label: '閫夋嫨鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'xldx',
-    component: 'JDictSelectTag',
-    label: '瀛楀吀涓嬫媺澶氶��',
-    colProps: { span: 12 },
-    componentProps: {
-      dictCode: 'sex',
-      mode: 'multiple',
-    },
-  },
-  {
-    field: 'xldx',
-    component: 'JEllipsis',
-    label: '閫夋嫨鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'xldx2',
-    component: 'JSelectMultiple',
-    label: '瀛楀吀涓嬫媺澶氶��2',
-    colProps: { span: 12 },
-    componentProps: {
-      dictCode: 'sex',
-    },
-  },
-  {
-    field: 'xldx2',
-    component: 'JEllipsis',
-    label: '閫夋嫨鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'dxxlk',
-    component: 'JDictSelectTag',
-    label: '瀛楀吀涓嬫媺鍗曢��',
-    colProps: { span: 12 },
-    componentProps: {
-      dictCode: 'sex',
-    },
-  },
-  {
-    field: 'dxxlk',
-    component: 'JEllipsis',
-    label: '閫夋嫨鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    label: '鍙緭鍏ヤ笅鎷�',
-    field: 'selectInput',
-    component: 'JSelectInput',
-    componentProps: {
-      options: [
-        { label: '閫夐」涓�', value: '1' },
-        { label: '閫夐」浜�', value: '2' },
-        { label: '閫夐」涓�', value: '3' },
-      ],
-    },
-    colProps: { span: 12 },
-  },
-  {
-    field: 'selectInput',
-    component: 'JEllipsis',
-    label: '閫夋嫨鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'depart3',
-    component: 'JSelectDept',
-    label: '閫夋嫨閮ㄩ棬鈥旇嚜瀹氫箟鍊�',
-    helpMessage: ['component妯″紡'],
-    componentProps: { showButton: false, rowKey: 'orgCode', primaryKey: 'orgCode' },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'depart3',
-    component: 'JEllipsis',
-    label: '閫変腑閮ㄩ棬',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'depart2',
-    component: 'JSelectDept',
-    label: '閫夋嫨閮ㄩ棬',
-    helpMessage: ['component妯″紡'],
-    componentProps: { showButton: false },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'depart2',
-    component: 'JEllipsis',
-    label: '閫変腑閮ㄩ棬',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'user2',
-    component: 'JSelectUser',
-    label: '鐢ㄦ埛閫夋嫨缁勪欢',
-    helpMessage: ['component妯″紡'],
-    componentProps: {
-      labelKey: 'realname',
-      rowKey: 'id',
-      showSelectTable: false,
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'user2',
-    component: 'JEllipsis',
-    label: '閫変腑鐢ㄦ埛',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'user3',
-    component: 'JSelectUserByDept',
-    label: '閮ㄩ棬閫夋嫨鐢ㄦ埛',
-    helpMessage: ['component妯″紡'],
-    componentProps: {
-      labelKey: 'realname',
-      rowKey: 'username',
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'user3',
-    component: 'JEllipsis',
-    label: '閫変腑鐢ㄦ埛',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'role2',
-    component: 'JSelectRole',
-    label: '瑙掕壊閫夋嫨缁勪欢',
-    helpMessage: ['component妯″紡'],
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'role2',
-    component: 'JEllipsis',
-    label: '閫変腑瑙掕壊',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'position2',
-    component: 'JSelectPosition',
-    label: '鑱屽姟閫夋嫨缁勪欢',
-    helpMessage: ['component妯″紡'],
-    colProps: { span: 12 },
-    componentProps: { async: true, showSelectTable: true },
-  },
-  {
-    field: 'position2',
-    component: 'JEllipsis',
-    label: '閫変腑鑱屽姟',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'checkbox1',
-    component: 'JCheckbox',
-    label: 'JCheckbox缁勪欢1',
-    helpMessage: ['component妯″紡'],
-    defaultValue: '1,2',
-    componentProps: {
-      options: [
-        { label: '鐢�', value: '1' },
-        { label: '濂�', value: '2' },
-      ],
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'checkbox1',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'checkbox2',
-    component: 'Input',
-    label: 'JCheckbox缁勪欢2',
-    defaultValue: '1',
-    helpMessage: ['鎻掓Ы妯″紡'],
-    slot: 'JCheckbox',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'checkbox2',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'data1',
-    label: '鏃ユ湡閫夋嫨',
-    component: 'DatePicker',
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'data1',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'data2',
-    label: '骞翠唤鑼冨洿閫夋嫨',
-    component: 'RangePicker',
-    componentProps: {
-      picker: 'year',
-      valueFormat: 'YYYY',
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'data2',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'hk',
-    component: 'Input',
-    label: '婊戝潡楠岃瘉鐮�',
-    helpMessage: ['鎻掓Ы妯″紡'],
-    slot: 'dargVerify',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'hk',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'JTreeDict',
-    component: 'JTreeDict',
-    label: '鏍戝瓧鍏�',
-    helpMessage: ['component妯″紡'],
-    colProps: { span: 12 },
-  },
-  {
-    field: 'JTreeDict',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'ts',
-    component: 'JTreeSelect',
-    label: '涓嬫媺鏍戦�夋嫨',
-    helpMessage: ['component妯″紡'],
-    componentProps: {
-      dict: 'sys_permission,name,id',
-      pidField: 'parent_id',
-      hasChildField: 'is_leaf',
-      converIsLeafVal: 0,
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'ts',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'ts1',
-    component: 'JTreeSelect',
-    label: '涓嬫媺鏍戝閫�',
-    helpMessage: ['component妯″紡'],
-    componentProps: {
-      dict: 'sys_permission,name,id',
-      pidField: 'parent_id',
-      hasChildField: 'is_leaf',
-      converIsLeafVal: 0,
-      multiple: true,
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'ts1',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'category',
-    component: 'JCategorySelect',
-    label: '鍒嗙被瀛楀吀鏍�',
-    helpMessage: ['component妯″紡'],
-    defaultValue: '',
-    componentProps: {
-      pcode: 'B01',
-      multiple: true,
-    },
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'category',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'JEasyCron',
-    component: 'JEasyCron',
-    label: 'JEasyCron',
-    helpMessage: ['component妯″紡'],
-    colProps: { span: 12 },
-    defaultValue: '* * * * * ? *',
-    rules: [{ validator: JCronValidator }],
-  },
-  {
-    field: 'JEasyCron',
-    component: 'JEllipsis',
-    label: '閫夋嫨鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'JInput',
-    component: 'JInput',
-    label: '鐗规畩鏌ヨ缁勪欢',
-    helpMessage: ['鎻掓Ы妯″紡'],
-    slot: 'JInput',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'jinputtype',
-    component: 'Select',
-    label: '鏌ヨ绫诲瀷',
-    componentProps: {
-      options: [
-        { value: 'like', label: '妯$硦锛坙ike锛�' },
-        { value: 'ne', label: '涓嶇瓑浜庯紙ne锛�' },
-        { value: 'ge', label: '澶т簬绛変簬锛坓e锛�' },
-        { value: 'le', label: '灏忎簬绛変簬锛坙e)' },
-      ],
-    },
-    colProps: {
-      span: 6,
-    },
-  },
-  {
-    field: 'JInput',
-    component: 'JEllipsis',
-    label: '杈撳叆鍊�',
-    colProps: { span: 6 },
-  },
-  {
-    field: 'field1',
-    component: 'Select',
-    label: '鐪佸競鍖洪�夋嫨',
-    helpMessage: ['鎻掓Ы妯″紡'],
-    slot: 'jAreaLinkage',
-    colProps: {
-      span: 12,
-    },
-    defaultValue: ['130000', '130200'],
-  },
-  {
-    field: 'field1',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'field0',
-    component: 'Select',
-    label: '绂佺敤缁勪欢(鏂瑰紡涓�)',
-    helpMessage: ['鎻掓Ы妯″紡'],
-    slot: 'jAreaLinkage1',
-    colProps: {
-      span: 12,
-    },
-    defaultValue: ['130000', '130200'],
-  },
-
-  {
-    field: 'field0',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'field2',
-    component: 'JAreaLinkage',
-    label: '绂佺敤缁勪欢(鏂瑰紡浜�)',
-    helpMessage: ['component妯″紡'],
-    colProps: {
-      span: 12,
-    },
-    dynamicDisabled: ({ values }) => {
-      console.log(values);
-      return isDisabledAuth(['demo.dbarray']);
-    },
-    defaultValue: ['140000', '140300', '140302'],
-  },
-  {
-    field: 'field2',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'pca1',
-    component: 'JAreaSelect',
-    label: '鐪佸競鍖虹骇鑱�',
-    helpMessage: ['component妯″紡'],
-    defaultValue: '140302',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'pca1',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'pop1',
-    component: 'Input',
-    label: 'JPopup绀轰緥',
-    helpMessage: ['鎻掓Ы妯″紡'],
-    slot: 'JPopup',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'pop1',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: {
-      span: 12,
-    },
-  },
-  {
-    field: 'JInputPop',
-    component: 'JInputPop',
-    label: 'JInputPop',
-    helpMessage: ['component妯″紡'],
-    colProps: { span: 12 },
-  },
-  {
-    field: 'JInputPop',
-    component: 'JEllipsis',
-    label: '杈撳叆鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'JTreeDictAsync',
-    component: 'JTreeDict',
-    label: '寮傛JTreeDict',
-    helpMessage: ['component妯″紡'],
-    colProps: { span: 12 },
-    componentProps: { async: true },
-  },
-  {
-    field: 'JTreeDictAsync',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'JSwitch',
-    component: 'JSwitch',
-    label: 'JSwitch',
-    helpMessage: ['component妯″紡'],
-    colProps: { span: 12 },
-  },
-  {
-    field: 'JSwitch',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'JSwitchSelect',
-    component: 'JSwitch',
-    label: 'JSwitchSelect',
-    helpMessage: ['component妯″紡'],
-    colProps: { span: 12 },
-    componentProps: { query: true },
-  },
-  {
-    field: 'JSwitchSelect',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  
-  {
-    field: 'userSelect2',
-    component: 'UserSelect',
-    label: '楂樼骇鐢ㄦ埛閫夋嫨',
-    helpMessage: ['component妯″紡'],
-    colProps: { span: 12 },
-  },
-  {
-    field: 'userSelect2',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-  
-  {
-    field: 'superQuery',
-    component: 'Input',
-    label: '楂樼骇鏌ヨ',
-    helpMessage: ['鎻掓Ы妯″紡'],
-    slot: 'superQuery',
-    colProps: { span: 12 },
-  },
-  {
-    field: 'superQuery',
-    component: 'JEllipsis',
-    label: '閫変腑鍊�',
-    colProps: { span: 12 },
-  },
-];
diff --git a/src/views/demo/jeecg/model/JeecgOrderModal.vue b/src/views/demo/jeecg/model/JeecgOrderModal.vue
deleted file mode 100644
index 760242b..0000000
--- a/src/views/demo/jeecg/model/JeecgOrderModal.vue
+++ /dev/null
@@ -1,94 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit" width="700px">
-    <BasicForm @register="registerForm" />
-    <!--TODO 瀛愯〃Tab鏁版嵁-->
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { defHttp } from '/@/utils/http/axios';
-  // Emits澹版槑
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    labelWidth: 150,
-    schemas: [
-      {
-        field: 'orderCode',
-        label: '璁㈠崟鍙�',
-        component: 'Input',
-        required: true,
-      },
-      {
-        field: 'ctype',
-        label: '璁㈠崟绫诲瀷',
-        component: 'Select',
-        componentProps: {
-          options: [
-            { label: '鍥藉唴璁㈠崟', value: '1' },
-            { label: '鍥介檯璁㈠崟', value: '2' },
-          ],
-        },
-      },
-      {
-        field: 'orderDate',
-        label: '璁㈠崟鏃ユ湡',
-        component: 'DatePicker',
-        componentProps: {
-          valueFormat: 'YYYY-MM-DD hh:mm:ss',
-        },
-      },
-      {
-        field: 'orderMoney',
-        label: '璁㈠崟閲戦',
-        component: 'InputNumber',
-      },
-      {
-        field: 'content',
-        label: '璁㈠崟澶囨敞',
-        component: 'Input',
-      },
-      {
-        field: 'id',
-        label: 'id',
-        component: 'Input',
-        show: false,
-      },
-    ],
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-  //璁剧疆鏍囬
-  const title = computed(() => (!unref(isUpdate) ? '鏂板璁㈠崟' : '缂栬緫璁㈠崟'));
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit(v) {
-    try {
-      let values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      let url = unref(isUpdate) ? '/test/order/edit' : '/test/order/add';
-      defHttp.post({ url: url, params: values });
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/demo/level/Menu111.vue b/src/views/demo/level/Menu111.vue
deleted file mode 100644
index 23305d3..0000000
--- a/src/views/demo/level/Menu111.vue
+++ /dev/null
@@ -1,12 +0,0 @@
-<template>
-  <div class="p-5">
-    澶氬眰绾х紦瀛�-椤甸潰1-1-1
-    <br />
-    <Input />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Input } from 'ant-design-vue';
-  export default defineComponent({ name: 'Menu111Demo', components: { Input } });
-</script>
diff --git a/src/views/demo/level/Menu12.vue b/src/views/demo/level/Menu12.vue
deleted file mode 100644
index 2f69682..0000000
--- a/src/views/demo/level/Menu12.vue
+++ /dev/null
@@ -1,12 +0,0 @@
-<template>
-  <div class="p-5">
-    澶氬眰绾х紦瀛�-椤甸潰1-2
-    <br />
-    <Input />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Input } from 'ant-design-vue';
-  export default defineComponent({ name: 'Menu12Demo', components: { Input } });
-</script>
diff --git a/src/views/demo/level/Menu2.vue b/src/views/demo/level/Menu2.vue
deleted file mode 100644
index 527ff2f..0000000
--- a/src/views/demo/level/Menu2.vue
+++ /dev/null
@@ -1,15 +0,0 @@
-<template>
-  <div class="p-5">
-    澶氬眰绾х紦瀛�-椤甸潰2
-    <br />
-    <Input />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Input } from 'ant-design-vue';
-  export default defineComponent({
-    name: 'Menu2Demo',
-    components: { Input },
-  });
-</script>
diff --git a/src/views/demo/main-out/index.vue b/src/views/demo/main-out/index.vue
deleted file mode 100644
index 7125067..0000000
--- a/src/views/demo/main-out/index.vue
+++ /dev/null
@@ -1,6 +0,0 @@
-<template>
-  <div class="fixed h-full w-full flex flex-col justify-center items-center text-4xl">
-    <div class=""> 浣嶄簬涓绘鏋跺鐨勯〉闈� </div>
-    <a-button @click="$router.go(-1)" class="mt-10" type="primary">Back</a-button>
-  </div>
-</template>
diff --git a/src/views/demo/page/account/center/Application.vue b/src/views/demo/page/account/center/Application.vue
deleted file mode 100644
index ae0e281..0000000
--- a/src/views/demo/page/account/center/Application.vue
+++ /dev/null
@@ -1,88 +0,0 @@
-<template>
-  <List :class="prefixCls">
-    <a-row :gutter="16">
-      <template v-for="item in list" :key="item.title">
-        <a-col :span="6">
-          <ListItem>
-            <Card :hoverable="true" :class="`${prefixCls}__card`">
-              <div :class="`${prefixCls}__card-title`">
-                <Icon class="icon" v-if="item.icon" :icon="item.icon" :color="item.color" />
-                {{ item.title }}
-              </div>
-              <div :class="`${prefixCls}__card-num`">
-                娲昏穬鐢ㄦ埛锛�<span>{{ item.active }}</span> 涓�
-              </div>
-              <div :class="`${prefixCls}__card-num`">
-                鏂板鐢ㄦ埛锛�<span>{{ item.new }}</span>
-              </div>
-              <Icon :class="`${prefixCls}__card-download`" v-if="item.download" :icon="item.download" />
-            </Card>
-          </ListItem>
-        </a-col>
-      </template>
-    </a-row>
-  </List>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { List, Card, Row, Col } from 'ant-design-vue';
-  import Icon from '/@/components/Icon/index';
-  import { applicationList } from './data';
-
-  export default defineComponent({
-    components: {
-      List,
-      ListItem: List.Item,
-      Card,
-      Icon,
-      [Row.name]: Row,
-      [Col.name]: Col,
-    },
-    setup() {
-      return {
-        prefixCls: 'account-center-application',
-        list: applicationList,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  .account-center-application {
-    &__card {
-      width: 100%;
-      margin-bottom: -12px;
-
-      .ant-card-body {
-        padding: 16px;
-      }
-
-      &-title {
-        margin-bottom: 5px;
-        font-size: 16px;
-        font-weight: 500;
-
-        .icon {
-          margin-top: -5px;
-          font-size: 22px;
-        }
-      }
-
-      &-num {
-        margin-left: 24px;
-        line-height: 36px;
-        color: @text-color-secondary;
-
-        span {
-          margin-left: 5px;
-          font-size: 18px;
-        }
-      }
-
-      &-download {
-        float: right;
-        font-size: 20px !important;
-        color: @primary-color;
-      }
-    }
-  }
-</style>
diff --git a/src/views/demo/page/account/center/Article.vue b/src/views/demo/page/account/center/Article.vue
deleted file mode 100644
index 7addc32..0000000
--- a/src/views/demo/page/account/center/Article.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-<template>
-  <List item-layout="vertical" :class="prefixCls">
-    <template v-for="item in list" :key="item.title">
-      <ListItem>
-        <ListItemMeta>
-          <template #description>
-            <div :class="`${prefixCls}__content`">
-              {{ item.content }}
-            </div>
-          </template>
-          <template #title>
-            <p :class="`${prefixCls}__title`">
-              {{ item.title }}
-            </p>
-            <div>
-              <template v-for="tag in item.description" :key="tag">
-                <Tag class="mb-2">
-                  {{ tag }}
-                </Tag>
-              </template>
-            </div>
-          </template>
-        </ListItemMeta>
-        <div>
-          <template v-for="action in actions" :key="action.text">
-            <div :class="`${prefixCls}__action`">
-              <Icon v-if="action.icon" :class="`${prefixCls}__action-icon`" :icon="action.icon" :color="action.color" />
-              {{ action.text }}
-            </div>
-          </template>
-          <span :class="`${prefixCls}__time`">{{ item.time }}</span>
-        </div>
-      </ListItem>
-    </template>
-  </List>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { List, Tag } from 'ant-design-vue';
-  import Icon from '/@/components/Icon/index';
-  import { actions, articleList } from './data';
-
-  export default defineComponent({
-    components: {
-      List,
-      ListItem: List.Item,
-      ListItemMeta: List.Item.Meta,
-      Tag,
-      Icon,
-    },
-    setup() {
-      return {
-        prefixCls: 'account-center-article',
-        list: articleList,
-        actions,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .account-center-article {
-    &__title {
-      margin-bottom: 12px;
-      font-size: 18px;
-    }
-
-    &__content {
-      color: rgba(0, 0, 0, 0.65);
-    }
-
-    &__action {
-      display: inline-block;
-      padding: 0 16px;
-      color: rgba(0, 0, 0, 0.45);
-
-      &:nth-child(1),
-      &:nth-child(2) {
-        border-right: 1px solid rgba(206, 206, 206, 0.4);
-      }
-
-      &-icon {
-        margin-right: 3px;
-      }
-    }
-
-    &__time {
-      position: absolute;
-      right: 20px;
-      color: rgba(0, 0, 0, 0.45);
-    }
-  }
-</style>
diff --git a/src/views/demo/page/account/center/Project.vue b/src/views/demo/page/account/center/Project.vue
deleted file mode 100644
index 520ba13..0000000
--- a/src/views/demo/page/account/center/Project.vue
+++ /dev/null
@@ -1,71 +0,0 @@
-<template>
-  <List :class="prefixCls">
-    <a-row :gutter="16">
-      <template v-for="item in list" :key="item.title">
-        <a-col :span="6">
-          <ListItem>
-            <Card :hoverable="true" :class="`${prefixCls}__card`">
-              <img :src="demoImg" />
-              <div :class="`${prefixCls}__card-title`">
-                {{ item.title }}
-              </div>
-              <div :class="`${prefixCls}__card-content`">
-                {{ item.content }}
-              </div>
-            </Card>
-          </ListItem>
-        </a-col>
-      </template>
-    </a-row>
-  </List>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { List, Card, Row, Col } from 'ant-design-vue';
-  import demoImg from '/@/assets/images/demo.png';
-  import { projectList } from './data';
-
-  export default defineComponent({
-    components: {
-      List,
-      ListItem: List.Item,
-      Card,
-      [Row.name]: Row,
-      [Col.name]: Col,
-    },
-    setup() {
-      return {
-        prefixCls: 'account-center-project',
-        list: projectList,
-        demoImg,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  .account-center-project {
-    &__card {
-      width: 100%;
-
-      .ant-card-body {
-        padding: 0 0 24px 0;
-      }
-
-      img {
-        width: 100%;
-        height: 130px;
-      }
-
-      &-title {
-        margin: 5px 10px;
-        font-size: 16px;
-        font-weight: 500;
-        color: rgba(0, 0, 0, 0.85);
-      }
-
-      &-content {
-        margin: 5px 10px;
-      }
-    }
-  }
-</style>
diff --git a/src/views/demo/page/account/center/data.tsx b/src/views/demo/page/account/center/data.tsx
deleted file mode 100644
index e8251b3..0000000
--- a/src/views/demo/page/account/center/data.tsx
+++ /dev/null
@@ -1,124 +0,0 @@
-export interface ListItem {
-  title: string;
-  icon: string;
-  color?: string;
-}
-
-export interface TabItem {
-  key: string;
-  name: string;
-  component: string;
-}
-
-export const tags: string[] = ['寰堟湁鎯虫硶鐨�', '涓撴敞璁捐', '宸濆瀛�', '澶ч暱鑵�', '娴风撼鐧惧窛', '鍓嶇寮�鍙�', 'vue3'];
-<span class="iconify" data-icon="jam:codepen-circle" data-inline="false"></span>;
-export const teams: ListItem[] = [
-  {
-    icon: 'ri:alipay-fill',
-    title: '绉戝鎼爾缁�',
-    color: '#ff4000',
-  },
-  {
-    icon: 'emojione-monotone:letter-a',
-    title: '涓簩灏戝勾鍥�',
-    color: '#7c51b8',
-  },
-  {
-    icon: 'ri:alipay-fill',
-    title: '楂橀�兼牸璁捐',
-    color: '#00adf7',
-  },
-  {
-    icon: 'jam:codepen-circle',
-    title: '绋嬪簭鍛樻棩甯�',
-    color: '#00adf7',
-  },
-  {
-    icon: 'fa:behance-square',
-    title: '绉戝鎼爾缁�',
-    color: '#7c51b8',
-  },
-  {
-    icon: 'jam:codepen-circle',
-    title: '绋嬪簭鍛樻棩甯�',
-    color: '#ff4000',
-  },
-];
-
-export const details: ListItem[] = [
-  {
-    icon: 'ic:outline-contacts',
-    title: '浜や簰涓撳',
-  },
-  {
-    icon: 'grommet-icons:cluster',
-    title: '鏌愭煇鏌愪簨涓氱兢',
-  },
-  {
-    icon: 'bx:bx-home-circle',
-    title: '绂忓缓鐪佸帵闂ㄥ競',
-  },
-];
-
-export const achieveList: TabItem[] = [
-  {
-    key: '1',
-    name: '鏂囩珷',
-    component: 'Article',
-  },
-  {
-    key: '2',
-    name: '搴旂敤',
-    component: 'Application',
-  },
-  {
-    key: '3',
-    name: '椤圭洰',
-    component: 'Project',
-  },
-];
-
-export const actions: any[] = [
-  { icon: 'clarity:star-line', text: '156', color: '#018ffb' },
-  { icon: 'bx:bxs-like', text: '156', color: '#459ae8' },
-  { icon: 'bx:bxs-message-dots', text: '2', color: '#42d27d' },
-];
-
-export const articleList = (() => {
-  const result: any[] = [];
-  for (let i = 0; i < 4; i++) {
-    result.push({
-      title: 'Jeecg Admin',
-      description: ['Jeecg', '璁捐璇█', 'Typescript'],
-      content: '鍩轰簬Vue Next, TypeScript, Ant Design瀹炵幇鐨勪竴濂楀畬鏁寸殑浼佷笟绾у悗鍙扮鐞嗙郴缁熴��',
-      time: '2020-11-14 11:20',
-    });
-  }
-  return result;
-})();
-
-export const applicationList = (() => {
-  const result: any[] = [];
-  for (let i = 0; i < 8; i++) {
-    result.push({
-      title: 'Jeecg Admin',
-      icon: 'emojione-monotone:letter-a',
-      color: '#1890ff',
-      active: '100',
-      new: '1,799',
-      download: 'bx:bx-download',
-    });
-  }
-  return result;
-})();
-
-export const projectList = (() => {
-  const result: any[] = [];
-  for (let i = 0; i < 8; i++) {
-    result.push({
-      title: 'Jeecg Admin',
-      content: '鍩轰簬Vue Next, TypeScript, Ant Design瀹炵幇鐨勪竴濂楀畬鏁寸殑浼佷笟绾у悗鍙扮鐞嗙郴缁熴��',
-    });
-  }
-  return result;
-})();
diff --git a/src/views/demo/page/account/center/index.vue b/src/views/demo/page/account/center/index.vue
deleted file mode 100644
index 1cce493..0000000
--- a/src/views/demo/page/account/center/index.vue
+++ /dev/null
@@ -1,155 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <a-row :class="`${prefixCls}-top`">
-      <a-col :span="9" :class="`${prefixCls}-col`">
-        <a-row>
-          <a-col :span="8">
-            <div :class="`${prefixCls}-top__avatar`">
-              <img width="70" :src="avatar" />
-              <span>Jeecg</span>
-              <div>娴风撼鐧惧窛锛屾湁瀹逛箖澶�</div>
-            </div>
-          </a-col>
-          <a-col :span="16">
-            <div :class="`${prefixCls}-top__detail`">
-              <template v-for="detail in details" :key="detail.title">
-                <p>
-                  <Icon :icon="detail.icon" />
-                  {{ detail.title }}
-                </p>
-              </template>
-            </div>
-          </a-col>
-        </a-row>
-      </a-col>
-      <a-col :span="7" :class="`${prefixCls}-col`">
-        <CollapseContainer title="鏍囩" :canExpan="false">
-          <template v-for="tag in tags" :key="tag">
-            <Tag class="mb-2">
-              {{ tag }}
-            </Tag>
-          </template>
-        </CollapseContainer>
-      </a-col>
-      <a-col :span="8" :class="`${prefixCls}-col`">
-        <CollapseContainer :class="`${prefixCls}-top__team`" title="鍥㈤槦" :canExpan="false">
-          <div v-for="(team, index) in teams" :key="index" :class="`${prefixCls}-top__team-item`">
-            <Icon :icon="team.icon" :color="team.color" />
-            <span>{{ team.title }}</span>
-          </div>
-        </CollapseContainer>
-      </a-col>
-    </a-row>
-    <div :class="`${prefixCls}-bottom`">
-      <Tabs>
-        <template v-for="item in achieveList" :key="item.key">
-          <TabPane :tab="item.name">
-            <component :is="item.component" />
-          </TabPane>
-        </template>
-      </Tabs>
-    </div>
-  </div>
-</template>
-
-<script lang="ts">
-  import { Tag, Tabs, Row, Col } from 'ant-design-vue';
-  import { defineComponent, computed } from 'vue';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import Icon from '/@/components/Icon/index';
-  import Article from './Article.vue';
-  import Application from './Application.vue';
-  import Project from './Project.vue';
-
-  import headerImg from '/@/assets/images/header.jpg';
-  import { tags, teams, details, achieveList } from './data';
-  import { useUserStore } from '/@/store/modules/user';
-
-  export default defineComponent({
-    components: {
-      CollapseContainer,
-      Icon,
-      Tag,
-      Tabs,
-      TabPane: Tabs.TabPane,
-      Article,
-      Application,
-      Project,
-      [Row.name]: Row,
-      [Col.name]: Col,
-    },
-    setup() {
-      const userStore = useUserStore();
-      const avatar = computed(() => userStore.getUserInfo.avatar || headerImg);
-      return {
-        prefixCls: 'account-center',
-        avatar,
-        tags,
-        teams,
-        details,
-        achieveList,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .account-center {
-    &-col:not(:last-child) {
-      padding: 0 10px;
-
-      &:not(:last-child) {
-        border-right: 1px dashed rgb(206, 206, 206, 0.5);
-      }
-    }
-
-    &-top {
-      padding: 10px;
-      margin: 16px 16px 12px 16px;
-      background-color: @component-background;
-      border-radius: 3px;
-
-      &__avatar {
-        text-align: center;
-
-        img {
-          margin: auto;
-          border-radius: 50%;
-        }
-
-        span {
-          display: block;
-          font-size: 20px;
-          font-weight: 500;
-        }
-
-        div {
-          margin-top: 3px;
-          font-size: 12px;
-        }
-      }
-
-      &__detail {
-        padding-left: 20px;
-        margin-top: 15px;
-      }
-
-      &__team {
-        &-item {
-          display: inline-block;
-          padding: 4px 24px;
-        }
-
-        span {
-          margin-left: 3px;
-        }
-      }
-    }
-
-    &-bottom {
-      padding: 10px;
-      margin: 0 16px 16px 16px;
-      background-color: @component-background;
-      border-radius: 3px;
-    }
-  }
-</style>
diff --git a/src/views/demo/page/account/setting/AccountBind.vue b/src/views/demo/page/account/setting/AccountBind.vue
deleted file mode 100644
index b61beb6..0000000
--- a/src/views/demo/page/account/setting/AccountBind.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <CollapseContainer title="璐﹀彿缁戝畾" :canExpan="false">
-    <List>
-      <template v-for="item in list" :key="item.key">
-        <ListItem>
-          <ListItemMeta>
-            <template #avatar>
-              <Icon v-if="item.avatar" class="avatar" :icon="item.avatar" :color="item.color" />
-            </template>
-            <template #title>
-              {{ item.title }}
-              <a-button type="link" size="small" v-if="item.extra" class="extra">
-                {{ item.extra }}
-              </a-button>
-            </template>
-            <template #description>
-              <div>{{ item.description }} </div>
-            </template>
-          </ListItemMeta>
-        </ListItem>
-      </template>
-    </List>
-  </CollapseContainer>
-</template>
-<script lang="ts">
-  import { List } from 'ant-design-vue';
-  import { defineComponent } from 'vue';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import Icon from '/@/components/Icon/index';
-
-  import { accountBindList } from './data';
-
-  export default defineComponent({
-    components: {
-      CollapseContainer,
-      List,
-      ListItem: List.Item,
-      ListItemMeta: List.Item.Meta,
-      Icon,
-    },
-    setup() {
-      return {
-        list: accountBindList,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .avatar {
-    font-size: 40px !important;
-  }
-
-  .extra {
-    float: right;
-    margin-top: 10px;
-    margin-right: 30px;
-    cursor: pointer;
-  }
-</style>
diff --git a/src/views/demo/page/account/setting/BaseSetting.vue b/src/views/demo/page/account/setting/BaseSetting.vue
deleted file mode 100644
index 768bab9..0000000
--- a/src/views/demo/page/account/setting/BaseSetting.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <CollapseContainer title="鍩烘湰璁剧疆" :canExpan="false">
-    <a-row :gutter="24">
-      <a-col :span="14">
-        <BasicForm @register="register" />
-      </a-col>
-      <a-col :span="10">
-        <div class="change-avatar">
-          <div class="mb-2"> 澶村儚 </div>
-          <CropperAvatar
-            :uploadApi="uploadImg"
-            :value="avatar"
-            btnText="鏇存崲澶村儚"
-            :btnProps="{ preIcon: 'ant-design:cloud-upload-outlined' }"
-            @change="updateAvatar"
-            width="150"
-          />
-        </div>
-      </a-col>
-    </a-row>
-    <Button type="primary" @click="handleSubmit"> 鏇存柊鍩烘湰淇℃伅 </Button>
-  </CollapseContainer>
-</template>
-<script lang="ts">
-  import { Button, Row, Col } from 'ant-design-vue';
-  import { computed, defineComponent, onMounted } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { CollapseContainer } from '/@/components/Container';
-  import { CropperAvatar } from '/@/components/Cropper';
-
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  import headerImg from '/@/assets/images/header.jpg';
-  import { defHttp } from '/@/utils/http/axios';
-  import { baseSetschemas } from './data';
-  import { useUserStore } from '/@/store/modules/user';
-  import { uploadImg } from '/@/api/sys/upload';
-  import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
-
-  export default defineComponent({
-    components: {
-      BasicForm,
-      CollapseContainer,
-      Button,
-      ARow: Row,
-      ACol: Col,
-      CropperAvatar,
-    },
-    setup() {
-      const { createMessage } = useMessage();
-      const userStore = useUserStore();
-
-      const [register, { setFieldsValue, validate }] = useForm({
-        labelWidth: 120,
-        schemas: baseSetschemas,
-        showActionButtonGroup: false,
-      });
-
-      onMounted(async () => {
-        //const data = await accountInfoApi();
-        const userInfo = userStore.getUserInfo;
-        setFieldsValue(userInfo);
-      });
-
-      const avatar = computed(() => {
-        const { avatar } = userStore.getUserInfo;
-        return getFileAccessHttpUrl(avatar) || headerImg;
-      });
-
-      function updateAvatar(src: string, data: string) {
-        console.log('data====銆�', data);
-        const userinfo = userStore.getUserInfo;
-        userinfo.avatar = data;
-        userStore.setUserInfo(userinfo);
-        //update-begin---author:wangshuai ---date:20220909  for锛歔VUEN-2161]鐢ㄦ埛璁剧疆涓婁紶澶村儚鎴愬姛涔嬪悗鐩存帴淇濆瓨------------
-        if(data){
-          defHttp.post({ url: '/sys/user/appEdit', params:{avatar:data} });
-        }
-        //update-end---author:wangshuai ---date:20220909  for锛歔VUEN-2161]鐢ㄦ埛璁剧疆涓婁紶澶村儚鎴愬姛涔嬪悗鐩存帴淇濆瓨--------------
-      }
-      /**
-       *鏇存柊鍩烘湰淇℃伅
-       * */
-      async function handleSubmit() {
-        try {
-          let values = await validate();
-          values.avatar = userStore.getUserInfo.avatar
-          console.log('values', values);
-          //鎻愪氦琛ㄥ崟
-          defHttp.post({ url: '/sys/user/appEdit', params: values });
-          const userinfo = userStore.getUserInfo;
-          Object.assign(userinfo, values);
-          userStore.setUserInfo(userinfo);
-          createMessage.success('鏇存柊鎴愬姛');
-        } catch (e) {
-          console.log('e', e);
-        }
-      }
-
-      return {
-        avatar,
-        register,
-        uploadImg,
-        updateAvatar,
-        handleSubmit,
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .change-avatar {
-    img {
-      display: block;
-      margin-bottom: 15px;
-      border-radius: 50%;
-    }
-  }
-</style>
diff --git a/src/views/demo/page/account/setting/MsgNotify.vue b/src/views/demo/page/account/setting/MsgNotify.vue
deleted file mode 100644
index c816a6e..0000000
--- a/src/views/demo/page/account/setting/MsgNotify.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-<template>
-  <CollapseContainer title="鏂版秷鎭�氱煡" :canExpan="false">
-    <List>
-      <template v-for="item in list" :key="item.key">
-        <ListItem>
-          <ListItemMeta>
-            <template #title>
-              {{ item.title }}
-              <Switch class="extra" checked-children="寮�" un-checked-children="鍏�" default-checked />
-            </template>
-            <template #description>
-              <div>{{ item.description }} </div>
-            </template>
-          </ListItemMeta>
-        </ListItem>
-      </template>
-    </List>
-  </CollapseContainer>
-</template>
-<script lang="ts">
-  import { List, Switch } from 'ant-design-vue';
-  import { defineComponent } from 'vue';
-  import { CollapseContainer } from '/@/components/Container/index';
-
-  import { msgNotifyList } from './data';
-
-  export default defineComponent({
-    components: {
-      CollapseContainer,
-      List,
-      ListItem: List.Item,
-      ListItemMeta: List.Item.Meta,
-      Switch,
-    },
-    setup() {
-      return {
-        list: msgNotifyList,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .extra {
-    float: right;
-    margin-top: 10px;
-    margin-right: 30px;
-  }
-</style>
diff --git a/src/views/demo/page/account/setting/SecureSetting.vue b/src/views/demo/page/account/setting/SecureSetting.vue
deleted file mode 100644
index 0c95a31..0000000
--- a/src/views/demo/page/account/setting/SecureSetting.vue
+++ /dev/null
@@ -1,68 +0,0 @@
-<template>
-  <CollapseContainer title="瀹夊叏璁剧疆" :canExpan="false">
-    <List>
-      <template v-for="item in list" :key="item.key">
-        <ListItem>
-          <ListItemMeta>
-            <template #title>
-              {{ item.title }}
-              <div class="extra" v-if="item.extra" @click="extraClick(item.key)">
-                {{ item.extra }}
-              </div>
-            </template>
-            <template #description>
-              <div>{{ item.description }} </div>
-            </template>
-          </ListItemMeta>
-        </ListItem>
-      </template>
-    </List>
-  </CollapseContainer>
-  <UpdatePassword ref="updatePasswordRef" />
-</template>
-<script lang="ts">
-  import { List } from 'ant-design-vue';
-  import { defineComponent, ref } from 'vue';
-  import { CollapseContainer } from '/@/components/Container/index';
-
-  import { secureSettingList } from './data';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-  import { useUserStore } from '/@/store/modules/user';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  export default defineComponent({
-    components: {
-      CollapseContainer,
-      List,
-      ListItem: List.Item,
-      ListItemMeta: List.Item.Meta,
-      UpdatePassword: createAsyncComponent(() => import('/@/layouts/default/header/components/user-dropdown/UpdatePassword.vue')),
-    },
-    setup() {
-      const { createMessage } = useMessage();
-      const userStore = useUserStore();
-      const updatePasswordRef = ref();
-      function extraClick(key) {
-        if (key == '1') {
-          updatePasswordRef.value.show(userStore.getUserInfo.username);
-        } else {
-          createMessage.warning('鏆備笉鏀寔');
-        }
-      }
-      return {
-        updatePasswordRef,
-        extraClick,
-        list: secureSettingList,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .extra {
-    float: right;
-    margin-top: 10px;
-    margin-right: 30px;
-    font-weight: normal;
-    color: #1890ff;
-    cursor: pointer;
-  }
-</style>
diff --git a/src/views/demo/page/account/setting/data.ts b/src/views/demo/page/account/setting/data.ts
deleted file mode 100644
index 2a21342..0000000
--- a/src/views/demo/page/account/setting/data.ts
+++ /dev/null
@@ -1,167 +0,0 @@
-import { FormSchema } from '/@/components/Form/index';
-import { rules } from '/@/utils/helper/validator';
-
-export interface ListItem {
-  key: string;
-  title: string;
-  description: string;
-  extra?: string;
-  avatar?: string;
-  color?: string;
-}
-
-// tab鐨刲ist
-export const settingList = [
-  {
-    key: '1',
-    name: '鍩烘湰璁剧疆',
-    component: 'BaseSetting',
-  },
-  {
-    key: '2',
-    name: '瀹夊叏璁剧疆',
-    component: 'SecureSetting',
-  },
-  /* {
-    key: '3',
-    name: '璐﹀彿缁戝畾',
-    component: 'AccountBind',
-  },
-  {
-    key: '4',
-    name: '鏂版秷鎭�氱煡',
-    component: 'MsgNotify',
-  },*/
-];
-
-// 鍩虹璁剧疆 form
-export const baseSetschemas: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'realname',
-    component: 'Input',
-    label: '鏄电О',
-    colProps: { span: 18 },
-  },
-  {
-    field: 'sex',
-    label: '鎬у埆',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'sex',
-      placeholder: '璇烽�夋嫨鎬у埆',
-      stringToNumber: true,
-    },
-    colProps: { span: 18 },
-  },
-  {
-    label: '鐢熸棩',
-    field: 'birthday',
-    component: 'DatePicker',
-    colProps: { span: 18 },
-  },
-  {
-    field: 'email',
-    component: 'Input',
-    label: '閭',
-    colProps: { span: 18 },
-  },
-  {
-    field: 'phone',
-    component: 'Input',
-    label: '鑱旂郴鐢佃瘽',
-    dynamicRules: ({ model, schema }) => {
-      return [
-        { ...rules.duplicateCheckRule('sys_user', 'phone', model, schema, false)[0] },
-        { pattern: /^1[3456789]\d{9}$/, message: '鎵嬫満鍙风爜鏍煎紡鏈夎' },
-      ];
-    },
-    colProps: { span: 18 },
-  },
-];
-
-// 瀹夊叏璁剧疆 list
-export const secureSettingList: ListItem[] = [
-  {
-    key: '1',
-    title: '璐︽埛瀵嗙爜',
-    description: '褰撳墠瀵嗙爜寮哄害锛氾細寮�',
-    extra: '淇敼',
-  },
-  {
-    key: '2',
-    title: '瀵嗕繚鎵嬫満',
-    description: '宸茬粦瀹氭墜鏈猴細锛�138****8293',
-    extra: '淇敼',
-  },
-  {
-    key: '3',
-    title: '瀵嗕繚闂',
-    description: '鏈缃瘑淇濋棶棰橈紝瀵嗕繚闂鍙湁鏁堜繚鎶よ处鎴峰畨鍏�',
-    extra: '淇敼',
-  },
-  {
-    key: '4',
-    title: '澶囩敤閭',
-    description: '宸茬粦瀹氶偖绠憋細锛歛nt***sign.com',
-    extra: '淇敼',
-  },
-  {
-    key: '5',
-    title: 'MFA 璁惧',
-    description: '鏈粦瀹� MFA 璁惧锛岀粦瀹氬悗锛屽彲浠ヨ繘琛屼簩娆$‘璁�',
-    extra: '淇敼',
-  },
-];
-
-// 璐﹀彿缁戝畾 list
-export const accountBindList: ListItem[] = [
-  {
-    key: '1',
-    title: '缁戝畾娣樺疂',
-    description: '褰撳墠鏈粦瀹氭窐瀹濊处鍙�',
-    extra: '缁戝畾',
-    avatar: 'ri:taobao-fill',
-    color: '#ff4000',
-  },
-  {
-    key: '2',
-    title: '缁戝畾鏀粯瀹�',
-    description: '褰撳墠鏈粦瀹氭敮浠樺疂璐﹀彿',
-    extra: '缁戝畾',
-    avatar: 'fa-brands:alipay',
-    color: '#2eabff',
-  },
-  {
-    key: '3',
-    title: '缁戝畾閽夐拤',
-    description: '褰撳墠鏈粦瀹氶拤閽夎处鍙�',
-    extra: '缁戝畾',
-    avatar: 'ri:dingding-fill',
-    color: '#2eabff',
-  },
-];
-
-// 鏂版秷鎭�氱煡 list
-export const msgNotifyList: ListItem[] = [
-  {
-    key: '1',
-    title: '璐︽埛瀵嗙爜',
-    description: '鍏朵粬鐢ㄦ埛鐨勬秷鎭皢浠ョ珯鍐呬俊鐨勫舰寮忛�氱煡',
-  },
-  {
-    key: '2',
-    title: '绯荤粺娑堟伅',
-    description: '绯荤粺娑堟伅灏嗕互绔欏唴淇$殑褰㈠紡閫氱煡',
-  },
-  {
-    key: '3',
-    title: '寰呭姙浠诲姟',
-    description: '寰呭姙浠诲姟灏嗕互绔欏唴淇$殑褰㈠紡閫氱煡',
-  },
-];
diff --git a/src/views/demo/page/account/setting/index.vue b/src/views/demo/page/account/setting/index.vue
deleted file mode 100644
index 74920b8..0000000
--- a/src/views/demo/page/account/setting/index.vue
+++ /dev/null
@@ -1,62 +0,0 @@
-<template>
-  <ScrollContainer>
-    <div ref="wrapperRef" :class="prefixCls">
-      <Tabs tab-position="left" :tabBarStyle="tabBarStyle">
-        <template v-for="item in settingList" :key="item.key">
-          <TabPane :tab="item.name">
-            <component :is="item.component" />
-          </TabPane>
-        </template>
-      </Tabs>
-    </div>
-  </ScrollContainer>
-</template>
-
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Tabs } from 'ant-design-vue';
-
-  import { ScrollContainer } from '/@/components/Container/index';
-  import { settingList } from './data';
-
-  import BaseSetting from './BaseSetting.vue';
-  import SecureSetting from './SecureSetting.vue';
-  import AccountBind from './AccountBind.vue';
-  import MsgNotify from './MsgNotify.vue';
-
-  export default defineComponent({
-    components: {
-      ScrollContainer,
-      Tabs,
-      TabPane: Tabs.TabPane,
-      BaseSetting,
-      SecureSetting,
-      AccountBind,
-      MsgNotify,
-    },
-    setup() {
-      return {
-        prefixCls: 'account-setting',
-        settingList,
-        tabBarStyle: {
-          width: '220px',
-          marginBottom: '200px',
-        },
-      };
-    },
-  });
-</script>
-<style lang="less">
-  .account-setting {
-    margin: 12px;
-    background-color: @component-background;
-
-    .base-title {
-      padding-left: 0;
-    }
-
-    .ant-tabs-tab-active {
-      background-color: @item-active-bg;
-    }
-  }
-</style>
diff --git a/src/views/demo/page/desc/basic/data.tsx b/src/views/demo/page/desc/basic/data.tsx
deleted file mode 100644
index d640b62..0000000
--- a/src/views/demo/page/desc/basic/data.tsx
+++ /dev/null
@@ -1,196 +0,0 @@
-import { DescItem } from '/@/components/Description/index';
-import { BasicColumn } from '/@/components/Table/src/types/table';
-import { Button } from '/@/components/Button';
-
-import { Badge } from 'ant-design-vue';
-
-export const refundData = {
-  a1: '1000000000',
-  a2: '宸插彇璐�',
-  a3: '1234123421',
-  a4: '3214321432',
-};
-
-export const personData = {
-  b1: '浠樺皬灏�',
-  b2: '18100000000',
-  b3: '鑿滈笩浠撳偍',
-  b4: '娴欐睙鐪佹澀宸炲競瑗挎箹鍖轰竾濉樿矾18鍙�',
-  b5: '鏃�',
-};
-export const refundSchema: DescItem[] = [
-  {
-    field: 'a1',
-    label: '鍙栬揣鍗曞彿',
-  },
-  {
-    field: 'a2',
-    label: '鐘舵��',
-  },
-  {
-    field: 'a3',
-    label: '閿�鍞崟鍙�',
-  },
-  {
-    field: 'a4',
-    label: '瀛愯鍗�',
-  },
-];
-export const personSchema: DescItem[] = [
-  {
-    field: 'b1',
-    label: '鐢ㄦ埛濮撳悕',
-  },
-  {
-    field: 'b2',
-    label: '鑱旂郴鐢佃瘽',
-  },
-  {
-    field: 'b3',
-    label: '甯哥敤蹇��',
-  },
-  {
-    field: 'b4',
-    label: '鍙栬揣鍦板潃',
-  },
-  {
-    field: 'b5',
-    label: '澶囨敞',
-  },
-];
-
-export const refundTableSchema: BasicColumn[] = [
-  {
-    title: '鍟嗗搧缂栧彿',
-    width: 150,
-    dataIndex: 't1',
-    customRender: ({ record }) => {
-      return (
-        <Button type="link" size="small">
-          {() => record.t1}
-        </Button>
-      );
-    },
-  },
-  {
-    title: '鍟嗗搧鍚嶇О',
-    width: 150,
-    dataIndex: 't2',
-  },
-  {
-    title: '鍟嗗搧鏉$爜',
-    width: 150,
-    dataIndex: 't3',
-  },
-  {
-    title: '鍗曚环	',
-    width: 150,
-    dataIndex: 't4',
-  },
-  {
-    title: '鏁伴噺锛堜欢锛�	',
-    width: 150,
-    dataIndex: 't5',
-  },
-  {
-    title: '閲戦',
-    width: 150,
-    dataIndex: 't6',
-  },
-];
-export const refundTimeTableSchema: BasicColumn[] = [
-  {
-    title: '鏃堕棿',
-    width: 150,
-    dataIndex: 't1',
-  },
-  {
-    title: '褰撳墠杩涘害',
-    width: 150,
-    dataIndex: 't2',
-  },
-  {
-    title: '鐘舵��',
-    width: 150,
-    dataIndex: 't3',
-    customRender: ({ record }) => {
-      return <Badge status="success" text={record.t3} />;
-    },
-  },
-  {
-    title: '鎿嶄綔鍛業D	',
-    width: 150,
-    dataIndex: 't4',
-  },
-  {
-    title: '鑰楁椂',
-    width: 150,
-    dataIndex: 't5',
-  },
-];
-
-export const refundTableData: any[] = [
-  {
-    t1: 1234561,
-    t2: '鐭挎硥姘� 550ml',
-    t3: '12421432143214321',
-    t4: '2.00',
-    t5: 1,
-    t6: 2.0,
-  },
-  {
-    t1: 1234562,
-    t2: '鐭挎硥姘� 550ml',
-    t3: '12421432143214321',
-    t4: '2.00',
-    t5: 2,
-    t6: 2.0,
-  },
-  {
-    t1: 1234562,
-    t2: '鐭挎硥姘� 550ml',
-    t3: '12421432143214321',
-    t4: '2.00',
-    t5: 2,
-    t6: 2.0,
-  },
-  {
-    t1: 1234562,
-    t2: '鐭挎硥姘� 550ml',
-    t3: '12421432143214321',
-    t4: '2.00',
-    t5: 2,
-    t6: 2.0,
-  },
-];
-
-export const refundTimeTableData: any[] = [
-  {
-    t1: '2017-10-01 14:10',
-    t2: '鑱旂郴瀹㈡埛',
-    t3: '杩涜涓�',
-    t4: '鍙栬揣鍛� ID1234',
-    t5: '5mins',
-  },
-  {
-    t1: '2017-10-01 14:10',
-    t2: '鍙栬揣鍛樺嚭鍙�',
-    t3: '鎴愬姛',
-    t4: '鍙栬揣鍛� ID1234',
-    t5: '5mins',
-  },
-  {
-    t1: '2017-10-01 14:10',
-    t2: '鍙栬揣鍛樻帴鍗�',
-    t3: '鎴愬姛',
-    t4: '绯荤粺',
-    t5: '5mins',
-  },
-  {
-    t1: '2017-10-01 14:10',
-    t2: '鐢宠瀹℃壒閫氳繃',
-    t3: '鎴愬姛',
-    t4: '鐢ㄦ埛',
-    t5: '1h',
-  },
-];
diff --git a/src/views/demo/page/desc/basic/index.vue b/src/views/demo/page/desc/basic/index.vue
deleted file mode 100644
index 7ff62fd..0000000
--- a/src/views/demo/page/desc/basic/index.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-<template>
-  <PageWrapper title="鍩虹璇︽儏椤�" contentBackground>
-    <Description size="middle" title="閫�娆剧敵璇�" :bordered="false" :column="3" :data="refundData" :schema="refundSchema" />
-    <a-divider />
-    <Description size="middle" title="鐢ㄦ埛淇℃伅" :bordered="false" :column="3" :data="personData" :schema="personSchema" />
-    <a-divider />
-
-    <BasicTable @register="registerRefundTable" />
-    <a-divider />
-    <BasicTable @register="registerTimeTable" />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Description } from '/@/components/Description/index';
-  import { BasicTable, useTable } from '/@/components/Table';
-  import { PageWrapper } from '/@/components/Page';
-  import { Divider } from 'ant-design-vue';
-
-  import {
-    refundSchema,
-    refundData,
-    personSchema,
-    personData,
-    refundTableSchema,
-    refundTimeTableSchema,
-    refundTableData,
-    refundTimeTableData,
-  } from './data';
-  export default defineComponent({
-    components: { Description, BasicTable, PageWrapper, [Divider.name]: Divider },
-    setup() {
-      const [registerRefundTable] = useTable({
-        title: '閫�璐у晢鍝�',
-        dataSource: refundTableData,
-        columns: refundTableSchema,
-        pagination: false,
-        showIndexColumn: false,
-        scroll: { y: 300 },
-        showSummary: true,
-        summaryFunc: handleSummary,
-      });
-
-      const [registerTimeTable] = useTable({
-        title: '閫�璐ц繘搴�',
-        columns: refundTimeTableSchema,
-        pagination: false,
-        dataSource: refundTimeTableData,
-        showIndexColumn: false,
-        scroll: { y: 300 },
-      });
-
-      function handleSummary(tableData: any[]) {
-        let totalT5 = 0;
-        let totalT6 = 0;
-        tableData.forEach((item) => {
-          totalT5 += item.t5;
-          totalT6 += item.t6;
-        });
-        return [
-          {
-            t1: '鎬昏',
-            t5: totalT5,
-            t6: totalT6,
-          },
-        ];
-      }
-      return {
-        registerRefundTable,
-        registerTimeTable,
-        refundSchema,
-        refundData,
-        personSchema,
-        personData,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .desc-wrap {
-    padding: 16px;
-    background-color: @component-background;
-  }
-</style>
diff --git a/src/views/demo/page/desc/high/data.tsx b/src/views/demo/page/desc/high/data.tsx
deleted file mode 100644
index ec7a7c3..0000000
--- a/src/views/demo/page/desc/high/data.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import { BasicColumn } from '/@/components/Table/src/types/table';
-
-import { Badge } from 'ant-design-vue';
-
-export const refundTimeTableSchema: BasicColumn[] = [
-  {
-    title: '鏃堕棿',
-    width: 150,
-    dataIndex: 't1',
-  },
-  {
-    title: '褰撳墠杩涘害',
-    width: 150,
-    dataIndex: 't2',
-  },
-  {
-    title: '鐘舵��',
-    width: 150,
-    dataIndex: 't3',
-    customRender: ({ record }) => {
-      return <Badge status="success" text={record.t3} />;
-    },
-  },
-  {
-    title: '鎿嶄綔鍛業D	',
-    width: 150,
-    dataIndex: 't4',
-  },
-  {
-    title: '鑰楁椂',
-    width: 150,
-    dataIndex: 't5',
-  },
-];
-
-export const refundTimeTableData: any[] = [
-  {
-    t1: '2017-10-01 14:10',
-    t2: '鑱旂郴瀹㈡埛',
-    t3: '杩涜涓�',
-    t4: '鍙栬揣鍛� ID1234',
-    t5: '5mins',
-  },
-  {
-    t1: '2017-10-01 14:10',
-    t2: '鍙栬揣鍛樺嚭鍙�',
-    t3: '鎴愬姛',
-    t4: '鍙栬揣鍛� ID1234',
-    t5: '5mins',
-  },
-  {
-    t1: '2017-10-01 14:10',
-    t2: '鍙栬揣鍛樻帴鍗�',
-    t3: '鎴愬姛',
-    t4: '绯荤粺',
-    t5: '5mins',
-  },
-  {
-    t1: '2017-10-01 14:10',
-    t2: '鐢宠瀹℃壒閫氳繃',
-    t3: '鎴愬姛',
-    t4: '鐢ㄦ埛',
-    t5: '1h',
-  },
-];
diff --git a/src/views/demo/page/desc/high/index.vue b/src/views/demo/page/desc/high/index.vue
deleted file mode 100644
index 0263474..0000000
--- a/src/views/demo/page/desc/high/index.vue
+++ /dev/null
@@ -1,123 +0,0 @@
-<template>
-  <PageWrapper title="鍗曞彿锛�234231029431" contentBackground>
-    <template #extra>
-      <a-button> 鎿嶄綔涓� </a-button>
-      <a-button> 鎿嶄綔浜� </a-button>
-      <a-button type="primary"> 涓绘搷浣� </a-button>
-    </template>
-
-    <template #footer>
-      <a-tabs default-active-key="1">
-        <a-tab-pane key="1" tab="璇︽儏" />
-        <a-tab-pane key="2" tab="瑙勫垯" />
-      </a-tabs>
-    </template>
-
-    <div class="pt-4 m-4 desc-wrap">
-      <a-descriptions size="small" :column="2">
-        <a-descriptions-item label="鍒涘缓浜�"> 鏇蹭附涓� </a-descriptions-item>
-        <a-descriptions-item label="璁㈣喘浜у搧"> XX 鏈嶅姟 </a-descriptions-item>
-        <a-descriptions-item label="鍒涘缓鏃堕棿"> 2017-01-10 </a-descriptions-item>
-        <a-descriptions-item label="鍏宠仈鍗曟嵁">
-          <a>12421</a>
-        </a-descriptions-item>
-        <a-descriptions-item label="鐢熸晥鏃ユ湡"> 2017-07-07 ~ 2017-08-08 </a-descriptions-item>
-        <a-descriptions-item label="澶囨敞"> 璇蜂簬涓や釜宸ヤ綔鏃ュ唴纭 </a-descriptions-item>
-      </a-descriptions>
-      <a-card title="娴佺▼杩涘害" :bordered="false">
-        <a-steps :current="1" progress-dot size="small">
-          <a-step title="鍒涘缓椤圭洰">
-            <template #description> <div>Jeecg</div> <p>2016-12-12 12:32</p> </template>
-          </a-step>
-          <a-step title="閮ㄩ棬鍒濆">
-            <template #description>
-              <p>Chad</p>
-            </template>
-          </a-step>
-          <a-step title="璐㈠姟澶嶆牳" />
-          <a-step title="瀹屾垚" />
-        </a-steps>
-      </a-card>
-
-      <a-card title="鐢ㄦ埛淇℃伅" :bordered="false" class="mt-5">
-        <a-descriptions :column="3">
-          <a-descriptions-item label="鐢ㄦ埛濮撳悕"> 浠樺皬灏� </a-descriptions-item>
-          <a-descriptions-item label="浼氬憳鍗″彿"> XX 32943898021309809423 </a-descriptions-item>
-          <a-descriptions-item label="韬唤璇�"> 3321944288191034921 </a-descriptions-item>
-          <a-descriptions-item label="鑱旂郴鏂瑰紡"> 18100000000 </a-descriptions-item>
-          <a-descriptions-item label="鑱旂郴鍦板潃" :span="2"> 鏇蹭附涓� 18100000000 娴欐睙鐪佹澀宸炲競瑗挎箹鍖洪粍濮戝北璺伐涓撹矾浜ゅ弶璺彛 </a-descriptions-item>
-        </a-descriptions>
-
-        <a-descriptions title="淇℃伅缁�" :column="3">
-          <a-descriptions-item label="鏌愭煇鏁版嵁"> 111 </a-descriptions-item>
-          <a-descriptions-item label="璇ユ暟鎹洿鏂版椂闂�"> 2017-08-08 </a-descriptions-item>
-          <a-descriptions-item label="鏌愭煇鏁版嵁"> 725 </a-descriptions-item>
-          <a-descriptions-item label="璇ユ暟鎹洿鏂版椂闂�"> 2017-08-08 </a-descriptions-item>
-        </a-descriptions>
-
-        <h4>淇℃伅缁�</h4>
-        <a-card title="澶氬眰绾т俊鎭粍">
-          <a-descriptions title="缁勫悕绉�" :column="3">
-            <a-descriptions-item label="璐熻矗浜�"> 鏋椾笢涓� </a-descriptions-item>
-            <a-descriptions-item label="瑙掕壊鐮�"> 1234567 </a-descriptions-item>
-            <a-descriptions-item label="鎵�灞為儴闂�"> XX鍏徃 - YY閮� </a-descriptions-item>
-            <a-descriptions-item label="杩囨湡鏃堕棿"> 2017-08-08 </a-descriptions-item>
-            <a-descriptions-item label="鎻忚堪" :span="2"> 杩欐鎻忚堪寰堥暱寰堥暱寰堥暱寰堥暱寰堥暱寰堥暱寰堥暱寰堥暱寰堥暱寰堥暱寰堥暱寰堥暱寰堥暱寰堥暱... </a-descriptions-item>
-          </a-descriptions>
-          <a-divider />
-          <a-descriptions title="缁勫悕绉�" :column="1">
-            <a-descriptions-item label="瀛﹀悕">
-              Citrullus lanatus (Thunb.) Matsum. et Nakai涓�骞寸敓钄撶敓钘ゆ湰锛涜寧銆佹灊绮楀.锛屽叿鏄庢樉鐨勬1銆傚嵎椤昏緝绮�..
-            </a-descriptions-item>
-          </a-descriptions>
-          <a-divider />
-          <a-descriptions title="缁勫悕绉�" :column="1">
-            <a-descriptions-item label="璐熻矗浜�"> 浠樺皬灏� </a-descriptions-item>
-            <a-descriptions-item label="瑙掕壊鐮�"> 1234568 </a-descriptions-item>
-          </a-descriptions>
-        </a-card>
-      </a-card>
-      <a-card title="鐢ㄦ埛杩戝崐骞存潵鐢佃褰�" class="my-5">
-        <Empty />
-      </a-card>
-      <BasicTable @register="registerTimeTable" />
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable } from '/@/components/Table';
-  import { PageWrapper } from '/@/components/Page';
-  import { Divider, Card, Empty, Descriptions, Steps, Tabs } from 'ant-design-vue';
-
-  import { refundTimeTableSchema, refundTimeTableData } from './data';
-  export default defineComponent({
-    components: {
-      BasicTable,
-      PageWrapper,
-      [Divider.name]: Divider,
-      [Card.name]: Card,
-      Empty,
-      [Descriptions.name]: Descriptions,
-      [Descriptions.Item.name]: Descriptions.Item,
-      [Steps.name]: Steps,
-      [Steps.Step.name]: Steps.Step,
-      [Tabs.name]: Tabs,
-      [Tabs.TabPane.name]: Tabs.TabPane,
-    },
-    setup() {
-      const [registerTimeTable] = useTable({
-        title: '閫�璐ц繘搴�',
-        columns: refundTimeTableSchema,
-        pagination: false,
-        dataSource: refundTimeTableData,
-        showIndexColumn: false,
-        scroll: { y: 300 },
-      });
-
-      return {
-        registerTimeTable,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/page/form/basic/data.ts b/src/views/demo/page/form/basic/data.ts
deleted file mode 100644
index 76d2965..0000000
--- a/src/views/demo/page/form/basic/data.ts
+++ /dev/null
@@ -1,119 +0,0 @@
-import { FormSchema } from '/@/components/Form';
-
-export const schemas: FormSchema[] = [
-  {
-    field: 'title',
-    component: 'Input',
-    label: '鏍囬',
-    componentProps: {
-      placeholder: '缁欑洰鏍囪捣涓悕瀛�',
-    },
-    required: true,
-  },
-  {
-    field: 'time',
-    component: 'RangePicker',
-    label: '璧锋鏃ユ湡',
-    required: true,
-  },
-  {
-    field: 'target',
-    component: 'InputTextArea',
-    label: '鐩爣鎻忚堪',
-    componentProps: {
-      placeholder: '璇疯緭鍏ヤ綘鐨勯樁娈垫�у伐浣滅洰鏍�',
-      rows: 4,
-    },
-    required: true,
-  },
-  {
-    field: 'metrics',
-    component: 'InputTextArea',
-    label: '琛¢噺鏍囧噯',
-    componentProps: {
-      placeholder: '璇疯緭鍏ヨ 閲忔爣鍑�',
-      rows: 4,
-    },
-    required: true,
-  },
-  {
-    field: 'client',
-    component: 'Input',
-    label: '瀹㈡埛',
-    helpMessage: '鐩爣鐨勬湇鍔″璞�',
-    subLabel: '( 閫夊~ )',
-    componentProps: {
-      placeholder: '璇锋弿杩颁綘鏈嶅姟鐨勫鎴凤紝鍐呴儴瀹㈡埛鐩存帴 @濮撳悕锛忓伐鍙�',
-    },
-  },
-  {
-    field: 'inviteer',
-    component: 'Input',
-    label: '閭�璇勪汉',
-    subLabel: '( 閫夊~ )',
-    componentProps: {
-      placeholder: '璇风洿鎺� @濮撳悕锛忓伐鍙凤紝鏈�澶氬彲閭�璇� 5 浜�',
-    },
-  },
-  {
-    field: 'weights',
-    component: 'InputNumber',
-    label: '鏉冮噸',
-    subLabel: '( 閫夊~ )',
-    componentProps: {
-      formatter: (value: string) => (value ? `${value}%` : ''),
-      parser: (value: string) => value.replace('%', ''),
-      placeholder: '璇疯緭鍏�',
-    },
-  },
-  {
-    field: 'disclosure',
-    component: 'RadioGroup',
-    label: '鐩爣鍏紑',
-    itemProps: {
-      extra: '瀹㈡埛銆侀個璇勪汉榛樿琚垎浜�',
-    },
-    componentProps: {
-      options: [
-        {
-          label: '鍏紑',
-          value: '1',
-        },
-        {
-          label: '閮ㄥ垎鍏紑',
-          value: '2',
-        },
-        {
-          label: '涓嶅叕寮�',
-          value: '3',
-        },
-      ],
-    },
-  },
-  {
-    field: 'disclosurer',
-    component: 'Select',
-    label: ' ',
-    show: ({ model }) => {
-      return model.disclosure === '2';
-    },
-    componentProps: {
-      placeholder: '鍏紑缁�',
-      mode: 'multiple',
-      options: [
-        {
-          label: '鍚屼簨1',
-          value: '1',
-        },
-        {
-          label: '鍚屼簨2',
-          value: '2',
-        },
-        {
-          label: '鍚屼簨3',
-          value: '3',
-        },
-      ],
-    },
-  },
-];
diff --git a/src/views/demo/page/form/basic/index.vue b/src/views/demo/page/form/basic/index.vue
deleted file mode 100644
index 407c176..0000000
--- a/src/views/demo/page/form/basic/index.vue
+++ /dev/null
@@ -1,64 +0,0 @@
-<template>
-  <PageWrapper title="鍩虹琛ㄥ崟" contentBackground content=" 琛ㄥ崟椤电敤浜庡悜鐢ㄦ埛鏀堕泦鎴栭獙璇佷俊鎭紝鍩虹琛ㄥ崟甯歌浜庢暟鎹」杈冨皯鐨勮〃鍗曞満鏅��" contentClass="p-4">
-    <BasicForm @register="register" />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { BasicForm, useForm } from '/@/components/Form';
-  import { defineComponent } from 'vue';
-  import { schemas } from './data';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    name: 'FormBasicPage',
-    components: { BasicForm, PageWrapper },
-    setup() {
-      const { createMessage } = useMessage();
-      const [register, { validate, setProps }] = useForm({
-        labelCol: {
-          span: 8,
-        },
-        wrapperCol: {
-          span: 10,
-        },
-        schemas: schemas,
-        actionColOptions: {
-          offset: 8,
-          span: 12,
-        },
-        submitButtonOptions: {
-          text: '鎻愪氦',
-        },
-        submitFunc: customSubmitFunc,
-      });
-
-      async function customSubmitFunc() {
-        try {
-          await validate();
-          setProps({
-            submitButtonOptions: {
-              loading: true,
-            },
-          });
-          setTimeout(() => {
-            setProps({
-              submitButtonOptions: {
-                loading: false,
-              },
-            });
-            createMessage.success('鎻愪氦鎴愬姛锛�');
-          }, 2000);
-        } catch (error) {}
-      }
-
-      return { register };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .form-wrap {
-    padding: 24px;
-    background-color: @component-background;
-  }
-</style>
diff --git a/src/views/demo/page/form/high/PersonTable.vue b/src/views/demo/page/form/high/PersonTable.vue
deleted file mode 100644
index 47d250d..0000000
--- a/src/views/demo/page/form/high/PersonTable.vue
+++ /dev/null
@@ -1,137 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable" @edit-change="handleEditChange">
-      <template #action="{ record, column }">
-        <TableAction :actions="createActions(record, column)" />
-      </template>
-    </BasicTable>
-    <a-button block class="mt-5" type="dashed" @click="handleAdd"> 鏂板鎴愬憳 </a-button>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable, TableAction, BasicColumn, ActionItem, EditRecordRow } from '/@/components/Table';
-
-  const columns: BasicColumn[] = [
-    {
-      title: '鎴愬憳濮撳悕',
-      dataIndex: 'name',
-      editRow: true,
-    },
-    {
-      title: '宸ュ彿',
-      dataIndex: 'no',
-      editRow: true,
-    },
-    {
-      title: '鎵�灞為儴闂�',
-      dataIndex: 'dept',
-      editRow: true,
-    },
-  ];
-
-  const data: any[] = [
-    {
-      name: 'John Brown',
-      no: '00001',
-      dept: 'New York No. 1 Lake Park',
-    },
-    {
-      name: 'John Brown2',
-      no: '00002',
-      dept: 'New York No. 2 Lake Park',
-    },
-    {
-      name: 'John Brown3',
-      no: '00003',
-      dept: 'New York No. 3Lake Park',
-    },
-  ];
-  export default defineComponent({
-    components: { BasicTable, TableAction },
-    setup() {
-      const [registerTable, { getDataSource }] = useTable({
-        columns: columns,
-        showIndexColumn: false,
-        dataSource: data,
-        actionColumn: {
-          width: 160,
-          title: '鎿嶄綔',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-        },
-        pagination: false,
-      });
-
-      function handleEdit(record: EditRecordRow) {
-        record.onEdit?.(true);
-      }
-
-      function handleCancel(record: EditRecordRow) {
-        record.onEdit?.(false);
-        if (record.isNew) {
-          const data = getDataSource();
-          const index = data.findIndex((item) => item.key === record.key);
-          data.splice(index, 1);
-        }
-      }
-
-      function handleSave(record: EditRecordRow) {
-        record.onEdit?.(false, true);
-      }
-
-      function handleEditChange(data: Recordable) {
-        console.log(data);
-      }
-
-      function handleAdd() {
-        const data = getDataSource();
-        const addRow: EditRecordRow = {
-          name: '',
-          no: '',
-          dept: '',
-          editable: true,
-          isNew: true,
-          key: `${Date.now()}`,
-        };
-        data.push(addRow);
-      }
-
-      function createActions(record: EditRecordRow, column: BasicColumn): ActionItem[] {
-        if (!record.editable) {
-          return [
-            {
-              label: '缂栬緫',
-              onClick: handleEdit.bind(null, record),
-            },
-            {
-              label: '鍒犻櫎',
-            },
-          ];
-        }
-        return [
-          {
-            label: '淇濆瓨',
-            onClick: handleSave.bind(null, record, column),
-          },
-          {
-            label: '鍙栨秷',
-            popConfirm: {
-              title: '鏄惁鍙栨秷缂栬緫',
-              confirm: handleCancel.bind(null, record, column),
-            },
-          },
-        ];
-      }
-
-      return {
-        registerTable,
-        handleEdit,
-        createActions,
-        handleAdd,
-        getDataSource,
-        handleEditChange,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/page/form/high/data.ts b/src/views/demo/page/form/high/data.ts
deleted file mode 100644
index 73d17d8..0000000
--- a/src/views/demo/page/form/high/data.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-import { FormSchema } from '/@/components/Form';
-
-const basicOptions: LabelValueOptions = [
-  {
-    label: '浠樻檽鏅�',
-    value: '1',
-  },
-  {
-    label: '鍛ㄦ瘺姣�',
-    value: '2',
-  },
-];
-
-const storeTypeOptions: LabelValueOptions = [
-  {
-    label: '绉佸瘑',
-    value: '1',
-  },
-  {
-    label: '鍏紑',
-    value: '2',
-  },
-];
-
-export const schemas: FormSchema[] = [
-  {
-    field: 'f1',
-    component: 'Input',
-    label: '浠撳簱鍚�',
-    required: true,
-  },
-  {
-    field: 'f2',
-    component: 'Input',
-    label: '浠撳簱鍩熷悕',
-    required: true,
-    componentProps: {
-      addonBefore: 'http://',
-      addonAfter: 'com',
-    },
-    colProps: {
-      offset: 2,
-    },
-  },
-  {
-    field: 'f3',
-    component: 'Select',
-    label: '浠撳簱绠$悊鍛�',
-    componentProps: {
-      options: basicOptions,
-    },
-    required: true,
-    colProps: {
-      offset: 2,
-    },
-  },
-  {
-    field: 'f4',
-    component: 'Select',
-    label: '瀹℃壒浜�',
-    componentProps: {
-      options: basicOptions,
-    },
-    required: true,
-  },
-  {
-    field: 'f5',
-    component: 'RangePicker',
-    label: '鐢熸晥鏃ユ湡',
-    required: true,
-    colProps: {
-      offset: 2,
-    },
-  },
-  {
-    field: 'f6',
-    component: 'Select',
-    label: '浠撳簱绫诲瀷',
-    componentProps: {
-      options: storeTypeOptions,
-    },
-    required: true,
-    colProps: {
-      offset: 2,
-    },
-  },
-];
-export const taskSchemas: FormSchema[] = [
-  {
-    field: 't1',
-    component: 'Input',
-    label: '浠诲姟鍚�',
-    required: true,
-  },
-  {
-    field: 't2',
-    component: 'Input',
-    label: '浠诲姟鎻忚堪',
-    required: true,
-    colProps: {
-      offset: 2,
-    },
-  },
-  {
-    field: 't3',
-    component: 'Select',
-    label: '鎵ц浜�',
-    componentProps: {
-      options: basicOptions,
-    },
-    required: true,
-    colProps: {
-      offset: 2,
-    },
-  },
-  {
-    field: 't4',
-    component: 'Select',
-    label: '璐d换浜�',
-    componentProps: {
-      options: basicOptions,
-    },
-    required: true,
-  },
-  {
-    field: 't5',
-    component: 'TimePicker',
-    label: '鐢熸晥鏃ユ湡',
-    required: true,
-    componentProps: {
-      style: { width: '100%' },
-    },
-    colProps: {
-      offset: 2,
-    },
-  },
-  {
-    field: 't6',
-    component: 'Select',
-    label: '浠诲姟绫诲瀷',
-    componentProps: {
-      options: storeTypeOptions,
-    },
-    required: true,
-    colProps: {
-      offset: 2,
-    },
-  },
-];
diff --git a/src/views/demo/page/form/high/index.vue b/src/views/demo/page/form/high/index.vue
deleted file mode 100644
index 64b1624..0000000
--- a/src/views/demo/page/form/high/index.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-<template>
-  <PageWrapper class="high-form" title="楂樼骇琛ㄥ崟" content=" 楂樼骇琛ㄥ崟甯歌浜庝竴娆℃�ц緭鍏ュ拰鎻愪氦澶ф壒閲忔暟鎹殑鍦烘櫙銆�">
-    <a-card title="浠撳簱绠$悊" :bordered="false">
-      <BasicForm @register="register" />
-    </a-card>
-    <a-card title="浠诲姟绠$悊" :bordered="false" class="!mt-5">
-      <BasicForm @register="registerTask" />
-    </a-card>
-    <a-card title="鎴愬憳绠$悊" :bordered="false">
-      <PersonTable ref="tableRef" />
-    </a-card>
-
-    <template #rightFooter>
-      <a-button type="primary" @click="submitAll"> 鎻愪氦 </a-button>
-    </template>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { BasicForm, useForm } from '/@/components/Form';
-  import { defineComponent, ref } from 'vue';
-  import PersonTable from './PersonTable.vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { schemas, taskSchemas } from './data';
-  import { Card } from 'ant-design-vue';
-
-  export default defineComponent({
-    name: 'FormHightPage',
-    components: { BasicForm, PersonTable, PageWrapper, [Card.name]: Card },
-    setup() {
-      const tableRef = ref<{ getDataSource: () => any } | null>(null);
-
-      const [register, { validate }] = useForm({
-        baseColProps: {
-          span: 6,
-        },
-        labelWidth: 200,
-        layout: 'vertical',
-        schemas: schemas,
-        showActionButtonGroup: false,
-      });
-
-      const [registerTask, { validate: validateTaskForm }] = useForm({
-        baseColProps: {
-          span: 6,
-        },
-        labelWidth: 200,
-        layout: 'vertical',
-        schemas: taskSchemas,
-        showActionButtonGroup: false,
-      });
-
-      async function submitAll() {
-        try {
-          if (tableRef.value) {
-            console.log('table data:', tableRef.value.getDataSource());
-          }
-
-          const [values, taskValues] = await Promise.all([validate(), validateTaskForm()]);
-          console.log('form data:', values, taskValues);
-        } catch (error) {}
-      }
-
-      return { register, registerTask, submitAll, tableRef };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .high-form {
-    padding-bottom: 48px;
-  }
-
-  /** update-begin-author:taoyan date:2022-5-16 for:/issues/63 涓嬫媺妗唞-index闂 */
-  :deep(.ant-select-dropdown) {
-    z-index: 98 !important;
-  }
-  /** update-end-author:taoyan date:2022-5-16 for:/issues/63 涓嬫媺妗唞-index闂 */
-</style>
diff --git a/src/views/demo/page/form/step/Step1.vue b/src/views/demo/page/form/step/Step1.vue
deleted file mode 100644
index 74bae97..0000000
--- a/src/views/demo/page/form/step/Step1.vue
+++ /dev/null
@@ -1,103 +0,0 @@
-<template>
-  <div class="step1">
-    <div class="step1-form">
-      <BasicForm @register="register">
-        <template #fac="{ model, field }">
-          <a-input-group compact>
-            <a-select v-model:value="model['pay']" class="pay-select">
-              <a-select-option value="zfb"> 鏀粯瀹� </a-select-option>
-              <a-select-option value="yl"> 閾惰仈 </a-select-option>
-            </a-select>
-            <a-input class="pay-input" v-model:value="model[field]" />
-          </a-input-group>
-        </template>
-      </BasicForm>
-    </div>
-    <a-divider />
-    <h3>璇存槑</h3>
-    <h4>杞处鍒版敮浠樺疂璐︽埛</h4>
-    <p>
-      濡傛灉闇�瑕侊紝杩欓噷鍙互鏀句竴浜涘叧浜庝骇鍝佺殑甯歌闂璇存槑銆傚鏋滈渶瑕侊紝杩欓噷鍙互鏀句竴浜涘叧浜庝骇鍝佺殑甯歌闂璇存槑銆傚鏋滈渶瑕侊紝杩欓噷鍙互鏀句竴浜涘叧浜庝骇鍝佺殑甯歌闂璇存槑銆�
-    </p>
-
-    <h4>杞处鍒伴摱琛屽崱</h4>
-    <p>
-      濡傛灉闇�瑕侊紝杩欓噷鍙互鏀句竴浜涘叧浜庝骇鍝佺殑甯歌闂璇存槑銆傚鏋滈渶瑕侊紝杩欓噷鍙互鏀句竴浜涘叧浜庝骇鍝佺殑甯歌闂璇存槑銆傚鏋滈渶瑕侊紝杩欓噷鍙互鏀句竴浜涘叧浜庝骇鍝佺殑甯歌闂璇存槑銆�
-    </p>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form';
-  import { step1Schemas } from './data';
-
-  import { Select, Input, Divider } from 'ant-design-vue';
-  export default defineComponent({
-    components: {
-      BasicForm,
-      [Select.name]: Select,
-      ASelectOption: Select.Option,
-      [Input.name]: Input,
-      [Input.Group.name]: Input.Group,
-      [Divider.name]: Divider,
-    },
-    emits: ['next'],
-    setup(_, { emit }) {
-      const [register, { validate }] = useForm({
-        labelWidth: 200,
-        schemas: step1Schemas,
-        actionColOptions: {
-          span: 14,
-        },
-        showResetButton: false,
-        submitButtonOptions: {
-          text: '涓嬩竴姝�',
-        },
-        submitFunc: customSubmitFunc,
-      });
-
-      async function customSubmitFunc() {
-        try {
-          const values = await validate();
-          emit('next', values);
-        } catch (error) {}
-      }
-
-      return { register };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .step1 {
-    &-form {
-      width: 550px;
-      margin: 0 auto;
-    }
-
-    h3 {
-      margin: 0 0 12px;
-      font-size: 16px;
-      line-height: 32px;
-      color: @text-color;
-    }
-
-    h4 {
-      margin: 0 0 4px;
-      font-size: 14px;
-      line-height: 22px;
-      color: @text-color;
-    }
-
-    p {
-      color: @text-color;
-    }
-  }
-
-  .pay-select {
-    width: 20%;
-  }
-
-  .pay-input {
-    width: 70%;
-  }
-</style>
diff --git a/src/views/demo/page/form/step/Step2.vue b/src/views/demo/page/form/step/Step2.vue
deleted file mode 100644
index 94782b5..0000000
--- a/src/views/demo/page/form/step/Step2.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-<template>
-  <div class="step2">
-    <a-alert message="纭杞处鍚庯紝璧勯噾灏嗙洿鎺ユ墦鍏ュ鏂硅处鎴凤紝鏃犳硶閫�鍥炪��" show-icon />
-    <a-descriptions :column="1" class="mt-5">
-      <a-descriptions-item label="浠樻璐︽埛"> ant-design@alipay.com </a-descriptions-item>
-      <a-descriptions-item label="鏀舵璐︽埛"> test@example.com </a-descriptions-item>
-      <a-descriptions-item label="鏀舵浜哄鍚�"> Jeecg </a-descriptions-item>
-      <a-descriptions-item label="杞处閲戦"> 500鍏� </a-descriptions-item>
-    </a-descriptions>
-    <a-divider />
-    <BasicForm @register="register" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form';
-  import { step2Schemas } from './data';
-  import { Alert, Divider, Descriptions } from 'ant-design-vue';
-
-  export default defineComponent({
-    components: {
-      BasicForm,
-      [Alert.name]: Alert,
-      [Divider.name]: Divider,
-      [Descriptions.name]: Descriptions,
-      [Descriptions.Item.name]: Descriptions.Item,
-    },
-    emits: ['next', 'prev'],
-    setup(_, { emit }) {
-      const [register, { validate, setProps }] = useForm({
-        labelWidth: 120,
-        schemas: step2Schemas,
-        actionColOptions: {
-          span: 14,
-        },
-        resetButtonOptions: {
-          text: '涓婁竴姝�',
-        },
-        submitButtonOptions: {
-          text: '鎻愪氦',
-        },
-        resetFunc: customResetFunc,
-        submitFunc: customSubmitFunc,
-      });
-
-      async function customResetFunc() {
-        emit('prev');
-      }
-
-      async function customSubmitFunc() {
-        try {
-          const values = await validate();
-          setProps({
-            submitButtonOptions: {
-              loading: true,
-            },
-          });
-          setTimeout(() => {
-            setProps({
-              submitButtonOptions: {
-                loading: false,
-              },
-            });
-            emit('next', values);
-          }, 1500);
-        } catch (error) {}
-      }
-
-      return { register };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .step2 {
-    width: 550px;
-    margin: 0 auto;
-  }
-</style>
diff --git a/src/views/demo/page/form/step/Step3.vue b/src/views/demo/page/form/step/Step3.vue
deleted file mode 100644
index 6d17d12..0000000
--- a/src/views/demo/page/form/step/Step3.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-<template>
-  <div class="step3">
-    <a-result status="success" title="鎿嶄綔鎴愬姛" sub-title="棰勮涓ゅ皬鏃跺唴鍒拌处">
-      <template #extra>
-        <a-button type="primary" @click="redo"> 鍐嶈浆涓�绗� </a-button>
-        <a-button> 鏌ョ湅璐﹀崟 </a-button>
-      </template>
-    </a-result>
-    <div class="desc-wrap">
-      <a-descriptions :column="1" class="mt-5">
-        <a-descriptions-item label="浠樻璐︽埛"> ant-design@alipay.com </a-descriptions-item>
-        <a-descriptions-item label="鏀舵璐︽埛"> test@example.com </a-descriptions-item>
-        <a-descriptions-item label="鏀舵浜哄鍚�"> Jeecg </a-descriptions-item>
-        <a-descriptions-item label="杞处閲戦"> 500鍏� </a-descriptions-item>
-      </a-descriptions>
-    </div>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Result, Descriptions } from 'ant-design-vue';
-  export default defineComponent({
-    components: {
-      [Result.name]: Result,
-      [Descriptions.name]: Descriptions,
-      [Descriptions.Item.name]: Descriptions.Item,
-    },
-    emits: ['redo'],
-    setup(_, { emit }) {
-      return {
-        redo: () => {
-          emit('redo');
-        },
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .step3 {
-    width: 600px;
-    margin: 0 auto;
-  }
-
-  .desc-wrap {
-    padding: 24px 40px;
-    margin-top: 24px;
-    background-color: @background-color-light;
-  }
-</style>
diff --git a/src/views/demo/page/form/step/data.tsx b/src/views/demo/page/form/step/data.tsx
deleted file mode 100644
index de4c98e..0000000
--- a/src/views/demo/page/form/step/data.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import { FormSchema } from '/@/components/Form';
-
-export const step1Schemas: FormSchema[] = [
-  {
-    field: 'account',
-    component: 'Select',
-    label: '浠樻璐︽埛',
-    required: true,
-    defaultValue: '1',
-    componentProps: {
-      options: [
-        {
-          label: 'anncwb@126.com',
-          value: '1',
-        },
-      ],
-    },
-  },
-  {
-    field: 'fac',
-    component: 'InputGroup',
-    label: '鏀舵璐︽埛',
-    required: true,
-    defaultValue: 'test@example.com',
-    slot: 'fac',
-  },
-  {
-    field: 'pay',
-    component: 'Input',
-    label: '',
-    defaultValue: 'zfb',
-    show: false,
-  },
-  {
-    field: 'payeeName',
-    component: 'Input',
-    label: '鏀舵浜哄鍚�',
-    defaultValue: 'Jeecg',
-    required: true,
-  },
-  {
-    field: 'money',
-    component: 'Input',
-    label: '杞处閲戦',
-    defaultValue: '500',
-    required: true,
-    renderComponentContent: () => {
-      return {
-        prefix: () => '锟�',
-      };
-    },
-  },
-];
-
-export const step2Schemas: FormSchema[] = [
-  {
-    field: 'pwd',
-    component: 'InputPassword',
-    label: '鏀粯瀵嗙爜',
-    required: true,
-    defaultValue: '123456',
-  },
-];
diff --git a/src/views/demo/page/form/step/index.vue b/src/views/demo/page/form/step/index.vue
deleted file mode 100644
index f762c6c..0000000
--- a/src/views/demo/page/form/step/index.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-<template>
-  <PageWrapper title="鍒嗘琛ㄥ崟" contentBackground content=" 灏嗕竴涓啑闀挎垨鐢ㄦ埛涓嶇啛鎮夌殑琛ㄥ崟浠诲姟鍒嗘垚澶氫釜姝ラ锛屾寚瀵肩敤鎴峰畬鎴愩��" contentClass="p-4">
-    <div class="step-form-form">
-      <a-steps :current="current">
-        <a-step title="濉啓杞处淇℃伅" />
-        <a-step title="纭杞处淇℃伅" />
-        <a-step title="瀹屾垚" />
-      </a-steps>
-    </div>
-    <div class="mt-5">
-      <Step1 @next="handleStep1Next" v-show="current === 0" />
-      <Step2 @prev="handleStepPrev" @next="handleStep2Next" v-show="current === 1" v-if="initSetp2" />
-      <Step3 v-show="current === 2" @redo="handleRedo" v-if="initSetp3" />
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, reactive, toRefs } from 'vue';
-  import Step1 from './Step1.vue';
-  import Step2 from './Step2.vue';
-  import Step3 from './Step3.vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { Steps } from 'ant-design-vue';
-
-  export default defineComponent({
-    name: 'FormStepPage',
-    components: {
-      Step1,
-      Step2,
-      Step3,
-      PageWrapper,
-      [Steps.name]: Steps,
-      [Steps.Step.name]: Steps.Step,
-    },
-    setup() {
-      const current = ref(0);
-
-      const state = reactive({
-        initSetp2: false,
-        initSetp3: false,
-      });
-
-      function handleStep1Next(step1Values: any) {
-        current.value++;
-        state.initSetp2 = true;
-        console.log(step1Values);
-      }
-
-      function handleStepPrev() {
-        current.value--;
-      }
-
-      function handleStep2Next(step2Values: any) {
-        current.value++;
-        state.initSetp3 = true;
-        console.log(step2Values);
-      }
-
-      function handleRedo() {
-        current.value = 0;
-        state.initSetp2 = false;
-        state.initSetp3 = false;
-      }
-
-      return {
-        current,
-        handleStep1Next,
-        handleStep2Next,
-        handleRedo,
-        handleStepPrev,
-        ...toRefs(state),
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .step-form-content {
-    padding: 24px;
-    background-color: @component-background;
-  }
-
-  .step-form-form {
-    width: 750px;
-    margin: 0 auto;
-  }
-</style>
diff --git a/src/views/demo/page/list/basic/data.tsx b/src/views/demo/page/list/basic/data.tsx
deleted file mode 100644
index 193328d..0000000
--- a/src/views/demo/page/list/basic/data.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-export const cardList = (() => {
-  const result: any[] = [];
-  for (let i = 0; i < 6; i++) {
-    result.push({
-      id: i,
-      title: 'Jeecg Admin',
-      description: '鍩轰簬Vue Next, TypeScript, Ant Design Vue瀹炵幇鐨勪竴濂楀畬鏁寸殑浼佷笟绾у悗鍙扮鐞嗙郴缁�',
-      datetime: '2020-11-26 17:39',
-      extra: '缂栬緫',
-      icon: 'logos:vue',
-      color: '#1890ff',
-      author: 'Jeecg',
-      percent: 20 * (i + 1),
-    });
-  }
-  return result;
-})();
diff --git a/src/views/demo/page/list/basic/index.vue b/src/views/demo/page/list/basic/index.vue
deleted file mode 100644
index 26fff5b..0000000
--- a/src/views/demo/page/list/basic/index.vue
+++ /dev/null
@@ -1,161 +0,0 @@
-<template>
-	<PageWrapper :class="prefixCls" title="鏍囧噯鍒楄〃">
-		<div :class="`${prefixCls}__top`">
-			<a-row :gutter="12">
-				<a-col :span="8" :class="`${prefixCls}__top-col`">
-					<div>鎴戠殑寰呭姙</div>
-					<p>8涓换鍔�</p>
-				</a-col>
-				<a-col :span="8" :class="`${prefixCls}__top-col`">
-					<div>鏈懆浠诲姟骞冲潎澶勭悊鏃堕棿</div>
-					<p>32鍒嗛挓</p>
-				</a-col>
-				<a-col :span="8" :class="`${prefixCls}__top-col`">
-					<div>鏈懆瀹屾垚浠诲姟鏁�</div>
-					<p>24涓换鍔�</p>
-				</a-col>
-			</a-row>
-		</div>
-
-		<div :class="`${prefixCls}__content`">
-			<a-list :pagination="pagination">
-				<template v-for="item in list" :key="item.id">
-					<a-list-item class="list">
-						<a-list-item-meta>
-							<template #avatar>
-								<Icon class="icon" v-if="item.icon" :icon="item.icon" :color="item.color" />
-							</template>
-							<template #title>
-								<span>{{ item.title }}</span>
-								<div class="extra" v-if="item.extra">
-									{{ item.extra }}
-								</div>
-							</template>
-							<template #description>
-								<div class="description">
-									{{ item.description }}
-								</div>
-								<div class="info">
-									<div><span>Owner</span>{{ item.author }}</div>
-									<div><span>寮�濮嬫椂闂�</span>{{ item.datetime }}</div>
-								</div>
-								<div class="progress">
-									<Progress :percent="item.percent" status="active" />
-								</div>
-							</template>
-						</a-list-item-meta>
-					</a-list-item>
-				</template>
-			</a-list>
-		</div>
-	</PageWrapper>
-</template>
-<script lang="ts">
-	import { Progress, Row, Col } from 'ant-design-vue'
-	import { defineComponent } from 'vue'
-	import Icon from '/@/components/Icon/index'
-	import { cardList } from './data'
-	import { PageWrapper } from '/@/components/Page'
-	import { List } from 'ant-design-vue'
-
-	export default defineComponent({
-		components: {
-			Icon,
-			Progress,
-			PageWrapper,
-			[List.name]: List,
-			[List.Item.name]: List.Item,
-			AListItemMeta: List.Item.Meta,
-			[Row.name]: Row,
-			[Col.name]: Col,
-		},
-		setup() {
-			return {
-				prefixCls: 'list-basic',
-				list: cardList,
-				pagination: {
-					show: true,
-					pageSize: 3,
-				},
-			}
-		},
-	})
-</script>
-<style lang="less" scoped>
-	.list-basic {
-		&__top {
-			padding: 24px;
-			text-align: center;
-			background-color: @component-background;
-
-			&-col {
-				&:not(:last-child) {
-					border-right: 1px dashed @border-color-base;
-				}
-
-				div {
-					margin-bottom: 12px;
-					font-size: 14px;
-					line-height: 22px;
-					color: @text-color;
-				}
-
-				p {
-					margin: 0;
-					font-size: 24px;
-					line-height: 32px;
-					color: @text-color;
-				}
-			}
-		}
-
-		&__content {
-			padding: 24px;
-			margin-top: 12px;
-			background-color: @component-background;
-
-			.list {
-				position: relative;
-			}
-
-			.icon {
-				font-size: 40px !important;
-			}
-
-			.extra {
-				position: absolute;
-				top: 20px;
-				right: 15px;
-				font-weight: normal;
-				color: @primary-color;
-				cursor: pointer;
-			}
-
-			.description {
-				display: inline-block;
-				width: 40%;
-			}
-
-			.info {
-				display: inline-block;
-				width: 30%;
-				text-align: center;
-
-				div {
-					display: inline-block;
-					padding: 0 20px;
-
-					span {
-						display: block;
-					}
-				}
-			}
-
-			.progress {
-				display: inline-block;
-				width: 15%;
-				vertical-align: top;
-			}
-		}
-	}
-</style>
diff --git a/src/views/demo/page/list/card/data.tsx b/src/views/demo/page/list/card/data.tsx
deleted file mode 100644
index 96d9c29..0000000
--- a/src/views/demo/page/list/card/data.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-export const cardList = (() => {
-  const result: any[] = [];
-  for (let i = 0; i < 12; i++) {
-    result.push({
-      title: 'Jeecg Admin',
-      icon: 'logos:vue',
-      color: '#1890ff',
-      active: '100',
-      new: '1,799',
-      download: 'bx:bx-download',
-    });
-  }
-  return result;
-})();
diff --git a/src/views/demo/page/list/card/index.vue b/src/views/demo/page/list/card/index.vue
deleted file mode 100644
index f868653..0000000
--- a/src/views/demo/page/list/card/index.vue
+++ /dev/null
@@ -1,102 +0,0 @@
-<template>
-  <PageWrapper :class="prefixCls" title="鍗$墖鍒楄〃">
-    <template #headerContent>
-      鍩轰簬Vue Next, TypeScript, Ant Design Vue瀹炵幇鐨勪竴濂楀畬鏁寸殑浼佷笟绾у悗鍙扮鐞嗙郴缁熴��
-      <div :class="`${prefixCls}__link`">
-        <a><Icon icon="bx:bx-paper-plane" color="#1890ff" /><span>寮�濮�</span></a>
-        <a><Icon icon="carbon:warning" color="#1890ff" /><span>绠�浠�</span></a>
-        <a><Icon icon="ion:document-text-outline" color="#1890ff" /><span>鏂囨。</span></a>
-      </div>
-    </template>
-
-    <div :class="`${prefixCls}__content`">
-      <a-list>
-        <a-row :gutter="16">
-          <template v-for="item in list" :key="item.title">
-            <a-col :span="6">
-              <a-list-item>
-                <a-card :hoverable="true" :class="`${prefixCls}__card`">
-                  <div :class="`${prefixCls}__card-title`">
-                    <Icon class="icon" v-if="item.icon" :icon="item.icon" :color="item.color" />
-                    {{ item.title }}
-                  </div>
-                  <div :class="`${prefixCls}__card-detail`"> 鍩轰簬Vue Next, TypeScript, Ant Design Vue瀹炵幇鐨勪竴濂楀畬鏁寸殑浼佷笟绾у悗鍙扮鐞嗙郴缁� </div>
-                </a-card>
-              </a-list-item>
-            </a-col>
-          </template>
-        </a-row>
-      </a-list>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import Icon from '/@/components/Icon/index';
-  import { cardList } from './data';
-  import { PageWrapper } from '/@/components/Page';
-  import { Card, Row, Col, List } from 'ant-design-vue';
-
-  export default defineComponent({
-    components: {
-      Icon,
-      PageWrapper,
-      [Card.name]: Card,
-      [List.name]: List,
-      [List.Item.name]: List.Item,
-      [Row.name]: Row,
-      [Col.name]: Col,
-    },
-    setup() {
-      return {
-        prefixCls: 'list-card',
-        list: cardList,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .list-card {
-    &__link {
-      margin-top: 10px;
-      font-size: 14px;
-
-      a {
-        margin-right: 30px;
-      }
-
-      span {
-        margin-left: 5px;
-      }
-    }
-
-    &__card {
-      width: 100%;
-      margin-bottom: -8px;
-
-      .ant-card-body {
-        padding: 16px;
-      }
-
-      &-title {
-        margin-bottom: 5px;
-        font-size: 16px;
-        font-weight: 500;
-        color: @text-color;
-
-        .icon {
-          margin-top: -5px;
-          margin-right: 10px;
-          font-size: 38px !important;
-        }
-      }
-
-      &-detail {
-        padding-top: 10px;
-        padding-left: 30px;
-        font-size: 14px;
-        color: @text-color-secondary;
-      }
-    }
-  }
-</style>
diff --git a/src/views/demo/page/list/search/data.tsx b/src/views/demo/page/list/search/data.tsx
deleted file mode 100644
index 948bf5b..0000000
--- a/src/views/demo/page/list/search/data.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import { FormSchema } from '/@/components/Form/index';
-
-export const searchList = (() => {
-  const result: any[] = [];
-  for (let i = 0; i < 6; i++) {
-    result.push({
-      id: i,
-      title: 'Jeecg Admin',
-      description: ['Jeecg', '璁捐璇█', 'Typescript'],
-      content: '鍩轰簬Vue Next, TypeScript, Ant Design瀹炵幇鐨勪竴濂楀畬鏁寸殑浼佷笟绾у悗鍙扮鐞嗙郴缁熴��',
-      time: '2020-11-14 11:20',
-    });
-  }
-  return result;
-})();
-
-export const actions: any[] = [
-  { icon: 'clarity:star-line', text: '156', color: '#018ffb' },
-  { icon: 'bx:bxs-like', text: '156', color: '#459ae8' },
-  { icon: 'bx:bxs-message-dots', text: '2', color: '#42d27d' },
-];
-
-export const schemas: FormSchema[] = [
-  {
-    field: 'field1',
-    component: 'InputSearch',
-    label: '椤圭洰鍚�',
-    colProps: {
-      span: 8,
-    },
-    componentProps: {
-      onChange: (e: any) => {
-        console.log(e);
-      },
-    },
-  },
-];
diff --git a/src/views/demo/page/list/search/index.vue b/src/views/demo/page/list/search/index.vue
deleted file mode 100644
index e498f9a..0000000
--- a/src/views/demo/page/list/search/index.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-  <PageWrapper :class="prefixCls" title="鎼滅储鍒楄〃">
-    <template #headerContent>
-      <BasicForm :class="`${prefixCls}__header-form`" :labelWidth="100" :schemas="schemas" :showActionButtonGroup="false" />
-    </template>
-
-    <div :class="`${prefixCls}__container`">
-      <a-list>
-        <template v-for="item in list" :key="item.id">
-          <a-list-item>
-            <a-list-item-meta>
-              <template #description>
-                <div :class="`${prefixCls}__content`">
-                  {{ item.content }}
-                </div>
-                <div :class="`${prefixCls}__action`">
-                  <template v-for="action in actions" :key="action.icon">
-                    <div :class="`${prefixCls}__action-item`">
-                      <Icon v-if="action.icon" :class="`${prefixCls}__action-icon`" :icon="action.icon" :color="action.color" />
-                      {{ action.text }}
-                    </div>
-                  </template>
-                  <span :class="`${prefixCls}__time`">{{ item.time }}</span>
-                </div>
-              </template>
-              <template #title>
-                <p :class="`${prefixCls}__title`">
-                  {{ item.title }}
-                </p>
-                <div>
-                  <template v-for="tag in item.description" :key="tag">
-                    <Tag class="mb-2">
-                      {{ tag }}
-                    </Tag>
-                  </template>
-                </div>
-              </template>
-            </a-list-item-meta>
-          </a-list-item>
-        </template>
-      </a-list>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { Tag } from 'ant-design-vue';
-  import { defineComponent } from 'vue';
-  import Icon from '/@/components/Icon/index';
-  import { BasicForm } from '/@/components/Form/index';
-  import { actions, searchList, schemas } from './data';
-  import { PageWrapper } from '/@/components/Page';
-  import { List } from 'ant-design-vue';
-
-  export default defineComponent({
-    components: {
-      Icon,
-      Tag,
-      BasicForm,
-      PageWrapper,
-      [List.name]: List,
-      [List.Item.name]: List.Item,
-      AListItemMeta: List.Item.Meta,
-    },
-    setup() {
-      return {
-        prefixCls: 'list-search',
-        list: searchList,
-        actions,
-        schemas,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .list-search {
-    &__header {
-      &-form {
-        margin-bottom: -16px;
-      }
-    }
-
-    &__container {
-      padding: 12px;
-      background-color: @component-background;
-    }
-
-    &__title {
-      margin-bottom: 12px;
-      font-size: 18px;
-    }
-
-    &__content {
-      color: @text-color-secondary;
-    }
-
-    &__action {
-      margin-top: 10px;
-
-      &-item {
-        display: inline-block;
-        padding: 0 16px;
-        color: @text-color-secondary;
-
-        &:nth-child(1) {
-          padding-left: 0;
-        }
-
-        &:nth-child(1),
-        &:nth-child(2) {
-          border-right: 1px solid @border-color-base;
-        }
-      }
-
-      &-icon {
-        margin-right: 3px;
-      }
-    }
-
-    &__time {
-      position: absolute;
-      right: 20px;
-      color: rgba(0, 0, 0, 0.45);
-    }
-  }
-</style>
diff --git a/src/views/demo/page/result/fail/index.vue b/src/views/demo/page/result/fail/index.vue
deleted file mode 100644
index 73b65a9..0000000
--- a/src/views/demo/page/result/fail/index.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-<template>
-  <div class="m-5 result-error">
-    <Result status="error" title="鎻愪氦澶辫触" sub-title="璇锋牳瀵瑰苟淇敼浠ヤ笅淇℃伅鍚庯紝鍐嶉噸鏂版彁浜ゃ��">
-      <template #extra>
-        <a-button key="console" type="primary"> 杩斿洖淇敼 </a-button>
-      </template>
-    </Result>
-    <div class="result-error__content">
-      <div class="result-error__content-title"> 鎮ㄦ彁浜ょ殑鍐呭鏈夊涓嬮敊璇細 </div>
-      <div class="mb-4">
-        <CloseCircleOutlined class="mr-2 result-error__content-icon" />
-        鎮ㄧ殑璐︽埛宸茶鍐荤粨
-        <a class="ml-4">绔嬪嵆瑙e喕 ></a>
-      </div>
-      <div class="mb-4">
-        <CloseCircleOutlined class="mr-2 result-error__content-icon" />
-        鎮ㄧ殑璐︽埛杩樹笉鍏峰鐢宠璧勬牸
-        <a class="ml-4">绔嬪嵆瑙e喕 ></a>
-      </div>
-    </div>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Result } from 'ant-design-vue';
-  import { CloseCircleOutlined } from '@ant-design/icons-vue';
-  export default defineComponent({
-    components: {
-      Result,
-      CloseCircleOutlined,
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .result-error {
-    padding: 48px 32px;
-    background-color: @component-background;
-
-    &__content {
-      padding: 24px 40px;
-      background-color: @background-color-light;
-
-      &-title {
-        margin-bottom: 16px;
-        font-size: 16px;
-        font-weight: 500;
-      }
-
-      &-icon {
-        color: #ff4d4f;
-      }
-    }
-  }
-</style>
diff --git a/src/views/demo/page/result/success/index.vue b/src/views/demo/page/result/success/index.vue
deleted file mode 100644
index 8389207..0000000
--- a/src/views/demo/page/result/success/index.vue
+++ /dev/null
@@ -1,58 +0,0 @@
-<template>
-  <div class="m-5 result-success">
-    <Result
-      status="success"
-      title="鎻愪氦鎴愬姛"
-      sub-title="鎻愪氦缁撴灉椤电敤浜庡弽棣堜竴绯诲垪鎿嶄綔浠诲姟鐨勫鐞嗙粨鏋滐紝 濡傛灉浠呮槸绠�鍗曟搷浣滐紝浣跨敤 Message 鍏ㄥ眬鎻愮ず鍙嶉鍗冲彲銆� 鏈枃瀛楀尯鍩熷彲浠ュ睍绀虹畝鍗曠殑琛ュ厖璇存槑锛屽鏋滄湁绫讳技灞曠ず 鈥滃崟鎹�濈殑闇�姹傦紝涓嬮潰杩欎釜鐏拌壊鍖哄煙鍙互鍛堢幇姣旇緝澶嶆潅鐨勫唴瀹广��"
-    >
-      <template #extra>
-        <a-button key="console" type="primary"> 杩斿洖鍒楄〃 </a-button>
-        <a-button key="buy"> 鏌ョ湅椤圭洰 </a-button>
-        <a-button key="buy"> 鎵撳嵃 </a-button>
-      </template>
-    </Result>
-    <div class="result-success__content">
-      <Descriptions title="椤圭洰鍚嶇О">
-        <DescriptionItem label="椤圭洰 ID"> 111222 </DescriptionItem>
-        <DescriptionItem label="璐熻矗浜�"> Jeecg </DescriptionItem>
-        <DescriptionItem label="鐢熸晥鏃堕棿"> 2016-12-12 ~ 2017-12-12 </DescriptionItem>
-      </Descriptions>
-      <Steps :current="1" progress-dot size="small">
-        <Step title="鍒涘缓椤圭洰">
-          <template #description> <div>Jeecg</div> <p>2016-12-12 12:32</p> </template>
-        </Step>
-        <Step title="閮ㄩ棬鍒濆">
-          <template #description>
-            <p>Chad</p>
-          </template>
-        </Step>
-        <Step title="璐㈠姟澶嶆牳" />
-        <Step title="瀹屾垚" />
-      </Steps>
-    </div>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Result, Steps, Descriptions } from 'ant-design-vue';
-  export default defineComponent({
-    components: {
-      Result,
-      Steps,
-      Step: Steps.Step,
-      Descriptions,
-      DescriptionItem: Descriptions.Item,
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .result-success {
-    padding: 48px 32px;
-    background-color: @component-background;
-
-    &__content {
-      padding: 24px 40px;
-      background-color: @background-color-light;
-    }
-  }
-</style>
diff --git a/src/views/demo/permission/CurrentPermissionMode.vue b/src/views/demo/permission/CurrentPermissionMode.vue
deleted file mode 100644
index 43b9eb3..0000000
--- a/src/views/demo/permission/CurrentPermissionMode.vue
+++ /dev/null
@@ -1,32 +0,0 @@
-<template>
-  <div class="mt-2">
-    褰撳墠鏉冮檺妯″紡锛�
-    <a-button type="link">
-      {{ permissionMode === PermissionModeEnum.BACK ? '鍚庡彴鏉冮檺妯″紡' : '鍓嶇瑙掕壊鏉冮檺妯″紡' }}
-    </a-button>
-    <a-button class="ml-4" @click="togglePermissionMode" type="primary"> 鍒囨崲鏉冮檺妯″紡 </a-button>
-    <Divider />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, computed } from 'vue';
-  import { useAppStore } from '/@/store/modules/app';
-  import { PermissionModeEnum } from '/@/enums/appEnum';
-  import { Divider } from 'ant-design-vue';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  export default defineComponent({
-    name: 'CurrentPermissionMode',
-    components: { Divider },
-    setup() {
-      const appStore = useAppStore();
-      const permissionMode = computed(() => appStore.getProjectConfig.permissionMode);
-      const { togglePermissionMode } = usePermission();
-
-      return {
-        permissionMode,
-        PermissionModeEnum,
-        togglePermissionMode,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/permission/back/Btn.vue b/src/views/demo/permission/back/Btn.vue
deleted file mode 100644
index 87dde12..0000000
--- a/src/views/demo/permission/back/Btn.vue
+++ /dev/null
@@ -1,88 +0,0 @@
-<template>
-  <PageWrapper contentBackground title="鎸夐挳鏉冮檺鎺у埗" contentClass="p-4">
-    <CurrentPermissionMode />
-    <p>
-      褰撳墠鎷ユ湁鐨刢ode鍒楄〃: <a> {{ permissionStore.getPermCodeList }} </a>
-    </p>
-    <Divider />
-    <Alert class="mt-4" type="info" message="鐐瑰嚮鍚庤鏌ョ湅鎸夐挳鍙樺寲(蹇呴』澶勪簬鍚庡彴鏉冮檺妯″紡鎵嶅彲娴嬭瘯姝ら〉闈㈡墍灞曠ず鐨勫姛鑳�)" show-icon />
-    <Divider />
-    <a-button type="primary" class="mr-2" @click="switchToken(2)" :disabled="!isBackPremissionMode"> 鐐瑰嚮鍒囨崲鎸夐挳鏉冮檺(鐢ㄦ埛id涓�2) </a-button>
-    <a-button type="primary" @click="switchToken(1)" :disabled="!isBackPremissionMode"> 鐐瑰嚮鍒囨崲鎸夐挳鏉冮檺(鐢ㄦ埛id涓�1,榛樿) </a-button>
-
-    <template v-if="isBackPremissionMode">
-      <Divider>缁勪欢鏂瑰紡鍒ゆ柇鏉冮檺</Divider>
-      <Authority :value="'1000'">
-        <a-button type="primary" class="mx-4"> 鎷ユ湁code ['1000']鏉冮檺鍙 </a-button>
-      </Authority>
-
-      <Authority :value="'2000'">
-        <a-button color="success" class="mx-4"> 鎷ユ湁code ['2000']鏉冮檺鍙 </a-button>
-      </Authority>
-
-      <Authority :value="['1000', '2000']">
-        <a-button color="error" class="mx-4"> 鎷ユ湁code ['1000','2000']瑙掕壊鏉冮檺鍙 </a-button>
-      </Authority>
-
-      <Divider>鍑芥暟鏂瑰紡鏂瑰紡鍒ゆ柇鏉冮檺</Divider>
-      <a-button v-if="hasPermission('1000')" type="primary" class="mx-4"> 鎷ユ湁code ['1000']鏉冮檺鍙 </a-button>
-
-      <a-button v-if="hasPermission('2000')" color="success" class="mx-4"> 鎷ユ湁code ['2000']鏉冮檺鍙 </a-button>
-
-      <a-button v-if="hasPermission(['1000', '2000'])" color="error" class="mx-4"> 鎷ユ湁code ['1000','2000']瑙掕壊鏉冮檺鍙 </a-button>
-
-      <Divider>鎸囦护鏂瑰紡鏂瑰紡鍒ゆ柇鏉冮檺(璇ユ柟寮忎笉鑳藉姩鎬佷慨鏀规潈闄�.)</Divider>
-      <a-button v-auth="'1000'" type="primary" class="mx-4"> 鎷ユ湁code ['1000']鏉冮檺鍙 </a-button>
-
-      <a-button v-auth="'2000'" color="success" class="mx-4"> 鎷ユ湁code ['2000']鏉冮檺鍙 </a-button>
-
-      <a-button v-auth="['1000', '2000']" color="error" class="mx-4"> 鎷ユ湁code ['1000','2000']瑙掕壊鏉冮檺鍙 </a-button>
-    </template>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, computed } from 'vue';
-  import { Alert, Divider } from 'ant-design-vue';
-  import CurrentPermissionMode from '../CurrentPermissionMode.vue';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  import { Authority } from '/@/components/Authority';
-  import { usePermissionStore } from '/@/store/modules/permission';
-  import { PermissionModeEnum } from '/@/enums/appEnum';
-  import { PageWrapper } from '/@/components/Page';
-  import { useAppStore } from '/@/store/modules/app';
-  import { useUserStore } from '/@/store/modules/user';
-
-  export default defineComponent({
-    components: { Alert, PageWrapper, CurrentPermissionMode, Divider, Authority },
-    setup() {
-      const { hasPermission } = usePermission();
-      const permissionStore = usePermissionStore();
-      const appStore = useAppStore();
-      const userStore = useUserStore();
-
-      const isBackPremissionMode = computed(() => appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK);
-
-      async function switchToken(userId: number) {
-        // 鏈嚱鏁板垏鎹㈢敤鎴风櫥褰昑oken鐨勯儴鍒嗕粎鐢ㄤ簬婕旂ず锛屽疄闄呯敓浜ф椂鍒囨崲韬唤搴斿綋閲嶆柊鐧诲綍
-        const token = 'fakeToken' + userId;
-        userStore.setToken(token);
-
-        // 閲嶆柊鑾峰彇鐢ㄦ埛淇℃伅鍜岃彍鍗�
-        userStore.getUserInfoAction();
-        permissionStore.changePermissionCode();
-      }
-
-      return {
-        hasPermission,
-        permissionStore,
-        switchToken,
-        isBackPremissionMode,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .demo {
-    background-color: @component-background;
-  }
-</style>
diff --git a/src/views/demo/permission/back/index.vue b/src/views/demo/permission/back/index.vue
deleted file mode 100644
index 84c44f3..0000000
--- a/src/views/demo/permission/back/index.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-<template>
-  <PageWrapper
-    title="鍚庡彴鏉冮檺绀轰緥"
-    contentBackground
-    contentClass="p-4"
-    content="鐩墠mock浜嗕袱缁勬暟鎹紝 id涓�1 鍜� 2 鍏蜂綋杩斿洖鐨勮彍鍗曞彲浠ュ湪mock/sys/menu.ts鍐呮煡鐪�"
-  >
-    <CurrentPermissionMode />
-
-    <Alert class="mt-4" type="info" message="鐐瑰嚮鍚庤鏌ョ湅宸︿晶鑿滃崟鍙樺寲" show-icon />
-
-    <div class="mt-4">
-      鏉冮檺鍒囨崲(璇峰厛鍒囨崲鏉冮檺妯″紡涓哄悗鍙版潈闄愭ā寮�):
-      <a-button-group>
-        <a-button @click="switchToken(1)" :disabled="!isBackPremissionMode"> 鑾峰彇鐢ㄦ埛id涓�1鐨勮彍鍗� </a-button>
-        <a-button @click="switchToken(2)" :disabled="!isBackPremissionMode"> 鑾峰彇鐢ㄦ埛id涓�2鐨勮彍鍗� </a-button>
-      </a-button-group>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, computed } from 'vue';
-  import CurrentPermissionMode from '../CurrentPermissionMode.vue';
-  import { RoleEnum } from '/@/enums/roleEnum';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  import { useUserStore } from '/@/store/modules/user';
-  import { PageWrapper } from '/@/components/Page';
-  import { PermissionModeEnum } from '/@/enums/appEnum';
-  import { useAppStore } from '/@/store/modules/app';
-  import { Alert } from 'ant-design-vue';
-  export default defineComponent({
-    components: { Alert, CurrentPermissionMode, PageWrapper },
-    setup() {
-      const { refreshMenu } = usePermission();
-      const userStore = useUserStore();
-      const appStore = useAppStore();
-
-      const isBackPremissionMode = computed(() => appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK);
-
-      async function switchToken(userId: number) {
-        // 鏈嚱鏁板垏鎹㈢敤鎴风櫥褰昑oken鐨勯儴鍒嗕粎鐢ㄤ簬婕旂ず锛屽疄闄呯敓浜ф椂鍒囨崲韬唤搴斿綋閲嶆柊鐧诲綍
-        const token = 'fakeToken' + userId;
-        userStore.setToken(token);
-
-        // 閲嶆柊鑾峰彇鐢ㄦ埛淇℃伅鍜岃彍鍗�
-        userStore.getUserInfoAction();
-        refreshMenu();
-      }
-
-      return {
-        RoleEnum,
-        refreshMenu,
-        switchToken,
-        isBackPremissionMode,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .demo {
-    background-color: @component-background;
-  }
-</style>
diff --git a/src/views/demo/permission/front/AuthPageA.vue b/src/views/demo/permission/front/AuthPageA.vue
deleted file mode 100644
index e5efa64..0000000
--- a/src/views/demo/permission/front/AuthPageA.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-<template>
-  <div class="m-10 auth-page"> Super 瑙掕壊鍙 </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  export default defineComponent({});
-</script>
-<style lang="less" scoped>
-  .auth-page {
-    display: flex;
-    height: 300px;
-    font-size: 24px;
-    color: #fff;
-    background-color: #409efe;
-    border-radius: 12px;
-    justify-content: center;
-    align-items: center;
-  }
-</style>
diff --git a/src/views/demo/permission/front/AuthPageB.vue b/src/views/demo/permission/front/AuthPageB.vue
deleted file mode 100644
index ca58426..0000000
--- a/src/views/demo/permission/front/AuthPageB.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-<template>
-  <div class="m-10 auth-page"> Test 瑙掕壊鍙 </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  export default defineComponent({});
-</script>
-<style lang="less" scoped>
-  .auth-page {
-    display: flex;
-    height: 300px;
-    font-size: 24px;
-    color: #fff;
-    background-color: #409efe;
-    border-radius: 12px;
-    justify-content: center;
-    align-items: center;
-  }
-</style>
diff --git a/src/views/demo/permission/front/Btn.vue b/src/views/demo/permission/front/Btn.vue
deleted file mode 100644
index d7d3f97..0000000
--- a/src/views/demo/permission/front/Btn.vue
+++ /dev/null
@@ -1,85 +0,0 @@
-<template>
-  <PageWrapper
-    title="鍓嶇鏉冮檺鎸夐挳绀轰緥"
-    contentBackground
-    contentClass="p-4"
-    content="鐢变簬鍒锋柊鐨勬椂鍊欎細璇锋眰鐢ㄦ埛淇℃伅鎺ュ彛锛屼細鏍规嵁鎺ュ彛閲嶇疆瑙掕壊淇℃伅锛屾墍浠ュ埛鏂板悗鐣岄潰浼氭仮澶嶅師鏍凤紝濡傛灉涓嶉渶瑕侊紝鍙互娉ㄩ噴 src/layout/default/index鍐呯殑鑾峰彇鐢ㄦ埛淇℃伅鎺ュ彛"
-  >
-    <CurrentPermissionMode />
-
-    <p>
-      褰撳墠瑙掕壊: <a> {{ userStore.getRoleList }} </a>
-    </p>
-    <Alert class="mt-4" type="info" message="鐐瑰嚮鍚庤鏌ョ湅鎸夐挳鍙樺寲" show-icon />
-
-    <div class="mt-4">
-      鏉冮檺鍒囨崲(璇峰厛鍒囨崲鏉冮檺妯″紡涓哄墠绔鑹叉潈闄愭ā寮�):
-      <a-button-group>
-        <a-button @click="changeRole(RoleEnum.SUPER)" :type="isSuper ? 'primary' : 'default'">
-          {{ RoleEnum.SUPER }}
-        </a-button>
-        <a-button @click="changeRole(RoleEnum.TEST)" :type="isTest ? 'primary' : 'default'">
-          {{ RoleEnum.TEST }}
-        </a-button>
-      </a-button-group>
-    </div>
-    <Divider>缁勪欢鏂瑰紡鍒ゆ柇鏉冮檺(鏈夐渶瑕佸彲浠ヨ嚜琛屽叏灞�娉ㄥ唽)</Divider>
-    <Authority :value="RoleEnum.SUPER">
-      <a-button type="primary" class="mx-4"> 鎷ユ湁super瑙掕壊鏉冮檺鍙 </a-button>
-    </Authority>
-
-    <Authority :value="RoleEnum.TEST">
-      <a-button color="success" class="mx-4"> 鎷ユ湁test瑙掕壊鏉冮檺鍙 </a-button>
-    </Authority>
-
-    <Authority :value="[RoleEnum.TEST, RoleEnum.SUPER]">
-      <a-button color="error" class="mx-4"> 鎷ユ湁[test,super]瑙掕壊鏉冮檺鍙 </a-button>
-    </Authority>
-
-    <Divider>鍑芥暟鏂瑰紡鏂瑰紡鍒ゆ柇鏉冮檺(閫傜敤浜庡嚱鏁板唴閮ㄨ繃婊�)</Divider>
-    <a-button v-if="hasPermission(RoleEnum.SUPER)" type="primary" class="mx-4"> 鎷ユ湁super瑙掕壊鏉冮檺鍙 </a-button>
-
-    <a-button v-if="hasPermission(RoleEnum.TEST)" color="success" class="mx-4"> 鎷ユ湁test瑙掕壊鏉冮檺鍙 </a-button>
-
-    <a-button v-if="hasPermission([RoleEnum.TEST, RoleEnum.SUPER])" color="error" class="mx-4"> 鎷ユ湁[test,super]瑙掕壊鏉冮檺鍙 </a-button>
-
-    <Divider>鎸囦护鏂瑰紡鏂瑰紡鍒ゆ柇鏉冮檺(璇ユ柟寮忎笉鑳藉姩鎬佷慨鏀规潈闄�.)</Divider>
-    <a-button v-auth="RoleEnum.SUPER" type="primary" class="mx-4"> 鎷ユ湁super瑙掕壊鏉冮檺鍙 </a-button>
-
-    <a-button v-auth="RoleEnum.TEST" color="success" class="mx-4"> 鎷ユ湁test瑙掕壊鏉冮檺鍙 </a-button>
-
-    <a-button v-auth="[RoleEnum.TEST, RoleEnum.SUPER]" color="error" class="mx-4"> 鎷ユ湁[test,super]瑙掕壊鏉冮檺鍙 </a-button>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { Alert, Divider } from 'ant-design-vue';
-  import CurrentPermissionMode from '../CurrentPermissionMode.vue';
-  import { useUserStore } from '/@/store/modules/user';
-  import { RoleEnum } from '/@/enums/roleEnum';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  import { Authority } from '/@/components/Authority';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { Alert, PageWrapper, CurrentPermissionMode, Divider, Authority },
-    setup() {
-      const { changeRole, hasPermission } = usePermission();
-      const userStore = useUserStore();
-
-      return {
-        userStore,
-        RoleEnum,
-        isSuper: computed(() => userStore.getRoleList.includes(RoleEnum.SUPER)),
-        isTest: computed(() => userStore.getRoleList.includes(RoleEnum.TEST)),
-        changeRole,
-        hasPermission,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .demo {
-    background-color: @component-background;
-  }
-</style>
diff --git a/src/views/demo/permission/front/index.vue b/src/views/demo/permission/front/index.vue
deleted file mode 100644
index 8a405aa..0000000
--- a/src/views/demo/permission/front/index.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <PageWrapper
-    title="鍓嶇鏉冮檺绀轰緥"
-    contentBackground
-    contentClass="p-4"
-    content="鐢变簬鍒锋柊鐨勬椂鍊欎細璇锋眰鐢ㄦ埛淇℃伅鎺ュ彛锛屼細鏍规嵁鎺ュ彛閲嶇疆瑙掕壊淇℃伅锛屾墍浠ュ埛鏂板悗鐣岄潰浼氭仮澶嶅師鏍凤紝濡傛灉涓嶉渶瑕侊紝鍙互娉ㄩ噴 src/layout/default/index鍐呯殑鑾峰彇鐢ㄦ埛淇℃伅鎺ュ彛"
-  >
-    <CurrentPermissionMode />
-
-    <p>
-      褰撳墠瑙掕壊: <a> {{ userStore.getRoleList }} </a>
-    </p>
-    <Alert class="mt-4" type="info" message="鐐瑰嚮鍚庤鏌ョ湅宸︿晶鑿滃崟鍙樺寲" show-icon />
-
-    <div class="mt-4">
-      鏉冮檺鍒囨崲(璇峰厛鍒囨崲鏉冮檺妯″紡涓哄墠绔鑹叉潈闄愭ā寮�):
-      <a-button-group>
-        <a-button @click="changeRole(RoleEnum.SUPER)" :type="isSuper ? 'primary' : 'default'">
-          {{ RoleEnum.SUPER }}
-        </a-button>
-        <a-button @click="changeRole(RoleEnum.TEST)" :type="isTest ? 'primary' : 'default'">
-          {{ RoleEnum.TEST }}
-        </a-button>
-      </a-button-group>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-  import { Alert } from 'ant-design-vue';
-  import CurrentPermissionMode from '../CurrentPermissionMode.vue';
-  import { useUserStore } from '/@/store/modules/user';
-  import { RoleEnum } from '/@/enums/roleEnum';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { Alert, CurrentPermissionMode, PageWrapper },
-    setup() {
-      const { changeRole } = usePermission();
-      const userStore = useUserStore();
-
-      return {
-        userStore,
-        RoleEnum,
-        isSuper: computed(() => userStore.getRoleList.includes(RoleEnum.SUPER)),
-        isTest: computed(() => userStore.getRoleList.includes(RoleEnum.TEST)),
-        changeRole,
-      };
-    },
-  });
-</script>
-<style lang="less" scoped>
-  .demo {
-    background-color: @component-background;
-  }
-</style>
diff --git a/src/views/demo/setup/index.vue b/src/views/demo/setup/index.vue
deleted file mode 100644
index 17d254f..0000000
--- a/src/views/demo/setup/index.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-<template>
-  <PageWrapper title="寮曞椤�" content="鐢ㄤ簬缁欑敤鎴风殑鎸囧紩鎿嶄綔">
-    <a-button type="primary" @click="handleStart">寮�濮�</a-button>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import intro from 'intro.js';
-  import 'intro.js/minified/introjs.min.css';
-
-  export default defineComponent({
-    components: { PageWrapper },
-    setup() {
-      const { prefixVar } = useDesign('');
-
-      function handleStart() {
-        intro()
-          .setOptions({
-            steps: [
-              {
-                title: 'Welcome',
-                intro: 'Hello World! 馃憢',
-              },
-              {
-                title: 'Collapse Button',
-                element: document.querySelector(`.${prefixVar}-layout-header-trigger`)!,
-                intro: 'This is the menu collapse button.',
-              },
-              {
-                title: 'User Action',
-                element: document.querySelector(`.${prefixVar}-layout-header-action`)!,
-                intro: 'This is the user function area.',
-              },
-            ],
-          })
-          .start();
-      }
-      return { handleStart };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/account/AccountDetail.vue b/src/views/demo/system/account/AccountDetail.vue
deleted file mode 100644
index 150cc8b..0000000
--- a/src/views/demo/system/account/AccountDetail.vue
+++ /dev/null
@@ -1,62 +0,0 @@
-<template>
-  <PageWrapper
-    :title="`鐢ㄦ埛` + userId + `鐨勮祫鏂檂"
-    content="杩欐槸鐢ㄦ埛璧勬枡璇︽儏椤甸潰銆傛湰椤甸潰浠呯敤浜庢紨绀虹浉鍚岃矾鐢卞湪tab涓墦寮�澶氫釜椤甸潰骞朵笖鏄剧ず涓嶅悓鐨勬暟鎹�"
-    contentBackground
-    @back="goBack"
-  >
-    <template #extra>
-      <a-button type="primary" danger> 绂佺敤璐﹀彿 </a-button>
-      <a-button type="primary"> 淇敼瀵嗙爜 </a-button>
-    </template>
-    <template #footer>
-      <a-tabs default-active-key="detail" v-model:activeKey="currentKey">
-        <a-tab-pane key="detail" tab="鐢ㄦ埛璧勬枡" />
-        <a-tab-pane key="logs" tab="鎿嶄綔鏃ュ織" />
-      </a-tabs>
-    </template>
-    <div class="pt-4 m-4 desc-wrap">
-      <template v-if="currentKey == 'detail'">
-        <div v-for="i in 10" :key="i">杩欐槸鐢ㄦ埛{{ userId }}璧勬枡Tab</div>
-      </template>
-      <template v-if="currentKey == 'logs'">
-        <div v-for="i in 10" :key="i">杩欐槸鐢ㄦ埛{{ userId }}鎿嶄綔鏃ュ織Tab</div>
-      </template>
-    </div>
-  </PageWrapper>
-</template>
-
-<script>
-  import { defineComponent, ref } from 'vue';
-  import { useRoute } from 'vue-router';
-  import { PageWrapper } from '/@/components/Page';
-  import { useGo } from '/@/hooks/web/usePage';
-  import { useTabs } from '/@/hooks/web/useTabs';
-  import { Tabs } from 'ant-design-vue';
-  export default defineComponent({
-    name: 'AccountDetail',
-    components: { PageWrapper, ATabs: Tabs, ATabPane: Tabs.TabPane },
-    setup() {
-      const route = useRoute();
-      const go = useGo();
-      // 姝ゅ鍙互寰楀埌鐢ㄦ埛ID
-      const userId = ref(route.params?.id);
-      const currentKey = ref('detail');
-      const { setTitle } = useTabs();
-      // TODO
-      // 鏈〉浠g爜浠呬綔婕旂ず锛屽疄闄呭簲褰撻�氳繃userId浠庢帴鍙h幏寰楃敤鎴风殑鐩稿叧璧勬枡
-
-      // 璁剧疆Tab鐨勬爣棰橈紙涓嶄細褰卞搷椤甸潰鏍囬锛�
-      setTitle('璇︽儏锛氱敤鎴�' + userId.value);
-
-      // 椤甸潰宸︿晶鐐瑰嚮杩斿洖閾炬帴鏃剁殑鎿嶄綔
-      function goBack() {
-        // 鏈緥鐨勬晥鏋滄椂鐐瑰嚮杩斿洖濮嬬粓璺宠浆鍒拌处鍙峰垪琛ㄩ〉锛屽疄闄呭簲鐢ㄦ椂鍙繑鍥炰笂涓�椤�
-        go('/system/account');
-      }
-      return { userId, currentKey, goBack };
-    },
-  });
-</script>
-
-<style></style>
diff --git a/src/views/demo/system/account/AccountModal.vue b/src/views/demo/system/account/AccountModal.vue
deleted file mode 100644
index 167bb72..0000000
--- a/src/views/demo/system/account/AccountModal.vue
+++ /dev/null
@@ -1,74 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { accountFormSchema } from './account.data';
-  import { getDeptList } from '/@/api/demo/system';
-
-  export default defineComponent({
-    name: 'AccountModal',
-    components: { BasicModal, BasicForm },
-    emits: ['success', 'register'],
-    setup(_, { emit }) {
-      const isUpdate = ref(true);
-      const rowId = ref('');
-
-      const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({
-        labelWidth: 100,
-        baseColProps: { span: 24 },
-        schemas: accountFormSchema,
-        showActionButtonGroup: false,
-        actionColOptions: {
-          span: 23,
-        },
-      });
-
-      const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-        resetFields();
-        setModalProps({ confirmLoading: false });
-        isUpdate.value = !!data?.isUpdate;
-
-        if (unref(isUpdate)) {
-          rowId.value = data.record.id;
-          setFieldsValue({
-            ...data.record,
-          });
-        }
-
-        const treeData = await getDeptList();
-        updateSchema([
-          {
-            field: 'pwd',
-            show: !unref(isUpdate),
-          },
-          {
-            field: 'dept',
-            componentProps: { treeData },
-          },
-        ]);
-      });
-
-      const getTitle = computed(() => (!unref(isUpdate) ? '鏂板璐﹀彿' : '缂栬緫璐﹀彿'));
-
-      async function handleSubmit() {
-        try {
-          const values = await validate();
-          setModalProps({ confirmLoading: true });
-          // TODO custom api
-          console.log(values);
-          closeModal();
-          emit('success', { isUpdate: unref(isUpdate), values: { ...values, id: rowId.value } });
-        } finally {
-          setModalProps({ confirmLoading: false });
-        }
-      }
-
-      return { registerModal, registerForm, getTitle, handleSubmit };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/account/DeptTree.vue b/src/views/demo/system/account/DeptTree.vue
deleted file mode 100644
index b67b4f0..0000000
--- a/src/views/demo/system/account/DeptTree.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-<template>
-  <div class="m-4 mr-0 overflow-hidden bg-white">
-    <BasicTree
-      title="閮ㄩ棬鍒楄〃"
-      toolbar
-      search
-      :clickRowToExpand="false"
-      :treeData="treeData"
-      :fieldNames="{ key: 'id', title: 'deptName' }"
-      @select="handleSelect"
-    />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, onMounted, ref } from 'vue';
-
-  import { BasicTree, TreeItem } from '/@/components/Tree';
-  import { getDeptList } from '/@/api/demo/system';
-
-  export default defineComponent({
-    name: 'DeptTree',
-    components: { BasicTree },
-
-    emits: ['select'],
-    setup(_, { emit }) {
-      const treeData = ref<TreeItem[]>([]);
-
-      async function fetch() {
-        treeData.value = (await getDeptList()) as unknown as TreeItem[];
-      }
-
-      function handleSelect(keys) {
-        emit('select', keys[0]);
-      }
-
-      onMounted(() => {
-        fetch();
-      });
-      return { treeData, handleSelect };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/account/account.data.ts b/src/views/demo/system/account/account.data.ts
deleted file mode 100644
index ade68c1..0000000
--- a/src/views/demo/system/account/account.data.ts
+++ /dev/null
@@ -1,127 +0,0 @@
-import { getAllRoleList, isAccountExist } from '/@/api/demo/system';
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鐢ㄦ埛鍚�',
-    dataIndex: 'account',
-    width: 120,
-  },
-  {
-    title: '鏄电О',
-    dataIndex: 'nickname',
-    width: 120,
-  },
-  {
-    title: '閭',
-    dataIndex: 'email',
-    width: 120,
-  },
-  {
-    title: '鍒涘缓鏃堕棿',
-    dataIndex: 'createTime',
-    width: 180,
-  },
-  {
-    title: '瑙掕壊',
-    dataIndex: 'role',
-    width: 200,
-  },
-  {
-    title: '澶囨敞',
-    dataIndex: 'remark',
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'account',
-    label: '鐢ㄦ埛鍚�',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'nickname',
-    label: '鏄电О',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-];
-
-export const accountFormSchema: FormSchema[] = [
-  {
-    field: 'account',
-    label: '鐢ㄦ埛鍚�',
-    component: 'Input',
-    helpMessage: ['鏈瓧娈垫紨绀哄紓姝ラ獙璇�', '涓嶈兘杈撳叆甯︽湁admin鐨勭敤鎴峰悕'],
-    rules: [
-      {
-        required: true,
-        message: '璇疯緭鍏ョ敤鎴峰悕',
-      },
-      {
-        validator(_, value) {
-          return new Promise((resolve, reject) => {
-            isAccountExist(value)
-              .then(() => resolve())
-              .catch((err) => {
-                reject(err.message || '楠岃瘉澶辫触');
-              });
-          });
-        },
-      },
-    ],
-  },
-  {
-    field: 'pwd',
-    label: '瀵嗙爜',
-    component: 'InputPassword',
-    required: true,
-    ifShow: false,
-  },
-  {
-    label: '瑙掕壊',
-    field: 'role',
-    component: 'ApiSelect',
-    componentProps: {
-      api: getAllRoleList,
-      labelField: 'roleName',
-      valueField: 'roleValue',
-    },
-    required: true,
-  },
-  {
-    field: 'dept',
-    label: '鎵�灞為儴闂�',
-    component: 'TreeSelect',
-    componentProps: {
-      fieldNames: {
-        label: 'deptName',
-        key: 'id',
-        value: 'id',
-      },
-      getPopupContainer: () => document.body,
-    },
-    required: true,
-  },
-  {
-    field: 'nickname',
-    label: '鏄电О',
-    component: 'Input',
-    required: true,
-  },
-
-  {
-    label: '閭',
-    field: 'email',
-    component: 'Input',
-    required: true,
-  },
-
-  {
-    label: '澶囨敞',
-    field: 'remark',
-    component: 'InputTextArea',
-  },
-];
diff --git a/src/views/demo/system/account/index.vue b/src/views/demo/system/account/index.vue
deleted file mode 100644
index 2a73cdc..0000000
--- a/src/views/demo/system/account/index.vue
+++ /dev/null
@@ -1,137 +0,0 @@
-<template>
-  <PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
-    <DeptTree class="w-1/4 xl:w-1/5" @select="handleSelect" />
-    <BasicTable @register="registerTable" class="w-3/4 xl:w-4/5" :searchInfo="searchInfo">
-      <template #toolbar>
-        <a-button type="primary" @click="handleCreate">鏂板璐﹀彿</a-button>
-      </template>
-      <template #bodyCell="{ column, record }">
-        <template v-if="column.key === 'action'">
-          <TableAction
-            :actions="[
-              {
-                icon: 'clarity:info-standard-line',
-                tooltip: '鏌ョ湅鐢ㄦ埛璇︽儏',
-                onClick: handleView.bind(null, record),
-              },
-              {
-                icon: 'clarity:note-edit-line',
-                tooltip: '缂栬緫鐢ㄦ埛璧勬枡',
-                onClick: handleEdit.bind(null, record),
-              },
-              {
-                icon: 'ant-design:delete-outlined',
-                color: 'error',
-                tooltip: '鍒犻櫎姝よ处鍙�',
-                popConfirm: {
-                  title: '鏄惁纭鍒犻櫎',
-                  placement: 'left',
-                  confirm: handleDelete.bind(null, record),
-                },
-              },
-            ]"
-          />
-        </template>
-      </template>
-    </BasicTable>
-    <AccountModal @register="registerModal" @success="handleSuccess" />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, reactive } from 'vue';
-
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { getAccountList } from '/@/api/demo/system';
-  import { PageWrapper } from '/@/components/Page';
-  import DeptTree from './DeptTree.vue';
-
-  import { useModal } from '/@/components/Modal';
-  import AccountModal from './AccountModal.vue';
-
-  import { columns, searchFormSchema } from './account.data';
-  import { useGo } from '/@/hooks/web/usePage';
-
-  export default defineComponent({
-    name: 'system-account',
-    components: { BasicTable, PageWrapper, DeptTree, AccountModal, TableAction },
-    setup() {
-      const go = useGo();
-      const [registerModal, { openModal }] = useModal();
-      const searchInfo = reactive<Recordable>({});
-      const [registerTable, { reload, updateTableDataRecord }] = useTable({
-        title: '璐﹀彿鍒楄〃',
-        api: getAccountList,
-        rowKey: 'id',
-        columns,
-        formConfig: {
-          labelWidth: 120,
-          schemas: searchFormSchema,
-          autoSubmitOnEnter: true,
-        },
-        useSearchForm: true,
-        showTableSetting: true,
-        bordered: true,
-        handleSearchInfoFn(info) {
-          console.log('handleSearchInfoFn', info);
-          return info;
-        },
-        actionColumn: {
-          width: 120,
-          title: '鎿嶄綔',
-          dataIndex: 'action',
-          // slots: { customRender: 'action' },
-        },
-      });
-
-      function handleCreate() {
-        openModal(true, {
-          isUpdate: false,
-        });
-      }
-
-      function handleEdit(record: Recordable) {
-        console.log(record);
-        openModal(true, {
-          record,
-          isUpdate: true,
-        });
-      }
-
-      function handleDelete(record: Recordable) {
-        console.log(record);
-      }
-
-      function handleSuccess({ isUpdate, values }) {
-        if (isUpdate) {
-          // 婕旂ず涓嶅埛鏂拌〃鏍肩洿鎺ユ洿鏂板唴閮ㄦ暟鎹��
-          // 娉ㄦ剰锛歶pdateTableDataRecord瑕佹眰琛ㄦ牸鐨剅owKey灞炴�т负string骞朵笖瀛樺湪浜庢瘡涓�琛岀殑record鐨刱eys涓�
-          const result = updateTableDataRecord(values.id, values);
-          console.log(result);
-        } else {
-          reload();
-        }
-      }
-
-      function handleSelect(deptId = '') {
-        searchInfo.deptId = deptId;
-        reload();
-      }
-
-      function handleView(record: Recordable) {
-        go('/system/account_detail/' + record.id);
-      }
-
-      return {
-        registerTable,
-        registerModal,
-        handleCreate,
-        handleEdit,
-        handleDelete,
-        handleSuccess,
-        handleSelect,
-        handleView,
-        searchInfo,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/dept/DeptModal.vue b/src/views/demo/system/dept/DeptModal.vue
deleted file mode 100644
index 005148d..0000000
--- a/src/views/demo/system/dept/DeptModal.vue
+++ /dev/null
@@ -1,61 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './dept.data';
-
-  import { getDeptList } from '/@/api/demo/system';
-  export default defineComponent({
-    name: 'DeptModal',
-    components: { BasicModal, BasicForm },
-    emits: ['success', 'register'],
-    setup(_, { emit }) {
-      const isUpdate = ref(true);
-
-      const [registerForm, { resetFields, setFieldsValue, updateSchema, validate }] = useForm({
-        labelWidth: 100,
-        schemas: formSchema,
-        showActionButtonGroup: false,
-      });
-
-      const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-        resetFields();
-        setModalProps({ confirmLoading: false });
-        isUpdate.value = !!data?.isUpdate;
-
-        if (unref(isUpdate)) {
-          setFieldsValue({
-            ...data.record,
-          });
-        }
-        const treeData = await getDeptList();
-        updateSchema({
-          field: 'parentDept',
-          componentProps: { treeData },
-        });
-      });
-
-      const getTitle = computed(() => (!unref(isUpdate) ? '鏂板閮ㄩ棬' : '缂栬緫閮ㄩ棬'));
-
-      async function handleSubmit() {
-        try {
-          const values = await validate();
-          setModalProps({ confirmLoading: true });
-          // TODO custom api
-          console.log(values);
-          closeModal();
-          emit('success');
-        } finally {
-          setModalProps({ confirmLoading: false });
-        }
-      }
-
-      return { registerModal, registerForm, getTitle, handleSubmit };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/dept/dept.data.ts b/src/views/demo/system/dept/dept.data.ts
deleted file mode 100644
index 6bdd1ca..0000000
--- a/src/views/demo/system/dept/dept.data.ts
+++ /dev/null
@@ -1,108 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-import { h } from 'vue';
-import { Tag } from 'ant-design-vue';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '閮ㄩ棬鍚嶇О',
-    dataIndex: 'deptName',
-    width: 160,
-    align: 'left',
-  },
-  {
-    title: '鎺掑簭',
-    dataIndex: 'orderNo',
-    width: 50,
-  },
-  {
-    title: '鐘舵��',
-    dataIndex: 'status',
-    width: 80,
-    customRender: ({ record }) => {
-      const status = record.status;
-      const enable = ~~status === 0;
-      const color = enable ? 'green' : 'red';
-      const text = enable ? '鍚敤' : '鍋滅敤';
-      return h(Tag, { color: color }, () => text);
-    },
-  },
-  {
-    title: '鍒涘缓鏃堕棿',
-    dataIndex: 'createTime',
-    width: 180,
-  },
-  {
-    title: '澶囨敞',
-    dataIndex: 'remark',
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'deptName',
-    label: '閮ㄩ棬鍚嶇О',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'Select',
-    componentProps: {
-      options: [
-        { label: '鍚敤', value: '0' },
-        { label: '鍋滅敤', value: '1' },
-      ],
-    },
-    colProps: { span: 8 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'deptName',
-    label: '閮ㄩ棬鍚嶇О',
-    component: 'Input',
-    required: true,
-  },
-  {
-    field: 'parentDept',
-    label: '涓婄骇閮ㄩ棬',
-    component: 'TreeSelect',
-
-    componentProps: {
-      replaceFields: {
-        title: 'deptName',
-        key: 'id',
-        value: 'id',
-      },
-      getPopupContainer: () => document.body,
-    },
-    required: true,
-  },
-  {
-    field: 'orderNo',
-    label: '鎺掑簭',
-    component: 'InputNumber',
-    required: true,
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'RadioButtonGroup',
-    defaultValue: '0',
-    componentProps: {
-      options: [
-        { label: '鍚敤', value: '0' },
-        { label: '鍋滅敤', value: '1' },
-      ],
-    },
-    required: true,
-  },
-  {
-    label: '澶囨敞',
-    field: 'remark',
-    component: 'InputTextArea',
-  },
-];
diff --git a/src/views/demo/system/dept/index.vue b/src/views/demo/system/dept/index.vue
deleted file mode 100644
index b803ef0..0000000
--- a/src/views/demo/system/dept/index.vue
+++ /dev/null
@@ -1,100 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable">
-      <template #tableTitle>
-        <a-button type="primary" @click="handleCreate"> 鏂板閮ㄩ棬 </a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction
-          :actions="[
-            {
-              icon: 'clarity:note-edit-line',
-              onClick: handleEdit.bind(null, record),
-            },
-            {
-              icon: 'ant-design:delete-outlined',
-              color: 'error',
-              popConfirm: {
-                title: '鏄惁纭鍒犻櫎',
-                confirm: handleDelete.bind(null, record),
-              },
-            },
-          ]"
-        />
-      </template>
-    </BasicTable>
-    <DeptModal @register="registerModal" @success="handleSuccess" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { getDeptList } from '/@/api/demo/system';
-
-  import { useModal } from '/@/components/Modal';
-  import DeptModal from './DeptModal.vue';
-
-  import { columns, searchFormSchema } from './dept.data';
-
-  export default defineComponent({
-    name: 'system-dept',
-    components: { BasicTable, DeptModal, TableAction },
-    setup() {
-      const [registerModal, { openModal }] = useModal();
-      const [registerTable, { reload }] = useTable({
-        title: '閮ㄩ棬鍒楄〃',
-        api: getDeptList,
-        columns,
-        formConfig: {
-          labelWidth: 120,
-          schemas: searchFormSchema,
-        },
-        pagination: false,
-        striped: false,
-        useSearchForm: true,
-        showTableSetting: true,
-        bordered: true,
-        showIndexColumn: false,
-        canResize: false,
-        actionColumn: {
-          width: 80,
-          title: '鎿嶄綔',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-          fixed: undefined,
-        },
-      });
-
-      function handleCreate() {
-        openModal(true, {
-          isUpdate: false,
-        });
-      }
-
-      function handleEdit(record: Recordable) {
-        openModal(true, {
-          record,
-          isUpdate: true,
-        });
-      }
-
-      function handleDelete(record: Recordable) {
-        console.log(record);
-      }
-
-      function handleSuccess() {
-        reload();
-      }
-
-      return {
-        registerTable,
-        registerModal,
-        handleCreate,
-        handleEdit,
-        handleDelete,
-        handleSuccess,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/menu/MenuDrawer.vue b/src/views/demo/system/menu/MenuDrawer.vue
deleted file mode 100644
index 606c3c7..0000000
--- a/src/views/demo/system/menu/MenuDrawer.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :title="getTitle" width="50%" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicDrawer>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, computed, unref } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './menu.data';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-
-  import { getMenuList } from '/@/api/demo/system';
-
-  export default defineComponent({
-    name: 'MenuDrawer',
-    components: { BasicDrawer, BasicForm },
-    emits: ['success', 'register'],
-    setup(_, { emit }) {
-      const isUpdate = ref(true);
-
-      const [registerForm, { resetFields, setFieldsValue, updateSchema, validate }] = useForm({
-        labelWidth: 100,
-        schemas: formSchema,
-        showActionButtonGroup: false,
-        baseColProps: { lg: 12, md: 24 },
-      });
-
-      const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-        resetFields();
-        setDrawerProps({ confirmLoading: false });
-        isUpdate.value = !!data?.isUpdate;
-
-        if (unref(isUpdate)) {
-          setFieldsValue({
-            ...data.record,
-          });
-        }
-        const treeData = await getMenuList();
-        updateSchema({
-          field: 'parentMenu',
-          componentProps: { treeData },
-        });
-      });
-
-      const getTitle = computed(() => (!unref(isUpdate) ? '鏂板鑿滃崟' : '缂栬緫鑿滃崟'));
-
-      async function handleSubmit() {
-        try {
-          const values = await validate();
-          setDrawerProps({ confirmLoading: true });
-          // TODO custom api
-          console.log(values);
-          closeDrawer();
-          emit('success');
-        } finally {
-          setDrawerProps({ confirmLoading: false });
-        }
-      }
-
-      return { registerDrawer, registerForm, getTitle, handleSubmit };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/menu/index.vue b/src/views/demo/system/menu/index.vue
deleted file mode 100644
index 8aa3185..0000000
--- a/src/views/demo/system/menu/index.vue
+++ /dev/null
@@ -1,107 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable" @fetch-success="onFetchSuccess">
-      <template #tableTitle>
-        <a-button type="primary" @click="handleCreate"> 鏂板鑿滃崟 </a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction
-          :actions="[
-            {
-              icon: 'clarity:note-edit-line',
-              onClick: handleEdit.bind(null, record),
-            },
-            {
-              icon: 'ant-design:delete-outlined',
-              color: 'error',
-              popConfirm: {
-                title: '鏄惁纭鍒犻櫎',
-                confirm: handleDelete.bind(null, record),
-              },
-            },
-          ]"
-        />
-      </template>
-    </BasicTable>
-    <MenuDrawer @register="registerDrawer" @success="handleSuccess" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, nextTick } from 'vue';
-
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { getMenuList } from '/@/api/demo/system';
-
-  import { useDrawer } from '/@/components/Drawer';
-  import MenuDrawer from './MenuDrawer.vue';
-
-  import { columns, searchFormSchema } from './menu.data';
-
-  export default defineComponent({
-    name: 'MenuManagement',
-    components: { BasicTable, MenuDrawer, TableAction },
-    setup() {
-      const [registerDrawer, { openDrawer }] = useDrawer();
-      const [registerTable, { reload, expandAll }] = useTable({
-        title: '鑿滃崟鍒楄〃',
-        api: getMenuList,
-        columns,
-        formConfig: {
-          labelWidth: 120,
-          schemas: searchFormSchema,
-        },
-        isTreeTable: true,
-        pagination: false,
-        striped: false,
-        useSearchForm: true,
-        showTableSetting: true,
-        bordered: true,
-        showIndexColumn: false,
-        canResize: false,
-        actionColumn: {
-          width: 80,
-          title: '鎿嶄綔',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-          fixed: undefined,
-        },
-      });
-
-      function handleCreate() {
-        openDrawer(true, {
-          isUpdate: false,
-        });
-      }
-
-      function handleEdit(record: Recordable) {
-        openDrawer(true, {
-          record,
-          isUpdate: true,
-        });
-      }
-
-      function handleDelete(record: Recordable) {
-        console.log(record);
-      }
-
-      function handleSuccess() {
-        reload();
-      }
-
-      function onFetchSuccess() {
-        // 婕旂ず榛樿灞曞紑鎵�鏈夎〃椤�
-        nextTick(expandAll);
-      }
-
-      return {
-        registerTable,
-        registerDrawer,
-        handleCreate,
-        handleEdit,
-        handleDelete,
-        handleSuccess,
-        onFetchSuccess,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/menu/menu.data.ts b/src/views/demo/system/menu/menu.data.ts
deleted file mode 100644
index 834bd21..0000000
--- a/src/views/demo/system/menu/menu.data.ts
+++ /dev/null
@@ -1,202 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-import { h } from 'vue';
-import { Tag } from 'ant-design-vue';
-import { Icon } from '/@/components/Icon';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鑿滃崟鍚嶇О',
-    dataIndex: 'menuName',
-    width: 200,
-    align: 'left',
-  },
-  {
-    title: '鍥炬爣',
-    dataIndex: 'icon',
-    width: 50,
-    customRender: ({ record }) => {
-      return h(Icon, { icon: record.icon });
-    },
-  },
-  {
-    title: '鏉冮檺鏍囪瘑',
-    dataIndex: 'permission',
-    width: 180,
-  },
-  {
-    title: '缁勪欢',
-    dataIndex: 'component',
-  },
-  {
-    title: '鎺掑簭',
-    dataIndex: 'orderNo',
-    width: 50,
-  },
-  {
-    title: '鐘舵��',
-    dataIndex: 'status',
-    width: 80,
-    customRender: ({ record }) => {
-      const status = record.status;
-      const enable = ~~status === 0;
-      const color = enable ? 'green' : 'red';
-      const text = enable ? '鍚敤' : '鍋滅敤';
-      return h(Tag, { color: color }, () => text);
-    },
-  },
-  {
-    title: '鍒涘缓鏃堕棿',
-    dataIndex: 'createTime',
-    width: 180,
-  },
-];
-
-const isDir = (type: string) => type === '0';
-const isMenu = (type: string) => type === '1';
-const isButton = (type: string) => type === '2';
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'menuName',
-    label: '鑿滃崟鍚嶇О',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'Select',
-    componentProps: {
-      options: [
-        { label: '鍚敤', value: '0' },
-        { label: '鍋滅敤', value: '1' },
-      ],
-    },
-    colProps: { span: 8 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'type',
-    label: '鑿滃崟绫诲瀷',
-    component: 'RadioButtonGroup',
-    defaultValue: '0',
-    componentProps: {
-      options: [
-        { label: '鐩綍', value: '0' },
-        { label: '鑿滃崟', value: '1' },
-        { label: '鎸夐挳', value: '2' },
-      ],
-    },
-    colProps: { lg: 24, md: 24 },
-  },
-  {
-    field: 'menuName',
-    label: '鑿滃崟鍚嶇О',
-    component: 'Input',
-    required: true,
-  },
-
-  {
-    field: 'parentMenu',
-    label: '涓婄骇鑿滃崟',
-    component: 'TreeSelect',
-    componentProps: {
-      replaceFields: {
-        title: 'menuName',
-        key: 'id',
-        value: 'id',
-      },
-      getPopupContainer: () => document.body,
-    },
-  },
-
-  {
-    field: 'orderNo',
-    label: '鎺掑簭',
-    component: 'InputNumber',
-    required: true,
-  },
-  {
-    field: 'icon',
-    label: '鍥炬爣',
-    component: 'IconPicker',
-    required: true,
-    ifShow: ({ values }) => !isButton(values.type),
-  },
-
-  {
-    field: 'routePath',
-    label: '璺敱鍦板潃',
-    component: 'Input',
-    required: true,
-    ifShow: ({ values }) => !isButton(values.type),
-  },
-  {
-    field: 'component',
-    label: '缁勪欢璺緞',
-    component: 'Input',
-    ifShow: ({ values }) => isMenu(values.type),
-  },
-  {
-    field: 'permission',
-    label: '鏉冮檺鏍囪瘑',
-    component: 'Input',
-    ifShow: ({ values }) => !isDir(values.type),
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'RadioButtonGroup',
-    defaultValue: '0',
-    componentProps: {
-      options: [
-        { label: '鍚敤', value: '0' },
-        { label: '绂佺敤', value: '1' },
-      ],
-    },
-  },
-  {
-    field: 'isExt',
-    label: '鏄惁澶栭摼',
-    component: 'RadioButtonGroup',
-    defaultValue: '0',
-    componentProps: {
-      options: [
-        { label: '鍚�', value: '0' },
-        { label: '鏄�', value: '1' },
-      ],
-    },
-    ifShow: ({ values }) => !isButton(values.type),
-  },
-
-  {
-    field: 'keepalive',
-    label: '鏄惁缂撳瓨',
-    component: 'RadioButtonGroup',
-    defaultValue: '0',
-    componentProps: {
-      options: [
-        { label: '鍚�', value: '0' },
-        { label: '鏄�', value: '1' },
-      ],
-    },
-    ifShow: ({ values }) => isMenu(values.type),
-  },
-
-  {
-    field: 'show',
-    label: '鏄惁鏄剧ず',
-    component: 'RadioButtonGroup',
-    defaultValue: '0',
-    componentProps: {
-      options: [
-        { label: '鏄�', value: '0' },
-        { label: '鍚�', value: '1' },
-      ],
-    },
-    ifShow: ({ values }) => !isButton(values.type),
-  },
-];
diff --git a/src/views/demo/system/password/index.vue b/src/views/demo/system/password/index.vue
deleted file mode 100644
index f5685ae..0000000
--- a/src/views/demo/system/password/index.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-<template>
-  <PageWrapper title="淇敼褰撳墠鐢ㄦ埛瀵嗙爜" content="淇敼鎴愬姛鍚庝細鑷姩閫�鍑哄綋鍓嶇櫥褰曪紒">
-    <div class="py-8 bg-white flex flex-col justify-center items-center">
-      <BasicForm @register="register" />
-      <div class="flex justify-center">
-        <a-button @click="resetFields"> 閲嶇疆 </a-button>
-        <a-button class="!ml-4" type="primary" @click="handleSubmit"> 纭 </a-button>
-      </div>
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { BasicForm, useForm } from '/@/components/Form';
-
-  import { formSchema } from './pwd.data';
-  export default defineComponent({
-    name: 'ChangePassword',
-    components: { BasicForm, PageWrapper },
-    setup() {
-      const [register, { validate, resetFields }] = useForm({
-        size: 'large',
-        labelWidth: 100,
-        showActionButtonGroup: false,
-        schemas: formSchema,
-      });
-
-      async function handleSubmit() {
-        try {
-          const values = await validate();
-          const { passwordOld, passwordNew } = values;
-
-          // TODO custom api
-          console.log(passwordOld, passwordNew);
-          // const { router } = useRouter();
-          // router.push(pageEnum.BASE_LOGIN);
-        } catch (error) {}
-      }
-
-      return { register, resetFields, handleSubmit };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/password/pwd.data.ts b/src/views/demo/system/password/pwd.data.ts
deleted file mode 100644
index be5f9b1..0000000
--- a/src/views/demo/system/password/pwd.data.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { FormSchema } from '/@/components/Form';
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'passwordOld',
-    label: '褰撳墠瀵嗙爜',
-    component: 'InputPassword',
-    required: true,
-  },
-  {
-    field: 'passwordNew',
-    label: '鏂板瘑鐮�',
-    component: 'StrengthMeter',
-    componentProps: {
-      placeholder: '鏂板瘑鐮�',
-    },
-    rules: [
-      {
-        required: true,
-        message: '璇疯緭鍏ユ柊瀵嗙爜',
-      },
-    ],
-  },
-  {
-    field: 'confirmPassword',
-    label: '纭瀵嗙爜',
-    component: 'InputPassword',
-
-    dynamicRules: ({ values }) => {
-      return [
-        {
-          required: true,
-          validator: (_, value) => {
-            if (!value) {
-              return Promise.reject('涓嶈兘涓虹┖');
-            }
-            if (value !== values.passwordNew) {
-              return Promise.reject('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�!');
-            }
-            return Promise.resolve();
-          },
-        },
-      ];
-    },
-  },
-];
diff --git a/src/views/demo/system/role/RoleDrawer.vue b/src/views/demo/system/role/RoleDrawer.vue
deleted file mode 100644
index b1a5758..0000000
--- a/src/views/demo/system/role/RoleDrawer.vue
+++ /dev/null
@@ -1,80 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :title="getTitle" width="500px" @ok="handleSubmit">
-    <BasicForm @register="registerForm">
-      <template #menu="{ model, field }">
-        <BasicTree
-          v-model:value="model[field]"
-          :treeData="treeData"
-          :replaceFields="{ title: 'menuName', key: 'id' }"
-          checkable
-          toolbar
-          title="鑿滃崟鍒嗛厤"
-        />
-      </template>
-    </BasicForm>
-  </BasicDrawer>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, computed, unref } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './role.data';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-  import { BasicTree, TreeItem } from '/@/components/Tree';
-
-  import { getMenuList } from '/@/api/demo/system';
-
-  export default defineComponent({
-    name: 'RoleDrawer',
-    components: { BasicDrawer, BasicForm, BasicTree },
-    emits: ['success', 'register'],
-    setup(_, { emit }) {
-      const isUpdate = ref(true);
-      const treeData = ref<TreeItem[]>([]);
-
-      const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-        labelWidth: 90,
-        schemas: formSchema,
-        showActionButtonGroup: false,
-      });
-
-      const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-        resetFields();
-        setDrawerProps({ confirmLoading: false });
-        // 闇�瑕佸湪setFieldsValue涔嬪墠鍏堝~鍏卼reeData锛屽惁鍒橳ree缁勪欢鍙兘浼氭姤key not exist璀﹀憡
-        if (unref(treeData).length === 0) {
-          treeData.value = (await getMenuList()) as any as TreeItem[];
-        }
-        isUpdate.value = !!data?.isUpdate;
-
-        if (unref(isUpdate)) {
-          setFieldsValue({
-            ...data.record,
-          });
-        }
-      });
-
-      const getTitle = computed(() => (!unref(isUpdate) ? '鏂板瑙掕壊' : '缂栬緫瑙掕壊'));
-
-      async function handleSubmit() {
-        try {
-          const values = await validate();
-          setDrawerProps({ confirmLoading: true });
-          // TODO custom api
-          console.log(values);
-          closeDrawer();
-          emit('success');
-        } finally {
-          setDrawerProps({ confirmLoading: false });
-        }
-      }
-
-      return {
-        registerDrawer,
-        registerForm,
-        getTitle,
-        handleSubmit,
-        treeData,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/role/index.vue b/src/views/demo/system/role/index.vue
deleted file mode 100644
index 488e5cf..0000000
--- a/src/views/demo/system/role/index.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable">
-      <template #tableTitle>
-        <a-button type="primary" @click="handleCreate"> 鏂板瑙掕壊 </a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction
-          :actions="[
-            {
-              icon: 'clarity:note-edit-line',
-              onClick: handleEdit.bind(null, record),
-            },
-            {
-              icon: 'ant-design:delete-outlined',
-              color: 'error',
-              popConfirm: {
-                title: '鏄惁纭鍒犻櫎',
-                confirm: handleDelete.bind(null, record),
-              },
-            },
-          ]"
-        />
-      </template>
-    </BasicTable>
-    <RoleDrawer @register="registerDrawer" @success="handleSuccess" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { getRoleListByPage } from '/@/api/demo/system';
-
-  import { useDrawer } from '/@/components/Drawer';
-  import RoleDrawer from './RoleDrawer.vue';
-
-  import { columns, searchFormSchema } from './role.data';
-
-  export default defineComponent({
-    name: 'system-demorole',
-    components: { BasicTable, RoleDrawer, TableAction },
-    setup() {
-      const [registerDrawer, { openDrawer }] = useDrawer();
-      const [registerTable, { reload }] = useTable({
-        title: '瑙掕壊鍒楄〃',
-        api: getRoleListByPage,
-        columns,
-        formConfig: {
-          labelWidth: 120,
-          schemas: searchFormSchema,
-        },
-        useSearchForm: true,
-        showTableSetting: true,
-        bordered: true,
-        showIndexColumn: false,
-        actionColumn: {
-          width: 80,
-          title: '鎿嶄綔',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-          fixed: undefined,
-        },
-      });
-
-      function handleCreate() {
-        openDrawer(true, {
-          isUpdate: false,
-        });
-      }
-
-      function handleEdit(record: Recordable) {
-        openDrawer(true, {
-          record,
-          isUpdate: true,
-        });
-      }
-
-      function handleDelete(record: Recordable) {
-        console.log(record);
-      }
-
-      function handleSuccess() {
-        reload();
-      }
-
-      return {
-        registerTable,
-        registerDrawer,
-        handleCreate,
-        handleEdit,
-        handleDelete,
-        handleSuccess,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/role/role.data.ts b/src/views/demo/system/role/role.data.ts
deleted file mode 100644
index f785427..0000000
--- a/src/views/demo/system/role/role.data.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-import { h } from 'vue';
-import { Switch } from 'ant-design-vue';
-import { setRoleStatus } from '/@/api/demo/system';
-import { useMessage } from '/@/hooks/web/useMessage';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '瑙掕壊鍚嶇О',
-    dataIndex: 'roleName',
-    width: 200,
-  },
-  {
-    title: '瑙掕壊鍊�',
-    dataIndex: 'roleValue',
-    width: 180,
-  },
-  {
-    title: '鎺掑簭',
-    dataIndex: 'orderNo',
-    width: 50,
-  },
-  {
-    title: '鐘舵��',
-    dataIndex: 'status',
-    width: 120,
-    customRender: ({ record }) => {
-      if (!Reflect.has(record, 'pendingStatus')) {
-        record.pendingStatus = false;
-      }
-      return h(Switch, {
-        checked: record.status === '1',
-        checkedChildren: '宸插惎鐢�',
-        unCheckedChildren: '宸茬鐢�',
-        loading: record.pendingStatus,
-        onChange(checked: boolean) {
-          record.pendingStatus = true;
-          const newStatus = checked ? '1' : '0';
-          const { createMessage } = useMessage();
-          setRoleStatus(record.id, newStatus)
-            .then(() => {
-              record.status = newStatus;
-              createMessage.success(`宸叉垚鍔熶慨鏀硅鑹茬姸鎬乣);
-            })
-            .catch(() => {
-              createMessage.error('淇敼瑙掕壊鐘舵�佸け璐�');
-            })
-            .finally(() => {
-              record.pendingStatus = false;
-            });
-        },
-      });
-    },
-  },
-  {
-    title: '鍒涘缓鏃堕棿',
-    dataIndex: 'createTime',
-    width: 180,
-  },
-  {
-    title: '澶囨敞',
-    dataIndex: 'remark',
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'roleNme',
-    label: '瑙掕壊鍚嶇О',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'Select',
-    componentProps: {
-      options: [
-        { label: '鍚敤', value: '0' },
-        { label: '鍋滅敤', value: '1' },
-      ],
-    },
-    colProps: { span: 8 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'roleName',
-    label: '瑙掕壊鍚嶇О',
-    required: true,
-    component: 'Input',
-  },
-  {
-    field: 'roleValue',
-    label: '瑙掕壊鍊�',
-    required: true,
-    component: 'Input',
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'RadioButtonGroup',
-    defaultValue: '0',
-    componentProps: {
-      options: [
-        { label: '鍚敤', value: '0' },
-        { label: '鍋滅敤', value: '1' },
-      ],
-    },
-  },
-  {
-    label: '澶囨敞',
-    field: 'remark',
-    component: 'InputTextArea',
-  },
-  {
-    label: ' ',
-    field: 'menu',
-    slot: 'menu',
-    component: 'Input',
-  },
-];
diff --git a/src/views/demo/system/test/TestDrawer.vue b/src/views/demo/system/test/TestDrawer.vue
deleted file mode 100644
index 264692f..0000000
--- a/src/views/demo/system/test/TestDrawer.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :title="getTitle" width="500px" @ok="handleSubmit">
-    <BasicForm @register="registerForm"> </BasicForm>
-  </BasicDrawer>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, computed, unref } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './test.data';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-
-  export default defineComponent({
-    name: 'RoleDrawer',
-    components: { BasicDrawer, BasicForm },
-    emits: ['success', 'register'],
-    setup(_, { emit }) {
-      const isUpdate = ref(true);
-
-      const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-        labelWidth: 90,
-        schemas: formSchema,
-        showActionButtonGroup: false,
-      });
-
-      const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-        resetFields();
-        setDrawerProps({ confirmLoading: false });
-        isUpdate.value = !!data?.isUpdate;
-        if (unref(isUpdate)) {
-          setFieldsValue({
-            ...data.record,
-          });
-        }
-      });
-
-      const getTitle = computed(() => (!unref(isUpdate) ? '鏂板瑙掕壊' : '缂栬緫瑙掕壊'));
-
-      async function handleSubmit() {
-        try {
-          const values = await validate();
-          setDrawerProps({ confirmLoading: true });
-          // TODO custom api
-          console.log(values);
-          closeDrawer();
-          emit('success');
-        } finally {
-          setDrawerProps({ confirmLoading: false });
-        }
-      }
-
-      return {
-        registerDrawer,
-        registerForm,
-        getTitle,
-        handleSubmit,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/test/index.vue b/src/views/demo/system/test/index.vue
deleted file mode 100644
index 57850e6..0000000
--- a/src/views/demo/system/test/index.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable">
-      <template #tableTitle>
-        <a-button type="primary" @click="handleCreate"> 鏂板 </a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction
-          :actions="[
-            {
-              icon: 'clarity:note-edit-line',
-              onClick: handleEdit.bind(null, record),
-            },
-            {
-              icon: 'ant-design:delete-outlined',
-              color: 'error',
-              popConfirm: {
-                title: '鏄惁纭鍒犻櫎',
-                confirm: handleDelete.bind(null, record),
-              },
-            },
-          ]"
-        />
-      </template>
-    </BasicTable>
-    <TestDrawer @register="registerDrawer" @success="handleSuccess" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { getTestListByPage } from '/@/api/demo/system';
-
-  import { useDrawer } from '/@/components/Drawer';
-  import TestDrawer from './TestDrawer.vue';
-
-  import { columns, searchFormSchema } from './test.data';
-
-  export default defineComponent({
-    name: 'system-test',
-    components: { BasicTable, TestDrawer, TableAction },
-    setup() {
-      const [registerDrawer, { openDrawer }] = useDrawer();
-      const [registerTable, { reload }] = useTable({
-        title: '鍒楄〃鏁版嵁',
-        api: getTestListByPage,
-        columns,
-        formConfig: {
-          labelWidth: 120,
-          schemas: searchFormSchema,
-        },
-        useSearchForm: true,
-        showTableSetting: true,
-        bordered: true,
-        showIndexColumn: false,
-        actionColumn: {
-          width: 80,
-          title: '鎿嶄綔',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-          fixed: undefined,
-        },
-      });
-
-      function handleCreate() {
-        openDrawer(true, {
-          isUpdate: false,
-        });
-      }
-
-      function handleEdit(record: Recordable) {
-        openDrawer(true, {
-          record,
-          isUpdate: true,
-        });
-      }
-
-      function handleDelete(record: Recordable) {
-        console.log(record);
-      }
-
-      function handleSuccess() {
-        reload();
-      }
-
-      return {
-        registerTable,
-        registerDrawer,
-        handleCreate,
-        handleEdit,
-        handleDelete,
-        handleSuccess,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/system/test/test.data.ts b/src/views/demo/system/test/test.data.ts
deleted file mode 100644
index b8f9023..0000000
--- a/src/views/demo/system/test/test.data.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鍚嶇О',
-    dataIndex: 'testName',
-    width: 200,
-  },
-  {
-    title: '鍊�',
-    dataIndex: 'testValue',
-    width: 180,
-  },
-  {
-    title: '鍒涘缓鏃堕棿',
-    dataIndex: 'createTime',
-    width: 180,
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'testName',
-    label: '鍚嶇О',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'testName',
-    label: '鍚嶇О',
-    required: true,
-    component: 'Input',
-  },
-  {
-    field: 'testValue',
-    label: '鍊�',
-    required: true,
-    component: 'Input',
-  },
-
-  {
-    label: ' ',
-    field: 'menu',
-    slot: 'menu',
-    component: 'Input',
-  },
-];
diff --git a/src/views/demo/table/AuthColumn.vue b/src/views/demo/table/AuthColumn.vue
deleted file mode 100644
index a611324..0000000
--- a/src/views/demo/table/AuthColumn.vue
+++ /dev/null
@@ -1,127 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable">
-      <template #action="{ record }">
-        <TableAction
-          :actions="[
-            {
-              label: '缂栬緫',
-              onClick: handleEdit.bind(null, record),
-              auth: 'other', // 鏍规嵁鏉冮檺鎺у埗鏄惁鏄剧ず: 鏃犳潈闄愶紝涓嶆樉绀�
-            },
-            {
-              label: '鍒犻櫎',
-              icon: 'ic:outline-delete-outline',
-              onClick: handleDelete.bind(null, record),
-              auth: 'super', // 鏍规嵁鏉冮檺鎺у埗鏄惁鏄剧ず: 鏈夋潈闄愶紝浼氭樉绀�
-            },
-          ]"
-          :dropDownActions="[
-            {
-              label: '鍚敤',
-              popConfirm: {
-                title: '鏄惁鍚敤锛�',
-                confirm: handleOpen.bind(null, record),
-              },
-              ifShow: (_action) => {
-                return record.status !== 'enable'; // 鏍规嵁涓氬姟鎺у埗鏄惁鏄剧ず: 闈瀍nable鐘舵�佺殑涓嶆樉绀哄惎鐢ㄦ寜閽�
-              },
-            },
-            {
-              label: '绂佺敤',
-              popConfirm: {
-                title: '鏄惁绂佺敤锛�',
-                confirm: handleOpen.bind(null, record),
-              },
-              ifShow: () => {
-                return record.status === 'enable'; // 鏍规嵁涓氬姟鎺у埗鏄惁鏄剧ず: enable鐘舵�佺殑鏄剧ず绂佺敤鎸夐挳
-              },
-            },
-            {
-              label: '鍚屾椂鎺у埗',
-              popConfirm: {
-                title: '鏄惁鍔ㄦ�佹樉绀猴紵',
-                confirm: handleOpen.bind(null, record),
-              },
-              auth: 'super', // 鍚屾椂鏍规嵁鏉冮檺鍜屼笟鍔℃帶鍒舵槸鍚︽樉绀�
-              ifShow: () => {
-                return true;
-              },
-            },
-          ]"
-        />
-      </template>
-    </BasicTable>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable, BasicColumn, TableAction } from '/@/components/Table';
-
-  import { demoListApi } from '/@/api/demo/table';
-  const columns: BasicColumn[] = [
-    {
-      title: '缂栧彿',
-      dataIndex: 'no',
-      width: 100,
-    },
-    {
-      title: '濮撳悕',
-      dataIndex: 'name',
-      auth: 'test', // 鏍规嵁鏉冮檺鎺у埗鏄惁鏄剧ず: 鏃犳潈闄愶紝涓嶆樉绀�
-    },
-    {
-      title: '鐘舵��',
-      dataIndex: 'status',
-    },
-    {
-      title: '鍦板潃',
-      dataIndex: 'address',
-      auth: 'super', // 鍚屾椂鏍规嵁鏉冮檺鍜屼笟鍔℃帶鍒舵槸鍚︽樉绀�
-      ifShow: (_column) => {
-        return true;
-      },
-    },
-    {
-      title: '寮�濮嬫椂闂�',
-      dataIndex: 'beginTime',
-    },
-    {
-      title: '缁撴潫鏃堕棿',
-      dataIndex: 'endTime',
-      width: 200,
-    },
-  ];
-  export default defineComponent({
-    components: { BasicTable, TableAction },
-    setup() {
-      const [registerTable] = useTable({
-        title: 'TableAction缁勪欢鍙婂浐瀹氬垪绀轰緥',
-        api: demoListApi,
-        columns: columns,
-        bordered: true,
-        actionColumn: {
-          width: 250,
-          title: 'Action',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-        },
-      });
-      function handleEdit(record: Recordable) {
-        console.log('鐐瑰嚮浜嗙紪杈�', record);
-      }
-      function handleDelete(record: Recordable) {
-        console.log('鐐瑰嚮浜嗗垹闄�', record);
-      }
-      function handleOpen(record: Recordable) {
-        console.log('鐐瑰嚮浜嗗惎鐢�', record);
-      }
-      return {
-        registerTable,
-        handleEdit,
-        handleDelete,
-        handleOpen,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/Basic.vue b/src/views/demo/table/Basic.vue
deleted file mode 100644
index 4d8e88c..0000000
--- a/src/views/demo/table/Basic.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable
-      title="鍩虹绀轰緥"
-      titleHelpMessage="娓╅Θ鎻愰啋"
-      :columns="columns"
-      :dataSource="data"
-      :canResize="canResize"
-      :loading="loading"
-      :striped="striped"
-      :bordered="border"
-      showTableSetting
-      :pagination="pagination"
-      @columns-change="handleColumnChange"
-    >
-      <template #toolbar>
-        <a-button type="primary" @click="toggleCanResize">
-          {{ !canResize ? '鑷�傚簲楂樺害' : '鍙栨秷鑷�傚簲' }}
-        </a-button>
-        <a-button type="primary" @click="toggleBorder">
-          {{ !border ? '鏄剧ず杈规' : '闅愯棌杈规' }}
-        </a-button>
-        <a-button type="primary" @click="toggleLoading"> 寮�鍚痩oading </a-button>
-        <a-button type="primary" @click="toggleStriped">
-          {{ !striped ? '鏄剧ず鏂戦┈绾�' : '闅愯棌鏂戦┈绾�' }}
-        </a-button>
-      </template>
-    </BasicTable>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { BasicTable, ColumnChangeParam } from '/@/components/Table';
-  import { getBasicColumns, getBasicData } from './tableData';
-
-  export default defineComponent({
-    components: { BasicTable },
-    setup() {
-      const canResize = ref(false);
-      const loading = ref(false);
-      const striped = ref(true);
-      const border = ref(true);
-      const pagination = ref<any>(false);
-      function toggleCanResize() {
-        canResize.value = !canResize.value;
-      }
-      function toggleStriped() {
-        striped.value = !striped.value;
-      }
-      function toggleLoading() {
-        loading.value = true;
-        setTimeout(() => {
-          loading.value = false;
-          pagination.value = { pageSize: 20 };
-        }, 3000);
-      }
-      function toggleBorder() {
-        border.value = !border.value;
-      }
-
-      function handleColumnChange(data: ColumnChangeParam[]) {
-        console.log('ColumnChanged', data);
-      }
-
-      return {
-        columns: getBasicColumns(),
-        data: getBasicData(),
-        canResize,
-        loading,
-        striped,
-        border,
-        toggleStriped,
-        toggleCanResize,
-        toggleLoading,
-        toggleBorder,
-        pagination,
-        handleColumnChange,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/CustomerCell.vue b/src/views/demo/table/CustomerCell.vue
deleted file mode 100644
index f2a83b3..0000000
--- a/src/views/demo/table/CustomerCell.vue
+++ /dev/null
@@ -1,104 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable">
-      <template #id="{ record }"> ID: {{ record.id }} </template>
-      <template #no="{ record }">
-        <Tag color="green">
-          {{ record.no }}
-        </Tag>
-      </template>
-      <template #bodyCell="{ column, record }">
-        <Avatar v-if="column.key === 'avatar'" :size="60" :src="record.avatar" />
-      </template>
-      <template #img="{ text }">
-        <TableImg :size="60" :simpleShow="true" :imgList="text" />
-      </template>
-      <template #imgs="{ text }"> <TableImg :size="60" :imgList="text" /> </template>
-
-      <template #category="{ record }">
-        <Tag color="green">
-          {{ record.no }}
-        </Tag>
-      </template>
-    </BasicTable>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable, BasicColumn, TableImg } from '/@/components/Table';
-  import { Tag, Avatar } from 'ant-design-vue';
-  import { demoListApi } from '/@/api/demo/table';
-  const columns: BasicColumn[] = [
-    {
-      title: 'ID',
-      dataIndex: 'id',
-      slots: { customRender: 'id' },
-    },
-    {
-      title: '澶村儚',
-      dataIndex: 'avatar',
-      width: 100,
-      slots: { customRender: 'avatar' },
-    },
-    {
-      title: '鍒嗙被',
-      dataIndex: 'category',
-      width: 80,
-      align: 'center',
-      defaultHidden: true,
-      slots: { customRender: 'category' },
-    },
-    {
-      title: '濮撳悕',
-      dataIndex: 'name',
-      width: 120,
-    },
-    {
-      title: '鍥剧墖鍒楄〃1',
-      dataIndex: 'imgArr',
-      helpMessage: ['杩欐槸绠�鍗曟ā寮忕殑鍥剧墖鍒楄〃', '鍙細鏄剧ず涓�寮犲湪琛ㄦ牸涓�', '浣嗙偣鍑诲彲棰勮澶氬紶鍥剧墖'],
-      width: 140,
-      slots: { customRender: 'img' },
-    },
-    {
-      title: '鐓х墖鍒楄〃2',
-      dataIndex: 'imgs',
-      width: 160,
-      slots: { customRender: 'imgs' },
-    },
-    {
-      title: '鍦板潃',
-      dataIndex: 'address',
-    },
-    {
-      title: '缂栧彿',
-      dataIndex: 'no',
-      slots: { customRender: 'no' },
-    },
-    {
-      title: '寮�濮嬫椂闂�',
-      dataIndex: 'beginTime',
-    },
-    {
-      title: '缁撴潫鏃堕棿',
-      dataIndex: 'endTime',
-    },
-  ];
-  export default defineComponent({
-    components: { BasicTable, TableImg, Tag, Avatar },
-    setup() {
-      const [registerTable] = useTable({
-        title: '鑷畾涔夊垪鍐呭',
-        titleHelpMessage: '琛ㄦ牸涓墍鏈夊ご鍍忋�佸浘鐗囧潎涓簃ock鐢熸垚锛屼粎鐢ㄤ簬婕旂ず鍥剧墖鍗犱綅',
-        api: demoListApi,
-        columns: columns,
-        bordered: true,
-        showTableSetting: true,
-      });
-
-      return {
-        registerTable,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/EditCellTable.vue b/src/views/demo/table/EditCellTable.vue
deleted file mode 100644
index 530f806..0000000
--- a/src/views/demo/table/EditCellTable.vue
+++ /dev/null
@@ -1,209 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable" @edit-end="handleEditEnd" @edit-cancel="handleEditCancel" :beforeEditSubmit="beforeEditSubmit" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable, BasicColumn } from '/@/components/Table';
-  import { optionsListApi } from '/@/api/demo/select';
-
-  import { demoListApi } from '/@/api/demo/table';
-  import { treeOptionsListApi } from '/@/api/demo/tree';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  const columns: BasicColumn[] = [
-    {
-      title: '杈撳叆妗�',
-      dataIndex: 'name',
-      edit: true,
-      editComponentProps: {
-        prefix: '$',
-      },
-      width: 200,
-    },
-    {
-      title: '榛樿杈撳叆鐘舵��',
-      dataIndex: 'name7',
-      edit: true,
-      editable: true,
-      width: 200,
-    },
-    {
-      title: '杈撳叆妗嗘牎楠�',
-      dataIndex: 'name1',
-      edit: true,
-      // 榛樿蹇呭~鏍¢獙
-      editRule: true,
-      width: 200,
-    },
-    {
-      title: '杈撳叆妗嗗嚱鏁版牎楠�',
-      dataIndex: 'name2',
-      edit: true,
-      editRule: async (text) => {
-        if (text === '2') {
-          return '涓嶈兘杈撳叆璇ュ��';
-        }
-        return '';
-      },
-      width: 200,
-    },
-    {
-      title: '鏁板瓧杈撳叆妗�',
-      dataIndex: 'id',
-      edit: true,
-      editRule: true,
-      editComponent: 'InputNumber',
-      width: 200,
-    },
-    {
-      title: '涓嬫媺妗�',
-      dataIndex: 'name3',
-      edit: true,
-      editComponent: 'Select',
-      editComponentProps: {
-        options: [
-          {
-            label: 'Option1',
-            value: '1',
-          },
-          {
-            label: 'Option2',
-            value: '2',
-          },
-        ],
-      },
-      width: 200,
-    },
-    {
-      title: '杩滅▼涓嬫媺',
-      dataIndex: 'name4',
-      edit: true,
-      editComponent: 'ApiSelect',
-      editComponentProps: {
-        api: optionsListApi,
-        resultField: 'list',
-        labelField: 'name',
-        valueField: 'id',
-      },
-      width: 200,
-    },
-    {
-      title: '杩滅▼涓嬫媺鏍�',
-      dataIndex: 'name71',
-      edit: true,
-      editComponent: 'ApiTreeSelect',
-      editRule: false,
-      editComponentProps: {
-        api: treeOptionsListApi,
-        resultField: 'list',
-      },
-      width: 200,
-    },
-    {
-      title: '鏃ユ湡閫夋嫨',
-      dataIndex: 'date',
-      edit: true,
-      editComponent: 'DatePicker',
-      editComponentProps: {
-        valueFormat: 'YYYY-MM-DD',
-        format: 'YYYY-MM-DD',
-      },
-      width: 200,
-    },
-    {
-      title: '鏃堕棿閫夋嫨',
-      dataIndex: 'time',
-      edit: true,
-      editComponent: 'TimePicker',
-      editComponentProps: {
-        valueFormat: 'HH:mm',
-        format: 'HH:mm',
-      },
-      width: 200,
-    },
-    {
-      title: '鍕鹃�夋',
-      dataIndex: 'name5',
-      edit: true,
-      editComponent: 'Checkbox',
-      editValueMap: (value) => {
-        return value ? '鏄�' : '鍚�';
-      },
-      width: 200,
-    },
-    {
-      title: '寮�鍏�',
-      dataIndex: 'name6',
-      edit: true,
-      editComponent: 'Switch',
-      editValueMap: (value) => {
-        return value ? '寮�' : '鍏�';
-      },
-      width: 200,
-    },
-  ];
-  export default defineComponent({
-    components: { BasicTable },
-    setup() {
-      const [registerTable] = useTable({
-        title: '鍙紪杈戝崟鍏冩牸绀轰緥',
-        api: demoListApi,
-        columns: columns,
-        showIndexColumn: false,
-        bordered: true,
-      });
-
-      const { createMessage } = useMessage();
-
-      function handleEditEnd({ record, index, key, value }: Recordable) {
-        console.log(record, index, key, value);
-        return false;
-      }
-
-      // 妯℃嫙灏嗘寚瀹氭暟鎹繚瀛�
-      function feakSave({ value, key, id }) {
-        createMessage.loading({
-          content: `姝e湪妯℃嫙淇濆瓨${key}`,
-          key: '_save_fake_data',
-          duration: 0,
-        });
-        return new Promise((resolve) => {
-          setTimeout(() => {
-            if (value === '') {
-              createMessage.error({
-                content: '淇濆瓨澶辫触锛氫笉鑳戒负绌�',
-                key: '_save_fake_data',
-                duration: 2,
-              });
-              resolve(false);
-            } else {
-              createMessage.success({
-                content: `璁板綍${id}鐨�${key}宸蹭繚瀛榒,
-                key: '_save_fake_data',
-                duration: 2,
-              });
-              resolve(true);
-            }
-          }, 2000);
-        });
-      }
-
-      async function beforeEditSubmit({ record, index, key, value }) {
-        console.log('鍗曞厓鏍兼暟鎹鍦ㄥ噯澶囨彁浜�', { record, index, key, value });
-        return await feakSave({ id: record.id, key, value });
-      }
-
-      function handleEditCancel() {
-        console.log('cancel');
-      }
-
-      return {
-        registerTable,
-        handleEditEnd,
-        handleEditCancel,
-        beforeEditSubmit,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/EditRowTable.vue b/src/views/demo/table/EditRowTable.vue
deleted file mode 100644
index cb0dd26..0000000
--- a/src/views/demo/table/EditRowTable.vue
+++ /dev/null
@@ -1,253 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable" @edit-change="onEditChange">
-      <template #action="{ record, column }">
-        <TableAction :actions="createActions(record, column)" />
-      </template>
-    </BasicTable>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { BasicTable, useTable, TableAction, BasicColumn, ActionItem, EditRecordRow } from '/@/components/Table';
-  import { optionsListApi } from '/@/api/demo/select';
-
-  import { demoListApi } from '/@/api/demo/table';
-  import { treeOptionsListApi } from '/@/api/demo/tree';
-  import { cloneDeep } from 'lodash-es';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const columns: BasicColumn[] = [
-    {
-      title: '杈撳叆妗�',
-      dataIndex: 'name',
-      editRow: true,
-      editComponentProps: {
-        prefix: '$',
-      },
-      width: 150,
-    },
-    {
-      title: '榛樿杈撳叆鐘舵��',
-      dataIndex: 'name7',
-      editRow: true,
-      width: 150,
-    },
-    {
-      title: '杈撳叆妗嗘牎楠�',
-      dataIndex: 'name1',
-      editRow: true,
-      align: 'left',
-      // 榛樿蹇呭~鏍¢獙
-      editRule: true,
-      width: 150,
-    },
-    {
-      title: '杈撳叆妗嗗嚱鏁版牎楠�',
-      dataIndex: 'name2',
-      editRow: true,
-      align: 'right',
-      editRule: async (text) => {
-        if (text === '2') {
-          return '涓嶈兘杈撳叆璇ュ��';
-        }
-        return '';
-      },
-    },
-    {
-      title: '鏁板瓧杈撳叆妗�',
-      dataIndex: 'id',
-      editRow: true,
-      editRule: true,
-      editComponent: 'InputNumber',
-      width: 150,
-    },
-    {
-      title: '涓嬫媺妗�',
-      dataIndex: 'name3',
-      editRow: true,
-      editComponent: 'Select',
-      editComponentProps: {
-        options: [
-          {
-            label: 'Option1',
-            value: '1',
-          },
-          {
-            label: 'Option2',
-            value: '2',
-          },
-          {
-            label: 'Option3',
-            value: '3',
-          },
-        ],
-      },
-      width: 200,
-    },
-    {
-      title: '杩滅▼涓嬫媺',
-      dataIndex: 'name4',
-      editRow: true,
-      editComponent: 'ApiSelect',
-      editComponentProps: {
-        api: optionsListApi,
-        resultField: 'list',
-        labelField: 'name',
-        valueField: 'id',
-      },
-      width: 200,
-    },
-    {
-      title: '杩滅▼涓嬫媺鏍�',
-      dataIndex: 'name8',
-      editRow: true,
-      editComponent: 'ApiTreeSelect',
-      editRule: false,
-      editComponentProps: {
-        api: treeOptionsListApi,
-        resultField: 'list',
-      },
-      width: 200,
-    },
-    {
-      title: '鏃ユ湡閫夋嫨',
-      dataIndex: 'date',
-      editRow: true,
-      editComponent: 'DatePicker',
-      editComponentProps: {
-        valueFormat: 'YYYY-MM-DD',
-        format: 'YYYY-MM-DD',
-      },
-      width: 150,
-    },
-    {
-      title: '鏃堕棿閫夋嫨',
-      dataIndex: 'time',
-      editRow: true,
-      editComponent: 'TimePicker',
-      editComponentProps: {
-        valueFormat: 'HH:mm',
-        format: 'HH:mm',
-      },
-      width: 100,
-    },
-    {
-      title: '鍕鹃�夋',
-      dataIndex: 'name5',
-      editRow: true,
-
-      editComponent: 'Checkbox',
-      editValueMap: (value) => {
-        return value ? '鏄�' : '鍚�';
-      },
-      width: 100,
-    },
-    {
-      title: '寮�鍏�',
-      dataIndex: 'name6',
-      editRow: true,
-      editComponent: 'Switch',
-      editValueMap: (value) => {
-        return value ? '寮�' : '鍏�';
-      },
-      width: 100,
-    },
-  ];
-  export default defineComponent({
-    components: { BasicTable, TableAction },
-    setup() {
-      const { createMessage: msg } = useMessage();
-      const currentEditKeyRef = ref('');
-      const [registerTable] = useTable({
-        title: '鍙紪杈戣绀轰緥',
-        titleHelpMessage: ['鏈緥涓慨鏀筟鏁板瓧杈撳叆妗哴杩欎竴鍒楁椂锛屽悓涓�琛岀殑[杩滅▼涓嬫媺]鍒楃殑褰撳墠缂栬緫鏁版嵁涔熶細鍚屾鍙戠敓鏀瑰彉'],
-        api: demoListApi,
-        columns: columns,
-        showIndexColumn: false,
-        showTableSetting: true,
-        tableSetting: { fullScreen: true },
-        actionColumn: {
-          width: 160,
-          title: 'Action',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-        },
-      });
-
-      function handleEdit(record: EditRecordRow) {
-        currentEditKeyRef.value = record.key;
-        record.onEdit?.(true);
-      }
-
-      function handleCancel(record: EditRecordRow) {
-        currentEditKeyRef.value = '';
-        record.onEdit?.(false, false);
-      }
-
-      async function handleSave(record: EditRecordRow) {
-        // 鏍¢獙
-        msg.loading({ content: '姝e湪淇濆瓨...', duration: 0, key: 'saving' });
-        const valid = await record.onValid?.();
-        if (valid) {
-          try {
-            const data = cloneDeep(record.editValueRefs);
-            console.log(data);
-            //TODO 姝ゅ灏嗘暟鎹彁浜ょ粰鏈嶅姟鍣ㄤ繚瀛�
-            // ...
-            // 淇濆瓨涔嬪悗鎻愪氦缂栬緫鐘舵��
-            const pass = await record.onEdit?.(false, true);
-            if (pass) {
-              currentEditKeyRef.value = '';
-            }
-            msg.success({ content: '鏁版嵁宸蹭繚瀛�', key: 'saving' });
-          } catch (error) {
-            msg.error({ content: '淇濆瓨澶辫触', key: 'saving' });
-          }
-        } else {
-          msg.error({ content: '璇峰~鍐欐纭殑鏁版嵁', key: 'saving' });
-        }
-      }
-
-      function createActions(record: EditRecordRow, column: BasicColumn): ActionItem[] {
-        if (!record.editable) {
-          return [
-            {
-              label: '缂栬緫',
-              disabled: currentEditKeyRef.value ? currentEditKeyRef.value !== record.key : false,
-              onClick: handleEdit.bind(null, record),
-            },
-          ];
-        }
-        return [
-          {
-            label: '淇濆瓨',
-            onClick: handleSave.bind(null, record, column),
-          },
-          {
-            label: '鍙栨秷',
-            popConfirm: {
-              title: '鏄惁鍙栨秷缂栬緫',
-              confirm: handleCancel.bind(null, record, column),
-            },
-          },
-        ];
-      }
-
-      function onEditChange({ column, value, record }) {
-        // 鏈緥
-        if (column.dataIndex === 'id') {
-          record.editValueRefs.name4.value = `${value}`;
-        }
-        console.log(column, value, record);
-      }
-
-      return {
-        registerTable,
-        handleEdit,
-        createActions,
-        onEditChange,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/ExpandTable.vue b/src/views/demo/table/ExpandTable.vue
deleted file mode 100644
index 65fcd62..0000000
--- a/src/views/demo/table/ExpandTable.vue
+++ /dev/null
@@ -1,74 +0,0 @@
-<template>
-  <PageWrapper
-    title="鍙睍寮�琛ㄦ牸"
-    content="涓嶅彲涓巗croll鍏辩敤銆俆ableAction缁勪欢鍙厤缃畇topButtonPropagation鏉ラ樆姝㈡搷浣滄寜閽殑鐐瑰嚮浜嬩欢鍐掓场锛屼互渚块厤鍚圱able缁勪欢鐨別xpandRowByClick"
-  >
-    <BasicTable @register="registerTable">
-      <template #expandedRowRender="{ record }">
-        <span>No: {{ record.no }} </span>
-      </template>
-      <template #action="{ record }">
-        <TableAction
-          stopButtonPropagation
-          :actions="[
-            {
-              label: '鍒犻櫎',
-              icon: 'ic:outline-delete-outline',
-              onClick: handleDelete.bind(null, record),
-            },
-          ]"
-          :dropDownActions="[
-            {
-              label: '鍚敤',
-              popConfirm: {
-                title: '鏄惁鍚敤锛�',
-                confirm: handleOpen.bind(null, record),
-              },
-            },
-          ]"
-        />
-      </template>
-    </BasicTable>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { PageWrapper } from '/@/components/Page';
-  import { getBasicColumns } from './tableData';
-
-  import { demoListApi } from '/@/api/demo/table';
-
-  export default defineComponent({
-    components: { BasicTable, TableAction, PageWrapper },
-    setup() {
-      const [registerTable] = useTable({
-        api: demoListApi,
-        title: '鍙睍寮�琛ㄦ牸婕旂ず',
-        titleHelpMessage: ['宸插惎鐢╡xpandRowByClick', '宸插惎鐢╯topButtonPropagation'],
-        columns: getBasicColumns(),
-        rowKey: 'id',
-        canResize: false,
-        expandRowByClick: true,
-        actionColumn: {
-          width: 160,
-          title: 'Action',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-        },
-      });
-      function handleDelete(record: Recordable) {
-        console.log('鐐瑰嚮浜嗗垹闄�', record);
-      }
-      function handleOpen(record: Recordable) {
-        console.log('鐐瑰嚮浜嗗惎鐢�', record);
-      }
-
-      return {
-        registerTable,
-        handleDelete,
-        handleOpen,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/FetchTable.vue b/src/views/demo/table/FetchTable.vue
deleted file mode 100644
index 8d9efa3..0000000
--- a/src/views/demo/table/FetchTable.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-<template>
-  <PageWrapper contentBackground contentClass="flex" dense contentFullHeight fixedHeight>
-    <BasicTable @register="registerTable">
-      <template #toolbar>
-        <a-button type="primary" @click="handleReloadCurrent"> 鍒锋柊褰撳墠椤� </a-button>
-        <a-button type="primary" @click="handleReload"> 鍒锋柊骞惰繑鍥炵涓�椤� </a-button>
-      </template>
-    </BasicTable>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable } from '/@/components/Table';
-  import { getBasicColumns } from './tableData';
-  import { PageWrapper } from '/@/components/Page';
-
-  import { demoListApi } from '/@/api/demo/table';
-  export default defineComponent({
-    components: { BasicTable, PageWrapper },
-    setup() {
-      const [registerTable, { reload }] = useTable({
-        title: '杩滅▼鍔犺浇绀轰緥',
-        api: demoListApi,
-        columns: getBasicColumns(),
-        pagination: { pageSize: 10 },
-      });
-      function handleReloadCurrent() {
-        reload();
-      }
-
-      function handleReload() {
-        reload({
-          page: 1,
-        });
-      }
-      return {
-        registerTable,
-        handleReloadCurrent,
-        handleReload,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/FixedColumn.vue b/src/views/demo/table/FixedColumn.vue
deleted file mode 100644
index c02f5b8..0000000
--- a/src/views/demo/table/FixedColumn.vue
+++ /dev/null
@@ -1,93 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable">
-      <template #action="{ record }">
-        <TableAction
-          :actions="[
-            {
-              label: '鍒犻櫎',
-              icon: 'ic:outline-delete-outline',
-              onClick: handleDelete.bind(null, record),
-            },
-          ]"
-          :dropDownActions="[
-            {
-              label: '鍚敤',
-              popConfirm: {
-                title: '鏄惁鍚敤锛�',
-                confirm: handleOpen.bind(null, record),
-              },
-            },
-          ]"
-        />
-      </template>
-    </BasicTable>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable, BasicColumn, TableAction } from '/@/components/Table';
-
-  import { demoListApi } from '/@/api/demo/table';
-  const columns: BasicColumn[] = [
-    {
-      title: 'ID',
-      dataIndex: 'id',
-      fixed: 'left',
-      width: 280,
-    },
-    {
-      title: '濮撳悕',
-      dataIndex: 'name',
-      width: 260,
-    },
-    {
-      title: '鍦板潃',
-      dataIndex: 'address',
-    },
-    {
-      title: '缂栧彿',
-      dataIndex: 'no',
-      width: 300,
-    },
-    {
-      title: '寮�濮嬫椂闂�',
-      width: 200,
-      dataIndex: 'beginTime',
-    },
-    {
-      title: '缁撴潫鏃堕棿',
-      dataIndex: 'endTime',
-      width: 200,
-    },
-  ];
-  export default defineComponent({
-    components: { BasicTable, TableAction },
-    setup() {
-      const [registerTable] = useTable({
-        title: 'TableAction缁勪欢鍙婂浐瀹氬垪绀轰緥',
-        api: demoListApi,
-        columns: columns,
-        rowSelection: { type: 'radio' },
-        bordered: true,
-        actionColumn: {
-          width: 160,
-          title: 'Action',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-        },
-      });
-      function handleDelete(record: Recordable) {
-        console.log('鐐瑰嚮浜嗗垹闄�', record);
-      }
-      function handleOpen(record: Recordable) {
-        console.log('鐐瑰嚮浜嗗惎鐢�', record);
-      }
-      return {
-        registerTable,
-        handleDelete,
-        handleOpen,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/FixedHeight.vue b/src/views/demo/table/FixedHeight.vue
deleted file mode 100644
index 389da36..0000000
--- a/src/views/demo/table/FixedHeight.vue
+++ /dev/null
@@ -1,41 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable">
-      <template #customTitle>
-        <span>
-          濮撳悕
-          <BasicHelp class="ml-2" text="濮撳悕" />
-        </span>
-      </template>
-      <template #customAddress>
-        鍦板潃
-        <FormOutlined class="ml-2" />
-      </template>
-    </BasicTable>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable } from '/@/components/Table';
-  import { getCustomHeaderColumns } from './tableData';
-  import { FormOutlined } from '@ant-design/icons-vue';
-  import { demoListApi } from '/@/api/demo/table';
-  import { BasicHelp } from '/@/components/Basic';
-
-  export default defineComponent({
-    components: { BasicTable, FormOutlined, BasicHelp },
-    setup() {
-      const [registerTable] = useTable({
-        title: '瀹氶珮/澶撮儴鑷畾涔�',
-        api: demoListApi,
-        columns: getCustomHeaderColumns(),
-        canResize: false,
-        scroll: { y: 100 },
-      });
-
-      return {
-        registerTable,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/FooterTable.vue b/src/views/demo/table/FooterTable.vue
deleted file mode 100644
index e81780b..0000000
--- a/src/views/demo/table/FooterTable.vue
+++ /dev/null
@@ -1,50 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable } from '/@/components/Table';
-  import { getBasicColumns } from './tableData';
-
-  import { demoListApi } from '/@/api/demo/table';
-
-  export default defineComponent({
-    components: { BasicTable },
-    setup() {
-      function handleSummary(tableData: Recordable[]) {
-        const totalNo = tableData.reduce((prev, next) => {
-          prev += next.no;
-          return prev;
-        }, 0);
-        return [
-          {
-            _row: '鍚堣',
-            _index: '骞冲潎鍊�',
-            no: totalNo,
-          },
-          {
-            _row: '鍚堣',
-            _index: '骞冲潎鍊�',
-            no: totalNo,
-          },
-        ];
-      }
-      const [registerTable] = useTable({
-        title: '琛ㄥ熬琛屽悎璁$ず渚�',
-        api: demoListApi,
-        rowSelection: { type: 'checkbox' },
-        columns: getBasicColumns(),
-        showSummary: true,
-        summaryFunc: handleSummary,
-        scroll: { x: 1000 },
-        canResize: false,
-      });
-
-      return {
-        registerTable,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/FormTable.vue b/src/views/demo/table/FormTable.vue
deleted file mode 100644
index f73c59b..0000000
--- a/src/views/demo/table/FormTable.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-<template>
-  <BasicTable @register="registerTable" :rowSelection="{ type: 'checkbox', selectedRowKeys: checkedKeys, onChange: onSelectChange }">
-    <template #form-custom> custom-slot </template>
-    <template #headerTop>
-      <a-alert type="info" show-icon>
-        <template #message>
-          <template v-if="checkedKeys.length > 0">
-            <span>宸查�変腑{{ checkedKeys.length }}鏉¤褰�(鍙法椤�)</span>
-            <a-button type="link" @click="checkedKeys = []" size="small">娓呯┖</a-button>
-          </template>
-          <template v-else>
-            <span>鏈�変腑浠讳綍椤圭洰</span>
-          </template>
-        </template>
-      </a-alert>
-    </template>
-    <template #toolbar>
-      <a-button type="primary" @click="getFormValues">鑾峰彇琛ㄥ崟鏁版嵁</a-button>
-    </template>
-  </BasicTable>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { BasicTable, useTable } from '/@/components/Table';
-  import { getBasicColumns, getFormConfig } from './tableData';
-  import { Alert } from 'ant-design-vue';
-
-  import { demoListApi } from '/@/api/demo/table';
-
-  export default defineComponent({
-    components: { BasicTable, AAlert: Alert },
-    setup() {
-      const checkedKeys = ref<Array<string | number>>([]);
-      const [registerTable, { getForm }] = useTable({
-        title: '寮�鍚悳绱㈠尯鍩�',
-        api: demoListApi,
-        columns: getBasicColumns(),
-        useSearchForm: true,
-        formConfig: getFormConfig(),
-        showTableSetting: true,
-        tableSetting: { fullScreen: true },
-        showIndexColumn: false,
-        rowKey: 'id',
-      });
-
-      function getFormValues() {
-        console.log(getForm().getFieldsValue());
-      }
-
-      function onSelectChange(selectedRowKeys: (string | number)[]) {
-        console.log(selectedRowKeys);
-        checkedKeys.value = selectedRowKeys;
-      }
-
-      return {
-        registerTable,
-        getFormValues,
-        checkedKeys,
-        onSelectChange,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/MergeHeader.vue b/src/views/demo/table/MergeHeader.vue
deleted file mode 100644
index 2c3b612..0000000
--- a/src/views/demo/table/MergeHeader.vue
+++ /dev/null
@@ -1,27 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable } from '/@/components/Table';
-  import { getMergeHeaderColumns } from './tableData';
-
-  import { demoListApi } from '/@/api/demo/table';
-
-  export default defineComponent({
-    components: { BasicTable },
-    setup() {
-      const [registerTable] = useTable({
-        title: '澶氱骇琛ㄥご绀轰緥',
-        api: demoListApi,
-        columns: getMergeHeaderColumns(),
-      });
-
-      return {
-        registerTable,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/MultipleHeader.vue b/src/views/demo/table/MultipleHeader.vue
deleted file mode 100644
index fa0bf43..0000000
--- a/src/views/demo/table/MultipleHeader.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable } from '/@/components/Table';
-  import { getMultipleHeaderColumns } from './tableData';
-
-  import { demoListApi } from '/@/api/demo/table';
-  export default defineComponent({
-    components: { BasicTable },
-    setup() {
-      const [registerTable] = useTable({
-        title: '澶氱骇琛ㄥご绀轰緥',
-        api: demoListApi,
-        columns: getMultipleHeaderColumns(),
-      });
-
-      return {
-        registerTable,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/NestedTable.vue b/src/views/demo/table/NestedTable.vue
deleted file mode 100644
index fb71592..0000000
--- a/src/views/demo/table/NestedTable.vue
+++ /dev/null
@@ -1,110 +0,0 @@
-<template>
-  <a-table :columns="columns" :data-source="data" class="components-table-demo-nested">
-    <template #operation>
-      <a>Publish</a>
-    </template>
-    <template #expandedRowRender>
-      <a-table :columns="innerColumns" :data-source="innerData" :pagination="false">
-        <template #status>
-          <span>
-            <a-badge status="success" />
-            Finished
-          </span>
-        </template>
-        <template #operation>
-          <span class="table-operation">
-            <a>Pause</a>
-            <a>Stop</a>
-            <a-dropdown>
-              <template #overlay>
-                <a-menu>
-                  <a-menu-item>Action 1</a-menu-item>
-                  <a-menu-item>Action 2</a-menu-item>
-                </a-menu>
-              </template>
-              <a> More </a>
-            </a-dropdown>
-          </span>
-        </template>
-      </a-table>
-    </template>
-  </a-table>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-
-  const columns = [
-    { title: 'Name', dataIndex: 'name', key: 'name' },
-    { title: 'Platform', dataIndex: 'platform', key: 'platform' },
-    { title: 'Version', dataIndex: 'version', key: 'version' },
-    { title: 'Upgraded', dataIndex: 'upgradeNum', key: 'upgradeNum' },
-    { title: 'Creator', dataIndex: 'creator', key: 'creator' },
-    { title: 'Date', dataIndex: 'createdAt', key: 'createdAt' },
-    { title: 'Action', key: 'operation', slots: { customRender: 'operation' } },
-  ];
-
-  interface DataItem {
-    key: number;
-    name: string;
-    platform: string;
-    version: string;
-    upgradeNum: number;
-    creator: string;
-    createdAt: string;
-  }
-
-  const data: DataItem[] = [];
-  for (let i = 0; i < 3; ++i) {
-    data.push({
-      key: i,
-      name: 'Screem',
-      platform: 'iOS',
-      version: '10.3.4.5654',
-      upgradeNum: 500,
-      creator: 'Jack',
-      createdAt: '2014-12-24 23:12:00',
-    });
-  }
-
-  const innerColumns = [
-    { title: 'Date', dataIndex: 'date', key: 'date' },
-    { title: 'Name', dataIndex: 'name', key: 'name' },
-    { title: 'Status', key: 'state', slots: { customRender: 'status' } },
-    { title: 'Upgrade Status', dataIndex: 'upgradeNum', key: 'upgradeNum' },
-    {
-      title: 'Action',
-      dataIndex: 'operation',
-      key: 'operation',
-      slots: { customRender: 'operation' },
-    },
-  ];
-
-  interface innerDataItem {
-    key: number;
-    date: string;
-    name: string;
-    upgradeNum: string;
-  }
-
-  const innerData: innerDataItem[] = [];
-  for (let i = 0; i < 3; ++i) {
-    innerData.push({
-      key: i,
-      date: '2014-12-24 23:12:00',
-      name: 'This is production name',
-      upgradeNum: 'Upgraded: 56',
-    });
-  }
-
-  export default defineComponent({
-    components: {},
-    setup() {
-      return {
-        data,
-        columns,
-        innerColumns,
-        innerData,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/RefTable.vue b/src/views/demo/table/RefTable.vue
deleted file mode 100644
index f2a0c6d..0000000
--- a/src/views/demo/table/RefTable.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-  <div class="p-4">
-    <div class="mb-4">
-      <a-button class="mr-2" @click="reloadTable"> 杩樺師 </a-button>
-      <a-button class="mr-2" @click="changeLoading"> 寮�鍚痩oading </a-button>
-      <a-button class="mr-2" @click="changeColumns"> 鏇存敼Columns </a-button>
-      <a-button class="mr-2" @click="getColumn"> 鑾峰彇Columns </a-button>
-      <a-button class="mr-2" @click="getTableData"> 鑾峰彇琛ㄦ牸鏁版嵁 </a-button>
-      <a-button class="mr-2" @click="getTableRawData"> 鑾峰彇鎺ュ彛鍘熷鏁版嵁 </a-button>
-      <a-button class="mr-2" @click="setPaginationInfo"> 璺宠浆鍒扮2椤� </a-button>
-    </div>
-    <div class="mb-4">
-      <a-button class="mr-2" @click="getSelectRowList"> 鑾峰彇閫変腑琛� </a-button>
-      <a-button class="mr-2" @click="getSelectRowKeyList"> 鑾峰彇閫変腑琛孠ey </a-button>
-      <a-button class="mr-2" @click="setSelectedRowKeyList"> 璁剧疆閫変腑琛� </a-button>
-      <a-button class="mr-2" @click="clearSelect"> 娓呯┖閫変腑琛� </a-button>
-      <a-button class="mr-2" @click="getPagination"> 鑾峰彇鍒嗛〉淇℃伅 </a-button>
-    </div>
-    <BasicTable
-      :canResize="false"
-      title="RefTable绀轰緥"
-      titleHelpMessage="浣跨敤Ref璋冪敤琛ㄦ牸鍐呮柟娉�"
-      ref="tableRef"
-      :api="api"
-      :columns="columns"
-      rowKey="id"
-      :rowSelection="{ type: 'checkbox' }"
-    />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, unref } from 'vue';
-  import { BasicTable, TableActionType } from '/@/components/Table';
-  import { getBasicColumns, getBasicShortColumns } from './tableData';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { demoListApi } from '/@/api/demo/table';
-  export default defineComponent({
-    components: { BasicTable },
-    setup() {
-      const tableRef = ref<Nullable<TableActionType>>(null);
-      const { createMessage } = useMessage();
-
-      function getTableAction() {
-        const tableAction = unref(tableRef);
-        if (!tableAction) {
-          throw new Error('tableAction is null');
-        }
-        return tableAction;
-      }
-      function changeLoading() {
-        getTableAction().setLoading(true);
-        setTimeout(() => {
-          getTableAction().setLoading(false);
-        }, 1000);
-      }
-      function changeColumns() {
-        getTableAction().setColumns(getBasicShortColumns());
-      }
-      function reloadTable() {
-        getTableAction().setColumns(getBasicColumns());
-
-        getTableAction().reload({
-          page: 1,
-        });
-      }
-      function getColumn() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getTableAction().getColumns());
-      }
-
-      function getTableData() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getTableAction().getDataSource());
-      }
-      function getTableRawData() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getTableAction().getRawDataSource());
-      }
-
-      function getPagination() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getTableAction().getPaginationRef());
-      }
-
-      function setPaginationInfo() {
-        getTableAction().setPagination({
-          current: 2,
-        });
-        getTableAction().reload();
-      }
-      function getSelectRowList() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getTableAction().getSelectRows());
-      }
-      function getSelectRowKeyList() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getTableAction().getSelectRowKeys());
-      }
-      function setSelectedRowKeyList() {
-        getTableAction().setSelectedRowKeys(['0', '1', '2']);
-      }
-      function clearSelect() {
-        getTableAction().clearSelectedRowKeys();
-      }
-
-      return {
-        tableRef,
-        api: demoListApi,
-        columns: getBasicColumns(),
-        changeLoading,
-        changeColumns,
-        reloadTable,
-        getColumn,
-        getTableData,
-        getTableRawData,
-        getPagination,
-        setPaginationInfo,
-        getSelectRowList,
-        getSelectRowKeyList,
-        setSelectedRowKeyList,
-        clearSelect,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/TreeTable.vue b/src/views/demo/table/TreeTable.vue
deleted file mode 100644
index 88afe63..0000000
--- a/src/views/demo/table/TreeTable.vue
+++ /dev/null
@@ -1,41 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="register">
-      <template #toolbar>
-        <a-button type="primary" @click="expandAll">灞曞紑鍏ㄩ儴</a-button>
-        <a-button type="primary" @click="collapseAll">鎶樺彔鍏ㄩ儴</a-button>
-      </template>
-    </BasicTable>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, useTable } from '/@/components/Table';
-  import { getBasicColumns, getTreeTableData } from './tableData';
-
-  export default defineComponent({
-    components: { BasicTable },
-    setup() {
-      const [register, { expandAll, collapseAll }] = useTable({
-        title: '鏍戝舰琛ㄦ牸',
-        isTreeTable: true,
-        rowSelection: {
-          type: 'checkbox',
-          getCheckboxProps(record: Recordable) {
-            // Demo: 绗竴琛岋紙id涓�0锛夌殑閫夋嫨妗嗙鐢�
-            if (record.id === '0') {
-              return { disabled: true };
-            } else {
-              return { disabled: false };
-            }
-          },
-        },
-        titleHelpMessage: '鏍戝舰缁勪欢涓嶈兘鍜屽簭鍒楀彿鍒楀悓鏃跺瓨鍦�',
-        columns: getBasicColumns(),
-        dataSource: getTreeTableData(),
-        rowKey: 'id',
-      });
-      return { register, expandAll, collapseAll };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/UseTable.vue b/src/views/demo/table/UseTable.vue
deleted file mode 100644
index 3c54997..0000000
--- a/src/views/demo/table/UseTable.vue
+++ /dev/null
@@ -1,147 +0,0 @@
-<template>
-  <div class="p-4">
-    <div class="mb-4">
-      <a-button class="mr-2" @click="reloadTable"> 杩樺師 </a-button>
-      <a-button class="mr-2" @click="changeLoading"> 寮�鍚痩oading </a-button>
-      <a-button class="mr-2" @click="changeColumns"> 鏇存敼Columns </a-button>
-      <a-button class="mr-2" @click="getColumn"> 鑾峰彇Columns </a-button>
-      <a-button class="mr-2" @click="getTableData"> 鑾峰彇琛ㄦ牸鏁版嵁 </a-button>
-      <a-button class="mr-2" @click="getTableRawData"> 鑾峰彇鎺ュ彛鍘熷鏁版嵁 </a-button>
-      <a-button class="mr-2" @click="setPaginationInfo"> 璺宠浆鍒扮2椤� </a-button>
-    </div>
-    <div class="mb-4">
-      <a-button class="mr-2" @click="getSelectRowList"> 鑾峰彇閫変腑琛� </a-button>
-      <a-button class="mr-2" @click="getSelectRowKeyList"> 鑾峰彇閫変腑琛孠ey </a-button>
-      <a-button class="mr-2" @click="setSelectedRowKeyList"> 璁剧疆閫変腑琛� </a-button>
-      <a-button class="mr-2" @click="clearSelect"> 娓呯┖閫変腑琛� </a-button>
-      <a-button class="mr-2" @click="getPagination"> 鑾峰彇鍒嗛〉淇℃伅 </a-button>
-    </div>
-    <BasicTable @register="registerTable" />
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { BasicTable, ColumnChangeParam, useTable } from '/@/components/Table';
-  import { getBasicColumns, getBasicShortColumns } from './tableData';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { demoListApi } from '/@/api/demo/table';
-  export default defineComponent({
-    components: { BasicTable },
-    setup() {
-      const { createMessage } = useMessage();
-      function onChange() {
-        console.log('onChange', arguments);
-      }
-      const [
-        registerTable,
-        {
-          setLoading,
-          setColumns,
-          getColumns,
-          getDataSource,
-          getRawDataSource,
-          reload,
-          getPaginationRef,
-          setPagination,
-          getSelectRows,
-          getSelectRowKeys,
-          setSelectedRowKeys,
-          clearSelectedRowKeys,
-        },
-      ] = useTable({
-        canResize: true,
-        title: 'useTable绀轰緥',
-        titleHelpMessage: '浣跨敤useTable璋冪敤琛ㄦ牸鍐呮柟娉�',
-        api: demoListApi,
-        columns: getBasicColumns(),
-        defSort: {
-          field: 'name',
-          order: 'ascend',
-        },
-        rowKey: 'id',
-        showTableSetting: true,
-        onChange,
-        rowSelection: {
-          type: 'checkbox',
-        },
-        onColumnsChange: (data: ColumnChangeParam[]) => {
-          console.log('ColumnsChanged', data);
-        },
-      });
-
-      function changeLoading() {
-        setLoading(true);
-        setTimeout(() => {
-          setLoading(false);
-        }, 1000);
-      }
-      function changeColumns() {
-        setColumns(getBasicShortColumns());
-      }
-      function reloadTable() {
-        setColumns(getBasicColumns());
-
-        reload({
-          page: 1,
-        });
-      }
-      function getColumn() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getColumns());
-      }
-
-      function getTableData() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getDataSource());
-      }
-
-      function getTableRawData() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getRawDataSource());
-      }
-
-      function getPagination() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getPaginationRef());
-      }
-
-      function setPaginationInfo() {
-        setPagination({
-          current: 2,
-        });
-        reload();
-      }
-      function getSelectRowList() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getSelectRows());
-      }
-      function getSelectRowKeyList() {
-        createMessage.info('璇峰湪鎺у埗鍙版煡鐪嬶紒');
-        console.log(getSelectRowKeys());
-      }
-      function setSelectedRowKeyList() {
-        setSelectedRowKeys(['0', '1', '2']);
-      }
-      function clearSelect() {
-        clearSelectedRowKeys();
-      }
-
-      return {
-        registerTable,
-        changeLoading,
-        changeColumns,
-        reloadTable,
-        getColumn,
-        getTableData,
-        getTableRawData,
-        getPagination,
-        setPaginationInfo,
-        getSelectRowList,
-        getSelectRowKeyList,
-        setSelectedRowKeyList,
-        clearSelect,
-        onChange,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/table/tableData.tsx b/src/views/demo/table/tableData.tsx
deleted file mode 100644
index 6270ab4..0000000
--- a/src/views/demo/table/tableData.tsx
+++ /dev/null
@@ -1,316 +0,0 @@
-import { FormProps, FormSchema } from '/@/components/Table';
-import { BasicColumn } from '/@/components/Table/src/types/table';
-
-export function getBasicColumns(): BasicColumn[] {
-  return [
-    {
-      title: 'ID',
-      dataIndex: 'id',
-      fixed: 'left',
-      width: 200,
-    },
-    {
-      title: '濮撳悕',
-      dataIndex: 'name',
-      width: 150,
-      filters: [
-        { text: 'Male', value: 'male' },
-        { text: 'Female', value: 'female' },
-      ],
-    },
-    {
-      title: '鍦板潃',
-      dataIndex: 'address',
-      width: 300,
-    },
-    {
-      title: '缂栧彿',
-      dataIndex: 'no',
-      width: 150,
-      sorter: true,
-      defaultHidden: true,
-    },
-    {
-      title: '寮�濮嬫椂闂�',
-      width: 150,
-      sorter: true,
-      dataIndex: 'beginTime',
-    },
-    {
-      title: '缁撴潫鏃堕棿',
-      width: 150,
-      sorter: true,
-      dataIndex: 'endTime',
-    },
-  ];
-}
-
-export function getBasicShortColumns(): BasicColumn[] {
-  return [
-    {
-      title: 'ID',
-      width: 150,
-      dataIndex: 'id',
-      sorter: true,
-      sortOrder: 'ascend',
-    },
-    {
-      title: '濮撳悕',
-      dataIndex: 'name',
-      width: 120,
-    },
-    {
-      title: '鍦板潃',
-      dataIndex: 'address',
-    },
-    {
-      title: '缂栧彿',
-      dataIndex: 'no',
-      width: 80,
-    },
-  ];
-}
-
-export function getMultipleHeaderColumns(): BasicColumn[] {
-  return [
-    {
-      title: 'ID',
-      dataIndex: 'id',
-      width: 200,
-    },
-    {
-      title: '濮撳悕',
-      dataIndex: 'name',
-      width: 120,
-    },
-    {
-      title: '鍦板潃',
-      dataIndex: 'address',
-      sorter: true,
-      children: [
-        {
-          title: '缂栧彿',
-          dataIndex: 'no',
-          width: 120,
-          filters: [
-            { text: 'Male', value: 'male', children: [] },
-            { text: 'Female', value: 'female', children: [] },
-          ],
-        },
-
-        {
-          title: '寮�濮嬫椂闂�',
-          dataIndex: 'beginTime',
-          width: 120,
-        },
-        {
-          title: '缁撴潫鏃堕棿',
-          dataIndex: 'endTime',
-          width: 120,
-        },
-      ],
-    },
-  ];
-}
-
-export function getCustomHeaderColumns(): BasicColumn[] {
-  return [
-    {
-      title: 'ID',
-      dataIndex: 'id',
-      width: 200,
-    },
-    {
-      // title: '濮撳悕',
-      dataIndex: 'name',
-      width: 120,
-      slots: { title: 'customTitle' },
-    },
-    {
-      // title: '鍦板潃',
-      dataIndex: 'address',
-      width: 120,
-      slots: { title: 'customAddress' },
-      sorter: true,
-    },
-
-    {
-      title: '缂栧彿',
-      dataIndex: 'no',
-      width: 120,
-      filters: [
-        { text: 'Male', value: 'male', children: [] },
-        { text: 'Female', value: 'female', children: [] },
-      ],
-    },
-    {
-      title: '寮�濮嬫椂闂�',
-      dataIndex: 'beginTime',
-      width: 120,
-    },
-    {
-      title: '缁撴潫鏃堕棿',
-      dataIndex: 'endTime',
-      width: 120,
-    },
-  ];
-}
-const renderContent = ({ text, index }: { text: any; index: number }) => {
-  const obj: any = {
-    children: text,
-    attrs: {},
-  };
-  if (index === 9) {
-    obj.attrs.colSpan = 0;
-  }
-  return obj;
-};
-export function getMergeHeaderColumns(): BasicColumn[] {
-  return [
-    {
-      title: 'ID',
-      dataIndex: 'id',
-      width: 300,
-      customRender: renderContent,
-    },
-    {
-      title: '濮撳悕',
-      dataIndex: 'name',
-      width: 300,
-      customRender: renderContent,
-    },
-    {
-      title: '鍦板潃',
-      dataIndex: 'address',
-      colSpan: 2,
-      width: 120,
-      sorter: true,
-      customRender: ({ text, index }: { text: any; index: number }) => {
-        const obj: any = {
-          children: text,
-          attrs: {},
-        };
-        if (index === 2) {
-          obj.attrs.rowSpan = 2;
-        }
-        if (index === 3) {
-          obj.attrs.colSpan = 0;
-        }
-        return obj;
-      },
-    },
-    {
-      title: '缂栧彿',
-      dataIndex: 'no',
-      colSpan: 0,
-      filters: [
-        { text: 'Male', value: 'male', children: [] },
-        { text: 'Female', value: 'female', children: [] },
-      ],
-      customRender: renderContent,
-    },
-    {
-      title: '寮�濮嬫椂闂�',
-      dataIndex: 'beginTime',
-      width: 200,
-      customRender: renderContent,
-    },
-    {
-      title: '缁撴潫鏃堕棿',
-      dataIndex: 'endTime',
-      width: 200,
-      customRender: renderContent,
-    },
-  ];
-}
-export const getAdvanceSchema = (itemNumber = 6): FormSchema[] => {
-  const arr: any = [];
-  for (let index = 0; index < itemNumber; index++) {
-    arr.push({
-      field: `field${index}`,
-      label: `瀛楁${index}`,
-      component: 'Input',
-      colProps: {
-        xl: 12,
-        xxl: 8,
-      },
-    });
-  }
-  return arr;
-};
-export function getFormConfig(): Partial<FormProps> {
-  return {
-    labelWidth: 100,
-    schemas: [
-      ...getAdvanceSchema(5),
-      {
-        field: `field11`,
-        label: `Slot绀轰緥`,
-        component: 'Select',
-        slot: 'custom',
-        colProps: {
-          xl: 12,
-          xxl: 8,
-        },
-      },
-    ],
-  };
-}
-export function getBasicData() {
-  const data: any = (() => {
-    const arr: any = [];
-    for (let index = 0; index < 40; index++) {
-      arr.push({
-        id: `${index}`,
-        name: 'John Brown',
-        age: `1${index}`,
-        no: `${index + 10}`,
-        address: 'New York No. 1 Lake ParkNew York No. 1 Lake Park',
-        beginTime: new Date().toLocaleString(),
-        endTime: new Date().toLocaleString(),
-      });
-    }
-    return arr;
-  })();
-  return data;
-}
-
-export function getTreeTableData() {
-  const data: any = (() => {
-    const arr: any = [];
-    for (let index = 0; index < 40; index++) {
-      arr.push({
-        id: `${index}`,
-        name: 'John Brown',
-        age: `1${index}`,
-        no: `${index + 10}`,
-        address: 'New York No. 1 Lake ParkNew York No. 1 Lake Park',
-        beginTime: new Date().toLocaleString(),
-        endTime: new Date().toLocaleString(),
-        children: [
-          {
-            id: `l2-${index}`,
-            name: 'John Brown',
-            age: `1${index}`,
-            no: `${index + 10}`,
-            address: 'New York No. 1 Lake ParkNew York No. 1 Lake Park',
-            beginTime: new Date().toLocaleString(),
-            endTime: new Date().toLocaleString(),
-          },
-          {
-            id: `l3-${index}`,
-            name: 'John Mary',
-            age: `1${index}`,
-            no: `${index + 10}`,
-            address: 'New York No. 1 Lake ParkNew York No. 1 Lake Park',
-            beginTime: new Date().toLocaleString(),
-            endTime: new Date().toLocaleString(),
-          },
-        ],
-      });
-    }
-    return arr;
-  })();
-
-  return data;
-}
diff --git a/src/views/demo/tree/ActionTree.vue b/src/views/demo/tree/ActionTree.vue
deleted file mode 100644
index 74538df..0000000
--- a/src/views/demo/tree/ActionTree.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-<template>
-  <PageWrapper title="Tree鍑芥暟鎿嶄綔绀轰緥" contentBackground contentClass="p-4">
-    <div class="mb-4">
-      <a-button @click="expandAll(true)" class="mr-2"> 灞曞紑鍏ㄩ儴 </a-button>
-      <a-button @click="expandAll(false)" class="mr-2"> 鎶樺彔鍏ㄩ儴 </a-button>
-      <a-button @click="checkAll(true)" class="mr-2"> 鍏ㄩ�� </a-button>
-      <a-button @click="checkAll(false)" class="mr-2"> 鍏ㄤ笉閫� </a-button>
-      <a-button @click="handleLevel(2)" class="mr-2"> 鏄剧ず鍒扮2绾� </a-button>
-      <a-button @click="handleLevel(1)" class="mr-2"> 鏄剧ず鍒扮1绾� </a-button>
-    </div>
-    <div class="mb-4">
-      <a-button @click="handleSetCheckData" class="mr-2"> 璁剧疆鍕鹃�夋暟鎹� </a-button>
-      <a-button @click="handleGetCheckData" class="mr-2"> 鑾峰彇鍕鹃�夋暟鎹� </a-button>
-      <a-button @click="handleSetSelectData" class="mr-2"> 璁剧疆閫変腑鏁版嵁 </a-button>
-      <a-button @click="handleGetSelectData" class="mr-2"> 鑾峰彇閫変腑鏁版嵁 </a-button>
-
-      <a-button @click="handleSetExpandData" class="mr-2"> 璁剧疆灞曞紑鏁版嵁 </a-button>
-      <a-button @click="handleGetExpandData" class="mr-2"> 鑾峰彇灞曞紑鏁版嵁 </a-button>
-    </div>
-    <div class="mb-4">
-      <a-button @click="appendNodeByKey(null)" class="mr-2"> 娣诲姞鏍硅妭鐐� </a-button>
-      <a-button @click="appendNodeByKey('2-2')" class="mr-2"> 娣诲姞鍦╬arent3鍐呮坊鍔犺妭鐐� </a-button>
-      <a-button @click="deleteNodeByKey('2-2')" class="mr-2"> 鍒犻櫎parent3鑺傜偣 </a-button>
-      <a-button @click="updateNodeByKey('1-1')" class="mr-2"> 鏇存柊parent2鑺傜偣 </a-button>
-    </div>
-    <BasicTree :treeData="treeData" title="鍑芥暟鎿嶄綔" ref="treeRef" :checkable="true" />
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, unref } from 'vue';
-  import { BasicTree, TreeActionType } from '/@/components/Tree/index';
-  import { treeData } from './data';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { BasicTree, PageWrapper },
-    setup() {
-      const treeRef = ref<Nullable<TreeActionType>>(null);
-      const { createMessage } = useMessage();
-
-      function getTree() {
-        const tree = unref(treeRef);
-        if (!tree) {
-          throw new Error('tree is null!');
-        }
-        return tree;
-      }
-
-      function handleLevel(level: number) {
-        getTree().filterByLevel(level);
-      }
-
-      function handleSetCheckData() {
-        getTree().setCheckedKeys(['0-0']);
-      }
-
-      function handleGetCheckData() {
-        const keys = getTree().getCheckedKeys();
-        createMessage.success(JSON.stringify(keys));
-      }
-
-      function handleSetSelectData() {
-        getTree().setSelectedKeys(['0-0']);
-      }
-
-      function handleGetSelectData() {
-        const keys = getTree().getSelectedKeys();
-        createMessage.success(JSON.stringify(keys));
-      }
-
-      function handleSetExpandData() {
-        getTree().setExpandedKeys(['0-0']);
-      }
-
-      function handleGetExpandData() {
-        const keys = getTree().getExpandedKeys();
-        createMessage.success(JSON.stringify(keys));
-      }
-
-      function checkAll(checkAll: boolean) {
-        getTree().checkAll(checkAll);
-      }
-
-      function expandAll(checkAll: boolean) {
-        getTree().expandAll(checkAll);
-      }
-
-      function appendNodeByKey(parentKey: string | null = null) {
-        getTree().insertNodeByKey({
-          parentKey: parentKey,
-          node: {
-            title: '鏂板鑺傜偣',
-            key: '2-2-2',
-          },
-          // 寰�鍚庢彃鍏�
-          push: 'push',
-          // 寰�鍓嶆彃鍏�
-          // push:'unshift'
-        });
-      }
-
-      function deleteNodeByKey(key: string) {
-        getTree().deleteNodeByKey(key);
-      }
-
-      function updateNodeByKey(key: string) {
-        getTree().updateNodeByKey(key, {
-          title: 'parent2-new',
-        });
-      }
-
-      return {
-        treeData,
-        treeRef,
-        handleLevel,
-        handleSetCheckData,
-        handleGetCheckData,
-        handleSetSelectData,
-        handleGetSelectData,
-        handleSetExpandData,
-        handleGetExpandData,
-        appendNodeByKey,
-        deleteNodeByKey,
-        updateNodeByKey,
-        checkAll,
-        expandAll,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/tree/EditTree.vue b/src/views/demo/tree/EditTree.vue
deleted file mode 100644
index 4af04a2..0000000
--- a/src/views/demo/tree/EditTree.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-<template>
-  <PageWrapper title="Tree鍑芥暟鎿嶄綔绀轰緥">
-    <div class="flex">
-      <BasicTree
-        class="w-1/3"
-        title="鍙充晶鎿嶄綔鎸夐挳/鑷畾涔夊浘鏍�"
-        helpMessage="甯姪淇℃伅"
-        :treeData="treeData"
-        :actionList="actionList"
-        :renderIcon="createIcon"
-      />
-      <BasicTree class="w-1/3 mx-4" title="鍙抽敭鑿滃崟" :treeData="treeData" :beforeRightClick="getRightMenuList" />
-      <BasicTree class="w-1/3" title="宸ュ叿鏍忎娇鐢�" toolbar checkable search :treeData="treeData" :beforeRightClick="getRightMenuList" />
-    </div>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, h } from 'vue';
-  import { BasicTree, ActionItem, ContextMenuItem } from '/@/components/Tree/index';
-  import { treeData } from './data';
-  import { PlusOutlined, DeleteOutlined } from '@ant-design/icons-vue';
-  import { PageWrapper } from '/@/components/Page';
-
-  export default defineComponent({
-    components: { BasicTree, PageWrapper },
-    setup() {
-      function handlePlus(node: any) {
-        console.log(node);
-      }
-
-      function getRightMenuList(node: any): ContextMenuItem[] {
-        return [
-          {
-            label: '鏂板',
-            handler: () => {
-              console.log('鐐瑰嚮浜嗘柊澧�', node);
-            },
-            icon: 'bi:plus',
-          },
-          {
-            label: '鍒犻櫎',
-            handler: () => {
-              console.log('鐐瑰嚮浜嗗垹闄�', node);
-            },
-            icon: 'bx:bxs-folder-open',
-          },
-        ];
-      }
-      const actionList: ActionItem[] = [
-        {
-          // show:()=>boolean;
-          render: (node) => {
-            return h(PlusOutlined, {
-              class: 'ml-2',
-              onClick: () => {
-                handlePlus(node);
-              },
-            });
-          },
-        },
-        {
-          render: () => {
-            return h(DeleteOutlined);
-          },
-        },
-      ];
-
-      function createIcon({ level }) {
-        if (level === 1) {
-          return 'ion:git-compare-outline';
-        }
-        if (level === 2) {
-          return 'ion:home';
-        }
-        if (level === 3) {
-          return 'ion:airplane';
-        }
-        return '';
-      }
-      return { treeData, actionList, getRightMenuList, createIcon };
-    },
-  });
-</script>
diff --git a/src/views/demo/tree/data.ts b/src/views/demo/tree/data.ts
deleted file mode 100644
index 8fb40bf..0000000
--- a/src/views/demo/tree/data.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { TreeItem } from '/@/components/Tree/index';
-
-export const treeData: TreeItem[] = [
-  {
-    title: 'parent ',
-    key: '0-0',
-    children: [
-      { title: 'leaf', key: '0-0-0' },
-      {
-        title: 'leaf',
-        key: '0-0-1',
-        children: [
-          { title: 'leaf', key: '0-0-0-0', children: [{ title: 'leaf', key: '0-0-0-0-1' }] },
-          { title: 'leaf', key: '0-0-0-1' },
-        ],
-      },
-    ],
-  },
-  {
-    title: 'parent 2',
-    key: '1-1',
-    children: [
-      { title: 'leaf', key: '1-1-0' },
-      { title: 'leaf', key: '1-1-1' },
-    ],
-  },
-  {
-    title: 'parent 3',
-    key: '2-2',
-    children: [
-      { title: 'leaf', key: '2-2-0' },
-      { title: 'leaf', key: '2-2-1' },
-    ],
-  },
-];
diff --git a/src/views/demo/tree/index.vue b/src/views/demo/tree/index.vue
deleted file mode 100644
index 539e1f1..0000000
--- a/src/views/demo/tree/index.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-<template>
-  <PageWrapper title="Tree鍩虹绀轰緥">
-    <Row :gutter="[16, 16]">
-      <Col :span="8">
-        <BasicTree title="鍩虹绀轰緥锛岄粯璁ゅ睍寮�绗竴灞�" :treeData="treeData" defaultExpandLevel="1" />
-      </Col>
-      <Col :span="8">
-        <BasicTree title="鍙嬀閫夛紝榛樿鍏ㄩ儴灞曞紑" :treeData="treeData" :checkable="true" defaultExpandAll @check="handleCheck" />
-      </Col>
-      <Col :span="8">
-        <BasicTree title="鎸囧畾榛樿灞曞紑/鍕鹃�夌ず渚�" :treeData="treeData" :checkable="true" :expandedKeys="['0-0']" :checkedKeys="['0-0']" />
-      </Col>
-      <Col :span="8">
-        <BasicTree title="鎳掑姞杞藉紓姝ユ爲" ref="asyncTreeRef" :treeData="tree" :load-data="onLoadData" />
-      </Col>
-      <Col :span="8">
-        <Card title="寮傛鏁版嵁锛岄粯璁ゅ睍寮�">
-          <template #extra>
-            <a-button @click="loadTreeData" :loading="treeLoading">鍔犺浇鏁版嵁</a-button>
-          </template>
-          <Spin :spinning="treeLoading">
-            <BasicTree ref="asyncExpandTreeRef" :treeData="tree2" />
-          </Spin>
-        </Card>
-      </Col>
-      <Col :span="8">
-        <Card title="BasicTree鍐呯疆鍔犺浇">
-          <template #extra>
-            <a-button @click="loadTreeData2" :loading="treeLoading">璇锋眰鏁版嵁</a-button>
-          </template>
-          <BasicTree ref="loadTreeRef" :treeData="tree2" :loading="treeLoading" />
-        </Card>
-      </Col>
-    </Row>
-  </PageWrapper>
-</template>
-<script lang="ts">
-  import { defineComponent, nextTick, ref, unref } from 'vue';
-  import { BasicTree, TreeActionType, TreeItem } from '/@/components/Tree/index';
-  import { treeData } from './data';
-  import { PageWrapper } from '/@/components/Page';
-  import { Card, Row, Col, Spin } from 'ant-design-vue';
-  import { cloneDeep, uniq } from 'lodash-es';
-  import { isArray } from '/@/utils/is';
-
-  export default defineComponent({
-    name: 'system-testtree',
-    components: { BasicTree, PageWrapper, Card, Row, Col, Spin },
-    setup() {
-      const asyncTreeRef = ref<Nullable<TreeActionType>>(null);
-      const asyncExpandTreeRef = ref<Nullable<TreeActionType>>(null);
-      const loadTreeRef = ref<Nullable<TreeActionType>>(null);
-      const tree2 = ref<TreeItem[]>([]);
-      const treeLoading = ref(false);
-
-      function handleCheck(checkedKeys, e) {
-        console.log('onChecked', checkedKeys, e);
-      }
-
-      function loadTreeData() {
-        treeLoading.value = true;
-        // 浠ヤ笅鏄ā鎷熷紓姝ヨ幏鍙栨暟鎹�
-        setTimeout(() => {
-          // 璁剧疆鏁版嵁婧�
-          tree2.value = cloneDeep(treeData);
-          treeLoading.value = false;
-          // 灞曞紑鍏ㄩ儴
-          nextTick(() => {
-            console.log(unref(asyncExpandTreeRef));
-            unref(asyncExpandTreeRef)?.expandAll(true);
-          });
-        }, 2000);
-      }
-      function loadTreeData2() {
-        treeLoading.value = true;
-        // 浠ヤ笅鏄ā鎷熷紓姝ヨ幏鍙栨暟鎹�
-        setTimeout(() => {
-          // 璁剧疆鏁版嵁婧�
-          tree2.value = cloneDeep(treeData);
-          treeLoading.value = false;
-        }, 2000);
-      }
-
-      const tree = ref([
-        {
-          title: 'parent ',
-          key: '0-0',
-        },
-      ]);
-
-      function onLoadData(treeNode) {
-        return new Promise((resolve: (value?: unknown) => void) => {
-          if (isArray(treeNode.children) && treeNode.children.length > 0) {
-            resolve();
-            return;
-          }
-          setTimeout(() => {
-            const asyncTreeAction: TreeActionType | null = unref(asyncTreeRef);
-            if (asyncTreeAction) {
-              const nodeChildren = [
-                { title: `Child Node ${treeNode.eventKey}-0`, key: `${treeNode.eventKey}-0` },
-                { title: `Child Node ${treeNode.eventKey}-1`, key: `${treeNode.eventKey}-1` },
-              ];
-              asyncTreeAction.updateNodeByKey(treeNode.eventKey, { children: nodeChildren });
-              asyncTreeAction.setExpandedKeys(uniq([treeNode.eventKey, ...asyncTreeAction.getExpandedKeys()]));
-            }
-
-            resolve();
-            return;
-          }, 300);
-        });
-      }
-      return {
-        treeData,
-        handleCheck,
-        tree,
-        onLoadData,
-        asyncTreeRef,
-        asyncExpandTreeRef,
-        loadTreeRef,
-        tree2,
-        loadTreeData,
-        treeLoading,
-        loadTreeData2,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/vextable/OneToOneModal.vue b/src/views/demo/vextable/OneToOneModal.vue
deleted file mode 100644
index 2f5cd1e..0000000
--- a/src/views/demo/vextable/OneToOneModal.vue
+++ /dev/null
@@ -1,187 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" width="70%">
-    <a-form ref="formRef" :model="orderMainModel" :label-col="labelCol" :wrapper-col="wrapperCol" :rules="validatorRules">
-      <a-row class="form-row" :gutter="16">
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟鍙�" name="orderCode">
-            <a-input v-model:value="orderMainModel.orderCode" placeholder="璇疯緭鍏ヨ鍗曞彿" />
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟绫诲瀷">
-            <a-select placeholder="璇烽�夋嫨璁㈠崟绫诲瀷" v-model:value="orderMainModel.ctype">
-              <a-select-option value="1">鍥藉唴璁㈠崟</a-select-option>
-              <a-select-option value="2">鍥介檯璁㈠崟</a-select-option>
-            </a-select>
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟鏃ユ湡">
-            <a-date-picker showTime valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="orderMainModel.orderDate" />
-          </a-form-item>
-        </a-col>
-      </a-row>
-      <a-row class="form-row" :gutter="16">
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟閲戦">
-            <a-input v-model:value="orderMainModel.orderMoney" placeholder="璇疯緭鍏ヨ鍗曢噾棰�" />
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟澶囨敞">
-            <a-input v-model:value="orderMainModel.content" placeholder="璇疯緭鍏ヨ鍗曞娉�" />
-          </a-form-item>
-        </a-col>
-      </a-row>
-      <a-tabs defaultActiveKey="1">
-        <a-tab-pane tab="瀹㈡埛淇℃伅" key="1">
-          <a-row class="form-row" :gutter="16">
-            <a-col :lg="8">
-              <a-form-item label="瀹㈡埛濮撳悕">
-                <a-input v-model:value="orderMainModel.jeecgOrderCustomerList.name" placeholder="璇疯緭鍏ュ鎴峰鍚�" />
-              </a-form-item>
-            </a-col>
-            <a-col :lg="8">
-              <a-form-item label="鎵嬫満鍙�">
-                <a-input v-model:value="orderMainModel.jeecgOrderCustomerList.telphone" placeholder="璇疯緭鍏ユ墜鏈哄彿" />
-              </a-form-item>
-            </a-col>
-          </a-row>
-        </a-tab-pane>
-
-        <a-tab-pane tab="鏈虹エ淇℃伅" key="2" forceRender>
-          <a-row class="form-row" :gutter="16">
-            <a-col :lg="8">
-              <a-form-item label="鑸彮鍙�">
-                <a-input v-model:value="orderMainModel.jeecgOrderTicketList.ticketCode" placeholder="璇疯緭鍏ヨ埅鐝彿" />
-              </a-form-item>
-            </a-col>
-            <a-col :lg="8">
-              <a-form-item label="璧烽鏃堕棿">
-                <a-date-picker showTime valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="orderMainModel.jeecgOrderTicketList.tickectDate" />
-              </a-form-item>
-            </a-col>
-          </a-row>
-        </a-tab-pane>
-      </a-tabs>
-    </a-form>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, reactive, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { ValidateErrorEntity } from 'ant-design-vue/es/form/interface';
-  import { saveOrUpdate } from './jvxetable/jvxetable.api';
-  import { orderCustomerList, orderTicketList } from './api';
-
-  export default defineComponent({
-    name: 'OneToOneModal',
-    components: { BasicModal },
-    emits: ['success', 'register'],
-    setup(props, { emit }) {
-      const isUpdate = ref(true);
-      const rowId = ref('');
-      const formRef = ref();
-      const labelCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 5 },
-      });
-      const wrapperCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 16 },
-      });
-      const validatorRules = {
-        orderCode: [{ required: true, message: '璁㈠崟鍙蜂笉鑳戒负绌�', trigger: 'blur' }],
-      };
-      const orderMainModel = reactive({
-        id: null,
-        orderCode: '',
-        orderMoney: '',
-        ctype: '',
-        content: '',
-        jeecgOrderCustomerList: {
-          name: '',
-          telphone: '',
-        },
-        jeecgOrderTicketList: {
-          ticketCode: '',
-          tickectDate: '',
-        },
-      });
-      const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-        setModalProps({ confirmLoading: false });
-        reset();
-        isUpdate.value = !!data?.isUpdate;
-        if (unref(isUpdate)) {
-          rowId.value = data.record.id;
-          Object.assign(orderMainModel, data.record);
-          let params = { id: orderMainModel.id };
-          const customerList = await orderCustomerList(params);
-          //update-begin---author:wangshuai ---date:20220629  for锛歔VUEN-1484]鍦ㄤ竴瀵瑰绀轰緥椤甸潰锛岀紪杈戜竴琛岋紙闈掑矝璁㈠崟A0001锛夛紝瀹㈡埛淇℃伅鏃犳硶濉叆------------
-          orderMainModel.jeecgOrderCustomerList = customerList[0]?customerList[0]:{};
-          //update-end---author:wangshuai ---date:20220629  for锛歔VUEN-1484]鍦ㄤ竴瀵瑰绀轰緥椤甸潰锛岀紪杈戜竴琛岋紙闈掑矝璁㈠崟A0001锛夛紝瀹㈡埛淇℃伅鏃犳硶濉叆--------------
-          const ticketList = await orderTicketList(params);
-          //update-begin---author:wangshuai ---date:20220629  for锛歔VUEN-1484]鍦ㄤ竴瀵瑰绀轰緥椤甸潰锛岀紪杈戜竴琛岋紙闈掑矝璁㈠崟A0001锛夛紝瀹㈡埛淇℃伅鏃犳硶濉叆------------
-          orderMainModel.jeecgOrderTicketList = ticketList[0]?ticketList[0]:{};
-          //update-end---author:wangshuai ---date:20220629  for锛歔VUEN-1484]鍦ㄤ竴瀵瑰绀轰緥椤甸潰锛岀紪杈戜竴琛岋紙闈掑矝璁㈠崟A0001锛夛紝瀹㈡埛淇℃伅鏃犳硶濉叆--------------
-        }
-      });
-      const getTitle = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-
-      function reset() {
-        orderMainModel.id = null;
-        orderMainModel.orderCode = '';
-        orderMainModel.orderMoney = '';
-        orderMainModel.orderDate = null;
-        orderMainModel.ctype = '';
-        orderMainModel.content = '';
-        orderMainModel.jeecgOrderCustomerList = {};
-        orderMainModel.jeecgOrderTicketList = {};
-      }
-      async function handleSubmit() {
-        formRef.value
-          .validate()
-          .then(async () => {
-            try {
-              console.log('formData', JSON.stringify(orderMainModel));
-              setModalProps({ confirmLoading: true });
-              orderMainModel.jeecgOrderCustomerList =
-                Object.keys(orderMainModel.jeecgOrderCustomerList).length > 0 ? [orderMainModel.jeecgOrderCustomerList] : [];
-              orderMainModel.jeecgOrderTicketList =
-                Object.keys(orderMainModel.jeecgOrderTicketList).length > 0 ? [orderMainModel.jeecgOrderTicketList] : [];
-              await saveOrUpdate(orderMainModel, unref(isUpdate));
-              closeModal();
-              emit('success');
-            } finally {
-              setModalProps({ confirmLoading: false });
-            }
-          })
-          .catch((error: ValidateErrorEntity<any>) => {
-            console.log('error', error);
-          });
-      }
-
-      return { formRef, validatorRules, orderMainModel, registerModal, getTitle, labelCol, wrapperCol, handleSubmit };
-    },
-  });
-</script>
-<style scoped>
-  .ant-btn {
-    padding: 0 10px;
-    margin-left: 3px;
-  }
-
-  .ant-form-item-control {
-    line-height: 0px;
-  }
-
-  /** 涓昏〃鍗曡闂磋窛 */
-  .ant-form .ant-form-item {
-    margin-bottom: 10px;
-  }
-
-  /** Tab椤甸潰琛岄棿璺� */
-  .ant-tabs-content .ant-form-item {
-    margin-bottom: 0px;
-  }
-</style>
diff --git a/src/views/demo/vextable/VexTableModal.vue b/src/views/demo/vextable/VexTableModal.vue
deleted file mode 100644
index f15586b..0000000
--- a/src/views/demo/vextable/VexTableModal.vue
+++ /dev/null
@@ -1,190 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" width="70%">
-    <a-form ref="formRef" :model="orderMainModel" :label-col="labelCol" :wrapper-col="wrapperCol" :rules="validatorRules">
-      <a-row class="form-row" :gutter="16">
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟鍙�" name="orderCode">
-            <a-input v-model:value="orderMainModel.orderCode" placeholder="璇疯緭鍏ヨ鍗曞彿" />
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟绫诲瀷">
-            <a-select placeholder="璇烽�夋嫨璁㈠崟绫诲瀷" v-model:value="orderMainModel.ctype">
-              <a-select-option value="1">鍥藉唴璁㈠崟</a-select-option>
-              <a-select-option value="2">鍥介檯璁㈠崟</a-select-option>
-            </a-select>
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟鏃ユ湡">
-            <a-date-picker showTime valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="orderMainModel.orderDate" />
-          </a-form-item>
-        </a-col>
-      </a-row>
-      <a-row class="form-row" :gutter="16">
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟閲戦">
-            <a-input v-model:value="orderMainModel.orderMoney" placeholder="璇疯緭鍏ヨ鍗曢噾棰�" />
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟澶囨敞">
-            <a-input v-model:value="orderMainModel.content" placeholder="璇疯緭鍏ヨ鍗曞娉�" />
-          </a-form-item>
-        </a-col>
-      </a-row>
-      <a-tabs defaultActiveKey="1">
-        <a-tab-pane tab="瀹㈡埛淇℃伅" key="1">
-          <vxe-toolbar>
-            <template #buttons>
-              <vxe-button icon="fa fa-plus" @click="insertEvent()">鏂板</vxe-button>
-              <vxe-button @click="$refs.xTable.removeCheckboxRow()">鍒犻櫎閫変腑</vxe-button>
-            </template>
-          </vxe-toolbar>
-
-          <vxe-table
-            border
-            show-overflow
-            keep-source
-            ref="xTable"
-            max-height="400"
-            :data="orderMainModel.jeecgOrderCustomerList"
-            :edit-config="{ trigger: 'click', mode: 'row', icon: 'fa fa-pencil', showStatus: true }"
-          >
-            <vxe-column type="checkbox" width="60" align="center"></vxe-column>
-            <vxe-column type="seq" width="60" align="center"></vxe-column>
-            <vxe-column field="name" title="瀹㈡埛鍚�" sortable :edit-render="{ name: 'input', defaultValue: '' }"></vxe-column>
-            <vxe-column field="sex" title="鎬у埆" :edit-render="{ name: '$select', options: sexList }"></vxe-column>
-            <vxe-column field="idcard" title="韬唤璇�" sortable :edit-render="{ name: 'input', defaultValue: '' }"></vxe-column>
-            <vxe-column field="telphone" title="鎵嬫満" sortable :edit-render="{ name: 'input', defaultValue: '' }"></vxe-column>
-          </vxe-table>
-        </a-tab-pane>
-
-        <a-tab-pane tab="鏈虹エ淇℃伅" key="2" forceRender> </a-tab-pane>
-      </a-tabs>
-    </a-form>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, reactive, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { ValidateErrorEntity } from 'ant-design-vue/es/form/interface';
-  import { VxeTableInstance } from 'vxe-table';
-  export default defineComponent({
-    name: 'VexTableModal',
-    components: { BasicModal },
-    emits: ['success', 'register'],
-    setup(props, { emit }) {
-      const isUpdate = ref(true);
-      const xTable = ref({} as VxeTableInstance);
-      const rowId = ref('');
-      const formRef = ref();
-      const labelCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 5 },
-      });
-      const wrapperCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 16 },
-      });
-      const sexList = ref([
-        { label: '', value: '' },
-        { label: '鐢�', value: '1' },
-        { label: '濂�', value: '2' },
-      ]);
-      const validatorRules = {
-        orderCode: [{ required: true, message: '璁㈠崟鍙蜂笉鑳戒负绌�', trigger: 'blur' }],
-      };
-      const orderMainModel = reactive({
-        id: null,
-        orderCode: '',
-        orderMoney: '',
-        ctype: '',
-        content: '',
-        jeecgOrderCustomerList: [],
-        jeecgOrderTicketList: [],
-      });
-      const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-        orderMainModel.orderCode = '';
-        setModalProps({ confirmLoading: false });
-        isUpdate.value = !!data?.isUpdate;
-
-        if (unref(isUpdate)) {
-          rowId.value = data.record.id;
-          orderMainModel.orderCode = data.record.orderCode;
-        }
-      });
-      const tableData = ref([]);
-      const getTitle = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-
-      //鍔ㄦ�佹坊鍔犺
-      async function insertEvent(row: any) {
-        const $table = xTable.value;
-        const record = {
-          name: '',
-          sex: '1',
-          idcard: '',
-          telphone: '',
-        };
-        const { row: newRow } = await $table.insertAt(record, row);
-        await $table.setActiveCell(newRow, 'sex');
-      }
-
-      async function handleSubmit() {
-        formRef.value
-          .validate()
-          .then(() => {
-            try {
-              const $table = xTable.value;
-              const { fullData } = $table.getTableData();
-              orderMainModel.jeecgOrderCustomerList = fullData;
-              console.log('formData', JSON.stringify(orderMainModel));
-              setModalProps({ confirmLoading: true });
-              closeModal();
-              emit('success', { isUpdate: unref(isUpdate), values: { id: rowId.value } });
-            } finally {
-              setModalProps({ confirmLoading: false });
-            }
-          })
-          .catch((error: ValidateErrorEntity<any>) => {
-            console.log('error', error);
-          });
-      }
-
-      return {
-        xTable,
-        tableData,
-        sexList,
-        formRef,
-        validatorRules,
-        orderMainModel,
-        registerModal,
-        getTitle,
-        labelCol,
-        wrapperCol,
-        insertEvent,
-        handleSubmit,
-      };
-    },
-  });
-</script>
-<style scoped>
-  .ant-btn {
-    padding: 0 10px;
-    margin-left: 3px;
-  }
-
-  .ant-form-item-control {
-    line-height: 0px;
-  }
-
-  /** 涓昏〃鍗曡闂磋窛 */
-  .ant-form .ant-form-item {
-    margin-bottom: 10px;
-  }
-
-  /** Tab椤甸潰琛岄棿璺� */
-  .ant-tabs-content .ant-form-item {
-    margin-bottom: 0px;
-  }
-</style>
diff --git a/src/views/demo/vextable/api.ts b/src/views/demo/vextable/api.ts
deleted file mode 100644
index c8021ab..0000000
--- a/src/views/demo/vextable/api.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  list = '/test/jeecgOrderMain/list',
-  delete = '/test/jeecgOrderMain/delete',
-  orderCustomerList = '/test/jeecgOrderMain/queryOrderCustomerListByMainId',
-  orderTicketList = '/test/jeecgOrderMain/queryOrderTicketListByMainId',
-}
-
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-/**
- * 瀛愯〃鍗曚俊鎭�
- * @param params
- */
-export const orderTicketList = (params) => defHttp.get({ url: Api.orderTicketList, params });
-/**
- * 瀛愯〃鍗曚俊鎭�
- * @param params
- */
-export const orderCustomerList = (params) => defHttp.get({ url: Api.orderCustomerList, params });
-/**
- * 鍒犻櫎鐢ㄦ埛
- */
-export const deleteOne = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.delete, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
diff --git a/src/views/demo/vextable/data.ts b/src/views/demo/vextable/data.ts
deleted file mode 100644
index cc9c39c..0000000
--- a/src/views/demo/vextable/data.ts
+++ /dev/null
@@ -1,154 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-import { usePermission } from '/@/hooks/web/usePermission';
-import { JVxeColumn, JVxeTypes } from '/@/components/jeecg/JVxeTable/types';
-const { isDisabledAuth, hasPermission, initBpmFormData} = usePermission();
-
-export const columns: BasicColumn[] = [
-  {
-    title: '璁㈠崟鍙�',
-    dataIndex: 'orderCode',
-    width: 260,
-  },
-  {
-    title: '璁㈠崟绫诲瀷',
-    dataIndex: 'ctype',
-    slots: { customRender: 'ctype' },
-  },
-  {
-    title: '璁㈠崟鏃ユ湡',
-    dataIndex: 'orderDate',
-    width: 300,
-  },
-  {
-    title: '璁㈠崟閲戦',
-    width: 200,
-    dataIndex: 'orderMoney',
-  },
-  {
-    title: '璁㈠崟澶囨敞',
-    width: 200,
-    dataIndex: 'content',
-  },
-  {
-    title: '娴佺▼鐘舵��',
-    width: 200,
-    dataIndex: 'bpmStatus',
-    customRender: ({ text }) => {
-      if (!text || text == '1') {
-        return '寰呮彁浜�';
-      } else if (text == '2') {
-        return '澶勭悊涓�';
-      } else if (text == '2') {
-        return '宸插畬鎴�';
-      } else {
-        return text;
-      }
-    },
-  },
-];
-
-export function getBpmFormSchema(formData) {
-  //娉ㄥ叆娴佺▼鑺傜偣琛ㄥ崟鏉冮檺
-  initBpmFormData(formData);
-  
-  const formSchema2: FormSchema[] = [
-    {
-      label: '璁㈠崟鍙�',
-      field: 'orderCode',
-      component: 'Input',
-      show: ({ values }) => {
-        return hasPermission('order:orderCode');
-      },
-    },
-    {
-      label: '璁㈠崟绫诲瀷',
-      field: 'ctype',
-      component: 'Select',
-      componentProps: {
-        options: [
-          { label: '鍥藉唴璁㈠崟', value: '1', key: '1' },
-          { label: '鍥介檯璁㈠崟', value: '2', key: '2' },
-        ],
-      },
-    },
-    {
-      label: '璁㈠崟鏃ユ湡',
-      field: 'orderDate',
-      component: 'DatePicker',
-      componentProps: {
-        valueFormat: 'YYYY-MM-DD HH:mm:ss',
-        style: {
-          width: '100%',
-        },
-      },
-    },
-    {
-      label: '璁㈠崟閲戦',
-      field: 'orderMoney',
-      component: 'Input',
-    },
-    {
-      label: '璁㈠崟澶囨敞',
-      field: 'content',
-      component: 'Input',
-    },
-  ];
-  return formSchema2;
-}
-
-export function getOrderCustomerFormSchema(formData) {
-  //娉ㄥ叆娴佺▼鑺傜偣琛ㄥ崟鏉冮檺
-  initBpmFormData(formData);
-  
-  const formSchema2: FormSchema[] = [
-    {
-      label: '瀹㈡埛鍚�',
-      field: 'name',
-      component: 'Input',
-      dynamicDisabled: ({ values }) => {
-        return isDisabledAuth('order:name');
-      },
-    },
-    {
-      label: '鎬у埆',
-      field: 'sex',
-      component: 'Select',
-      componentProps: {
-        options: [
-          { label: '鐢�', value: '1', key: '1' },
-          { label: '濂�', value: '2', key: '2' },
-        ],
-      },
-    },
-    {
-      label: '韬唤璇佸彿',
-      field: 'idcard',
-      component: 'Input',
-    },
-    {
-      label: '鎵嬫満鍙�',
-      field: 'telphone',
-      component: 'Input',
-    },
-  ];
-  return formSchema2;
-}
-
-export const jeecgOrderTicketColumns: JVxeColumn[] = [
-  {
-    title: '鑸彮鍙�',
-    key: 'ticketCode',
-    width: 180,
-    type: JVxeTypes.input,
-    placeholder: '璇疯緭鍏�${title}',
-    defaultValue: '',
-  },
-  {
-    title: '鑸彮鏃堕棿',
-    key: 'tickectDate',
-    width: 180,
-    type: JVxeTypes.date,
-    placeholder: '璇烽�夋嫨${title}',
-    defaultValue: '',
-  },
-];
diff --git a/src/views/demo/vextable/drawer.vue b/src/views/demo/vextable/drawer.vue
deleted file mode 100644
index 7f94b04..0000000
--- a/src/views/demo/vextable/drawer.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :title="getTitle" width="500px" @ok="handleSubmit"> </BasicDrawer>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, computed, unref } from 'vue';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-
-  export default defineComponent({
-    name: 'tableDrawer',
-    components: { BasicDrawer },
-    emits: ['success', 'register'],
-    setup(_, { emit }) {
-      const isUpdate = ref(true);
-      const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-        setDrawerProps({ confirmLoading: false });
-        isUpdate.value = !!data?.isUpdate;
-      });
-
-      const getTitle = computed(() => (!unref(isUpdate) ? '鏂板瑙掕壊' : '缂栬緫瑙掕壊'));
-
-      async function handleSubmit() {
-        try {
-          setDrawerProps({ confirmLoading: true });
-          closeDrawer();
-          emit('success');
-        } finally {
-          setDrawerProps({ confirmLoading: false });
-        }
-      }
-
-      return {
-        registerDrawer,
-        getTitle,
-        handleSubmit,
-      };
-    },
-  });
-</script>
diff --git a/src/views/demo/vextable/form/JeecgOrderCustomerForm.vue b/src/views/demo/vextable/form/JeecgOrderCustomerForm.vue
deleted file mode 100644
index 3e456e5..0000000
--- a/src/views/demo/vextable/form/JeecgOrderCustomerForm.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-  <BasicForm @register="registerForm"></BasicForm>
-</template>
-
-<script>
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { computed, defineComponent, toRaw } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { propTypes } from '/@/utils/propTypes';
-  import { getOrderCustomerFormSchema } from '../data';
-
-  export default defineComponent({
-    name: 'JeecgOrderCustomerForm',
-    components: {
-      BasicForm,
-    },
-    props: {
-      formData: propTypes.object.def({}),
-    },
-    setup(props) {
-      const [registerForm, { setFieldsValue, setProps, getFieldsValue, updateSchema }] = useForm({
-        labelWidth: 150,
-        schemas: getOrderCustomerFormSchema(props.formData),
-        showActionButtonGroup: false,
-        baseColProps: { span: 8 },
-      });
-
-      const formDisabled = computed(() => {
-        if (props.formData.disabled === false) {
-          return false;
-        }
-        return true;
-      });
-
-      let orderCustomerFormData = {};
-      const queryByIdUrl = '/test/jeecgOrderMain/queryOrderCustomerListByMainId';
-      async function initFormData(mainId) {
-        let params = { id: mainId };
-        const data = await defHttp.get({ url: queryByIdUrl, params });
-        console.log('data', data);
-        if (data && data.length > 0) {
-          let temp = data[0];
-          orderCustomerFormData = { ...temp };
-          //璁剧疆琛ㄥ崟鐨勫��
-          await setFieldsValue(orderCustomerFormData);
-          await setProps({ disabled: formDisabled.value });
-        }
-      }
-      async function getFormData() {
-        let subFormData = { ...orderCustomerFormData };
-        if (Object.keys(subFormData).length > 0) {
-          return subFormData;
-        }
-        return false;
-      }
-
-      return {
-        registerForm,
-        formDisabled,
-        initFormData,
-        getFormData,
-      };
-    },
-  });
-</script>
-
-<style scoped></style>
diff --git a/src/views/demo/vextable/form/JeecgOrderMainForm.vue b/src/views/demo/vextable/form/JeecgOrderMainForm.vue
deleted file mode 100644
index 4a8fcc1..0000000
--- a/src/views/demo/vextable/form/JeecgOrderMainForm.vue
+++ /dev/null
@@ -1,155 +0,0 @@
-<template>
-  <div class="jeecg-flow-demo">
-    <BasicForm @register="registerForm"></BasicForm>
-    <a-tabs v-model:activeKey="activeKey" @change="handleChangeTabs">
-      <a-tab-pane tab="瀹㈡埛淇℃伅" key="jeecgOrderCustomerForm" :forceRender="true">
-        <JeecgOrderCustomerForm ref="jeecgOrderCustomerFormRef" :formData="formData"></JeecgOrderCustomerForm>
-      </a-tab-pane>
-
-      <a-tab-pane tab="鏈虹エ淇℃伅" key="jeecgOrderTicket" :forceRender="true">
-        <JVxeTable v-if="ok" ref="jeecgOrderTicketRef" stripe rowSelection keepSource :maxHeight="300" :loading="table2.loading" :columns="table2.columns" :dataSource="table2.dataSource"> </JVxeTable>
-      </a-tab-pane>
-    </a-tabs>
-  </div>
-</template>
-
-<script>
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { computed, defineComponent, ref, reactive } from 'vue';
-  import { defHttp } from '/@/utils/http/axios';
-  import { propTypes } from '/@/utils/propTypes';
-  import { getBpmFormSchema, jeecgOrderTicketColumns } from '../data';
-  import JeecgOrderCustomerForm from './JeecgOrderCustomerForm.vue';
-
-  export default defineComponent({
-    name: 'JeecgOrderMainForm',
-    components: {
-      BasicForm,
-      JeecgOrderCustomerForm,
-    },
-    props: {
-      formData: propTypes.object.def({}),
-      formBpm: propTypes.bool.def(true),
-    },
-    setup(props) {
-      const [registerForm, { setFieldsValue, setProps, getFieldsValue, updateSchema }] = useForm({
-        labelWidth: 150,
-        schemas: getBpmFormSchema(props.formData),
-        showActionButtonGroup: false,
-        baseColProps: { span: 8 },
-      });
-
-      const formDisabled = computed(() => {
-        if (props.formData.disabled === false) {
-          return false;
-        }
-        return true;
-      });
-
-      const jeecgOrderCustomerFormRef = ref();
-      const jeecgOrderTicketRef = ref();
-      const ok = ref(false);
-
-      let formData = {};
-      const queryByIdUrl = '/test/jeecgOrderMain/queryById';
-      async function initFormData() {
-        console.log('props.formData', props.formData);
-        let params = { id: props.formData.dataId };
-        const data = await defHttp.get({ url: queryByIdUrl, params });
-        console.log('data', data);
-        formData = { ...data };
-        //璁剧疆琛ㄥ崟鐨勫��
-        await setFieldsValue(formData);
-        await setProps({ disabled: formDisabled.value });
-
-        await jeecgOrderCustomerFormRef.value.initFormData(props.formData.dataId);
-        await loadOrderTicketData(props.formData.dataId);
-        ok.value = true;
-      }
-
-      async function submitForm() {
-        let data = getFieldsValue();
-        let params = Object.assign({}, formData, data);
-        console.log('琛ㄥ崟鏁版嵁', params);
-        await saveOrUpdate(params, true);
-      }
-
-      initFormData();
-
-      const activeKey = ref('jeecgOrderCustomerForm');
-      function handleChangeTabs() {}
-      // 鏈虹エ淇℃伅
-      const table2 = reactive({
-        loading: false,
-        dataSource: [],
-        columns: filterSubTableColnmns(jeecgOrderTicketColumns, 'order:'),
-      });
-
-      async function loadOrderTicketData(mainId) {
-        const queryByIdUrl = '/test/jeecgOrderMain/queryOrderTicketListByMainId';
-        let params = { id: mainId };
-        table2.dataSource = [];
-        const data = await defHttp.get({ url: queryByIdUrl, params });
-        if (data && data.length > 0) {
-          table2.dataSource = [...data];
-        }
-      }
-
-      //鏂板鏉冮檺澶勭悊鏂规硶
-      function filterSubTableColnmns(columns, pre) {
-        let authList = props.formData.permissionList;
-        //娉ㄦ剰锛氬鏋滃瓙琛ㄩ厤缃樉绀哄弽鍚� 杩欓噷涓嶅鐞嗗叾閫昏緫  鍗抽殣钘忔棤娉曞湪娴佺▼琛ㄥ崟涓疄鐜帮紝璇蜂娇鐢ㄥ叏灞�琛ㄥ崟鏉冮檺瀹炵幇
-        let temp = columns.filter((item) => {
-          let oneAuth = authList.find((auth) => {
-            return auth.action === pre + item.key;
-          });
-          if (!oneAuth) {
-            return true;
-          }
-
-          //浠g爜涓ヨ皑澶勭悊锛岄槻姝竴涓巿鏉冩爣璇嗭紝閰嶇疆澶氭
-          if (oneAuth instanceof Array) {
-            oneAuth = oneAuth[0];
-          }
-
-          //绂佺敤閫昏緫
-          if (oneAuth.type == '2' && !oneAuth.isAuth) {
-            item['disabled'] = true;
-            return true;
-          }
-          //闅愯棌閫昏緫閫昏緫
-          if (oneAuth.type == '1' && !oneAuth.isAuth) {
-            return false;
-          }
-          return true;
-        });
-        return temp;
-      }
-
-      return {
-        registerForm,
-        formDisabled,
-        submitForm,
-        jeecgOrderCustomerFormRef,
-        activeKey,
-        handleChangeTabs,
-        table2,
-        jeecgOrderTicketRef,
-        ok,
-      };
-    },
-  });
-</script>
-
-<style lang="less">
-  /*.jeecg-flow-demo{
-    .vxe-header--row{
-        .vxe-header--column .vxe-cell{
-            width: 180px !important;
-        }
-        .vxe-header--column:first-child .vxe-cell{
-            width: 40px !important;
-        }
-    }
-}*/
-</style>
diff --git a/src/views/demo/vextable/index.vue b/src/views/demo/vextable/index.vue
deleted file mode 100644
index efe0f7d..0000000
--- a/src/views/demo/vextable/index.vue
+++ /dev/null
@@ -1,144 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #tableTitle>
-        <a-dropdown>
-          <template #overlay>
-            <a-menu @click="handleCreate">
-              <a-menu-item :key="1">涓�瀵逛竴绀轰緥</a-menu-item>
-              <a-menu-item :key="2">涓�瀵瑰绀轰緥</a-menu-item>
-              <a-menu-item :key="3">涓�瀵瑰(JVexTable)</a-menu-item>
-            </a-menu>
-          </template>
-          <a-button type="primary">鏂板 <DownOutlined /></a-button>
-        </a-dropdown>
-      </template>
-      <template #ctype="{ text }">
-        {{ text === '1' ? '鍥藉唴璁㈠崟' : text === '2' ? '鍥介檯璁㈠崟' : text }}
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getAction(record)" :dropDownActions="getDropDownActions(record)" />
-      </template>
-    </BasicTable>
-    <!--        <TableDrawer @register="registerDrawer" @success="handleSuccess" />-->
-    <TableModal @register="registerModal" @success="handleSuccess" />
-    <JVxeTableModal @register="registerVexTableModal" @success="handleSuccess"></JVxeTableModal>
-    <OneToOneModal @register="registerOneToOneModal" @success="handleSuccess"></OneToOneModal>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import TableDrawer from './drawer.vue';
-  import TableModal from './modal.vue';
-  import VexTableModal from './VexTableModal.vue';
-  import JVxeTableModal from './jvxetable/JVxeTableModal.vue';
-  import OneToOneModal from './OneToOneModal.vue';
-  import { DownOutlined } from '@ant-design/icons-vue';
-  import { useListPage } from '/@/hooks/system/useListPage';
-
-  import { useModal } from '/@/components/Modal';
-  import { columns } from './data';
-  import { list, deleteOne } from './api';
-  import { defHttp } from '/@/utils/http/axios';
-
-  const [registerModal, { openModal }] = useModal();
-  const [registerOneToOneModal, { openModal: openOneToOneModal }] = useModal();
-  const [registerVexTableModal, { openModal: openVexTableModal }] = useModal();
-
-  //瀹氫箟琛ㄦ牸琛屾搷浣�
-  const getAction = (record) => {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-    ];
-  };
-
-  const getDropDownActions = (record) => {
-    let arr = [
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁鍒犻櫎锛�',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-    return arr;
-  };
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { tableContext } = useListPage({
-    tableProps: {
-      api: list,
-      columns: columns,
-      useSearchForm: false,
-      actionColumn: {
-        width: 160,
-        title: '鎿嶄綔',
-        dataIndex: 'action',
-        slots: { customRender: 'action' },
-      },
-    },
-  });
-
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload }, { rowSelection }] = tableContext;
-  //鏂板绫诲瀷
-  //update-begin---author:wangshuai ---date:20220720  for锛歔VUEN-1661]涓�瀵瑰绀轰緥锛岀紪杈戠殑鏃跺�欙紝鏈夋椂鍊欐槸涓�瀵逛竴锛屾湁鏃跺�欐槸涓�瀵瑰锛岄粯璁や竴瀵瑰------------
-  const addType = ref(3);
-  //update-end---author:wangshuai ---date:20220720  for锛歔VUEN-1661]涓�瀵瑰绀轰緥锛岀紪杈戠殑鏃跺�欙紝鏈夋椂鍊欐槸涓�瀵逛竴锛屾湁鏃跺�欐槸涓�瀵瑰锛岄粯璁や竴瀵瑰--------------
-  //娣诲姞浜嬩欢
-  function handleCreate(e) {
-    addType.value = e.key;
-    let type = addType.value;
-    if (type == 1) {
-      openOneToOneModal(true, {
-        isUpdate: false,
-      });
-    }
-    if (type == 2) {
-      openModal(true, {
-        isUpdate: false,
-      });
-    }
-    if (type == 3) {
-      openVexTableModal(true, {
-        isUpdate: false,
-      });
-    }
-  }
-
-  //缂栬緫浜嬩欢
-  function handleEdit(record: Recordable) {
-    let type = addType.value;
-    if (type == 1) {
-      openOneToOneModal(true, {
-        record,
-        isUpdate: true,
-      });
-    }
-    if (type == 2) {
-      openModal(true, {
-        record,
-        isUpdate: true,
-      });
-    }
-    if (type == 3) {
-      openVexTableModal(true, {
-        record,
-        isUpdate: true,
-      });
-    }
-  }
-
-  async function handleDelete(record: Recordable) {
-    await deleteOne({ id: record.id }, reload);
-  }
-
-  function handleSuccess() {
-    reload();
-  }
-</script>
diff --git a/src/views/demo/vextable/index2.vue b/src/views/demo/vextable/index2.vue
deleted file mode 100644
index 01a00ad..0000000
--- a/src/views/demo/vextable/index2.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-<template>
-  <div style="padding: 5px">
-    <vxe-toolbar>
-      <template #buttons>
-        <vxe-button @click="allAlign = 'left'">鏂板</vxe-button>
-      </template>
-    </vxe-toolbar>
-
-    <vxe-table :align="allAlign" :data="tableData1">
-      <vxe-table-column type="seq" width="60"></vxe-table-column>
-      <vxe-table-column field="name" title="Name"></vxe-table-column>
-      <vxe-table-column field="sex" title="Sex"></vxe-table-column>
-      <vxe-table-column field="age" title="Age"></vxe-table-column>
-    </vxe-table>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { CollapseContainer } from '/@/components/Container/index';
-
-  export default defineComponent({
-    components: { CollapseContainer },
-    setup() {
-      const allAlign = ref(null);
-      const tableData1 = ref([
-        { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'vxe-table 浠庡叆闂ㄥ埌鏀惧純' },
-        { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
-        { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
-        { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' },
-      ]);
-      return {
-        allAlign,
-        tableData1,
-      };
-    },
-  });
-</script>
-
-<style lang="css" scoped></style>
diff --git a/src/views/demo/vextable/jvxetable/JVxeTableModal.vue b/src/views/demo/vextable/jvxetable/JVxeTableModal.vue
deleted file mode 100644
index f1083d3..0000000
--- a/src/views/demo/vextable/jvxetable/JVxeTableModal.vue
+++ /dev/null
@@ -1,193 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" width="70%">
-    <a-form ref="formRef" :model="orderMainModel" :label-col="labelCol" :wrapper-col="wrapperCol" :rules="validatorRules">
-      <a-row class="form-row" :gutter="16">
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟鍙�" name="orderCode">
-            <a-input v-model:value="orderMainModel.orderCode" placeholder="璇疯緭鍏ヨ鍗曞彿" />
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟绫诲瀷" name="ctype">
-            <a-select placeholder="璇烽�夋嫨璁㈠崟绫诲瀷" v-model:value="orderMainModel.ctype">
-              <a-select-option value="1">鍥藉唴璁㈠崟</a-select-option>
-              <a-select-option value="2">鍥介檯璁㈠崟</a-select-option>
-            </a-select>
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟鏃ユ湡" name="orderDate">
-            <a-date-picker showTime valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="orderMainModel.orderDate" />
-          </a-form-item>
-        </a-col>
-      </a-row>
-      <a-row class="form-row" :gutter="16">
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟閲戦" name="orderMoney">
-            <a-input v-model:value="orderMainModel.orderMoney" placeholder="璇疯緭鍏ヨ鍗曢噾棰�" />
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟澶囨敞" name="content">
-            <a-input v-model:value="orderMainModel.content" placeholder="璇疯緭鍏ヨ鍗曞娉�" />
-          </a-form-item>
-        </a-col>
-      </a-row>
-      <!-- 瀛愯〃鍗曞尯鍩� -->
-      <a-tabs v-model:activeKey="activeKey" @change="handleChangeTabs">
-        <a-tab-pane tab="瀹㈡埛淇℃伅" key="tableRef1">
-          <JVxeTable
-            ref="tableRef1"
-            stripe
-            toolbar
-            rowNumber
-            rowSelection
-            resizable
-            keepSource
-            :maxHeight="300"
-            :checkbox-config="{ range: true }"
-            :loading="table1.loading"
-            :columns="table1.columns"
-            :dataSource="table1.dataSource"
-          ></JVxeTable>
-        </a-tab-pane>
-
-        <a-tab-pane tab="鏈虹エ淇℃伅" key="tableRef2" forceRender>
-          <JVxeTable
-            ref="tableRef2"
-            stripe
-            toolbar
-            rowNumber
-            rowSelection
-            resizable
-            keepSource
-            :maxHeight="300"
-            :checkbox-config="{ range: true }"
-            :loading="table2.loading"
-            :columns="table2.columns"
-            :dataSource="table2.dataSource"
-          ></JVxeTable>
-        </a-tab-pane>
-      </a-tabs>
-    </a-form>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, reactive, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/src/components/Modal';
-  import { JVxeTable } from '/src/components/jeecg/JVxeTable';
-  import { columns, columns1 } from './jvxetable.data';
-  import { orderCustomerList, orderTicketList, saveOrUpdate } from './jvxetable.api';
-  import { useJvxeMethod } from '/@/hooks/system/useJvxeMethods.ts';
-  export default defineComponent({
-    name: 'JVexTableModal',
-    components: { BasicModal, JVxeTable },
-    emits: ['success', 'register'],
-    setup(props, { emit }) {
-      const isUpdate = ref(true);
-      const tableRef1 = ref();
-      const tableRef2 = ref();
-      const refKeys = ref(['tableRef1', 'tableRef2']);
-      const activeKey = ref('tableRef1');
-      const tableRefs = { tableRef1, tableRef2 };
-      const labelCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 5 },
-      });
-      const wrapperCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 16 },
-      });
-      // 瀹㈡埛淇℃伅
-      const table1 = reactive({
-        loading: false,
-        dataSource: [],
-        columns,
-      });
-      // 鏈虹エ淇℃伅
-      const table2 = reactive({
-        loading: false,
-        dataSource: [],
-        columns: columns1,
-      });
-      const orderMainModel = reactive({
-        id: null,
-        orderCode: '',
-        orderMoney: '',
-        ctype: '',
-        content: '',
-        jeecgOrderCustomerList: [],
-        jeecgOrderTicketList: [],
-      });
-      const [handleChangeTabs, handleSubmit, requestSubTableData, formRef] = useJvxeMethod(
-        requestAddOrEdit,
-        classifyIntoFormData,
-        tableRefs,
-        activeKey,
-        refKeys
-      );
-      const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-        setModalProps({ confirmLoading: false });
-        reset();
-        isUpdate.value = !!data?.isUpdate;
-        if (unref(isUpdate)) {
-          Object.assign(orderMainModel, data.record);
-          //鍔犺浇瀛愯〃鏁版嵁
-          let params = { id: orderMainModel.id };
-          requestSubTableData(orderCustomerList, params, table1);
-          requestSubTableData(orderTicketList, params, table2);
-        }
-      });
-
-      const validatorRules = { orderCode: [{ required: true, message: '璁㈠崟鍙蜂笉鑳戒负绌�', trigger: 'blur' }] };
-      const getTitle = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-
-      function classifyIntoFormData(allValues) {
-        let orderMain = Object.assign(orderMainModel, allValues.formValue);
-        return {
-          ...orderMain, // 灞曞紑
-          jeecgOrderCustomerList: allValues.tablesValue[0].tableData,
-          jeecgOrderTicketList: allValues.tablesValue[1].tableData,
-        };
-      }
-      function reset() {
-        orderMainModel.id = null;
-        orderMainModel.orderCode = '';
-        orderMainModel.orderMoney = '';
-        orderMainModel.orderDate = null;
-        orderMainModel.ctype = '';
-        orderMainModel.content = '';
-        orderMainModel.jeecgOrderCustomerList = [];
-        orderMainModel.jeecgOrderTicketList = [];
-        table1.dataSource = [];
-        table2.dataSource = [];
-      }
-      async function requestAddOrEdit(values) {
-        setModalProps({ confirmLoading: true });
-        //鎻愪氦琛ㄥ崟
-        await saveOrUpdate(values, unref(isUpdate));
-        //鍏抽棴寮圭獥
-        closeModal();
-        //鍒锋柊鍒楄〃
-        emit('success');
-      }
-      return {
-        formRef,
-        activeKey,
-        table1,
-        table2,
-        tableRef1,
-        tableRef2,
-        getTitle,
-        labelCol,
-        wrapperCol,
-        validatorRules,
-        orderMainModel,
-        registerModal,
-        handleChangeTabs,
-        handleSubmit,
-      };
-    },
-  });
-</script>
-<style scoped></style>
diff --git a/src/views/demo/vextable/jvxetable/jvxetable.api.ts b/src/views/demo/vextable/jvxetable/jvxetable.api.ts
deleted file mode 100644
index b00fb60..0000000
--- a/src/views/demo/vextable/jvxetable/jvxetable.api.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-enum Api {
-  save = '/test/jeecgOrderMain/add',
-  edit = '/test/jeecgOrderMain/edit',
-  orderCustomerList = '/test/jeecgOrderMain/queryOrderCustomerListByMainId',
-  orderTicketList = '/test/jeecgOrderMain/queryOrderTicketListByMainId',
-}
-export const orderCustomerList = Api.orderCustomerList;
-export const orderTicketList = Api.orderTicketList;
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
diff --git a/src/views/demo/vextable/jvxetable/jvxetable.data.ts b/src/views/demo/vextable/jvxetable/jvxetable.data.ts
deleted file mode 100644
index 193fa31..0000000
--- a/src/views/demo/vextable/jvxetable/jvxetable.data.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import { JVxeTypes, JVxeColumn } from '/@/components/jeecg/JVxeTable/types';
-
-export const columns: JVxeColumn[] = [
-  {
-    title: '瀹㈡埛鍚�',
-    key: 'name',
-    width: 180,
-    type: JVxeTypes.input,
-    defaultValue: '',
-    placeholder: '璇疯緭鍏�${title}',
-    validateRules: [{ required: true, message: '${title}涓嶈兘涓虹┖' }],
-  },
-  {
-    title: '鎬у埆',
-    key: 'sex',
-    width: 180,
-    type: JVxeTypes.select,
-    options: [
-      // 涓嬫媺閫夐」
-      { title: '鐢�', value: '1' },
-      { title: '濂�', value: '2' },
-    ],
-    defaultValue: '',
-    placeholder: '璇烽�夋嫨${title}',
-  },
-  {
-    title: '韬唤璇佸彿',
-    key: 'idcard',
-    width: 180,
-    type: JVxeTypes.input,
-    defaultValue: '',
-    placeholder: '璇疯緭鍏�${title}',
-    validateRules: [
-      {
-        pattern: '^\\d{6}(18|19|20)?\\d{2}(0[1-9]|1[012])(0[1-9]|[12]\\d|3[01])\\d{3}(\\d|[xX])$',
-        message: '${title}鏍煎紡涓嶆纭�',
-      },
-    ],
-  },
-  {
-    title: '鎵嬫満鍙�',
-    key: 'telphone',
-    width: 180,
-    type: JVxeTypes.input,
-    defaultValue: '',
-    placeholder: '璇疯緭鍏�${title}',
-    validateRules: [
-      {
-        pattern: '^1[3456789]\\d{9}$',
-        message: '${title}鏍煎紡涓嶆纭�',
-      },
-    ],
-  },
-];
-export const columns1: JVxeColumn[] = [
-  {
-    title: '鑸彮鍙�',
-    key: 'ticketCode',
-    width: 180,
-    type: JVxeTypes.input,
-    defaultValue: '',
-    placeholder: '璇疯緭鍏�${title}',
-    validateRules: [{ required: true, message: '${title}涓嶈兘涓虹┖' }],
-  },
-  {
-    title: '鑸彮鏃堕棿',
-    key: 'tickectDate',
-    width: 180,
-    type: JVxeTypes.date,
-    placeholder: '璇烽�夋嫨${title}',
-    defaultValue: '',
-  },
-];
diff --git a/src/views/demo/vextable/modal.vue b/src/views/demo/vextable/modal.vue
deleted file mode 100644
index efd4ac7..0000000
--- a/src/views/demo/vextable/modal.vue
+++ /dev/null
@@ -1,268 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" width="70%">
-    <a-form ref="formRef" :model="orderMainModel" :label-col="labelCol" :wrapper-col="wrapperCol" :rules="validatorRules">
-      <a-row class="form-row" :gutter="16">
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟鍙�" name="orderCode">
-            <a-input v-model:value="orderMainModel.orderCode" placeholder="璇疯緭鍏ヨ鍗曞彿" />
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟绫诲瀷">
-            <a-select placeholder="璇烽�夋嫨璁㈠崟绫诲瀷" v-model:value="orderMainModel.ctype">
-              <a-select-option value="1">鍥藉唴璁㈠崟</a-select-option>
-              <a-select-option value="2">鍥介檯璁㈠崟</a-select-option>
-            </a-select>
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟鏃ユ湡">
-            <a-date-picker showTime valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="orderMainModel.orderDate" />
-          </a-form-item>
-        </a-col>
-      </a-row>
-      <a-row class="form-row" :gutter="16">
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟閲戦">
-            <a-input v-model:value="orderMainModel.orderMoney" placeholder="璇疯緭鍏ヨ鍗曢噾棰�" />
-          </a-form-item>
-        </a-col>
-        <a-col :lg="8">
-          <a-form-item label="璁㈠崟澶囨敞">
-            <a-input v-model:value="orderMainModel.content" placeholder="璇疯緭鍏ヨ鍗曞娉�" />
-          </a-form-item>
-        </a-col>
-      </a-row>
-      <a-tabs defaultActiveKey="1">
-        <a-tab-pane tab="瀹㈡埛淇℃伅" key="1">
-          <div>
-            <a-row type="flex" style="margin-bottom: 10px" :gutter="16">
-              <a-col :span="5">瀹㈡埛鍚�</a-col>
-              <a-col :span="5">鎬у埆</a-col>
-              <a-col :span="6">韬唤璇佸彿鐮�</a-col>
-              <a-col :span="6">鎵嬫満鍙�</a-col>
-              <a-col :span="2">鎿嶄綔</a-col>
-            </a-row>
-            <a-row type="flex" style="margin-bottom: 10px" :gutter="16" v-for="(item, index) in orderMainModel.jeecgOrderCustomerList" :key="index">
-              <a-col :span="6" style="display: none">
-                <a-form-item>
-                  <a-input placeholder="id" v-model:value="item.id" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="5">
-                <a-form-item>
-                  <a-input placeholder="瀹㈡埛鍚�" v-model:value="item.name" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="5">
-                <a-form-item>
-                  <a-select placeholder="鎬у埆" v-model:value="item.sex">
-                    <a-select-option value="1">鐢�</a-select-option>
-                    <a-select-option value="2">濂�</a-select-option>
-                  </a-select>
-                </a-form-item>
-              </a-col>
-              <a-col :span="6">
-                <a-form-item
-                  :name="['jeecgOrderCustomerList', index, 'idcard']"
-                  :rules="[{ required: true, message: '璇疯緭鍏ヨ韩浠借瘉鍙�', trigger: 'blur' }]"
-                  :key="index"
-                >
-                  <a-input placeholder="韬唤璇佸彿" v-model:value="item.idcard" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="6">
-                <a-form-item :name="['jeecgOrderCustomerList', index, 'telphone']">
-                  <a-input placeholder="鎵嬫満鍙�" v-model:value="item.telphone" />
-                </a-form-item>
-              </a-col>
-              <a-col :span="2">
-                <a-form-item>
-                  <Icon icon="ant-design:minus-outlined" @click="delRowCustom(index)" style="fontsize: 20px" />
-                </a-form-item>
-              </a-col>
-            </a-row>
-            <a-button type="dashed" style="width: 98%; margin-top: 10px" @click="addRowCustom">
-              <Icon icon="ph:plus-bold" />
-              娣诲姞瀹㈡埛淇℃伅
-            </a-button>
-          </div>
-        </a-tab-pane>
-
-        <a-tab-pane tab="鏈虹エ淇℃伅" key="2" forceRender>
-          <a-row type="flex" style="margin-bottom: 10px" :gutter="16">
-            <a-col :span="6">鑸彮鍙�</a-col>
-            <a-col :span="6">鑸彮鏃堕棿</a-col>
-            <a-col :span="6">鎿嶄綔</a-col>
-          </a-row>
-          <a-row type="flex" style="margin-bottom: 10px" :gutter="16" v-for="(item, index) in orderMainModel.jeecgOrderTicketList" :key="index">
-            <a-col :span="6" style="display: none">
-              <a-form-item>
-                <a-input placeholder="id" v-model:value="item.id" />
-              </a-form-item>
-            </a-col>
-            <a-col :span="6">
-              <a-form-item
-                :name="['jeecgOrderTicketList', index, 'ticketCode']"
-                :rules="{ required: true, message: '璇疯緭鍏ヨ埅鐝彿', trigger: 'blur' }"
-              >
-                <a-input placeholder="鑸彮鍙�" v-model:value="item.ticketCode" />
-              </a-form-item>
-            </a-col>
-            <a-col :span="6">
-              <a-form-item>
-                <a-date-picker placeholder="鑸彮鏃堕棿" valueFormat="YYYY-MM-DD" v-model:value="item.tickectDate" />
-              </a-form-item>
-            </a-col>
-            <a-col :span="6">
-              <a-form-item>
-                <Icon icon="ant-design:minus-outlined" @click="delRowTicket(index)" style="fontsize: 20px" />
-              </a-form-item>
-            </a-col>
-          </a-row>
-          <a-button type="dashed" style="width: 98%; margin-top: 10px" @click="addRowTicket">
-            <Icon icon="ph:plus-bold" />
-            娣诲姞鏈虹エ淇℃伅
-          </a-button>
-        </a-tab-pane>
-      </a-tabs>
-    </a-form>
-  </BasicModal>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, reactive, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { ValidateErrorEntity } from 'ant-design-vue/es/form/interface';
-  import { saveOrUpdate } from './jvxetable/jvxetable.api';
-  import { orderCustomerList, orderTicketList } from './api';
-
-  export default defineComponent({
-    name: 'tableModal',
-    components: { BasicModal },
-    emits: ['success', 'register'],
-    setup(props, { emit }) {
-      const isUpdate = ref(true);
-      const rowId = ref('');
-      const formRef = ref();
-      const labelCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 5 },
-      });
-      const wrapperCol = reactive({
-        xs: { span: 24 },
-        sm: { span: 16 },
-      });
-      const validatorRules = {
-        orderCode: [{ required: true, message: '璁㈠崟鍙蜂笉鑳戒负绌�', trigger: 'blur' }],
-      };
-      const orderMainModel = reactive({
-        id: null,
-        orderCode: '',
-        orderMoney: '',
-        ctype: '',
-        content: '',
-        jeecgOrderCustomerList: [],
-        jeecgOrderTicketList: [],
-      });
-      const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-        setModalProps({ confirmLoading: false });
-        isUpdate.value = !!data?.isUpdate;
-        reset();
-        if (unref(isUpdate)) {
-          rowId.value = data.record.id;
-          Object.assign(orderMainModel, data.record);
-          let params = { id: orderMainModel.id };
-          const customerList = await orderCustomerList(params);
-          orderMainModel.jeecgOrderCustomerList = customerList;
-          const ticketList = await orderTicketList(params);
-          orderMainModel.jeecgOrderTicketList = ticketList;
-        }
-      });
-      const getTitle = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-
-      //鍔ㄦ�佹坊鍔犺
-      function addRowCustom() {
-        orderMainModel.jeecgOrderCustomerList.push({});
-      }
-
-      //鍒犻櫎琛�
-      function delRowCustom(index) {
-        orderMainModel['jeecgOrderCustomerList'].splice(index, 1);
-        orderMainModel.jeecgOrderCustomerList.splice(index, 1);
-      }
-      function reset() {
-        orderMainModel.id = null;
-        orderMainModel.orderCode = '';
-        orderMainModel.orderMoney = '';
-        orderMainModel.orderDate = null;
-        orderMainModel.ctype = '';
-        orderMainModel.content = '';
-        orderMainModel.jeecgOrderCustomerList = [];
-        orderMainModel.jeecgOrderTicketList = [];
-      }
-      function addRowTicket() {
-        orderMainModel.jeecgOrderTicketList.push({});
-      }
-
-      //鍒犻櫎鏈虹エ
-      function delRowTicket(index) {
-        orderMainModel['jeecgOrderTicketList'].splice(index, 1);
-        orderMainModel.jeecgOrderTicketList.splice(index, 1);
-      }
-
-      async function handleSubmit() {
-        formRef.value
-          .validate()
-          .then(async () => {
-            try {
-              console.log('formData', JSON.stringify(orderMainModel));
-              setModalProps({ confirmLoading: true });
-              await saveOrUpdate(orderMainModel, unref(isUpdate));
-              closeModal();
-              emit('success');
-            } finally {
-              setModalProps({ confirmLoading: false });
-            }
-          })
-          .catch((error: ValidateErrorEntity<any>) => {
-            console.log('error', error);
-          });
-      }
-
-      return {
-        formRef,
-        validatorRules,
-        orderMainModel,
-        registerModal,
-        getTitle,
-        labelCol,
-        wrapperCol,
-        addRowCustom,
-        delRowCustom,
-        addRowTicket,
-        delRowTicket,
-        handleSubmit,
-      };
-    },
-  });
-</script>
-<style scoped>
-  .ant-btn {
-    padding: 0 10px;
-    margin-left: 3px;
-  }
-
-  .ant-form-item-control {
-    line-height: 0px;
-  }
-
-  /** 涓昏〃鍗曡闂磋窛 */
-  .ant-form .ant-form-item {
-    margin-bottom: 10px;
-  }
-
-  /** Tab椤甸潰琛岄棿璺� */
-  .ant-tabs-content .ant-form-item {
-    margin-bottom: 0px;
-  }
-</style>
diff --git a/src/views/dry/DryEqpTypeList.vue b/src/views/dry/DryEqpTypeList.vue
deleted file mode 100644
index 330f825..0000000
--- a/src/views/dry/DryEqpTypeList.vue
+++ /dev/null
@@ -1,169 +0,0 @@
-<template>
-  <div>
-    <!--寮曠敤琛ㄦ牸-->
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 鏂板</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined" />
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="mdi:chevron-down" />
-          </a-button>
-        </a-dropdown>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-      <!--瀛楁鍥炴樉鎻掓Ы-->
-      <template #htmlSlot="{ text }">
-        <div v-html="text"></div>
-      </template>
-      <!--鐪佸競鍖哄瓧娈靛洖鏄炬彃妲�-->
-      <template #pcaSlot="{ text }">
-        {{ getAreaTextByCode(text) }}
-      </template>
-      <template #fileSlot="{ text }">
-        <span v-if="!text" style="font-size: 12px; font-style: italic">鏃犳枃浠�</span>
-        <a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">涓嬭浇</a-button>
-      </template>
-    </BasicTable>
-    <!-- 琛ㄥ崟鍖哄煙 -->
-    <DryEqpTypeModal @register="registerModal" @success="handleSuccess" />
-  </div>
-</template>
-
-<script lang="ts" name="dry-dryEqpType" setup>
-  import { ref } from 'vue';
-import { batchDelete, deleteOne, getExportUrl, getImportUrl, list } from './api/DryEqpType.api';
-import DryEqpTypeModal from './components/DryEqpTypeModal.vue';
-import { columns, searchFormSchema } from './dataDefine/DryEqpType.data';
-import { useModal } from '/@/components/Modal';
-import { BasicTable, TableAction } from '/@/components/Table';
-import { useListPage } from '/@/hooks/system/useListPage';
-import { downloadFile } from '/@/utils/common/renderUtils';
-  const checkedKeys = ref<Array<string | number>>([]);
-  //娉ㄥ唽model
-  const [registerModal, { openModal }] = useModal();
-  //娉ㄥ唽table鏁版嵁
-  const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-    tableProps: {
-      title: '璁惧绫诲瀷',
-      api: list,
-      columns,
-      canResize: false,
-      formConfig: {
-        //labelWidth: 120,
-        schemas: searchFormSchema,
-        autoSubmitOnEnter: true,
-        showAdvancedButton: true,
-        fieldMapToNumber: [],
-        fieldMapToTime: [],
-      },
-      actionColumn: {
-        width: 120,
-        fixed: 'right',
-      },
-    },
-    exportConfig: {
-      name: '璁惧绫诲瀷',
-      url: getExportUrl,
-    },
-    importConfig: {
-      url: getImportUrl,
-      success: handleSuccess,
-    },
-  });
-
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleAdd() {
-    openModal(true, {
-      isUpdate: false,
-      showFooter: true,
-    });
-  }
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  function handleEdit(record: Recordable) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-      showFooter: true,
-    });
-  }
-  /**
-   * 璇︽儏
-   */
-  function handleDetail(record: Recordable) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-      showFooter: false,
-    });
-  }
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteOne({ id: record.id }, handleSuccess);
-  }
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
-  }
-  /**
-   * 鎴愬姛鍥炶皟
-   */
-  function handleSuccess() {
-    (selectedRowKeys.value = []) && reload();
-  }
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-    ];
-  }
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record) {
-    return [
-      {
-        label: '璇︽儏',
-        onClick: handleDetail.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/dry/DryEquipmentList.vue b/src/views/dry/DryEquipmentList.vue
deleted file mode 100644
index ef6e9e7..0000000
--- a/src/views/dry/DryEquipmentList.vue
+++ /dev/null
@@ -1,169 +0,0 @@
-<template>
-	<div>
-		<!--寮曠敤琛ㄦ牸-->
-		<BasicTable @register="registerTable" :rowSelection="rowSelection">
-			<!--鎻掓Ы:table鏍囬-->
-			<template #tableTitle>
-				<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 鏂板</a-button>
-				<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-				<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-				<a-dropdown v-if="selectedRowKeys.length > 0">
-					<template #overlay>
-						<a-menu>
-							<a-menu-item key="1" @click="batchHandleDelete">
-								<Icon icon="ant-design:delete-outlined" />
-								鍒犻櫎
-							</a-menu-item>
-						</a-menu>
-					</template>
-					<a-button
-						>鎵归噺鎿嶄綔
-						<Icon icon="mdi:chevron-down" />
-					</a-button>
-				</a-dropdown>
-			</template>
-			<!--鎿嶄綔鏍�-->
-			<template #action="{ record }">
-				<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-			</template>
-			<!--瀛楁鍥炴樉鎻掓Ы-->
-			<template #htmlSlot="{ text }">
-				<div v-html="text"></div>
-			</template>
-			<!--鐪佸競鍖哄瓧娈靛洖鏄炬彃妲�-->
-			<template #pcaSlot="{ text }">
-				{{ getAreaTextByCode(text) }}
-			</template>
-			<template #fileSlot="{ text }">
-				<span v-if="!text" style="font-size: 12px; font-style: italic">鏃犳枃浠�</span>
-				<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">涓嬭浇</a-button>
-			</template>
-		</BasicTable>
-		<!-- 琛ㄥ崟鍖哄煙 -->
-		<DryEquipmentModal @register="registerModal" @success="handleSuccess" />
-	</div>
-</template>
-
-<script lang="ts" name="dry-dryEquipment" setup>
-	import { ref } from 'vue'
-	import { batchDelete, deleteOne, getExportUrl, getImportUrl, list } from './api/DryEquipment.api'
-	import DryEquipmentModal from './components/DryEquipmentModal.vue'
-	import { columns, searchFormSchema } from './dataDefine/DryEquipment.data'
-	import { useModal } from '/@/components/Modal'
-	import { BasicTable, TableAction } from '/@/components/Table'
-	import { useListPage } from '/@/hooks/system/useListPage'
-	import { downloadFile } from '/@/utils/common/renderUtils'
-	const checkedKeys = ref<Array<string | number>>([])
-	//娉ㄥ唽model
-	const [registerModal, { openModal }] = useModal()
-	//娉ㄥ唽table鏁版嵁
-	const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-		tableProps: {
-			title: '骞茬嚗鏈�',
-			api: list,
-			columns,
-			canResize: false,
-			formConfig: {
-				//labelWidth: 120,
-				schemas: searchFormSchema,
-				autoSubmitOnEnter: true,
-				showAdvancedButton: true,
-				fieldMapToNumber: [],
-				fieldMapToTime: [],
-			},
-			actionColumn: {
-				width: 120,
-				fixed: 'right',
-			},
-		},
-		exportConfig: {
-			name: '骞茬嚗鏈�',
-			url: getExportUrl,
-		},
-		importConfig: {
-			url: getImportUrl,
-			success: handleSuccess,
-		},
-	})
-
-	const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext
-
-	/**
-	 * 鏂板浜嬩欢
-	 */
-	function handleAdd() {
-		openModal(true, {
-			isUpdate: false,
-			showFooter: true,
-		})
-	}
-	/**
-	 * 缂栬緫浜嬩欢
-	 */
-	function handleEdit(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: true,
-		})
-	}
-	/**
-	 * 璇︽儏
-	 */
-	function handleDetail(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: false,
-		})
-	}
-	/**
-	 * 鍒犻櫎浜嬩欢
-	 */
-	async function handleDelete(record) {
-		await deleteOne({ id: record.id }, handleSuccess)
-	}
-	/**
-	 * 鎵归噺鍒犻櫎浜嬩欢
-	 */
-	async function batchHandleDelete() {
-		await batchDelete({ ids: selectedRowKeys.value }, handleSuccess)
-	}
-	/**
-	 * 鎴愬姛鍥炶皟
-	 */
-	function handleSuccess() {
-		;(selectedRowKeys.value = []) && reload()
-	}
-	/**
-	 * 鎿嶄綔鏍�
-	 */
-	function getTableAction(record) {
-		return [
-			{
-				label: '缂栬緫',
-				onClick: handleEdit.bind(null, record),
-			},
-		]
-	}
-	/**
-	 * 涓嬫媺鎿嶄綔鏍�
-	 */
-	function getDropDownAction(record) {
-		return [
-			{
-				label: '璇︽儏',
-				onClick: handleDetail.bind(null, record),
-			},
-			{
-				label: '鍒犻櫎',
-				popConfirm: {
-					title: '鏄惁纭鍒犻櫎',
-					confirm: handleDelete.bind(null, record),
-				},
-			},
-		]
-	}
-</script>
-
-<style scoped></style>
diff --git a/src/views/dry/DryHerbFormulaList.vue b/src/views/dry/DryHerbFormulaList.vue
deleted file mode 100644
index 133add1..0000000
--- a/src/views/dry/DryHerbFormulaList.vue
+++ /dev/null
@@ -1,169 +0,0 @@
-<template>
-	<div>
-		<!--寮曠敤琛ㄦ牸-->
-		<BasicTable @register="registerTable" :rowSelection="rowSelection">
-			<!--鎻掓Ы:table鏍囬-->
-			<template #tableTitle>
-				<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 鏂板</a-button>
-				<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-				<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-				<a-dropdown v-if="selectedRowKeys.length > 0">
-					<template #overlay>
-						<a-menu>
-							<a-menu-item key="1" @click="batchHandleDelete">
-								<Icon icon="ant-design:delete-outlined" />
-								鍒犻櫎
-							</a-menu-item>
-						</a-menu>
-					</template>
-					<a-button
-						>鎵归噺鎿嶄綔
-						<Icon icon="mdi:chevron-down" />
-					</a-button>
-				</a-dropdown>
-			</template>
-			<!--鎿嶄綔鏍�-->
-			<template #action="{ record }">
-				<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-			</template>
-			<!--瀛楁鍥炴樉鎻掓Ы-->
-			<template #htmlSlot="{ text }">
-				<div v-html="text"></div>
-			</template>
-			<!--鐪佸競鍖哄瓧娈靛洖鏄炬彃妲�-->
-			<template #pcaSlot="{ text }">
-				{{ getAreaTextByCode(text) }}
-			</template>
-			<template #fileSlot="{ text }">
-				<span v-if="!text" style="font-size: 12px; font-style: italic">鏃犳枃浠�</span>
-				<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">涓嬭浇</a-button>
-			</template>
-		</BasicTable>
-		<!-- 琛ㄥ崟鍖哄煙 -->
-		<DryHerbFormulaModal @register="registerModal" @success="handleSuccess" />
-	</div>
-</template>
-
-<script lang="ts" name="dry-dryHerbFormula" setup>
-	import { ref, computed, unref } from 'vue'
-	import { BasicTable, useTable, TableAction } from '/@/components/Table'
-	import { useModal } from '/@/components/Modal'
-	import { useListPage } from '/@/hooks/system/useListPage'
-	import DryHerbFormulaModal from './components/DryHerbFormulaModal.vue'
-	import { columns, searchFormSchema } from './dataDefine/DryHerbFormula.data'
-	import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './api/DryHerbFormula.api'
-	import { downloadFile } from '/@/utils/common/renderUtils'
-	const checkedKeys = ref<Array<string | number>>([])
-	//娉ㄥ唽model
-	const [registerModal, { openModal }] = useModal()
-	//娉ㄥ唽table鏁版嵁
-	const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-		tableProps: {
-			title: '骞茬嚗閰嶆柟',
-			api: list,
-			columns,
-			canResize: false,
-			formConfig: {
-				//labelWidth: 120,
-				schemas: searchFormSchema,
-				autoSubmitOnEnter: true,
-				showAdvancedButton: true,
-				fieldMapToNumber: [],
-				fieldMapToTime: [],
-			},
-			actionColumn: {
-				width: 120,
-				fixed: 'right',
-			},
-		},
-		exportConfig: {
-			name: '骞茬嚗閰嶆柟',
-			url: getExportUrl,
-		},
-		importConfig: {
-			url: getImportUrl,
-			success: handleSuccess,
-		},
-	})
-
-	const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext
-
-	/**
-	 * 鏂板浜嬩欢
-	 */
-	function handleAdd() {
-		openModal(true, {
-			isUpdate: false,
-			showFooter: true,
-		})
-	}
-	/**
-	 * 缂栬緫浜嬩欢
-	 */
-	function handleEdit(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: true,
-		})
-	}
-	/**
-	 * 璇︽儏
-	 */
-	function handleDetail(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: false,
-		})
-	}
-	/**
-	 * 鍒犻櫎浜嬩欢
-	 */
-	async function handleDelete(record) {
-		await deleteOne({ id: record.id }, handleSuccess)
-	}
-	/**
-	 * 鎵归噺鍒犻櫎浜嬩欢
-	 */
-	async function batchHandleDelete() {
-		await batchDelete({ ids: selectedRowKeys.value }, handleSuccess)
-	}
-	/**
-	 * 鎴愬姛鍥炶皟
-	 */
-	function handleSuccess() {
-		;(selectedRowKeys.value = []) && reload()
-	}
-	/**
-	 * 鎿嶄綔鏍�
-	 */
-	function getTableAction(record) {
-		return [
-			{
-				label: '缂栬緫',
-				onClick: handleEdit.bind(null, record),
-			},
-		]
-	}
-	/**
-	 * 涓嬫媺鎿嶄綔鏍�
-	 */
-	function getDropDownAction(record) {
-		return [
-			{
-				label: '璇︽儏',
-				onClick: handleDetail.bind(null, record),
-			},
-			{
-				label: '鍒犻櫎',
-				popConfirm: {
-					title: '鏄惁纭鍒犻櫎',
-					confirm: handleDelete.bind(null, record),
-				},
-			},
-		]
-	}
-</script>
-
-<style scoped></style>
diff --git a/src/views/dry/DryHerbInfoList.vue b/src/views/dry/DryHerbInfoList.vue
deleted file mode 100644
index 4c05f2b..0000000
--- a/src/views/dry/DryHerbInfoList.vue
+++ /dev/null
@@ -1,177 +0,0 @@
-<template>
-	<div>
-		<!--寮曠敤琛ㄦ牸-->
-		<BasicTable @register="registerTable" :rowSelection="rowSelection">
-			<!--鎻掓Ы:table鏍囬-->
-			<template #tableTitle>
-				<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 鏂板 </a-button>
-				<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭 </a-button>
-				<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls"> 瀵煎叆 </j-upload-button>
-				<a-dropdown v-if="selectedRowKeys.length > 0">
-					<template #overlay>
-						<a-menu>
-							<a-menu-item key="1" @click="batchHandleDelete">
-								<Icon icon="ant-design:delete-outlined" />
-								鍒犻櫎
-							</a-menu-item>
-						</a-menu>
-					</template>
-					<a-button
-						>鎵归噺鎿嶄綔
-						<Icon icon="mdi:chevron-down" />
-					</a-button>
-				</a-dropdown>
-			</template>
-			<!--鎿嶄綔鏍�-->
-			<template #action="{ record }">
-				<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-			</template>
-			<!--瀛楁鍥炴樉鎻掓Ы-->
-			<template #htmlSlot="{ text }">
-				<div v-html="text"></div>
-			</template>
-			<!--鐪佸競鍖哄瓧娈靛洖鏄炬彃妲�-->
-			<template #pcaSlot="{ text }">
-				{{ getAreaTextByCode(text) }}
-			</template>
-			<template #fileSlot="{ text }">
-				<span v-if="!text" style="font-size: 12px; font-style: italic">鏃犳枃浠�</span>
-				<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">涓嬭浇 </a-button>
-			</template>
-		</BasicTable>
-		<!-- 琛ㄥ崟鍖哄煙 -->
-		<DryHerbInfoModal @register="registerModal" @success="handleSuccess" />
-	</div>
-</template>
-
-<script lang="ts" name="dry-dryHerbInfo" setup>
-	import { ref, computed, unref } from 'vue'
-	import { BasicTable, useTable, TableAction } from '/@/components/Table'
-	import { useModal } from '/@/components/Modal'
-	import { useListPage } from '/@/hooks/system/useListPage'
-	import DryHerbInfoModal from './components/DryHerbInfoModal.vue'
-	import { columns, searchFormSchema } from './dataDefine/DryHerbInfo.data'
-	import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './api/DryHerbInfo.api'
-	import { downloadFile } from '/@/utils/common/renderUtils'
-
-	const checkedKeys = ref<Array<string | number>>([])
-	//娉ㄥ唽model
-	const [registerModal, { openModal }] = useModal()
-	//娉ㄥ唽table鏁版嵁
-	const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-		tableProps: {
-			title: 'dry_herb_info',
-			api: list,
-			columns,
-			canResize: false,
-			formConfig: {
-				//labelWidth: 120,
-				schemas: searchFormSchema,
-				autoSubmitOnEnter: true,
-				showAdvancedButton: true,
-				fieldMapToNumber: [],
-				fieldMapToTime: [],
-			},
-			actionColumn: {
-				width: 120,
-				fixed: 'right',
-			},
-		},
-		exportConfig: {
-			name: 'dry_herb_info',
-			url: getExportUrl,
-		},
-		importConfig: {
-			url: getImportUrl,
-			success: handleSuccess,
-		},
-	})
-
-	const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext
-
-	/**
-	 * 鏂板浜嬩欢
-	 */
-	function handleAdd() {
-		openModal(true, {
-			isUpdate: false,
-			showFooter: true,
-		})
-	}
-
-	/**
-	 * 缂栬緫浜嬩欢
-	 */
-	function handleEdit(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: true,
-		})
-	}
-
-	/**
-	 * 璇︽儏
-	 */
-	function handleDetail(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: false,
-		})
-	}
-
-	/**
-	 * 鍒犻櫎浜嬩欢
-	 */
-	async function handleDelete(record) {
-		await deleteOne({ id: record.id }, handleSuccess)
-	}
-
-	/**
-	 * 鎵归噺鍒犻櫎浜嬩欢
-	 */
-	async function batchHandleDelete() {
-		await batchDelete({ ids: selectedRowKeys.value }, handleSuccess)
-	}
-
-	/**
-	 * 鎴愬姛鍥炶皟
-	 */
-	function handleSuccess() {
-		;(selectedRowKeys.value = []) && reload()
-	}
-
-	/**
-	 * 鎿嶄綔鏍�
-	 */
-	function getTableAction(record) {
-		return [
-			{
-				label: '缂栬緫',
-				onClick: handleEdit.bind(null, record),
-			},
-		]
-	}
-
-	/**
-	 * 涓嬫媺鎿嶄綔鏍�
-	 */
-	function getDropDownAction(record) {
-		return [
-			{
-				label: '璇︽儏',
-				onClick: handleDetail.bind(null, record),
-			},
-			{
-				label: '鍒犻櫎',
-				popConfirm: {
-					title: '鏄惁纭鍒犻櫎',
-					confirm: handleDelete.bind(null, record),
-				},
-			},
-		]
-	}
-</script>
-
-<style scoped></style>
diff --git a/src/views/dry/DryHerbList.vue b/src/views/dry/DryHerbList.vue
deleted file mode 100644
index 10795d6..0000000
--- a/src/views/dry/DryHerbList.vue
+++ /dev/null
@@ -1,169 +0,0 @@
-<template>
-	<div>
-		<!--寮曠敤琛ㄦ牸-->
-		<BasicTable @register="registerTable" :rowSelection="rowSelection">
-			<!--鎻掓Ы:table鏍囬-->
-			<template #tableTitle>
-				<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 鏂板</a-button>
-				<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-				<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-				<a-dropdown v-if="selectedRowKeys.length > 0">
-					<template #overlay>
-						<a-menu>
-							<a-menu-item key="1" @click="batchHandleDelete">
-								<Icon icon="ant-design:delete-outlined" />
-								鍒犻櫎
-							</a-menu-item>
-						</a-menu>
-					</template>
-					<a-button
-						>鎵归噺鎿嶄綔
-						<Icon icon="mdi:chevron-down" />
-					</a-button>
-				</a-dropdown>
-			</template>
-			<!--鎿嶄綔鏍�-->
-			<template #action="{ record }">
-				<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-			</template>
-			<!--瀛楁鍥炴樉鎻掓Ы-->
-			<template #htmlSlot="{ text }">
-				<div v-html="text"></div>
-			</template>
-			<!--鐪佸競鍖哄瓧娈靛洖鏄炬彃妲�-->
-			<template #pcaSlot="{ text }">
-				{{ getAreaTextByCode(text) }}
-			</template>
-			<template #fileSlot="{ text }">
-				<span v-if="!text" style="font-size: 12px; font-style: italic">鏃犳枃浠�</span>
-				<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">涓嬭浇</a-button>
-			</template>
-		</BasicTable>
-		<!-- 琛ㄥ崟鍖哄煙 -->
-		<DryHerbModal @register="registerModal" @success="handleSuccess" />
-	</div>
-</template>
-
-<script lang="ts" name="dry-dryHerb" setup>
-	import { ref } from 'vue'
-	import DryHerbModal from './components/DryHerbModal.vue'
-	import { batchDelete, deleteOne, getExportUrl, getImportUrl, list } from './api/DryHerb.api'
-	import { columns, searchFormSchema } from './dataDefine/DryHerb.data'
-	import { useModal } from '/@/components/Modal'
-	import { BasicTable, TableAction } from '/@/components/Table'
-	import { useListPage } from '/@/hooks/system/useListPage'
-	import { downloadFile } from '/@/utils/common/renderUtils'
-	const checkedKeys = ref<Array<string | number>>([])
-	//娉ㄥ唽model
-	const [registerModal, { openModal }] = useModal()
-	//娉ㄥ唽table鏁版嵁
-	const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-		tableProps: {
-			title: '鑽潗',
-			api: list,
-			columns,
-			canResize: false,
-			formConfig: {
-				//labelWidth: 120,
-				schemas: searchFormSchema,
-				autoSubmitOnEnter: true,
-				showAdvancedButton: true,
-				fieldMapToNumber: [],
-				fieldMapToTime: [],
-			},
-			actionColumn: {
-				width: 120,
-				fixed: 'right',
-			},
-		},
-		exportConfig: {
-			name: '鑽潗',
-			url: getExportUrl,
-		},
-		importConfig: {
-			url: getImportUrl,
-			success: handleSuccess,
-		},
-	})
-
-	const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext
-
-	/**
-	 * 鏂板浜嬩欢
-	 */
-	function handleAdd() {
-		openModal(true, {
-			isUpdate: false,
-			showFooter: true,
-		})
-	}
-	/**
-	 * 缂栬緫浜嬩欢
-	 */
-	function handleEdit(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: true,
-		})
-	}
-	/**
-	 * 璇︽儏
-	 */
-	function handleDetail(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: false,
-		})
-	}
-	/**
-	 * 鍒犻櫎浜嬩欢
-	 */
-	async function handleDelete(record) {
-		await deleteOne({ id: record.id }, handleSuccess)
-	}
-	/**
-	 * 鎵归噺鍒犻櫎浜嬩欢
-	 */
-	async function batchHandleDelete() {
-		await batchDelete({ ids: selectedRowKeys.value }, handleSuccess)
-	}
-	/**
-	 * 鎴愬姛鍥炶皟
-	 */
-	function handleSuccess() {
-		;(selectedRowKeys.value = []) && reload()
-	}
-	/**
-	 * 鎿嶄綔鏍�
-	 */
-	function getTableAction(record) {
-		return [
-			{
-				label: '缂栬緫',
-				onClick: handleEdit.bind(null, record),
-			},
-		]
-	}
-	/**
-	 * 涓嬫媺鎿嶄綔鏍�
-	 */
-	function getDropDownAction(record) {
-		return [
-			{
-				label: '璇︽儏',
-				onClick: handleDetail.bind(null, record),
-			},
-			{
-				label: '鍒犻櫎',
-				popConfirm: {
-					title: '鏄惁纭鍒犻櫎',
-					confirm: handleDelete.bind(null, record),
-				},
-			},
-		]
-	}
-</script>
-
-<style scoped></style>
diff --git a/src/views/dry/DryHerbTypeList.vue b/src/views/dry/DryHerbTypeList.vue
deleted file mode 100644
index 04ed486..0000000
--- a/src/views/dry/DryHerbTypeList.vue
+++ /dev/null
@@ -1,315 +0,0 @@
-<template>
-	<div>
-		<!--寮曠敤琛ㄦ牸-->
-		<BasicTable
-			@register="registerTable"
-			:rowSelection="rowSelection"
-			:expandedRowKeys="expandedRowKeys"
-			@expand="handleExpand"
-			@fetch-success="onFetchSuccess"
-		>
-			<!--鎻掓Ы:table鏍囬-->
-			<template #tableTitle>
-				<a-button type="primary" @click="handleCreate" preIcon="ant-design:plus-outlined"> 鏂板</a-button>
-				<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-				<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-
-				<a-dropdown v-if="selectedRowKeys.length > 0">
-					<template #overlay>
-						<a-menu>
-							<a-menu-item key="1" @click="batchHandleDelete">
-								<Icon icon="ant-design:delete-outlined" />
-								鍒犻櫎
-							</a-menu-item>
-						</a-menu>
-					</template>
-					<a-button
-						>鎵归噺鎿嶄綔
-						<Icon icon="ant-design:down-outlined" />
-					</a-button>
-				</a-dropdown>
-			</template>
-			<!--鎿嶄綔鏍�-->
-			<template #action="{ record }">
-				<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-			</template>
-			<!--瀛楁鍥炴樉鎻掓Ы-->
-			<template #htmlSlot="{ text }">
-				<div v-html="text"></div>
-			</template>
-			<!--鐪佸競鍖哄瓧娈靛洖鏄炬彃妲�-->
-			<template #pcaSlot="{ text }">
-				{{ getAreaTextByCode(text) }}
-			</template>
-			<template #fileSlot="{ text }">
-				<span v-if="!text" style="font-size: 12px; font-style: italic">鏃犳枃浠�</span>
-				<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">涓嬭浇</a-button>
-			</template>
-		</BasicTable>
-		<!--瀛楀吀寮圭獥-->
-		<DryHerbTypeModal @register="registerModal" @success="handleSuccess" />
-	</div>
-</template>
-
-<script lang="ts" name="dry-dryHerbType" setup>
-	//ts璇硶
-	import { ref, unref } from 'vue'
-	import { batchDeleteDryHerbType, deleteDryHerbType, getChildList, getChildListBatch, getExportUrl, getImportUrl, list } from './api/DryHerbType.api'
-	import DryHerbTypeModal from './components/DryHerbTypeModal.vue'
-	import { columns, searchFormSchema } from './dataDefine/DryHerbType.data'
-	import { useModal } from '/@/components/Modal'
-	import { BasicTable, TableAction } from '/@/components/Table'
-	import { useListPage } from '/@/hooks/system/useListPage'
-	import { downloadFile } from '/@/utils/common/renderUtils'
-	const expandedRowKeys = ref([])
-	//瀛楀吀model
-	const [registerModal, { openModal }] = useModal()
-	//娉ㄥ唽table鏁版嵁
-	const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-		tableProps: {
-			api: list,
-			title: '鑽潗鍒嗙被',
-			columns,
-			canResize: false,
-			formConfig: {
-				//labelWidth: 120,
-				schemas: searchFormSchema,
-				autoSubmitOnEnter: true,
-				showAdvancedButton: true,
-				fieldMapToNumber: [],
-				fieldMapToTime: [],
-			},
-			actionColumn: {
-				width: 240,
-				fixed: 'right',
-			},
-		},
-		exportConfig: {
-			name: '鑽潗鍒嗙被',
-			url: getExportUrl,
-		},
-		importConfig: {
-			url: getImportUrl,
-			success: importSuccess,
-		},
-	})
-
-	const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] =
-		tableContext
-
-	/**
-	 * 鏂板浜嬩欢
-	 */
-	function handleCreate() {
-		openModal(true, {
-			isUpdate: false,
-		})
-	}
-
-	/**
-	 * 缂栬緫浜嬩欢
-	 */
-	async function handleEdit(record) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-		})
-	}
-
-	/**
-	 * 璇︽儏
-	 */
-	async function handleDetail(record) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			hideFooter: true,
-		})
-	}
-
-	/**
-	 * 鍒犻櫎浜嬩欢
-	 */
-	async function handleDelete(record) {
-		await deleteDryHerbType({ id: record.id }, importSuccess)
-	}
-
-	/**
-	 * 鎵归噺鍒犻櫎浜嬩欢
-	 */
-	async function batchHandleDelete() {
-		const ids = selectedRowKeys.value.filter((item) => !item.includes('loading'))
-		await batchDeleteDryHerbType({ id: ids }, importSuccess)
-	}
-	/**
-	 * 瀵煎叆
-	 */
-	function importSuccess() {
-		;(selectedRowKeys.value = []) && reload()
-	}
-	/**
-	 * 娣诲姞涓嬬骇
-	 */
-	function handleAddSub(record) {
-		openModal(true, {
-			record,
-			isUpdate: false,
-		})
-	}
-	/**
-	 * 鎴愬姛鍥炶皟
-	 */
-	async function handleSuccess({ isUpdate, values, expandedArr, changeParent }) {
-		if (isUpdate) {
-			if (changeParent) {
-				reload()
-			} else {
-				// 缂栬緫鍥炶皟
-				updateTableDataRecord(values.id, values)
-			}
-		} else {
-			if (!values['id'] || !values['pid']) {
-				//鏂板鏍硅妭鐐�
-				reload()
-			} else {
-				//鏂板瀛愰泦
-				expandedRowKeys.value = []
-				for (let key of unref(expandedArr)) {
-					await expandTreeNode(key)
-				}
-			}
-		}
-	}
-
-	/**
-	 * 鎺ュ彛璇锋眰鎴愬姛鍚庡洖璋�
-	 */
-	function onFetchSuccess(result) {
-		getDataByResult(result.items) && loadDataByExpandedRows()
-	}
-	/**
-	 * 鏍规嵁宸插睍寮�鐨勮鏌ヨ鏁版嵁锛堢敤浜庝繚瀛樺悗鍒锋柊鏃跺紓姝ュ姞杞藉瓙绾х殑鏁版嵁锛�
-	 */
-	async function loadDataByExpandedRows() {
-		if (unref(expandedRowKeys).length > 0) {
-			const res = await getChildListBatch({ parentIds: unref(expandedRowKeys).join(',') })
-			if (res.success && res.result.records.length > 0) {
-				//宸插睍寮�鐨勬暟鎹壒閲忓瓙鑺傜偣
-				let records = res.result.records
-				const listMap = new Map()
-				for (let item of records) {
-					let pid = item['pid']
-					if (unref(expandedRowKeys).includes(pid)) {
-						let mapList = listMap.get(pid)
-						if (mapList == null) {
-							mapList = []
-						}
-						mapList.push(item)
-						listMap.set(pid, mapList)
-					}
-				}
-				let childrenMap = listMap
-				let fn = (list) => {
-					if (list) {
-						list.forEach((data) => {
-							if (unref(expandedRowKeys).includes(data.id)) {
-								data.children = getDataByResult(childrenMap.get(data.id))
-								fn(data.children)
-							}
-						})
-					}
-				}
-				fn(getDataSource())
-			}
-		}
-	}
-	/**
-	 * 澶勭悊鏁版嵁闆�
-	 */
-	function getDataByResult(result) {
-		if (result && result.length > 0) {
-			return result.map((item) => {
-				//鍒ゆ柇鏄惁鏍囪浜嗗甫鏈夊瓙鑺傜偣
-				if (item['hasChild'] == '1') {
-					let loadChild = { id: item.id + '_loadChild', name: 'loading...', isLoading: true }
-					item.children = [loadChild]
-				}
-				return item
-			})
-		}
-	}
-	/**
-	 *鏍戣妭鐐瑰睍寮�鍚堝苟
-	 * */
-	async function handleExpand(expanded, record) {
-		// 鍒ゆ柇鏄惁鏄睍寮�鐘舵�侊紝灞曞紑鐘舵��(expanded)骞朵笖瀛樺湪瀛愰泦(children)骞朵笖鏈姞杞借繃(isLoading)鐨勫氨鍘绘煡璇㈠瓙鑺傜偣鏁版嵁
-		if (expanded) {
-			expandedRowKeys.value.push(record.id)
-			if (record.children.length > 0 && !!record.children[0].isLoading) {
-				let result = await getChildList({ pid: record.id })
-				result = result.records ? result.records : result
-				if (result && result.length > 0) {
-					record.children = getDataByResult(result)
-				} else {
-					record.children = null
-					record.hasChild = '0'
-				}
-			}
-		} else {
-			let keyIndex = expandedRowKeys.value.indexOf(record.id)
-			if (keyIndex >= 0) {
-				expandedRowKeys.value.splice(keyIndex, 1)
-			}
-		}
-	}
-	/**
-	 *鎿嶄綔琛ㄦ牸鍚庡鐞嗘爲鑺傜偣灞曞紑鍚堝苟
-	 * */
-	async function expandTreeNode(key) {
-		let record = findTableDataRecord(key)
-		expandedRowKeys.value.push(key)
-		let result = await getChildList({ pid: key })
-		if (result && result.length > 0) {
-			record.children = getDataByResult(result)
-		} else {
-			record.children = null
-			record.hasChild = '0'
-		}
-		updateTableDataRecord(key, record)
-	}
-	/**
-	 * 鎿嶄綔鏍�
-	 */
-	function getTableAction(record) {
-		return [
-			{
-				label: '缂栬緫',
-				onClick: handleEdit.bind(null, record),
-			},
-			{
-				label: '娣诲姞涓嬬骇',
-				onClick: handleAddSub.bind(null, { pid: record.id }),
-			},
-		]
-	}
-	/**
-	 * 涓嬫媺鎿嶄綔鏍�
-	 */
-	function getDropDownAction(record) {
-		return [
-			{
-				label: '璇︽儏',
-				onClick: handleDetail.bind(null, record),
-			},
-			{
-				label: '鍒犻櫎',
-				popConfirm: {
-					title: '纭畾鍒犻櫎鍚�?',
-					confirm: handleDelete.bind(null, record),
-				},
-			},
-		]
-	}
-</script>
-
-<style scoped></style>
diff --git a/src/views/dry/DryOpcDeviceList.vue b/src/views/dry/DryOpcDeviceList.vue
deleted file mode 100644
index f0b4892..0000000
--- a/src/views/dry/DryOpcDeviceList.vue
+++ /dev/null
@@ -1,174 +0,0 @@
-<template>
-  <div>
-    <!--寮曠敤琛ㄦ牸-->
-   <BasicTable @register="registerTable" :rowSelection="rowSelection">
-     <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-          <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 鏂板</a-button>
-          <a-button  type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-          <j-upload-button  type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-          <a-dropdown v-if="selectedRowKeys.length > 0">
-              <template #overlay>
-                <a-menu>
-                  <a-menu-item key="1" @click="batchHandleDelete">
-                    <Icon icon="ant-design:delete-outlined"></Icon>
-                    鍒犻櫎
-                  </a-menu-item>
-                </a-menu>
-              </template>
-              <a-button>鎵归噺鎿嶄綔
-                <Icon icon="mdi:chevron-down"></Icon>
-              </a-button>
-        </a-dropdown>
-      </template>
-       <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
-      </template>
-      <!--瀛楁鍥炴樉鎻掓Ы-->
-      <template #htmlSlot="{text}">
-         <div v-html="text"></div>
-      </template>
-      <!--鐪佸競鍖哄瓧娈靛洖鏄炬彃妲�-->
-      <template #pcaSlot="{text}">
-         {{ getAreaTextByCode(text) }}
-      </template>
-      <template #fileSlot="{text}">
-         <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span>
-         <a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">涓嬭浇</a-button>
-      </template>
-    </BasicTable>
-    <!-- 琛ㄥ崟鍖哄煙 -->
-    <DryOpcDeviceModal @register="registerModal" @success="handleSuccess"></DryOpcDeviceModal>
-  </div>
-</template>
-
-<script lang="ts" name="dry-dryOpcDevice" setup>
-  import {ref, computed, unref} from 'vue';
-  import {BasicTable, useTable, TableAction} from '/@/components/Table';
-  import {useModal} from '/@/components/Modal';
-  import { useListPage } from '/@/hooks/system/useListPage'
-  import DryOpcDeviceModal from './components/DryOpcDeviceModal.vue'
-  import {columns, searchFormSchema} from './dataDefine/DryOpcDevice.data';
-  import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './api/DryOpcDevice.api';
-  import { downloadFile } from '/@/utils/common/renderUtils';
-  const checkedKeys = ref<Array<string | number>>([]);
-  //娉ㄥ唽model
-  const [registerModal, {openModal}] = useModal();
-  //娉ㄥ唽table鏁版嵁
-  const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
-      tableProps:{
-           title: 'dry_opc_device',
-           api: list,
-           columns,
-           canResize:false,
-           formConfig: {
-              //labelWidth: 120,
-              schemas: searchFormSchema,
-              autoSubmitOnEnter:true,
-              showAdvancedButton:true,
-              fieldMapToNumber: [
-              ],
-              fieldMapToTime: [
-              ],
-            },
-           actionColumn: {
-               width: 120,
-               fixed:'right'
-            },
-      },
-       exportConfig: {
-            name:"dry_opc_device",
-            url: getExportUrl,
-          },
-          importConfig: {
-            url: getImportUrl,
-            success: handleSuccess
-          },
-  })
-
-  const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
-
-   /**
-    * 鏂板浜嬩欢
-    */
-  function handleAdd() {
-     openModal(true, {
-       isUpdate: false,
-       showFooter: true,
-     });
-  }
-   /**
-    * 缂栬緫浜嬩欢
-    */
-  function handleEdit(record: Recordable) {
-     openModal(true, {
-       record,
-       isUpdate: true,
-       showFooter: true,
-     });
-   }
-   /**
-    * 璇︽儏
-   */
-  function handleDetail(record: Recordable) {
-     openModal(true, {
-       record,
-       isUpdate: true,
-       showFooter: false,
-     });
-   }
-   /**
-    * 鍒犻櫎浜嬩欢
-    */
-  async function handleDelete(record) {
-    console.log(record);
-     await deleteOne({id: record.id}, handleSuccess);
-   }
-   /**
-    * 鎵归噺鍒犻櫎浜嬩欢
-    */
-  async function batchHandleDelete() {
-     await batchDelete({ids: selectedRowKeys.value}, handleSuccess);
-   }
-   /**
-    * 鎴愬姛鍥炶皟
-    */
-  function handleSuccess() {
-      (selectedRowKeys.value = []) && reload();
-   }
-   /**
-      * 鎿嶄綔鏍�
-      */
-  function getTableAction(record){
-       return [
-         {
-           label: '缂栬緫',
-           onClick: handleEdit.bind(null, record),
-         }
-       ]
-   }
-     /**
-        * 涓嬫媺鎿嶄綔鏍�
-        */
-  function getDropDownAction(record){
-       return [
-         {
-           label: '璇︽儏',
-           onClick: handleDetail.bind(null, record),
-         }, {
-           label: '鍒犻櫎',
-           popConfirm: {
-             title: '鏄惁纭鍒犻櫎',
-             confirm: handleDelete.bind(null, record),
-           }
-         }
-       ]
-   }
-
-
-</script>
-
-<style scoped>
-
-</style>
\ No newline at end of file
diff --git a/src/views/dry/DryOrderList.vue b/src/views/dry/DryOrderList.vue
deleted file mode 100644
index bfd9690..0000000
--- a/src/views/dry/DryOrderList.vue
+++ /dev/null
@@ -1,186 +0,0 @@
-<template>
-	<div>
-		<!--寮曠敤琛ㄦ牸-->
-		<BasicTable @register="registerTable" :rowSelection="rowSelection">
-			<!--鎻掓Ы:table鏍囬-->
-			<template #tableTitle>
-				<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 鏂板</a-button>
-				<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-				<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-				<a-dropdown v-if="selectedRowKeys.length > 0">
-					<template #overlay>
-						<a-menu>
-							<a-menu-item key="1" @click="batchHandleDelete">
-								<Icon icon="ant-design:delete-outlined" />
-								鍒犻櫎
-							</a-menu-item>
-						</a-menu>
-					</template>
-					<a-button
-						>鎵归噺鎿嶄綔
-						<Icon icon="mdi:chevron-down" />
-					</a-button>
-				</a-dropdown>
-			</template>
-			<!--鎿嶄綔鏍�-->
-			<template #action="{ record }">
-				<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-			</template>
-			<!--瀛楁鍥炴樉鎻掓Ы-->
-			<template #htmlSlot="{ text }">
-				<div v-html="text"></div>
-			</template>
-			<!--鐪佸競鍖哄瓧娈靛洖鏄炬彃妲�-->
-			<template #pcaSlot="{ text }">
-				{{ getAreaTextByCode(text) }}
-			</template>
-			<template #fileSlot="{ text }">
-				<span v-if="!text" style="font-size: 12px; font-style: italic">鏃犳枃浠�</span>
-				<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">涓嬭浇</a-button>
-			</template>
-		</BasicTable>
-		<!-- 琛ㄥ崟鍖哄煙 -->
-		<DryOrderModal @register="registerModal" @success="handleSuccess" />
-	</div>
-</template>
-
-<script lang="ts" name="dry-dryOrder" setup>
-	import { ref } from 'vue'
-	import { batchDelete, deleteOne, getExportUrl, getImportUrl, list } from './api/DryOrder.api'
-	import DryOrderModal from './components/DryOrderModal.vue'
-	import { columns, searchFormSchema } from './dataDefine/DryOrder.data'
-	import { useModal } from '/@/components/Modal'
-	import { BasicTable, TableAction } from '/@/components/Table'
-	import { useListPage } from '/@/hooks/system/useListPage'
-	import { downloadFile } from '/@/utils/common/renderUtils'
-	import { router } from '/@/router'
-
-	const checkedKeys = ref<Array<string | number>>([])
-	//娉ㄥ唽model
-	const [registerModal, { openModal }] = useModal()
-	//娉ㄥ唽table鏁版嵁
-	const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-		tableProps: {
-			title: '骞茬嚗宸ュ崟',
-			api: list,
-			columns,
-			canResize: false,
-			formConfig: {
-				//labelWidth: 120,
-				schemas: searchFormSchema,
-				autoSubmitOnEnter: true,
-				showAdvancedButton: true,
-				fieldMapToNumber: [],
-				fieldMapToTime: [],
-			},
-			actionColumn: {
-				width: 120,
-				fixed: 'right',
-			},
-		},
-		exportConfig: {
-			name: '骞茬嚗宸ュ崟',
-			url: getExportUrl,
-		},
-		importConfig: {
-			url: getImportUrl,
-			success: handleSuccess,
-		},
-	})
-
-	const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext
-
-	/**
-	 * 鏂板浜嬩欢
-	 */
-	function handleAdd() {
-		openModal(true, {
-			isUpdate: false,
-			showFooter: true,
-		})
-	}
-	/**
-	 * 缂栬緫浜嬩欢
-	 */
-	function handleEdit(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: true,
-		})
-	}
-	/**
-	 * 璇︽儏
-	 */
-	function handleDetail(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: false,
-		})
-	}
-	/**
-	 * 鍒犻櫎浜嬩欢
-	 */
-	async function handleDelete(record) {
-		await deleteOne({ id: record.id }, handleSuccess)
-	}
-	/**
-	 * 鎵归噺鍒犻櫎浜嬩欢
-	 */
-	async function batchHandleDelete() {
-		await batchDelete({ ids: selectedRowKeys.value }, handleSuccess)
-	}
-	/**
-	 * 鎴愬姛鍥炶皟
-	 */
-	function handleSuccess() {
-		;(selectedRowKeys.value = []) && reload()
-	}
-	/**
-	 * 鎿嶄綔鏍�
-	 */
-	function getTableAction(record) {
-		return [
-			{
-				label: '鎿嶄綔璁板綍',
-				onClick: openReport.bind(null, record),
-			},
-		]
-	}
-	/**
-	 * 涓嬫媺鎿嶄綔鏍�
-	 */
-	function getDropDownAction(record) {
-		return [
-			{
-				label: '缂栬緫',
-				onClick: handleEdit.bind(null, record),
-			},
-			{
-				label: '璇︽儏',
-				onClick: handleDetail.bind(null, record),
-			},
-			{
-				label: '鍒犻櫎',
-				popConfirm: {
-					title: '鏄惁纭鍒犻櫎',
-					confirm: handleDelete.bind(null, record),
-				},
-			},
-		]
-	}
-
-	/**鎵撳紑鎶ヨ〃 */
-	function openReport(record: Recordable) {
-		console.log(`output->record`, record)
-		router.push({
-			path: '/dry/order/report',
-			query: {
-				batch: record.code,
-			},
-		})
-	}
-</script>
-
-<style scoped></style>
diff --git a/src/views/dry/DryOrderTrendList.vue b/src/views/dry/DryOrderTrendList.vue
deleted file mode 100644
index 9889d8c..0000000
--- a/src/views/dry/DryOrderTrendList.vue
+++ /dev/null
@@ -1,169 +0,0 @@
-<template>
-	<div>
-		<!--寮曠敤琛ㄦ牸-->
-		<BasicTable @register="registerTable" :rowSelection="rowSelection">
-			<!--鎻掓Ы:table鏍囬-->
-			<template #tableTitle>
-				<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 鏂板</a-button>
-				<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-				<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-				<a-dropdown v-if="selectedRowKeys.length > 0">
-					<template #overlay>
-						<a-menu>
-							<a-menu-item key="1" @click="batchHandleDelete">
-								<Icon icon="ant-design:delete-outlined" />
-								鍒犻櫎
-							</a-menu-item>
-						</a-menu>
-					</template>
-					<a-button
-						>鎵归噺鎿嶄綔
-						<Icon icon="mdi:chevron-down" />
-					</a-button>
-				</a-dropdown>
-			</template>
-			<!--鎿嶄綔鏍�-->
-			<template #action="{ record }">
-				<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-			</template>
-			<!--瀛楁鍥炴樉鎻掓Ы-->
-			<template #htmlSlot="{ text }">
-				<div v-html="text"></div>
-			</template>
-			<!--鐪佸競鍖哄瓧娈靛洖鏄炬彃妲�-->
-			<template #pcaSlot="{ text }">
-				{{ getAreaTextByCode(text) }}
-			</template>
-			<template #fileSlot="{ text }">
-				<span v-if="!text" style="font-size: 12px; font-style: italic">鏃犳枃浠�</span>
-				<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">涓嬭浇</a-button>
-			</template>
-		</BasicTable>
-		<!-- 琛ㄥ崟鍖哄煙 -->
-		<DryOrderTrendModal @register="registerModal" @success="handleSuccess" />
-	</div>
-</template>
-
-<script lang="ts" name="dry-dryOrderTrend" setup>
-	import { ref } from 'vue'
-	import { batchDelete, deleteOne, getExportUrl, getImportUrl, list } from './api/DryOrderTrend.api'
-	import DryOrderTrendModal from './components/DryOrderTrendModal.vue'
-	import { columns, searchFormSchema } from './dataDefine/DryOrderTrend.data'
-	import { useModal } from '/@/components/Modal'
-	import { BasicTable, TableAction } from '/@/components/Table'
-	import { useListPage } from '/@/hooks/system/useListPage'
-	import { downloadFile } from '/@/utils/common/renderUtils'
-	const checkedKeys = ref<Array<string | number>>([])
-	//娉ㄥ唽model
-	const [registerModal, { openModal }] = useModal()
-	//娉ㄥ唽table鏁版嵁
-	const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-		tableProps: {
-			title: '宸ュ崟杩囩▼瓒嬪娍',
-			api: list,
-			columns,
-			canResize: false,
-			formConfig: {
-				//labelWidth: 120,
-				schemas: searchFormSchema,
-				autoSubmitOnEnter: true,
-				showAdvancedButton: true,
-				fieldMapToNumber: [],
-				fieldMapToTime: [],
-			},
-			actionColumn: {
-				width: 120,
-				fixed: 'right',
-			},
-		},
-		exportConfig: {
-			name: '宸ュ崟杩囩▼瓒嬪娍',
-			url: getExportUrl,
-		},
-		importConfig: {
-			url: getImportUrl,
-			success: handleSuccess,
-		},
-	})
-
-	const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext
-
-	/**
-	 * 鏂板浜嬩欢
-	 */
-	function handleAdd() {
-		openModal(true, {
-			isUpdate: false,
-			showFooter: true,
-		})
-	}
-	/**
-	 * 缂栬緫浜嬩欢
-	 */
-	function handleEdit(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: true,
-		})
-	}
-	/**
-	 * 璇︽儏
-	 */
-	function handleDetail(record: Recordable) {
-		openModal(true, {
-			record,
-			isUpdate: true,
-			showFooter: false,
-		})
-	}
-	/**
-	 * 鍒犻櫎浜嬩欢
-	 */
-	async function handleDelete(record) {
-		await deleteOne({ id: record.id }, handleSuccess)
-	}
-	/**
-	 * 鎵归噺鍒犻櫎浜嬩欢
-	 */
-	async function batchHandleDelete() {
-		await batchDelete({ ids: selectedRowKeys.value }, handleSuccess)
-	}
-	/**
-	 * 鎴愬姛鍥炶皟
-	 */
-	function handleSuccess() {
-		;(selectedRowKeys.value = []) && reload()
-	}
-	/**
-	 * 鎿嶄綔鏍�
-	 */
-	function getTableAction(record) {
-		return [
-			{
-				label: '缂栬緫',
-				onClick: handleEdit.bind(null, record),
-			},
-		]
-	}
-	/**
-	 * 涓嬫媺鎿嶄綔鏍�
-	 */
-	function getDropDownAction(record) {
-		return [
-			{
-				label: '璇︽儏',
-				onClick: handleDetail.bind(null, record),
-			},
-			{
-				label: '鍒犻櫎',
-				popConfirm: {
-					title: '鏄惁纭鍒犻櫎',
-					confirm: handleDelete.bind(null, record),
-				},
-			},
-		]
-	}
-</script>
-
-<style scoped></style>
diff --git a/src/views/dry/DryResultList.vue b/src/views/dry/DryResultList.vue
deleted file mode 100644
index a0b6c34..0000000
--- a/src/views/dry/DryResultList.vue
+++ /dev/null
@@ -1,173 +0,0 @@
-<template>
-  <div>
-    <!--寮曠敤琛ㄦ牸-->
-   <BasicTable @register="registerTable" :rowSelection="rowSelection">
-     <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-          <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 鏂板</a-button>
-          <a-button  type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-          <j-upload-button  type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-          <a-dropdown v-if="selectedRowKeys.length > 0">
-              <template #overlay>
-                <a-menu>
-                  <a-menu-item key="1" @click="batchHandleDelete">
-                    <Icon icon="ant-design:delete-outlined"></Icon>
-                    鍒犻櫎
-                  </a-menu-item>
-                </a-menu>
-              </template>
-              <a-button>鎵归噺鎿嶄綔
-                <Icon icon="mdi:chevron-down"></Icon>
-              </a-button>
-        </a-dropdown>
-      </template>
-       <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
-      </template>
-      <!--瀛楁鍥炴樉鎻掓Ы-->
-      <template #htmlSlot="{text}">
-         <div v-html="text"></div>
-      </template>
-      <!--鐪佸競鍖哄瓧娈靛洖鏄炬彃妲�-->
-      <template #pcaSlot="{text}">
-         {{ getAreaTextByCode(text) }}
-      </template>
-      <template #fileSlot="{text}">
-         <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span>
-         <a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">涓嬭浇</a-button>
-      </template>
-    </BasicTable>
-    <!-- 琛ㄥ崟鍖哄煙 -->
-    <DryResultModal @register="registerModal" @success="handleSuccess"></DryResultModal>
-  </div>
-</template>
-
-<script lang="ts" name="dry-dryResult" setup>
-  import {ref, computed, unref} from 'vue';
-  import {BasicTable, useTable, TableAction} from '/@/components/Table';
-  import {useModal} from '/@/components/Modal';
-  import { useListPage } from '/@/hooks/system/useListPage'
-  import DryResultModal from './components/DryResultModal.vue'
-  import {columns, searchFormSchema} from './dataDefine/DryResult.data';
-  import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './api/DryResult.api';
-  import { downloadFile } from '/@/utils/common/renderUtils';
-  const checkedKeys = ref<Array<string | number>>([]);
-  //娉ㄥ唽model
-  const [registerModal, {openModal}] = useModal();
-  //娉ㄥ唽table鏁版嵁
-  const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
-      tableProps:{
-           title: '娴嬭瘯缁撴灉',
-           api: list,
-           columns,
-           canResize:false,
-           formConfig: {
-              //labelWidth: 120,
-              schemas: searchFormSchema,
-              autoSubmitOnEnter:true,
-              showAdvancedButton:true,
-              fieldMapToNumber: [
-              ],
-              fieldMapToTime: [
-              ],
-            },
-           actionColumn: {
-               width: 120,
-               fixed:'right'
-            },
-      },
-       exportConfig: {
-            name:"娴嬭瘯缁撴灉",
-            url: getExportUrl,
-          },
-          importConfig: {
-            url: getImportUrl,
-            success: handleSuccess
-          },
-  })
-
-  const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
-
-   /**
-    * 鏂板浜嬩欢
-    */
-  function handleAdd() {
-     openModal(true, {
-       isUpdate: false,
-       showFooter: true,
-     });
-  }
-   /**
-    * 缂栬緫浜嬩欢
-    */
-  function handleEdit(record: Recordable) {
-     openModal(true, {
-       record,
-       isUpdate: true,
-       showFooter: true,
-     });
-   }
-   /**
-    * 璇︽儏
-   */
-  function handleDetail(record: Recordable) {
-     openModal(true, {
-       record,
-       isUpdate: true,
-       showFooter: false,
-     });
-   }
-   /**
-    * 鍒犻櫎浜嬩欢
-    */
-  async function handleDelete(record) {
-     await deleteOne({id: record.id}, handleSuccess);
-   }
-   /**
-    * 鎵归噺鍒犻櫎浜嬩欢
-    */
-  async function batchHandleDelete() {
-     await batchDelete({ids: selectedRowKeys.value}, handleSuccess);
-   }
-   /**
-    * 鎴愬姛鍥炶皟
-    */
-  function handleSuccess() {
-      (selectedRowKeys.value = []) && reload();
-   }
-   /**
-      * 鎿嶄綔鏍�
-      */
-  function getTableAction(record){
-       return [
-         {
-           label: '缂栬緫',
-           onClick: handleEdit.bind(null, record),
-         }
-       ]
-   }
-     /**
-        * 涓嬫媺鎿嶄綔鏍�
-        */
-  function getDropDownAction(record){
-       return [
-         {
-           label: '璇︽儏',
-           onClick: handleDetail.bind(null, record),
-         }, {
-           label: '鍒犻櫎',
-           popConfirm: {
-             title: '鏄惁纭鍒犻櫎',
-             confirm: handleDelete.bind(null, record),
-           }
-         }
-       ]
-   }
-
-
-</script>
-
-<style scoped>
-
-</style>
\ No newline at end of file
diff --git a/src/views/dry/DryShopList.vue b/src/views/dry/DryShopList.vue
deleted file mode 100644
index fd57600..0000000
--- a/src/views/dry/DryShopList.vue
+++ /dev/null
@@ -1,169 +0,0 @@
-<template>
-  <div>
-    <!--寮曠敤琛ㄦ牸-->
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 鏂板</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined" />
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button>鎵归噺鎿嶄綔
-            <Icon icon="mdi:chevron-down" />
-          </a-button>
-        </a-dropdown>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-      <!--瀛楁鍥炴樉鎻掓Ы-->
-      <template #htmlSlot="{ text }">
-        <div v-html="text"></div>
-      </template>
-      <!--鐪佸競鍖哄瓧娈靛洖鏄炬彃妲�-->
-      <template #pcaSlot="{ text }">
-        {{ getAreaTextByCode(text) }}
-      </template>
-      <template #fileSlot="{ text }">
-        <span v-if="!text" style="font-size: 12px; font-style: italic">鏃犳枃浠�</span>
-        <a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small"
-          @click="downloadFile(text)">涓嬭浇</a-button>
-      </template>
-    </BasicTable>
-    <!-- 琛ㄥ崟鍖哄煙 -->
-    <DryShopModal @register="registerModal" @success="handleSuccess" />
-  </div>
-</template>
-
-<script lang="ts" name="dry-dryShop" setup>
-import { ref } from 'vue'
-import { batchDelete, deleteOne, getExportUrl, getImportUrl, list } from './api/DryShop.api'
-import DryShopModal from './components/DryShopModal.vue'
-import { columns, searchFormSchema } from './dataDefine/DryShop.data'
-import { useModal } from '/@/components/Modal'
-import { BasicTable, TableAction } from '/@/components/Table'
-import { useListPage } from '/@/hooks/system/useListPage'
-import { downloadFile } from '/@/utils/common/renderUtils'
-const checkedKeys = ref<Array<string | number>>([])
-//娉ㄥ唽model
-const [registerModal, { openModal }] = useModal()
-//娉ㄥ唽table鏁版嵁
-const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-  tableProps: {
-    title: '杞﹂棿',
-    api: list,
-    columns,
-    canResize: false,
-    formConfig: {
-      //labelWidth: 120,
-      schemas: searchFormSchema,
-      autoSubmitOnEnter: true,
-      showAdvancedButton: true,
-      fieldMapToNumber: [],
-      fieldMapToTime: [],
-    },
-    actionColumn: {
-      width: 120,
-      fixed: 'right',
-    },
-  },
-  exportConfig: {
-    name: '杞﹂棿',
-    url: getExportUrl,
-  },
-  importConfig: {
-    url: getImportUrl,
-    success: handleSuccess,
-  },
-})
-
-const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext
-
-/**
- * 鏂板浜嬩欢
- */
-function handleAdd() {
-  openModal(true, {
-    isUpdate: false,
-    showFooter: true,
-  })
-}
-/**
- * 缂栬緫浜嬩欢
- */
-function handleEdit(record: Recordable) {
-  openModal(true, {
-    record,
-    isUpdate: true,
-    showFooter: true,
-  })
-}
-/**
- * 璇︽儏
- */
-function handleDetail(record: Recordable) {
-  openModal(true, {
-    record,
-    isUpdate: true,
-    showFooter: false,
-  })
-}
-/**
- * 鍒犻櫎浜嬩欢
- */
-async function handleDelete(record) {
-  await deleteOne({ id: record.id }, handleSuccess)
-}
-/**
- * 鎵归噺鍒犻櫎浜嬩欢
- */
-async function batchHandleDelete() {
-  await batchDelete({ ids: selectedRowKeys.value }, handleSuccess)
-}
-/**
- * 鎴愬姛鍥炶皟
- */
-function handleSuccess() {
-  ; (selectedRowKeys.value = []) && reload()
-}
-/**
- * 鎿嶄綔鏍�
- */
-function getTableAction(record) {
-  return [
-    {
-      label: '缂栬緫',
-      onClick: handleEdit.bind(null, record),
-    },
-  ]
-}
-/**
- * 涓嬫媺鎿嶄綔鏍�
- */
-function getDropDownAction(record) {
-  return [
-    {
-      label: '璇︽儏',
-      onClick: handleDetail.bind(null, record),
-    },
-    {
-      label: '鍒犻櫎',
-      popConfirm: {
-        title: '鏄惁纭鍒犻櫎',
-        confirm: handleDelete.bind(null, record),
-      },
-    },
-  ]
-}
-</script>
-
-<style scoped></style>
diff --git a/src/views/dry/api/DryEqpType.api.ts b/src/views/dry/api/DryEqpType.api.ts
deleted file mode 100644
index 68c593e..0000000
--- a/src/views/dry/api/DryEqpType.api.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import {defHttp} from '/@/utils/http/axios';
-import { useMessage } from "/@/hooks/web/useMessage";
-
-const { createConfirm } = useMessage();
-
-enum Api {
-  list = '/dry/dryEqpType/list',
-  save='/dry/dryEqpType/add',
-  edit='/dry/dryEqpType/edit',
-  deleteOne = '/dry/dryEqpType/delete',
-  deleteBatch = '/dry/dryEqpType/deleteBatch',
-  importExcel = '/dry/dryEqpType/importExcel',
-  exportXls = '/dry/dryEqpType/exportXls',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) =>
-  defHttp.get({url: Api.list, params});
-
-/**
- * 鍒犻櫎鍗曚釜
- */
-export const deleteOne = (params,handleSuccess) => {
-  return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
-    handleSuccess();
-  });
-}
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDelete = (params, handleSuccess) => {
-  createConfirm({
-    iconType: 'warning',
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
-        handleSuccess();
-      });
-    }
-  });
-}
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({url: url, params});
-}
diff --git a/src/views/dry/api/DryEquipment.api.ts b/src/views/dry/api/DryEquipment.api.ts
deleted file mode 100644
index f335966..0000000
--- a/src/views/dry/api/DryEquipment.api.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import { useMessage } from '/@/hooks/web/useMessage'
-import { defHttp } from '/@/utils/http/axios'
-
-const { createConfirm } = useMessage()
-
-enum Api {
-	list = '/dry/dryEquipment/list',
-	queryById = '/dry/dryEquipment/queryById',
-	listAll = '/dry/dryEquipment/listAll',
-	save = '/dry/dryEquipment/add',
-	edit = '/dry/dryEquipment/edit',
-	deleteOne = '/dry/dryEquipment/delete',
-	deleteBatch = '/dry/dryEquipment/deleteBatch',
-	importExcel = '/dry/dryEquipment/importExcel',
-	exportXls = '/dry/dryEquipment/exportXls',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params })
-
-/**
- * 鏍规嵁ID鏌ヨ鏈哄彴
- * @param params
- * @returns
- */
-export const queryById = (params) => defHttp.get({ url: Api.queryById, params })
-
-/**
- * 鎵�鏈夋満鍙�
- * @param params
- */
-export const listAll = (params) => defHttp.get({ url: Api.listAll, params })
-
-/**
- * 鍒犻櫎鍗曚釜
- */
-export const deleteOne = (params, handleSuccess) => {
-	return defHttp.delete({ url: Api.deleteOne, params }, { joinParamsToUrl: true }).then(() => {
-		handleSuccess()
-	})
-}
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDelete = (params, handleSuccess) => {
-	createConfirm({
-		iconType: 'warning',
-		title: '纭鍒犻櫎',
-		content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-		okText: '纭',
-		cancelText: '鍙栨秷',
-		onOk: () => {
-			return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-				handleSuccess()
-			})
-		},
-	})
-}
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-	const url = isUpdate ? Api.edit : Api.save
-	return defHttp.post({ url: url, params })
-}
diff --git a/src/views/dry/api/DryHerb.api.ts b/src/views/dry/api/DryHerb.api.ts
deleted file mode 100644
index 4e1f3c4..0000000
--- a/src/views/dry/api/DryHerb.api.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import { useMessage } from '/@/hooks/web/useMessage';
-import { defHttp } from '/@/utils/http/axios';
-
-const { createConfirm } = useMessage();
-
-enum Api {
-  list = '/dry/dryHerb/list',
-  save = '/dry/dryHerb/add',
-  edit = '/dry/dryHerb/edit',
-  deleteOne = '/dry/dryHerb/delete',
-  deleteBatch = '/dry/dryHerb/deleteBatch',
-  importExcel = '/dry/dryHerb/importExcel',
-  exportXls = '/dry/dryHerb/exportXls',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-
-/**
- * 鍒犻櫎鍗曚釜
- */
-export const deleteOne = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteOne, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDelete = (params, handleSuccess) => {
-  createConfirm({
-    iconType: 'warning',
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  const url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
diff --git a/src/views/dry/api/DryHerbFormula.api.ts b/src/views/dry/api/DryHerbFormula.api.ts
deleted file mode 100644
index 1c5ba18..0000000
--- a/src/views/dry/api/DryHerbFormula.api.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import {defHttp} from '/@/utils/http/axios';
-import { useMessage } from "/@/hooks/web/useMessage";
-
-const { createConfirm } = useMessage();
-
-enum Api {
-  list = '/dry/dryHerbFormula/list',
-  save='/dry/dryHerbFormula/add',
-  edit='/dry/dryHerbFormula/edit',
-  deleteOne = '/dry/dryHerbFormula/delete',
-  deleteBatch = '/dry/dryHerbFormula/deleteBatch',
-  importExcel = '/dry/dryHerbFormula/importExcel',
-  exportXls = '/dry/dryHerbFormula/exportXls',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) =>
-  defHttp.get({url: Api.list, params});
-
-/**
- * 鍒犻櫎鍗曚釜
- */
-export const deleteOne = (params,handleSuccess) => {
-  return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
-    handleSuccess();
-  });
-}
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDelete = (params, handleSuccess) => {
-  createConfirm({
-    iconType: 'warning',
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
-        handleSuccess();
-      });
-    }
-  });
-}
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({url: url, params});
-}
diff --git a/src/views/dry/api/DryHerbInfo.api.ts b/src/views/dry/api/DryHerbInfo.api.ts
deleted file mode 100644
index e593f94..0000000
--- a/src/views/dry/api/DryHerbInfo.api.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import {defHttp} from '/@/utils/http/axios';
-import { useMessage } from "/@/hooks/web/useMessage";
-
-const { createConfirm } = useMessage();
-
-enum Api {
-  list = '/dry/dryHerbInfo/list',
-  save='/dry/dryHerbInfo/add',
-  edit='/dry/dryHerbInfo/edit',
-  deleteOne = '/dry/dryHerbInfo/delete',
-  deleteBatch = '/dry/dryHerbInfo/deleteBatch',
-  importExcel = '/dry/dryHerbInfo/importExcel',
-  exportXls = '/dry/dryHerbInfo/exportXls',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) =>
-  defHttp.get({url: Api.list, params});
-
-/**
- * 鍒犻櫎鍗曚釜
- */
-export const deleteOne = (params,handleSuccess) => {
-  return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
-    handleSuccess();
-  });
-}
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDelete = (params, handleSuccess) => {
-  createConfirm({
-    iconType: 'warning',
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
-        handleSuccess();
-      });
-    }
-  });
-}
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({url: url, params});
-}
diff --git a/src/views/dry/api/DryHerbType.api.ts b/src/views/dry/api/DryHerbType.api.ts
deleted file mode 100644
index 33e1244..0000000
--- a/src/views/dry/api/DryHerbType.api.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import { useMessage } from '/@/hooks/web/useMessage';
-import { defHttp } from '/@/utils/http/axios';
-
-const { createConfirm } = useMessage();
-
-enum Api {
-  list = '/dry/dryHerbType/rootList',
-  save = '/dry/dryHerbType/add',
-  edit = '/dry/dryHerbType/edit',
-  deleteDryHerbType = '/dry/dryHerbType/delete',
-  importExcel = '/dry/dryHerbType/importExcel',
-  exportXls = '/dry/dryHerbType/exportXls',
-  loadTreeData = '/dry/dryHerbType/loadTreeRoot',
-  getChildList = '/dry/dryHerbType/childList',
-  getChildListBatch = '/dry/dryHerbType/getChildListBatch',
-}
-
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- * @param params
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-/**
- * 鍒犻櫎
- */
-export const deleteDryHerbType = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteDryHerbType, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDeleteDryHerbType = (params, handleSuccess) => {
-  createConfirm({
-    iconType: 'warning',
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteDryHerbType, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdateDict = (params, isUpdate) => {
-  const url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-/**
- * 鏌ヨ鍏ㄩ儴鏍戝舰鑺傜偣鏁版嵁
- * @param params
- */
-export const loadTreeData = (params) => defHttp.get({ url: Api.loadTreeData, params });
-/**
- * 鏌ヨ瀛愯妭鐐规暟鎹�
- * @param params
- */
-export const getChildList = (params) => defHttp.get({ url: Api.getChildList, params });
-/**
- * 鎵归噺鏌ヨ瀛愯妭鐐规暟鎹�
- * @param params
- */
-export const getChildListBatch = (params) => defHttp.get({ url: Api.getChildListBatch, params }, { isTransformResponse: false });
diff --git a/src/views/dry/api/DryOpcDevice.api.ts b/src/views/dry/api/DryOpcDevice.api.ts
deleted file mode 100644
index 21ed673..0000000
--- a/src/views/dry/api/DryOpcDevice.api.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import {defHttp} from '/@/utils/http/axios';
-import { useMessage } from "/@/hooks/web/useMessage";
-
-const { createConfirm } = useMessage();
-
-enum Api {
-  list = '/dry/dryOpcDevice/list',
-  save='/dry/dryOpcDevice/add',
-  edit='/dry/dryOpcDevice/edit',
-  deleteOne = '/dry/dryOpcDevice/delete',
-  deleteBatch = '/dry/dryOpcDevice/deleteBatch',
-  importExcel = '/dry/dryOpcDevice/importExcel',
-  exportXls = '/dry/dryOpcDevice/exportXls',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) =>
-  defHttp.get({url: Api.list, params});
-
-/**
- * 鍒犻櫎鍗曚釜
- */
-export const deleteOne = (params,handleSuccess) => {
-  return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
-    handleSuccess();
-  });
-}
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDelete = (params, handleSuccess) => {
-  createConfirm({
-    iconType: 'warning',
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
-        handleSuccess();
-      });
-    }
-  });
-}
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({url: url, params});
-}
diff --git a/src/views/dry/api/DryOrder.api.ts b/src/views/dry/api/DryOrder.api.ts
deleted file mode 100644
index ddc95dd..0000000
--- a/src/views/dry/api/DryOrder.api.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-import { useMessage } from '/@/hooks/web/useMessage'
-import { defHttp } from '/@/utils/http/axios'
-
-const { createConfirm } = useMessage()
-
-enum Api {
-	list = '/dry/dryOrder/list',
-	queryByEqp = 'dry/dry/queryByEqp',
-	save = '/dry/dryOrder/add',
-	edit = '/dry/dryOrder/edit',
-	deleteOne = '/dry/dryOrder/delete',
-	deleteBatch = '/dry/dryOrder/deleteBatch',
-	importExcel = '/dry/dryOrder/importExcel',
-	exportXls = '/dry/dryOrder/exportXls',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params })
-
-/**
- * 鏌ヨ鏈哄彴褰撳墠宸ュ崟
- * @param params
- */
-export const queryByEqp = (params) => defHttp.get({ url: Api.queryByEqp, params })
-
-/**
- * 鍒犻櫎鍗曚釜
- */
-export const deleteOne = (params, handleSuccess) => {
-	return defHttp.delete({ url: Api.deleteOne, params }, { joinParamsToUrl: true }).then(() => {
-		handleSuccess()
-	})
-}
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDelete = (params, handleSuccess) => {
-	createConfirm({
-		iconType: 'warning',
-		title: '纭鍒犻櫎',
-		content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-		okText: '纭',
-		cancelText: '鍙栨秷',
-		onOk: () => {
-			return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-				handleSuccess()
-			})
-		},
-	})
-}
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-	const url = isUpdate ? Api.edit : Api.save
-	return defHttp.post({ url: url, params })
-}
diff --git a/src/views/dry/api/DryOrderTrend.api.ts b/src/views/dry/api/DryOrderTrend.api.ts
deleted file mode 100644
index b42d787..0000000
--- a/src/views/dry/api/DryOrderTrend.api.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import { useMessage } from "/@/hooks/web/useMessage";
-import { defHttp } from '/@/utils/http/axios';
-
-const { createConfirm } = useMessage();
-
-enum Api {
-  list = '/dry/dryOrderTrend/list',
-  save='/dry/dryOrderTrend/add',
-  edit='/dry/dryOrderTrend/edit',
-  deleteOne = '/dry/dryOrderTrend/delete',
-  deleteBatch = '/dry/dryOrderTrend/deleteBatch',
-  importExcel = '/dry/dryOrderTrend/importExcel',
-  exportXls = '/dry/dryOrderTrend/exportXls',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) =>
-  defHttp.get({url: Api.list, params});
-
-/**
- * 鍒犻櫎鍗曚釜
- */
-export const deleteOne = (params,handleSuccess) => {
-  return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
-    handleSuccess();
-  });
-}
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDelete = (params, handleSuccess) => {
-  createConfirm({
-    iconType: 'warning',
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
-        handleSuccess();
-      });
-    }
-  });
-}
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({url: url, params});
-}
diff --git a/src/views/dry/api/DryResult.api.ts b/src/views/dry/api/DryResult.api.ts
deleted file mode 100644
index b053fc1..0000000
--- a/src/views/dry/api/DryResult.api.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import {defHttp} from '/@/utils/http/axios';
-import { useMessage } from "/@/hooks/web/useMessage";
-
-const { createConfirm } = useMessage();
-
-enum Api {
-  list = '/dry/dryResult/list',
-  save='/dry/dryResult/add',
-  edit='/dry/dryResult/edit',
-  deleteOne = '/dry/dryResult/delete',
-  deleteBatch = '/dry/dryResult/deleteBatch',
-  importExcel = '/dry/dryResult/importExcel',
-  exportXls = '/dry/dryResult/exportXls',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) =>
-  defHttp.get({url: Api.list, params});
-
-/**
- * 鍒犻櫎鍗曚釜
- */
-export const deleteOne = (params,handleSuccess) => {
-  return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
-    handleSuccess();
-  });
-}
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDelete = (params, handleSuccess) => {
-  createConfirm({
-    iconType: 'warning',
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
-        handleSuccess();
-      });
-    }
-  });
-}
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({url: url, params});
-}
diff --git a/src/views/dry/api/DryShop.api.ts b/src/views/dry/api/DryShop.api.ts
deleted file mode 100644
index cc842da..0000000
--- a/src/views/dry/api/DryShop.api.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import {defHttp} from '/@/utils/http/axios';
-import { useMessage } from "/@/hooks/web/useMessage";
-
-const { createConfirm } = useMessage();
-
-enum Api {
-  list = '/dry/dryShop/list',
-  save='/dry/dryShop/add',
-  edit='/dry/dryShop/edit',
-  deleteOne = '/dry/dryShop/delete',
-  deleteBatch = '/dry/dryShop/deleteBatch',
-  importExcel = '/dry/dryShop/importExcel',
-  exportXls = '/dry/dryShop/exportXls',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) =>
-  defHttp.get({url: Api.list, params});
-
-/**
- * 鍒犻櫎鍗曚釜
- */
-export const deleteOne = (params,handleSuccess) => {
-  return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
-    handleSuccess();
-  });
-}
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDelete = (params, handleSuccess) => {
-  createConfirm({
-    iconType: 'warning',
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
-        handleSuccess();
-      });
-    }
-  });
-}
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({url: url, params});
-}
diff --git a/src/views/dry/bigScreen/BigEqp copy 2.vue b/src/views/dry/bigScreen/BigEqp copy 2.vue
deleted file mode 100644
index aa27b60..0000000
--- a/src/views/dry/bigScreen/BigEqp copy 2.vue
+++ /dev/null
@@ -1,2205 +0,0 @@
-<template>
-	<dv-full-screen-container>
-		<div class="eqpBox">
-			<div class="eqpRow">
-				<div class="eqpImage" :style="{ 'background-position': position + 'px' }">
-					<div class="leftEqp">
-						<div style="width: 350px">
-							<div class="herbInfo">
-								<dv-border-box7 class="curEqp">
-									<div style="display: flex">
-										<div style="padding-top: 20px; padding-left: 10px" @click="back">
-											<Icon style="color: powderblue" icon="ion:caret-back-sharp" :size="35" />
-										</div>
-										<div class="eqpName" style="text-align: right" @click="changeEqp">
-											<div class="mainInfo" style="font-size: 26px">{{ eqp?.name }}</div>
-											<div class="subhead">{{ eqp?.type }}</div>
-											<dv-decoration-1 style="width: 240px; height: 90px; margin-left: 20px" />
-											<!-- 璁惧锛歿{ eqp.name }}</div>
-								<div class="eqpName">鍨嬪彿锛歿{ eqp.type }}</div> -->
-										</div>
-									</div>
-								</dv-border-box7>
-								<dv-border-box7 class="curHerb" :style="{ 'background-image': 'url(' + getHerbImageUrl(realData?.herbImage) + ')' }">
-									<div class="eqpName" style="margin-left: 156px; height: 190px">
-										<div class="mainInfo" style="font-size: 26px">{{ realData?.herbName }}</div>
-										<div class="subhead">骞茬嚗閰嶆柟</div>
-									</div>
-									<div class="formula">
-										<div class="formulaItem">
-											<Icon style="color: powderblue" icon="la:box" :size="38" />
-											<div>
-												<div class="mainInfo2">{{ realData?.feed }} 绛�</div>
-												<div class="subhead2">鎶曟枡閲�</div>
-											</div>
-										</div>
-										<div class="formulaItem">
-											<Icon style="color: red" icon="bx:wind" :size="35" />
-											<div>
-												<div class="mainInfo2">{{ realData?.windTemp }} 掳C</div>
-												<div class="subhead2">鐑</div>
-											</div>
-										</div>
-										<div class="formulaItem">
-											<Icon style="color: green" icon="tabler:target-arrow" :size="35" />
-											<div>
-												<div class="mainInfo2">{{ realData?.target }} %</div>
-												<div class="subhead2">鐩爣</div>
-											</div>
-										</div>
-									</div>
-									<!-- <div class="eqpName">{{ realData?.herbName }}</div>
-								<div class="eqpName">{{ realData?.feed }} 绛�</div> -->
-								</dv-border-box7>
-							</div>
-							<!-- <dv-border-box7 class="infoChart" style="margin-left: 0px;">
-							<div class="chartTittle">椋庢満棰戠巼</div>
-							<div class="outDiv" style="padding-top: 10px">
-								<div id="fanFreq" style="width: 240px; height: 240px"></div>
-							</div>
-						</dv-border-box7> -->
-							<dv-border-box7 class="infoChart" style="margin-left: 0px">
-								<div class="chartTittle">鍚按鐜�</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 50%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ realData?.target }}</span> %
-												</div>
-												<div class="subhead2">鐩爣鍚按鐜�</div>
-											</div>
-										</div>
-										<div class="center" style="height: 50%">
-											<div>
-												<div class="mainInfo3"
-													><span>{{ realData?.initial }}</span> %</div
-												>
-												<div class="subhead2">鏉ユ枡鍚按鐜�</div>
-											</div>
-										</div>
-									</div>
-									<div id="moisture" style="width: 170px; height: 170px"></div>
-								</div>
-								<div class="subhead2" style="margin-top: -37px; padding-left: 205px; font-weight: bold">瀹炴椂鍚按鐜�</div>
-							</dv-border-box7>
-						</div>
-						<dv-border-box7 class="leftTop">
-							<div class="leftTop0">
-								<div class="leftTop1">
-									<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-									<div>
-										<div class="mainInfo">{{ realData?.totalRemain | 0 }} Min</div>
-										<div class="subhead">鍓╀綑鏃堕棿</div>
-									</div>
-								</div>
-								<div class="leftTop1">
-									<Icon icon="bi:fan" :size="50" />
-									<div>
-										<div class="mainInfo">{{ realData.trendVo?.fanFrequency | 0 }} Hz</div>
-										<div class="subhead">椋庢満棰戠巼</div>
-									</div>
-								</div>
-								<div class="leftTop3" :style="{ 'background-image': 'url(' + getStatusImageUrl(statusGif) + ')' }"></div>
-								<div class="outDiv eqpStatus">
-									<div
-										style="
-											font-size: 28px;
-											margin-top: 190px;
-											color: white;
-											background-color: #1595ea;
-											height: 60px;
-											width: 180px;
-											line-height: 60px;
-											text-align: center;
-											border-radius: 5px;
-											font-weight: bold;
-										"
-									>
-										{{ statusTxt }}
-									</div>
-									<div
-										v-if="realData?.isError"
-										class="eqpInfoText blingbling"
-										style="
-											position: absolute;
-											font-size: 30px;
-											max-height: 200px;
-											max-width: 720px;
-											border-radius: 10px;
-											background-color: #ce0000;
-											color: white;
-											padding: 10px;
-										"
-									>
-										<div class="outDiv">
-											<div><Icon icon="bx:error" :size="30" /> </div>
-											<div
-												><span>{{ realData?.errorMsg }}</span></div
-											>
-										</div>
-									</div>
-								</div>
-							</div>
-						</dv-border-box7>
-						<dv-border-box7 class="infoChart" style="margin-left: 0px; margin-right: 10px">
-							<div class="chartTittle">椋庣娓╁害</div>
-							<div class="outDiv">
-								<div id="bellowsTemp" style="width: 230px; height: 230px">
-									<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-								</div>
-							</div>
-						</dv-border-box7>
-						<dv-border-box7 class="leftMid">
-							<div class="chartTittle">瀹炴椂杩涘害</div>
-							<div id="efficiencyLine" style="width: 848px; height: 180px; margin-top: -10px"></div>
-							<div style="height: 10px; display: flex; width: 848px; padding: 0 60px; justify-content: space-between">
-								<div style="width: 100px; height: 20px">{{ realData.dryTime | 0 }} min</div>
-								<div style="width: 100px; height: 20px; text-align: right">{{ realData?.totalTime | 0 }} min</div>
-							</div>
-							<div id="progressBar" style="width: 848px; height: 80px"></div>
-						</dv-border-box7>
-
-						<!-- <div class="outDiv">
-						<div style="height: 100px; width: 400px">
-							<Progress
-								:stroke-color="{
-									from: '#108ee9',
-									to: '#87d068',
-								}"
-								:percent="realData?.percent"
-								status="active"
-								:show-info="false"
-							/>
-							<div style="padding-top: 10px; display: flex; justify-content: space-between; font-weight: bold">
-								<span>骞茬嚗 52 Min</span>
-								<span>棰勮 120 Min</span>
-							</div>
-						</div>
-					</div> -->
-					</div>
-					<div class="rightInfo">
-						<div class="rightTop">
-							<dv-border-box7 class="tempMoisChart">
-								<div :id="'moisChart'" style="width: 690px; height: 420px"></div>
-							</dv-border-box7>
-						</div>
-						<div class="rightTwo">
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle">
-									骞茬嚗鏁堢巼(kg/h)
-									<div class="rightLabel">
-										<div class="label good">&gt;{{ standard.xiaolv }} 浼� </div>
-										<div class="label bad">&lt;{{ standard.xlMin }} 宸�</div>
-									</div>
-								</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 50%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ (realData?.originWeight - realData?.yield) | 0 }}</span> kg
-												</div>
-												<div class="subhead2">姘村垎钂稿彂</div>
-											</div>
-										</div>
-										<div class="center" style="height: 50%">
-											<div>
-												<div class="mainInfo3">{{ realData?.dryTime | 0 }} min</div>
-												<div class="subhead2">骞茬嚗鐢ㄦ椂</div>
-											</div>
-										</div>
-									</div>
-									<div class="rightChart center">
-										<div class="center compareBar">
-											<div class="barTop">{{ standard.xiaolv }}</div>
-											<div class="barBack">
-												<div class="barDiv" :style="{ height: realData?.xlsHeight }"></div>
-											</div>
-											<div style="line-height: 20px">
-												棰濆畾
-												<br />
-												鏁堢巼
-											</div>
-										</div>
-										<div class="center compareBar">
-											<div class="barTop">{{ realData?.xiaolv | 0 }}</div>
-											<div class="barBack">
-												<div
-													class="barDiv"
-													:class="{ good: realData?.xlgood, bad: realData?.xlbad }"
-													:style="[realData?.xlrHeight && { height: realData?.xlrHeight }]"
-												>
-												</div>
-											</div>
-											<div style="line-height: 20px">
-												瀹炴椂
-												<br />
-												鏁堢巼
-											</div>
-										</div>
-									</div>
-								</div>
-							</dv-border-box7>
-
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle"
-									>钂告苯娑堣��(m鲁/kg)
-									<div class="rightLabel">
-										<div class="label bad">&gt;{{ standard.zhengqi }} 宸�</div>
-										<div class="label good">&lt;{{ standard.zqMin }} 浼�</div>
-									</div>
-								</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 100%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ realData?.steam }}</span> m鲁
-												</div>
-												<div class="subhead2">钂告苯鐢ㄩ噺</div>
-											</div>
-										</div>
-									</div>
-									<div class="rightChart center">
-										<div class="center compareBar">
-											<div class="barTop">{{ standard.zhengqi }}</div>
-											<div class="barBack">
-												<div class="barDiv" :style="{ height: realData?.zqsHeight }"></div>
-											</div>
-											<div style="line-height: 20px">
-												棰濆畾
-												<br />
-												娑堣��
-											</div>
-										</div>
-										<div class="center compareBar">
-											<div class="barTop">{{ realData?.zhengqi | 0 }}</div>
-											<div class="barBack">
-												<div
-													class="barDiv"
-													:class="{ good: realData?.zqgood, bad: realData?.zqbad }"
-													:style="[realData?.zqrHeight && { height: realData?.zqrHeight }]"
-												>
-												</div>
-											</div>
-											<div style="line-height: 20px">
-												瀹炴椂
-												<br />
-												娑堣��
-											</div>
-										</div>
-									</div>
-								</div>
-							</dv-border-box7>
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle">鏁堢巼瀵规瘮</div>
-								<div class="outDiv" style="padding-top: 10px">
-									<div id="compare" style="width: 300px; height: 250px"></div>
-								</div>
-							</dv-border-box7>
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle">
-									<div> 鐢佃兘娑堣��(kWh/kg)</div>
-									<div class="rightLabel">
-										<div class="label bad">&gt;{{ standard.dian }} 宸�</div>
-										<div class="label good">&lt;{{ standard.dMin }} 浼�</div>
-									</div>
-								</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 100%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ realData?.watt }}</span> kWh
-												</div>
-												<div class="subhead2">鐢佃兘鐢ㄩ噺</div>
-											</div>
-										</div>
-									</div>
-									<div class="rightChart center">
-										<div class="center compareBar">
-											<div class="barTop">{{ standard.dian }}</div>
-											<div class="barBack">
-												<div class="barDiv" :style="{ height: realData?.dnsHeight }"></div>
-											</div>
-											<div style="line-height: 20px">
-												棰濆畾
-												<br />
-												娑堣��
-											</div>
-										</div>
-										<div class="center compareBar">
-											<div class="barTop">{{ realData?.dian | 0 }}</div>
-											<div class="barBack">
-												<div
-													class="barDiv"
-													:class="{ good: realData?.dngood, bad: realData?.dnbad }"
-													:style="[realData?.dnrHeight && { height: realData?.dnrHeight }]"
-												></div>
-											</div>
-											<div style="line-height: 20px">
-												瀹炴椂
-												<br />
-												娑堣��
-											</div>
-										</div>
-									</div>
-								</div>
-							</dv-border-box7>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</dv-full-screen-container>
-</template>
-
-<script setup lang="ts">
-	import { useFullscreen } from '@vueuse/core'
-	import { BorderBox7 as DvBorderBox7 } from '@kjgl77/datav-vue3'
-	import { router } from '/@/router'
-	import { onMounted, ref, onUnmounted } from 'vue'
-	import { Progress } from 'ant-design-vue'
-	import * as echarts from 'echarts'
-	import 'echarts-liquidfill'
-	import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index'
-	import { defHttp } from '/@/utils/http/axios'
-	import { queryById, listAll } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { useUserStore } from '/@/store/modules/user'
-
-	const domRef = ref<Nullable<HTMLElement>>(null)
-	const { enter, toggle, exit, isFullscreen } = useFullscreen()
-
-	const { toggle: toggleDom } = useFullscreen(domRef)
-	const Timer = ref()
-	const Timer2 = ref()
-	const marks = ref<Record<number, any>>({
-		0: '0掳C',
-		1: '',
-		2: '',
-		3: '',
-		4: '',
-		5: '',
-		6: '',
-		7: '',
-		8: '',
-		9: '',
-		10: '',
-		11: '',
-		12: '',
-		13: '',
-		14: '',
-		15: '',
-		16: '',
-		17: '',
-		18: '',
-		19: '',
-		20: '',
-		21: '',
-		22: '',
-		23: '',
-		24: '',
-		25: '25掳C',
-		26: '',
-		27: '',
-		28: '',
-		29: '',
-		30: '',
-		31: '',
-		32: '',
-		33: '',
-		34: '',
-		35: '',
-		36: '',
-		37: '',
-		38: '',
-		39: '',
-		40: '',
-		41: '',
-		42: '',
-		43: '',
-		44: '',
-		45: '',
-		46: '',
-		47: '',
-		48: '',
-		49: '',
-		50: '50掳C',
-		51: '',
-		52: '',
-		53: '',
-		54: '',
-		55: '',
-		56: '',
-		57: '',
-		58: '',
-		59: '',
-		60: '',
-		61: '',
-		62: '',
-		63: '',
-		64: '',
-		65: '',
-		66: '',
-		67: '',
-		68: '',
-		69: '',
-		70: '',
-		71: '',
-		72: '',
-		73: '',
-		74: '',
-		75: '75掳C',
-		76: '',
-		77: '',
-		78: '',
-		79: '',
-		80: '',
-		81: '',
-		82: '',
-		83: '',
-		84: '',
-		85: '',
-		86: '',
-		87: '',
-		88: '',
-		89: '',
-		90: '',
-		91: '',
-		92: '',
-		93: '',
-		94: '',
-		95: '',
-		96: '',
-		97: '',
-		98: '',
-		99: '',
-		100: '100掳C',
-	})
-	const eqps = ref([] as dryEquipment[])
-	//console.log(`output->router.currentRoute.value.params.num `, router.currentRoute.value.query)
-	const eqp = ref({} as dryEquipment)
-	const eqpNum = ref(router.currentRoute.value.query.num || 1)
-	const userStore = useUserStore()
-	const realData = ref({})
-	const standard = ref({
-		xiaolv: 220,
-		xlMin: 200,
-		zhengqi: 50,
-		zqMin: 45,
-		dian: 8,
-		dMin: 7.5,
-	})
-
-	const position = ref(1)
-	//realData.value.tempValue = [0, 100]
-	realData.value.mois = [0.5, 0.35, 0.2]
-	statusGif = 'tmrefeng2'
-	realData.value.herbImage = 'yaocai1.png'
-	var moisChart: echarts.ECharts
-	var waterChart: echarts.ECharts
-
-	var bellowsTempChart: echarts.ECharts
-	// var fanFreqChart: echarts.ECharts
-	var progressBarChart: echarts.ECharts
-	var efficiencyLineChart: echarts.ECharts
-
-	var compareChart: echarts.ECharts
-
-	function initCharts() {
-		let domId = 'moisChart'
-		let chartDom: HTMLElement = document.getElementById(domId) as HTMLElement
-		let waterDom: HTMLElement = document.getElementById('moisture') as HTMLElement
-		let bellowsTempDom: HTMLElement = document.getElementById('bellowsTemp') as HTMLElement
-		// let fanFreqDom: HTMLElement = document.getElementById('fanFreq') as HTMLElement
-		let progressBarDom: HTMLElement = document.getElementById('progressBar') as HTMLElement
-		let efficiencyLineDom: HTMLElement = document.getElementById('efficiencyLine') as HTMLElement
-		// let weightDom: HTMLElement = document.getElementById('weight') as HTMLElement
-		let compaerDom: HTMLElement = document.getElementById('compare') as HTMLElement
-		moisChart = echarts.init(chartDom)
-		waterChart = echarts.init(waterDom)
-		bellowsTempChart = echarts.init(bellowsTempDom)
-		// fanFreqChart = echarts.init(fanFreqDom)
-		progressBarChart = echarts.init(progressBarDom)
-		efficiencyLineChart = echarts.init(efficiencyLineDom)
-		compareChart = echarts.init(compaerDom)
-
-		const option = {
-			color: ['green', 'red'],
-			title: {
-				text: '鍚按鐜�/娓╁害瓒嬪娍',
-				textStyle: {
-					color: '#fff',
-					fontSize: 15,
-				},
-			},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				left: 50,
-				right: 70,
-				top: 50,
-				bottom: 60,
-			},
-			legend: {
-				right: 60,
-				textStyle: {
-					color: '#fff',
-				},
-			},
-			// toolbox: {
-			// 	show: true,
-			// 	feature: {
-			// 		dataZoom: {
-			// 			yAxisIndex: 'none',
-			// 		},
-			// 		dataView: { readOnly: false },
-			// 		magicType: { type: ['line', 'bar'] },
-			// 		restore: {},
-			// 		saveAsImage: {},
-			// 	},
-			// },
-			xAxis: {
-				type: 'value',
-				axisLabel: {
-					color: '#fff',
-				},
-				//boundaryGap: false,
-				// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
-				min: 0,
-				max: function (value) {
-					if (value.max < 100) {
-						return 100
-					} else {
-						return value.max
-					}
-				},
-				splitLine: {
-					lineStyle: {
-						type: 'dashed',
-						color: ['#2b2b2b'],
-					},
-				},
-			},
-			yAxis: {
-				type: 'value',
-				boundaryGap: ['10%', '10%'],
-				axisLabel: {
-					color: '#fff',
-				},
-				splitLine: {
-					lineStyle: {
-						type: 'dashed',
-						color: ['#2b2b2b'],
-					},
-				},
-				// min: 0,
-				// max: function (value) {
-				// 	if (value.max < 100) {
-				// 		return 100
-				// 	} else {
-				// 		return value.max
-				// 	}
-				// },
-			},
-			// yAxis: {
-			// 	type: 'value',
-			// 	axisLabel: {
-			// 		formatter: '{value} 掳C',
-			// 	},
-			// },
-			series: [
-				{
-					name: '鍚按鐜�',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 1],
-						[2, 2],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					markLine: {
-						data: [{ type: 'average', name: 'Avg' }],
-					},
-					areaStyle: {
-						opacity: 0.2,
-						color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-							{
-								offset: 0,
-								color: 'rgb(128, 255, 165)',
-							},
-							{
-								offset: 1,
-								color: 'rgb(1, 191, 236)',
-							},
-						]),
-					},
-				},
-				{
-					name: '娓╁害',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 10],
-						[2, 20],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					areaStyle: {
-						opacity: 0.2,
-						color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-							{
-								offset: 0,
-								color: 'rgb(255, 0, 135)',
-							},
-							{
-								offset: 1,
-								color: 'rgb(135, 0, 157)',
-							},
-						]),
-					},
-					// markLine: {
-					// 	data: [
-					// 		{ type: 'average', name: 'Avg' },
-					// 		[
-					// 			{
-					// 				symbol: 'none',
-					// 				x: '90%',
-					// 				yAxis: 'max',
-					// 			},
-					// 			{
-					// 				symbol: 'circle',
-					// 				label: {
-					// 					position: 'start',
-					// 					formatter: 'Max',
-					// 				},
-					// 				type: 'max',
-					// 				name: '鏈�楂樼偣',
-					// 			},
-					// 		],
-					// 	],
-					// },
-				},
-			],
-		}
-		const waterOption = {
-			series: [
-				{
-					type: 'liquidFill',
-					radius: '100%',
-					//waveAnimation: false,
-					amplitude: 3,
-					animationDuration: 5,
-					//animationDurationUpdate: 0,
-					data: [0.56, 0.44, 0.32],
-					shape:
-						'path://M828.817,706.209C828.817,881.725,686.98,1024,512,1024c-174.98,0-316.817-142.275-316.817-317.791C195.183,530.74,512,0,512,0s316.817,530.74,316.817,706.209z',
-					outline: {
-						show: false,
-					},
-					label: {
-						// formatter: function () {
-						// 	//console.log(`output->params`,params,mois.value)
-
-						// 	return (
-						// 		'' +
-						// 		// +'鍒濆'+(mois.value[0]*100).toFixed(2) + '%\n\n\n'
-						// 		(mois.value[1] * 100).toFixed(2) +
-						// 		'%'
-						// 		// + '\n\n\n鐩爣'+(mois.value[2]*100).toFixed(2) + '%'
-						// 	)
-						// },
-						fontSize: 20,
-						//position: ['50%',(100-mois.value[1]*100).toFixed(2) + '%'],
-					},
-				},
-			],
-		}
-
-		const bellowsOption = {
-			series: [
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					splitNumber: 8,
-					itemStyle: {
-						color: '#FFAB91',
-					},
-					progress: {
-						show: true,
-						width: 10,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						lineStyle: {
-							width: 10,
-						},
-					},
-					axisTick: {
-						distance: -15,
-						splitNumber: 5,
-						length: 3,
-						lineStyle: {
-							width: 1,
-							color: '#999',
-						},
-					},
-					splitLine: {
-						distance: -18,
-						length: 6,
-						lineStyle: {
-							width: 2,
-							color: '#999',
-						},
-					},
-					axisLabel: {
-						distance: -13,
-						color: '#fff',
-						fontSize: 12,
-					},
-					anchor: {
-						show: false,
-					},
-					title: {
-						show: false,
-					},
-					detail: {
-						valueAnimation: true,
-						width: '60%',
-						lineHeight: 40,
-						borderRadius: 8,
-						offsetCenter: [0, '0%'],
-						fontSize: 20,
-						fontWeight: 'bolder',
-						formatter: '{value}掳C',
-						color: 'inherit',
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					itemStyle: {
-						color: '#FD7347',
-					},
-					progress: {
-						show: true,
-						width: 3,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						show: false,
-					},
-					axisTick: {
-						show: false,
-					},
-					splitLine: {
-						show: false,
-					},
-					axisLabel: {
-						show: false,
-					},
-					detail: {
-						show: false,
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-			],
-		}
-
-		// const fanFreqOption = {
-		// 	series: [
-		// 		{
-		// 			type: 'gauge',
-		// 			progress: {
-		// 				show: true,
-		// 				width: 9,
-		// 			},
-		// 			axisLine: {
-		// 				lineStyle: {
-		// 					width: 9,
-		// 				},
-		// 			},
-		// 			axisTick: {
-		// 				show: false,
-		// 			},
-		// 			splitLine: {
-		// 				distance: 3,
-		// 				length: 4,
-		// 				lineStyle: {
-		// 					width: 1,
-		// 					color: '#999',
-		// 				},
-		// 			},
-		// 			axisLabel: {
-		// 				distance: 15,
-		// 				color: '#999',
-		// 				fontSize: 10,
-		// 			},
-		// 			anchor: {
-		// 				show: true,
-		// 				showAbove: true,
-		// 				size: 10,
-		// 				itemStyle: {
-		// 					borderWidth: 3,
-		// 				},
-		// 			},
-		// 			title: {
-		// 				show: false,
-		// 			},
-		// 			detail: {
-		// 				valueAnimation: true,
-		// 				fontSize: 20,
-		// 				offsetCenter: [0, '70%'],
-		// 				formatter: '{value}Hz',
-		// 			},
-		// 			data: [
-		// 				{
-		// 					value: 56,
-		// 				},
-		// 			],
-		// 		},
-		// 	],
-		// }
-		// const weightOption = {
-		// 	// 		title: {
-		// 	//   text: 'Referer of a Website',
-		// 	//   subtext: 'Fake Data',
-		// 	//   left: 'center'
-		// 	// },
-		// 	color: ['#1595EA', '#2C4D90', '#FF7F7F'],
-		// 	tooltip: {
-		// 		trigger: 'item',
-		// 	},
-		// 	radius: [0, '85%'],
-		// 	// grid: {
-		// 	// 	top: 20,
-		// 	// 	left: 20,
-		// 	// 	right: 20,
-		// 	// 	bottom: 20,
-		// 	// },
-		// 	// legend: {
-		// 	// 	orient: 'vertical',
-		// 	// 	left: 'left',
-		// 	// },
-		// 	series: [
-		// 		{
-		// 			name: '閲嶉噺鏁版嵁',
-		// 			type: 'pie',
-		// 			radius: '50%',
-		// 			data: [
-		// 				{ value: 1048, name: '鍓╀綑閲嶉噺' },
-		// 				{ value: 735, name: '鐑樺幓閲嶉噺' },
-		// 			],
-		// 			label: {
-		// 				show: false,
-		// 			},
-		// 			labelLine: {
-		// 				show: false,
-		// 			},
-		// 			emphasis: {
-		// 				itemStyle: {
-		// 					shadowBlur: 10,
-		// 					shadowOffsetX: 0,
-		// 					shadowColor: 'rgba(0, 0, 0, 0.5)',
-		// 				},
-		// 			},
-		// 		},
-		// 	],
-		// }
-
-		const progressBarOption = {
-			// tooltip: {
-			// 	trigger: 'axis',
-			// 	axisPointer: {
-			// 		// Use axis to trigger tooltip
-			// 		type: 'shadow', // 'shadow' as default; can also be 'line' or 'shadow'
-			// 	},
-			// },
-			// color: [
-			// 	'#0653F6',
-			// 	// '#1B61E7',
-			// 	'#3673D5',
-			// 	// '#4A80C8',
-			// 	'#608FB8',
-			// 	// '#719BAD',
-			// 	'#82A6A1',
-			// 	// '#8DAD9A',
-			// 	'#9CB790',
-			// 	// '#A7BE88',
-			// 	'#B3C681',
-			// 	'#CAD671',
-			// 	'#DBE165',
-			// ],
-			animation: false, // 鍏抽棴鍔ㄧ敾
-			color: ['#397FD7', '#2D8CDE', '#239CE5', '#1DA4E8', '#14B2EF', '#0BC4FA', '#02D2FF', '#19EEFF', '#33FAFF', '#5EFFF8'],
-			grid: {
-				top: '12%',
-				left: '20',
-				right: '55',
-				bottom: '3%',
-				containLabel: true,
-			},
-			xAxis: {
-				min: 0,
-				max: 150,
-				show: false,
-				type: 'value',
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-			},
-			yAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'category',
-				data: ['鏃堕棿'],
-			},
-			series: [
-				// {
-				// 	name: '绗竴闃舵',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	barWidth: 26,
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [30],
-				// },
-				// {
-				// 	name: '绗簩闃舵',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [30],
-				// },
-				// {
-				// 	name: 'Affiliate Ad',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [20],
-				// },
-				// {
-				// 	name: 'Video Ad',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [15],
-				// },
-				// {
-				// 	name: 'Search Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [10],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [5],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [5],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [
-				// 		{
-				// 			value: 35,
-				// 			itemStyle: {
-				// 				color: '#c0c0c0',
-				// 			},
-				// 		},
-				// 	],
-				// },
-			],
-		}
-
-		const efficiencyLineOption = {
-			title: {},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				top: '30%',
-				left: '17',
-				right: '57',
-				bottom: '0%',
-				containLabel: true,
-			},
-			legend: {
-				right: 60,
-				textStyle: {
-					color: '#fff',
-				},
-			},
-			xAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'value',
-				min: 0,
-				max: 150,
-				// data: [15, 15, 10, 7.5, 5, 2.5, 2.5, 1],
-			},
-			yAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'value',
-				axisLabel: {
-					formatter: '{value} 掳C',
-				},
-				// max: standard.value.xiaolv + 3,
-			},
-			series: [
-				{
-					name: '骞茬嚗鏁堢巼',
-					type: 'line',
-					lineStyle: {
-						width: 1,
-					},
-					// [[15,10], [15,11], [10,6], [7.5,12], [5,12], [2.5,5], [2.5,9], [1,7]]
-					data: [
-						[0, 1],
-						[15, 10],
-						[45, 11],
-						[70, 6],
-					],
-					markPoint: {
-						data: [
-							{ type: 'max', name: 'Max' },
-							{ type: 'min', name: 'Min' },
-						],
-					},
-					markLine: {
-						symbol: 'none',
-						data: [
-							{
-								name: '棰濆畾',
-								yAxis: standard.value.xiaolv,
-							},
-						],
-						label: {
-							formatter: '{b}\n{c}',
-							color: '#fff',
-						},
-					},
-					// markLine: {
-					// 	data: [{ type: 'average', name: 'Avg' }],
-					// },
-				},
-			],
-		}
-
-		const compareOption = {
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				top: '6%',
-				left: '3%',
-				right: '10%',
-				bottom: '3%',
-				containLabel: true,
-			},
-			xAxis: {
-				show: false,
-				type: 'value',
-			},
-			yAxis: {
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'category',
-				data: ['1#', '2#', '3#', '4#', '5#', '6#'],
-			},
-			series: [
-				{
-					name: '2011',
-					type: 'bar',
-					barWidth: 10,
-					data: [190, 89, 34, 70, 44, 30],
-					label: {
-						show: true,
-						position: 'right',
-						valueAnimation: true,
-
-						color: '#fff',
-					},
-				},
-			],
-		}
-
-		option && moisChart.setOption(option)
-		waterOption && waterChart.setOption(waterOption)
-		bellowsOption && bellowsTempChart.setOption(bellowsOption)
-		// fanFreqOption && fanFreqChart.setOption(fanFreqOption)
-
-		progressBarOption && progressBarChart.setOption(progressBarOption)
-		efficiencyLineOption && efficiencyLineChart.setOption(efficiencyLineOption)
-		compareOption && compareChart.setOption(compareOption)
-	}
-
-	// 鍔ㄦ�佽鍙栧浘鐗�
-	function getHerbImageUrl(name: string) {
-		return new URL(`/src/assets/images/dry/yaocai/${name}`, import.meta.url).href
-	}
-
-	// 鍔ㄦ�佽鍙栧浘鐗�
-	function getStatusImageUrl(name: string) {
-		return new URL(`/src/assets/images/dry/${name}.gif`, import.meta.url).href
-	}
-	function queryEqp() {
-		queryById({ id: router.currentRoute.value.params.id }).then((res) => {
-			// console.log(`output->res`, res)
-			eqp.value = res
-			queryRealTime()
-			setTimeout(initCharts, 500)
-		})
-	}
-
-	function listAllEqp() {
-		listAll({ enable: 'Y' })
-			.then((result) => {
-				//console.log(`output->result`, result)
-				eqps.value = result
-				// result.forEach((item) => {
-				// 	eqpCodes.push(item.code)
-				// })
-				queryRealTime()
-				setTimeout(initCharts, 500)
-			})
-			.catch((err) => {
-				//console.log(`output->err`, err)
-			})
-	}
-
-	var num = eqpNum.value
-
-	function changeEqp() {
-		//console.log("changeEqp::",eqps.value.length);
-		num++
-		if (eqps.value.length > 0) {
-			var i = num % eqps.value.length
-			//eqp.value = eqps.value[i]
-			//  console.log("777",i);
-			eqpNum.value = i
-			//console.log("888",eqp.value);
-			queryRealTime()
-			//setTimeout(initCharts, 500)
-		}
-	}
-
-	// function queryEqpsReal() {
-
-	//     if (eqps.value.length > 0) {
-	//         var i = num%eqps.value.length
-	//         eqp.value = eqps[i]
-	//         console.log("777",i);
-	//         console.log("888",eqp.value);
-	//         queryRealTime()
-	// 		//setTimeout(initCharts, 500)
-	//     }
-	//     num ++;
-	// }
-
-	var shangliaoFlag = false
-	var statusGif = 'tmrefeng2'
-	var statusTxt = '姝e湪骞茬嚗'
-
-	function chaiwangban() {
-		statusGif = 'chaiwangban-1'
-		setTimeout(shangliao, 7000)
-	}
-
-	function shangliao() {
-		statusGif = 'shangliao-N'
-		setTimeout(() => {
-			statusGif = 'zhuangwangban'
-			setTimeout(() => {
-				statusGif = 'guanmen1'
-				setTimeout(() => {
-					shangliaoFlag = false
-				}, 4000)
-			}, 7000)
-		}, 15000)
-	}
-
-	function queryRealTime() {
-		if (eqp.value) {
-			eqp.value = eqps.value[eqpNum.value]
-			// console.log("888",eqp.value);
-			let tenantId = 1003
-			let eqpCode = eqp.value.code
-			let queryRealTimeUrl = '/dry/real/getRealTimeData'
-			defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-				if (res && res.trendVo) {
-					//console.log(`output->re11s`, res)
-					//	res.tempValue = [res.windTemp, 100]
-					//res.percent = ((res.dryTime / res.et) * 100).toFixed(2)
-					/**姘存淮鍥惧惈姘撮噺 */
-					res.mois = [
-						(res.trendVo.moisture / 100).toFixed(2),
-						(res.trendVo.moisture / 100 / 1.5).toFixed(2),
-						(res.trendVo.moisture / 100 / 3).toFixed(2),
-					]
-					if (waterChart) {
-						waterChart.setOption({
-							series: [
-								{
-									data: res.mois,
-									label: {
-										formatter: function () {
-											return res.trendVo.moisture + '%'
-										},
-										fontSize: 20,
-									},
-								},
-							],
-						})
-					}
-
-					/**娓╁害鐜舰鍥� */
-					if (bellowsTempChart) {
-						bellowsTempChart.setOption({
-							series: [{ data: [{ value: res.windTemp }] }, { data: [{ value: res.windTemp }] }],
-						})
-					}
-					/**椋庢満棰戠巼鐜舰鍥� */
-					// if (fanFreqChart) {
-					// 	fanFreqChart.setOption({
-					// 		series: [
-					// 			{
-					// 				data: [
-					// 					{
-					// 						value: res.trendVo.fanFrequency,
-					// 					},
-					// 				],
-					// 			},
-					// 		],
-					// 	})
-					// }
-					/**骞茬嚗杩涘害銆佽蛋鍔夸笌闃舵鏁堢巼鍜岄樁娈垫秷鑰� */
-					if (res && res.detailList) {
-						var progressSeries = []
-						var ganZaoXiaoLv = []
-						var zhengQiXiaoHao = []
-						var dianNengXiaoHao = []
-						var totalTime = 0
-						var beforeWeight = 0
-						res.moisList = []
-						beforeWeight = res.originWeight
-						//console.log(`output->res`, res)
-						res.detailList.forEach((item) => {
-							//console.log(`output->bef`, beforeWeight)
-							//console.log(`output->cur`, item.weight)
-							res.moisList.push([item.totalTime, item.moisture])
-							//console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime)
-							var curDryTime = item.totalTime - totalTime
-
-							if (curDryTime > 0) {
-								progressSeries.push({
-									name: item.moisture,
-									type: 'bar',
-									stack: 'total',
-									label: {
-										show: true,
-									},
-									emphasis: {
-										focus: 'series',
-									},
-									data: [item.totalTime - totalTime],
-								})
-								ganZaoXiaoLv.push([curDryTime / 2 + totalTime, (((beforeWeight - item.weight) / curDryTime) * 60).toFixed(1)])
-
-								totalTime = item.totalTime
-							}
-							beforeWeight = item.weight
-						})
-
-						if (res.remain) {
-							if (res.dryTime - totalTime > 0) {
-								progressSeries.push({
-									name: '褰撳墠',
-									type: 'bar',
-									stack: 'total',
-									label: {
-										show: true,
-									},
-									emphasis: {
-										focus: 'series',
-									},
-									data: [
-										{
-											value: res.dryTime - totalTime,
-										},
-									],
-								})
-							}
-
-							// ganZaoXiaoLv.push([totalTime + res.remain,standard.value.xiaolv])
-							// console.log(`output->res.remain`, res.remain)
-							// console.log(`output->res.dryTime`, res.dryTime)
-							// console.log(`output->totalTime`, totalTime)
-							// 骞茬嚗鍓╀綑鏃堕棿=宸ュ崟棰勮鍓╀綑-锛堝綋鍓嶅共鐕ユ椂闂�-鏈�鍚庝竴娆¤褰曞共鐕ユ椂闂达級
-							res.totalRemain = res.remain - (res.dryTime - totalTime) > 0 ? res.remain - (res.dryTime - totalTime) : 0
-							progressSeries.push({
-								name: '鍓╀綑',
-								type: 'bar',
-								stack: 'total',
-								label: {
-									show: true,
-								},
-								emphasis: {
-									focus: 'series',
-								},
-								data: [
-									{
-										value: res.remain - (res.dryTime - totalTime),
-										itemStyle: {
-											color: '#c0c0c0',
-										},
-									},
-								],
-							})
-						}
-
-						/**骞茬嚗杩涘害 */
-						if (progressBarChart) {
-							//console.log(`output->progressSeries`, progressSeries)
-							progressBarChart.setOption(
-								{
-									xAxis: {
-										max: totalTime + res.remain,
-									},
-									series: progressSeries,
-								},
-								{ replaceMerge: ['series'] }
-							)
-						}
-
-						res.totalTime = totalTime + res.remain
-						/**骞茬嚗鏁堢巼銆佹秷鑰� */
-						if (efficiencyLineChart) {
-							//console.log(`output->ganZaoXiaoLv`, ganZaoXiaoLv)
-							efficiencyLineChart.setOption({
-								xAxis: {
-									max: totalTime + res.remain,
-								},
-								series: [
-									{
-										data: ganZaoXiaoLv,
-										markLine: {
-											symbol: 'none',
-											data: [
-												{
-													name: '棰濆畾',
-													yAxis: standard.value.xiaolv,
-												},
-											],
-											label: {
-												formatter: '{b}\n{c}',
-												color: '#fff',
-											},
-										},
-									},
-									{ data: zhengQiXiaoHao },
-									{ data: dianNengXiaoHao },
-								],
-							})
-						}
-
-						res.moisList.push([res.dryTime, res.trendVo.moisture])
-					}
-
-					/**娓╁害瓒嬪娍 */
-					if (res && res.bellowsTemp) {
-						Array.from(Object.entries(res.bellowsTemp))
-						var arr = Object.keys(res.bellowsTemp)
-						var temArr = []
-						arr.forEach((item) => {
-							temArr.push([item * 1, res.bellowsTemp[item]])
-						})
-
-						//console.log(`output->arr` + JSON.stringify(temArr))
-						res.tempArr = temArr
-					}
-
-					/**骞茬嚗杩囩▼瓒嬪娍 */
-					if (moisChart) {
-						//console.log(`output->鏇存柊chart`)
-						moisChart.setOption({
-							series: [
-								{
-									data: res.moisList,
-									markLine: {
-										symbol: 'none',
-										data: [
-											{
-												name: '鐩爣',
-												yAxis: res.target,
-											},
-										],
-										label: {
-											formatter: '{b}\n{c}%',
-											color: '#fff',
-										},
-									},
-								},
-								{
-									data: res.tempArr,
-								},
-							],
-						})
-					}
-
-					/**鏁堢巼瀵规瘮鍥� */
-					if (res.originWeight - res.yield <= 0) {
-						res.xiaolv = standard.value.xiaolv + 6
-					} else {
-						res.xiaolv = (((res.originWeight - res.yield) / res.dryTime) * 60).toFixed(2)
-					}
-
-					if (res.xiaolv > standard.value.xiaolv) {
-						res.xlgood = true
-						res.xlsHeight = (standard.value.xiaolv / res.xiaolv) * 100 + '%'
-						res.xlrHeight = '100%'
-					} else if (res.xiaolv < standard.value.xlMin) {
-						res.xlbad = true
-						res.xlsHeight = '100%'
-						res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%'
-					} else {
-						res.xlsHeight = '100%'
-						res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%'
-					}
-
-					/** 钂告苯娑堣�� */
-					if (res.originWeight - res.yield <= 0) {
-						res.zhengqi = standard.value.zhengqi - 3
-					} else {
-						res.zhengqi = (res.steam / (res.originWeight - res.yield)).toFixed(1)
-					}
-					//console.log('zhengqi:', res.zhengqi);
-					if (res.zhengqi > standard.value.zhengqi) {
-						res.zqbad = true
-						res.zqsHeight = (standard.value.zhengqi / res.zhengqi) * 100 + '%'
-						res.zqrHeight = '100%'
-					} else if (res.zhengqi < standard.value.zqMin) {
-						res.zqgood = true
-						res.zqsHeight = '100%'
-						res.zqrHeight = (res.zhengqi / standard.value.zhengqi) * 100 + '%'
-					} else {
-						res.zqsHeight = '100%'
-						res.zqrHeight = (res.zhengqi / standard.value.zhengqi) * 100 + '%'
-					}
-
-					/** 鐢佃兘娑堣�� */
-					if (res.originWeight - res.yield <= 0) {
-						res.dian = standard.value.dian - 1.5
-					} else {
-						res.dian = (res.watt / (res.originWeight - res.yield)).toFixed(1)
-					}
-
-					if (res.dian > standard.value.dian) {
-						res.dnbad = true
-						res.dnsHeight = (standard.value.dian / res.dian) * 100 + '%'
-						res.dnrHeight = '100%'
-					} else if (res.dian < standard.value.dMin) {
-						res.dngood = true
-						res.dnsHeight = '100%'
-						res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%'
-					} else {
-						res.dnsHeight = '100%'
-						res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%'
-					}
-
-					//console.log('state:::fan::', res.state_fan, 'roller::', res.state_roller, 'windbox::', res.state_windbox)
-					//console.log('===========================')
-					//console.log("state:::state_windbox::", res.state_windbox);
-
-					/**鐘舵��/gif鍔ㄥ浘 */
-					if (!shangliaoFlag) {
-						if (res.orderStatus == 0) {
-							statusGif = 'zanting'
-							statusTxt = '鍑嗗'
-						} else if (res.orderStatus == 1) {
-							shangliaoFlag = true
-							statusGif = 'kaimen1'
-							statusTxt = '涓婃枡'
-							setTimeout(chaiwangban, 4000)
-						} else if (res.orderStatus == 2) {
-							if (res.state_fan == 1) {
-								statusGif = 'tmrefeng2'
-								statusTxt = '姝e湪骞茬嚗'
-							}
-
-							if (res.state_roller == 4) {
-								statusGif = 'fanliao-N'
-								statusTxt = '姝e湪缈绘枡'
-							}
-
-							if (res.state_roller == 5) {
-								statusGif = 'chuliao-N'
-								statusTxt = '姝e湪鍑烘枡'
-							}
-
-							if (res.state_windbox == 2 || res.state_windbox == 3) {
-								statusGif = 'fengxiangsheng-1'
-								statusTxt = '姝e湪骞茬嚗'
-							}
-						} else if (res.orderStatus == 3) {
-							statusGif = 'zanting'
-							statusTxt = '鏆傚仠'
-						} else if (res.orderStatus == 4) {
-							statusGif = 'zanting'
-							statusTxt = '骞茬嚗瀹屾垚'
-						}
-					}
-
-					if (compareChart) {
-						compareChart.setOption({
-							yAxis: {
-								data: res.compEqpNum,
-							},
-							series: {
-								data: res.compEqpEffic,
-							},
-						})
-					}
-
-					res.herbImage = 'yaocai1.png'
-
-					if (res.herbName == '鐧借姳铔囪垖鑽�') {
-						res.herbImage = 'baihuasheshecao.png'
-					} else if (res.herbName == '绯ョɑ鏍�') {
-						res.herbImage = 'nuodaogen.png'
-					} else if (res.herbName == '娣緤钘�') {
-						res.herbImage = 'yinyanghuo.png'
-					} else if (res.herbName == '椹娇鑻�') {
-						res.herbImage = 'machixian.png'
-					} else if (res.herbName == '澧ㄦ棻鑾�') {
-						res.herbImage = 'mohanlian.png'
-					} else if (res.herbName == '妗戠櫧鐨�') {
-						res.herbImage = 'sangbaipi.png'
-					}
-					res.isError = false
-
-					res.errorMsg = '鏈変竴涓晠闅滐紝璇锋鏌ャ��'
-				} else {
-					res = {
-						mois: [],
-						gif: 'tmrefeng2',
-						herbImage: 'yaocai1.png',
-					}
-				}
-
-				//console.log(`output->res`, res)
-				realData.value = res
-			})
-		}
-	}
-
-	var move = true
-	function moveImage() {
-		if (move) {
-			position.value -= 0.3
-		} else {
-			position.value += 0.3
-		}
-		if (position.value < -240) {
-			move = false
-		}
-		if (position.value > -1) {
-			move = true
-		}
-	}
-
-	function back() {
-		router.back()
-	}
-
-	listAllEqp()
-	//queryEqp()
-	// DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛�
-	onMounted(() => {
-		Timer.value = setInterval(queryRealTime, 3000)
-		Timer2.value = setInterval(moveImage, 50)
-	})
-
-	onUnmounted(() => {
-		clearInterval(Timer.value)
-		clearInterval(Timer2.value)
-		Timer.value = null
-		Timer2.value = null
-	})
-</script>
-
-<style scoped>
-	.eqpBox {
-		height: 100%;
-	}
-	.eqpRow {
-	}
-	.eqpImage {
-		height: 1080px;
-		width: 1920px;
-		background-image: url(/src/assets/images/dry/bg.png);
-		background-repeat: no-repeat;
-		color: white;
-		/*background-position: 160px 280px; */
-		/* background-color: red; */
-		background-size: 120%;
-		padding: 10px;
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-	}
-
-	.leftEqp {
-		height: 1080px;
-		width: 1200px;
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-
-		/* background-color: white;
-		background-image: url(/src/assets/images/dry/shebei1.png);
-		background-repeat: no-repeat;
-		background-size: 125%;
-		border-radius: 10px;
-		background-position: -119px 293px; */
-	}
-
-	.leftTop {
-		height: 750px;
-		width: 850px;
-		display: flex;
-		justify-content: center;
-		align-content: flex-start;
-		background-image: url(/src/assets/images/dry/ganzaoji-x.png);
-		background-repeat: no-repeat;
-		background-size: 79%;
-		border-radius: 10px;
-		flex-wrap: wrap;
-		background-position: 85px 279px;
-	}
-	.leftMid {
-		width: 850px;
-		height: 300px;
-		/* border: 1px solid; */
-		margin-top: 10px;
-		border-radius: 10px;
-		/* background: white; */
-	}
-	.mainInfo {
-		line-height: 33px;
-		padding-left: 10px;
-		font-size: 30px;
-		color: white;
-	}
-	.subhead {
-		color: #a19f9c;
-		font-size: 16px;
-		padding-left: 10px;
-	}
-
-	.mainInfo2 {
-		line-height: 20px;
-		padding-left: 0px;
-		font-size: 16px;
-	}
-	.subhead2 {
-		color: #a19f9c;
-		font-size: 10px;
-		padding-left: 0px;
-	}
-	.zhengqi {
-		height: 180px;
-		width: 200px;
-		background-image: url(/src/assets/images/dry/liuliangji.png);
-		background-repeat: no-repeat;
-		background-size: 160px;
-		/* border-radius: 10px; */
-		background-position: 17px -6px;
-	}
-
-	.liuliangji {
-	}
-	.leftData {
-		height: 250px;
-		width: 120px;
-	}
-	.rightChart {
-		height: 270px;
-		width: 170px;
-		margin-top: -30px;
-	}
-	.leftTop0 {
-		height: 600px;
-		width: 848px;
-		display: flex;
-		justify-content: center;
-		align-content: flex-start;
-		flex-wrap: wrap;
-	}
-	.leftTop1 {
-		width: 250px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-	}
-	.leftTop2 {
-		width: 250px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-	}
-	.leftTop3 {
-		width: 340px;
-		height: 200px;
-		/* background-image: url(/src/assets/images/dry/fanliao.gif); */
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 300px;
-		border-radius: 50px;
-	}
-
-	.eqpStatus {
-		width: 848px;
-		height: 300px;
-
-		padding: 100px;
-	}
-	.rightInfo {
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-		height: 1060px;
-		width: 700px;
-	}
-
-	.rightTop {
-		display: flex;
-		height: 440px;
-		padding-left: 10px;
-	}
-	.rightTwo {
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.infoChart {
-		width: 340px;
-		height: 300px;
-		/* background: white; */
-		margin-left: 10px;
-		margin-top: 10px;
-		border-radius: 10px;
-	}
-	.chartTittle {
-		width: 340px;
-		height: 30px;
-		font-size: 16px;
-		display: flex;
-		justify-content: space-between;
-		padding: 15px 15px;
-	}
-	.chartInfo {
-		width: 60px;
-		height: 180px;
-	}
-
-	.compareBar {
-		width: 55px;
-		height: 140px;
-	}
-	.margintop-30 {
-		margin-top: -30px;
-	}
-
-	.barTop {
-		width: 55px;
-		height: 30px;
-	}
-	.barBack {
-		width: 30px;
-		height: 100px;
-		/* border: 1px solid black; */
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-end;
-	}
-	.barDiv {
-		width: 100%;
-
-		background-color: #1595ea;
-	}
-	.bad {
-		background-color: #973535;
-	}
-	.rightLabel {
-		width: 110px;
-		display: flex;
-		justify-content: space-between;
-	}
-	.label {
-		color: white;
-		text-align: center;
-		width: 50px;
-		border-radius: 4px;
-		height: 20px;
-		font-size: 10px;
-		line-height: 21px;
-	}
-	.good {
-		background-color: #0d6e24;
-	}
-
-	.mainInfo3 {
-		font-size: 24px;
-	}
-	.herbInfo {
-		width: 340px;
-		height: 440px;
-		color: #727272;
-	}
-
-	.curEqp {
-		width: 340px;
-		height: 170px;
-
-		/* background: white;
-		border-radius: 10px; */
-	}
-	.curHerb {
-		margin-top: 10px;
-		width: 340px;
-		height: 260px;
-		/* background: white;
-		border-radius: 10px; */
-
-		background-repeat: no-repeat;
-		background-size: 200px;
-		background-position: 0px 10px;
-	}
-	.tempMoisChart {
-		width: 690px;
-		height: 440px;
-		/* background: white; */
-
-		padding: 20px;
-		border-radius: 10px;
-	}
-	.topLeft {
-		margin: 20px 40px 60px 20px;
-		padding: 15px;
-		/* background: white; */
-		border-radius: 10px;
-		height: 325px;
-		width: 440px;
-		/* background-image: url(/src/assets/images/dry/yaocai.jpg); */
-		background-repeat: no-repeat;
-		background-size: 164px 132px;
-		background-position: 239px 65px;
-		display: flex;
-	}
-	.topMid {
-		margin: 20px 20px 60px 40px;
-		/* background: white; */
-		border-radius: 10px;
-		background-image: url(/src/assets/images/dry/fanliao.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 400px;
-		width: 400px;
-
-		padding: 20px;
-	}
-	.topRight {
-		margin: 20px 20px 60px 20px;
-		/* background: white; */
-		border-radius: 10px;
-		width: 700px;
-		padding: 20px;
-	}
-	.midLeft {
-		height: 450px;
-		width: 600px;
-		display: flex;
-		padding: 0 20px 20px 20px;
-	}
-	.midMid {
-		width: 500px;
-		padding-top: 50px;
-	}
-
-	.midRight {
-		background-image: url(/src/assets/images/dry/fengjixz.gif);
-		background-repeat: no-repeat;
-		background-position: 150px 260px;
-		background-size: 120px 120px;
-		width: 600px;
-	}
-
-	.shangJianTou {
-		margin-left: 140px;
-		width: 70px;
-		height: 100px;
-		background-image: url(/src/assets/images/dry/shangjiantoutou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 70px 100px;
-	}
-
-	.zoujiantou {
-		margin-left: 225px;
-		margin-top: 30px;
-		width: 100px;
-		height: 70px;
-		background-image: url(/src/assets/images/dry/zuojiantou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 100px 70px;
-	}
-	.fault {
-		padding: 10px;
-		height: 60px;
-		font-size: 26px;
-		width: 100%;
-		text-align: right;
-		color: red;
-	}
-	.eqpName {
-		padding: 20px;
-
-		height: 160px;
-	}
-
-	.formula {
-		display: flex;
-		width: 340px;
-		height: 40px;
-		padding: 0 20px;
-		justify-content: space-around;
-		justify-items: center;
-	}
-
-	.formulaItem {
-		display: flex;
-		justify-content: center;
-		width: 85px;
-		height: 40px;
-	}
-
-	.eqpInfoText {
-		font-size: 18px;
-		font-weight: bold;
-	}
-
-	:deep() .ant-slider-mark-text {
-		padding-left: 15px;
-		font-size: 10px;
-	}
-	:deep() .ant-slider-mark-text::before {
-		content: '';
-		display: block;
-		width: 6px;
-		height: 1px;
-		background-color: #1890ff;
-
-		position: absolute;
-		top: 10px;
-		left: 0px;
-	}
-	:deep() .ant-slider-rail {
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-		background: linear-gradient(to top, #ce0000 0%, #ce0000 40%, #ce0000 75%, rgb(160, 160, 160) 100%);
-	}
-	:deep() .ant-slider-track {
-		background: rgb(216, 216, 216);
-
-		height: 20px;
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-	}
-	:deep() .ant-slider-track:hover {
-	}
-	:deep() .ant-slider-handle {
-		display: none;
-	}
-	:deep() .ant-slider-dot {
-		display: none;
-	}
-	:deep() .ant-slider-step {
-		width: 10px !important;
-	}
-	:deep() .ant-slider-step > :first-child {
-		display: block !important;
-		width: 30px !important;
-		height: 30px !important;
-		bottom: -26px !important;
-		left: -6px;
-		border: none;
-		background: #ce0000;
-	}
-	:deep() .progress {
-		padding: 25px 25px;
-
-		width: 360px;
-		display: flex;
-	}
-	:deep() .ant-progress-bg {
-		height: 25px !important;
-	}
-	.outDiv {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-	}
-	.blingbling {
-		-webkit-animation: scaleout 1.5s infinite ease-in-out;
-		animation: scaleout 1.5s infinite ease-in-out;
-	}
-	.center {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-		align-items: center;
-		flex-wrap: wrap;
-		text-align: center;
-	}
-
-	.centerText {
-		width: 100%;
-		text-align: center;
-	}
-
-	@-webkit-keyframes scaleout {
-		0% {
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-
-	@keyframes scaleout {
-		0% {
-			transform: scale(1);
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			transform: scale(1.1);
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-</style>
diff --git a/src/views/dry/bigScreen/BigEqp copy.vue b/src/views/dry/bigScreen/BigEqp copy.vue
deleted file mode 100644
index 988f06c..0000000
--- a/src/views/dry/bigScreen/BigEqp copy.vue
+++ /dev/null
@@ -1,1921 +0,0 @@
-<template>
-    <dv-full-screen-container>
-	<div ref="domRef"   class="eqpBox">
-		<div class="eqpRow">
-			<div class="eqpImage"  :style="{'background-position':position + 'px'}">
-				
-				<div class="leftEqp" @click="toggleDom" >
-					<div style="width: 350px;  ">
-					<div class="herbInfo">
-						
-							<dv-border-box7 class="curEqp">
-								<div class="eqpName" style="padding: 30px">
-									<div class="mainInfo" style="font-size: 26px">{{ eqp.name }}</div>
-									<div class="subhead">{{ eqp.type }}</div>
-									<dv-decoration-1 style="width:300px;height:90px; margin-left: 20px;" />
-                                    <!-- 璁惧锛歿{ eqp.name }}</div>
-								<div class="eqpName">鍨嬪彿锛歿{ eqp.type }}</div> -->
-								</div>
-							</dv-border-box7>
-							<dv-border-box7 class="curHerb">
-								<div class="eqpName" style="margin-left: 176px; height: 190px">
-									<div class="mainInfo" style="font-size: 26px">{{ realData?.herbName }}</div>
-									<div class="subhead">骞茬嚗閰嶆柟</div>
-								</div>
-								<div class="formula">
-									<div class="formulaItem">
-										<Icon style="color: powderblue" icon="icon-park-twotone:box" :size="35" />
-										<div>
-											<div class="mainInfo2">{{ realData?.feed }}绛�</div>
-											<div class="subhead2">鎶曟枡閲�</div>
-										</div>
-									</div>
-									<div class="formulaItem">
-										<Icon style="color: red" icon="bx:wind" :size="35" />
-										<div>
-											<div class="mainInfo2">{{ realData?.windTemp }}掳C</div>
-											<div class="subhead2">鐑</div>
-										</div>
-									</div>
-									<div class="formulaItem">
-										<Icon style="color: green" icon="tabler:target-arrow" :size="35" />
-										<div>
-											<div class="mainInfo2">{{ realData?.target }}%</div>
-											<div class="subhead2">鐩爣</div>
-										</div>
-									</div>
-								</div>
-								<!-- <div class="eqpName">{{ realData?.herbName }}</div>
-								<div class="eqpName">{{ realData?.feed }} 绛�</div> -->
-							</dv-border-box7>
-						</div>
-						<dv-border-box7 class="infoChart">
-							<div class="chartTittle">鍚按鐜�</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 50%">
-										<div class="centerText">
-											<div class="mainInfo3"
-												><span>{{ realData?.target }}</span
-												>%
-											</div>
-											<div class="subhead2">鐩爣鍚按鐜�</div>
-										</div>
-									</div>
-									<div class="center" style="height: 50%">
-										<div>
-											<div class="mainInfo3"
-												><span>{{ realData?.initial }}</span
-												>%</div
-											>
-											<div class="subhead2">鏉ユ枡鍚按鐜�</div>
-										</div>
-									</div>
-								</div>
-								<div id="moisture" style="width: 170px; height: 170px"></div>
-							</div>
-							<div class="subhead2" style="margin-top: -37px; padding-left: 172px; font-weight: bold;">瀹炴椂鍚按鐜�</div>
-						</dv-border-box7>
-						<!-- <dv-border-box7 class="infoChart" style="margin-left: 0px;">
-							<div class="chartTittle">椋庢満棰戠巼</div>
-							<div class="outDiv" style="padding-top: 10px">
-								<div id="fanFreq" style="width: 240px; height: 240px"></div>
-							</div>
-						</dv-border-box7> -->
-				</div>
-					<dv-border-box7 class="leftTop">
-						<div class="leftTop0">
-						<div class="leftTop1">
-							<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-							<div>
-								<div class="mainInfo">{{ realData?.remain | 0 }}min</div>
-								<div class="subhead">鍓╀綑鏃堕棿</div>
-							</div>
-						</div>
-						<div class="leftTop1">
-							<!-- <Icon icon="mdi:chart-finance" :size="50" />
-							<div>
-								<div class="mainInfo">98 %</div>
-								<div class="subhead">骞茬嚗鏁堢巼</div>
-							</div> -->
-						</div>
-						<div class="leftTop3" :style="{ 'background-image': 'url(/src/assets/images/dry/' + realData?.gif + '.gif)' }"></div>
-						<div class="outDiv eqpStatus">
-							<div
-								style="
-									font-size: 28px;
-									margin-top: 190px;
-									color: white;
-									background-color: #1595ea;
-									height: 60px;
-									width: 180px;
-									line-height: 60px;
-									text-align: center;
-									border-radius: 5px;
-									font-weight: bold;
-								"
-							>
-								姝e湪骞茬嚗
-							</div>
-							<div
-								class="eqpInfoText blingbling"
-								style="
-									position: absolute;
-									font-size: 30px;
-									max-height: 200px;
-									max-width: 720px;
-									border-radius: 10px;
-									background-color: #ce0000;
-									color: white;
-									padding: 10px;
-								"
-							>
-								<div class="outDiv">
-									<div><Icon icon="bx:error" :size="30" /> </div>
-									<div><span> 鏈変竴涓晠闅滐紝璇锋鏌ユ満鍣ㄣ��</span></div>
-								</div>
-							</div>
-						</div>
-						</div>
-					</dv-border-box7>
-					<dv-border-box7 class="infoChart">
-							<div class="chartTittle">椋庣娓╁害</div>
-							<div class="outDiv">
-								<div id="bellowsTemp" style="width: 230px; height: 230px">
-									<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-								</div>
-							</div>
-						</dv-border-box7>
-					<dv-border-box7 class="leftMid">
-						<div id="efficiencyLine" style="width: 848px; height: 190px"></div>
-						<div style="height: 10px; display: flex; width: 848px; padding: 0 60px; justify-content: space-between">
-							<div style="width: 100px; height: 20px">0 min</div>
-							<div style="width: 100px; height: 20px; text-align: right">{{ realData?.totalTime | 0 }} min</div>
-						</div>
-						<div id="progressBar" style="width: 848px; height: 80px"></div>
-					</dv-border-box7>
-				
-					<!-- <div class="outDiv">
-						<div style="height: 100px; width: 400px">
-							<Progress
-								:stroke-color="{
-									from: '#108ee9',
-									to: '#87d068',
-								}"
-								:percent="realData?.percent"
-								status="active"
-								:show-info="false"
-							/>
-							<div style="padding-top: 10px; display: flex; justify-content: space-between; font-weight: bold">
-								<span>骞茬嚗 52 Min</span>
-								<span>棰勮 120 Min</span>
-							</div>
-						</div>
-					</div> -->
-				</div>
-				<div class="rightInfo">
-					<div class="rightTop">
-						
-						<dv-border-box7 class="tempMoisChart">
-							<div :id="'moisChart'" style="width: 690px; height: 420px"></div>
-						</dv-border-box7>
-					</div>
-					<div class="rightTwo">
-
-
-						<dv-border-box7 class="infoChart">
-							<div class="chartTittle">
-								骞茬嚗鏁堢巼(kg/h)
-								<div class="rightLabel">
-									<div class="label good">&gt;{{ standard.xiaolv }} 浼� </div>
-									<div class="label bad">&lt;{{ standard.xlMin }} 宸�</div>
-								</div>
-							</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 50%">
-										<div class="centerText">
-											<div class="mainInfo3"
-												><span>{{ (realData?.originWeight - realData?.yield) | 0 }}</span
-												>kg
-											</div>
-											<div class="subhead2">姘村垎钂稿彂</div>
-										</div>
-									</div>
-									<div class="center" style="height: 50%">
-										<div>
-											<div class="mainInfo3">{{ realData?.dryTime | 0 }}min</div>
-											<div class="subhead2">骞茬嚗鐢ㄦ椂</div>
-										</div>
-									</div>
-								</div>
-								<div class="rightChart center">
-									<div class="center compareBar">
-										<div class="barTop">{{ standard.xiaolv }}</div>
-										<div class="barBack">
-											<div class="barDiv" :style="{ height: realData?.xlsHeight }"></div>
-										</div>
-										<div style="line-height: 20px">
-											棰濆畾
-											<br />
-											鏁堢巼
-										</div>
-									</div>
-									<div class="center compareBar">
-										<div class="barTop">{{ realData?.xiaolv | 0 }}</div>
-										<div class="barBack">
-											<div
-												class="barDiv"
-												:class="{ good: realData?.xlgood, bad: realData?.xlbad }"
-												:style="[realData?.xlrHeight && { height: realData?.xlrHeight }]"
-											>
-											</div>
-										</div>
-										<div style="line-height: 20px">
-											瀹炴椂
-											<br />
-											鏁堢巼
-										</div>
-									</div>
-								</div>
-							</div>
-						</dv-border-box7>
-						
-						<dv-border-box7 class="infoChart">
-							<div class="chartTittle"
-								>钂告苯娑堣��(m鲁/kg)
-								<div class="rightLabel">
-									<div class="label bad">&gt;{{ standard.zhengqi }} 宸�</div>
-									<div class="label good">&lt;{{ standard.zqMin }} 浼�</div>
-								</div>
-							</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 100%">
-										<div class="centerText">
-											<div class="mainInfo3"><span>{{realData?.steam}}</span>m鲁 </div>
-											<div class="subhead2">钂告苯鐢ㄩ噺</div>
-										</div>
-									</div>
-								</div>
-								<div class="rightChart center">
-									<div class="center compareBar">
-										<div class="barTop">{{standard.zhengqi}}</div>
-										<div class="barBack">
-											<div class="barDiv" :style="{ height: realData?.zqsHeight }"></div>
-										</div>
-										<div style="line-height: 20px">
-											棰濆畾
-											<br />
-											娑堣��
-										</div>
-									</div>
-									<div class="center compareBar">
-										<div class="barTop">{{realData?.zhengqi | 0 }}</div>
-										<div class="barBack">
-											<div class="barDiv" :class="{ good: realData?.zqgood, bad: realData?.zqbad }"
-												:style="[realData?.zqrHeight && { height: realData?.zqrHeight }]"> </div>
-										</div>
-										<div style="line-height: 20px">
-											瀹炴椂
-											<br />
-											娑堣��
-										</div>
-									</div>
-								</div>
-							</div>
-						</dv-border-box7>
-						<dv-border-box7 class="infoChart">
-							<div class="chartTittle">
-								<div> 鐢佃兘娑堣��(kw/h/kg)</div>
-								<div class="rightLabel">
-									<div class="label bad">&gt;{{ standard.dian }} 宸�</div>
-									<div class="label good">&lt;{{ standard.dMin }} 浼�</div>
-								</div>
-							</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 100%">
-										<div class="centerText">
-											<div class="mainInfo3"><span>{{realData?.watt}}</span>kw/h </div>
-											<div class="subhead2">鐢佃兘鐢ㄩ噺</div>
-										</div>
-									</div>
-								</div>
-								<div class="rightChart center">
-									<div class="center compareBar">
-										<div class="barTop">{{standard.dian}}</div>
-										<div class="barBack">
-											<div class="barDiv" :style="{ height: realData?.dnsHeight }"></div>
-										</div>
-										<div style="line-height: 20px">
-											棰濆畾
-											<br />
-											娑堣��
-										</div>
-									</div>
-									<div class="center compareBar">
-										<div class="barTop">{{realData?.dian | 0}}</div>
-										<div class="barBack">
-											<div class="barDiv" :class="{ good: realData?.dngood, bad: realData?.dnbad }"
-												:style="[realData?.dnrHeight && { height: realData?.dnrHeight }]"></div>
-										</div>
-										<div style="line-height: 20px">
-											瀹炴椂
-											<br />
-											娑堣��
-										</div>
-									</div>
-								</div>
-							</div>
-						</dv-border-box7>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
-</dv-full-screen-container>
-</template>
-
-<script setup lang="ts">
-  import { useFullscreen } from '@vueuse/core';
-	import { BorderBox7 as DvBorderBox7 } from '@kjgl77/datav-vue3'
-	import { router } from '/@/router'
-	import { onMounted, ref, onUnmounted } from 'vue'
-	import { Progress } from 'ant-design-vue'
-	import * as echarts from 'echarts'
-	import 'echarts-liquidfill'
-	import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index'
-	import { defHttp } from '/@/utils/http/axios'
-	import { queryById,listAll } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { useUserStore } from '/@/store/modules/user'
-	const domRef = ref<Nullable<HTMLElement>>(null);
-		const { enter, toggle, exit, isFullscreen } = useFullscreen();
-
-const { toggle: toggleDom } = useFullscreen(domRef);
-	const Timer = ref()
-    const Timer2 = ref()
-	const marks = ref<Record<number, any>>({
-		0: '0掳C',
-		1: '',
-		2: '',
-		3: '',
-		4: '',
-		5: '',
-		6: '',
-		7: '',
-		8: '',
-		9: '',
-		10: '',
-		11: '',
-		12: '',
-		13: '',
-		14: '',
-		15: '',
-		16: '',
-		17: '',
-		18: '',
-		19: '',
-		20: '',
-		21: '',
-		22: '',
-		23: '',
-		24: '',
-		25: '25掳C',
-		26: '',
-		27: '',
-		28: '',
-		29: '',
-		30: '',
-		31: '',
-		32: '',
-		33: '',
-		34: '',
-		35: '',
-		36: '',
-		37: '',
-		38: '',
-		39: '',
-		40: '',
-		41: '',
-		42: '',
-		43: '',
-		44: '',
-		45: '',
-		46: '',
-		47: '',
-		48: '',
-		49: '',
-		50: '50掳C',
-		51: '',
-		52: '',
-		53: '',
-		54: '',
-		55: '',
-		56: '',
-		57: '',
-		58: '',
-		59: '',
-		60: '',
-		61: '',
-		62: '',
-		63: '',
-		64: '',
-		65: '',
-		66: '',
-		67: '',
-		68: '',
-		69: '',
-		70: '',
-		71: '',
-		72: '',
-		73: '',
-		74: '',
-		75: '75掳C',
-		76: '',
-		77: '',
-		78: '',
-		79: '',
-		80: '',
-		81: '',
-		82: '',
-		83: '',
-		84: '',
-		85: '',
-		86: '',
-		87: '',
-		88: '',
-		89: '',
-		90: '',
-		91: '',
-		92: '',
-		93: '',
-		94: '',
-		95: '',
-		96: '',
-		97: '',
-		98: '',
-		99: '',
-		100: '100掳C',
-	})
-	const eqps =  ref([] as dryEquipment[])
-    const eqp = ref({} as dryEquipment)
-    const eqpNum = ref(0)
-	const userStore = useUserStore()
-	const realData = ref({})
-	const standard = ref({
-		xiaolv: 220,
-		xlMin: 200,
-		zhengqi: 50,
-		zqMin: 45,
-		dian: 8,
-		dMin: 7.5,
-	})
-
-    const position = ref(1)
-	//realData.value.tempValue = [0, 100]
-	realData.value.mois = [0.5, 0.35, 0.2]
-	var moisChart: echarts.ECharts
-	var waterChart: echarts.ECharts
-
-	var bellowsTempChart: echarts.ECharts
-	var fanFreqChart: echarts.ECharts
-	var progressBarChart: echarts.ECharts
-	var efficiencyLineChart: echarts.ECharts
-
-	function initCharts() {
-		let domId = 'moisChart'
-		let chartDom: HTMLElement = document.getElementById(domId) as HTMLElement
-		let waterDom: HTMLElement = document.getElementById('moisture') as HTMLElement
-		let bellowsTempDom: HTMLElement = document.getElementById('bellowsTemp') as HTMLElement
-		let fanFreqDom: HTMLElement = document.getElementById('fanFreq') as HTMLElement
-		let progressBarDom: HTMLElement = document.getElementById('progressBar') as HTMLElement
-		let efficiencyLineDom: HTMLElement = document.getElementById('efficiencyLine') as HTMLElement
-		// let weightDom: HTMLElement = document.getElementById('weight') as HTMLElement
-		moisChart = echarts.init(chartDom)
-		waterChart = echarts.init(waterDom)
-		bellowsTempChart = echarts.init(bellowsTempDom)
-		fanFreqChart = echarts.init(fanFreqDom)
-		progressBarChart = echarts.init(progressBarDom)
-		efficiencyLineChart = echarts.init(efficiencyLineDom)
-
-		const option = {
-			color: ['#2C4D90', '#CE0000'],
-			title: {
-				text: '鍚按鐜�/娓╁害瓒嬪娍',
-				textStyle: {
-					color: '#fff',
-					fontSize: 15
-				},
-				
-			},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				left: 50,
-				right: 70,
-				top: 50,
-				bottom: 60,
-			},
-			legend: {
-				right: 60,
-				textStyle: {
-					color: '#fff'
-				}
-			},
-			// toolbox: {
-			// 	show: true,
-			// 	feature: {
-			// 		dataZoom: {
-			// 			yAxisIndex: 'none',
-			// 		},
-			// 		dataView: { readOnly: false },
-			// 		magicType: { type: ['line', 'bar'] },
-			// 		restore: {},
-			// 		saveAsImage: {},
-			// 	},
-			// },
-			xAxis: {
-				type: 'value',
-				axisLabel:{
-					color: '#fff'
-				},
-				//boundaryGap: false,
-				// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
-				min: 0,
-				max: function (value) {
-					if (value.max < 100) {
-						return 100
-					} else {
-						return value.max
-					}
-				},
-			},
-			yAxis: {
-				type: 'value',
-				boundaryGap: ['10%', '10%'],
-				axisLabel:{
-					color: '#fff'
-				}
-				// min: 0,
-				// max: function (value) {
-				// 	if (value.max < 100) {
-				// 		return 100
-				// 	} else {
-				// 		return value.max
-				// 	}
-				// },
-			},
-			// yAxis: {
-			// 	type: 'value',
-			// 	axisLabel: {
-			// 		formatter: '{value} 掳C',
-			// 	},
-			// },
-			series: [
-				{
-					name: '鍚按鐜�',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 1],
-						[2, 2],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					markLine: {
-						data: [{ type: 'average', name: 'Avg' }],
-					},
-				},
-				{
-					name: '娓╁害',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 10],
-						[2, 20],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					// markLine: {
-					// 	data: [
-					// 		{ type: 'average', name: 'Avg' },
-					// 		[
-					// 			{
-					// 				symbol: 'none',
-					// 				x: '90%',
-					// 				yAxis: 'max',
-					// 			},
-					// 			{
-					// 				symbol: 'circle',
-					// 				label: {
-					// 					position: 'start',
-					// 					formatter: 'Max',
-					// 				},
-					// 				type: 'max',
-					// 				name: '鏈�楂樼偣',
-					// 			},
-					// 		],
-					// 	],
-					// },
-				},
-			],
-		}
-		const waterOption = {
-			series: [
-				{
-					type: 'liquidFill',
-					radius: '100%',
-					//waveAnimation: false,
-					amplitude: 3,
-					animationDuration: 5,
-					//animationDurationUpdate: 0,
-					data: [0.56,0.44,0.32],
-					shape:
-						'path://M828.817,706.209C828.817,881.725,686.98,1024,512,1024c-174.98,0-316.817-142.275-316.817-317.791C195.183,530.74,512,0,512,0s316.817,530.74,316.817,706.209z',
-					outline: {
-						show: false,
-					},
-					label: {
-						// formatter: function () {
-						// 	//console.log(`output->params`,params,mois.value)
-
-						// 	return (
-						// 		'' +
-						// 		// +'鍒濆'+(mois.value[0]*100).toFixed(2) + '%\n\n\n'
-						// 		(mois.value[1] * 100).toFixed(2) +
-						// 		'%'
-						// 		// + '\n\n\n鐩爣'+(mois.value[2]*100).toFixed(2) + '%'
-						// 	)
-						// },
-						fontSize: 20,
-						//position: ['50%',(100-mois.value[1]*100).toFixed(2) + '%'],
-					},
-				},
-			],
-		}
-
-		const bellowsOption = {
-			series: [
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					splitNumber: 8,
-					itemStyle: {
-						color: '#FFAB91',
-					},
-					progress: {
-						show: true,
-						width: 10,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						lineStyle: {
-							width: 10,
-						},
-					},
-					axisTick: {
-						distance: -15,
-						splitNumber: 5,
-						length: 3,
-						lineStyle: {
-							width: 1,
-							color: '#999',
-						},
-					},
-					splitLine: {
-						distance: -18,
-						length: 6,
-						lineStyle: {
-							width: 2,
-							color: '#999',
-						},
-					},
-					axisLabel: {
-						distance: -13,
-						color: '#fff',
-						fontSize: 12,
-					},
-					anchor: {
-						show: false,
-					},
-					title: {
-						show: false,
-					},
-					detail: {
-						valueAnimation: true,
-						width: '60%',
-						lineHeight: 40,
-						borderRadius: 8,
-						offsetCenter: [0, '0%'],
-						fontSize: 20,
-						fontWeight: 'bolder',
-						formatter: '{value}掳C',
-						color: 'inherit',
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					itemStyle: {
-						color: '#FD7347',
-					},
-					progress: {
-						show: true,
-						width: 3,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						show: false,
-					},
-					axisTick: {
-						show: false,
-					},
-					splitLine: {
-						show: false,
-					},
-					axisLabel: {
-						show: false,
-					},
-					detail: {
-						show: false,
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-			],
-		}
-
-		const fanFreqOption = {
-			series: [
-				{
-					type: 'gauge',
-					progress: {
-						show: true,
-						width: 9,
-					},
-					axisLine: {
-						lineStyle: {
-							width: 9,
-						},
-					},
-					axisTick: {
-						show: false,
-					},
-					splitLine: {
-						distance: 3,
-						length: 4,
-						lineStyle: {
-							width: 1,
-							color: '#999',
-						},
-					},
-					axisLabel: {
-						distance: 15,
-						color: '#999',
-						fontSize: 10,
-					},
-					anchor: {
-						show: true,
-						showAbove: true,
-						size: 10,
-						itemStyle: {
-							borderWidth: 3,
-						},
-					},
-					title: {
-						show: false,
-					},
-					detail: {
-						valueAnimation: true,
-						fontSize: 20,
-						offsetCenter: [0, '70%'],
-						formatter: '{value}Hz',
-					},
-					data: [
-						{
-							value: 56,
-						},
-					],
-				},
-			],
-		}
-		// const weightOption = {
-		// 	// 		title: {
-		// 	//   text: 'Referer of a Website',
-		// 	//   subtext: 'Fake Data',
-		// 	//   left: 'center'
-		// 	// },
-		// 	color: ['#1595EA', '#2C4D90', '#FF7F7F'],
-		// 	tooltip: {
-		// 		trigger: 'item',
-		// 	},
-		// 	radius: [0, '85%'],
-		// 	// grid: {
-		// 	// 	top: 20,
-		// 	// 	left: 20,
-		// 	// 	right: 20,
-		// 	// 	bottom: 20,
-		// 	// },
-		// 	// legend: {
-		// 	// 	orient: 'vertical',
-		// 	// 	left: 'left',
-		// 	// },
-		// 	series: [
-		// 		{
-		// 			name: '閲嶉噺鏁版嵁',
-		// 			type: 'pie',
-		// 			radius: '50%',
-		// 			data: [
-		// 				{ value: 1048, name: '鍓╀綑閲嶉噺' },
-		// 				{ value: 735, name: '鐑樺幓閲嶉噺' },
-		// 			],
-		// 			label: {
-		// 				show: false,
-		// 			},
-		// 			labelLine: {
-		// 				show: false,
-		// 			},
-		// 			emphasis: {
-		// 				itemStyle: {
-		// 					shadowBlur: 10,
-		// 					shadowOffsetX: 0,
-		// 					shadowColor: 'rgba(0, 0, 0, 0.5)',
-		// 				},
-		// 			},
-		// 		},
-		// 	],
-		// }
-
-		const progressBarOption = {
-			// tooltip: {
-			// 	trigger: 'axis',
-			// 	axisPointer: {
-			// 		// Use axis to trigger tooltip
-			// 		type: 'shadow', // 'shadow' as default; can also be 'line' or 'shadow'
-			// 	},
-			// },
-			// color: [
-			// 	'#0653F6',
-			// 	// '#1B61E7',
-			// 	'#3673D5',
-			// 	// '#4A80C8',
-			// 	'#608FB8',
-			// 	// '#719BAD',
-			// 	'#82A6A1',
-			// 	// '#8DAD9A',
-			// 	'#9CB790',
-			// 	// '#A7BE88',
-			// 	'#B3C681',
-			// 	'#CAD671',
-			// 	'#DBE165',
-			// ],
-			animation: false, // 鍏抽棴鍔ㄧ敾
-			color: ['#397FD7', '#2D8CDE', '#239CE5', '#1DA4E8', '#14B2EF', '#0BC4FA', '#02D2FF', '#19EEFF', '#33FAFF', '#5EFFF8'],
-			grid: {
-				top: '12%',
-				left: '20',
-				right: '55',
-				bottom: '3%',
-				containLabel: true,
-			},
-			xAxis: {
-				min: 0,
-				max: 150,
-				show: false,
-				type: 'value',
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-			},
-			yAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'category',
-				data: ['鏃堕棿'],
-			},
-			series: [
-				// {
-				// 	name: '绗竴闃舵',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	barWidth: 26,
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [30],
-				// },
-				// {
-				// 	name: '绗簩闃舵',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [30],
-				// },
-				// {
-				// 	name: 'Affiliate Ad',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [20],
-				// },
-				// {
-				// 	name: 'Video Ad',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [15],
-				// },
-				// {
-				// 	name: 'Search Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [10],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [5],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [5],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [
-				// 		{
-				// 			value: 35,
-				// 			itemStyle: {
-				// 				color: '#c0c0c0',
-				// 			},
-				// 		},
-				// 	],
-				// },
-			],
-		}
-
-		const efficiencyLineOption = {
-			title: {},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				top: '20%',
-				left: '17',
-				right: '57',
-				bottom: '0%',
-				containLabel: true,
-			},
-			legend: {
-				textStyle: {
-					color: '#fff'
-				}
-			},
-			xAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'value',
-				min: 0,
-				max: 150,
-				// data: [15, 15, 10, 7.5, 5, 2.5, 2.5, 1],
-			},
-			yAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'value',
-				axisLabel: {
-					formatter: '{value} 掳C',
-				},
-			},
-			series: [
-				{
-					name: '骞茬嚗鏁堢巼',
-					type: 'line',
-					lineStyle: {
-						width: 1,
-					},
-					// [[15,10], [15,11], [10,6], [7.5,12], [5,12], [2.5,5], [2.5,9], [1,7]]
-					data: [
-						[0, 1],
-						[15, 10],
-						[45, 11],
-						[70, 6],
-					],
-					markPoint: {
-						data: [
-							{ type: 'max', name: 'Max' },
-							{ type: 'min', name: 'Min' },
-						],
-					},
-					// markLine: {
-					// 	data: [{ type: 'average', name: 'Avg' }],
-					// },
-				},
-			],
-		}
-
-		option && moisChart.setOption(option)
-		waterOption && waterChart.setOption(waterOption)
-		bellowsOption && bellowsTempChart.setOption(bellowsOption)
-		fanFreqOption && fanFreqChart.setOption(fanFreqOption)
-
-		progressBarOption && progressBarChart.setOption(progressBarOption)
-		efficiencyLineOption && efficiencyLineChart.setOption(efficiencyLineOption)
-	}
-
-	function queryEqp() {
-		queryById({ id: router.currentRoute.value.params.id }).then((res) => {
-			// console.log(`output->res`, res)
-			eqp.value = res
-			queryRealTime()
-			setTimeout(initCharts, 500)
-		})
-	}
-
-    function listAllEqp() {
-		listAll({ enable: 'Y' })
-			.then((result) => {
-				console.log(`output->result`, result)
-				eqps.value = result
-				queryRealTime()
-			setTimeout(initCharts, 500)
-				
-			})
-			.catch((err) => {
-				console.log(`output->err`, err)
-			})
-	}
-
-
-    var num = 0;
-
-
-    // function queryEqpsReal() {
-        
-    //     if (eqps.value.length > 0) {
-    //         var i = num%eqps.value.length
-    //         eqp.value = eqps[i]
-    //         console.log("777",i);
-    //         console.log("888",eqp.value);
-    //         queryRealTime()
-	// 		setTimeout(initCharts, 500)
-    //     }
-    //     num ++;
-    // }
-
-	function queryRealTime() {
-
-        if (eqp.value) {
-        eqp.value = eqps.value[eqpNum.value]
-        console.log("888",eqp.value);
-		let tenantId = 1003
-		let eqpCode = eqp.value.code
-		let queryRealTimeUrl = '/dry/real/getRealTimeData'
-		defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-			
-			if (res && res.trendVo) {
-				console.log(`output->re11s`, res)
-				//	res.tempValue = [res.windTemp, 100]
-				//res.percent = ((res.dryTime / res.et) * 100).toFixed(2)
-				/**姘存淮鍥惧惈姘撮噺 */
-				res.mois = [
-					(res.trendVo.moisture / 100).toFixed(2),
-					(res.trendVo.moisture / 100 / 1.5).toFixed(2),
-					(res.trendVo.moisture / 100 / 3).toFixed(2),
-				]
-				if (waterChart) {
-					waterChart.setOption({
-						series: [
-							{
-								data: res.mois,
-								label: {
-									formatter: function () {
-										return res.trendVo.moisture + '%'
-									},
-									fontSize: 20,
-								},
-							},
-						],
-					})
-				}
-
-				/**娓╁害鐜舰鍥� */
-				if (bellowsTempChart) {
-					bellowsTempChart.setOption({
-						series: [{ data: [{ value: res.windTemp }] }, { data: [{ value: res.windTemp }] }],
-					})
-				}
-				/**椋庢満棰戠巼鐜舰鍥� */
-				if (fanFreqChart) {
-					fanFreqChart.setOption({
-						series: [
-							{
-								data: [
-									{
-										value: res.trendVo.fanFrequency,
-									},
-								],
-							},
-						],
-					})
-				}
-				/**骞茬嚗杩涘害銆佽蛋鍔夸笌闃舵鏁堢巼鍜岄樁娈垫秷鑰� */
-				if (res && res.detailList) {
-					var progressSeries = []
-					var ganZaoXiaoLv = []
-					var zhengQiXiaoHao = []
-					var dianNengXiaoHao = []
-					var totalTime = 0
-					var beforeWeight = 0
-					res.moisList = []
-					beforeWeight = res.originWeight
-					console.log(`output->res`, res)
-					res.detailList.forEach((item) => {
-						//console.log(`output->item`, item)
-						res.moisList.push([item.totalTime, item.moisture])
-						console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime)
-						var curDryTime = item.totalTime - totalTime
-
-						if (curDryTime > 0) {
-							progressSeries.push({
-								name: item.moisture,
-								type: 'bar',
-								stack: 'total',
-								label: {
-									show: true,
-								},
-								emphasis: {
-									focus: 'series',
-								},
-								data: [item.totalTime - totalTime],
-							})
-							ganZaoXiaoLv.push([curDryTime / 2 + totalTime, (((beforeWeight - item.weight) / curDryTime) * 60).toFixed(1)])
-
-							totalTime = item.totalTime
-						}
-						beforeWeight = item.weight
-					})
-
-					if (res.remain) {
-						if (res.dryTime - totalTime > 0) {
-							progressSeries.push({
-								name: '褰撳墠',
-								type: 'bar',
-								stack: 'total',
-								label: {
-									show: true,
-								},
-								emphasis: {
-									focus: 'series',
-								},
-								data: [
-									{
-										value: res.dryTime - totalTime,
-									},
-								],
-							})
-						}
-
-						progressSeries.push({
-							name: '鍓╀綑',
-							type: 'bar',
-							stack: 'total',
-							label: {
-								show: true,
-							},
-							emphasis: {
-								focus: 'series',
-							},
-							data: [
-								{
-									value: res.remain - (res.dryTime - totalTime),
-									itemStyle: {
-										color: '#c0c0c0',
-									},
-								},
-							],
-						})
-					}
-
-					/**骞茬嚗杩涘害 */
-					if (progressBarChart) {
-						console.log(`output->progressSeries`, progressSeries)
-						progressBarChart.setOption(
-							{
-								xAxis: {
-									max: totalTime + res.remain,
-								},
-								series: progressSeries,
-							},
-							{ replaceMerge: ['series'] }
-						)
-					}
-
-					res.totalTime = totalTime + res.remain
-					/**骞茬嚗鏁堢巼銆佹秷鑰� */
-					if (efficiencyLineChart) {
-						console.log(`output->ganZaoXiaoLv`, ganZaoXiaoLv)
-						efficiencyLineChart.setOption({
-							xAxis: {
-								max: totalTime + res.remain,
-							},
-							series: [{ data: ganZaoXiaoLv }, { data: zhengQiXiaoHao }, { data: dianNengXiaoHao }],
-						})
-					}
-
-					res.moisList.push([res.dryTime, res.trendVo.moisture])
-				}
-
-				/**娓╁害瓒嬪娍 */
-				if (res && res.bellowsTemp) {
-					Array.from(Object.entries(res.bellowsTemp))
-					var arr = Object.keys(res.bellowsTemp)
-					var temArr = []
-					arr.forEach((item) => {
-						temArr.push([item * 1, res.bellowsTemp[item]])
-					})
-
-					//console.log(`output->arr` + JSON.stringify(temArr))
-					res.tempArr = temArr
-				}
-
-				/**骞茬嚗杩囩▼瓒嬪娍 */
-				if (moisChart) {
-					//console.log(`output->鏇存柊chart`)
-					moisChart.setOption({
-						series: [
-							{
-								data: res.moisList,
-								markLine: {
-									symbol: 'none',
-									data: [
-										{
-											name: '鐩爣',
-											yAxis: res.target,
-										},
-									],
-									label: {
-										formatter: '{b}\n{c}%',
-									},
-								},
-							},
-							{
-								data: res.tempArr,
-							},
-						],
-					})
-				}
-
-				/**鏁堢巼瀵规瘮鍥� */
-				res.xiaolv = (((res.originWeight - res.yield) / res.dryTime) * 60).toFixed(2)
-				if (res.xiaolv > standard.value.xiaolv) {
-					res.xlgood = true
-					res.xlsHeight = (standard.value.xiaolv / res.xiaolv) * 100 + '%'
-					res.xlrHeight = '100%'
-				} else if (res.xiaolv < standard.value.xlMin) {
-					res.xlbad = true
-					res.xlsHeight = '100%'
-					res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%'
-				}
-
-
-				
-				/** 钂告苯娑堣�� */
-				res.zhengqi = (res.steam / (res.originWeight - res.yield)).toFixed(1)
-				if (res.zhengqi > standard.value.zhengqi) {
-					res.zqgood = true
-					res.zqsHeight = (standard.value.zhengqi / res.zhengqi) * 100 + '%'
-					res.zqrHeight = '100%'
-				} else if (res.zhengqi < standard.value.zqMin) {
-					res.zqbad = true
-					res.zqsHeight = '100%'
-					res.zqrHeight = (res.zhengqi / standard.value.zhengqi) * 100 + '%'
-				}
-				
-				
-				/** 鐢佃兘娑堣�� */
-				res.dian = (res.watt / (res.originWeight - res.yield)).toFixed(1)
-				if (res.dian > standard.value.dian) {
-					res.dngood = true
-					res.dnsHeight = (standard.value.dian / res.dian) * 100 + '%'
-					res.dnrHeight = '100%'
-				} else if (res.dian < standard.value.dMin) {
-					res.dnbad = true
-					res.dnsHeight = '100%'
-					res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%'
-				}
-
-				/**gif鍔ㄥ浘 */
-				res.gif = 'tmrefeng2'
-			} else {
-				res = {
-					mois: [],
-				}
-			}
-			console.log(`output->res`, res)
-			realData.value = res
-		})
-    }
-	}
-
-    var move = true;
-    function moveImage() {
-       
-        if (move) {
-            position.value -= 0.3
-        } else {
-            position.value += 0.3
-        }
-        if(position.value < -240 ) {
-            move = false
-        }
-        if (position.value > -1) {
-            move = true
-        }
-
-        
-    }
-
-    listAllEqp()
-	//queryEqp()
-	// DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛�
-	onMounted(() => {
-		Timer.value = setInterval(queryRealTime, 3000)
-        Timer2.value = setInterval(moveImage, 50)
-	})
-
-	onUnmounted(() => {
-		clearInterval(Timer.value)
-        clearInterval(Timer2.value)
-		Timer.value = null
-        Timer2.value = null
-	})
-</script>
-
-<style scoped>
-	.eqpBox {
-		height: 100%;
-	}
-	.eqpRow {
-	}
-	.eqpImage {
-		height: 1080px;
-		width: 1920px;
-		 background-image: url(/src/assets/images/dry/bg.png);
-		background-repeat: no-repeat;
-        color: white;
-		/*background-position: 160px 280px; */
-		/* background-color: red; */
-        background-size: 120%;
-		padding: 10px;
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-	}
-
-	.leftEqp {
-		height: 1080px;
-		width: 1200px;
-		display: flex;
-		flex-wrap: wrap;
-        align-content: flex-start;
-		
-		/* background-color: white;
-		background-image: url(/src/assets/images/dry/shebei1.png);
-		background-repeat: no-repeat;
-		background-size: 125%;
-		border-radius: 10px;
-		background-position: -119px 293px; */
-	}
-
-	.leftTop {
-		height: 750px;
-    width: 850px;
-    display: flex;
-    justify-content: center;
-    align-content: flex-start;
-    background-image: url(/src/assets/images/dry/ganzaoji-x.png);
-    background-repeat: no-repeat;
-    background-size: 79%;
-    border-radius: 10px;
-    flex-wrap: wrap;
-    background-position: 85px 279px;
-
-	}
-	.leftMid {
-		padding-top: 10px;
-		width: 850px;
-		height: 300px;
-		/* border: 1px solid; */
-        margin-top: 10px;
-		border-radius: 10px;
-		/* background: white; */
-	}
-	.mainInfo {
-		line-height: 33px;
-		padding-left: 10px;
-		font-size: 30px;
-        color: white;
-	}
-	.subhead {
-		color: #a19f9c;
-		font-size: 16px;
-		padding-left: 10px;
-	}
-
-	.mainInfo2 {
-		line-height: 20px;
-		padding-left: 0px;
-		font-size: 16px;
-	}
-	.subhead2 {
-		color: #a19f9c;
-		font-size: 10px;
-		padding-left: 0px;
-	}
-	.zhengqi {
-		height: 180px;
-		width: 200px;
-		background-image: url(/src/assets/images/dry/liuliangji.png);
-		background-repeat: no-repeat;
-		background-size: 160px;
-		/* border-radius: 10px; */
-		background-position: 17px -6px;
-	}
-
-	.liuliangji {
-	}
-	.leftData {
-		height: 250px;
-		width: 120px;
-	}
-	.rightChart {
-		height: 270px;
-		width: 170px;
-		margin-top: -30px;
-	}
-	.leftTop0 {
-		height: 600px;
-		width: 848px;
-		display: flex;
-		justify-content: center;
-		align-content: flex-start;
-		flex-wrap: wrap;
-	}
-	.leftTop1 {
-		width: 250px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-		
-	}
-	.leftTop2 {
-		width: 250px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-	}
-	.leftTop3 {
-		width: 340px;
-		height: 200px;
-		/* background-image: url(/src/assets/images/dry/fanliao.gif); */
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 300px;
-		border-radius: 50px;
-	}
-
-	.eqpStatus {
-		width: 848px;
-		height: 300px;
-
-		padding: 100px;
-	}
-	.rightInfo {
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-		height: 1060px;
-		width: 700px;
-	}
-
-	.rightTop {
-		display: flex;
-		height: 440px;
-		padding-left: 10px;
-	}
-	.rightTwo {
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.infoChart {
-		width: 340px;
-		height: 300px;
-		/* background: white; */
-		margin-left: 10px;
-		margin-top: 10px;
-		border-radius: 10px;
-	}
-	.chartTittle {
-		width: 340px;
-		height: 30px;
-		font-size: 16px;
-		display: flex;
-		justify-content: space-between;
-		padding: 15px 15px;
-	}
-	.chartInfo {
-		width: 60px;
-		height: 180px;
-	}
-
-	.compareBar {
-		width: 55px;
-		height: 140px;
-	}
-	.margintop-30 {
-		margin-top: -30px;
-	}
-
-	.barTop {
-		width: 55px;
-		height: 30px;
-	}
-	.barBack {
-		width: 30px;
-		height: 100px;
-		/* border: 1px solid black; */
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-end;
-	}
-	.barDiv {
-		width: 100%;
-
-		background-color: #1595ea;
-	}
-	.bad {
-		background-color: #ed6f6f;
-	}
-	.rightLabel {
-		width: 110px;
-		display: flex;
-		justify-content: space-between;
-	}
-	.label {
-		color: white;
-		text-align: center;
-		width: 50px;
-		border-radius: 4px;
-		height: 20px;
-		font-size: 10px;
-		line-height: 21px;
-	}
-	.good {
-		background-color: #2ecf54;
-	}
-
-	.mainInfo3 {
-		font-size: 24px;
-	}
-	.herbInfo {
-		width: 340px;
-		height: 440px;
-		color: #727272;
-	}
-
-	.curEqp {
-		width: 340px;
-		height: 170px;
-		/* background: white;
-		border-radius: 10px; */
-	}
-	.curHerb {
-		margin-top: 10px;
-		width: 340px;
-		height: 260px;
-		/* background: white;
-		border-radius: 10px; */
-		background-image: url(/src/assets/images/dry/yaocai1.png);
-		background-repeat: no-repeat;
-		background-size: 61%;
-		background-position: 0px 10px;
-	}
-	.tempMoisChart {
-		width: 690px;
-		height: 440px;
-		/* background: white; */
-		
-		padding: 20px;
-		border-radius: 10px;
-	}
-	.topLeft {
-		margin: 20px 40px 60px 20px;
-		padding: 15px;
-		/* background: white; */
-		border-radius: 10px;
-		height: 325px;
-		width: 440px;
-		/* background-image: url(/src/assets/images/dry/yaocai.jpg); */
-		background-repeat: no-repeat;
-		background-size: 164px 132px;
-		background-position: 239px 65px;
-		display: flex;
-	}
-	.topMid {
-		margin: 20px 20px 60px 40px;
-		/* background: white; */
-		border-radius: 10px;
-		background-image: url(/src/assets/images/dry/fanliao.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 400px;
-		width: 400px;
-
-		padding: 20px;
-	}
-	.topRight {
-		margin: 20px 20px 60px 20px;
-		/* background: white; */
-		border-radius: 10px;
-		width: 700px;
-		padding: 20px;
-	}
-	.midLeft {
-		height: 450px;
-		width: 600px;
-		display: flex;
-		padding: 0 20px 20px 20px;
-	}
-	.midMid {
-		width: 500px;
-		padding-top: 50px;
-	}
-
-	.midRight {
-		background-image: url(/src/assets/images/dry/fengjixz.gif);
-		background-repeat: no-repeat;
-		background-position: 150px 260px;
-		background-size: 120px 120px;
-		width: 600px;
-	}
-
-	.shangJianTou {
-		margin-left: 140px;
-		width: 70px;
-		height: 100px;
-		background-image: url(/src/assets/images/dry/shangjiantoutou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 70px 100px;
-	}
-
-	.zoujiantou {
-		margin-left: 225px;
-		margin-top: 30px;
-		width: 100px;
-		height: 70px;
-		background-image: url(/src/assets/images/dry/zuojiantou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 100px 70px;
-	}
-	.fault {
-		padding: 10px;
-		height: 60px;
-		font-size: 26px;
-		width: 100%;
-		text-align: right;
-		color: red;
-	}
-	.eqpName {
-		padding: 20px;
-
-		height: 160px;
-	}
-
-	.formula {
-		display: flex;
-		width: 340px;
-		height: 40px;
-		padding: 0 20px;
-		justify-content: space-around;
-		justify-items: center;
-	}
-
-	.formulaItem {
-		display: flex;
-		justify-content: center;
-		width: 85px;
-		height: 40px;
-	}
-
-	.eqpInfoText {
-		font-size: 18px;
-		font-weight: bold;
-	}
-
-	:deep() .ant-slider-mark-text {
-		padding-left: 15px;
-		font-size: 10px;
-	}
-	:deep() .ant-slider-mark-text::before {
-		content: '';
-		display: block;
-		width: 6px;
-		height: 1px;
-		background-color: #1890ff;
-
-		position: absolute;
-		top: 10px;
-		left: 0px;
-	}
-	:deep() .ant-slider-rail {
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-		background: linear-gradient(to top, #ce0000 0%, #ce0000 40%, #ce0000 75%, rgb(160, 160, 160) 100%);
-	}
-	:deep() .ant-slider-track {
-		background: rgb(216, 216, 216);
-
-		height: 20px;
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-	}
-	:deep() .ant-slider-track:hover {
-	}
-	:deep() .ant-slider-handle {
-		display: none;
-	}
-	:deep() .ant-slider-dot {
-		display: none;
-	}
-	:deep() .ant-slider-step {
-		width: 10px !important;
-	}
-	:deep() .ant-slider-step > :first-child {
-		display: block !important;
-		width: 30px !important;
-		height: 30px !important;
-		bottom: -26px !important;
-		left: -6px;
-		border: none;
-		background: #ce0000;
-	}
-	:deep() .progress {
-		padding: 25px 25px;
-
-		width: 360px;
-		display: flex;
-	}
-	:deep() .ant-progress-bg {
-		height: 25px !important;
-	}
-	.outDiv {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-	}
-	.blingbling {
-		-webkit-animation: scaleout 1.5s infinite ease-in-out;
-		animation: scaleout 1.5s infinite ease-in-out;
-	}
-	.center {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-		align-items: center;
-		flex-wrap: wrap;
-		text-align: center;
-	}
-
-	.centerText {
-		width: 100%;
-		text-align: center;
-	}
-
-	@-webkit-keyframes scaleout {
-		0% {
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-
-	@keyframes scaleout {
-		0% {
-			transform: scale(1);
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			transform: scale(1.1);
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-</style>
diff --git a/src/views/dry/bigScreen/BigEqp.vue b/src/views/dry/bigScreen/BigEqp.vue
deleted file mode 100644
index 19a10ef..0000000
--- a/src/views/dry/bigScreen/BigEqp.vue
+++ /dev/null
@@ -1,2247 +0,0 @@
-<template>
-	<dv-full-screen-container>
-		<div class="eqpBox">
-			<div class="eqpRow">
-				<div class="eqpImage" :style="{ 'background-position': position + 'px' }">
-					<div class="leftEqp">
-						<div style="width: 350px">
-							<div class="herbInfo">
-								<dv-border-box7 class="curEqp">
-									<div style="display: flex">
-										<div style="padding-top: 20px; padding-left: 10px" @click="back">
-											<Icon style="color: powderblue" icon="ion:caret-back-sharp" :size="35" />
-										</div>
-										<div class="eqpName" style="text-align: right" @click="changeEqp">
-											<div class="mainInfo" style="font-size: 26px">{{ eqp?.name }}</div>
-											<div class="subhead">{{ eqp?.type }}</div>
-											<dv-decoration-1 style="width: 240px; height: 90px; margin-left: 20px" />
-											<!-- 璁惧锛歿{ eqp.name }}</div>
-								<div class="eqpName">鍨嬪彿锛歿{ eqp.type }}</div> -->
-										</div>
-									</div>
-								</dv-border-box7>
-								<dv-border-box7 class="curHerb" :style="{ 'background-image': 'url(' + getHerbImageUrl(realData?.herbImage) + ')' }">
-									<div class="eqpName" style="margin-left: 156px; height: 190px">
-										<div class="mainInfo" style="font-size: 26px">{{ realData?.herbName }}</div>
-										<div class="subhead">骞茬嚗閰嶆柟</div>
-									</div>
-									<div class="formula">
-										<div class="formulaItem">
-											<Icon style="color: powderblue" icon="la:box" :size="38" />
-											<div>
-												<div class="mainInfo2">{{ realData?.feed }} 绛�</div>
-												<div class="subhead2">鎶曟枡閲�</div>
-											</div>
-										</div>
-										<div class="formulaItem">
-											<Icon style="color: red" icon="bx:wind" :size="35" />
-											<div>
-												<div class="mainInfo2">{{ realData?.windTemp }} 掳C</div>
-												<div class="subhead2">鐑</div>
-											</div>
-										</div>
-										<div class="formulaItem">
-											<Icon style="color: green" icon="tabler:target-arrow" :size="35" />
-											<div>
-												<div class="mainInfo2">{{ realData?.target }} %</div>
-												<div class="subhead2">鐩爣</div>
-											</div>
-										</div>
-									</div>
-									<!-- <div class="eqpName">{{ realData?.herbName }}</div>
-								<div class="eqpName">{{ realData?.feed }} 绛�</div> -->
-								</dv-border-box7>
-							</div>
-							<!-- <dv-border-box7 class="infoChart" style="margin-left: 0px;">
-							<div class="chartTittle">椋庢満棰戠巼</div>
-							<div class="outDiv" style="padding-top: 10px">
-								<div id="fanFreq" style="width: 240px; height: 240px"></div>
-							</div>
-						</dv-border-box7> -->
-							<dv-border-box7 class="infoChart" style="margin-left: 0px">
-								<div class="chartTittle">鍚按鐜�</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 50%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ realData?.target }}</span> %
-												</div>
-												<div class="subhead2">鐩爣鍚按鐜�</div>
-											</div>
-										</div>
-										<div class="center" style="height: 50%">
-											<div>
-												<div class="mainInfo3"
-													><span>{{ realData?.initial }}</span> %</div
-												>
-												<div class="subhead2">鏉ユ枡鍚按鐜�</div>
-											</div>
-										</div>
-									</div>
-									<div id="moisture" style="width: 170px; height: 170px"></div>
-								</div>
-								<div class="subhead2" style="margin-top: -37px; padding-left: 205px; font-weight: bold">瀹炴椂鍚按鐜�</div>
-							</dv-border-box7>
-						</div>
-						<dv-border-box7 class="leftTop">
-							<div class="leftTop0">
-								<div class="leftTop1">
-									<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-									<div>
-										<div class="mainInfo">{{ realData?.totalRemain | 0 }} Min</div>
-										<div class="subhead">鍓╀綑鏃堕棿</div>
-									</div>
-								</div>
-								<div class="leftTop1">
-									<Icon icon="bi:fan" :size="50" />
-									<div>
-										<div class="mainInfo">{{ realData.trendVo?.fanFrequency | 0 }} Hz</div>
-										<div class="subhead">椋庢満棰戠巼</div>
-									</div>
-								</div>
-								<div class="leftTop3" :style="{ 'background-image': 'url(' + getStatusImageUrl(statusGif) + ')' }"></div>
-								<div class="outDiv eqpStatus">
-									<div
-										style="
-											font-size: 28px;
-
-											color: white;
-											background-color: #1595ea;
-											height: 60px;
-											width: 180px;
-											line-height: 60px;
-											text-align: center;
-											border-radius: 10px;
-											font-weight: bold;
-										"
-									>
-										{{ statusTxt }}
-									</div>
-									<div v-if="realData?.warning" style=" 
-											margin-left: 100px;
-											font-size: 22px;
-											background: sandybrown;
-
-											border-radius: 10px;
-											line-height: 25px;
-											max-width: 500px;
-											padding: 15px;
-											font-weight: bold;" >
-										{{ realData?.warnMsg }}
-									</div>
-									
-									
-								
-									<div
-										v-if="realData?.isError"
-										class="eqpInfoText blingbling outDiv"
-										style="
-											position: absolute;
-											font-size: 30px;
-											max-height: 200px;
-											max-width: 720px;
-											margin-top: 300px;
-											border-radius: 10px;
-											background-color: #ce0000;
-											color: white;
-											padding: 10px 30px;
-										"
-									>
-										<div class="outDiv">
-											<div><Icon icon="bx:error" :size="30" /> </div>
-											<div
-												><span>{{ realData?.errorMsg }}</span></div
-											>
-										</div>
-									</div>
-								</div>
-							</div>
-						</dv-border-box7>
-						<dv-border-box7 class="infoChart" style="margin-left: 0px; margin-right: 10px">
-							<div class="chartTittle">椋庣娓╁害</div>
-							<div class="outDiv">
-								<div id="bellowsTemp" style="width: 230px; height: 230px">
-									<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-								</div>
-							</div>
-						</dv-border-box7>
-						<dv-border-box7 class="leftMid">
-							<div class="chartTittle">瀹炴椂杩涘害</div>
-							<div id="efficiencyLine" style="width: 848px; height: 180px; margin-top: -10px"></div>
-							<div style="height: 10px; display: flex; width: 848px; padding: 0 60px; justify-content: space-between">
-								<div style="width: 100px; height: 20px">{{ realData.dryTime | 0 }} min</div>
-								<div style="width: 100px; height: 20px; text-align: right">{{ realData?.totalTime | 0 }} min</div>
-							</div>
-							<div id="progressBar" style="width: 848px; height: 80px"></div>
-						</dv-border-box7>
-
-						<!-- <div class="outDiv">
-						<div style="height: 100px; width: 400px">
-							<Progress
-								:stroke-color="{
-									from: '#108ee9',
-									to: '#87d068',
-								}"
-								:percent="realData?.percent"
-								status="active"
-								:show-info="false"
-							/>
-							<div style="padding-top: 10px; display: flex; justify-content: space-between; font-weight: bold">
-								<span>骞茬嚗 52 Min</span>
-								<span>棰勮 120 Min</span>
-							</div>
-						</div>
-					</div> -->
-					</div>
-					<div class="rightInfo">
-						<div class="rightTop">
-							<dv-border-box7 class="tempMoisChart">
-								<div :id="'moisChart'" style="width: 690px; height: 420px"></div>
-							</dv-border-box7>
-						</div>
-						<div class="rightTwo">
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle">
-									骞茬嚗鏁堢巼(kg/h)
-									<div class="rightLabel">
-										<div class="label good">&gt;{{ standard.xiaolv }} 浼� </div>
-										<div class="label bad">&lt;{{ standard.xlMin }} 宸�</div>
-									</div>
-								</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 50%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ (realData?.originWeight - realData?.yield) | 0 }}</span> kg
-												</div>
-												<div class="subhead2">姘村垎钂稿彂</div>
-											</div>
-										</div>
-										<div class="center" style="height: 50%">
-											<div>
-												<div class="mainInfo3">{{ realData?.dryTime | 0 }} min</div>
-												<div class="subhead2">骞茬嚗鐢ㄦ椂</div>
-											</div>
-										</div>
-									</div>
-									<div class="rightChart center">
-										<div class="center compareBar">
-											<div class="barTop">{{ standard.xiaolv }}</div>
-											<div class="barBack">
-												<div class="barDiv" :style="{ height: realData?.xlsHeight }"></div>
-											</div>
-											<div style="line-height: 20px">
-												棰濆畾
-												<br />
-												鏁堢巼
-											</div>
-										</div>
-										<div class="center compareBar">
-											<div class="barTop">{{ realData?.xiaolv | 0 }}</div>
-											<div class="barBack">
-												<div
-													class="barDiv"
-													:class="{ good: realData?.xlgood, bad: realData?.xlbad }"
-													:style="[realData?.xlrHeight && { height: realData?.xlrHeight }]"
-												>
-												</div>
-											</div>
-											<div style="line-height: 20px">
-												瀹炴椂
-												<br />
-												鏁堢巼
-											</div>
-										</div>
-									</div>
-								</div>
-							</dv-border-box7>
-
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle"
-									>钂告苯娑堣��(m鲁/kg)
-									<div class="rightLabel">
-										<div class="label bad">&gt;{{ standard.zhengqi }} 宸�</div>
-										<div class="label good">&lt;{{ standard.zqMin }} 浼�</div>
-									</div>
-								</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 100%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ realData?.steam }}</span> m鲁
-												</div>
-												<div class="subhead2">钂告苯鐢ㄩ噺</div>
-											</div>
-										</div>
-									</div>
-									<div class="rightChart center">
-										<div class="center compareBar">
-											<div class="barTop">{{ standard.zhengqi }}</div>
-											<div class="barBack">
-												<div class="barDiv" :style="{ height: realData?.zqsHeight }"></div>
-											</div>
-											<div style="line-height: 20px">
-												棰濆畾
-												<br />
-												娑堣��
-											</div>
-										</div>
-										<div class="center compareBar">
-											<div class="barTop">{{ realData?.zhengqi | 0 }}</div>
-											<div class="barBack">
-												<div
-													class="barDiv"
-													:class="{ good: realData?.zqgood, bad: realData?.zqbad }"
-													:style="[realData?.zqrHeight && { height: realData?.zqrHeight }]"
-												>
-												</div>
-											</div>
-											<div style="line-height: 20px">
-												瀹炴椂
-												<br />
-												娑堣��
-											</div>
-										</div>
-									</div>
-								</div>
-							</dv-border-box7>
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle">鏁堢巼瀵规瘮</div>
-								<div class="outDiv" style="padding-top: 10px">
-									<div id="compare" style="width: 300px; height: 250px"></div>
-								</div>
-							</dv-border-box7>
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle">
-									<div> 鐢佃兘娑堣��(kWh/kg)</div>
-									<div class="rightLabel">
-										<div class="label bad">&gt;{{ standard.dian }} 宸�</div>
-										<div class="label good">&lt;{{ standard.dMin }} 浼�</div>
-									</div>
-								</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 100%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ realData?.watt }}</span> kWh
-												</div>
-												<div class="subhead2">鐢佃兘鐢ㄩ噺</div>
-											</div>
-										</div>
-									</div>
-									<div class="rightChart center">
-										<div class="center compareBar">
-											<div class="barTop">{{ standard.dian }}</div>
-											<div class="barBack">
-												<div class="barDiv" :style="{ height: realData?.dnsHeight }"></div>
-											</div>
-											<div style="line-height: 20px">
-												棰濆畾
-												<br />
-												娑堣��
-											</div>
-										</div>
-										<div class="center compareBar">
-											<div class="barTop">{{ realData?.dian | 0 }}</div>
-											<div class="barBack">
-												<div
-													class="barDiv"
-													:class="{ good: realData?.dngood, bad: realData?.dnbad }"
-													:style="[realData?.dnrHeight && { height: realData?.dnrHeight }]"
-												></div>
-											</div>
-											<div style="line-height: 20px">
-												瀹炴椂
-												<br />
-												娑堣��
-											</div>
-										</div>
-									</div>
-								</div>
-							</dv-border-box7>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</dv-full-screen-container>
-</template>
-
-<script setup lang="ts">
-	import { useFullscreen } from '@vueuse/core'
-	import { BorderBox7 as DvBorderBox7 } from '@kjgl77/datav-vue3'
-	import { router } from '/@/router'
-	import { onMounted, ref, onUnmounted } from 'vue'
-	import { Progress } from 'ant-design-vue'
-	import * as echarts from 'echarts'
-	import 'echarts-liquidfill'
-	import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index'
-	import { defHttp } from '/@/utils/http/axios'
-	import { queryById, listAll } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { useUserStore } from '/@/store/modules/user'
-	import { getTenantId, getToken } from '/@/utils/auth'
-
-	const domRef = ref<Nullable<HTMLElement>>(null)
-	const { enter, toggle, exit, isFullscreen } = useFullscreen()
-
-	const { toggle: toggleDom } = useFullscreen(domRef)
-	const Timer = ref()
-	const Timer2 = ref()
-	const marks = ref<Record<number, any>>({
-		0: '0掳C',
-		1: '',
-		2: '',
-		3: '',
-		4: '',
-		5: '',
-		6: '',
-		7: '',
-		8: '',
-		9: '',
-		10: '',
-		11: '',
-		12: '',
-		13: '',
-		14: '',
-		15: '',
-		16: '',
-		17: '',
-		18: '',
-		19: '',
-		20: '',
-		21: '',
-		22: '',
-		23: '',
-		24: '',
-		25: '25掳C',
-		26: '',
-		27: '',
-		28: '',
-		29: '',
-		30: '',
-		31: '',
-		32: '',
-		33: '',
-		34: '',
-		35: '',
-		36: '',
-		37: '',
-		38: '',
-		39: '',
-		40: '',
-		41: '',
-		42: '',
-		43: '',
-		44: '',
-		45: '',
-		46: '',
-		47: '',
-		48: '',
-		49: '',
-		50: '50掳C',
-		51: '',
-		52: '',
-		53: '',
-		54: '',
-		55: '',
-		56: '',
-		57: '',
-		58: '',
-		59: '',
-		60: '',
-		61: '',
-		62: '',
-		63: '',
-		64: '',
-		65: '',
-		66: '',
-		67: '',
-		68: '',
-		69: '',
-		70: '',
-		71: '',
-		72: '',
-		73: '',
-		74: '',
-		75: '75掳C',
-		76: '',
-		77: '',
-		78: '',
-		79: '',
-		80: '',
-		81: '',
-		82: '',
-		83: '',
-		84: '',
-		85: '',
-		86: '',
-		87: '',
-		88: '',
-		89: '',
-		90: '',
-		91: '',
-		92: '',
-		93: '',
-		94: '',
-		95: '',
-		96: '',
-		97: '',
-		98: '',
-		99: '',
-		100: '100掳C',
-	})
-	const eqps = ref([] as dryEquipment[])
-	console.log(`output->router.currentRoute.value.params.num `, router.currentRoute.value.query)
-	const eqp = ref({} as dryEquipment)
-	const eqpNum = ref(router.currentRoute.value.query.num || 1)
-	const userStore = useUserStore()
-	const realData = ref({})
-	const standard = ref({
-		xiaolv: 220,
-		xlMin: 200,
-		zhengqi: 50,
-		zqMin: 45,
-		dian: 8,
-		dMin: 7.5,
-	})
-
-	const position = ref(1)
-	//realData.value.tempValue = [0, 100]
-	realData.value.mois = [0.5, 0.35, 0.2]
-	statusGif = 'tmrefeng2'
-	realData.value.herbImage = 'yaocai1.png'
-	var moisChart: echarts.ECharts
-	var waterChart: echarts.ECharts
-
-	var bellowsTempChart: echarts.ECharts
-	// var fanFreqChart: echarts.ECharts
-	var progressBarChart: echarts.ECharts
-	var efficiencyLineChart: echarts.ECharts
-
-	var compareChart: echarts.ECharts
-
-	function initCharts() {
-		let domId = 'moisChart'
-		let chartDom: HTMLElement = document.getElementById(domId) as HTMLElement
-		let waterDom: HTMLElement = document.getElementById('moisture') as HTMLElement
-		let bellowsTempDom: HTMLElement = document.getElementById('bellowsTemp') as HTMLElement
-		// let fanFreqDom: HTMLElement = document.getElementById('fanFreq') as HTMLElement
-		let progressBarDom: HTMLElement = document.getElementById('progressBar') as HTMLElement
-		let efficiencyLineDom: HTMLElement = document.getElementById('efficiencyLine') as HTMLElement
-		// let weightDom: HTMLElement = document.getElementById('weight') as HTMLElement
-		let compaerDom: HTMLElement = document.getElementById('compare') as HTMLElement
-		moisChart = echarts.init(chartDom)
-		waterChart = echarts.init(waterDom)
-		bellowsTempChart = echarts.init(bellowsTempDom)
-		// fanFreqChart = echarts.init(fanFreqDom)
-		progressBarChart = echarts.init(progressBarDom)
-		efficiencyLineChart = echarts.init(efficiencyLineDom)
-		compareChart = echarts.init(compaerDom)
-
-		const option = {
-			color: ['green', 'red'],
-			title: {
-				text: '鍚按鐜�/娓╁害瓒嬪娍',
-				textStyle: {
-					color: '#fff',
-					fontSize: 15,
-				},
-			},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				left: 50,
-				right: 70,
-				top: 50,
-				bottom: 60,
-			},
-			legend: {
-				right: 60,
-				textStyle: {
-					color: '#fff',
-				},
-			},
-			// toolbox: {
-			// 	show: true,
-			// 	feature: {
-			// 		dataZoom: {
-			// 			yAxisIndex: 'none',
-			// 		},
-			// 		dataView: { readOnly: false },
-			// 		magicType: { type: ['line', 'bar'] },
-			// 		restore: {},
-			// 		saveAsImage: {},
-			// 	},
-			// },
-			xAxis: {
-				type: 'value',
-				axisLabel: {
-					color: '#fff',
-				},
-				//boundaryGap: false,
-				// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
-				min: 0,
-				max: function (value) {
-					if (value.max < 100) {
-						return 100
-					} else {
-						return value.max
-					}
-				},
-				splitLine: {
-					lineStyle: {
-						type: 'dashed',
-						color: ['#2b2b2b'],
-					},
-				},
-			},
-			yAxis: {
-				type: 'value',
-				boundaryGap: ['10%', '10%'],
-				axisLabel: {
-					color: '#fff',
-				},
-				splitLine: {
-					lineStyle: {
-						type: 'dashed',
-						color: ['#2b2b2b'],
-					},
-				},
-				// min: 0,
-				// max: function (value) {
-				// 	if (value.max < 100) {
-				// 		return 100
-				// 	} else {
-				// 		return value.max
-				// 	}
-				// },
-			},
-			// yAxis: {
-			// 	type: 'value',
-			// 	axisLabel: {
-			// 		formatter: '{value} 掳C',
-			// 	},
-			// },
-			series: [
-				{
-					name: '鍚按鐜�',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 1],
-						[2, 2],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					markLine: {
-						data: [{ type: 'average', name: 'Avg' }],
-					},
-					areaStyle: {
-						opacity: 0.2,
-						color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-							{
-								offset: 0,
-								color: 'rgb(128, 255, 165)',
-							},
-							{
-								offset: 1,
-								color: 'rgb(1, 191, 236)',
-							},
-						]),
-					},
-				},
-				{
-					name: '娓╁害',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 10],
-						[2, 20],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					areaStyle: {
-						opacity: 0.2,
-						color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-							{
-								offset: 0,
-								color: 'rgb(255, 0, 135)',
-							},
-							{
-								offset: 1,
-								color: 'rgb(135, 0, 157)',
-							},
-						]),
-					},
-					// markLine: {
-					// 	data: [
-					// 		{ type: 'average', name: 'Avg' },
-					// 		[
-					// 			{
-					// 				symbol: 'none',
-					// 				x: '90%',
-					// 				yAxis: 'max',
-					// 			},
-					// 			{
-					// 				symbol: 'circle',
-					// 				label: {
-					// 					position: 'start',
-					// 					formatter: 'Max',
-					// 				},
-					// 				type: 'max',
-					// 				name: '鏈�楂樼偣',
-					// 			},
-					// 		],
-					// 	],
-					// },
-				},
-			],
-		}
-		const waterOption = {
-			series: [
-				{
-					type: 'liquidFill',
-					radius: '100%',
-					//waveAnimation: false,
-					amplitude: 3,
-					animationDuration: 5,
-					//animationDurationUpdate: 0,
-					data: [0.56, 0.44, 0.32],
-					shape:
-						'path://M828.817,706.209C828.817,881.725,686.98,1024,512,1024c-174.98,0-316.817-142.275-316.817-317.791C195.183,530.74,512,0,512,0s316.817,530.74,316.817,706.209z',
-					outline: {
-						show: false,
-					},
-					label: {
-						// formatter: function () {
-						// 	//console.log(`output->params`,params,mois.value)
-
-						// 	return (
-						// 		'' +
-						// 		// +'鍒濆'+(mois.value[0]*100).toFixed(2) + '%\n\n\n'
-						// 		(mois.value[1] * 100).toFixed(2) +
-						// 		'%'
-						// 		// + '\n\n\n鐩爣'+(mois.value[2]*100).toFixed(2) + '%'
-						// 	)
-						// },
-						fontSize: 20,
-						//position: ['50%',(100-mois.value[1]*100).toFixed(2) + '%'],
-					},
-				},
-			],
-		}
-
-		const bellowsOption = {
-			series: [
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					splitNumber: 8,
-					itemStyle: {
-						color: '#FFAB91',
-					},
-					progress: {
-						show: true,
-						width: 10,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						lineStyle: {
-							width: 10,
-						},
-					},
-					axisTick: {
-						distance: -15,
-						splitNumber: 5,
-						length: 3,
-						lineStyle: {
-							width: 1,
-							color: '#999',
-						},
-					},
-					splitLine: {
-						distance: -18,
-						length: 6,
-						lineStyle: {
-							width: 2,
-							color: '#999',
-						},
-					},
-					axisLabel: {
-						distance: -13,
-						color: '#fff',
-						fontSize: 12,
-					},
-					anchor: {
-						show: false,
-					},
-					title: {
-						show: false,
-					},
-					detail: {
-						valueAnimation: true,
-						width: '60%',
-						lineHeight: 40,
-						borderRadius: 8,
-						offsetCenter: [0, '0%'],
-						fontSize: 20,
-						fontWeight: 'bolder',
-						formatter: '{value}掳C',
-						color: 'inherit',
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					itemStyle: {
-						color: '#FD7347',
-					},
-					progress: {
-						show: true,
-						width: 3,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						show: false,
-					},
-					axisTick: {
-						show: false,
-					},
-					splitLine: {
-						show: false,
-					},
-					axisLabel: {
-						show: false,
-					},
-					detail: {
-						show: false,
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-			],
-		}
-
-		// const fanFreqOption = {
-		// 	series: [
-		// 		{
-		// 			type: 'gauge',
-		// 			progress: {
-		// 				show: true,
-		// 				width: 9,
-		// 			},
-		// 			axisLine: {
-		// 				lineStyle: {
-		// 					width: 9,
-		// 				},
-		// 			},
-		// 			axisTick: {
-		// 				show: false,
-		// 			},
-		// 			splitLine: {
-		// 				distance: 3,
-		// 				length: 4,
-		// 				lineStyle: {
-		// 					width: 1,
-		// 					color: '#999',
-		// 				},
-		// 			},
-		// 			axisLabel: {
-		// 				distance: 15,
-		// 				color: '#999',
-		// 				fontSize: 10,
-		// 			},
-		// 			anchor: {
-		// 				show: true,
-		// 				showAbove: true,
-		// 				size: 10,
-		// 				itemStyle: {
-		// 					borderWidth: 3,
-		// 				},
-		// 			},
-		// 			title: {
-		// 				show: false,
-		// 			},
-		// 			detail: {
-		// 				valueAnimation: true,
-		// 				fontSize: 20,
-		// 				offsetCenter: [0, '70%'],
-		// 				formatter: '{value}Hz',
-		// 			},
-		// 			data: [
-		// 				{
-		// 					value: 56,
-		// 				},
-		// 			],
-		// 		},
-		// 	],
-		// }
-		// const weightOption = {
-		// 	// 		title: {
-		// 	//   text: 'Referer of a Website',
-		// 	//   subtext: 'Fake Data',
-		// 	//   left: 'center'
-		// 	// },
-		// 	color: ['#1595EA', '#2C4D90', '#FF7F7F'],
-		// 	tooltip: {
-		// 		trigger: 'item',
-		// 	},
-		// 	radius: [0, '85%'],
-		// 	// grid: {
-		// 	// 	top: 20,
-		// 	// 	left: 20,
-		// 	// 	right: 20,
-		// 	// 	bottom: 20,
-		// 	// },
-		// 	// legend: {
-		// 	// 	orient: 'vertical',
-		// 	// 	left: 'left',
-		// 	// },
-		// 	series: [
-		// 		{
-		// 			name: '閲嶉噺鏁版嵁',
-		// 			type: 'pie',
-		// 			radius: '50%',
-		// 			data: [
-		// 				{ value: 1048, name: '鍓╀綑閲嶉噺' },
-		// 				{ value: 735, name: '鐑樺幓閲嶉噺' },
-		// 			],
-		// 			label: {
-		// 				show: false,
-		// 			},
-		// 			labelLine: {
-		// 				show: false,
-		// 			},
-		// 			emphasis: {
-		// 				itemStyle: {
-		// 					shadowBlur: 10,
-		// 					shadowOffsetX: 0,
-		// 					shadowColor: 'rgba(0, 0, 0, 0.5)',
-		// 				},
-		// 			},
-		// 		},
-		// 	],
-		// }
-
-		const progressBarOption = {
-			// tooltip: {
-			// 	trigger: 'axis',
-			// 	axisPointer: {
-			// 		// Use axis to trigger tooltip
-			// 		type: 'shadow', // 'shadow' as default; can also be 'line' or 'shadow'
-			// 	},
-			// },
-			// color: [
-			// 	'#0653F6',
-			// 	// '#1B61E7',
-			// 	'#3673D5',
-			// 	// '#4A80C8',
-			// 	'#608FB8',
-			// 	// '#719BAD',
-			// 	'#82A6A1',
-			// 	// '#8DAD9A',
-			// 	'#9CB790',
-			// 	// '#A7BE88',
-			// 	'#B3C681',
-			// 	'#CAD671',
-			// 	'#DBE165',
-			// ],
-			animation: false, // 鍏抽棴鍔ㄧ敾
-			color: ['#397FD7', '#2D8CDE', '#239CE5', '#1DA4E8', '#14B2EF', '#0BC4FA', '#02D2FF', '#19EEFF', '#33FAFF', '#5EFFF8', '#60FFFE', '#64FAFF', '#70FFFF', '#7BFFFF', '#88FFFD', '#97FFFF', '#A5FFFD', '#B1FFFF', '#BFFFFF', '#CAFFFF'],
-			grid: {
-				top: '12%',
-				left: '20',
-				right: '55',
-				bottom: '3%',
-				containLabel: true,
-			},
-			xAxis: {
-				min: 0,
-				max: 150,
-				show: false,
-				type: 'value',
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-			},
-			yAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'category',
-				data: ['鏃堕棿'],
-			},
-			series: [
-				// {
-				// 	name: '绗竴闃舵',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	barWidth: 26,
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [30],
-				// },
-				// {
-				// 	name: '绗簩闃舵',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [30],
-				// },
-				// {
-				// 	name: 'Affiliate Ad',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [20],
-				// },
-				// {
-				// 	name: 'Video Ad',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [15],
-				// },
-				// {
-				// 	name: 'Search Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [10],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [5],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [5],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [
-				// 		{
-				// 			value: 35,
-				// 			itemStyle: {
-				// 				color: '#c0c0c0',
-				// 			},
-				// 		},
-				// 	],
-				// },
-			],
-		}
-
-		const efficiencyLineOption = {
-			title: {},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				top: '30%',
-				left: '17',
-				right: '57',
-				bottom: '0%',
-				containLabel: true,
-			},
-			legend: {
-				right: 60,
-				textStyle: {
-					color: '#fff',
-				},
-			},
-			xAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'value',
-				min: 0,
-				max: 150,
-				// data: [15, 15, 10, 7.5, 5, 2.5, 2.5, 1],
-			},
-			yAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'value',
-				axisLabel: {
-					formatter: '{value} 掳C',
-				},
-				// max: standard.value.xiaolv + 3,
-			},
-			series: [
-				{
-					name: '骞茬嚗鏁堢巼',
-					type: 'line',
-					lineStyle: {
-						width: 1,
-					},
-					// [[15,10], [15,11], [10,6], [7.5,12], [5,12], [2.5,5], [2.5,9], [1,7]]
-					data: [
-						[0, 1],
-						[15, 10],
-						[45, 11],
-						[70, 6],
-					],
-					markPoint: {
-						data: [
-							{ type: 'max', name: 'Max' },
-							{ type: 'min', name: 'Min' },
-						],
-					},
-					markLine: {
-						symbol: 'none',
-						data: [
-							{
-								name: '棰濆畾',
-								yAxis: standard.value.xiaolv,
-							},
-						],
-						label: {
-							formatter: '{b}\n{c}',
-							color: '#fff',
-						},
-					},
-					// markLine: {
-					// 	data: [{ type: 'average', name: 'Avg' }],
-					// },
-				},
-			],
-		}
-
-		const compareOption = {
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				top: '6%',
-				left: '3%',
-				right: '10%',
-				bottom: '3%',
-				containLabel: true,
-			},
-			xAxis: {
-				show: false,
-				type: 'value',
-			},
-			yAxis: {
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'category',
-				data: ['1#', '2#', '3#', '4#', '5#', '6#'],
-			},
-			series: [
-				{
-					name: '2011',
-					type: 'bar',
-					barWidth: 10,
-					data: [190, 89, 34, 70, 44, 30],
-					label: {
-						show: true,
-						position: 'right',
-						valueAnimation: true,
-
-						color: '#fff',
-					},
-				},
-			],
-		}
-
-		option && moisChart.setOption(option)
-		waterOption && waterChart.setOption(waterOption)
-		bellowsOption && bellowsTempChart.setOption(bellowsOption)
-		// fanFreqOption && fanFreqChart.setOption(fanFreqOption)
-
-		progressBarOption && progressBarChart.setOption(progressBarOption)
-		efficiencyLineOption && efficiencyLineChart.setOption(efficiencyLineOption)
-		compareOption && compareChart.setOption(compareOption)
-	}
-
-	// 鍔ㄦ�佽鍙栧浘鐗�
-	function getHerbImageUrl(name: string) {
-		return new URL(`/src/assets/images/dry/yaocai/${name}`, import.meta.url).href
-	}
-
-	// 鍔ㄦ�佽鍙栧浘鐗�
-	function getStatusImageUrl(name: string) {
-		if (name =='zanting') {
-			return new URL(`/src/assets/images/dry/${name}.png`, import.meta.url).href
-		} else {
-			return new URL(`/src/assets/images/dry/${name}.gif`, import.meta.url).href
-		}
-		
-	}
-	function queryEqp() {
-		queryById({ id: router.currentRoute.value.params.id }).then((res) => {
-			// console.log(`output->res`, res)
-			eqp.value = res
-			queryRealTime()
-			setTimeout(initCharts, 500)
-		})
-	}
-
-	function listAllEqp() {
-		listAll({ enable: 'Y' })
-			.then((result) => {
-				//console.log(`output->result`, result)
-				eqps.value = result
-				// result.forEach((item) => {
-				// 	eqpCodes.push(item.code)
-				// })
-				queryRealTime()
-				setTimeout(initCharts, 500)
-			})
-			.catch((err) => {
-				//console.log(`output->err`, err)
-			})
-	}
-
-	var num = eqpNum.value
-
-	function changeEqp() {
-		//console.log("changeEqp::",eqps.value.length);
-		num++
-		if (eqps.value.length > 0) {
-			var i = num % eqps.value.length
-			//eqp.value = eqps.value[i]
-			//  console.log("777",i);
-			eqpNum.value = i
-			//console.log("888",eqp.value);
-			queryRealTime()
-			//setTimeout(initCharts, 500)
-		}
-	}
-
-	// function queryEqpsReal() {
-
-	//     if (eqps.value.length > 0) {
-	//         var i = num%eqps.value.length
-	//         eqp.value = eqps[i]
-	//         console.log("777",i);
-	//         console.log("888",eqp.value);
-	//         queryRealTime()
-	// 		//setTimeout(initCharts, 500)
-	//     }
-	//     num ++;
-	// }
-
-	var shangliaoFlag = false
-	var statusGif = 'tmrefeng2'
-	var statusTxt = '姝e湪骞茬嚗'
-
-	function chaiwangban() {
-		statusGif = 'chaiwangban-1'
-		setTimeout(shangliao, 7000)
-	}
-
-	function shangliao() {
-		statusGif = 'shangliao-N'
-		setTimeout(() => {
-			statusGif = 'zhuangwangban'
-			setTimeout(() => {
-				statusGif = 'guanmen1'
-				setTimeout(() => {
-					shangliaoFlag = false
-				}, 4000)
-			}, 7000)
-		}, 15000)
-	}
-
-	function queryRealTime() {
-		if (eqp.value) {
-			eqp.value = eqps.value[eqpNum.value]
-			// console.log("888",eqp.value);
-			let tenantId = getTenantId()
-			let eqpCode = eqp.value.code
-			let queryRealTimeUrl = '/dry/real/getRealTimeData'
-			defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-				if (res && res.trendVo) {
-					//console.log(`output->re11s`, res)
-					//	res.tempValue = [res.windTemp, 100]
-					//res.percent = ((res.dryTime / res.et) * 100).toFixed(2)
-					/**姘存淮鍥惧惈姘撮噺 */
-					res.mois = [
-						(res.trendVo.moisture / 100).toFixed(2),
-						(res.trendVo.moisture / 100 / 1.5).toFixed(2),
-						(res.trendVo.moisture / 100 / 3).toFixed(2),
-					]
-					if (waterChart) {
-						waterChart.setOption({
-							series: [
-								{
-									data: res.mois,
-									label: {
-										formatter: function () {
-											return res.trendVo.moisture + '%'
-										},
-										fontSize: 20,
-									},
-								},
-							],
-						})
-					}
-
-					/**娓╁害鐜舰鍥� */
-					if (bellowsTempChart) {
-						bellowsTempChart.setOption({
-							series: [{ data: [{ value: res.windTemp }] }, { data: [{ value: res.windTemp }] }],
-						})
-					}
-					/**椋庢満棰戠巼鐜舰鍥� */
-					// if (fanFreqChart) {
-					// 	fanFreqChart.setOption({
-					// 		series: [
-					// 			{
-					// 				data: [
-					// 					{
-					// 						value: res.trendVo.fanFrequency,
-					// 					},
-					// 				],
-					// 			},
-					// 		],
-					// 	})
-					// }
-					/**骞茬嚗杩涘害銆佽蛋鍔夸笌闃舵鏁堢巼鍜岄樁娈垫秷鑰� */
-					if (res && res.detailList) {
-						var progressSeries = []
-						var ganZaoXiaoLv = []
-						var zhengQiXiaoHao = []
-						var dianNengXiaoHao = []
-						var totalTime = 1
-						var beforeWeight = 0
-						res.moisList = []
-						beforeWeight = res.originWeight
-						//console.log(`output->res`, res)
-						res.detailList.forEach((item) => {
-							//console.log(`output->bef`, beforeWeight)
-							//console.log(`output->cur`, item.weight)
-							res.moisList.push([item.totalTime, item.moisture])
-							//console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime)
-							var curDryTime = item.totalTime - totalTime
-
-							if (curDryTime > 0) {
-								progressSeries.push({
-									name: item.moisture,
-									type: 'bar',
-									stack: 'total',
-									label: {
-										show: true,
-									},
-									emphasis: {
-										focus: 'series',
-									},
-									data: [item.totalTime - totalTime],
-								})
-								ganZaoXiaoLv.push([curDryTime / 2 + totalTime, (((beforeWeight - item.weight) / curDryTime) * 60).toFixed(1)])
-
-								totalTime = item.totalTime
-							}
-							beforeWeight = item.weight
-						})
-
-						if (res.remain) {
-							if (res.dryTime - totalTime > 0) {
-								progressSeries.push({
-									name: '褰撳墠',
-									type: 'bar',
-									stack: 'total',
-									label: {
-										show: true,
-									},
-									emphasis: {
-										focus: 'series',
-									},
-									data: [
-										{
-											value: res.dryTime - totalTime,
-										},
-									],
-								})
-							}
-
-							// ganZaoXiaoLv.push([totalTime + res.remain,standard.value.xiaolv])
-							// console.log(`output->res.remain`, res.remain)
-							// console.log(`output->res.dryTime`, res.dryTime)
-							// console.log(`output->totalTime`, totalTime)
-							// 骞茬嚗鍓╀綑鏃堕棿=宸ュ崟棰勮鍓╀綑-锛堝綋鍓嶅共鐕ユ椂闂�-鏈�鍚庝竴娆¤褰曞共鐕ユ椂闂达級
-							res.totalRemain = res.remain - (res.dryTime - totalTime) > 0 ? res.remain - (res.dryTime - totalTime) : 0
-							progressSeries.push({
-								name: '鍓╀綑',
-								type: 'bar',
-								stack: 'total',
-								label: {
-									show: true,
-								},
-								emphasis: {
-									focus: 'series',
-								},
-								data: [
-									{
-										value: res.remain - (res.dryTime - totalTime),
-										itemStyle: {
-											color: '#c0c0c0',
-										},
-									},
-								],
-							})
-						}
-
-						/**骞茬嚗杩涘害 */
-						if (progressBarChart) {
-							//console.log(`output->progressSeries`, progressSeries)
-							progressBarChart.setOption(
-								{
-									xAxis: {
-										max: totalTime + res.remain,
-									},
-									series: progressSeries,
-								},
-								{ replaceMerge: ['series'] }
-							)
-						}
-
-						res.totalTime = totalTime + res.remain
-						/**骞茬嚗鏁堢巼銆佹秷鑰� */
-						if (efficiencyLineChart) {
-							//console.log(`output->ganZaoXiaoLv`, ganZaoXiaoLv)
-							efficiencyLineChart.setOption({
-								xAxis: {
-									max: totalTime + res.remain,
-								},
-								series: [
-									{
-										data: ganZaoXiaoLv,
-										markLine: {
-											symbol: 'none',
-											data: [
-												{
-													name: '棰濆畾',
-													yAxis: standard.value.xiaolv,
-												},
-											],
-											label: {
-												formatter: '{b}\n{c}',
-												color: '#fff',
-											},
-										},
-									},
-									{ data: zhengQiXiaoHao },
-									{ data: dianNengXiaoHao },
-								],
-							})
-						}
-
-						res.moisList.push([res.dryTime, res.trendVo.moisture])
-					}
-
-					/**娓╁害瓒嬪娍 */
-					if (res && res.bellowsTemp) {
-						Array.from(Object.entries(res.bellowsTemp))
-						var arr = Object.keys(res.bellowsTemp)
-						var temArr = []
-						arr.forEach((item) => {
-							temArr.push([item * 1, res.bellowsTemp[item]])
-						})
-
-						//console.log(`output->arr` + JSON.stringify(temArr))
-						res.tempArr = temArr
-					}
-
-					/**骞茬嚗杩囩▼瓒嬪娍 */
-					if (moisChart) {
-						//console.log(`output->鏇存柊chart`)
-						moisChart.setOption({
-							series: [
-								{
-									data: res.moisList,
-									markLine: {
-										symbol: 'none',
-										data: [
-											{
-												name: '鐩爣',
-												yAxis: res.target,
-											},
-										],
-										label: {
-											formatter: '{b}\n{c}%',
-											color: '#fff',
-										},
-									},
-								},
-								{
-									data: res.tempArr,
-								},
-							],
-						})
-					}
-
-					/**鏁堢巼瀵规瘮鍥� */
-					if (res.originWeight - res.yield <= 0) {
-						res.xiaolv = standard.value.xiaolv + 6
-					} else {
-						res.xiaolv = (((res.originWeight - res.yield) / res.dryTime) * 60).toFixed(2)
-					}
-
-					if (res.xiaolv > standard.value.xiaolv) {
-						res.xlgood = true
-						res.xlsHeight = (standard.value.xiaolv / res.xiaolv) * 100 + '%'
-						res.xlrHeight = '100%'
-					} else if (res.xiaolv < standard.value.xlMin) {
-						res.xlbad = true
-						res.xlsHeight = '100%'
-						res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%'
-					} else {
-						res.xlsHeight = '100%'
-						res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%'
-					}
-
-					/** 钂告苯娑堣�� */
-					if (res.originWeight - res.yield <= 0) {
-						res.zhengqi = standard.value.zhengqi - 3
-					} else {
-						res.zhengqi = (res.steam / (res.originWeight - res.yield)).toFixed(1)
-					}
-					res.zhengqi = standard.value.zhengqi - 3
-					console.log(res);
-					console.log('zhengqi:', res.zhengqi);
-					if (res.zhengqi > standard.value.zhengqi) {
-						res.zqbad = true
-						res.zqsHeight = (standard.value.zhengqi / res.zhengqi) * 100 + '%'
-						res.zqrHeight = '100%'
-					} else if (res.zhengqi < standard.value.zqMin) {
-						res.zqgood = true
-						res.zqsHeight = '100%'
-						res.zqrHeight = (res.zhengqi / standard.value.zhengqi) * 100 + '%'
-					} else {
-						res.zqsHeight = '100%'
-						res.zqrHeight = (res.zhengqi / standard.value.zhengqi) * 100 + '%'
-					}
-
-					/** 鐢佃兘娑堣�� */
-					if (res.originWeight - res.yield <= 0) {
-						res.dian = standard.value.dian - 1.5
-					} else {
-						res.dian = (res.watt / (res.originWeight - res.yield)).toFixed(1)
-					}
-					res.dian = standard.value.dian - 1.5
-					if (res.dian > standard.value.dian) {
-						res.dnbad = true
-						res.dnsHeight = (standard.value.dian / res.dian) * 100 + '%'
-						res.dnrHeight = '100%'
-					} else if (res.dian < standard.value.dMin) {
-						res.dngood = true
-						res.dnsHeight = '100%'
-						res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%'
-					} else {
-						res.dnsHeight = '100%'
-						res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%'
-					}
-
-					//console.log('state:::fan::', res.state_fan, 'roller::', res.state_roller, 'windbox::', res.state_windbox)
-					//console.log('===========================')
-					//console.log("state:::state_windbox::", res.state_windbox);
-
-					/**鐘舵��/gif鍔ㄥ浘 */
-					if (!shangliaoFlag) {
-						if (res.orderStatus == 0) {
-							statusGif = 'zanting'
-							statusTxt = '鍑嗗'
-						} else if (res.orderStatus == 1) {
-							shangliaoFlag = true
-							statusGif = 'kaimen1'
-							statusTxt = '涓婃枡'
-							setTimeout(chaiwangban, 4000)
-						} else if (res.orderStatus == 2) {
-							statusTxt = res.level
-							statusGif = 'zanting'
-							if (res.level === '鍑嗗闃舵') {
-								console.log("鍑嗗闃舵" + statusGif);
-								statusGif = 'zanting'
-							} else if (res.level === '骞茬嚗闃舵' || res.level === '姝e湪骞茬嚗') {
-								statusGif = 'tmrefeng2'
-							} else if (res.level === '缈绘枡闃舵') {
-								statusGif = 'fanliao-N'
-							} else if (res.level === '鍑烘枡闃舵') {
-								statusGif = 'chuliao-N'
-							}
-							// if (res.state_fan == 1) {
-							// 	statusGif = 'tmrefeng2'
-							// 	statusTxt = '姝e湪骞茬嚗'
-							// }
-
-							// if (res.state_roller == 4) {
-							// 	statusGif = 'fanliao-N'
-							// 	statusTxt = '姝e湪缈绘枡'
-							// }
-
-							// if (res.state_roller == 5) {
-							// 	statusGif = 'chuliao-N'
-							// 	statusTxt = '姝e湪鍑烘枡'
-							// }
-
-							// if (res.state_windbox == 2 || res.state_windbox == 3) {
-							// 	statusGif = 'fengxiangsheng-1'
-							// 	statusTxt = '姝e湪骞茬嚗'
-							// }
-						} else if (res.orderStatus == 3) {
-							statusGif = 'zanting'
-							statusTxt = '鏆傚仠'
-						} else if (res.orderStatus == 4) {
-							statusGif = 'zanting'
-							statusTxt = '骞茬嚗瀹屾垚'
-						}
-					}
-
-					if (compareChart) {
-						compareChart.setOption({
-							yAxis: {
-								data: res.compEqpNum,
-							},
-							series: {
-								data: res.compEqpEffic,
-							},
-						})
-					}
-
-					res.herbImage = 'yaocai1.png'
-
-					if (res.herbName == '鐧借姳铔囪垖鑽�') {
-						res.herbImage = 'baihuasheshecao.png'
-					} else if (res.herbName == '绯ョɑ鏍�') {
-						res.herbImage = 'nuodaogen.png'
-					} else if (res.herbName == '娣緤钘�') {
-						res.herbImage = 'yinyanghuo.png'
-					} else if (res.herbName == '椹娇鑻�') {
-						res.herbImage = 'machixian.png'
-					} else if (res.herbName == '澧ㄦ棻鑾�') {
-						res.herbImage = 'mohanlian.png'
-					} else if (res.herbName == '妗戠櫧鐨�') {
-						res.herbImage = 'sangbaipi.png'
-					}
-					
-					res.isError = false
-					if (res.fault) {
-						res.isError = true
-						res.errorMsg = res.fault
-					}
-
-					if (res.warning) {
-						res.isWarning = true
-						res.warnMsg = res.warning
-					}
-				} else {
-					res = {
-						mois: [],
-						gif: 'tmrefeng2',
-						herbImage: 'yaocai1.png',
-					}
-				}
-
-				//console.log(`output->res`, res)
-				realData.value = res
-			})
-		}
-	}
-
-	var move = true
-	function moveImage() {
-		if (move) {
-			position.value -= 0.3
-		} else {
-			position.value += 0.3
-		}
-		if (position.value < -240) {
-			move = false
-		}
-		if (position.value > -1) {
-			move = true
-		}
-	}
-
-	function back() {
-		router.back()
-	}
-
-	listAllEqp()
-	//queryEqp()
-	// DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛�
-	onMounted(() => {
-		Timer.value = setInterval(queryRealTime, 3000)
-		Timer2.value = setInterval(moveImage, 50)
-	})
-
-	onUnmounted(() => {
-		clearInterval(Timer.value)
-		clearInterval(Timer2.value)
-		Timer.value = null
-		Timer2.value = null
-	})
-</script>
-
-<style scoped>
-	.eqpBox {
-		height: 100%;
-	}
-	.eqpRow {
-	}
-	.eqpImage {
-		height: 1080px;
-		width: 1920px;
-		background-image: url(/src/assets/images/dry/bg.png);
-		background-repeat: no-repeat;
-		color: white;
-		/*background-position: 160px 280px; */
-		/* background-color: red; */
-		background-size: 120%;
-		padding: 10px;
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-	}
-
-	.leftEqp {
-		height: 1080px;
-		width: 1200px;
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-
-		/* background-color: white;
-		background-image: url(/src/assets/images/dry/shebei1.png);
-		background-repeat: no-repeat;
-		background-size: 125%;
-		border-radius: 10px;
-		background-position: -119px 293px; */
-	}
-
-	.leftTop {
-		height: 750px;
-		width: 850px;
-		display: flex;
-		justify-content: center;
-		align-content: flex-start;
-		background-image: url(/src/assets/images/dry/ganzaoji-x.png);
-		background-repeat: no-repeat;
-		background-size: 79%;
-		border-radius: 10px;
-		flex-wrap: wrap;
-		background-position: 85px 279px;
-	}
-	.leftMid {
-		width: 850px;
-		height: 300px;
-		/* border: 1px solid; */
-		margin-top: 10px;
-		border-radius: 10px;
-		/* background: white; */
-	}
-	.mainInfo {
-		line-height: 33px;
-		padding-left: 10px;
-		font-size: 30px;
-		color: white;
-	}
-	.subhead {
-		color: #a19f9c;
-		font-size: 16px;
-		padding-left: 10px;
-	}
-
-	.mainInfo2 {
-		line-height: 20px;
-		padding-left: 0px;
-		font-size: 16px;
-	}
-	.subhead2 {
-		color: #a19f9c;
-		font-size: 10px;
-		padding-left: 0px;
-	}
-	.zhengqi {
-		height: 180px;
-		width: 200px;
-		background-image: url(/src/assets/images/dry/liuliangji.png);
-		background-repeat: no-repeat;
-		background-size: 160px;
-		/* border-radius: 10px; */
-		background-position: 17px -6px;
-	}
-
-	.liuliangji {
-	}
-	.leftData {
-		height: 250px;
-		width: 120px;
-	}
-	.rightChart {
-		height: 270px;
-		width: 170px;
-		margin-top: -30px;
-	}
-	.leftTop0 {
-		height: 600px;
-		width: 848px;
-		display: flex;
-		justify-content: center;
-		align-content: flex-start;
-		flex-wrap: wrap;
-	}
-	.leftTop1 {
-		width: 250px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-	}
-	.leftTop2 {
-		width: 250px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-	}
-	.leftTop3 {
-		width: 340px;
-		height: 200px;
-		/* background-image: url(/src/assets/images/dry/fanliao.gif); */
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 300px;
-		border-radius: 50px;
-	}
-
-	.eqpStatus {
-		width: 848px;
-		
-	}
-	.rightInfo {
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-		height: 1060px;
-		width: 700px;
-	}
-
-	.rightTop {
-		display: flex;
-		height: 440px;
-		padding-left: 10px;
-	}
-	.rightTwo {
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.infoChart {
-		width: 340px;
-		height: 300px;
-		/* background: white; */
-		margin-left: 10px;
-		margin-top: 10px;
-		border-radius: 10px;
-	}
-	.chartTittle {
-		width: 340px;
-		height: 30px;
-		font-size: 16px;
-		display: flex;
-		justify-content: space-between;
-		padding: 15px 15px;
-	}
-	.chartInfo {
-		width: 60px;
-		height: 180px;
-	}
-
-	.compareBar {
-		width: 55px;
-		height: 140px;
-	}
-	.margintop-30 {
-		margin-top: -30px;
-	}
-
-	.barTop {
-		width: 55px;
-		height: 30px;
-	}
-	.barBack {
-		width: 30px;
-		height: 100px;
-		/* border: 1px solid black; */
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-end;
-	}
-	.barDiv {
-		width: 100%;
-
-		background-color: #1595ea;
-	}
-	.bad {
-		background-color: #973535;
-	}
-	.rightLabel {
-		width: 110px;
-		display: flex;
-		justify-content: space-between;
-	}
-	.label {
-		color: white;
-		text-align: center;
-		width: 50px;
-		border-radius: 4px;
-		height: 20px;
-		font-size: 10px;
-		line-height: 21px;
-	}
-	.good {
-		background-color: #0d6e24;
-	}
-
-	.mainInfo3 {
-		font-size: 24px;
-	}
-	.herbInfo {
-		width: 340px;
-		height: 440px;
-		color: #727272;
-	}
-
-	.curEqp {
-		width: 340px;
-		height: 170px;
-
-		/* background: white;
-		border-radius: 10px; */
-	}
-	.curHerb {
-		margin-top: 10px;
-		width: 340px;
-		height: 260px;
-		/* background: white;
-		border-radius: 10px; */
-
-		background-repeat: no-repeat;
-		background-size: 200px;
-		background-position: 0px 10px;
-	}
-	.tempMoisChart {
-		width: 690px;
-		height: 440px;
-		/* background: white; */
-
-		padding: 20px;
-		border-radius: 10px;
-	}
-	.topLeft {
-		margin: 20px 40px 60px 20px;
-		padding: 15px;
-		/* background: white; */
-		border-radius: 10px;
-		height: 325px;
-		width: 440px;
-		/* background-image: url(/src/assets/images/dry/yaocai.jpg); */
-		background-repeat: no-repeat;
-		background-size: 164px 132px;
-		background-position: 239px 65px;
-		display: flex;
-	}
-	.topMid {
-		margin: 20px 20px 60px 40px;
-		/* background: white; */
-		border-radius: 10px;
-		background-image: url(/src/assets/images/dry/fanliao.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 400px;
-		width: 400px;
-
-		padding: 20px;
-	}
-	.topRight {
-		margin: 20px 20px 60px 20px;
-		/* background: white; */
-		border-radius: 10px;
-		width: 700px;
-		padding: 20px;
-	}
-	.midLeft {
-		height: 450px;
-		width: 600px;
-		display: flex;
-		padding: 0 20px 20px 20px;
-	}
-	.midMid {
-		width: 500px;
-		padding-top: 50px;
-	}
-
-	.midRight {
-		background-image: url(/src/assets/images/dry/fengjixz.gif);
-		background-repeat: no-repeat;
-		background-position: 150px 260px;
-		background-size: 120px 120px;
-		width: 600px;
-	}
-
-	.shangJianTou {
-		margin-left: 140px;
-		width: 70px;
-		height: 100px;
-		background-image: url(/src/assets/images/dry/shangjiantoutou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 70px 100px;
-	}
-
-	.zoujiantou {
-		margin-left: 225px;
-		margin-top: 30px;
-		width: 100px;
-		height: 70px;
-		background-image: url(/src/assets/images/dry/zuojiantou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 100px 70px;
-	}
-	.fault {
-		padding: 10px;
-		height: 60px;
-		font-size: 26px;
-		width: 100%;
-		text-align: right;
-		color: red;
-	}
-	.eqpName {
-		padding: 20px;
-
-		height: 160px;
-	}
-
-	.formula {
-		display: flex;
-		width: 340px;
-		height: 40px;
-		padding: 0 20px;
-		justify-content: space-around;
-		justify-items: center;
-	}
-
-	.formulaItem {
-		display: flex;
-		justify-content: center;
-		width: 85px;
-		height: 40px;
-	}
-
-	.eqpInfoText {
-		font-size: 18px;
-		font-weight: bold;
-	}
-
-	:deep() .ant-slider-mark-text {
-		padding-left: 15px;
-		font-size: 10px;
-	}
-	:deep() .ant-slider-mark-text::before {
-		content: '';
-		display: block;
-		width: 6px;
-		height: 1px;
-		background-color: #1890ff;
-
-		position: absolute;
-		top: 10px;
-		left: 0px;
-	}
-	:deep() .ant-slider-rail {
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-		background: linear-gradient(to top, #ce0000 0%, #ce0000 40%, #ce0000 75%, rgb(160, 160, 160) 100%);
-	}
-	:deep() .ant-slider-track {
-		background: rgb(216, 216, 216);
-
-		height: 20px;
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-	}
-	:deep() .ant-slider-track:hover {
-	}
-	:deep() .ant-slider-handle {
-		display: none;
-	}
-	:deep() .ant-slider-dot {
-		display: none;
-	}
-	:deep() .ant-slider-step {
-		width: 10px !important;
-	}
-	:deep() .ant-slider-step > :first-child {
-		display: block !important;
-		width: 30px !important;
-		height: 30px !important;
-		bottom: -26px !important;
-		left: -6px;
-		border: none;
-		background: #ce0000;
-	}
-	:deep() .progress {
-		padding: 25px 25px;
-
-		width: 360px;
-		display: flex;
-	}
-	:deep() .ant-progress-bg {
-		height: 25px !important;
-	}
-	.outDiv {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-	}
-	.blingbling {
-		-webkit-animation: scaleout 1.5s infinite ease-in-out;
-		animation: scaleout 1.5s infinite ease-in-out;
-	}
-	.center {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-		align-items: center;
-		flex-wrap: wrap;
-		text-align: center;
-	}
-
-	.centerText {
-		width: 100%;
-		text-align: center;
-	}
-
-	@-webkit-keyframes scaleout {
-		0% {
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-
-	@keyframes scaleout {
-		0% {
-			transform: scale(1);
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			transform: scale(1.1);
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-</style>
diff --git a/src/views/dry/bigScreen/BigEqp2222.vue b/src/views/dry/bigScreen/BigEqp2222.vue
deleted file mode 100644
index 7af47e4..0000000
--- a/src/views/dry/bigScreen/BigEqp2222.vue
+++ /dev/null
@@ -1,2308 +0,0 @@
-<template>
-	<dv-full-screen-container>
-		<div class="eqpBox">
-			<div class="eqpRow">
-				<div class="eqpImage" :style="{ 'background-position': position + 'px' }">
-					<div class="leftEqp">
-						<div style="width: 350px">
-							<div class="herbInfo">
-								<dv-border-box7 class="curEqp">
-									<div style="display: flex">
-										<div style="padding-top: 20px; padding-left: 10px" @click="back">
-											<Icon style="color: powderblue" icon="ion:caret-back-sharp" :size="35" />
-										</div>
-										<div class="eqpName" style="text-align: right" @click="changeEqp">
-											<div class="mainInfo" style="font-size: 26px">{{ eqp?.name }}</div>
-											<div class="subhead">{{ eqp?.type }}</div>
-											<dv-decoration-1 style="width: 240px; height: 90px; margin-left: 20px" />
-											<!-- 璁惧锛歿{ eqp.name }}</div>
-								<div class="eqpName">鍨嬪彿锛歿{ eqp.type }}</div> -->
-										</div>
-									</div>
-								</dv-border-box7>
-								<dv-border-box7 class="curHerb" :style="{ 'background-image': 'url(' + getHerbImageUrl(realData?.herbImage) + ')' }">
-									<div class="eqpName" style="margin-left: 156px; height: 190px">
-										<div class="mainInfo" style="font-size: 26px">{{ realData?.herbName }}</div>
-										<div class="subhead">骞茬嚗閰嶆柟</div>
-									</div>
-									<div class="formula">
-										<div class="formulaItem">
-											<Icon style="color: powderblue" icon="la:box" :size="38" />
-											<div>
-												<div class="mainInfo2">{{ realData?.feed }} 绛�</div>
-												<div class="subhead2">鎶曟枡閲�</div>
-											</div>
-										</div>
-										<div class="formulaItem">
-											<Icon style="color: red" icon="bx:wind" :size="35" />
-											<div>
-												<div class="mainInfo2">{{ realData?.windTemp }} 掳C</div>
-												<div class="subhead2">鐑</div>
-											</div>
-										</div>
-										<div class="formulaItem">
-											<Icon style="color: green" icon="tabler:target-arrow" :size="35" />
-											<div>
-												<div class="mainInfo2">{{ realData?.target }} %</div>
-												<div class="subhead2">鐩爣</div>
-											</div>
-										</div>
-									</div>
-									<div class="formula">
-										<div class="formulaItem">
-											<Icon style="color: yellow" icon="mdi:weight-kilogram" :size="35" />
-											<div style="width: 4px"></div>
-											<div>
-												<div class="mainInfo2">{{ realData?.originWeight }} kg</div>
-												<div class="subhead2">鍒濆閲嶉噺</div>
-											</div>
-										</div>
-										<div class="formulaItem">
-											<Icon style="color: deepskyblue" icon="ion:water-outline" :size="35" />
-											<div>
-												<div class="mainInfo2">{{ realData?.initial }} %</div>
-												<div class="subhead2">鍒濆鍚按</div>
-											</div>
-										</div>
-										<div class="formulaItem">
-											<Icon style="color: chocolate" icon="ps:clock" :size="32" />
-											<div style="width: 4px"></div>
-											<div>
-												<div class="mainInfo2">{{ realData?.et }} 鍒�</div>
-												<div class="subhead2">棰勮鏃堕棿</div>
-											</div>
-										</div>
-									</div>
-									<!-- <div class="eqpName">{{ realData?.herbName }}</div>
-								<div class="eqpName">{{ realData?.feed }} 绛�</div> -->
-								</dv-border-box7>
-							</div>
-							<!-- <dv-border-box7 class="infoChart" style="margin-left: 0px;">
-							<div class="chartTittle">椋庢満棰戠巼</div>
-							<div class="outDiv" style="padding-top: 10px">
-								<div id="fanFreq" style="width: 240px; height: 240px"></div>
-							</div>
-						</dv-border-box7> -->
-							<dv-border-box7 style="margin-left: 0px; width: 340px; height: 240px">
-								<!-- <div class="chartTittle">鍚按鐜�</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 50%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ realData?.target }}</span> %
-												</div>
-												<div class="subhead2">鐩爣鍚按鐜�</div>
-											</div>
-										</div>
-										<div class="center" style="height: 50%">
-											<div>
-												<div class="mainInfo3"
-													><span>{{ realData?.initial }}</span> %</div
-												>
-												<div class="subhead2">鏉ユ枡鍚按鐜�</div>
-											</div>
-										</div>
-									</div>
-									<div id="moisture" style="width: 170px; height: 170px"></div>
-								</div>
-								<div class="subhead2" style="margin-top: -37px; padding-left: 205px; font-weight: bold">瀹炴椂鍚按鐜�</div> -->
-
-								<div>
-									<div class="timeProgress">
-										<div class="flex">
-											<div class="leftLabel">棰勮鏃堕棿</div>
-											<Progress :percent="30" size="small" status="active" />
-										</div>
-									</div>
-									<div class="timeProgress">
-										<div class="flex">
-											<div class="leftLabel">褰撳墠闃舵</div>
-											<Progress :percent="50" size="small" status="active" />
-										</div>
-									</div>
-								</div>
-							</dv-border-box7>
-						</div>
-						<dv-border-box7 class="leftTop">
-							<div class="leftTop0">
-								<div class="leftTop1">
-									<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-									<div>
-										<div class="mainInfo">{{ realData?.totalRemain | 0 }} Min</div>
-										<div class="subhead">鍓╀綑鏃堕棿</div>
-									</div>
-								</div>
-								<div class="leftTop1">
-									<Icon icon="ion:water" :size="50" />
-									<div>
-										<div class="mainInfo">{{ realData.trendVo?.moisture | 0 }} %</div>
-										<div class="subhead">鍚按鐜�</div>
-									</div>
-								</div>
-								<div class="leftTop1">
-									<Icon icon="bi:fan" :size="50" />
-									<div>
-										<div class="mainInfo">{{ realData.trendVo?.fanFrequency | 0 }} Hz</div>
-										<div class="subhead">椋庢満棰戠巼</div>
-									</div>
-								</div>
-
-								<div class="leftTop3" :style="{ 'background-image': 'url(' + getStatusImageUrl(statusGif) + ')' }"></div>
-								<div class="flex eqpStatus">
-									<div
-										style="
-											font-size: 28px;
-											margin-left: 150px;
-											color: white;
-											background-color: #1595ea;
-											height: 60px;
-											width: 180px;
-											line-height: 60px;
-											text-align: center;
-											border-radius: 10px;
-											font-weight: bold;
-										"
-									>
-										{{ statusTxt }}
-									</div>
-									<div v-if="realData?.warning" style=" 
-											margin-left: 100px;
-											font-size: 22px;
-											background: sandybrown;
-											height: 60px;
-											border-radius: 10px;
-											line-height: 0;
-											padding: 29px;
-											font-weight: bold;" >
-										{{ realData?.warnMsg }}
-									</div>
-									
-									
-								</div>
-								<div
-										v-if="realData?.isError"
-										
-										class="eqpInfoText blingbling outDiv"
-										style="
-											position: absolute;
-											font-size: 30px;
-											max-height: 200px; 
-											margin-top: 500px;
-											max-width: 720px;
-											border-radius: 10px;
-											background-color: #ce0000;
-											color: white;
-											padding: 10px 30px;
-										"
-									>
-										<div class="outDiv">
-											<div><Icon icon="bx:error" :size="30" /> </div>
-											<div
-												><span>{{ realData?.errorMsg }}</span></div
-											>
-										</div>
-									</div>
-							</div>
-						</dv-border-box7>
-						<dv-border-box7 class="infoChart" style="margin-left: 0px; margin-right: 10px">
-							<div class="chartTittle">椋庣娓╁害</div>
-							<div class="outDiv">
-								<div id="bellowsTemp" style="width: 230px; height: 230px">
-									<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-								</div>
-							</div>
-						</dv-border-box7>
-						<dv-border-box7 class="leftMid">
-							<!-- <div class="chartTittle">瀹炴椂杩涘害</div> -->
-							<!-- <div id="efficiencyLine" style="width: 848px; height: 180px; margin-top: -10px"></div>
-							<div style="height: 10px; display: flex; width: 848px; padding: 0 60px; justify-content: space-between">
-								<div style="width: 100px; height: 20px">{{ realData.dryTime | 0 }} min</div>
-								<div style="width: 100px; height: 20px; text-align: right">{{ realData?.totalTime | 0 }} min</div>
-							</div>
-							<div id="progressBar" style="width: 848px; height: 80px"></div> -->
-<!-- 
-							<div class="flex">
-								<div class="aigif"> </div>
-							</div> -->
-
-							<div class="flex aiback">
-								<div style="height: 300px; width:100%;flex-direction: column-reverse;" class="flex" >
-									<div class="flex">
-									<div class="aiProgress redProgress">
-										<div class="flex ">
-											<div class="leftLabel2">鍚按鐜�</div>
-											<Progress class="blingbling" :percent="30" size="small" status="active" />
-										</div>
-									</div>
-									<div class="aiProgress">
-										<div class="flex">
-											<div class="leftLabel2">褰撳墠闃舵</div>
-											<Progress :percent="50" size="small" status="active" />
-										</div>
-									</div>
-									<div class="aiProgress">
-										<div class="flex">
-											<div class="leftLabel2">鐑娓╁害 </div>
-											<Progress :percent="70" size="small" status="active" />
-										</div>
-									</div>
-								</div>
-								</div>
-								<div style="flex: 1;">
-									
-								</div>
-								<!-- <img :src="aigif" style="width: 100%; height: 63%; opacity: 0.7;"/> -->
-							</div>
-						</dv-border-box7>
-
-						<!-- <div class="outDiv">
-						<div style="height: 100px; width: 400px">
-							<Progress
-								:stroke-color="{
-									from: '#108ee9',
-									to: '#87d068',
-								}"
-								:percent="realData?.percent"
-								status="active"
-								:show-info="false"
-							/>
-							<div style="padding-top: 10px; display: flex; justify-content: space-between; font-weight: bold">
-								<span>骞茬嚗 52 Min</span>
-								<span>棰勮 120 Min</span>
-							</div>
-						</div>
-					</div> -->
-					</div>
-					<div class="rightInfo">
-						<div class="rightTop">
-							<dv-border-box7 class="tempMoisChart">
-								<div :id="'moisChart'" style="width: 690px; height: 420px"></div>
-							</dv-border-box7>
-						</div>
-						<div class="rightTwo">
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle">
-									骞茬嚗鏁堢巼(kg/h)
-									<div class="rightLabel">
-										<div class="label good">&gt;{{ standard.xiaolv }} 浼� </div>
-										<div class="label bad">&lt;{{ standard.xlMin }} 宸�</div>
-									</div>
-								</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 50%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ (realData?.originWeight - realData?.yield) | 0 }}</span> kg
-												</div>
-												<div class="subhead2">姘村垎钂稿彂</div>
-											</div>
-										</div>
-										<div class="center" style="height: 50%">
-											<div>
-												<div class="mainInfo3">{{ realData?.dryTime | 0 }} min</div>
-												<div class="subhead2">骞茬嚗鐢ㄦ椂</div>
-											</div>
-										</div>
-									</div>
-									<div class="rightChart center">
-										<div class="center compareBar">
-											<div class="barTop">{{ standard.xiaolv }}</div>
-											<div class="barBack">
-												<div class="barDiv" :style="{ height: realData?.xlsHeight }"></div>
-											</div>
-											<div style="line-height: 20px">
-												棰濆畾
-												<br />
-												鏁堢巼
-											</div>
-										</div>
-										<div class="center compareBar">
-											<div class="barTop">{{ realData?.xiaolv | 0 }}</div>
-											<div class="barBack">
-												<div
-													class="barDiv"
-													:class="{ good: realData?.xlgood, bad: realData?.xlbad }"
-													:style="[realData?.xlrHeight && { height: realData?.xlrHeight }]"
-												>
-												</div>
-											</div>
-											<div style="line-height: 20px">
-												瀹炴椂
-												<br />
-												鏁堢巼
-											</div>
-										</div>
-									</div>
-								</div>
-							</dv-border-box7>
-
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle"
-									>钂告苯娑堣��(m鲁/kg)
-									<div class="rightLabel">
-										<div class="label bad">&gt;{{ standard.zhengqi }} 宸�</div>
-										<div class="label good">&lt;{{ standard.zqMin }} 浼�</div>
-									</div>
-								</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 100%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ realData?.steam }}</span> m鲁
-												</div>
-												<div class="subhead2">钂告苯鐢ㄩ噺</div>
-											</div>
-										</div>
-									</div>
-									<div class="rightChart center">
-										<div class="center compareBar">
-											<div class="barTop">{{ standard.zhengqi }}</div>
-											<div class="barBack">
-												<div class="barDiv" :style="{ height: realData?.zqsHeight }"></div>
-											</div>
-											<div style="line-height: 20px">
-												棰濆畾
-												<br />
-												娑堣��
-											</div>
-										</div>
-										<div class="center compareBar">
-											<div class="barTop">{{ realData?.zhengqi | 0 }}</div>
-											<div class="barBack">
-												<div
-													class="barDiv"
-													:class="{ good: realData?.zqgood, bad: realData?.zqbad }"
-													:style="[realData?.zqrHeight && { height: realData?.zqrHeight }]"
-												>
-												</div>
-											</div>
-											<div style="line-height: 20px">
-												瀹炴椂
-												<br />
-												娑堣��
-											</div>
-										</div>
-									</div>
-								</div>
-							</dv-border-box7>
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle">鏁堢巼瀵规瘮</div>
-								<div class="outDiv" style="padding-top: 10px">
-									<div id="compare" style="width: 300px; height: 250px"></div>
-								</div>
-							</dv-border-box7>
-							<dv-border-box7 class="infoChart">
-								<div class="chartTittle">
-									<div> 鐢佃兘娑堣��(kWh/kg)</div>
-									<div class="rightLabel">
-										<div class="label bad">&gt;{{ standard.dian }} 宸�</div>
-										<div class="label good">&lt;{{ standard.dMin }} 浼�</div>
-									</div>
-								</div>
-								<div class="outDiv" style="padding-top: 20px">
-									<div class="leftData">
-										<div class="center" style="height: 100%">
-											<div class="centerText">
-												<div class="mainInfo3"
-													><span>{{ realData?.watt }}</span> kWh
-												</div>
-												<div class="subhead2">鐢佃兘鐢ㄩ噺</div>
-											</div>
-										</div>
-									</div>
-									<div class="rightChart center">
-										<div class="center compareBar">
-											<div class="barTop">{{ standard.dian }}</div>
-											<div class="barBack">
-												<div class="barDiv" :style="{ height: realData?.dnsHeight }"></div>
-											</div>
-											<div style="line-height: 20px">
-												棰濆畾
-												<br />
-												娑堣��
-											</div>
-										</div>
-										<div class="center compareBar">
-											<div class="barTop">{{ realData?.dian | 0 }}</div>
-											<div class="barBack">
-												<div
-													class="barDiv"
-													:class="{ good: realData?.dngood, bad: realData?.dnbad }"
-													:style="[realData?.dnrHeight && { height: realData?.dnrHeight }]"
-												></div>
-											</div>
-											<div style="line-height: 20px">
-												瀹炴椂
-												<br />
-												娑堣��
-											</div>
-										</div>
-									</div>
-								</div>
-							</dv-border-box7>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</dv-full-screen-container>
-</template>
-
-<script setup lang="ts">
-	import { useFullscreen } from '@vueuse/core'
-	import { BorderBox7 as DvBorderBox7 } from '@kjgl77/datav-vue3'
-	import { router } from '/@/router'
-	import { onMounted, ref, onUnmounted } from 'vue'
-	import { Progress } from 'ant-design-vue'
-	import * as echarts from 'echarts'
-	import 'echarts-liquidfill'
-	import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index'
-	import { defHttp } from '/@/utils/http/axios'
-	import { queryById, listAll } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { useUserStore } from '/@/store/modules/user'
-	import aigif from '/@/assets/images/dry/gif2.gif';
-	import anime from 'animejs/lib/anime.es.js'
-
-	const domRef = ref<Nullable<HTMLElement>>(null)
-	const { enter, toggle, exit, isFullscreen } = useFullscreen()
-
-	const { toggle: toggleDom } = useFullscreen(domRef)
-	const Timer = ref()
-	const Timer2 = ref()
-
-	const eqps = ref([] as dryEquipment[])
-	//console.log(`output->router.currentRoute.value.params.num `, router.currentRoute.value.query)
-	const eqp = ref({} as dryEquipment)
-	const eqpNum = ref(router.currentRoute.value.query.num || 1)
-	const userStore = useUserStore()
-	const realData = ref({})
-	const standard = ref({
-		xiaolv: 220,
-		xlMin: 200,
-		zhengqi: 50,
-		zqMin: 45,
-		dian: 8,
-		dMin: 7.5,
-	})
-
-	const position = ref(1)
-	//realData.value.tempValue = [0, 100]
-	realData.value.mois = [0.5, 0.35, 0.2]
-	statusGif = 'tmrefeng2'
-	realData.value.herbImage = 'yaocai1.png'
-	var moisChart: echarts.ECharts
-	// var waterChart: echarts.ECharts
-
-	var bellowsTempChart: echarts.ECharts
-	// var fanFreqChart: echarts.ECharts
-	// var progressBarChart: echarts.ECharts
-	var efficiencyLineChart: echarts.ECharts
-
-	var compareChart: echarts.ECharts
-
-	function initCharts() {
-		let domId = 'moisChart'
-		let chartDom: HTMLElement = document.getElementById(domId) as HTMLElement
-		// let waterDom: HTMLElement = document.getElementById('moisture') as HTMLElement
-		let bellowsTempDom: HTMLElement = document.getElementById('bellowsTemp') as HTMLElement
-		// let fanFreqDom: HTMLElement = document.getElementById('fanFreq') as HTMLElement
-		// let progressBarDom: HTMLElement = document.getElementById('progressBar') as HTMLElement
-		// let efficiencyLineDom: HTMLElement = document.getElementById('efficiencyLine') as HTMLElement
-		// let weightDom: HTMLElement = document.getElementById('weight') as HTMLElement
-		let compaerDom: HTMLElement = document.getElementById('compare') as HTMLElement
-		moisChart = echarts.init(chartDom)
-		// waterChart = echarts.init(waterDom)
-		bellowsTempChart = echarts.init(bellowsTempDom)
-		// fanFreqChart = echarts.init(fanFreqDom)
-		// progressBarChart = echarts.init(progressBarDom)
-		// efficiencyLineChart = echarts.init(efficiencyLineDom)
-		compareChart = echarts.init(compaerDom)
-
-		const option = {
-			color: ['green', 'red'],
-			title: {
-				text: '鍚按鐜�/娓╁害瓒嬪娍',
-				textStyle: {
-					color: '#fff',
-					fontSize: 15,
-				},
-			},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				left: 50,
-				right: 70,
-				top: 50,
-				bottom: 60,
-			},
-			legend: {
-				right: 60,
-				textStyle: {
-					color: '#fff',
-				},
-			},
-			// toolbox: {
-			// 	show: true,
-			// 	feature: {
-			// 		dataZoom: {
-			// 			yAxisIndex: 'none',
-			// 		},
-			// 		dataView: { readOnly: false },
-			// 		magicType: { type: ['line', 'bar'] },
-			// 		restore: {},
-			// 		saveAsImage: {},
-			// 	},
-			// },
-			xAxis: {
-				type: 'value',
-				axisLabel: {
-					color: '#fff',
-				},
-				//boundaryGap: false,
-				// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
-				min: 0,
-				max: function (value) {
-					if (value.max < 100) {
-						return 100
-					} else {
-						return value.max
-					}
-				},
-				splitLine: {
-					lineStyle: {
-						type: 'dashed',
-						color: ['#2b2b2b'],
-					},
-				},
-			},
-			yAxis: {
-				type: 'value',
-				boundaryGap: ['10%', '10%'],
-				axisLabel: {
-					color: '#fff',
-				},
-				splitLine: {
-					lineStyle: {
-						type: 'dashed',
-						color: ['#2b2b2b'],
-					},
-				},
-				// min: 0,
-				// max: function (value) {
-				// 	if (value.max < 100) {
-				// 		return 100
-				// 	} else {
-				// 		return value.max
-				// 	}
-				// },
-			},
-			// yAxis: {
-			// 	type: 'value',
-			// 	axisLabel: {
-			// 		formatter: '{value} 掳C',
-			// 	},
-			// },
-			series: [
-				{
-					name: '鍚按鐜�',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 1],
-						[2, 2],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					markLine: {
-						data: [{ type: 'average', name: 'Avg' }],
-					},
-					areaStyle: {
-						opacity: 0.2,
-						color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-							{
-								offset: 0,
-								color: 'rgb(128, 255, 165)',
-							},
-							{
-								offset: 1,
-								color: 'rgb(1, 191, 236)',
-							},
-						]),
-					},
-				},
-				{
-					name: '娓╁害',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 10],
-						[2, 20],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					areaStyle: {
-						opacity: 0.2,
-						color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-							{
-								offset: 0,
-								color: 'rgb(255, 0, 135)',
-							},
-							{
-								offset: 1,
-								color: 'rgb(135, 0, 157)',
-							},
-						]),
-					},
-					// markLine: {
-					// 	data: [
-					// 		{ type: 'average', name: 'Avg' },
-					// 		[
-					// 			{
-					// 				symbol: 'none',
-					// 				x: '90%',
-					// 				yAxis: 'max',
-					// 			},
-					// 			{
-					// 				symbol: 'circle',
-					// 				label: {
-					// 					position: 'start',
-					// 					formatter: 'Max',
-					// 				},
-					// 				type: 'max',
-					// 				name: '鏈�楂樼偣',
-					// 			},
-					// 		],
-					// 	],
-					// },
-				},
-			],
-		}
-		// const waterOption = {
-		// 	series: [
-		// 		{
-		// 			type: 'liquidFill',
-		// 			radius: '100%',
-		// 			//waveAnimation: false,
-		// 			amplitude: 3,
-		// 			animationDuration: 5,
-		// 			//animationDurationUpdate: 0,
-		// 			data: [0.56, 0.44, 0.32],
-		// 			shape:
-		// 				'path://M828.817,706.209C828.817,881.725,686.98,1024,512,1024c-174.98,0-316.817-142.275-316.817-317.791C195.183,530.74,512,0,512,0s316.817,530.74,316.817,706.209z',
-		// 			outline: {
-		// 				show: false,
-		// 			},
-		// 			label: {
-		// 				// formatter: function () {
-		// 				// 	//console.log(`output->params`,params,mois.value)
-
-		// 				// 	return (
-		// 				// 		'' +
-		// 				// 		// +'鍒濆'+(mois.value[0]*100).toFixed(2) + '%\n\n\n'
-		// 				// 		(mois.value[1] * 100).toFixed(2) +
-		// 				// 		'%'
-		// 				// 		// + '\n\n\n鐩爣'+(mois.value[2]*100).toFixed(2) + '%'
-		// 				// 	)
-		// 				// },
-		// 				fontSize: 20,
-		// 				//position: ['50%',(100-mois.value[1]*100).toFixed(2) + '%'],
-		// 			},
-		// 		},
-		// 	],
-		// }
-
-		const bellowsOption = {
-			series: [
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					splitNumber: 8,
-					itemStyle: {
-						color: '#FFAB91',
-					},
-					progress: {
-						show: true,
-						width: 10,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						lineStyle: {
-							width: 10,
-						},
-					},
-					axisTick: {
-						distance: -15,
-						splitNumber: 5,
-						length: 3,
-						lineStyle: {
-							width: 1,
-							color: '#999',
-						},
-					},
-					splitLine: {
-						distance: -18,
-						length: 6,
-						lineStyle: {
-							width: 2,
-							color: '#999',
-						},
-					},
-					axisLabel: {
-						distance: -13,
-						color: '#fff',
-						fontSize: 12,
-					},
-					anchor: {
-						show: false,
-					},
-					title: {
-						show: false,
-					},
-					detail: {
-						valueAnimation: true,
-						width: '60%',
-						lineHeight: 40,
-						borderRadius: 8,
-						offsetCenter: [0, '0%'],
-						fontSize: 20,
-						fontWeight: 'bolder',
-						formatter: '{value}掳C',
-						color: 'inherit',
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					itemStyle: {
-						color: '#FD7347',
-					},
-					progress: {
-						show: true,
-						width: 3,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						show: false,
-					},
-					axisTick: {
-						show: false,
-					},
-					splitLine: {
-						show: false,
-					},
-					axisLabel: {
-						show: false,
-					},
-					detail: {
-						show: false,
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-			],
-		}
-
-		// const fanFreqOption = {
-		// 	series: [
-		// 		{
-		// 			type: 'gauge',
-		// 			progress: {
-		// 				show: true,
-		// 				width: 9,
-		// 			},
-		// 			axisLine: {
-		// 				lineStyle: {
-		// 					width: 9,
-		// 				},
-		// 			},
-		// 			axisTick: {
-		// 				show: false,
-		// 			},
-		// 			splitLine: {
-		// 				distance: 3,
-		// 				length: 4,
-		// 				lineStyle: {
-		// 					width: 1,
-		// 					color: '#999',
-		// 				},
-		// 			},
-		// 			axisLabel: {
-		// 				distance: 15,
-		// 				color: '#999',
-		// 				fontSize: 10,
-		// 			},
-		// 			anchor: {
-		// 				show: true,
-		// 				showAbove: true,
-		// 				size: 10,
-		// 				itemStyle: {
-		// 					borderWidth: 3,
-		// 				},
-		// 			},
-		// 			title: {
-		// 				show: false,
-		// 			},
-		// 			detail: {
-		// 				valueAnimation: true,
-		// 				fontSize: 20,
-		// 				offsetCenter: [0, '70%'],
-		// 				formatter: '{value}Hz',
-		// 			},
-		// 			data: [
-		// 				{
-		// 					value: 56,
-		// 				},
-		// 			],
-		// 		},
-		// 	],
-		// }
-		// const weightOption = {
-		// 	// 		title: {
-		// 	//   text: 'Referer of a Website',
-		// 	//   subtext: 'Fake Data',
-		// 	//   left: 'center'
-		// 	// },
-		// 	color: ['#1595EA', '#2C4D90', '#FF7F7F'],
-		// 	tooltip: {
-		// 		trigger: 'item',
-		// 	},
-		// 	radius: [0, '85%'],
-		// 	// grid: {
-		// 	// 	top: 20,
-		// 	// 	left: 20,
-		// 	// 	right: 20,
-		// 	// 	bottom: 20,
-		// 	// },
-		// 	// legend: {
-		// 	// 	orient: 'vertical',
-		// 	// 	left: 'left',
-		// 	// },
-		// 	series: [
-		// 		{
-		// 			name: '閲嶉噺鏁版嵁',
-		// 			type: 'pie',
-		// 			radius: '50%',
-		// 			data: [
-		// 				{ value: 1048, name: '鍓╀綑閲嶉噺' },
-		// 				{ value: 735, name: '鐑樺幓閲嶉噺' },
-		// 			],
-		// 			label: {
-		// 				show: false,
-		// 			},
-		// 			labelLine: {
-		// 				show: false,
-		// 			},
-		// 			emphasis: {
-		// 				itemStyle: {
-		// 					shadowBlur: 10,
-		// 					shadowOffsetX: 0,
-		// 					shadowColor: 'rgba(0, 0, 0, 0.5)',
-		// 				},
-		// 			},
-		// 		},
-		// 	],
-		// }
-
-		// const progressBarOption = {
-		// 	// tooltip: {
-		// 	// 	trigger: 'axis',
-		// 	// 	axisPointer: {
-		// 	// 		// Use axis to trigger tooltip
-		// 	// 		type: 'shadow', // 'shadow' as default; can also be 'line' or 'shadow'
-		// 	// 	},
-		// 	// },
-		// 	// color: [
-		// 	// 	'#0653F6',
-		// 	// 	// '#1B61E7',
-		// 	// 	'#3673D5',
-		// 	// 	// '#4A80C8',
-		// 	// 	'#608FB8',
-		// 	// 	// '#719BAD',
-		// 	// 	'#82A6A1',
-		// 	// 	// '#8DAD9A',
-		// 	// 	'#9CB790',
-		// 	// 	// '#A7BE88',
-		// 	// 	'#B3C681',
-		// 	// 	'#CAD671',
-		// 	// 	'#DBE165',
-		// 	// ],
-		// 	animation: false, // 鍏抽棴鍔ㄧ敾
-		// 	color: ['#397FD7', '#2D8CDE', '#239CE5', '#1DA4E8', '#14B2EF', '#0BC4FA', '#02D2FF', '#19EEFF', '#33FAFF', '#5EFFF8'],
-		// 	grid: {
-		// 		top: '12%',
-		// 		left: '20',
-		// 		right: '55',
-		// 		bottom: '3%',
-		// 		containLabel: true,
-		// 	},
-		// 	xAxis: {
-		// 		min: 0,
-		// 		max: 150,
-		// 		show: false,
-		// 		type: 'value',
-		// 		axisLine: {
-		// 			show: false,
-		// 		},
-		// 		axisTick: {
-		// 			show: false,
-		// 		},
-		// 	},
-		// 	yAxis: {
-		// 		show: false,
-		// 		axisLine: {
-		// 			show: false,
-		// 		},
-		// 		axisTick: {
-		// 			show: false,
-		// 		},
-		// 		type: 'category',
-		// 		data: ['鏃堕棿'],
-		// 	},
-		// 	series: [
-		// 		// {
-		// 		// 	name: '绗竴闃舵',
-		// 		// 	type: 'bar',
-		// 		// 	stack: 'total',
-		// 		// 	label: {
-		// 		// 		show: true,
-		// 		// 	},
-		// 		// 	barWidth: 26,
-		// 		// 	emphasis: {
-		// 		// 		focus: 'series',
-		// 		// 	},
-		// 		// 	data: [30],
-		// 		// },
-		// 		// {
-		// 		// 	name: '绗簩闃舵',
-		// 		// 	type: 'bar',
-		// 		// 	stack: 'total',
-		// 		// 	label: {
-		// 		// 		show: true,
-		// 		// 	},
-		// 		// 	emphasis: {
-		// 		// 		focus: 'series',
-		// 		// 	},
-		// 		// 	data: [30],
-		// 		// },
-		// 		// {
-		// 		// 	name: 'Affiliate Ad',
-		// 		// 	type: 'bar',
-		// 		// 	stack: 'total',
-		// 		// 	label: {
-		// 		// 		show: true,
-		// 		// 	},
-		// 		// 	emphasis: {
-		// 		// 		focus: 'series',
-		// 		// 	},
-		// 		// 	data: [20],
-		// 		// },
-		// 		// {
-		// 		// 	name: 'Video Ad',
-		// 		// 	type: 'bar',
-		// 		// 	stack: 'total',
-		// 		// 	label: {
-		// 		// 		show: true,
-		// 		// 	},
-		// 		// 	emphasis: {
-		// 		// 		focus: 'series',
-		// 		// 	},
-		// 		// 	data: [15],
-		// 		// },
-		// 		// {
-		// 		// 	name: 'Search Engine',
-		// 		// 	type: 'bar',
-		// 		// 	stack: 'total',
-		// 		// 	label: {
-		// 		// 		show: true,
-		// 		// 	},
-		// 		// 	emphasis: {
-		// 		// 		focus: 'series',
-		// 		// 	},
-		// 		// 	data: [10],
-		// 		// },
-		// 		// {
-		// 		// 	name: 'df Engine',
-		// 		// 	type: 'bar',
-		// 		// 	stack: 'total',
-		// 		// 	label: {
-		// 		// 		show: true,
-		// 		// 	},
-		// 		// 	emphasis: {
-		// 		// 		focus: 'series',
-		// 		// 	},
-		// 		// 	data: [5],
-		// 		// },
-		// 		// {
-		// 		// 	name: 'df Engine',
-		// 		// 	type: 'bar',
-		// 		// 	stack: 'total',
-		// 		// 	label: {
-		// 		// 		show: true,
-		// 		// 	},
-		// 		// 	emphasis: {
-		// 		// 		focus: 'series',
-		// 		// 	},
-		// 		// 	data: [5],
-		// 		// },
-		// 		// {
-		// 		// 	name: 'df Engine',
-		// 		// 	type: 'bar',
-		// 		// 	stack: 'total',
-		// 		// 	label: {
-		// 		// 		show: true,
-		// 		// 	},
-		// 		// 	emphasis: {
-		// 		// 		focus: 'series',
-		// 		// 	},
-		// 		// 	data: [
-		// 		// 		{
-		// 		// 			value: 35,
-		// 		// 			itemStyle: {
-		// 		// 				color: '#c0c0c0',
-		// 		// 			},
-		// 		// 		},
-		// 		// 	],
-		// 		// },
-		// 	],
-		// }
-
-		// const efficiencyLineOption = {
-		// 	title: {},
-		// 	tooltip: {
-		// 		trigger: 'axis',
-		// 	},
-		// 	grid: {
-		// 		top: '30%',
-		// 		left: '17',
-		// 		right: '57',
-		// 		bottom: '0%',
-		// 		containLabel: true,
-		// 	},
-		// 	legend: {
-		// 		right: 60,
-		// 		textStyle: {
-		// 			color: '#fff',
-		// 		},
-		// 	},
-		// 	xAxis: {
-		// 		show: false,
-		// 		axisLine: {
-		// 			show: false,
-		// 		},
-		// 		axisTick: {
-		// 			show: false,
-		// 		},
-		// 		type: 'value',
-		// 		min: 0,
-		// 		max: 150,
-		// 		// data: [15, 15, 10, 7.5, 5, 2.5, 2.5, 1],
-		// 	},
-		// 	yAxis: {
-		// 		show: false,
-		// 		axisLine: {
-		// 			show: false,
-		// 		},
-		// 		axisTick: {
-		// 			show: false,
-		// 		},
-		// 		type: 'value',
-		// 		axisLabel: {
-		// 			formatter: '{value} 掳C',
-		// 		},
-		// 		// max: standard.value.xiaolv + 3,
-		// 	},
-		// 	series: [
-		// 		{
-		// 			name: '骞茬嚗鏁堢巼',
-		// 			type: 'line',
-		// 			lineStyle: {
-		// 				width: 1,
-		// 			},
-		// 			// [[15,10], [15,11], [10,6], [7.5,12], [5,12], [2.5,5], [2.5,9], [1,7]]
-		// 			data: [
-		// 				[0, 1],
-		// 				[15, 10],
-		// 				[45, 11],
-		// 				[70, 6],
-		// 			],
-		// 			markPoint: {
-		// 				data: [
-		// 					{ type: 'max', name: 'Max' },
-		// 					{ type: 'min', name: 'Min' },
-		// 				],
-		// 			},
-		// 			markLine: {
-		// 				symbol: 'none',
-		// 				data: [
-		// 					{
-		// 						name: '棰濆畾',
-		// 						yAxis: standard.value.xiaolv,
-		// 					},
-		// 				],
-		// 				label: {
-		// 					formatter: '{b}\n{c}',
-		// 					color: '#fff',
-		// 				},
-		// 			},
-		// 			// markLine: {
-		// 			// 	data: [{ type: 'average', name: 'Avg' }],
-		// 			// },
-		// 		},
-		// 	],
-		// }
-
-		const compareOption = {
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				top: '6%',
-				left: '3%',
-				right: '10%',
-				bottom: '3%',
-				containLabel: true,
-			},
-			xAxis: {
-				show: false,
-				type: 'value',
-			},
-			yAxis: {
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'category',
-				data: ['1#', '2#', '3#', '4#', '5#', '6#'],
-			},
-			series: [
-				{
-					name: '2011',
-					type: 'bar',
-					barWidth: 10,
-					data: [190, 89, 34, 70, 44, 30],
-					label: {
-						show: true,
-						position: 'right',
-						valueAnimation: true,
-
-						color: '#fff',
-					},
-				},
-			],
-		}
-
-		option && moisChart.setOption(option)
-		// waterOption && waterChart.setOption(waterOption)
-		bellowsOption && bellowsTempChart.setOption(bellowsOption)
-		// fanFreqOption && fanFreqChart.setOption(fanFreqOption)
-
-		// progressBarOption && progressBarChart.setOption(progressBarOption)
-		// efficiencyLineOption && efficiencyLineChart.setOption(efficiencyLineOption)
-		compareOption && compareChart.setOption(compareOption)
-	}
-
-	// 鍔ㄦ�佽鍙栧浘鐗�
-	function getHerbImageUrl(name: string) {
-		return new URL(`/src/assets/images/dry/yaocai/${name}`, import.meta.url).href
-	}
-
-	// 鍔ㄦ�佽鍙栧浘鐗�
-	function getStatusImageUrl(name: string) {
-		if (name =='zanting') {
-			return new URL(`/src/assets/images/dry/${name}.png`, import.meta.url).href
-		} else {
-			return new URL(`/src/assets/images/dry/${name}.gif`, import.meta.url).href
-		}
-		
-	}
-	function queryEqp() {
-		queryById({ id: router.currentRoute.value.params.id }).then((res) => {
-			// console.log(`output->res`, res)
-			eqp.value = res
-			queryRealTime()
-			setTimeout(initCharts, 500)
-		})
-	}
-
-	function listAllEqp() {
-		listAll({ enable: 'Y' })
-			.then((result) => {
-				//console.log(`output->result`, result)
-				eqps.value = result
-				// result.forEach((item) => {
-				// 	eqpCodes.push(item.code)
-				// })
-				queryRealTime()
-				setTimeout(initCharts, 500)
-			})
-			.catch((err) => {
-				//console.log(`output->err`, err)
-			})
-	}
-
-	var num = eqpNum.value
-
-	function changeEqp() {
-		//console.log("changeEqp::",eqps.value.length);
-		num++
-		if (eqps.value.length > 0) {
-			var i = num % eqps.value.length
-			//eqp.value = eqps.value[i]
-			//  console.log("777",i);
-			eqpNum.value = i
-			//console.log("888",eqp.value);
-			queryRealTime()
-			//setTimeout(initCharts, 500)
-		}
-	}
-
-	// function queryEqpsReal() {
-
-	//     if (eqps.value.length > 0) {
-	//         var i = num%eqps.value.length
-	//         eqp.value = eqps[i]
-	//         console.log("777",i);
-	//         console.log("888",eqp.value);
-	//         queryRealTime()
-	// 		//setTimeout(initCharts, 500)
-	//     }
-	//     num ++;
-	// }
-
-	var shangliaoFlag = false
-	var statusGif = 'tmrefeng2'
-	var statusTxt = '姝e湪骞茬嚗'
-
-	function chaiwangban() {
-		statusGif = 'chaiwangban-1'
-		setTimeout(shangliao, 7000)
-	}
-
-	function shangliao() {
-		statusGif = 'shangliao-N'
-		setTimeout(() => {
-			statusGif = 'zhuangwangban'
-			setTimeout(() => {
-				statusGif = 'guanmen1'
-				setTimeout(() => {
-					shangliaoFlag = false
-				}, 4000)
-			}, 7000)
-		}, 15000)
-	}
-
-	function queryRealTime() {
-		if (eqp.value) {
-			eqp.value = eqps.value[eqpNum.value]
-			// console.log("888",eqp.value);
-			let tenantId = 1003
-			let eqpCode = eqp.value.code
-			let queryRealTimeUrl = '/dry/real/getRealTimeData'
-			defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-				if (res && res.trendVo) {
-					//console.log(`output->re11s`, JSON.stringify( res))
-					//	res.tempValue = [res.windTemp, 100]
-					//res.percent = ((res.dryTime / res.et) * 100).toFixed(2)
-					/**姘存淮鍥惧惈姘撮噺 */
-					res.mois = [
-						(res.trendVo.moisture / 100).toFixed(2),
-						(res.trendVo.moisture / 100 / 1.5).toFixed(2),
-						(res.trendVo.moisture / 100 / 3).toFixed(2),
-					]
-					// if (waterChart) {
-					// 	waterChart.setOption({
-					// 		series: [
-					// 			{
-					// 				data: res.mois,
-					// 				label: {
-					// 					formatter: function () {
-					// 						return res.trendVo.moisture + '%'
-					// 					},
-					// 					fontSize: 20,
-					// 				},
-					// 			},
-					// 		],
-					// 	})
-					// }
-
-					/**娓╁害鐜舰鍥� */
-					if (bellowsTempChart) {
-						bellowsTempChart.setOption({
-							series: [{ data: [{ value: res.windTemp }] }, { data: [{ value: res.windTemp }] }],
-						})
-					}
-					/**椋庢満棰戠巼鐜舰鍥� */
-					// if (fanFreqChart) {
-					// 	fanFreqChart.setOption({
-					// 		series: [
-					// 			{
-					// 				data: [
-					// 					{
-					// 						value: res.trendVo.fanFrequency,
-					// 					},
-					// 				],
-					// 			},
-					// 		],
-					// 	})
-					// }
-					/**骞茬嚗杩涘害銆佽蛋鍔夸笌闃舵鏁堢巼鍜岄樁娈垫秷鑰� */
-					if (res && res.detailList) {
-						var progressSeries = []
-						var ganZaoXiaoLv = []
-						var zhengQiXiaoHao = []
-						var dianNengXiaoHao = []
-						var totalTime = 0
-						var beforeWeight = 0
-						res.moisList = []
-						beforeWeight = res.originWeight
-						//console.log(`output->res`, res)
-						res.detailList.forEach((item) => {
-							//console.log(`output->bef`, beforeWeight)
-							//console.log(`output->cur`, item.weight)
-							res.moisList.push([item.totalTime, item.moisture])
-							//console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime)
-							var curDryTime = item.totalTime - totalTime
-
-							if (curDryTime > 0) {
-								progressSeries.push({
-									name: item.moisture,
-									type: 'bar',
-									stack: 'total',
-									label: {
-										show: true,
-									},
-									emphasis: {
-										focus: 'series',
-									},
-									data: [item.totalTime - totalTime],
-								})
-								ganZaoXiaoLv.push([curDryTime / 2 + totalTime, (((beforeWeight - item.weight) / curDryTime) * 60).toFixed(1)])
-
-								totalTime = item.totalTime
-							}
-							beforeWeight = item.weight
-						})
-
-						if (res.remain) {
-							if (res.dryTime - totalTime > 0) {
-								progressSeries.push({
-									name: '褰撳墠',
-									type: 'bar',
-									stack: 'total',
-									label: {
-										show: true,
-									},
-									emphasis: {
-										focus: 'series',
-									},
-									data: [
-										{
-											value: res.dryTime - totalTime,
-										},
-									],
-								})
-							}
-
-							// ganZaoXiaoLv.push([totalTime + res.remain,standard.value.xiaolv])
-							// console.log(`output->res.remain`, res.remain)
-							// console.log(`output->res.dryTime`, res.dryTime)
-							// console.log(`output->totalTime`, totalTime)
-							// 骞茬嚗鍓╀綑鏃堕棿=宸ュ崟棰勮鍓╀綑-锛堝綋鍓嶅共鐕ユ椂闂�-鏈�鍚庝竴娆¤褰曞共鐕ユ椂闂达級
-							res.totalRemain = res.remain - (res.dryTime - totalTime) > 0 ? res.remain - (res.dryTime - totalTime) : 0
-							progressSeries.push({
-								name: '鍓╀綑',
-								type: 'bar',
-								stack: 'total',
-								label: {
-									show: true,
-								},
-								emphasis: {
-									focus: 'series',
-								},
-								data: [
-									{
-										value: res.remain - (res.dryTime - totalTime),
-										itemStyle: {
-											color: '#c0c0c0',
-										},
-									},
-								],
-							})
-						}
-
-						/**骞茬嚗杩涘害 */
-						// if (progressBarChart) {
-						// 	//console.log(`output->progressSeries`, progressSeries)
-						// 	progressBarChart.setOption(
-						// 		{
-						// 			xAxis: {
-						// 				max: totalTime + res.remain,
-						// 			},
-						// 			series: progressSeries,
-						// 		},
-						// 		{ replaceMerge: ['series'] }
-						// 	)
-						// }
-
-						res.totalTime = totalTime + res.remain
-						/**骞茬嚗鏁堢巼銆佹秷鑰� */
-						// if (efficiencyLineChart) {
-						// 	//console.log(`output->ganZaoXiaoLv`, ganZaoXiaoLv)
-						// 	efficiencyLineChart.setOption({
-						// 		xAxis: {
-						// 			max: totalTime + res.remain,
-						// 		},
-						// 		series: [
-						// 			{
-						// 				data: ganZaoXiaoLv,
-						// 				markLine: {
-						// 					symbol: 'none',
-						// 					data: [
-						// 						{
-						// 							name: '棰濆畾',
-						// 							yAxis: standard.value.xiaolv,
-						// 						},
-						// 					],
-						// 					label: {
-						// 						formatter: '{b}\n{c}',
-						// 						color: '#fff',
-						// 					},
-						// 				},
-						// 			},
-						// 			{ data: zhengQiXiaoHao },
-						// 			{ data: dianNengXiaoHao },
-						// 		],
-						// 	})
-						// }
-
-						res.moisList.push([res.dryTime, res.trendVo.moisture])
-					}
-
-					/**娓╁害瓒嬪娍 */
-					if (res && res.bellowsTemp) {
-						Array.from(Object.entries(res.bellowsTemp))
-						var arr = Object.keys(res.bellowsTemp)
-						var temArr = []
-						arr.forEach((item) => {
-							temArr.push([item * 1, res.bellowsTemp[item]])
-						})
-
-						//console.log(`output->arr` + JSON.stringify(temArr))
-						res.tempArr = temArr
-					}
-
-					/**骞茬嚗杩囩▼瓒嬪娍 */
-					if (moisChart) {
-						//console.log(`output->鏇存柊chart`)
-						moisChart.setOption({
-							series: [
-								{
-									data: res.moisList,
-									markLine: {
-										symbol: 'none',
-										data: [
-											{
-												name: '鐩爣',
-												yAxis: res.target,
-											},
-										],
-										label: {
-											formatter: '{b}\n{c}%',
-											color: '#fff',
-										},
-									},
-								},
-								{
-									data: res.tempArr,
-								},
-							],
-						})
-					}
-
-					/**鏁堢巼瀵规瘮鍥� */
-					if (res.originWeight - res.yield <= 0) {
-						res.xiaolv = standard.value.xiaolv + 6
-					} else {
-						res.xiaolv = (((res.originWeight - res.yield) / res.dryTime) * 60).toFixed(2)
-					}
-
-					if (res.xiaolv > standard.value.xiaolv) {
-						res.xlgood = true
-						res.xlsHeight = (standard.value.xiaolv / res.xiaolv) * 100 + '%'
-						res.xlrHeight = '100%'
-					} else if (res.xiaolv < standard.value.xlMin) {
-						res.xlbad = true
-						res.xlsHeight = '100%'
-						res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%'
-					} else {
-						res.xlsHeight = '100%'
-						res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%'
-					}
-
-					/** 钂告苯娑堣�� */
-					if (res.originWeight - res.yield <= 0) {
-						res.zhengqi = standard.value.zhengqi - 3
-					} else {
-						res.zhengqi = (res.steam / (res.originWeight - res.yield)).toFixed(1)
-					}
-					//console.log('zhengqi:', res.zhengqi);
-					if (res.zhengqi > standard.value.zhengqi) {
-						res.zqbad = true
-						res.zqsHeight = (standard.value.zhengqi / res.zhengqi) * 100 + '%'
-						res.zqrHeight = '100%'
-					} else if (res.zhengqi < standard.value.zqMin) {
-						res.zqgood = true
-						res.zqsHeight = '100%'
-						res.zqrHeight = (res.zhengqi / standard.value.zhengqi) * 100 + '%'
-					} else {
-						res.zqsHeight = '100%'
-						res.zqrHeight = (res.zhengqi / standard.value.zhengqi) * 100 + '%'
-					}
-
-					/** 鐢佃兘娑堣�� */
-					if (res.originWeight - res.yield <= 0) {
-						res.dian = standard.value.dian - 1.5
-					} else {
-						res.dian = (res.watt / (res.originWeight - res.yield)).toFixed(1)
-					}
-
-					if (res.dian > standard.value.dian) {
-						res.dnbad = true
-						res.dnsHeight = (standard.value.dian / res.dian) * 100 + '%'
-						res.dnrHeight = '100%'
-					} else if (res.dian < standard.value.dMin) {
-						res.dngood = true
-						res.dnsHeight = '100%'
-						res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%'
-					} else {
-						res.dnsHeight = '100%'
-						res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%'
-					}
-
-					//console.log('state:::fan::', res.state_fan, 'roller::', res.state_roller, 'windbox::', res.state_windbox)
-					//console.log('===========================')
-					//console.log("state:::state_windbox::", res.state_windbox);
-
-					/**鐘舵��/gif鍔ㄥ浘 */
-					//console.log("res",res);
-					//console.log("gif", statusGif);
-					if (!shangliaoFlag) {
-						if (res.orderStatus == 0) {
-							statusGif = 'zanting'
-							statusTxt = '鍑嗗'
-						} else if (res.orderStatus == 1) {
-							shangliaoFlag = true
-							statusGif = 'kaimen1'
-							statusTxt = '涓婃枡'
-							setTimeout(chaiwangban, 4000)
-						} else if (res.orderStatus == 2) {
-							statusTxt = res.level
-							statusGif = 'zanting'
-							if (res.level === '鍑嗗闃舵') {
-								console.log("鍑嗗闃舵" + statusGif);
-								statusGif = 'zanting'
-							} else if (res.level === '骞茬嚗闃舵' || res.level === '姝e湪骞茬嚗') {
-								statusGif = 'tmrefeng2'
-							} else if (res.level === '缈绘枡闃舵') {
-								statusGif = 'fanliao-N'
-							} else if (res.level === '鍑烘枡闃舵') {
-								statusGif = 'chuliao-N'
-							}
-							// if (res.state_fan == 1) {
-							// 	statusGif = 'tmrefeng2'
-							// 	statusTxt = '姝e湪骞茬嚗'
-							// }
-
-							// if (res.state_roller == 4) {
-							// 	statusGif = 'fanliao-N'
-							// 	statusTxt = '姝e湪缈绘枡'
-							// }
-
-							// if (res.state_roller == 5) {
-							// 	statusGif = 'chuliao-N'
-							// 	statusTxt = '姝e湪鍑烘枡'
-							// }
-
-							// if (res.state_windbox == 2 || res.state_windbox == 3) {
-							// 	statusGif = 'fengxiangsheng-1'
-							// 	statusTxt = '姝e湪骞茬嚗'
-							// }
-						} else if (res.orderStatus == 3) {
-							statusGif = 'zanting'
-							statusTxt = '鏆傚仠'
-						} else if (res.orderStatus == 4) {
-							statusGif = 'zanting'
-							statusTxt = '骞茬嚗瀹屾垚'
-						}
-					}
-
-
-					if (compareChart) {
-						compareChart.setOption({
-							yAxis: {
-								data: res.compEqpNum,
-							},
-							series: {
-								data: res.compEqpEffic,
-							},
-						})
-					}
-
-					res.herbImage = 'yaocai1.png'
-
-					if (res.herbName == '鐧借姳铔囪垖鑽�') {
-						res.herbImage = 'baihuasheshecao.png'
-					} else if (res.herbName == '绯ョɑ鏍�') {
-						res.herbImage = 'nuodaogen.png'
-					} else if (res.herbName == '娣緤钘�') {
-						res.herbImage = 'yinyanghuo.png'
-					} else if (res.herbName == '椹娇鑻�') {
-						res.herbImage = 'machixian.png'
-					} else if (res.herbName == '澧ㄦ棻鑾�') {
-						res.herbImage = 'mohanlian.png'
-					} else if (res.herbName == '妗戠櫧鐨�') {
-						res.herbImage = 'sangbaipi.png'
-					}
-
-					res.isError = false
-					if (res.fault) {
-						res.isError = true
-						res.errorMsg = res.fault
-					}
-
-					if (res.warning) {
-						res.isWarning = true
-						res.warnMsg = res.warning
-					}
-					
-
-					
-				} else {
-					res = {
-						mois: [],
-						gif: 'tmrefeng2',
-						herbImage: 'yaocai1.png',
-					}
-				}
-
-				//console.log(`output->res`, res)
-				realData.value = res
-			})
-		}
-	}
-
-	var move = true
-	function moveImage() {
-		if (move) {
-			position.value -= 0.3
-		} else {
-			position.value += 0.3
-		}
-		if (position.value < -240) {
-			move = false
-		}
-		if (position.value > -1) {
-			move = true
-		}
-	}
-
-	function back() {
-		router.back()
-	}
-
-	listAllEqp()
-	//queryEqp()
-	// DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛�
-	onMounted(() => {
-		Timer.value = setInterval(queryRealTime, 3000)
-		Timer2.value = setInterval(moveImage, 50)
-	})
-
-	onUnmounted(() => {
-		clearInterval(Timer.value)
-		clearInterval(Timer2.value)
-		Timer.value = null
-		Timer2.value = null
-	})
-</script>
-
-<style scoped>
-	.eqpBox {
-		height: 100%;
-	}
-	.eqpRow {
-	}
-	.eqpImage {
-		height: 1080px;
-		width: 1920px;
-		background-image: url(/src/assets/images/dry/bg.png);
-		background-repeat: no-repeat;
-		color: white;
-		/*background-position: 160px 280px; */
-		/* background-color: red; */
-		background-size: 120%;
-		padding: 10px;
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-	}
-
-	.leftEqp {
-		height: 1080px;
-		width: 1200px;
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-
-		/* background-color: white;
-		background-image: url(/src/assets/images/dry/shebei1.png);
-		background-repeat: no-repeat;
-		background-size: 125%;
-		border-radius: 10px;
-		background-position: -119px 293px; */
-	}
-
-	.leftTop {
-		height: 750px;
-		width: 850px;
-		display: flex;
-		justify-content: center;
-		align-content: flex-start;
-		background-image: url(/src/assets/images/dry/ganzaoji-x.png);
-		background-repeat: no-repeat;
-		background-size: 79%;
-		border-radius: 10px;
-		flex-wrap: wrap;
-		background-position: 85px 279px;
-	}
-	.leftMid {
-		width: 850px;
-		height: 300px;
-		/* border: 1px solid; */
-		margin-top: 10px;
-		border-radius: 10px;
-		/* background: white; */
-	}
-	.mainInfo {
-		line-height: 33px;
-		padding-left: 10px;
-		font-size: 30px;
-		color: white;
-	}
-	.subhead {
-		color: #a19f9c;
-		font-size: 16px;
-		padding-left: 10px;
-	}
-
-	.mainInfo2 {
-		line-height: 20px;
-		padding-left: 0px;
-		font-size: 16px;
-	}
-	.subhead2 {
-		color: #a19f9c;
-		font-size: 10px;
-		padding-left: 0px;
-	}
-	.zhengqi {
-		height: 180px;
-		width: 200px;
-		background-image: url(/src/assets/images/dry/liuliangji.png);
-		background-repeat: no-repeat;
-		background-size: 160px;
-		/* border-radius: 10px; */
-		background-position: 17px -6px;
-	}
-
-	.liuliangji {
-	}
-	.leftData {
-		height: 250px;
-		width: 120px;
-	}
-	.rightChart {
-		height: 270px;
-		width: 170px;
-		margin-top: -30px;
-	}
-	.leftTop0 {
-		height: 600px;
-		width: 848px;
-		display: flex;
-		justify-content: center;
-		align-content: flex-start;
-		flex-wrap: wrap;
-	}
-	.leftTop1 {
-		width: 180px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-	}
-	.leftTop2 {
-		width: 250px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-	}
-	.leftTop3 {
-		width: 300px;
-		height: 200px;
-		/* background-image: url(/src/assets/images/dry/fanliao.gif); */
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 300px;
-		border-radius: 50px;
-	}
-
-	.eqpStatus {
-		width: 848px;
-		height: 300px;
-
-
-	}
-	.rightInfo {
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-		height: 1060px;
-		width: 700px;
-	}
-
-	.rightTop {
-		display: flex;
-		height: 440px;
-		padding-left: 10px;
-	}
-	.rightTwo {
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.infoChart {
-		width: 340px;
-		height: 300px;
-		/* background: white; */
-		margin-left: 10px;
-		margin-top: 10px;
-		border-radius: 10px;
-	}
-	.chartTittle {
-		width: 340px;
-		height: 30px;
-		font-size: 16px;
-		display: flex;
-		justify-content: space-between;
-		padding: 15px 15px;
-	}
-	.chartInfo {
-		width: 60px;
-		height: 180px;
-	}
-
-	.compareBar {
-		width: 55px;
-		height: 140px;
-	}
-	.margintop-30 {
-		margin-top: -30px;
-	}
-
-	.barTop {
-		width: 55px;
-		height: 30px;
-	}
-	.barBack {
-		width: 30px;
-		height: 100px;
-		/* border: 1px solid black; */
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-end;
-	}
-	.barDiv {
-		width: 100%;
-
-		background-color: #1595ea;
-	}
-	.bad {
-		background-color: #973535;
-	}
-	.rightLabel {
-		width: 110px;
-		display: flex;
-		justify-content: space-between;
-	}
-	.label {
-		color: white;
-		text-align: center;
-		width: 50px;
-		border-radius: 4px;
-		height: 20px;
-		font-size: 10px;
-		line-height: 21px;
-	}
-	.good {
-		background-color: #0d6e24;
-	}
-
-	.mainInfo3 {
-		font-size: 24px;
-	}
-	.herbInfo {
-		width: 340px;
-		height: 510px;
-		color: #727272;
-	}
-
-	.curEqp {
-		width: 340px;
-		height: 170px;
-
-		/* background: white;
-		border-radius: 10px; */
-	}
-	.curHerb {
-		margin-top: 10px;
-		width: 340px;
-		height: 320px;
-		/* background: white;
-		border-radius: 10px; */
-
-		background-repeat: no-repeat;
-		background-size: 200px;
-		background-position: 0px 10px;
-	}
-	.tempMoisChart {
-		width: 690px;
-		height: 440px;
-		/* background: white; */
-
-		padding: 20px;
-		border-radius: 10px;
-	}
-	.topLeft {
-		margin: 20px 40px 60px 20px;
-		padding: 15px;
-		/* background: white; */
-		border-radius: 10px;
-		height: 325px;
-		width: 440px;
-		/* background-image: url(/src/assets/images/dry/yaocai.jpg); */
-		background-repeat: no-repeat;
-		background-size: 164px 132px;
-		background-position: 239px 65px;
-		display: flex;
-	}
-	.topMid {
-		margin: 20px 20px 60px 40px;
-		/* background: white; */
-		border-radius: 10px;
-		background-image: url(/src/assets/images/dry/fanliao.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 400px;
-		width: 400px;
-
-		padding: 20px;
-	}
-	.topRight {
-		margin: 20px 20px 60px 20px;
-		/* background: white; */
-		border-radius: 10px;
-		width: 700px;
-		padding: 20px;
-	}
-	.midLeft {
-		height: 450px;
-		width: 600px;
-		display: flex;
-		padding: 0 20px 20px 20px;
-	}
-	.midMid {
-		width: 500px;
-		padding-top: 50px;
-	}
-
-	.midRight {
-		background-image: url(/src/assets/images/dry/fengjixz.gif);
-		background-repeat: no-repeat;
-		background-position: 150px 260px;
-		background-size: 120px 120px;
-		width: 600px;
-	}
-
-	.shangJianTou {
-		margin-left: 140px;
-		width: 70px;
-		height: 100px;
-		background-image: url(/src/assets/images/dry/shangjiantoutou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 70px 100px;
-	}
-
-
-	.aiback {
-		background-image: url(/src/assets/images/dry/gif2.gif);
-		background-repeat: no-repeat;
-		background-size: 100% 100%;
-		opacity: 0.7;
-	}
-	.zoujiantou {
-		margin-left: 225px;
-		margin-top: 30px;
-		width: 100px;
-		height: 70px;
-		background-image: url(/src/assets/images/dry/zuojiantou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 100px 70px;
-	}
-	.fault {
-		padding: 10px;
-		height: 60px;
-		font-size: 26px;
-		width: 100%;
-		text-align: right;
-		color: red;
-	}
-	.eqpName {
-		padding: 20px;
-
-		height: 160px;
-	}
-
-	.formula {
-		display: flex;
-		width: 340px;
-		height: 60px;
-		padding: 0 20px;
-		justify-content: space-around;
-		justify-items: center;
-	}
-
-	.formulaItem {
-		display: flex;
-		justify-content: center;
-		width: 100px;
-		height: 40px;
-	}
-
-	.eqpInfoText {
-		font-size: 18px;
-		font-weight: bold;
-	}
-
-	:deep() .ant-slider-mark-text {
-		padding-left: 15px;
-		font-size: 10px;
-	}
-	:deep() .ant-slider-mark-text::before {
-		content: '';
-		display: block;
-		width: 6px;
-		height: 1px;
-		background-color: #1890ff;
-
-		position: absolute;
-		top: 10px;
-		left: 0px;
-	}
-
-	/* .aiProgress  :deep() .ant-progress-inner {
-		background: none;
-	} */
-	.aiProgress :deep() .ant-progress-text {
-		display: none;
-	}
-
-	.redProgress :deep() .ant-progress-bg {
-		background:#ce0000
-	}
-
-	:deep() .ant-progress-inner {
-		background:#191919
-	}
-	:deep() .ant-progress-text {
-		color: white;
-	}
-	:deep() .ant-slider-rail {
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-		background: linear-gradient(to top, #ce0000 0%, #ce0000 40%, #ce0000 75%, rgb(160, 160, 160) 100%);
-	}
-	:deep() .ant-slider-track {
-		background: rgb(216, 216, 216);
-
-		height: 20px;
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-	}
-	:deep() .ant-slider-track:hover {
-	}
-	:deep() .ant-slider-handle {
-		display: none;
-	}
-	:deep() .ant-slider-dot {
-		display: none;
-	}
-	:deep() .ant-slider-step {
-		width: 10px !important;
-	}
-	:deep() .ant-slider-step > :first-child {
-		display: block !important;
-		width: 30px !important;
-		height: 30px !important;
-		bottom: -26px !important;
-		left: -6px;
-		border: none;
-		background: #ce0000;
-	}
-	/* :deep() .progress {
-		padding: 15px 15px;
-
-		width: 360px;
-		display: flex;
-	} */
-	:deep() .ant-progress-bg {
-		height: 15px !important;
-	}
-	.outDiv {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-	}
-	.blingbling {
-		-webkit-animation: scaleout 2s infinite ease-in-out;
-		animation: scaleout 2s infinite ease-in-out;
-	}
-
-	.blingbling1 {
-		-webkit-transition: -webkit-transform 0.4s ease-in-out;
-   transition: transform 0.4s ease-in-out;
-		
-	}
-	.blingbling1:hover {
-		-webkit-transform: scale(1.2);
-   		transform: scale(1.2);
-	}
-	
-	.center {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-		align-items: center;
-		flex-wrap: wrap;
-		text-align: center;
-	}
-
-	.flex {
-		display: flex;
-	}
-	.centerText {
-		width: 100%;
-		text-align: center;
-	}
-
-	@-webkit-keyframes scaleout {
-		0% {
-			-webkit-transform: scale(1);
-		}
-
-		50% {
-			-webkit-transform: scale(1.2);
-			
-		}
-		100% {
-			-webkit-transform: scale(1);
-			
-		}
-	}
-
-	@keyframes scaleout {
-		0% {
-			transform: scale(1);
-			-webkit-transform: scale(1);
-		}
-
-		50% {
-			transform: scale(1.2);
-			-webkit-transform: scale(1.2);
-			
-		}
-		100% {
-			transform: scale(1);
-			-webkit-transform: scale(1);
-			
-		}
-	}
-	.timeProgress {
-		width: 260px;
-		height: 60px;
-		margin-left: 40px;
-		margin-top: 50px;
-	}
-
-	.aiProgress {
-		width: 260px;
-    height: 50px;
-    margin-left: 20px;
-    margin-top: 42px;
-	}
-	.leftLabel {
-		width: 50px;
-		margin-top: -10px;
-	}
-	.leftLabel2 {
-		width: 80px;
-	}
-	.aigif {
-		width: 100%; height: 100%; 
-		opacity: 0.7;
-		margin-top: -40px; 
-		background-image: url(/src/assets/images/dry/gif2.gif);
-		background-repeat: no-repeat;
-		background-size: 79%;
-	}
-</style>
diff --git a/src/views/dry/bigScreen/BigWorkShop.vue b/src/views/dry/bigScreen/BigWorkShop.vue
deleted file mode 100644
index c7cde21..0000000
--- a/src/views/dry/bigScreen/BigWorkShop.vue
+++ /dev/null
@@ -1,688 +0,0 @@
-<template>
-	<dv-full-screen-container>
-		<div class="fbg">
-			<div class="bgImage">
-				<div class="head">
-					<div style="width: 600px; height: 50px"> <dv-decoration-8 style="width: 500px; height: 50px" /></div>
-
-					<div class="title">
-						<span>{{ title }}</span>
-
-						<dv-decoration-5 :dur="20" style="margin-top: -40px; width: 700px; height: 80px" />
-					</div>
-					<div style="width: 600px; height: 50px; display: flex; justify-content: end">
-						<dv-decoration-8 :reverse="true" style="width: 500px; height: 50px"
-					/></div>
-				</div>
-				<div class="body">
-					<div class="humiture">
-						<div style="display: flex; width: 120px">
-							<Icon style="color: #ba9853" icon="mdi:home-temperature-outline" :size="28" />
-							&nbsp;
-							<div style="font-size: 20px; line-height: 26px"> {{ envTemp }} 鈩� </div>
-						</div>
-						<div style="display: flex">
-							<Icon style="color: #ba9853" icon="wi:humidity" :size="28" />
-							&nbsp;
-							<div style="font-size: 20px; line-height: 26px"> {{ envHum }} %rh </div>
-						</div>
-					</div>
-					<div class="feed">
-						<div style="width: 700px; margin-left: 50px; display: flex; flex-direction: column; height: 950px; justify-content: space-between">
-							<div style="display: flex; flex-wrap: wrap; justify-content: space-between">
-								<dv-border-box7 style="width: 210px; height: 100px; padding: 10px">
-									<div class="statistics putincolor">
-										<div class="stat_label font16"> 鎬绘姇鏂欓噺 </div>
-										<div class="stat_value">
-											{{ originWeight.toFixed(2) }}
-											<span class="font16"> Kg </span>
-										</div>
-										<div class="stat_avg">
-											<div> 棰勮浜ч噺 </div>
-											<div> {{ totalYield.toFixed(2) }} kg </div>
-										</div>
-									</div>
-								</dv-border-box7>
-								<dv-border-box7 style="width: 210px; height: 100px; padding: 10px">
-									<div class="statistics putincolor">
-										<div class="stat_label font16"> 鐢甸噺娑堣�� </div>
-										<div class="stat_value">
-											{{ watt.toFixed(2) }}
-											<span class="font16"> Kwh </span>
-										</div>
-										<div class="stat_avg">
-											<div> 骞冲潎鐢佃�� </div>
-											<div> {{wattAvg.toFixed(2)}} Kwh/kg </div>
-										</div>
-									</div>
-								</dv-border-box7>
-								<dv-border-box7 style="width: 210px; height: 100px; padding: 10px">
-									<div class="statistics putincolor">
-										<div class="stat_label font16"> 钂告苯娑堣�� </div>
-										<div class="stat_value">
-											{{ steam.toFixed(2) }}
-											<span class="font16"> m鲁 </span>
-										</div>
-										<div class="stat_avg">
-											<div> 骞冲潎姹借�� </div>
-											<div> {{steamAvg.toFixed(2)}} m鲁/kg </div>
-										</div>
-									</div>
-								</dv-border-box7>
-								<!-- <div class="statistics putincolor">
-									<div class="stat_label font16">棰勮浜ч噺</div>
-									<div class="stat_value">3000</div>
-									
-									<div class="font16">
-										<br/>
-										Kg
-									</div>
-								</div> -->
-							</div>
-
-							<div>
-								<!-- <div class="statistics electroncolor">
-								<div class="stat_label font16">鐢甸噺娑堣��</div>
-								<div class="stat_value">500</div>
-								<div class="font16">
-									<br/>
-									 Kwh
-								</div>
-								 
-							</div>
-							<div class="statistics steamcolor">
-								<div class="stat_label font16">钂告苯娑堣��</div>
-								<div class="stat_value">300</div>
-								<div class="font16">
-									<br/>
-									m鲁
-								</div>
-								 
-							</div>
-						
-							<div class="statistics electroncolor">
-								<div class="stat_label font16">骞冲潎鐢佃��</div>
-								<div class="stat_value">12</div>
-								<div class="font16">
-									<br/>
-									Kwh/kg
-								</div>
-								 
-							</div>
-							<div class="statistics steamcolor">
-								<div class="stat_label font16">骞冲潎姹借��</div>
-								<div class="stat_value">300</div>
-								<div class="font16">
-									<br/>
-									m鲁/kg
-								</div>
-								
-							</div> -->
-							</div>
-						</div>
-						<!-- <div style="padding-right: 100px;">
-							<div class="statistics">
-								<div class="stat_label font16">骞叉枡浜ч噺</div>
-								<div class="stat_value">300</div>
-								<div class="font16">
-									<br/>
-									kg
-								</div>
-							
-							</div>
-						</div> -->
-					</div>
-					<div class="up">
-						<div v-for="num in eqpNum" :key="num" :class="{ one: num === 1, two: num === 2, three: num === 3, four: num === 4 }">
-							<div class="eqpInfoup" @click="gotoeqp(num - 1)">
-								<div class="eqp-title">
-									<div class="herb_weight">
-										<div>{{ realTime.get(eqpCodes[num - 1])?.herbName || '鏆傛棤' }}</div>
-										<div>{{ realTime.get(eqpCodes[num - 1])?.originWeight || 0 }} Kg</div>
-									</div>
-									<!-- <div class="eqp-name">{{ eqpMap.get(eqpCodes[num - 1])?.name || '棰勭暀' }}</div> -->
-									<!-- <div class="process"> </div> -->
-									<Progress
-										:stroke-color="{
-											from: '#108ee9',
-											to: '#87d068',
-										}"
-										:percent="parseFloat(realTime.get(eqpCodes[num - 1])?.percent || '0')"
-										status="active"
-										trailColor="#2b2b2b2b"
-										:show-info="false"
-									/>
-									<div class="eqp-timer">
-										<div
-											><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="20" />
-											{{ realTime.get(eqpCodes[num - 1])?.trendVo?.moisture.toFixed(1) || '0' }} %
-										</div>
-										<div
-											><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="20" />
-											{{ realTime.get(eqpCodes[num - 1])?.trendVo?.bellowsTemp.toFixed(0) || '0' }} 鈩�
-										</div>
-										<div
-											><Icon style="color: rgb(134 207 106)" icon="gg:sand-clock" :size="20" />
-											{{ realTime.get(eqpCodes[num - 1])?.totalRemain || 0 }} min
-										</div>
-									</div>
-								</div>
-								<div class="eqp-info-up">
-									<!-- <div class="herb">
-										<div>{{ realTime.get(eqpCodes[num - 1])?.herbName || '鏆傛棤' }}</div>
-										
-									</div> -->
-								</div>
-								<!-- <div class="weight"><div class="herb">{{ realTime.get(eqpCodes[num - 1])?.originWeight || 0 }} Kg</div></div> -->
-
-								<div class="weight"
-									><div class="herb">
-										{{ showInfo(realTime.get(eqpCodes[num - 1])) }}
-									</div></div
-								>
-								<div class="water">
-									<div class="eqp_num">{{ num }}</div>
-									<!-- <div class="temp">
-										<div style="line-height: 28px"><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="28" /> </div>
-										<div class="font">
-											<span class="value"> {{ realTime.get(eqpCodes[num - 1])?.trendVo?.moisture || '0' }}</span> %
-										</div>
-									</div>
-									<div class="temp">
-										<div style="line-height: 28px"><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="30" /> </div>
-										<div class="font">
-											<span class="value">{{ realTime.get(eqpCodes[num - 1])?.trendVo?.bellowsTemp || '0' }} </span> 鈩�
-										</div>
-									</div> -->
-								</div>
-							</div>
-						</div>
-					</div>
-					<div class="down">
-						<div v-for="num in eqpNum" :key="num" :class="{ one: num === 1, two: num === 2, three: num === 3, four: num === 4 }">
-							<div class="eqpInfodown" @click="gotoeqp(num + 3)">
-								<!-- <div class="eqp-info-down">
-									<div class="herb">{{ realTime.get(eqpCodes[num + 3])?.herbName || '鏆傛棤' }}</div>
-								</div>
-								<div class="weight"><div class="herb">{{ realTime.get(eqpCodes[num + 3])?.originWeight || 0 }} Kg </div></div> -->
-								<div class="weight"
-									><div class="herb">{{ showInfo(realTime.get(eqpCodes[num + 3])) }}</div></div
-								>
-								<div class="water">
-									<div class="eqp_num">{{ num + 4 }}</div>
-									<!-- <div class="temp">
-										<div style="line-height: 28px">
-											<Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="28" />
-										</div>
-										<div class="font">
-											<span class="value">{{ realTime.get(eqpCodes[num + 3])?.trendVo?.moisture || '0' }}</span> %
-										</div>
-									</div>
-									<div class="temp">
-										<div style="line-height: 28px"><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="30" /> </div>
-										<div class="font">
-											<span class="value">{{ realTime.get(eqpCodes[num + 3])?.trendVo?.bellowsTemp || '0' }}</span> 鈩�
-										</div>
-									</div> -->
-								</div>
-
-								<div style="height: 40px"></div>
-								<div class="eqp-title">
-									<div class="herb_weight">
-										<div>{{ realTime.get(eqpCodes[num + 3])?.herbName || '鏆傛棤' }}</div>
-										<div>{{ realTime.get(eqpCodes[num + 3])?.originWeight || 0 }} Kg</div>
-									</div>
-
-									<Progress
-										:stroke-color="{
-											from: '#108ee9',
-											to: '#87d068',
-										}"
-										:percent="parseFloat(realTime.get(eqpCodes[num + 3])?.percent || '0')"
-										status="active"
-										trailColor="#2b2b2b2b"
-										:show-info="false"
-									/>
-									<!-- <div class="eqp-name">50%</div> -->
-									<div class="eqp-timer">
-										<div
-											><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="20" />
-											{{ realTime.get(eqpCodes[num + 3])?.trendVo?.moisture.toFixed(1) || '0' }} %
-										</div>
-										<div
-											><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="20" />
-											{{ realTime.get(eqpCodes[num + 3])?.trendVo?.bellowsTemp.toFixed(0) || '0' }} 鈩�
-										</div>
-										<!-- <div><Icon style="color: rgb(42 154 234)" icon="mdi:clock-outline" :size="20" />
-											 {{realTime.get(eqpCodes[num + 3])?.dryTime || 0}} min
-										</div> -->
-										<div
-											><Icon style="color: rgb(134 207 106)" icon="gg:sand-clock" :size="20" />
-											{{ realTime.get(eqpCodes[num + 3])?.totalRemain || 0 }} min
-										</div>
-									</div>
-								</div>
-							</div>
-						</div>
-					</div>
-
-					<div class="footer">
-						<div>{{ nowDate }}</div>
-						<div>{{ nowTime }}</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</dv-full-screen-container>
-</template>
-
-<script setup lang="ts">
-	import { Progress } from 'ant-design-vue'
-	import { onMounted, ref, onUnmounted } from 'vue'
-	import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index'
-	import { listAll } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { router } from '/@/router'
-	import { defHttp } from '/@/utils/http/axios'
-	import { useUserStore } from '/@/store/modules/user'
-	const eqpNum = ref(4)
-	const eqpMap = ref(new Map())
-	const eqpCodes = ref(['GM001', 'GM002', 'GM003', 'GM004', 'GM005', 'GM006', 'GM007', 'GM008'])
-	const eqps = ref([] as dryEquipment[])
-	const title = ref('鍏版郸鏅鸿兘骞茬嚗杞﹂棿')
-	const userStore = useUserStore()
-	const envHum = ref(0)
-	const envTemp = ref(0)
-	const originWeight = ref(0)
-	const totalYield = ref(0)
-	const dryReduce = ref(0)
-	const steam = ref(0)
-	const watt = ref(0)
-
-	const steamAvg = ref(0)
-	const wattAvg = ref(0)
-	console.log(userStore.dictItems.title)
-	userStore.dictItems.title?.forEach((element) => {
-		if (element.value === 'bigscreentitle') {
-			title.value = element.text
-		}
-	})
-	const Timer = ref()
-
-	const realTime = ref(new Map())
-	const nowTime = ref()
-	const nowDate = ref()
-
-	function listAllEqp() {
-		listAll({ enable: 'Y' })
-			.then((result) => {
-				console.log(`output->result`, result)
-				eqps.value = result
-
-				result.forEach((item) => {
-					eqpMap.value.set(item.code, item)
-				})
-				updateRealTime()
-			})
-			.catch((err) => {
-				console.log(`output->err`, err)
-			})
-	}
-
-	function updateRealTime() {
-		//console.log(`output->瀹氭椂鍒锋柊鏁版嵁`)
-
-		queryWorkShopStatistics()
-
-		eqps.value.forEach((item) => {
-			 queryRealTime(item)
-		})
-	}
-
-	function queryWorkShopStatistics() {
-		let tenantId = userStore.getTenant
-		defHttp.get({ url: '/dry/real/workshopStatistics', params: { tenantid: tenantId } }).then((res) => {
-			console.log(`output->res`, res)
-			steam.value = res.steam
-			watt.value = res.watt
-			envHum.value = res.envHum
-			envTemp.value = res.envTemp
-			originWeight.value = res.originWeight
-			totalYield.value = res.yield
-			dryReduce.value = res.reduce
-			if(res.reduce > 0) {
-				steamAvg.value = res.steam/res.reduce
-				wattAvg.value = res.watt/res.reduce
-			}
-		})
-	}
-
-	function queryRealTime(eqp: dryEquipment) {
-		let tenantId = userStore.getTenant
-		let eqpCode = eqp.code
-		let queryRealTimeUrl = '/dry/real/getRealTimeData'
-		defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-			if (res && res.trendVo) {
-				res.tempValue = [res.windTemp, 100]
-				res.totalRemain = res.remain
-				if (res.detailList) {
-					// 骞茬嚗鍓╀綑鏃堕棿=宸ュ崟棰勮鍓╀綑-锛堝綋鍓嶅共鐕ユ椂闂�-鏈�鍚庝竴娆¤褰曞共鐕ユ椂闂达級
-					res.totalRemain = res.remain - (res.dryTime - res.detailList[res.detailList.length - 1].totalTime)
-				}
-				if (res.totalRemain < 0) {
-					res.totalRemain = 0
-				}
-
-				res.percent = ((res.dryTime / (res.dryTime + res.totalRemain)) * 100).toFixed(2)
-			} else {
-				res = {
-					tempValue: [0, 100],
-					percent: 0,
-					mois: [],
-				}
-			}
-
-			realTime.value.set(eqp.code, res)
-		})
-	}
-	function gotoeqp(num) {
-		console.log('璺宠浆鏈哄彴', num)
-		if (num < eqpCodes.value.length) {
-			router.push({ path: '/bigEqp', query: { num: num } })
-		}
-	}
-
-	function getNowTime() {
-		var date = new Date()
-		nowDate.value =
-			date.getFullYear() +
-			'/' +
-			(date.getMonth() < 9 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) +
-			'/' +
-			(date.getDay() < 10 ? '0' + date.getDay() : date.getDay())
-		nowTime.value =
-			'' +
-			(date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) +
-			':' +
-			(date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes())
-	}
-
-	function showInfo(data) {
-		return data ? (data.fault ? data.fault : data.warning ? data.warning : data.level ? data.level : '绌洪棽') : '绌洪棽'
-	}
-
-	getNowTime()
-	listAllEqp()
-	onMounted(() => {
-		Timer.value = setInterval(updateRealTime, 3000)
-		setInterval(getNowTime, 10000)
-	})
-
-	onUnmounted(() => {
-		clearInterval(Timer.value)
-		Timer.value = null
-	})
-</script>
-
-<style scoped>
-	.fbg {
-		height: 1080px;
-		width: 1920px;
-		background-image: url(/src/assets/images/dry/bg/bg5.png);
-		background-repeat: no-repeat;
-	}
-	.bgImage {
-		height: 1080px;
-		width: 1920px;
-		background-image: url(/src/assets/images/dry/bg/wksp2.png);
-		background-repeat: no-repeat;
-		background-size: 100%;
-		background-position: 0px 50px;
-	}
-
-	.head {
-		display: flex;
-		align-content: center;
-		justify-content: center;
-	}
-
-	.body {
-		height: 980px;
-		width: 100%;
-		margin-top: -100px;
-		font-size: 20px;
-	}
-	.title {
-		height: 200px;
-		padding: 20px;
-		font-size: 30px;
-		font-weight: bold;
-		text-align: center;
-		color: white;
-	}
-
-	.humiture {
-		height: 0px;
-		justify-content: center;
-		color: white;
-		display: flex;
-	}
-
-	.feed {
-		display: flex;
-		height: 0px;
-		color: gray;
-		padding-top: 20px;
-		justify-content: space-between;
-	}
-
-	.up {
-		padding-left: 110px;
-		padding-top: 00px;
-		display: flex;
-
-		align-content: center;
-		justify-content: flex-start;
-	}
-	.down {
-		padding-left: 402px;
-		margin-top: -367px;
-		display: flex;
-
-		align-content: center;
-		justify-content: flex-start;
-	}
-	.eqpInfoup {
-		width: 300px;
-		height: 400px;
-		margin: -50px 31px;
-		display: flex;
-		flex-direction: column;
-	}
-
-	.eqpInfodown {
-		width: 300px;
-		height: 430px;
-		margin: 0 31px;
-		padding-top: 132px;
-		display: flex;
-		flex-direction: column;
-		justify-content: flex-start;
-	}
-
-	.one {
-		margin-top: 278px;
-	}
-
-	.two {
-		margin-top: 219px;
-	}
-
-	.three {
-		margin-top: 160px;
-	}
-
-	.four {
-		margin-top: 101px;
-	}
-
-	.eqp-title {
-		height: 125px;
-
-		width: 100%;
-
-		padding: 10px 20px;
-	}
-
-	.eqp-name {
-		line-height: 30px;
-		text-align: center;
-		color: white;
-		margin-top: -30px;
-	}
-
-	.eqp-timer {
-		line-height: 30px;
-		text-align: center;
-		color: white;
-		margin-top: 6px;
-		justify-content: space-between;
-		display: flex;
-	}
-
-	.eqp-name-down {
-		line-height: 40px;
-		text-align: center;
-		color: white;
-	}
-
-	.process {
-		width: 50%;
-		height: 100%;
-		overflow: hidden;
-		border-radius: 20px;
-		background: #3f4c6b;
-	}
-
-	.eqp-info-up {
-		flex: 1;
-		padding-top: 108px;
-		display: flex;
-	}
-
-	.weight {
-		flex: 1;
-		display: flex;
-		font-size: 20px;
-	}
-
-	.eqp-info-down {
-		flex: 1;
-		padding-top: 70px;
-		display: flex;
-	}
-
-	.herb {
-		height: 32px;
-		background: #3f4c6b;
-		color: white;
-		line-height: 30px;
-		padding: 0 10px;
-	}
-	.water {
-		height: 120px;
-		width: 110px;
-		margin-left: 200px;
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.temp {
-		display: flex;
-	}
-	.font {
-		line-height: 26px;
-	}
-
-	.footer {
-		height: 160px;
-		display: flex;
-		padding: 10px 20px;
-		font-size: 30px;
-		flex-direction: column-reverse;
-		align-items: flex-end;
-		color: white;
-		line-height: 40px;
-		margin-top: -150px;
-	}
-	:deep() .progress {
-		padding: 25px 25px;
-
-		width: 360px;
-		display: flex;
-	}
-	:deep() .ant-progress-bg {
-		height: 25px !important;
-	}
-	:deep() .ant-progress-inner {
-		background-color: rgb(197 197 197 / 84%) !important;
-	}
-
-	.statistics {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		flex-wrap: wrap;
-	}
-	.stat_label {
-		width: 45px;
-	}
-
-	.stat_value {
-		font-size: 28px;
-	}
-
-	.herb_weight {
-		padding: 0 10px;
-		color: white;
-		display: flex;
-		justify-content: space-between;
-	}
-	.eqp_num {
-		font-weight: bold;
-		width: 40px;
-		height: 40px;
-		background: #a0782e;
-		border-radius: 50px;
-		/* text-align: center; */
-		font-size: 23px;
-		color: white;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-	}
-
-	.putincolor {
-		color: antiquewhite;
-	}
-
-	.electroncolor {
-		color: aquamarine;
-	}
-
-	.steamcolor {
-		color: sandybrown;
-	}
-	.font16 {
-		font-size: 16px;
-	}
-	.stat_avg {
-		width: 100%;
-		font-size: 16px;
-		display: flex;
-		color: rgb(176, 176, 176);
-		justify-content: space-between;
-		border-top: 1px solid;
-		margin-top: 6px;
-	}
-</style>
diff --git a/src/views/dry/bigScreen/BigWorkShop1.vue b/src/views/dry/bigScreen/BigWorkShop1.vue
deleted file mode 100644
index 1f6589e..0000000
--- a/src/views/dry/bigScreen/BigWorkShop1.vue
+++ /dev/null
@@ -1,668 +0,0 @@
-<template>
-	<dv-full-screen-container>
-		<div class="fbg">
-			<div class="bgImage">
-				<div class="head">
-					<div style="width: 600px; height: 50px"> <dv-decoration-8 style="width: 500px; height: 50px" /></div>
-
-					<div class="title">
-						<span>{{ title }}</span>
-
-						<dv-decoration-5 :dur="20" style="margin-top: -40px; width: 700px; height: 80px" />
-					</div>
-					<div style="width: 600px; height: 50px; display: flex; justify-content: end">
-						<dv-decoration-8 :reverse="true" style="width: 500px; height: 50px"
-					/></div>
-				</div>
-				<div class="body">
-					<div class="humiture">
-						<div style="display: flex; width: 120px">
-							<Icon style="color: #ba9853" icon="mdi:home-temperature-outline" :size="28" />
-							&nbsp;
-							<div style="font-size: 20px; line-height: 26px"> 26 鈩� </div>
-						</div>
-						<div style="display: flex">
-							<Icon style="color: #ba9853" icon="wi:humidity" :size="28" />
-							&nbsp;
-							<div style="font-size: 20px; line-height: 26px"> 53 %rh </div>
-						</div>
-					</div>
-					<div class="feed">
-						<div style="width: 700px; margin-left: 50px; display: flex; flex-direction: column; height: 950px; justify-content: space-between;">
-
-							<div style="display: flex; flex-wrap: wrap; justify-content: space-between;">
-								<dv-border-box7 style="width: 210px; height: 100px; padding:10px">
-									<div class="statistics putincolor">
-										<div class="stat_label font16">
-											鎬绘姇鏂欓噺
-										</div>
-										<div class="stat_value">
-											5066 
-											<span class="font16">
-											Kg
-										</span>
-										</div> 
-										<div class="stat_avg">
-											<div>
-												棰勮浜ч噺
-											</div>	
-											<div>
-												2321kg
-											</div> 
-										</div>
-									</div>
-								</dv-border-box7>
-								<dv-border-box7 style="width: 210px; height: 100px; padding:10px">
-									<div class="statistics putincolor">
-										<div class="stat_label font16">
-											鐢甸噺娑堣��
-										</div>
-										<div class="stat_value">
-											462 
-											<span class="font16">
-												Kwh
-										</span>
-										</div> 
-										<div class="stat_avg">
-											<div>
-												骞冲潎鐢佃��
-											</div>	
-											<div>
-												13 Kwh/kg
-											</div> 
-										</div>
-									</div>
-								</dv-border-box7>
-								<dv-border-box7 style="width: 210px; height: 100px; padding:10px">
-									<div class="statistics putincolor">
-										<div class="stat_label font16">
-											钂告苯娑堣��
-										</div>
-										<div class="stat_value">
-											683 
-											<span class="font16">
-												m鲁
-										</span>
-										</div> 
-										<div class="stat_avg">
-											<div>
-												骞冲潎姹借��
-											</div>	
-											<div>
-												23 m鲁
-											</div> 
-										</div>
-									</div>
-								</dv-border-box7>
-								<!-- <div class="statistics putincolor">
-									<div class="stat_label font16">棰勮浜ч噺</div>
-									<div class="stat_value">3000</div>
-									
-									<div class="font16">
-										<br/>
-										Kg
-									</div>
-								</div> -->
-							</div>
-							
-							<div>
-							<!-- <div class="statistics electroncolor">
-								<div class="stat_label font16">鐢甸噺娑堣��</div>
-								<div class="stat_value">500</div>
-								<div class="font16">
-									<br/>
-									 Kwh
-								</div>
-								 
-							</div>
-							<div class="statistics steamcolor">
-								<div class="stat_label font16">钂告苯娑堣��</div>
-								<div class="stat_value">300</div>
-								<div class="font16">
-									<br/>
-									m鲁
-								</div>
-								 
-							</div>
-						
-							<div class="statistics electroncolor">
-								<div class="stat_label font16">骞冲潎鐢佃��</div>
-								<div class="stat_value">12</div>
-								<div class="font16">
-									<br/>
-									Kwh/kg
-								</div>
-								 
-							</div>
-							<div class="statistics steamcolor">
-								<div class="stat_label font16">骞冲潎姹借��</div>
-								<div class="stat_value">300</div>
-								<div class="font16">
-									<br/>
-									m鲁/kg
-								</div>
-								
-							</div> -->
-							</div>
-						
-							
-						</div>
-						<!-- <div style="padding-right: 100px;">
-							<div class="statistics">
-								<div class="stat_label font16">骞叉枡浜ч噺</div>
-								<div class="stat_value">300</div>
-								<div class="font16">
-									<br/>
-									kg
-								</div>
-							
-							</div>
-						</div> -->
-						
-						
-					</div>
-					<div class="up">
-						<div v-for="num in eqpNum" :key="num" :class="{ one: num === 1, two: num === 2, three: num === 3, four: num === 4 }">
-							<div class="eqpInfoup" @click="gotoeqp(num - 1)">
-								<div class="eqp-title">
-									<div class="herb_weight">
-										<div>{{ realTime.get(eqpCodes[num - 1])?.herbName || '鏆傛棤' }}</div>
-										<div>{{ realTime.get(eqpCodes[num - 1])?.originWeight || 0 }} Kg</div>
-									</div>
-									<!-- <div class="eqp-name">{{ eqpMap.get(eqpCodes[num - 1])?.name || '棰勭暀' }}</div> -->
-									<!-- <div class="process"> </div> -->
-									<Progress
-										:stroke-color="{
-											from: '#108ee9',
-											to: '#87d068',
-										}"
-										:percent="parseFloat(realTime.get(eqpCodes[num - 1])?.percent || '0')"
-										status="active"
-										trailColor="#2b2b2b2b"
-										:show-info="false"
-									/>
-									<div class="eqp-timer">
-										<div><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="20" />
-											{{ realTime.get(eqpCodes[num - 1])?.trendVo?.moisture.toFixed(1) || '0' }} %
-										</div>
-										<div><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="20" />
-											 {{realTime.get(eqpCodes[num - 1])?.trendVo?.bellowsTemp.toFixed(0) || '0'}} 鈩�
-										</div>
-										<div><Icon style="color: rgb(134 207 106)" icon="gg:sand-clock" :size="20" /> 
-											{{ realTime.get(eqpCodes[num - 1])?.totalRemain||0}} min
-										</div>
-									</div>
-								</div>
-								<div class="eqp-info-up">
-									<!-- <div class="herb">
-										<div>{{ realTime.get(eqpCodes[num - 1])?.herbName || '鏆傛棤' }}</div>
-										
-									</div> -->
-									
-								</div>
-								<!-- <div class="weight"><div class="herb">{{ realTime.get(eqpCodes[num - 1])?.originWeight || 0 }} Kg</div></div> -->
-
-								<div class="weight"><div class="herb">
-									{{ showInfo(realTime.get(eqpCodes[num - 1])) }}
-								</div></div>
-								<div class="water">
-									<div class="eqp_num">{{ num }}</div>
-									<!-- <div class="temp">
-										<div style="line-height: 28px"><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="28" /> </div>
-										<div class="font">
-											<span class="value"> {{ realTime.get(eqpCodes[num - 1])?.trendVo?.moisture || '0' }}</span> %
-										</div>
-									</div>
-									<div class="temp">
-										<div style="line-height: 28px"><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="30" /> </div>
-										<div class="font">
-											<span class="value">{{ realTime.get(eqpCodes[num - 1])?.trendVo?.bellowsTemp || '0' }} </span> 鈩�
-										</div>
-									</div> -->
-								</div>
-							</div>
-						</div>
-					</div>
-					<div class="down">
-						<div v-for="num in eqpNum" :key="num" :class="{ one: num === 1, two: num === 2, three: num === 3, four: num === 4 }">
-							<div class="eqpInfodown" @click="gotoeqp(num + 3)">
-								<!-- <div class="eqp-info-down">
-									<div class="herb">{{ realTime.get(eqpCodes[num + 3])?.herbName || '鏆傛棤' }}</div>
-								</div>
-								<div class="weight"><div class="herb">{{ realTime.get(eqpCodes[num + 3])?.originWeight || 0 }} Kg </div></div> -->
-								<div class="weight"><div class="herb">{{ showInfo(realTime.get(eqpCodes[num + 3])) }}</div></div>
-								<div class="water">
-									<div class="eqp_num">{{ num + 4 }}</div>
-									<!-- <div class="temp">
-										<div style="line-height: 28px">
-											<Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="28" />
-										</div>
-										<div class="font">
-											<span class="value">{{ realTime.get(eqpCodes[num + 3])?.trendVo?.moisture || '0' }}</span> %
-										</div>
-									</div>
-									<div class="temp">
-										<div style="line-height: 28px"><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="30" /> </div>
-										<div class="font">
-											<span class="value">{{ realTime.get(eqpCodes[num + 3])?.trendVo?.bellowsTemp || '0' }}</span> 鈩�
-										</div>
-									</div> -->
-								</div>
-
-								<div style="height: 40px"></div>
-								<div class="eqp-title">
-									<div class="herb_weight">
-										<div>{{ realTime.get(eqpCodes[num + 3])?.herbName || '鏆傛棤' }}</div>
-										<div>{{ realTime.get(eqpCodes[num + 3])?.originWeight || 0 }} Kg</div>
-									</div>
-									
-									<Progress
-										:stroke-color="{
-											from: '#108ee9',
-											to: '#87d068',
-										}"
-										:percent="parseFloat(realTime.get(eqpCodes[num + 3])?.percent || '0')"
-										status="active"
-										trailColor="#2b2b2b2b"
-										:show-info="false"
-									/>
-									<!-- <div class="eqp-name">50%</div> -->
-									<div class="eqp-timer">
-										<div><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="20" />
-											{{ realTime.get(eqpCodes[num + 3])?.trendVo?.moisture.toFixed(1) || '0' }} %
-										</div>
-										<div><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="20" />
-											 {{realTime.get(eqpCodes[num + 3])?.trendVo?.bellowsTemp.toFixed(0) || '0'}} 鈩�
-										</div>
-										<!-- <div><Icon style="color: rgb(42 154 234)" icon="mdi:clock-outline" :size="20" />
-											 {{realTime.get(eqpCodes[num + 3])?.dryTime || 0}} min
-										</div> -->
-										<div><Icon style="color: rgb(134 207 106)" icon="gg:sand-clock" :size="20" /> 
-											{{ realTime.get(eqpCodes[num + 3])?.totalRemain||0}} min
-										</div>
-									</div>
-								</div>
-							</div>
-						</div>
-					</div>
-					<div class="footer">
-						
-						<div >{{ nowDate }}</div> 
-						<div >{{ nowTime }}</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</dv-full-screen-container>
-</template>
-
-<script setup lang="ts">
-	import { Progress } from 'ant-design-vue'
-	import { onMounted, ref, onUnmounted } from 'vue'
-	import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index'
-	import { listAll } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { router } from '/@/router'
-	import { defHttp } from '/@/utils/http/axios'
-	import { useUserStore } from '/@/store/modules/user'
-	const eqpNum = ref(4)
-	const eqpMap = ref(new Map())
-	const eqpCodes = ref(['GM001', 'GM002', 'GM003', 'GM004', 'GM005', 'GM006', 'GM007', 'GM008'])
-	const eqps = ref([] as dryEquipment[])
-	const title = ref("鍏版郸鏅鸿兘骞茬嚗杞﹂棿")
-	const userStore = useUserStore()
-	console.log(userStore.dictItems.title)
-	userStore.dictItems.title?.forEach(element => {
-		if (element.value === "bigscreentitle") {
-			title.value = element.text
-		}
-		
-	});
-	const Timer = ref()
-
-	const realTime = ref(new Map())
-	const nowTime = ref()
-	const nowDate = ref()
-
-
-	function listAllEqp() {
-		listAll({ enable: 'Y' })
-			.then((result) => {
-				console.log(`output->result`, result)
-				eqps.value = result
-
-				result.forEach((item) => {
-					eqpMap.value.set(item.code, item)
-				})
-				updateRealTime()
-			})
-			.catch((err) => {
-				console.log(`output->err`, err)
-			})
-	}
-
-	function updateRealTime() {
-		//console.log(`output->瀹氭椂鍒锋柊鏁版嵁`)
-		eqps.value.forEach((item) => {
-			queryRealTime(item)
-		})
-	}
-
-	function queryRealTime(eqp: dryEquipment) {
-		
-		let tenantId = userStore.getTenant
-		let eqpCode = eqp.code
-		let queryRealTimeUrl = '/dry/real/getRealTimeData'
-		defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-			//console.log(`output->res`, res)
-			if (res && res.trendVo) {
-				res.tempValue = [res.windTemp, 100]
-				res.totalRemain = res.remain
-				if (res.detailList) {
-					// 骞茬嚗鍓╀綑鏃堕棿=宸ュ崟棰勮鍓╀綑-锛堝綋鍓嶅共鐕ユ椂闂�-鏈�鍚庝竴娆¤褰曞共鐕ユ椂闂达級 
-					res.totalRemain = res.remain-(res.dryTime-res.detailList[res.detailList.length - 1].totalTime)
-				}
-				if(res.totalRemain < 0) {
-					res.totalRemain = 0
-				}
-				
-				res.percent = ((res.dryTime / (res.dryTime + res.totalRemain)) * 100).toFixed(2)
-			} else {
-				res = {
-					tempValue: [0, 100],
-					percent: 0,
-					mois: [],
-				}
-			}
-
-			realTime.value.set(eqp.code, res)
-		})
-	}
-	function gotoeqp(num) {
-		console.log('璺宠浆鏈哄彴',num);
-		if (num < eqpCodes.value.length) {
-			router.push({ path: '/bigEqp', query: { num: num } })
-		}
-	}
-
-	function getNowTime() {
-		var date = new Date()
-		nowDate.value = (date.getFullYear()) + "/" + (date.getMonth()< 9? "0" + (date.getMonth() + 1): date.getMonth() + 1) + "/" + (date.getDay() < 10? "0" + date.getDay() : date.getDay())
-		nowTime.value = "" + (date.getHours()<10? "0" + date.getHours() :  date.getHours())  + ":" + (date.getMinutes()< 10? "0" + date.getMinutes(): date.getMinutes())
-		//console.log("鑾峰彇褰撳墠鏃堕棿锛�");
-	}
-
-	function showInfo(data) {
-		return data?data.fault?data.fault:data.warning?data.warning:data.level?data.level:'绌洪棽':'绌洪棽'
-	}
-
-	getNowTime()
-	listAllEqp()
-	onMounted(() => {
-		Timer.value = setInterval(updateRealTime, 3000)
-		setInterval(getNowTime,10000)
-	})
-
-	onUnmounted(() => {
-		clearInterval(Timer.value)
-		Timer.value = null
-	})
-</script>
-
-<style scoped>
-	.fbg {
-		height: 1080px;
-		width: 1920px;
-		background-image: url(/src/assets/images/dry/bg/wkshopp.png);
-		background-repeat: no-repeat;
-	}
-	.bgImage {
-		height: 1080px;
-		width: 1920px;
-		
-	}
-
-	.head {
-		display: flex;
-		align-content: center;
-		justify-content: center;
-	}
-
-	.body {
-		height: 980px;
-		width: 100%;
-		margin-top: -100px;
-		font-size: 20px;
-	}
-	.title {
-		height: 200px;
-		padding: 20px;
-		font-size: 30px;
-		font-weight: bold;
-		text-align: center;
-		color: white;
-	}
-
-	.humiture {
-		height: 0px;
-		justify-content: center;
-		color: white;
-		display: flex;
-	}
-
-	.feed {
-		display: flex;
-		height: 0px;
-		color: gray;
-		padding-top: 20px;
-		justify-content: space-between;
-	}
-
-	.up {
-		padding-left: 0px;
-		padding-top: 00px;
-		display: flex;
-
-		align-content: center;
-		justify-content: flex-start;
-	}
-	.down {
-		padding-left: 402px;
-		margin-top: -246px;
-		display: flex;
-
-		align-content: center;
-		justify-content: flex-start;
-	}
-	.eqpInfoup {
-		width: 300px;
-		height: 400px;
-		margin: -50px 31px;
-		display: flex;
-		flex-direction: column;
-	}
-
-	.eqpInfodown {
-		width: 300px;
-		height: 430px;
-		margin: 0 31px;
-		padding-top: 132px;
-		display: flex;
-		flex-direction: column;
-		justify-content: flex-start;
-	}
-
-	.one {
-		margin-top: 227px;
-	}
-
-	.two {
-		margin-top: 183px;
-	}
-
-	.three {
-		margin-top: 132px;
-	}
-
-	.four {
-		margin-top: 69px;
-	}
-
-	.eqp-title {
-	    height: 125px;
-
-    width: 100%;
-   
-    padding: 10px 20px;
-	}
-
-	.eqp-name {
-		line-height: 30px;
-		text-align: center;
-		color: white;
-		margin-top: -30px;
-	}
-
-	.eqp-timer {
-		line-height: 30px;
-		text-align: center;
-		color: white;
-		margin-top: 6px;
-		justify-content: space-between;
-    display: flex;
-	}
-
-	.eqp-name-down {
-		line-height: 40px;
-		text-align: center;
-		color: white;
-	}
-
-	.process {
-		width: 50%;
-		height: 100%;
-		overflow: hidden;
-		border-radius: 20px;
-		background: #3f4c6b;
-	}
-
-	.eqp-info-up {
-		flex: 1;
-		padding-top: 108px;
-		display: flex;
-	}
-
-	.weight {
-		flex: 1;
-		display: flex;
-		font-size: 20px;
-	}
-
-	.eqp-info-down {
-		flex: 1;
-		padding-top: 70px;
-		display: flex;
-	}
-
-	.herb {
-		height: 32px;
-		background: #3f4c6b;
-		color: white;
-		line-height: 30px;
-		padding: 0 10px;
-	}
-	.water {
-		height: 120px;
-		width: 110px;
-		margin-left: 200px;
-		display: flex;
-		flex-wrap: wrap; 
-	}
-
-	.temp {
-		display: flex;
-	}
-	.font {
-		line-height: 26px;
-	}
-
-
-	.footer {
-		height: 160px;
-		display: flex;
-		padding: 10px 20px;
-		font-size: 30px;
-		flex-direction: column-reverse;
-		align-items: flex-end;
-		color: white;
-		line-height: 40px;
-		margin-top: -150px;
-
-	}
-	:deep() .progress {
-		padding: 25px 25px;
-
-		width: 360px;
-		display: flex;
-	}
-	:deep() .ant-progress-bg {
-		height: 25px !important;
-	}
-	:deep() .ant-progress-inner {
-		background-color: rgb(197 197 197 / 84%) !important;
-	}
-
-	.statistics {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		flex-wrap: wrap;
-		
-	}
-	.stat_label {
-		width:45px
-	}
- 
-	.stat_value {
-		font-size: 32px
-	}
-
-	.herb_weight {
-		padding: 0 10px;
-		color: white;
-		display: flex;
-		justify-content: space-between;
-	}
-	.eqp_num {
-		font-weight: bold;
-    width: 40px;
-    height: 40px;
-    background: #a0782e;
-    border-radius: 50px;
-    /* text-align: center; */
-    font-size: 23px;
-    color: white;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-	}
-
-	.putincolor {
-		color: antiquewhite;
-	}
-
-	.electroncolor {
-		color: aquamarine;
-	}
-
-	.steamcolor {
-		color: sandybrown
-	}
-	.font16 {
-		font-size: 16px;
-	}
-	.stat_avg {
-		width: 100%; font-size: 16px; display: flex; color: rgb(176, 176, 176); justify-content: space-between; border-top: 1px solid;
-		margin-top: 6px;
-	}
-</style>
diff --git a/src/views/dry/bigScreen/BigWorkShop2.vue b/src/views/dry/bigScreen/BigWorkShop2.vue
deleted file mode 100644
index b002af8..0000000
--- a/src/views/dry/bigScreen/BigWorkShop2.vue
+++ /dev/null
@@ -1,753 +0,0 @@
-<template>
-	<dv-full-screen-container>
-		<div class="fbg">
-			<div class="bgImage">
-				<div class="head">
-					<div style="width: 600px; height: 50px"> <dv-decoration-8 style="width: 500px; height: 50px" /></div>
-
-					<div class="title">
-						<span>{{ title }}</span>
-
-						<dv-decoration-5 :dur="20" style="margin-top: -40px; width: 700px; height: 80px" />
-					</div>
-					<div style="width: 600px; height: 50px; display: flex; justify-content: end">
-						<dv-decoration-8 :reverse="true" style="width: 500px; height: 50px"
-					/></div>
-				</div>
-				<div class="body">
-					<div class="humiture">
-						<div style="display: flex; width: 120px">
-							<Icon style="color: #ba9853" icon="mdi:home-temperature-outline" :size="28" />
-							&nbsp;
-							<div style="font-size: 20px; line-height: 26px"> 26 鈩� </div>
-						</div>
-						<div style="display: flex">
-							<Icon style="color: #ba9853" icon="wi:humidity" :size="28" />
-							&nbsp;
-							<div style="font-size: 20px; line-height: 26px"> 53 %rh </div>
-						</div>
-					</div>
-					<div class="feed">
-						<div style="width: 700px; margin-left: 50px; display: flex; flex-direction: column; height: 950px; justify-content: space-between;">
-
-							<div style="display: flex; flex-wrap: wrap; justify-content: space-between;">
-								<dv-border-box7 style="width: 210px; height: 100px; padding:10px">
-									<div class="statistics putincolor">
-										<div class="stat_label font16">
-											鎬绘姇鏂欓噺
-										</div>
-										<div class="stat_value">
-											5066 
-											<span class="font16">
-											Kg
-										</span>
-										</div> 
-										<div class="stat_avg">
-											<div>
-												棰勮浜ч噺
-											</div>	
-											<div>
-												2321kg
-											</div> 
-										</div>
-									</div>
-								</dv-border-box7>
-								<dv-border-box7 style="width: 210px; height: 100px; padding:10px">
-									<div class="statistics putincolor">
-										<div class="stat_label font16">
-											鐢甸噺娑堣��
-										</div>
-										<div class="stat_value">
-											462 
-											<span class="font16">
-												Kwh
-										</span>
-										</div> 
-										<div class="stat_avg">
-											<div>
-												骞冲潎鐢佃��
-											</div>	
-											<div>
-												13 Kwh/kg
-											</div> 
-										</div>
-									</div>
-								</dv-border-box7>
-								<dv-border-box7 style="width: 210px; height: 100px; padding:10px">
-									<div class="statistics putincolor">
-										<div class="stat_label font16">
-											钂告苯娑堣��
-										</div>
-										<div class="stat_value">
-											683 
-											<span class="font16">
-												m鲁
-										</span>
-										</div> 
-										<div class="stat_avg">
-											<div>
-												骞冲潎姹借��
-											</div>	
-											<div>
-												23 m鲁
-											</div> 
-										</div>
-									</div>
-								</dv-border-box7>
-								<!-- <div class="statistics putincolor">
-									<div class="stat_label font16">棰勮浜ч噺</div>
-									<div class="stat_value">3000</div>
-									
-									<div class="font16">
-										<br/>
-										Kg
-									</div>
-								</div> -->
-							</div>
-							
-							<div>
-							<!-- <div class="statistics electroncolor">
-								<div class="stat_label font16">鐢甸噺娑堣��</div>
-								<div class="stat_value">500</div>
-								<div class="font16">
-									<br/>
-									 Kwh
-								</div>
-								 
-							</div>
-							<div class="statistics steamcolor">
-								<div class="stat_label font16">钂告苯娑堣��</div>
-								<div class="stat_value">300</div>
-								<div class="font16">
-									<br/>
-									m鲁
-								</div>
-								 
-							</div>
-						
-							<div class="statistics electroncolor">
-								<div class="stat_label font16">骞冲潎鐢佃��</div>
-								<div class="stat_value">12</div>
-								<div class="font16">
-									<br/>
-									Kwh/kg
-								</div>
-								 
-							</div>
-							<div class="statistics steamcolor">
-								<div class="stat_label font16">骞冲潎姹借��</div>
-								<div class="stat_value">300</div>
-								<div class="font16">
-									<br/>
-									m鲁/kg
-								</div>
-								
-							</div> -->
-							</div>
-						
-							
-						</div>
-						<!-- <div style="padding-right: 100px;">
-							<div class="statistics">
-								<div class="stat_label font16">骞叉枡浜ч噺</div>
-								<div class="stat_value">300</div>
-								<div class="font16">
-									<br/>
-									kg
-								</div>
-							
-							</div>
-						</div> -->
-						
-						
-					</div>
-					<div class="up">
-						<div v-for="num in eqpNum" :key="num" :class="{ one: num === 1, two: num === 2, three: num === 3, four: num === 4 }">
-							<div class="eqpInfoup" @click="gotoeqp(num - 1)">
-								<div class="eqp-title">
-									<div class="herb_weight">
-										<div>{{ realTime.get(eqpCodes[num - 1])?.herbName || '鏆傛棤' }}</div>
-										<div>{{ realTime.get(eqpCodes[num - 1])?.originWeight || 0 }} Kg</div>
-									</div>
-									<!-- <div class="eqp-name">{{ eqpMap.get(eqpCodes[num - 1])?.name || '棰勭暀' }}</div> -->
-									<!-- <div class="process"> </div> -->
-									<Progress
-										:stroke-color="{
-											from: '#108ee9',
-											to: '#87d068',
-										}"
-										:percent="parseFloat(realTime.get(eqpCodes[num - 1])?.percent || '0')"
-										status="active"
-										trailColor="#2b2b2b2b"
-										:show-info="false"
-									/>
-									<div class="eqp-timer">
-										<div><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="20" />
-											{{ realTime.get(eqpCodes[num - 1])?.trendVo?.moisture.toFixed(1) || '0' }} %
-										</div>
-										<div><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="20" />
-											 {{realTime.get(eqpCodes[num - 1])?.trendVo?.bellowsTemp.toFixed(0) || '0'}} 鈩�
-										</div>
-										<div><Icon style="color: rgb(134 207 106)" icon="gg:sand-clock" :size="20" /> 
-											{{ realTime.get(eqpCodes[num - 1])?.totalRemain||0}} min
-										</div>
-									</div>
-								</div>
-								<div class="eqp-info-up">
-									<!-- <div class="herb">
-										<div>{{ realTime.get(eqpCodes[num - 1])?.herbName || '鏆傛棤' }}</div>
-										
-									</div> -->
-									
-								</div>
-								<!-- <div class="weight"><div class="herb">{{ realTime.get(eqpCodes[num - 1])?.originWeight || 0 }} Kg</div></div> -->
-
-								<div class="weight"><div class="herb">
-									{{ showInfo(realTime.get(eqpCodes[num - 1])) }}
-								</div></div>
-								<div class="water">
-									<div class="eqp_num">{{ num }}</div>
-									<!-- <div class="temp">
-										<div style="line-height: 28px"><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="28" /> </div>
-										<div class="font">
-											<span class="value"> {{ realTime.get(eqpCodes[num - 1])?.trendVo?.moisture || '0' }}</span> %
-										</div>
-									</div>
-									<div class="temp">
-										<div style="line-height: 28px"><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="30" /> </div>
-										<div class="font">
-											<span class="value">{{ realTime.get(eqpCodes[num - 1])?.trendVo?.bellowsTemp || '0' }} </span> 鈩�
-										</div>
-									</div> -->
-								</div>
-							</div>
-						</div>
-					</div>
-					<div class="down">
-						<div v-for="num in eqpNum" :key="num" :class="{ done: num === 1, dtwo: num === 2, dthree: num === 3, dfour: num === 4 }">
-							<div class="eqpInfodown" @click="gotoeqp(num + 3)">
-								<!-- <div class="eqp-info-down">
-									<div class="herb">{{ realTime.get(eqpCodes[num + 3])?.herbName || '鏆傛棤' }}</div>
-								</div>
-								<div class="weight"><div class="herb">{{ realTime.get(eqpCodes[num + 3])?.originWeight || 0 }} Kg </div></div> -->
-								<div class="weight"><div class="herb">{{ showInfo(realTime.get(eqpCodes[num + 3])) }}</div></div>
-								<div class="water">
-									<div class="eqp_num">{{ num + 4 }}</div>
-									<!-- <div class="temp">
-										<div style="line-height: 28px">
-											<Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="28" />
-										</div>
-										<div class="font">
-											<span class="value">{{ realTime.get(eqpCodes[num + 3])?.trendVo?.moisture || '0' }}</span> %
-										</div>
-									</div>
-									<div class="temp">
-										<div style="line-height: 28px"><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="30" /> </div>
-										<div class="font">
-											<span class="value">{{ realTime.get(eqpCodes[num + 3])?.trendVo?.bellowsTemp || '0' }}</span> 鈩�
-										</div>
-									</div> -->
-								</div>
-
-								<div class="dblank"></div>
-								<div class="eqp-title">
-									<div class="herb_weight">
-										<div>{{ realTime.get(eqpCodes[num + 3])?.herbName || '鏆傛棤' }}</div>
-										<div>{{ realTime.get(eqpCodes[num + 3])?.originWeight || 0 }} Kg</div>
-									</div>
-									
-									<Progress
-										:stroke-color="{
-											from: '#108ee9',
-											to: '#87d068',
-										}"
-										:percent="parseFloat(realTime.get(eqpCodes[num + 3])?.percent || '0')"
-										status="active"
-										trailColor="#2b2b2b2b"
-										:show-info="false"
-									/>
-									<!-- <div class="eqp-name">50%</div> -->
-									<div class="eqp-timer">
-										<div><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="20" />
-											{{ realTime.get(eqpCodes[num + 3])?.trendVo?.moisture.toFixed(1) || '0' }} %
-										</div>
-										<div><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="20" />
-											 {{realTime.get(eqpCodes[num + 3])?.trendVo?.bellowsTemp.toFixed(0) || '0'}} 鈩�
-										</div>
-										<!-- <div><Icon style="color: rgb(42 154 234)" icon="mdi:clock-outline" :size="20" />
-											 {{realTime.get(eqpCodes[num + 3])?.dryTime || 0}} min
-										</div> -->
-										<div><Icon style="color: rgb(134 207 106)" icon="gg:sand-clock" :size="20" /> 
-											{{ realTime.get(eqpCodes[num + 3])?.totalRemain||0}} min
-										</div>
-									</div>
-								</div>
-							</div>
-						</div>
-					</div>
-					<div class="footer">
-						
-						<div >{{ nowDate }}</div> 
-						<div >{{ nowTime }}</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</dv-full-screen-container>
-</template>
-
-<script setup lang="ts">
-	import { Progress } from 'ant-design-vue'
-	import { onMounted, ref, onUnmounted } from 'vue'
-	import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index'
-	import { listAll } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { router } from '/@/router'
-	import { defHttp } from '/@/utils/http/axios'
-	import { useUserStore } from '/@/store/modules/user'
-	const eqpNum = ref(4)
-	const eqpMap = ref(new Map())
-	const eqpCodes = ref(['GM001', 'GM002', 'GM003', 'GM004', 'GM005', 'GM006', 'GM007', 'GM008'])
-	const eqps = ref([] as dryEquipment[])
-	const title = ref("鍏版郸鏅鸿兘骞茬嚗杞﹂棿")
-	const userStore = useUserStore()
-	console.log(userStore.dictItems.title)
-	userStore.dictItems.title?.forEach(element => {
-		if (element.value === "bigscreentitle") {
-			title.value = element.text
-		}
-		
-	});
-	const Timer = ref()
-
-	const realTime = ref(new Map())
-	const nowTime = ref()
-	const nowDate = ref()
-
-
-	function listAllEqp() {
-		listAll({ enable: 'Y' })
-			.then((result) => {
-				console.log(`output->result`, result)
-				eqps.value = result
-
-				result.forEach((item) => {
-					eqpMap.value.set(item.code, item)
-				})
-				updateRealTime()
-			})
-			.catch((err) => {
-				console.log(`output->err`, err)
-			})
-	}
-
-	function updateRealTime() {
-		//console.log(`output->瀹氭椂鍒锋柊鏁版嵁`)
-		eqps.value.forEach((item) => {
-			queryRealTime(item)
-		})
-	}
-
-	function queryRealTime(eqp: dryEquipment) {
-		
-		let tenantId = userStore.getTenant
-		let eqpCode = eqp.code
-		let queryRealTimeUrl = '/dry/real/getRealTimeData'
-		defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-			//console.log(`output->res`, res)
-			if (res && res.trendVo) {
-				res.tempValue = [res.windTemp, 100]
-				res.totalRemain = res.remain
-				if (res.detailList) {
-					// 骞茬嚗鍓╀綑鏃堕棿=宸ュ崟棰勮鍓╀綑-锛堝綋鍓嶅共鐕ユ椂闂�-鏈�鍚庝竴娆¤褰曞共鐕ユ椂闂达級 
-					res.totalRemain = res.remain-(res.dryTime-res.detailList[res.detailList.length - 1].totalTime)
-				}
-				if(res.totalRemain < 0) {
-					res.totalRemain = 0
-				}
-				
-				res.percent = ((res.dryTime / (res.dryTime + res.totalRemain)) * 100).toFixed(2)
-			} else {
-				res = {
-					tempValue: [0, 100],
-					percent: 0,
-					mois: [],
-				}
-			}
-
-			realTime.value.set(eqp.code, res)
-		})
-	}
-	function gotoeqp(num) {
-		console.log('璺宠浆鏈哄彴',num);
-		if (num < eqpCodes.value.length) {
-			router.push({ path: '/bigEqp', query: { num: num } })
-		}
-	}
-
-	function getNowTime() {
-		var date = new Date()
-		nowDate.value = (date.getFullYear()) + "/" + (date.getMonth()< 9? "0" + (date.getMonth() + 1): date.getMonth() + 1) + "/" + (date.getDay() < 10? "0" + date.getDay() : date.getDay())
-		nowTime.value = "" + (date.getHours()<10? "0" + date.getHours() :  date.getHours())  + ":" + (date.getMinutes()< 10? "0" + date.getMinutes(): date.getMinutes())
-		//console.log("鑾峰彇褰撳墠鏃堕棿锛�");
-	}
-
-	function showInfo(data) {
-		return data?data.fault?data.fault:data.warning?data.warning:data.level?data.level:'绌洪棽':'绌洪棽'
-	}
-
-	getNowTime()
-	listAllEqp()
-	onMounted(() => {
-		Timer.value = setInterval(updateRealTime, 3000)
-		setInterval(getNowTime,10000)
-	})
-
-	onUnmounted(() => {
-		clearInterval(Timer.value)
-		Timer.value = null
-	})
-</script>
-
-<style scoped>
-	.fbg {
-		height: 1080px;
-		width: 1920px;
-		background-image: url(/src/assets/images/dry/bg/bg5.png);
-		background-repeat: no-repeat;
-	}
-	.bgImage {
-		height: 1080px;
-		width: 1920px;
-		background-image: url(/src/assets/images/dry/bg/wkspbg3.png);
-		background-repeat: no-repeat;
-		background-size: 100%;
-		background-position: 0px 50px;
-	}
-
-	.head {
-		display: flex;
-		align-content: center;
-		justify-content: center;
-	}
-
-	.body {
-		height: 980px;
-		width: 100%;
-		margin-top: -100px;
-		font-size: 20px;
-	}
-	.title {
-		height: 200px;
-		padding: 20px;
-		font-size: 30px;
-		font-weight: bold;
-		text-align: center;
-		color: white;
-	}
-
-	.humiture {
-		height: 0px;
-		justify-content: center;
-		color: white;
-		display: flex;
-	}
-
-	.feed {
-		display: flex;
-		height: 0px;
-		color: gray;
-		padding-top: 20px;
-		justify-content: space-between;
-	}
-
-	.up {
-		padding-left: 55px;
-		padding-top: 48px;
-		display: flex;
-
-		align-content: center;
-		justify-content: flex-start;
-	}
-	.down {
-		padding-left: 340px;
-		margin-top: -246px;
-		display: flex;
-
-		align-content: center;
-		justify-content: flex-start;
-	}
-	.eqpInfoup {
-		width: 300px;
-		height: 400px;
-		margin: -50px 10px;
-		display: flex;
-		flex-direction: column;
-	}
-
-	.eqpInfodown {
-		width: 300px;
-		height: 380px;
-		margin: 0 50px;
-		padding-top: 0px;
-		display: flex;
-		flex-direction: column;
-		justify-content: flex-start;
-	}
-
-	.one {
-		margin-top: 227px;
-	}
-
-	.two {
-		margin-top: 193px;
-	}
-
-	.three {
-		margin-top: 160px;
-	}
-
-	.four {
-		margin-top: 127px;
-	}
-
-	.done {
-		margin-top: 240px;
-	}
-
-	.dtwo {
-		margin-left: -20px;
-    	margin-top: 184px;
-	}
-
-	.dthree {
-	    margin-left: 58px;
-    	margin-top: 107px;
-	}
-
-	.dfour {
-		margin-left: -71px;
-    margin-top: 70px;
-	}
-
-	.eqp-title {
-	    height: 125px;
-
-    width: 100%;
-   
-    padding: 10px 20px;
-	}
-
-	.eqp-name {
-		line-height: 30px;
-		text-align: center;
-		color: white;
-		margin-top: -30px;
-	}
-
-	.eqp-timer {
-		line-height: 30px;
-		text-align: center;
-		color: white;
-		margin-top: 6px;
-		justify-content: space-between;
-    display: flex;
-	}
-
-	.eqp-name-down {
-		line-height: 40px;
-		text-align: center;
-		color: white;
-	}
-
-	.process {
-		width: 50%;
-		height: 100%;
-		overflow: hidden;
-		border-radius: 20px;
-		background: #3f4c6b;
-	}
-
-	.eqp-info-up {
-	
-		padding-top: 20px;
-		display: flex;
-	}
-
-	.weight {
-
-		display: flex;
-		font-size: 20px;
-	}
-
-	.eqp-info-down {
-		flex: 1;
-		padding-top: 70px;
-		display: flex;
-	}
-
-	.herb {
-		height: 32px;
-		background: #3f4c6b;
-		color: white;
-		line-height: 30px;
-		padding: 0 10px;
-	}
-	.water {
-		
-		height: 120px;
-		width: 110px;
-		
-		display: flex;
-		flex-wrap: wrap; 
-	}
-	.one .eqpInfoup .water  {
-		padding-top: 37px;
-		margin-left: 201px;
-	}
-	.two .eqpInfoup .water  {
-		padding-top: 32px;
-		margin-left: 184px;
-	}
-	.three .eqpInfoup .water  {
-		padding-top: 11px;
-		margin-left: 284px;
-	}
-	.three .eqpInfoup .weight  {
-
-		margin-left: 69px;
-	}
-	.four .eqpInfoup .water  {
-		padding-top: 14px;
-		margin-left: 186px;
-	}
-	.done .eqpInfodown .water  {
-		padding-top: 89px;
-		margin-left: 205px;
-	}
-	.dtwo .eqpInfodown .water  {
-		padding-top: 72px;
-		margin-left: 213px;
-	}
-	.dthree .eqpInfodown .water  {
-		padding-top: 48px;
-		margin-left: 263px;
-	}
-
-	.dfour .eqpInfodown .water  {
-		padding-top: 38px;
-		margin-left: 189px;
-	}
-	.done .eqpInfodown .dblank  {
-		height: 93px;
-	}
-	.dtwo .eqpInfodown .dblank  {
-		height: 103px;
-	}
-	.dthree .eqpInfodown .dblank  {
-		height: 83px;
-	}
-
-	.dfour .eqpInfodown .dblank  {
-		height: 48px;
-	}
-	.done .eqpInfodown .weight  {
-		margin-left: -77px;
-	}
-	.dtwo .eqpInfodown .weight  {
-		margin-left: -77px;
-	}
-	.dthree .eqpInfodown .weight  {
-		margin-left: -50px;
-	}
-
-	.dfour .eqpInfodown .weight  {
-		margin-left: -50px;
-	}
-	.temp {
-		display: flex;
-	}
-	.font {
-		line-height: 26px;
-	}
-
-
-	.footer {
-		height: 160px;
-		display: flex;
-		padding: 10px 20px;
-		font-size: 30px;
-		flex-direction: column-reverse;
-		align-items: flex-end;
-		color: white;
-		line-height: 40px;
-		margin-top: -150px;
-
-	}
-	:deep() .progress {
-		padding: 25px 25px;
-
-		width: 360px;
-		display: flex;
-	}
-	:deep() .ant-progress-bg {
-		height: 25px !important;
-	}
-	:deep() .ant-progress-inner {
-		background-color: rgb(197 197 197 / 84%) !important;
-	}
-
-	.statistics {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		flex-wrap: wrap;
-		
-	}
-	.stat_label {
-		width:45px
-	}
- 
-	.stat_value {
-		font-size: 32px
-	}
-
-	.herb_weight {
-		padding: 0 10px;
-		color: white;
-		display: flex;
-		justify-content: space-between;
-	}
-	.eqp_num {
-		font-weight: bold;
-    width: 40px;
-    height: 40px;
-    background: #a0782e;
-    border-radius: 50px;
-    /* text-align: center; */
-    font-size: 23px;
-    color: white;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-	}
-
-	.putincolor {
-		color: antiquewhite;
-	}
-
-	.electroncolor {
-		color: aquamarine;
-	}
-
-	.steamcolor {
-		color: sandybrown
-	}
-	.font16 {
-		font-size: 16px;
-	}
-	.stat_avg {
-		width: 100%; font-size: 16px; display: flex; color: rgb(176, 176, 176); justify-content: space-between; border-top: 1px solid;
-		margin-top: 6px;
-	}
-</style>
diff --git a/src/views/dry/common/prodRecordReport.vue b/src/views/dry/common/prodRecordReport.vue
deleted file mode 100644
index 5ad030f..0000000
--- a/src/views/dry/common/prodRecordReport.vue
+++ /dev/null
@@ -1,18 +0,0 @@
-<template>
-	<iframe :src="reportUrl" style="width: 100%; height: 100%"></iframe>
-</template>
-
-<script setup lang="ts">
-	import { onMounted, ref } from 'vue'
-	import { router } from '/@/router'
-	console.log(`output->router1`, router)
-	const reportUrl = ref('')
-	reportUrl.value = window._CONFIG['domianURL'] + '/jmreport/view/833110227445567488?batch=' + router.currentRoute.value.query.batch
-	//reportUrl.value = 'www.baidu.com'
-	console.log(`output->reportUrl.value`, reportUrl.value)
-	// onMounted(() => {
-	// 	console.log(`output->router`, router)
-	// })
-</script>
-
-<style></style>
diff --git a/src/views/dry/components/DryEqpTypeForm.vue b/src/views/dry/components/DryEqpTypeForm.vue
deleted file mode 100644
index ef93ca4..0000000
--- a/src/views/dry/components/DryEqpTypeForm.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-    <div style="min-height: 400px">
-        <BasicForm @register="registerForm"></BasicForm>
-        <div style="width: 100%;text-align: center" v-if="!formDisabled">
-            <a-button @click="submitForm" pre-icon="ant-design:check" type="primary">鎻� 浜�</a-button>
-        </div>
-    </div>
-</template>
-
-<script lang="ts">
-    import {BasicForm, useForm} from '/@/components/Form/index';
-    import {computed, defineComponent} from 'vue';
-    import {defHttp} from '/@/utils/http/axios';
-    import { propTypes } from '/@/utils/propTypes';
-    import {getBpmFormSchema} from '../dataDefine/DryEqpType.data';
-    import {saveOrUpdate} from '../api/DryEqpType.api';
-    
-    export default defineComponent({
-        name: "DryEqpTypeForm",
-        components:{
-            BasicForm
-        },
-        props:{
-            formData: propTypes.object.def({}),
-            formBpm: propTypes.bool.def(true),
-        },
-        setup(props){
-            const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-                labelWidth: 150,
-                schemas: getBpmFormSchema(props.formData),
-                showActionButtonGroup: false,
-                baseColProps: {span: 24}
-            });
-
-            const formDisabled = computed(()=>{
-                if(props.formData.disabled === false){
-                    return false;
-                }
-                return true;
-            });
-
-            let formData = {};
-            const queryByIdUrl = '/dry/dryEqpType/queryById';
-            async function initFormData(){
-                let params = {id: props.formData.dataId};
-                const data = await defHttp.get({url: queryByIdUrl, params});
-                formData = {...data}
-                //璁剧疆琛ㄥ崟鐨勫��
-                await setFieldsValue(formData);
-                //榛樿鏄鐢�
-                await setProps({disabled: formDisabled.value})
-            }
-
-            async function submitForm() {
-                let data = getFieldsValue();
-                let params = Object.assign({}, formData, data);
-                console.log('琛ㄥ崟鏁版嵁', params)
-                await saveOrUpdate(params, true)
-            }
-
-            initFormData();
-            
-            return {
-                registerForm,
-                formDisabled,
-                submitForm,
-            }
-        }
-    });
-</script>
\ No newline at end of file
diff --git a/src/views/dry/components/DryEqpTypeModal.vue b/src/views/dry/components/DryEqpTypeModal.vue
deleted file mode 100644
index 65f1430..0000000
--- a/src/views/dry/components/DryEqpTypeModal.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { computed, ref, unref } from 'vue';
-import { saveOrUpdate } from '../api/DryEqpType.api';
-import { formSchema } from '../dataDefine/DryEqpType.data';
-import { BasicForm, useForm } from '/@/components/Form/index';
-import { BasicModal, useModalInner } from '/@/components/Modal';
-  // Emits澹版槑
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { setProps, resetFields, setFieldsValue, validate }] = useForm({
-    //labelWidth: 150,
-    schemas: formSchema,
-    showActionButtonGroup: false,
-    baseColProps: { span: 24 },
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false, showCancelBtn: !!data?.showFooter, showOkBtn: !!data?.showFooter });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-    // 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-    setProps({ disabled: !data?.showFooter });
-  });
-  //璁剧疆鏍囬
-  const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit(v) {
-    try {
-      let values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdate(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
-
-<style lang="less" scoped>
-  /** 鏃堕棿鍜屾暟瀛楄緭鍏ユ鏍峰紡 */
-  :deep(.ant-input-number) {
-    width: 100%;
-  }
-
-  :deep(.ant-calendar-picker) {
-    width: 100%;
-  }
-</style>
diff --git a/src/views/dry/components/DryEquipmentForm.vue b/src/views/dry/components/DryEquipmentForm.vue
deleted file mode 100644
index 2ac9b75..0000000
--- a/src/views/dry/components/DryEquipmentForm.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-	<div style="min-height: 400px">
-		<BasicForm @register="registerForm" />
-		<div style="width: 100%; text-align: center" v-if="!formDisabled">
-			<a-button @click="submitForm" pre-icon="ant-design:check" type="primary">鎻� 浜�</a-button>
-		</div>
-	</div>
-</template>
-
-<script lang="ts">
-	import { computed, defineComponent } from 'vue'
-	import { saveOrUpdate } from '../api/DryEquipment.api'
-	import { getBpmFormSchema } from '../dataDefine/DryEquipment.data'
-	import { BasicForm, useForm } from '/@/components/Form/index'
-	import { defHttp } from '/@/utils/http/axios'
-	import { propTypes } from '/@/utils/propTypes'
-
-	export default defineComponent({
-		name: 'DryEquipmentForm',
-		components: {
-			BasicForm,
-		},
-		props: {
-			formData: propTypes.object.def({}),
-			formBpm: propTypes.bool.def(true),
-		},
-		setup(props) {
-			const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-				labelWidth: 150,
-				schemas: getBpmFormSchema(props.formData),
-				showActionButtonGroup: false,
-				baseColProps: { span: 24 },
-			})
-
-			const formDisabled = computed(() => {
-				if (props.formData.disabled === false) {
-					return false
-				}
-				return true
-			})
-
-			let formData = {}
-			const queryByIdUrl = '/dry/dryEquipment/queryById'
-			async function initFormData() {
-				let params = { id: props.formData.dataId }
-				const data = await defHttp.get({ url: queryByIdUrl, params })
-				formData = { ...data }
-				//璁剧疆琛ㄥ崟鐨勫��
-				await setFieldsValue(formData)
-				//榛樿鏄鐢�
-				await setProps({ disabled: formDisabled.value })
-			}
-
-			async function submitForm() {
-				let data = getFieldsValue()
-				let params = Object.assign({}, formData, data)
-				console.log('琛ㄥ崟鏁版嵁', params)
-				await saveOrUpdate(params, true)
-			}
-
-			initFormData()
-
-			return {
-				registerForm,
-				formDisabled,
-				submitForm,
-			}
-		},
-	})
-</script>
diff --git a/src/views/dry/components/DryEquipmentModal.vue b/src/views/dry/components/DryEquipmentModal.vue
deleted file mode 100644
index 0994f0b..0000000
--- a/src/views/dry/components/DryEquipmentModal.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-	<BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
-		<BasicForm @register="registerForm" />
-	</BasicModal>
-</template>
-
-<script lang="ts" setup>
-	import { ref, computed, unref } from 'vue'
-	import { BasicModal, useModalInner } from '/@/components/Modal'
-	import { BasicForm, useForm } from '/@/components/Form/index'
-	import { formSchema } from '../dataDefine/DryEquipment.data'
-	import { saveOrUpdate } from '../api/DryEquipment.api'
-	// Emits澹版槑
-	const emit = defineEmits(['register', 'success'])
-	const isUpdate = ref(true)
-	//琛ㄥ崟閰嶇疆
-	const [registerForm, { setProps, resetFields, setFieldsValue, validate }] = useForm({
-		//labelWidth: 150,
-		schemas: formSchema,
-		showActionButtonGroup: false,
-		baseColProps: { span: 24 },
-	})
-	//琛ㄥ崟璧嬪��
-	const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-		//閲嶇疆琛ㄥ崟
-		await resetFields()
-		setModalProps({ confirmLoading: false, showCancelBtn: !!data?.showFooter, showOkBtn: !!data?.showFooter })
-		isUpdate.value = !!data?.isUpdate
-		if (unref(isUpdate)) {
-			//琛ㄥ崟璧嬪��
-			await setFieldsValue({
-				...data.record,
-			})
-		}
-		// 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-		setProps({ disabled: !data?.showFooter })
-	})
-	//璁剧疆鏍囬
-	const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'))
-	//琛ㄥ崟鎻愪氦浜嬩欢
-	async function handleSubmit(v) {
-		try {
-			let values = await validate()
-			setModalProps({ confirmLoading: true })
-			//鎻愪氦琛ㄥ崟
-			await saveOrUpdate(values, isUpdate.value)
-			//鍏抽棴寮圭獥
-			closeModal()
-			//鍒锋柊鍒楄〃
-			emit('success')
-		} finally {
-			setModalProps({ confirmLoading: false })
-		}
-	}
-</script>
-
-<style lang="less" scoped>
-	/** 鏃堕棿鍜屾暟瀛楄緭鍏ユ鏍峰紡 */
-	:deep(.ant-input-number) {
-		width: 100%;
-	}
-
-	:deep(.ant-calendar-picker) {
-		width: 100%;
-	}
-</style>
diff --git a/src/views/dry/components/DryHerbForm.vue b/src/views/dry/components/DryHerbForm.vue
deleted file mode 100644
index 11fc3d1..0000000
--- a/src/views/dry/components/DryHerbForm.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-	<div style="min-height: 400px">
-		<BasicForm @register="registerForm" />
-		<div style="width: 100%; text-align: center" v-if="!formDisabled">
-			<a-button @click="submitForm" pre-icon="ant-design:check" type="primary">鎻� 浜�</a-button>
-		</div>
-	</div>
-</template>
-
-<script lang="ts">
-	import { computed, defineComponent } from 'vue'
-	import { saveOrUpdate } from '../api/DryHerb.api'
-	import { getBpmFormSchema } from '../dataDefine/DryHerb.data'
-	import { BasicForm, useForm } from '/@/components/Form/index'
-	import { defHttp } from '/@/utils/http/axios'
-	import { propTypes } from '/@/utils/propTypes'
-
-	export default defineComponent({
-		name: 'DryHerbForm',
-		components: {
-			BasicForm,
-		},
-		props: {
-			formData: propTypes.object.def({}),
-			formBpm: propTypes.bool.def(true),
-		},
-		setup(props) {
-			const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-				labelWidth: 150,
-				schemas: getBpmFormSchema(props.formData),
-				showActionButtonGroup: false,
-				baseColProps: { span: 24 },
-			})
-
-			const formDisabled = computed(() => {
-				if (props.formData.disabled === false) {
-					return false
-				}
-				return true
-			})
-
-			let formData = {}
-			const queryByIdUrl = '/dry/dryHerb/queryById'
-			async function initFormData() {
-				let params = { id: props.formData.dataId }
-				const data = await defHttp.get({ url: queryByIdUrl, params })
-				formData = { ...data }
-				//璁剧疆琛ㄥ崟鐨勫��
-				await setFieldsValue(formData)
-				//榛樿鏄鐢�
-				await setProps({ disabled: formDisabled.value })
-			}
-
-			async function submitForm() {
-				let data = getFieldsValue()
-				let params = Object.assign({}, formData, data)
-				console.log('琛ㄥ崟鏁版嵁', params)
-				await saveOrUpdate(params, true)
-			}
-
-			initFormData()
-
-			return {
-				registerForm,
-				formDisabled,
-				submitForm,
-			}
-		},
-	})
-</script>
diff --git a/src/views/dry/components/DryHerbFormulaForm.vue b/src/views/dry/components/DryHerbFormulaForm.vue
deleted file mode 100644
index 3dd9adc..0000000
--- a/src/views/dry/components/DryHerbFormulaForm.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-	<div style="min-height: 400px">
-		<BasicForm @register="registerForm" />
-		<div style="width: 100%; text-align: center" v-if="!formDisabled">
-			<a-button @click="submitForm" pre-icon="ant-design:check" type="primary">鎻� 浜�</a-button>
-		</div>
-	</div>
-</template>
-
-<script lang="ts">
-	import { BasicForm, useForm } from '/@/components/Form/index'
-	import { computed, defineComponent } from 'vue'
-	import { defHttp } from '/@/utils/http/axios'
-	import { propTypes } from '/@/utils/propTypes'
-	import { getBpmFormSchema } from '../dataDefine/DryHerbFormula.data'
-	import { saveOrUpdate } from '../api/DryHerbFormula.api'
-
-	export default defineComponent({
-		name: 'DryHerbFormulaForm',
-		components: {
-			BasicForm,
-		},
-		props: {
-			formData: propTypes.object.def({}),
-			formBpm: propTypes.bool.def(true),
-		},
-		setup(props) {
-			const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-				labelWidth: 150,
-				schemas: getBpmFormSchema(props.formData),
-				showActionButtonGroup: false,
-				baseColProps: { span: 24 },
-			})
-
-			const formDisabled = computed(() => {
-				if (props.formData.disabled === false) {
-					return false
-				}
-				return true
-			})
-
-			let formData = {}
-			const queryByIdUrl = '/dry/dryHerbFormula/queryById'
-			async function initFormData() {
-				let params = { id: props.formData.dataId }
-				const data = await defHttp.get({ url: queryByIdUrl, params })
-				formData = { ...data }
-				//璁剧疆琛ㄥ崟鐨勫��
-				await setFieldsValue(formData)
-				//榛樿鏄鐢�
-				await setProps({ disabled: formDisabled.value })
-			}
-
-			async function submitForm() {
-				let data = getFieldsValue()
-				let params = Object.assign({}, formData, data)
-				console.log('琛ㄥ崟鏁版嵁', params)
-				await saveOrUpdate(params, true)
-			}
-
-			initFormData()
-
-			return {
-				registerForm,
-				formDisabled,
-				submitForm,
-			}
-		},
-	})
-</script>
diff --git a/src/views/dry/components/DryHerbFormulaModal.vue b/src/views/dry/components/DryHerbFormulaModal.vue
deleted file mode 100644
index ff26716..0000000
--- a/src/views/dry/components/DryHerbFormulaModal.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-	<BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
-		<BasicForm @register="registerForm" />
-	</BasicModal>
-</template>
-
-<script lang="ts" setup>
-	import { ref, computed, unref } from 'vue'
-	import { BasicModal, useModalInner } from '/@/components/Modal'
-	import { BasicForm, useForm } from '/@/components/Form/index'
-	import { formSchema } from '../dataDefine/DryHerbFormula.data'
-	import { saveOrUpdate } from '../api/DryHerbFormula.api'
-	// Emits澹版槑
-	const emit = defineEmits(['register', 'success'])
-	const isUpdate = ref(true)
-	//琛ㄥ崟閰嶇疆
-	const [registerForm, { setProps, resetFields, setFieldsValue, validate }] = useForm({
-		//labelWidth: 150,
-		schemas: formSchema,
-		showActionButtonGroup: false,
-		baseColProps: { span: 24 },
-	})
-	//琛ㄥ崟璧嬪��
-	const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-		//閲嶇疆琛ㄥ崟
-		await resetFields()
-		setModalProps({ confirmLoading: false, showCancelBtn: !!data?.showFooter, showOkBtn: !!data?.showFooter })
-		isUpdate.value = !!data?.isUpdate
-		if (unref(isUpdate)) {
-			//琛ㄥ崟璧嬪��
-			await setFieldsValue({
-				...data.record,
-			})
-		}
-		// 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-		setProps({ disabled: !data?.showFooter })
-	})
-	//璁剧疆鏍囬
-	const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'))
-	//琛ㄥ崟鎻愪氦浜嬩欢
-	async function handleSubmit(v) {
-		try {
-			let values = await validate()
-			setModalProps({ confirmLoading: true })
-			//鎻愪氦琛ㄥ崟
-			await saveOrUpdate(values, isUpdate.value)
-			//鍏抽棴寮圭獥
-			closeModal()
-			//鍒锋柊鍒楄〃
-			emit('success')
-		} finally {
-			setModalProps({ confirmLoading: false })
-		}
-	}
-</script>
-
-<style lang="less" scoped>
-	/** 鏃堕棿鍜屾暟瀛楄緭鍏ユ鏍峰紡 */
-	:deep(.ant-input-number) {
-		width: 100%;
-	}
-
-	:deep(.ant-calendar-picker) {
-		width: 100%;
-	}
-</style>
diff --git a/src/views/dry/components/DryHerbInfoForm.vue b/src/views/dry/components/DryHerbInfoForm.vue
deleted file mode 100644
index ce0bee9..0000000
--- a/src/views/dry/components/DryHerbInfoForm.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-	<div style="min-height: 400px">
-		<BasicForm @register="registerForm" />
-		<div style="width: 100%; text-align: center" v-if="!formDisabled">
-			<a-button @click="submitForm" pre-icon="ant-design:check" type="primary">鎻� 浜�</a-button>
-		</div>
-	</div>
-</template>
-
-<script lang="ts">
-	import { BasicForm, useForm } from '/@/components/Form/index'
-	import { computed, defineComponent } from 'vue'
-	import { defHttp } from '/@/utils/http/axios'
-	import { propTypes } from '/@/utils/propTypes'
-	import { getBpmFormSchema } from '../dataDefine/DryHerbInfo.data'
-	import { saveOrUpdate } from '../api/DryHerbInfo.api'
-
-	export default defineComponent({
-		name: 'DryHerbInfoForm',
-		components: {
-			BasicForm,
-		},
-		props: {
-			formData: propTypes.object.def({}),
-			formBpm: propTypes.bool.def(true),
-		},
-		setup(props) {
-			const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-				labelWidth: 150,
-				schemas: getBpmFormSchema(props.formData),
-				showActionButtonGroup: false,
-				baseColProps: { span: 24 },
-			})
-
-			const formDisabled = computed(() => {
-				if (props.formData.disabled === false) {
-					return false
-				}
-				return true
-			})
-
-			let formData = {}
-			const queryByIdUrl = '/dry/dryHerbInfo/queryById'
-			async function initFormData() {
-				let params = { id: props.formData.dataId }
-				const data = await defHttp.get({ url: queryByIdUrl, params })
-				formData = { ...data }
-				//璁剧疆琛ㄥ崟鐨勫��
-				await setFieldsValue(formData)
-				//榛樿鏄鐢�
-				await setProps({ disabled: formDisabled.value })
-			}
-
-			async function submitForm() {
-				let data = getFieldsValue()
-				let params = Object.assign({}, formData, data)
-				console.log('琛ㄥ崟鏁版嵁', params)
-				await saveOrUpdate(params, true)
-			}
-
-			initFormData()
-
-			return {
-				registerForm,
-				formDisabled,
-				submitForm,
-			}
-		},
-	})
-</script>
diff --git a/src/views/dry/components/DryHerbInfoModal.vue b/src/views/dry/components/DryHerbInfoModal.vue
deleted file mode 100644
index 5d75f49..0000000
--- a/src/views/dry/components/DryHerbInfoModal.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-	<BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
-		<BasicForm @register="registerForm" />
-	</BasicModal>
-</template>
-
-<script lang="ts" setup>
-	import { ref, computed, unref } from 'vue'
-	import { BasicModal, useModalInner } from '/@/components/Modal'
-	import { BasicForm, useForm } from '/@/components/Form/index'
-	import { formSchema } from '../dataDefine/DryHerbInfo.data'
-	import { saveOrUpdate } from '../api/DryHerbInfo.api'
-	// Emits澹版槑
-	const emit = defineEmits(['register', 'success'])
-	const isUpdate = ref(true)
-	//琛ㄥ崟閰嶇疆
-	const [registerForm, { setProps, resetFields, setFieldsValue, validate }] = useForm({
-		//labelWidth: 150,
-		schemas: formSchema,
-		showActionButtonGroup: false,
-		baseColProps: { span: 24 },
-	})
-	//琛ㄥ崟璧嬪��
-	const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-		//閲嶇疆琛ㄥ崟
-		await resetFields()
-		setModalProps({ confirmLoading: false, showCancelBtn: !!data?.showFooter, showOkBtn: !!data?.showFooter })
-		isUpdate.value = !!data?.isUpdate
-		if (unref(isUpdate)) {
-			//琛ㄥ崟璧嬪��
-			await setFieldsValue({
-				...data.record,
-			})
-		}
-		// 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-		setProps({ disabled: !data?.showFooter })
-	})
-	//璁剧疆鏍囬
-	const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'))
-	//琛ㄥ崟鎻愪氦浜嬩欢
-	async function handleSubmit(v) {
-		try {
-			let values = await validate()
-			setModalProps({ confirmLoading: true })
-			//鎻愪氦琛ㄥ崟
-			await saveOrUpdate(values, isUpdate.value)
-			//鍏抽棴寮圭獥
-			closeModal()
-			//鍒锋柊鍒楄〃
-			emit('success')
-		} finally {
-			setModalProps({ confirmLoading: false })
-		}
-	}
-</script>
-
-<style lang="less" scoped>
-	/** 鏃堕棿鍜屾暟瀛楄緭鍏ユ鏍峰紡 */
-	:deep(.ant-input-number) {
-		width: 100%;
-	}
-
-	:deep(.ant-calendar-picker) {
-		width: 100%;
-	}
-</style>
diff --git a/src/views/dry/components/DryHerbModal.vue b/src/views/dry/components/DryHerbModal.vue
deleted file mode 100644
index c08b364..0000000
--- a/src/views/dry/components/DryHerbModal.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-	<BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
-		<BasicForm @register="registerForm" />
-	</BasicModal>
-</template>
-
-<script lang="ts" setup>
-	import { computed, ref, unref } from 'vue'
-	import { saveOrUpdate } from '../api/DryHerb.api'
-	import { formSchema } from '../dataDefine/DryHerb.data'
-	import { BasicForm, useForm } from '/@/components/Form/index'
-	import { BasicModal, useModalInner } from '/@/components/Modal'
-	// Emits澹版槑
-	const emit = defineEmits(['register', 'success'])
-	const isUpdate = ref(true)
-	//琛ㄥ崟閰嶇疆
-	const [registerForm, { setProps, resetFields, setFieldsValue, validate }] = useForm({
-		//labelWidth: 150,
-		schemas: formSchema,
-		showActionButtonGroup: false,
-		baseColProps: { span: 24 },
-	})
-	//琛ㄥ崟璧嬪��
-	const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-		//閲嶇疆琛ㄥ崟
-		await resetFields()
-		setModalProps({ confirmLoading: false, showCancelBtn: !!data?.showFooter, showOkBtn: !!data?.showFooter })
-		isUpdate.value = !!data?.isUpdate
-		if (unref(isUpdate)) {
-			//琛ㄥ崟璧嬪��
-			await setFieldsValue({
-				...data.record,
-			})
-		}
-		// 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-		setProps({ disabled: !data?.showFooter })
-	})
-	//璁剧疆鏍囬
-	const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'))
-	//琛ㄥ崟鎻愪氦浜嬩欢
-	async function handleSubmit(v) {
-		try {
-			let values = await validate()
-			setModalProps({ confirmLoading: true })
-			//鎻愪氦琛ㄥ崟
-			await saveOrUpdate(values, isUpdate.value)
-			//鍏抽棴寮圭獥
-			closeModal()
-			//鍒锋柊鍒楄〃
-			emit('success')
-		} finally {
-			setModalProps({ confirmLoading: false })
-		}
-	}
-</script>
-
-<style lang="less" scoped>
-	/** 鏃堕棿鍜屾暟瀛楄緭鍏ユ鏍峰紡 */
-	:deep(.ant-input-number) {
-		width: 100%;
-	}
-
-	:deep(.ant-calendar-picker) {
-		width: 100%;
-	}
-</style>
diff --git a/src/views/dry/components/DryHerbTypeForm.vue b/src/views/dry/components/DryHerbTypeForm.vue
deleted file mode 100644
index 987ee70..0000000
--- a/src/views/dry/components/DryHerbTypeForm.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <div style="min-height: 400px">
-    <BasicForm @register="registerForm" />
-    <div style="width: 100%; text-align: center" v-if="!formDisabled">
-      <a-button @click="submitForm" pre-icon="ant-design:check" type="primary">鎻� 浜�</a-button>
-    </div>
-  </div>
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-import { saveOrUpdateDict } from '../api/DryHerbType.api';
-import { getBpmFormSchema } from '../dataDefine/DryHerbType.data';
-import { BasicForm, useForm } from '/@/components/Form/index';
-import { defHttp } from '/@/utils/http/axios';
-import { propTypes } from '/@/utils/propTypes';
-
-  export default defineComponent({
-    name: 'DryHerbTypeForm',
-    components: {
-      BasicForm,
-    },
-    props: {
-      formData: propTypes.object.def({}),
-      formBpm: propTypes.bool.def(true),
-    },
-    setup(props) {
-      const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-        labelWidth: 150,
-        schemas: getBpmFormSchema(props.formData),
-        showActionButtonGroup: false,
-        baseColProps: { span: 24 },
-      });
-
-      const formDisabled = computed(() => {
-        if (props.formData.disabled === false) {
-          return false;
-        }
-        return true;
-      });
-
-      let formData = {};
-      const queryByIdUrl = '/dry/dryHerbType/queryById';
-      async function initFormData() {
-        let params = { id: props.formData.dataId };
-        const data = await defHttp.get({ url: queryByIdUrl, params });
-        formData = { ...data };
-        //璁剧疆琛ㄥ崟鐨勫��
-        await setFieldsValue(formData);
-        //榛樿鏄鐢�
-        await setProps({ disabled: formDisabled.value });
-      }
-
-      async function submitForm() {
-        let data = getFieldsValue();
-        let params = Object.assign({}, formData, data);
-        console.log('琛ㄥ崟鏁版嵁', params);
-        await saveOrUpdateDict(params, true);
-      }
-
-      initFormData();
-
-      return {
-        registerForm,
-        formDisabled,
-        submitForm,
-      };
-    },
-  });
-</script>
diff --git a/src/views/dry/components/DryHerbTypeModal.vue b/src/views/dry/components/DryHerbTypeModal.vue
deleted file mode 100644
index 71d4c77..0000000
--- a/src/views/dry/components/DryHerbTypeModal.vue
+++ /dev/null
@@ -1,111 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :width="800" :title="getTitle" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-import { computed, ref, unref } from 'vue'
-import { loadTreeData, saveOrUpdateDict } from '../api/DryHerbType.api'
-import { formSchema } from '../dataDefine/DryHerbType.data'
-import { BasicForm, useForm } from '/@/components/Form'
-import { BasicModal, useModalInner } from '/@/components/Modal'
-// 鑾峰彇emit
-const emit = defineEmits(['register', 'success'])
-const isUpdate = ref(true)
-const expandedRowKeys = ref([])
-const treeData = ref([])
-// 褰撳墠缂栬緫鐨勬暟鎹�
-let model: Nullable<Recordable> = null
-//琛ㄥ崟閰嶇疆
-const [registerForm, { setProps, resetFields, setFieldsValue, validate, updateSchema }] = useForm({
-  schemas: formSchema,
-  showActionButtonGroup: false,
-  baseColProps: { span: 24 },
-  labelCol: {
-    xs: { span: 24 },
-    sm: { span: 4 },
-  },
-  wrapperCol: {
-    xs: { span: 24 },
-    sm: { span: 18 },
-  },
-})
-//琛ㄥ崟璧嬪��
-const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-  //閲嶇疆琛ㄥ崟
-  await resetFields()
-  expandedRowKeys.value = []
-  setModalProps({
-    confirmLoading: false,
-    minHeight: 80,
-    showOkBtn: !!!data?.hideFooter,
-  })
-  isUpdate.value = !!data?.isUpdate
-  if (data?.record) {
-    model = data.record
-    //琛ㄥ崟璧嬪��
-    await setFieldsValue({
-      ...data.record,
-    })
-  } else {
-    model = null
-  }
-  //鐖剁骇鑺傜偣鏍戜俊鎭�
-  treeData.value = await loadTreeData({ async: false, pcode: '' })
-  // 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-  setProps({ disabled: !!data?.hideFooter })
-})
-//璁剧疆鏍囬
-const getTitle = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'))
-
-/**
- * 鏍规嵁pid鑾峰彇灞曞紑鐨勮妭鐐�
- * @param pid
- * @param arr
- */
-function getExpandKeysByPid(pid, arr) {
-  if (pid && arr && arr.length > 0) {
-    for (let i = 0; i < arr.length; i++) {
-      if (arr[i].key == pid && unref(expandedRowKeys).indexOf(pid) < 0) {
-        expandedRowKeys.value.push(arr[i].key)
-        getExpandKeysByPid(arr[i]['parentId'], unref(treeData))
-      } else {
-        getExpandKeysByPid(pid, arr[i].children)
-      }
-    }
-  }
-}
-//琛ㄥ崟鎻愪氦浜嬩欢
-async function handleSubmit() {
-  try {
-    let values = await validate()
-    setModalProps({ confirmLoading: true })
-    //鎻愪氦琛ㄥ崟
-    await saveOrUpdateDict(values, isUpdate.value)
-    //鍏抽棴寮圭獥
-    closeModal()
-    //灞曞紑鐨勮妭鐐逛俊鎭�
-    await getExpandKeysByPid(values['pid'], unref(treeData))
-    //鍒锋柊鍒楄〃(isUpdate:鏄惁缂栬緫;values:琛ㄥ崟淇℃伅;expandedArr:灞曞紑鐨勮妭鐐逛俊鎭�)
-    emit('success', {
-      isUpdate: unref(isUpdate),
-      values: { ...values },
-      expandedArr: unref(expandedRowKeys).reverse(),
-      // 鏄惁鏇存敼浜嗙埗绾ц妭鐐�
-      changeParent: model != null && model['pid'] != values['pid'],
-    })
-  } finally {
-    setModalProps({ confirmLoading: false })
-  }
-}
-</script>
-<style lang="less" scoped>
-/** 鏃堕棿鍜屾暟瀛楄緭鍏ユ鏍峰紡 */
-:deep(.ant-input-number) {
-  width: 100%;
-}
-
-:deep(.ant-calendar-picker) {
-  width: 100%;
-}
-</style>
diff --git a/src/views/dry/components/DryOpcDeviceForm.vue b/src/views/dry/components/DryOpcDeviceForm.vue
deleted file mode 100644
index fbd7533..0000000
--- a/src/views/dry/components/DryOpcDeviceForm.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-    <div style="min-height: 400px">
-        <BasicForm @register="registerForm"></BasicForm>
-        <div style="width: 100%;text-align: center" v-if="!formDisabled">
-            <a-button @click="submitForm" pre-icon="ant-design:check" type="primary">鎻� 浜�</a-button>
-        </div>
-    </div>
-</template>
-
-<script lang="ts">
-    import {BasicForm, useForm} from '/@/components/Form/index';
-    import {computed, defineComponent} from 'vue';
-    import {defHttp} from '/@/utils/http/axios';
-    import { propTypes } from '/@/utils/propTypes';
-    import {getBpmFormSchema} from '../dataDefine/DryOpcDevice.data';
-    import {saveOrUpdate} from '../api/DryOpcDevice.api';
-    
-    export default defineComponent({
-        name: "DryOpcDeviceForm",
-        components:{
-            BasicForm
-        },
-        props:{
-            formData: propTypes.object.def({}),
-            formBpm: propTypes.bool.def(true),
-        },
-        setup(props){
-            const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-                labelWidth: 150,
-                schemas: getBpmFormSchema(props.formData),
-                showActionButtonGroup: false,
-                baseColProps: {span: 24}
-            });
-
-            const formDisabled = computed(()=>{
-                if(props.formData.disabled === false){
-                    return false;
-                }
-                return true;
-            });
-
-            let formData = {};
-            const queryByIdUrl = '/dry/dryOpcDevice/queryById';
-            async function initFormData(){
-                let params = {id: props.formData.dataId};
-                const data = await defHttp.get({url: queryByIdUrl, params});
-                formData = {...data}
-                //璁剧疆琛ㄥ崟鐨勫��
-                await setFieldsValue(formData);
-                //榛樿鏄鐢�
-                await setProps({disabled: formDisabled.value})
-            }
-
-            async function submitForm() {
-                let data = getFieldsValue();
-                let params = Object.assign({}, formData, data);
-                console.log('琛ㄥ崟鏁版嵁', params)
-                await saveOrUpdate(params, true)
-            }
-
-            initFormData();
-            
-            return {
-                registerForm,
-                formDisabled,
-                submitForm,
-            }
-        }
-    });
-</script>
\ No newline at end of file
diff --git a/src/views/dry/components/DryOpcDeviceModal.vue b/src/views/dry/components/DryOpcDeviceModal.vue
deleted file mode 100644
index 96d8c7c..0000000
--- a/src/views/dry/components/DryOpcDeviceModal.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
-      <BasicForm @register="registerForm"/>
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-    import {ref, computed, unref} from 'vue';
-    import {BasicModal, useModalInner} from '/@/components/Modal';
-    import {BasicForm, useForm} from '/@/components/Form/index';
-    import {formSchema} from '../dataDefine/DryOpcDevice.data';
-    import {saveOrUpdate} from '../api/DryOpcDevice.api';
-    // Emits澹版槑
-    const emit = defineEmits(['register','success']);
-    const isUpdate = ref(true);
-    //琛ㄥ崟閰嶇疆
-    const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
-        //labelWidth: 150,
-        schemas: formSchema,
-        showActionButtonGroup: false,
-        baseColProps: {span: 24}
-    });
-    //琛ㄥ崟璧嬪��
-    const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
-        //閲嶇疆琛ㄥ崟
-        await resetFields();
-        setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
-        isUpdate.value = !!data?.isUpdate;
-        if (unref(isUpdate)) {
-            //琛ㄥ崟璧嬪��
-            await setFieldsValue({
-                ...data.record,
-            });
-        }
-        // 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-       setProps({ disabled: !data?.showFooter })
-    });
-    //璁剧疆鏍囬
-    const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-    //琛ㄥ崟鎻愪氦浜嬩欢
-    async function handleSubmit(v) {
-        try {
-            let values = await validate();
-            setModalProps({confirmLoading: true});
-            //鎻愪氦琛ㄥ崟
-            await saveOrUpdate(values, isUpdate.value);
-            //鍏抽棴寮圭獥
-            closeModal();
-            //鍒锋柊鍒楄〃
-            emit('success');
-        } finally {
-            setModalProps({confirmLoading: false});
-        }
-    }
-</script>
-
-<style lang="less" scoped>
-	/** 鏃堕棿鍜屾暟瀛楄緭鍏ユ鏍峰紡 */
-  :deep(.ant-input-number){
-		width: 100%
-	}
-
-	:deep(.ant-calendar-picker){
-		width: 100%
-	}
-</style>
\ No newline at end of file
diff --git a/src/views/dry/components/DryOrderForm.vue b/src/views/dry/components/DryOrderForm.vue
deleted file mode 100644
index 6e3178d..0000000
--- a/src/views/dry/components/DryOrderForm.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-	<div style="min-height: 400px">
-		<BasicForm @register="registerForm" />
-		<div style="width: 100%; text-align: center" v-if="!formDisabled">
-			<a-button @click="submitForm" pre-icon="ant-design:check" type="primary">鎻� 浜�</a-button>
-		</div>
-	</div>
-</template>
-
-<script lang="ts">
-	import { computed, defineComponent } from 'vue'
-	import { saveOrUpdate } from '../api/DryOrder.api'
-	import { getBpmFormSchema } from '../dataDefine/DryOrder.data'
-	import { BasicForm, useForm } from '/@/components/Form/index'
-	import { defHttp } from '/@/utils/http/axios'
-	import { propTypes } from '/@/utils/propTypes'
-
-	export default defineComponent({
-		name: 'DryOrderForm',
-		components: {
-			BasicForm,
-		},
-		props: {
-			formData: propTypes.object.def({}),
-			formBpm: propTypes.bool.def(true),
-		},
-		setup(props) {
-			const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-				labelWidth: 150,
-				schemas: getBpmFormSchema(props.formData),
-				showActionButtonGroup: false,
-				baseColProps: { span: 24 },
-			})
-
-			const formDisabled = computed(() => {
-				if (props.formData.disabled === false) {
-					return false
-				}
-				return true
-			})
-
-			let formData = {}
-			const queryByIdUrl = '/dry/dryOrder/queryById'
-			async function initFormData() {
-				let params = { id: props.formData.dataId }
-				const data = await defHttp.get({ url: queryByIdUrl, params })
-				formData = { ...data }
-				//璁剧疆琛ㄥ崟鐨勫��
-				await setFieldsValue(formData)
-				//榛樿鏄鐢�
-				await setProps({ disabled: formDisabled.value })
-			}
-
-			async function submitForm() {
-				let data = getFieldsValue()
-				let params = Object.assign({}, formData, data)
-				console.log('琛ㄥ崟鏁版嵁', params)
-				await saveOrUpdate(params, true)
-			}
-
-			initFormData()
-
-			return {
-				registerForm,
-				formDisabled,
-				submitForm,
-			}
-		},
-	})
-</script>
diff --git a/src/views/dry/components/DryOrderModal.vue b/src/views/dry/components/DryOrderModal.vue
deleted file mode 100644
index 3fd7795..0000000
--- a/src/views/dry/components/DryOrderModal.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-	<BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
-		<BasicForm @register="registerForm" />
-	</BasicModal>
-</template>
-
-<script lang="ts" setup>
-	import { computed, ref, unref } from 'vue'
-	import { saveOrUpdate } from '../api/DryOrder.api'
-	import { formSchema } from '../dataDefine/DryOrder.data'
-	import { BasicForm, useForm } from '/@/components/Form/index'
-	import { BasicModal, useModalInner } from '/@/components/Modal'
-	// Emits澹版槑
-	const emit = defineEmits(['register', 'success'])
-	const isUpdate = ref(true)
-	//searchFormSchema
-	const [registerForm, { setProps, resetFields, setFieldsValue, validate }] = useForm({
-		//labelWidth: 150,
-		schemas: formSchema,
-		showActionButtonGroup: false,
-		baseColProps: { span: 24 },
-	})
-	//琛ㄥ崟璧嬪��
-	const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-		//閲嶇疆琛ㄥ崟
-		await resetFields()
-		setModalProps({ confirmLoading: false, showCancelBtn: !!data?.showFooter, showOkBtn: !!data?.showFooter })
-		isUpdate.value = !!data?.isUpdate
-		if (unref(isUpdate)) {
-			//琛ㄥ崟璧嬪��
-			await setFieldsValue({
-				...data.record,
-			})
-		}
-		// 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-		setProps({ disabled: !data?.showFooter })
-	})
-	//璁剧疆鏍囬
-	const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'))
-	//琛ㄥ崟鎻愪氦浜嬩欢
-	async function handleSubmit(v) {
-		try {
-			let values = await validate()
-			setModalProps({ confirmLoading: true })
-			//鎻愪氦琛ㄥ崟
-			await saveOrUpdate(values, isUpdate.value)
-			//鍏抽棴寮圭獥
-			closeModal()
-			//鍒锋柊鍒楄〃
-			emit('success')
-		} finally {
-			setModalProps({ confirmLoading: false })
-		}
-	}
-</script>
-
-<style lang="less" scoped>
-	/** 鏃堕棿鍜屾暟瀛楄緭鍏ユ鏍峰紡 */
-	:deep(.ant-input-number) {
-		width: 100%;
-	}
-
-	:deep(.ant-calendar-picker) {
-		width: 100%;
-	}
-</style>
diff --git a/src/views/dry/components/DryOrderTrendForm.vue b/src/views/dry/components/DryOrderTrendForm.vue
deleted file mode 100644
index d3eec01..0000000
--- a/src/views/dry/components/DryOrderTrendForm.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <div style="min-height: 400px">
-    <BasicForm @register="registerForm" />
-    <div style="width: 100%; text-align: center" v-if="!formDisabled">
-      <a-button @click="submitForm" pre-icon="ant-design:check" type="primary">鎻� 浜�</a-button>
-    </div>
-  </div>
-</template>
-
-<script lang="ts">
-import { computed, defineComponent } from 'vue';
-import { saveOrUpdate } from '../api/DryOrderTrend.api';
-import { getBpmFormSchema } from '../dataDefine/DryOrderTrend.data';
-import { BasicForm, useForm } from '/@/components/Form/index';
-import { defHttp } from '/@/utils/http/axios';
-import { propTypes } from '/@/utils/propTypes';
-
-export default defineComponent({
-  name: 'DryOrderTrendForm',
-  components: {
-    BasicForm,
-  },
-  props: {
-    formData: propTypes.object.def({}),
-    formBpm: propTypes.bool.def(true),
-  },
-  setup(props) {
-    const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-      labelWidth: 150,
-      schemas: getBpmFormSchema(props.formData),
-      showActionButtonGroup: false,
-      baseColProps: { span: 24 },
-    });
-
-    const formDisabled = computed(() => {
-      if (props.formData.disabled === false) {
-        return false;
-      }
-      return true;
-    });
-
-    let formData = {};
-    const queryByIdUrl = '/dry/dryOrderTrend/queryById';
-    async function initFormData() {
-      let params = { id: props.formData.dataId };
-      const data = await defHttp.get({ url: queryByIdUrl, params });
-      formData = { ...data };
-      //璁剧疆琛ㄥ崟鐨勫��
-      await setFieldsValue(formData);
-      //榛樿鏄鐢�
-      await setProps({ disabled: formDisabled.value });
-    }
-
-    async function submitForm() {
-      let data = getFieldsValue();
-      let params = Object.assign({}, formData, data);
-      console.log('琛ㄥ崟鏁版嵁', params);
-      await saveOrUpdate(params, true);
-    }
-
-    initFormData();
-
-    return {
-      registerForm,
-      formDisabled,
-      submitForm,
-    };
-  },
-});
-</script>
diff --git a/src/views/dry/components/DryOrderTrendModal.vue b/src/views/dry/components/DryOrderTrendModal.vue
deleted file mode 100644
index 71af75f..0000000
--- a/src/views/dry/components/DryOrderTrendModal.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-import { computed, ref, unref } from 'vue';
-import { saveOrUpdate } from '../api/DryOrderTrend.api';
-import { formSchema } from '../dataDefine/DryOrderTrend.data';
-import { BasicForm, useForm } from '/@/components/Form/index';
-import { BasicModal, useModalInner } from '/@/components/Modal';
-// Emits澹版槑
-const emit = defineEmits(['register', 'success']);
-const isUpdate = ref(true);
-//琛ㄥ崟閰嶇疆
-const [registerForm, { setProps, resetFields, setFieldsValue, validate }] = useForm({
-  //labelWidth: 150,
-  schemas: formSchema,
-  showActionButtonGroup: false,
-  baseColProps: { span: 24 },
-});
-//琛ㄥ崟璧嬪��
-const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-  //閲嶇疆琛ㄥ崟
-  await resetFields();
-  setModalProps({ confirmLoading: false, showCancelBtn: !!data?.showFooter, showOkBtn: !!data?.showFooter });
-  isUpdate.value = !!data?.isUpdate;
-  if (unref(isUpdate)) {
-    //琛ㄥ崟璧嬪��
-    await setFieldsValue({
-      ...data.record,
-    });
-  }
-  // 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-  setProps({ disabled: !data?.showFooter });
-});
-//璁剧疆鏍囬
-const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-//琛ㄥ崟鎻愪氦浜嬩欢
-async function handleSubmit(v) {
-  try {
-    let values = await validate();
-    setModalProps({ confirmLoading: true });
-    //鎻愪氦琛ㄥ崟
-    await saveOrUpdate(values, isUpdate.value);
-    //鍏抽棴寮圭獥
-    closeModal();
-    //鍒锋柊鍒楄〃
-    emit('success');
-  } finally {
-    setModalProps({ confirmLoading: false });
-  }
-}
-</script>
-
-<style lang="less" scoped>
-/** 鏃堕棿鍜屾暟瀛楄緭鍏ユ鏍峰紡 */
-:deep(.ant-input-number) {
-  width: 100%;
-}
-
-:deep(.ant-calendar-picker) {
-  width: 100%;
-}
-</style>
diff --git a/src/views/dry/components/DryResultForm.vue b/src/views/dry/components/DryResultForm.vue
deleted file mode 100644
index 1464b1a..0000000
--- a/src/views/dry/components/DryResultForm.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-    <div style="min-height: 400px">
-        <BasicForm @register="registerForm"></BasicForm>
-        <div style="width: 100%;text-align: center" v-if="!formDisabled">
-            <a-button @click="submitForm" pre-icon="ant-design:check" type="primary">鎻� 浜�</a-button>
-        </div>
-    </div>
-</template>
-
-<script lang="ts">
-    import {BasicForm, useForm} from '/@/components/Form/index';
-    import {computed, defineComponent} from 'vue';
-    import {defHttp} from '/@/utils/http/axios';
-    import { propTypes } from '/@/utils/propTypes';
-    import {getBpmFormSchema} from '../dataDefine/DryResult.data';
-    import {saveOrUpdate} from '../api/DryResult.api';
-    
-    export default defineComponent({
-        name: "DryResultForm",
-        components:{
-            BasicForm
-        },
-        props:{
-            formData: propTypes.object.def({}),
-            formBpm: propTypes.bool.def(true),
-        },
-        setup(props){
-            const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-                labelWidth: 150,
-                schemas: getBpmFormSchema(props.formData),
-                showActionButtonGroup: false,
-                baseColProps: {span: 24}
-            });
-
-            const formDisabled = computed(()=>{
-                if(props.formData.disabled === false){
-                    return false;
-                }
-                return true;
-            });
-
-            let formData = {};
-            const queryByIdUrl = '/dry/dryResult/queryById';
-            async function initFormData(){
-                let params = {id: props.formData.dataId};
-                const data = await defHttp.get({url: queryByIdUrl, params});
-                formData = {...data}
-                //璁剧疆琛ㄥ崟鐨勫��
-                await setFieldsValue(formData);
-                //榛樿鏄鐢�
-                await setProps({disabled: formDisabled.value})
-            }
-
-            async function submitForm() {
-                let data = getFieldsValue();
-                let params = Object.assign({}, formData, data);
-                console.log('琛ㄥ崟鏁版嵁', params)
-                await saveOrUpdate(params, true)
-            }
-
-            initFormData();
-            
-            return {
-                registerForm,
-                formDisabled,
-                submitForm,
-            }
-        }
-    });
-</script>
\ No newline at end of file
diff --git a/src/views/dry/components/DryResultModal.vue b/src/views/dry/components/DryResultModal.vue
deleted file mode 100644
index ea1f043..0000000
--- a/src/views/dry/components/DryResultModal.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-    <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
-        <BasicForm @register="registerForm" />
-    </BasicModal>
-</template>
-
-<script lang="ts" setup>
-import { computed, ref, unref } from 'vue'
-import { saveOrUpdate } from '../api/DryResult.api'
-import { formSchema } from '../dataDefine/DryResult.data'
-import { BasicForm, useForm } from '/@/components/Form/index'
-import { BasicModal, useModalInner } from '/@/components/Modal'
-// Emits澹版槑
-const emit = defineEmits(['register', 'success'])
-const isUpdate = ref(true)
-//琛ㄥ崟閰嶇疆
-const [registerForm, { setProps, resetFields, setFieldsValue, validate }] = useForm({
-    //labelWidth: 150,
-    schemas: formSchema,
-    showActionButtonGroup: false,
-    baseColProps: { span: 24 },
-})
-//琛ㄥ崟璧嬪��
-const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields()
-    setModalProps({ confirmLoading: false, showCancelBtn: !!data?.showFooter, showOkBtn: !!data?.showFooter })
-    isUpdate.value = !!data?.isUpdate
-    if (unref(isUpdate)) {
-        //琛ㄥ崟璧嬪��
-        await setFieldsValue({
-            ...data.record,
-        })
-    }
-    // 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-    setProps({ disabled: !data?.showFooter })
-})
-//璁剧疆鏍囬
-const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'))
-//琛ㄥ崟鎻愪氦浜嬩欢
-async function handleSubmit(v) {
-    try {
-        let values = await validate()
-        setModalProps({ confirmLoading: true })
-        //鎻愪氦琛ㄥ崟
-        await saveOrUpdate(values, isUpdate.value)
-        //鍏抽棴寮圭獥
-        closeModal()
-        //鍒锋柊鍒楄〃
-        emit('success')
-    } finally {
-        setModalProps({ confirmLoading: false })
-    }
-}
-</script>
-
-<style lang="less" scoped>
-/** 鏃堕棿鍜屾暟瀛楄緭鍏ユ鏍峰紡 */
-:deep(.ant-input-number) {
-    width: 100%;
-}
-
-:deep(.ant-calendar-picker) {
-    width: 100%;
-}
-</style>
diff --git a/src/views/dry/components/DryShopForm.vue b/src/views/dry/components/DryShopForm.vue
deleted file mode 100644
index 21a6a9c..0000000
--- a/src/views/dry/components/DryShopForm.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <div style="min-height: 400px">
-    <BasicForm @register="registerForm" />
-    <div style="width: 100%; text-align: center" v-if="!formDisabled">
-      <a-button @click="submitForm" pre-icon="ant-design:check" type="primary">鎻� 浜�</a-button>
-    </div>
-  </div>
-</template>
-
-<script lang="ts">
-  import { computed, defineComponent } from 'vue';
-import { saveOrUpdate } from '../api/DryShop.api';
-import { getBpmFormSchema } from '../dataDefine/DryShop.data';
-import { BasicForm, useForm } from '/@/components/Form/index';
-import { defHttp } from '/@/utils/http/axios';
-import { propTypes } from '/@/utils/propTypes';
-
-  export default defineComponent({
-    name: 'DryShopForm',
-    components: {
-      BasicForm,
-    },
-    props: {
-      formData: propTypes.object.def({}),
-      formBpm: propTypes.bool.def(true),
-    },
-    setup(props) {
-      const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-        labelWidth: 150,
-        schemas: getBpmFormSchema(props.formData),
-        showActionButtonGroup: false,
-        baseColProps: { span: 24 },
-      });
-
-      const formDisabled = computed(() => {
-        if (props.formData.disabled === false) {
-          return false;
-        }
-        return true;
-      });
-
-      let formData = {};
-      const queryByIdUrl = '/dry/dryShop/queryById';
-      async function initFormData() {
-        let params = { id: props.formData.dataId };
-        const data = await defHttp.get({ url: queryByIdUrl, params });
-        formData = { ...data };
-        //璁剧疆琛ㄥ崟鐨勫��
-        await setFieldsValue(formData);
-        //榛樿鏄鐢�
-        await setProps({ disabled: formDisabled.value });
-      }
-
-      async function submitForm() {
-        let data = getFieldsValue();
-        let params = Object.assign({}, formData, data);
-        console.log('琛ㄥ崟鏁版嵁', params);
-        await saveOrUpdate(params, true);
-      }
-
-      initFormData();
-
-      return {
-        registerForm,
-        formDisabled,
-        submitForm,
-      };
-    },
-  });
-</script>
diff --git a/src/views/dry/components/DryShopModal.vue b/src/views/dry/components/DryShopModal.vue
deleted file mode 100644
index b36dc9b..0000000
--- a/src/views/dry/components/DryShopModal.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { computed, ref, unref } from 'vue';
-    import { saveOrUpdate } from '../api/DryShop.api';
-    import { formSchema } from '../dataDefine/DryShop.data';
-    import { BasicForm, useForm } from '/@/components/Form/index';
-    import { BasicModal, useModalInner } from '/@/components/Modal';
-  // Emits澹版槑
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { setProps, resetFields, setFieldsValue, validate }] = useForm({
-    //labelWidth: 150,
-    schemas: formSchema,
-    showActionButtonGroup: false,
-    baseColProps: { span: 24 },
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false, showCancelBtn: !!data?.showFooter, showOkBtn: !!data?.showFooter });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-    // 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-    setProps({ disabled: !data?.showFooter });
-  });
-  //璁剧疆鏍囬
-  const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit(v) {
-    try {
-      let values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdate(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
-
-<style lang="less" scoped>
-  /** 鏃堕棿鍜屾暟瀛楄緭鍏ユ鏍峰紡 */
-  :deep(.ant-input-number) {
-    width: 100%;
-  }
-
-  :deep(.ant-calendar-picker) {
-    width: 100%;
-  }
-</style>
diff --git a/src/views/dry/dataDefine/DryEqpType.data.ts b/src/views/dry/dataDefine/DryEqpType.data.ts
deleted file mode 100644
index bfdd10e..0000000
--- a/src/views/dry/dataDefine/DryEqpType.data.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table'
-import { rules } from '/@/utils/helper/validator'
-//鍒楄〃鏁版嵁
-export const columns: BasicColumn[] = [
-	{
-		title: '缂栫爜',
-		align: 'center',
-		dataIndex: 'code',
-	},
-	{
-		title: '鍚嶇О',
-		align: 'center',
-		dataIndex: 'name',
-	},
-]
-//鏌ヨ鏁版嵁
-export const searchFormSchema: FormSchema[] = [
-	{
-		label: '缂栫爜',
-		field: 'code',
-		component: 'Input',
-		colProps: { span: 6 },
-	},
-	{
-		label: '鍚嶇О',
-		field: 'name',
-		component: 'Input',
-		colProps: { span: 6 },
-	},
-]
-//琛ㄥ崟鏁版嵁
-export const formSchema: FormSchema[] = [
-	{
-		label: '缂栫爜',
-		field: 'code',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: true, message: '璇疯緭鍏ョ紪鐮�!' }, { ...rules.duplicateCheckRule('dry_eqp_type', 'code', model, schema)[0] }]
-		},
-	},
-	{
-		label: '鍚嶇О',
-		field: 'name',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: true, message: '璇疯緭鍏ュ悕绉�!' }, { ...rules.duplicateCheckRule('dry_eqp_type', 'name', model, schema)[0] }]
-		},
-	},
-	// TODO 涓婚敭闅愯棌瀛楁锛岀洰鍓嶅啓姝讳负ID
-	{
-		label: '',
-		field: 'id',
-		component: 'Input',
-		show: false,
-	},
-]
-
-/**
- * 娴佺▼琛ㄥ崟璋冪敤杩欎釜鏂规硶鑾峰彇formSchema
- * @param param
- */
-export function getBpmFormSchema(_formData): FormSchema[] {
-	// 榛樿鍜屽師濮嬭〃鍗曚繚鎸佷竴鑷� 濡傛灉娴佺▼涓厤缃簡鏉冮檺鏁版嵁锛岃繖閲岄渶瑕佸崟鐙鐞唂ormSchema
-	return formSchema
-}
diff --git a/src/views/dry/dataDefine/DryEquipment.data.ts b/src/views/dry/dataDefine/DryEquipment.data.ts
deleted file mode 100644
index 215fbd8..0000000
--- a/src/views/dry/dataDefine/DryEquipment.data.ts
+++ /dev/null
@@ -1,179 +0,0 @@
-import { dryOrder } from './DryOrder.data'
-import { BasicColumn, FormSchema } from '/@/components/Table'
-import { getTenantId } from '/@/utils/auth'
-import { render } from '/@/utils/common/renderUtils'
-import { rules } from '/@/utils/helper/validator'
-//鍒楄〃鏁版嵁
-export const columns: BasicColumn[] = [
-	{
-		title: '璁惧缂栧彿',
-		align: 'center',
-		dataIndex: 'code',
-	},
-	{
-		title: '璁惧鍚嶇О',
-		align: 'center',
-		dataIndex: 'name',
-	},
-	{
-		title: '璁惧绫诲瀷',
-		align: 'center',
-		dataIndex: 'type_dictText',
-	},
-	{
-		title: '璁惧鎻忚堪',
-		align: 'center',
-		dataIndex: 'remark',
-	},
-	{
-		title: '璁惧IP',
-		align: 'center',
-		dataIndex: 'ip',
-	},
-	{
-		title: '杞﹂棿',
-		align: 'center',
-		dataIndex: 'shopId_dictText',
-	},
-	{
-		title: '鍚敤鐘舵��',
-		align: 'center',
-		dataIndex: 'enable',
-		customRender: ({ text }) => {
-			return render.renderSwitch(text, [
-				{ text: '鏄�', value: 'Y' },
-				{ text: '鍚�', value: 'N' },
-			])
-		},
-	},
-]
-//鏌ヨ鏁版嵁
-export const searchFormSchema: FormSchema[] = [
-	{
-		label: '璁惧缂栧彿',
-		field: 'code',
-		component: 'Input',
-		colProps: { span: 6 },
-	},
-	{
-		label: '璁惧鍚嶇О',
-		field: 'name',
-		component: 'Input',
-		colProps: { span: 6 },
-	},
-	{
-		label: '璁惧绫诲瀷',
-		field: 'type',
-		component: 'JDictSelectTag',
-		componentProps: {
-			dictCode: 'dry_eqp_type,name,id,tenant_id=' + getTenantId(),
-		},
-		colProps: { span: 6 },
-	},
-	{
-		label: '杞﹂棿id',
-		field: 'shopId',
-		component: 'JDictSelectTag',
-		componentProps: {
-			dictCode: 'dry_shop,name,id,tenant_id=' + getTenantId(),
-		},
-		colProps: { span: 6 },
-	},
-]
-//琛ㄥ崟鏁版嵁
-export const formSchema: FormSchema[] = [
-	{
-		label: '璁惧缂栧彿',
-		field: 'code',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: true, message: '璇疯緭鍏ヨ澶囩紪鍙�!' }, { ...rules.duplicateCheckRule('dry_equipment', 'code', model, schema)[0] }]
-		},
-	},
-	{
-		label: '璁惧鍚嶇О',
-		field: 'name',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: true, message: '璇疯緭鍏ヨ澶囧悕绉�!' }, { ...rules.duplicateCheckRule('dry_equipment', 'name', model, schema)[0] }]
-		},
-	},
-	{
-		label: '璁惧IP',
-		field: 'ip',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: true, message: '璇风粦瀹氳澶嘔P!' }, { ...rules.duplicateCheckRule('dry_equipment', 'ip', model, schema)[0] }]
-		},
-	},
-	{
-		label: '璁惧绫诲瀷',
-		field: 'type',
-		component: 'JDictSelectTag',
-		componentProps: {
-			dictCode: 'dry_eqp_type,name,id,tenant_id=' + getTenantId(),
-		},
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: true, message: '璇疯緭鍏ヨ澶囩被鍨�!' }]
-		},
-	},
-	{
-		label: '璁惧鎻忚堪',
-		field: 'remark',
-		component: 'Input',
-	},
-	{
-		label: '杞﹂棿id',
-		field: 'shopId',
-		component: 'JDictSelectTag',
-		componentProps: {
-			dictCode: 'dry_shop,name,id,tenant_id=' + getTenantId(),
-		},
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: true, message: '璇疯緭鍏ヨ溅闂磇d!' }]
-		},
-	},
-	{
-		label: '鍚敤鐘舵��',
-		field: 'enable',
-		component: 'JSwitch',
-		componentProps: {},
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: true, message: '璇疯緭鍏ュ惎鐢ㄧ姸鎬�!' }]
-		},
-	},
-	// TODO 涓婚敭闅愯棌瀛楁锛岀洰鍓嶅啓姝讳负ID
-	{
-		label: '',
-		field: 'id',
-		component: 'Input',
-		show: false,
-	},
-]
-
-/**
- * 娴佺▼琛ㄥ崟璋冪敤杩欎釜鏂规硶鑾峰彇formSchema
- * @param param
- */
-export function getBpmFormSchema(_formData): FormSchema[] {
-	// 榛樿鍜屽師濮嬭〃鍗曚繚鎸佷竴鑷� 濡傛灉娴佺▼涓厤缃簡鏉冮檺鏁版嵁锛岃繖閲岄渶瑕佸崟鐙鐞唂ormSchema
-	return formSchema
-}
-
-export interface dryEquipment {
-	id: string
-	code: string
-	name: string
-	type: string
-	type_dictText: string
-	remark: string
-	shop_id: string
-	enable: string
-	create_by: string
-	create_time: Date
-	update_by: string
-	update_time: Date
-	tenant_id: number
-	ip: string
-	order: dryOrder
-}
diff --git a/src/views/dry/dataDefine/DryHerb.data.ts b/src/views/dry/dataDefine/DryHerb.data.ts
deleted file mode 100644
index a967ef6..0000000
--- a/src/views/dry/dataDefine/DryHerb.data.ts
+++ /dev/null
@@ -1,258 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table'
-import { rules } from '/@/utils/helper/validator'
-//鍒楄〃鏁版嵁
-export const columns: BasicColumn[] = [
-  {
-    title: '鑽潗缂栧彿',
-    align: 'center',
-    dataIndex: 'code',
-  },
-  {
-    title: '鑽潗鍚嶇О',
-    align: 'center',
-    dataIndex: 'name',
-  },
-  {
-    title: '鑽潗鍒嗙被',
-    align: 'center',
-    dataIndex: 'type_dictText',
-  },
-  {
-    title: '鑽潗鍒悕',
-    align: 'center',
-    dataIndex: 'alias',
-  },
-  {
-    title: '鑽敤閮ㄤ綅',
-    align: 'center',
-    dataIndex: 'parts',
-  },
-
-  // {
-  //   title: '鍒濆鍚按鐜�',
-  //   align: 'center',
-  //   dataIndex: 'initial',
-  // },
-  {
-    title: '鐩爣鍚按鐜�',
-    align: 'center',
-    dataIndex: 'target',
-  },
-  // {
-  //   title: '鎶曟枡閲忥紙绛愶級',
-  //   align: 'center',
-  //   dataIndex: 'feed',
-  // },
-  // {
-  //   title: '棰勮骞茬嚗鏃堕棿',
-  //   align: 'center',
-  //   dataIndex: 'et',
-  // },
-  {
-    title: '鐑娓╁害',
-    align: 'center',
-    dataIndex: 'windTemp',
-  },
-  // {
-  //   title: '鐜娓╁害',
-  //   align: 'center',
-  //   dataIndex: 'envTemp',
-  // },
-  // {
-  //   title: '鐜婀垮害',
-  //   align: 'center',
-  //   dataIndex: 'envHum',
-  // },
-  // {
-  //   title: '鑽℃枡寤舵椂锛坢s锛�',
-  //   align: 'center',
-  //   dataIndex: 'delay',
-  // },
-  // {
-  //   title: '缈绘枡娆℃暟',
-  //   align: 'center',
-  //   dataIndex: 'turn',
-  // },
-  {
-    title: '骞茬嚗鏂规硶',
-    align: 'center',
-    dataIndex: 'dryMethod',
-  },
-
-  {
-    title: '娉ㄦ剰浜嬮」',
-    align: 'center',
-    dataIndex: 'notice',
-  },
-  {
-    title: '鐗规�ф爣绛�',
-    align: 'center',
-    dataIndex: 'tag',
-  },
-]
-//鏌ヨ鏁版嵁
-export const searchFormSchema: FormSchema[] = [
-  {
-    label: '鑽潗缂栧彿',
-    field: 'code',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '鑽潗鍚嶇О',
-    field: 'name',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '鑽潗鍒嗙被',
-    field: 'type',
-    component: 'JTreeSelect',
-    componentProps: {
-      dict: 'dry_herb_type,name,id',
-      pidField: 'pid',
-      hasChildField: 'has_child',
-      converIsLeafVal: 1,
-    },
-    colProps: { span: 6 },
-  },
-]
-//琛ㄥ崟鏁版嵁
-export const formSchema: FormSchema[] = [
-  {
-    label: '鑽潗缂栧彿',
-    field: 'code',
-    component: 'Input',
-    dynamicRules: ({ model, schema }) => {
-      return [{ required: true, message: '璇疯緭鍏ヨ嵂鏉愮紪鍙�!' }, { ...rules.duplicateCheckRule('dry_herb', 'code', model, schema)[0] }]
-    },
-  },
-  {
-    label: '鑽潗鍚嶇О',
-    field: 'name',
-    component: 'Input',
-    dynamicRules: ({ model, schema }) => {
-      return [{ required: true, message: '璇疯緭鍏ヨ嵂鏉愬悕绉�!' }, { ...rules.duplicateCheckRule('dry_herb', 'name', model, schema)[0] }]
-    },
-  },
-  {
-    label: '鑽潗鍒嗙被',
-    field: 'type',
-    component: 'JTreeSelect',
-    componentProps: {
-      dict: 'dry_herb_type,name,id',
-      pidField: 'pid',
-      hasChildField: 'has_child',
-      converIsLeafVal: 1,
-    },
-    dynamicRules: ({ model, schema }) => {
-      return [{ required: true, message: '璇疯緭鍏ヨ嵂鏉愬垎绫�!' }]
-    },
-  },
-  {
-    label: '鑽潗鍒悕',
-    field: 'alias',
-    component: 'Input',
-  },
-  {
-    label: '鑽敤閮ㄤ綅',
-    field: 'parts',
-    component: 'Input',
-  },
-
-  // {
-  //   label: '鍒濆鍚按鐜�',
-  //   field: 'initial',
-  //   component: 'InputNumber',
-  // },
-  {
-    label: '鐩爣鍚按鐜�',
-    field: 'target',
-    component: 'InputNumber',
-  },
-  // {
-  //   label: '鎶曟枡閲�',
-  //   field: 'feed',
-  //   component: 'InputNumber',
-  // },
-  // {
-  //   label: '棰勮骞茬嚗鏃堕棿',
-  //   field: 'et',
-  //   component: 'InputNumber',
-  //   dynamicRules: ({ model, schema }) => {
-  //     return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-  //   },
-  // },
-  {
-    label: '鐑娓╁害',
-    field: 'windTemp',
-    component: 'InputNumber',
-    dynamicRules: ({ model, schema }) => {
-      return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-    },
-  },
-  // {
-  //   label: '鐜娓╁害',
-  //   field: 'envTemp',
-  //   component: 'InputNumber',
-  //   dynamicRules: ({ model, schema }) => {
-  //     return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-  //   },
-  // },
-  // {
-  //   label: '鐜婀垮害',
-  //   field: 'envHum',
-  //   component: 'InputNumber',
-  //   dynamicRules: ({ model, schema }) => {
-  //     return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-  //   },
-  // },
-  // {
-  //   label: '鑽℃枡寤舵椂',
-  //   field: 'delay',
-  //   component: 'InputNumber',
-  //   dynamicRules: ({ model, schema }) => {
-  //     return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-  //   },
-  // },
-  // {
-  //   label: '缈绘枡娆℃暟',
-  //   field: 'turn',
-  //   component: 'InputNumber',
-  //   dynamicRules: ({ model, schema }) => {
-  //     return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-  //   },
-  // },
-  {
-    label: '骞茬嚗鏂规硶',
-    field: 'dryMethod',
-    component: 'Input',
-  },
-
-  {
-    label: '娉ㄦ剰浜嬮」',
-    field: 'notice',
-    component: 'Input',
-  },
-  {
-    label: '鐗规�ф爣绛�',
-    field: 'tag',
-    component: 'Input',
-  },
-  // TODO 涓婚敭闅愯棌瀛楁锛岀洰鍓嶅啓姝讳负ID
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-]
-
-/**
- * 娴佺▼琛ㄥ崟璋冪敤杩欎釜鏂规硶鑾峰彇formSchema
- * @param param
- */
-export function getBpmFormSchema(_formData): FormSchema[] {
-  // 榛樿鍜屽師濮嬭〃鍗曚繚鎸佷竴鑷� 濡傛灉娴佺▼涓厤缃簡鏉冮檺鏁版嵁锛岃繖閲岄渶瑕佸崟鐙鐞唂ormSchema
-  return formSchema
-}
diff --git a/src/views/dry/dataDefine/DryHerbFormula.data.ts b/src/views/dry/dataDefine/DryHerbFormula.data.ts
deleted file mode 100644
index 2cd5ccd..0000000
--- a/src/views/dry/dataDefine/DryHerbFormula.data.ts
+++ /dev/null
@@ -1,226 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table'
-//鍒楄〃鏁版嵁
-export const columns: BasicColumn[] = [
-	{
-		title: '鑽潗',
-		align: 'center',
-		dataIndex: 'herbId_dictText',
-	},
-	// {
-	// 	title: '鑽潗鍚嶇О',
-	// 	align: 'center',
-	// 	dataIndex: 'herbName',
-	// },
-	{
-		title: '閫傜敤璁惧',
-		align: 'center',
-		dataIndex: 'eqpType_dictText',
-	},
-	{
-		title: '鐩爣鍚按鐜�',
-		align: 'center',
-		dataIndex: 'target',
-	},
-	{
-		title: '鎶曟枡閲�',
-		align: 'center',
-		dataIndex: 'feed',
-	},
-	{
-		title: '棰勮骞茬嚗鏃堕棿',
-		align: 'center',
-		dataIndex: 'et',
-	},
-	{
-		title: '鐑娓╁害',
-		align: 'center',
-		dataIndex: 'windTemp',
-	},
-	{
-		title: '鐜娓╁害',
-		align: 'center',
-		dataIndex: 'envTemp',
-	},
-	{
-		title: '鐜婀垮害',
-		align: 'center',
-		dataIndex: 'envHum',
-	},
-	{
-		title: '鑽℃枡寤舵椂ms',
-		align: 'center',
-		dataIndex: 'delay',
-	},
-	{
-		title: '缈绘枡娆℃暟',
-		align: 'center',
-		dataIndex: 'turn',
-	},
-	// {
-	// 	title: '绉熸埛id',
-	// 	align: 'center',
-	// 	dataIndex: 'tenantId',
-	// },
-]
-//鏌ヨ鏁版嵁
-export const searchFormSchema: FormSchema[] = [
-	{
-		label: '鑽潗',
-		field: 'herbId',
-		component: 'JSearchSelect',
-		componentProps: {
-			dict: 'dry_herb,name,id',
-		},
-		colProps: { span: 6 },
-	},
-]
-//琛ㄥ崟鏁版嵁
-export const formSchema: FormSchema[] = [
-	{
-		label: '鑽潗',
-		field: 'herbId',
-		component: 'JSearchSelect',
-		componentProps: {
-			dict: 'dry_herb,name,id',
-		},
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: true, message: '璇烽�夋嫨鑽潗!' }]
-		},
-	},
-	// {
-	// 	label: '鑽潗鍚嶇О',
-	// 	field: 'herbName',
-	// 	component: 'Input',
-	// },
-	{
-		label: '璁惧绫诲瀷',
-		field: 'eqpType',
-		component: 'JSearchSelect',
-		componentProps: {
-			dict: 'dry_eqp_type,name,id',
-		},
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: true, message: '璇疯澶囪澶囩被鍨�!' }]
-		},
-	},
-	{
-		label: '鐩爣鍚按鐜�',
-		field: 'target',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-		},
-		renderComponentContent: () => {
-			return {
-				suffix: () => '%',
-			}
-		},
-	},
-	{
-		label: '鎶曟枡閲�',
-		field: 'feed',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-		},
-		renderComponentContent: () => {
-			return {
-				suffix: () => '绛�',
-			}
-		},
-	},
-	{
-		label: '棰勮骞茬嚗鏃堕棿',
-		field: 'et',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-		},
-		renderComponentContent: () => {
-			return {
-				suffix: () => '鍒嗛挓',
-			}
-		},
-	},
-	{
-		label: '鐑娓╁害',
-		field: 'windTemp',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-		},
-		renderComponentContent: () => {
-			return {
-				suffix: () => '鈩�',
-			}
-		},
-	},
-	{
-		label: '鐜娓╁害',
-		field: 'envTemp',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-		},
-		renderComponentContent: () => {
-			return {
-				suffix: () => '鈩�',
-			}
-		},
-	},
-	{
-		label: '鐜婀垮害',
-		field: 'envHum',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-		},
-		renderComponentContent: () => {
-			return {
-				suffix: () => 'rh',
-			}
-		},
-	},
-	{
-		label: '鑽℃枡寤舵椂',
-		field: 'delay',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-		},
-		renderComponentContent: () => {
-			return {
-				suffix: () => 'ms',
-			}
-		},
-	},
-	{
-		label: '缈绘枡娆℃暟',
-		field: 'turn',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '璇疯緭鍏ユ暟瀛�!' }]
-		},
-		renderComponentContent: () => {
-			return {
-				suffix: () => '娆�',
-			}
-		},
-	},
-	// TODO 涓婚敭闅愯棌瀛楁锛岀洰鍓嶅啓姝讳负ID
-	{
-		label: '',
-		field: 'id',
-		component: 'Input',
-		show: false,
-	},
-]
-
-/**
- * 娴佺▼琛ㄥ崟璋冪敤杩欎釜鏂规硶鑾峰彇formSchema
- * @param param
- */
-export function getBpmFormSchema(_formData): FormSchema[] {
-	// 榛樿鍜屽師濮嬭〃鍗曚繚鎸佷竴鑷� 濡傛灉娴佺▼涓厤缃簡鏉冮檺鏁版嵁锛岃繖閲岄渶瑕佸崟鐙鐞唂ormSchema
-	return formSchema
-}
diff --git a/src/views/dry/dataDefine/DryHerbInfo.data.ts b/src/views/dry/dataDefine/DryHerbInfo.data.ts
deleted file mode 100644
index d34afa8..0000000
--- a/src/views/dry/dataDefine/DryHerbInfo.data.ts
+++ /dev/null
@@ -1,226 +0,0 @@
-import {BasicColumn} from '/@/components/Table';
-import {FormSchema} from '/@/components/Table';
-
-//鍒楄〃鏁版嵁
-export const columns: BasicColumn[] = [
-   {
-    title: '涓嵂鍚�',
-    align:"center",
-    dataIndex: 'name'
-   },
-   {
-    title: '鎷奸煶',
-    align:"center",
-    dataIndex: 'pinyin'
-   },
-   {
-    title: '鍒悕',
-    align:"center",
-    dataIndex: 'alias'
-   },
-   {
-    title: '鑻辨枃鍚�',
-    align:"center",
-    dataIndex: 'english'
-   },
-   {
-    title: '鑽敤閮ㄤ綅',
-    align:"center",
-    dataIndex: 'parts'
-   },
-   {
-    title: '妞嶇墿褰㈡��',
-    align:"center",
-    dataIndex: 'morphology'
-   },
-   {
-    title: '浜у湴鍒嗗竷',
-    align:"center",
-    dataIndex: 'origin'
-   },
-   {
-    title: '閲囨敹鍔犲伐',
-    align:"center",
-    dataIndex: 'harvest'
-   },
-   {
-    title: '鑽潗鎬х姸',
-    align:"center",
-    dataIndex: 'characterDrug'
-   },
-   {
-    title: '鎬у懗褰掔粡',
-    align:"center",
-    dataIndex: 'famt'
-   },
-   {
-    title: '鍔熸晥涓庝綔鐢�',
-    align:"center",
-    dataIndex: 'efficacy'
-   },
-   {
-    title: '涓村簥搴旂敤',
-    align:"center",
-    dataIndex: 'clinical'
-   },
-   {
-    title: '鑽悊鐮旂┒',
-    align:"center",
-    dataIndex: 'pharmacological'
-   },
-   {
-    title: '涓昏鎴愬垎',
-    align:"center",
-    dataIndex: 'bases'
-   },
-   {
-    title: '浣跨敤绂佸繉',
-    align:"center",
-    dataIndex: 'usageTaboo'
-   },
-   {
-    title: '绉熸埛id',
-    align:"center",
-    dataIndex: 'tenantId'
-   },
-];
-//鏌ヨ鏁版嵁
-export const searchFormSchema: FormSchema[] = [
-	{
-      label: "涓嵂鍚�",
-      field: 'name',
-      component: 'JInput',
-      colProps: {span: 6},
- 	},
-	{
-      label: "鎷奸煶",
-      field: 'pinyin',
-      component: 'JInput',
-      colProps: {span: 6},
- 	},
-	{
-      label: "鍒悕",
-      field: 'alias',
-      component: 'JInput',
-      colProps: {span: 6},
- 	},
-	{
-      label: "鑻辨枃鍚�",
-      field: 'english',
-      component: 'JInput',
-      colProps: {span: 6},
- 	},
-	{
-      label: "浜у湴鍒嗗竷",
-      field: 'origin',
-      component: 'JInput',
-      colProps: {span: 6},
- 	},
-	{
-      label: "鍔熸晥涓庝綔鐢�",
-      field: 'efficacy',
-      component: 'JInput',
-      colProps: {span: 6},
- 	},
-];
-//琛ㄥ崟鏁版嵁
-export const formSchema: FormSchema[] = [
-  {
-    label: '涓嵂鍚�',
-    field: 'name',
-    component: 'Input',
-  },
-  {
-    label: '鎷奸煶',
-    field: 'pinyin',
-    component: 'Input',
-  },
-  {
-    label: '鍒悕',
-    field: 'alias',
-    component: 'Input',
-  },
-  {
-    label: '鑻辨枃鍚�',
-    field: 'english',
-    component: 'Input',
-  },
-  {
-    label: '鑽敤閮ㄤ綅',
-    field: 'parts',
-    component: 'Input',
-  },
-  {
-    label: '妞嶇墿褰㈡��',
-    field: 'morphology',
-    component: 'Input',
-  },
-  {
-    label: '浜у湴鍒嗗竷',
-    field: 'origin',
-    component: 'Input',
-  },
-  {
-    label: '閲囨敹鍔犲伐',
-    field: 'harvest',
-    component: 'Input',
-  },
-  {
-    label: '鑽潗鎬х姸',
-    field: 'characterDrug',
-    component: 'Input',
-  },
-  {
-    label: '鎬у懗褰掔粡',
-    field: 'famt',
-    component: 'Input',
-  },
-  {
-    label: '鍔熸晥涓庝綔鐢�',
-    field: 'efficacy',
-    component: 'Input',
-  },
-  {
-    label: '涓村簥搴旂敤',
-    field: 'clinical',
-    component: 'Input',
-  },
-  {
-    label: '鑽悊鐮旂┒',
-    field: 'pharmacological',
-    component: 'Input',
-  },
-  {
-    label: '涓昏鎴愬垎',
-    field: 'bases',
-    component: 'Input',
-  },
-  {
-    label: '浣跨敤绂佸繉',
-    field: 'usageTaboo',
-    component: 'Input',
-  },
-  {
-    label: '绉熸埛id',
-    field: 'tenantId',
-    component: 'InputNumber',
-  },
-	// TODO 涓婚敭闅愯棌瀛楁锛岀洰鍓嶅啓姝讳负ID
-	{
-	  label: '',
-	  field: 'id',
-	  component: 'Input',
-	  show: false
-	},
-];
-
-
-
-/**
-* 娴佺▼琛ㄥ崟璋冪敤杩欎釜鏂规硶鑾峰彇formSchema
-* @param param
-*/
-export function getBpmFormSchema(_formData): FormSchema[]{
-  // 榛樿鍜屽師濮嬭〃鍗曚繚鎸佷竴鑷� 濡傛灉娴佺▼涓厤缃簡鏉冮檺鏁版嵁锛岃繖閲岄渶瑕佸崟鐙鐞唂ormSchema
-  return formSchema;
-}
diff --git a/src/views/dry/dataDefine/DryHerbType.data.ts b/src/views/dry/dataDefine/DryHerbType.data.ts
deleted file mode 100644
index 41e1ba6..0000000
--- a/src/views/dry/dataDefine/DryHerbType.data.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import {BasicColumn} from '/@/components/Table';
-import {FormSchema} from '/@/components/Table';
-import { rules} from '/@/utils/helper/validator';
-import { render } from '/@/utils/common/renderUtils';
-//鍒楄〃鏁版嵁
-export const columns: BasicColumn[] = [
-   {
-    title: '绫诲瀷缂栫爜',
-    align: 'center',
-    dataIndex: 'code'
-   },
-   {
-    title: '绫诲瀷鍚嶇О',
-    align: 'left',
-    dataIndex: 'name'
-   },
-];
-//鏌ヨ鏁版嵁
-export const searchFormSchema: FormSchema[] = [
-];
-//琛ㄥ崟鏁版嵁
-export const formSchema: FormSchema[] = [
-  {
-    label: '绫诲瀷缂栫爜',
-    field: 'code',
-    component: 'Input',
-    dynamicRules: ({model,schema}) => {
-          return [
-                 { required: true, message: '璇疯緭鍏ョ被鍨嬬紪鐮�!'},
-                 {...rules.duplicateCheckRule('dry_herb_type', 'code',model,schema)[0]},
-          ];
-     },
-  },
-  {
-    label: '绫诲瀷鍚嶇О',
-    field: 'name',
-    component: 'Input',
-    dynamicRules: ({model,schema}) => {
-          return [
-                 { required: true, message: '璇疯緭鍏ョ被鍨嬪悕绉�!'},
-                 {...rules.duplicateCheckRule('dry_herb_type', 'name',model,schema)[0]},
-          ];
-     },
-  },
-  {
-    label: '鐖剁骇鑺傜偣',
-    field: 'pid',
-    component: 'JTreeSelect',
-    componentProps: {
-      dict: "dry_herb_type,name,id",
-      pidField: "pid",
-      pidValue: "0",
-      hasChildField: "has_child",
-    },
-  },
-	// TODO 涓婚敭闅愯棌瀛楁锛岀洰鍓嶅啓姝讳负ID
-	{
-	  label: '',
-	  field: 'id',
-	  component: 'Input',
-	  show: false
-	},
-];
-
-
-/**
-* 娴佺▼琛ㄥ崟璋冪敤杩欎釜鏂规硶鑾峰彇formSchema
-* @param param
-*/
-export function getBpmFormSchema(_formData): FormSchema[]{
-  // 榛樿鍜屽師濮嬭〃鍗曚繚鎸佷竴鑷� 濡傛灉娴佺▼涓厤缃簡鏉冮檺鏁版嵁锛岃繖閲岄渶瑕佸崟鐙鐞唂ormSchema
-  return formSchema;
-}
diff --git a/src/views/dry/dataDefine/DryOpcDevice.data.ts b/src/views/dry/dataDefine/DryOpcDevice.data.ts
deleted file mode 100644
index ccb1c0d..0000000
--- a/src/views/dry/dataDefine/DryOpcDevice.data.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import {BasicColumn} from '/@/components/Table';
-import {FormSchema} from '/@/components/Table';
-import { rules} from '/@/utils/helper/validator';
-import { render } from '/@/utils/common/renderUtils';
-//鍒楄〃鏁版嵁
-export const columns: BasicColumn[] = [
-   {
-    title: '鍚嶇О',
-    align:"center",
-    dataIndex: 'name'
-   },
-   {
-    title: '鐐逛綅鏍囪瘑',
-    align:"center",
-    dataIndex: 'identifier'
-   },
-   {
-    title: '鎺掑簭',
-    align:"center",
-    dataIndex: 'sortOrder'
-   },
-   {
-    title: '绫诲瀷',
-    align:"center",
-    dataIndex: 'type_dictText'
-   },
-];
-//鏌ヨ鏁版嵁
-export const searchFormSchema: FormSchema[] = [
-	{
-      label: "鍚嶇О",
-      field: 'name',
-      component: 'Input',
-      colProps: {span: 6},
- 	},
-	{
-      label: "绫诲瀷",
-      field: 'type',
-      component: 'JDictSelectTag',
-      componentProps:{
-          dictCode:"device_type"
-      },
-      colProps: {span: 6},
- 	},
-];
-//琛ㄥ崟鏁版嵁
-export const formSchema: FormSchema[] = [
-  {
-    label: '鍚嶇О',
-    field: 'name',
-    component: 'Input',
-    dynamicRules: ({model,schema}) => {
-          return [
-                 { required: true, message: '璇疯緭鍏ュ悕绉�!'},
-          ];
-     },
-  },
-  {
-    label: '鐐逛綅鏍囪瘑',
-    field: 'identifier',
-    component: 'Input',
-    dynamicRules: ({model,schema}) => {
-          return [
-                 { required: true, message: '璇疯緭鍏ョ偣浣嶆爣璇�!'},
-          ];
-     },
-  },
-  {
-    label: '鎺掑簭',
-    field: 'sortOrder',
-    component: 'InputNumber',
-    dynamicRules: ({model,schema}) => {
-          return [
-                 { required: true, message: '璇疯緭鍏ユ帓搴�!'},
-          ];
-     },
-  },
-  {
-    label: '绫诲瀷',
-    field: 'type',
-    component: 'JDictSelectTag',
-    componentProps:{
-        dictCode:"device_type"
-     },
-    dynamicRules: ({model,schema}) => {
-          return [
-                 { required: true, message: '璇疯緭鍏ョ被鍨�!'},
-          ];
-     },
-  },
-	// TODO 涓婚敭闅愯棌瀛楁锛岀洰鍓嶅啓姝讳负ID
-	{
-	  label: '',
-	  field: 'id',
-	  component: 'Input',
-	  show: false
-	},
-];
-
-
-
-/**
-* 娴佺▼琛ㄥ崟璋冪敤杩欎釜鏂规硶鑾峰彇formSchema
-* @param param
-*/
-export function getBpmFormSchema(_formData): FormSchema[]{
-  // 榛樿鍜屽師濮嬭〃鍗曚繚鎸佷竴鑷� 濡傛灉娴佺▼涓厤缃簡鏉冮檺鏁版嵁锛岃繖閲岄渶瑕佸崟鐙鐞唂ormSchema
-  return formSchema;
-}
\ No newline at end of file
diff --git a/src/views/dry/dataDefine/DryOrder.data.ts b/src/views/dry/dataDefine/DryOrder.data.ts
deleted file mode 100644
index e11c75c..0000000
--- a/src/views/dry/dataDefine/DryOrder.data.ts
+++ /dev/null
@@ -1,298 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table'
-import { getTenantId } from '/@/utils/auth'
-import { rules } from '/@/utils/helper/validator'
-//鍒楄〃鏁版嵁
-export const columns: BasicColumn[] = [
-	{
-		title: '宸ュ崟鏃堕棿',
-		align: 'center',
-		sorter: true,
-		dataIndex: 'orderTime',
-		customRender: ({ text }) => {
-			return !text ? '' : text.length > 10 ? text.substr(0, 10) : text
-		},
-	},
-	{
-		title: '宸ュ崟鍙�',
-		align: 'center',
-		dataIndex: 'code',
-	},
-	{
-		title: '鑽潗',
-		align: 'center',
-		dataIndex: 'herbId_dictText',
-	},
-	{
-		title: '璁惧',
-		align: 'center',
-		dataIndex: 'equId_dictText',
-	},
-	{
-		title: '杞﹂棿',
-		align: 'center',
-		dataIndex: 'shopId_dictText',
-	},
-	{
-		title: '鍒濆鍚按鐜�',
-		align: 'center',
-		dataIndex: 'initial',
-	},
-	{
-		title: '鐩爣鍚按鐜�',
-		align: 'center',
-		dataIndex: 'target',
-	},
-	{
-		title: '鎶曟枡閲�',
-		align: 'center',
-		dataIndex: 'feed',
-	},
-	{
-		title: '鍒濆閲嶉噺',
-		align: 'center',
-		dataIndex: 'originWeight',
-	},
-	{
-		title: '棰勮骞茬嚗鏃堕棿',
-		align: 'center',
-		dataIndex: 'et',
-	},
-	{
-		title: '骞叉枡閲嶉噺',
-		align: 'center',
-		dataIndex: 'yield',
-	},
-	{
-		title: '骞茬嚗鏃堕棿',
-		align: 'center',
-		dataIndex: 'dryTime',
-	},
-	{
-		title: '鐑娓╁害',
-		align: 'center',
-		dataIndex: 'windTemp',
-	},
-	{
-		title: '鐜娓╁害',
-		align: 'center',
-		dataIndex: 'envTemp',
-	},
-	{
-		title: '鐜婀垮害',
-		align: 'center',
-		dataIndex: 'envHum',
-	},
-	{
-		title: '鑽℃枡寤舵椂锛坢s锛�',
-		align: 'center',
-		dataIndex: 'delay',
-	},
-	{
-		title: '缈绘枡娆℃暟',
-		align: 'center',
-		dataIndex: 'turn',
-	},
-	{
-		title: '棰勮鍓╀綑鏃堕棿',
-		align: 'center',
-		dataIndex: 'remain',
-	},
-
-	{
-		title: '宸ュ崟鐘舵��',
-		align: 'center',
-		dataIndex: 'orderStatus',
-	},
-	{
-		title: '鎿嶄綔浜�',
-		align: 'center',
-		dataIndex: 'operator_dictText',
-	},
-]
-//鏌ヨ鏁版嵁
-export const searchFormSchema: FormSchema[] = [
-	{
-		label: '宸ュ崟鏃堕棿',
-		field: 'orderTime',
-		component: 'RangePicker',
-		componentProps: {
-			valueType: 'Date',
-		},
-		colProps: { span: 6 },
-	},
-	{
-		label: '鑽潗鍚嶇О',
-		field: 'herbName',
-		component: 'Input',
-		colProps: { span: 6 },
-	},
-]
-//琛ㄥ崟鏁版嵁
-export const formSchema: FormSchema[] = [
-	{
-		label: '宸ュ崟鏃堕棿',
-		field: 'orderTime',
-		component: 'DatePicker',
-		componentProps: {
-			showTime: true,
-			valueFormat: 'YYYY-MM-DD HH:mm:ss',
-		},
-	},
-	{
-		label: '宸ュ崟鍙�',
-		field: 'code',
-		component: 'Input',
-		dynamicRules: ({ model, schema }) => {
-			return [{ required: false }, { ...rules.duplicateCheckRule('dry_order', 'code', model, schema)[0] }]
-		},
-	},
-	{
-		label: '鑽潗',
-		field: 'herbId',
-		component: 'JDictSelectTag',
-		componentProps: {
-			dictCode: 'dry_herb,name,id,tenant_id=' + getTenantId(),
-		},
-	},
-	// {
-	// 	label: '鍒濆鍚按鐜�',
-	// 	field: 'initial',
-	// 	component: 'InputNumber',
-	// },
-	// {
-	// 	label: '鐩爣鍚按鐜�',
-	// 	field: 'target',
-	// 	component: 'InputNumber',
-	// },
-	{
-		label: '鎶曟枡閲�',
-		field: 'feed',
-		component: 'InputNumber',
-	},
-	// {
-	// 	label: '鍘熷閲嶉噺',
-	// 	field: 'originWeight',
-	// 	component: 'InputNumber',
-	// },
-	// {
-	// 	label: '棰勮骞茬嚗鏃堕棿',
-	// 	field: 'et',
-	// 	component: 'InputNumber',
-	// },
-	// {
-	// 	label: '骞叉枡閲嶉噺',
-	// 	field: 'yield',
-	// 	component: 'InputNumber',
-	// },
-	// {
-	// 	label: '骞茬嚗鏃堕棿',
-	// 	field: 'dryTime',
-	// 	component: 'InputNumber',
-	// },
-	// {
-	// 	label: '鐑娓╁害',
-	// 	field: 'windTemp',
-	// 	component: 'InputNumber',
-	// },
-	// {
-	// 	label: '鐜娓╁害',
-	// 	field: 'envTemp',
-	// 	component: 'InputNumber',
-	// },
-	// {
-	// 	label: '鐜婀垮害',
-	// 	field: 'envHum',
-	// 	component: 'InputNumber',
-	// },
-	// {
-	// 	label: '鑽℃枡寤舵椂锛坢s锛�',
-	// 	field: 'delay',
-	// 	component: 'InputNumber',
-	// },
-	// {
-	// 	label: '缈绘枡娆℃暟',
-	// 	field: 'turn',
-	// 	component: 'InputNumber',
-	// },
-	// {
-	// 	label: '棰勮鍓╀綑鏃堕棿',
-	// 	field: 'remain',
-	// 	component: 'InputNumber',
-	// },
-	{
-		label: '璁惧',
-		field: 'equId',
-		component: 'JDictSelectTag',
-		componentProps: {
-			dictCode: 'dry_equipment,name,id,tenant_id=' + getTenantId(),
-		},
-	},
-	{
-		label: '杞﹂棿',
-		field: 'shopId',
-		component: 'JDictSelectTag',
-		componentProps: {
-			dictCode: 'dry_shop,name,id,tenant_id=' + getTenantId(),
-		},
-	},
-	// {
-	// 	label: '宸ュ崟鐘舵��',
-	// 	field: 'orderStatus',
-	// 	component: 'InputNumber',
-	// },
-	// {
-	// 	label: '鎿嶄綔浜�',
-	// 	field: 'operator',
-	// 	component: 'JDictSelectTag',
-	// 	componentProps: {
-	// 		dictCode: 'sys_user,realname,id,tenant_id=' + getTenantId(),
-	// 	},
-	// },
-	// TODO 涓婚敭闅愯棌瀛楁锛岀洰鍓嶅啓姝讳负ID
-	{
-		label: '',
-		field: 'id',
-		component: 'Input',
-		show: false,
-	},
-]
-
-/**
- * 娴佺▼琛ㄥ崟璋冪敤杩欎釜鏂规硶鑾峰彇formSchema
- * @param param
- */
-export function getBpmFormSchema(_formData): FormSchema[] {
-	// 榛樿鍜屽師濮嬭〃鍗曚繚鎸佷竴鑷� 濡傛灉娴佺▼涓厤缃簡鏉冮檺鏁版嵁锛岃繖閲岄渶瑕佸崟鐙鐞唂ormSchema
-	return formSchema
-}
-
-export interface dryOrder {
-	id: string
-	order_time: Date
-	code: string
-	herb_id: string
-	herb_name: string
-	initial: number
-	target: number
-	feed: number
-	origin_weight: number
-	et: number
-	yield: number
-	dry_time: number
-	wind_temp: number
-	env_temp: number
-	env_hum: number
-	delay: number
-	turn: number
-	remain: number
-	equ_id: string
-	shop_id: string
-	tenant_id: string
-	create_by: string
-	create_time: Date
-	update_by: string
-	update_time: Date
-	order_status: number
-	operator: string
-	temps: string
-}
diff --git a/src/views/dry/dataDefine/DryOrderTrend.data.ts b/src/views/dry/dataDefine/DryOrderTrend.data.ts
deleted file mode 100644
index 41ccdd8..0000000
--- a/src/views/dry/dataDefine/DryOrderTrend.data.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table'
-//鍒楄〃鏁版嵁
-export const columns: BasicColumn[] = [
-  {
-    title: '宸ュ崟',
-    align: 'center',
-    dataIndex: 'orderId',
-  },
-  {
-    title: '鍚按鐜�',
-    align: 'center',
-    dataIndex: 'moisture',
-  },
-  {
-    title: '娓╁害',
-    align: 'center',
-    dataIndex: 'temp',
-  },
-  {
-    title: '鏃堕棿',
-    align: 'center',
-    dataIndex: 'tim',
-    customRender: ({ text }) => {
-      return !text ? '' : text.length > 10 ? text.substr(0, 10) : text
-    },
-  },
-]
-//鏌ヨ鏁版嵁
-export const searchFormSchema: FormSchema[] = []
-//琛ㄥ崟鏁版嵁
-export const formSchema: FormSchema[] = [
-  {
-    label: '宸ュ崟',
-    field: 'orderId',
-    component: 'InputNumber',
-  },
-  {
-    label: '鍚按鐜�',
-    field: 'moisture',
-    component: 'InputNumber',
-  },
-  {
-    label: '娓╁害',
-    field: 'temp',
-    component: 'InputNumber',
-  },
-  {
-    label: '鏃堕棿',
-    field: 'tim',
-    component: 'DatePicker',
-  },
-  // TODO 涓婚敭闅愯棌瀛楁锛岀洰鍓嶅啓姝讳负ID
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-]
-
-/**
- * 娴佺▼琛ㄥ崟璋冪敤杩欎釜鏂规硶鑾峰彇formSchema
- * @param param
- */
-export function getBpmFormSchema(_formData): FormSchema[] {
-  // 榛樿鍜屽師濮嬭〃鍗曚繚鎸佷竴鑷� 濡傛灉娴佺▼涓厤缃簡鏉冮檺鏁版嵁锛岃繖閲岄渶瑕佸崟鐙鐞唂ormSchema
-  return formSchema
-}
diff --git a/src/views/dry/dataDefine/DryResult.data.ts b/src/views/dry/dataDefine/DryResult.data.ts
deleted file mode 100644
index 2974133..0000000
--- a/src/views/dry/dataDefine/DryResult.data.ts
+++ /dev/null
@@ -1,181 +0,0 @@
-import {BasicColumn} from '/@/components/Table';
-import {FormSchema} from '/@/components/Table';
-import { rules} from '/@/utils/helper/validator';
-import { render } from '/@/utils/common/renderUtils';
-//鍒楄〃鏁版嵁
-export const columns: BasicColumn[] = [
-   {
-    title: '鑽潗鍚嶇О',
-    align:"center",
-    dataIndex: 'herbName'
-   },
-   {
-    title: '瑁呮枡閲�',
-    align:"center",
-    dataIndex: 'feed'
-   },
-   {
-    title: '鍒濆閲嶉噺',
-    align:"center",
-    dataIndex: 'weight'
-   },
-   {
-    title: '鐩爣姘村垎',
-    align:"center",
-    dataIndex: 'target'
-   },
-   {
-    title: '宸ュ崟鍙�',
-    align:"center",
-    dataIndex: 'orderNo'
-   },
-   {
-    title: '宸ュ崟id',
-    align:"center",
-    dataIndex: 'orderId'
-   },
-   {
-    title: '鍓嶅乏',
-    align:"center",
-    dataIndex: 'frontLeft'
-   },
-   {
-    title: '鍓嶅乏',
-    align:"center",
-    dataIndex: 'frontRight'
-   },
-   {
-    title: '涓乏',
-    align:"center",
-    dataIndex: 'middleLeft'
-   },
-   {
-    title: '涓彸',
-    align:"center",
-    dataIndex: 'middleRight'
-   },
-   {
-    title: '鍚庡乏',
-    align:"center",
-    dataIndex: 'backLeft'
-   },
-   {
-    title: '鍚庡彸',
-    align:"center",
-    dataIndex: 'backRight'
-   },
-   {
-    title: '骞冲潎',
-    align:"center",
-    dataIndex: 'avg'
-   },
-   {
-    title: '鏃堕暱',
-    align:"center",
-    dataIndex: 'dryTime'
-   },
-   {
-    title: '钂告苯锛堢珛鏂癸級',
-    align:"center",
-    dataIndex: 'steam'
-   },
-];
-//鏌ヨ鏁版嵁
-export const searchFormSchema: FormSchema[] = [
-];
-//琛ㄥ崟鏁版嵁
-export const formSchema: FormSchema[] = [
-  {
-    label: '鑽潗鍚嶇О',
-    field: 'herbName',
-    component: 'Input',
-  },
-  {
-    label: '瑁呮枡閲�',
-    field: 'feed',
-    component: 'InputNumber',
-  },
-  {
-    label: '鍒濆閲嶉噺',
-    field: 'weight',
-    component: 'InputNumber',
-  },
-  {
-    label: '鐩爣姘村垎',
-    field: 'target',
-    component: 'InputNumber',
-  },
-  {
-    label: '宸ュ崟鍙�',
-    field: 'orderNo',
-    component: 'Input',
-  },
-  {
-    label: '宸ュ崟id',
-    field: 'orderId',
-    component: 'Input',
-  },
-  {
-    label: '鍓嶅乏',
-    field: 'frontLeft',
-    component: 'InputNumber',
-  },
-  {
-    label: '鍓嶅乏',
-    field: 'frontRight',
-    component: 'InputNumber',
-  },
-  {
-    label: '涓乏',
-    field: 'middleLeft',
-    component: 'InputNumber',
-  },
-  {
-    label: '涓彸',
-    field: 'middleRight',
-    component: 'InputNumber',
-  },
-  {
-    label: '鍚庡乏',
-    field: 'backLeft',
-    component: 'InputNumber',
-  },
-  {
-    label: '鍚庡彸',
-    field: 'backRight',
-    component: 'InputNumber',
-  },
-  {
-    label: '骞冲潎',
-    field: 'avg',
-    component: 'InputNumber',
-  },
-  {
-    label: '鏃堕暱',
-    field: 'dryTime',
-    component: 'InputNumber',
-  },
-  {
-    label: '钂告苯锛堢珛鏂癸級',
-    field: 'steam',
-    component: 'InputNumber',
-  },
-	// TODO 涓婚敭闅愯棌瀛楁锛岀洰鍓嶅啓姝讳负ID
-	{
-	  label: '',
-	  field: 'id',
-	  component: 'Input',
-	  show: false
-	},
-];
-
-
-
-/**
-* 娴佺▼琛ㄥ崟璋冪敤杩欎釜鏂规硶鑾峰彇formSchema
-* @param param
-*/
-export function getBpmFormSchema(_formData): FormSchema[]{
-  // 榛樿鍜屽師濮嬭〃鍗曚繚鎸佷竴鑷� 濡傛灉娴佺▼涓厤缃簡鏉冮檺鏁版嵁锛岃繖閲岄渶瑕佸崟鐙鐞唂ormSchema
-  return formSchema;
-}
\ No newline at end of file
diff --git a/src/views/dry/dataDefine/DryShop.data.ts b/src/views/dry/dataDefine/DryShop.data.ts
deleted file mode 100644
index 097958d..0000000
--- a/src/views/dry/dataDefine/DryShop.data.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-import {BasicColumn} from '/@/components/Table';
-import {FormSchema} from '/@/components/Table';
-import { rules} from '/@/utils/helper/validator';
-import { render } from '/@/utils/common/renderUtils';
-//鍒楄〃鏁版嵁
-export const columns: BasicColumn[] = [
-   {
-    title: '杞﹂棿缂栧彿',
-    align:"center",
-    sorter: true,
-    dataIndex: 'code'
-   },
-   {
-    title: '杞﹂棿鍚嶇О',
-    align:"center",
-    sorter: true,
-    dataIndex: 'name'
-   },
-   {
-    title: '鍒涘缓浜�',
-    align:"center",
-    dataIndex: 'createBy'
-   },
-   {
-    title: '鍒涘缓鏃ユ湡',
-    align:"center",
-    dataIndex: 'createTime',
-    customRender:({text}) =>{
-      return !text?"":(text.length>10?text.substr(0,10):text)
-    },
-   },
-   {
-    title: '鏇存柊浜�',
-    align:"center",
-    dataIndex: 'updateBy'
-   },
-   {
-    title: '鏇存柊鏃ユ湡',
-    align:"center",
-    dataIndex: 'updateTime',
-    customRender:({text}) =>{
-      return !text?"":(text.length>10?text.substr(0,10):text)
-    },
-   },
-   {
-    title: '杞﹂棿鎻忚堪',
-    align:"center",
-    dataIndex: 'remark'
-   },
-];
-//鏌ヨ鏁版嵁
-export const searchFormSchema: FormSchema[] = [
-	{
-      label: "杞﹂棿缂栧彿",
-      field: 'code',
-      component: 'Input',
-      colProps: {span: 6},
- 	},
-	{
-      label: "杞﹂棿鍚嶇О",
-      field: 'name',
-      component: 'Input',
-      colProps: {span: 6},
- 	},
-];
-//琛ㄥ崟鏁版嵁
-export const formSchema: FormSchema[] = [
-  {
-    label: '杞﹂棿缂栧彿',
-    field: 'code',
-    component: 'Input',
-    dynamicRules: ({model,schema}) => {
-          return [
-                 { required: true, message: '璇疯緭鍏ヨ溅闂寸紪鍙�!'},
-                 {...rules.duplicateCheckRule('dry_shop', 'code',model,schema)[0]},
-          ];
-     },
-  },
-  {
-    label: '杞﹂棿鍚嶇О',
-    field: 'name',
-    component: 'Input',
-    dynamicRules: ({model,schema}) => {
-          return [
-                 { required: true, message: '璇疯緭鍏ヨ溅闂村悕绉�!'},
-                 {...rules.duplicateCheckRule('dry_shop', 'name',model,schema)[0]},
-          ];
-     },
-  },
-  {
-    label: '杞﹂棿鎻忚堪',
-    field: 'remark',
-    component: 'Input',
-  },
-	// TODO 涓婚敭闅愯棌瀛楁锛岀洰鍓嶅啓姝讳负ID
-	{
-	  label: '',
-	  field: 'id',
-	  component: 'Input',
-	  show: false
-	},
-];
-
-
-
-/**
-* 娴佺▼琛ㄥ崟璋冪敤杩欎釜鏂规硶鑾峰彇formSchema
-* @param param
-*/
-export function getBpmFormSchema(_formData): FormSchema[]{
-  // 榛樿鍜屽師濮嬭〃鍗曚繚鎸佷竴鑷� 濡傛灉娴佺▼涓厤缃簡鏉冮檺鏁版嵁锛岃繖閲岄渶瑕佸崟鐙鐞唂ormSchema
-  return formSchema;
-}
\ No newline at end of file
diff --git a/src/views/dry/identify/index.vue b/src/views/dry/identify/index.vue
deleted file mode 100644
index 86e08b6..0000000
--- a/src/views/dry/identify/index.vue
+++ /dev/null
@@ -1,170 +0,0 @@
-<template>
-  <div>
-    <div class="app">
-      <a-spin :spinning="spinning" >
-      <div class="dragger">
-        <a-upload-dragger
-    v-model:fileList="fileList"
-    name="file"
-    accept="image/png, image/jpeg"
-    :multiple="false"
-    action="/herb/dry/real/identify"
-    :beforeUpload="beforeUpload"
-    @change="handleChange"
-    @drop="handleDrop"
-  >
-    <p class="ant-upload-drag-icon">
-      <inbox-outlined></inbox-outlined>
-    </p>
-    <p class="ant-upload-text">鐐瑰嚮閫夋嫨鍥剧墖锛屾垨灏嗗浘鐗囨嫋鍒版鍖哄煙鍐呬笂浼�</p>
-    <p class="ant-upload-hint">
-      浠呮敮鎸佸崟涓浘鐗�
-    </p>
-  </a-upload-dragger>
-
-      </div>
-
-      <div class="card">
-
-
-        <a-row :gutter="10" style="width: 100%;">
-          <a-col :span="12">
-        <div >
-          <a-card title="璇嗗埆鍥惧儚" >
-            <div class="img">
-              <div v-if="previewUrl" style="display: flex; justify-content: center;">
-              <!-- <a-image
-                :width="200"
-                :src="previewUrl"
-              /> -->
-              <img :src="previewUrl" alt="棰勮鍥剧墖" style="max-height: 500px; max-width: 100%;" />
-            </div>
-            </div>
-
-
-          </a-card>
-        </div>
-      </a-col>
-      <a-col :span="12">
-        <div >
-          <a-card title="璇嗗埆缁撴灉">
-            <div class="res">
-              <a-table :columns="columns" :data-source="results" :pagination="false">
-                </a-table>
-            </div>
-            </a-card>
-          </div>
-        </a-col>
-        </a-row>
-      </div>
-    </a-spin>
-    </div>
-  </div>
-
-
-</template>
-
-<script setup lang="ts">
-import { onMounted, ref, onUnmounted } from "vue";
-import { InboxOutlined } from '@ant-design/icons-vue';
-import { message } from 'ant-design-vue';
-import type { UploadChangeParam } from 'ant-design-vue';
-const fileList = ref([]);
-const previewUrl = ref()
-const results = ref([])
-const spinning = ref(false)
-const columns = [
-  {
-    title: '鑽潗',
-    dataIndex: 'name',
-    key: 'name',
-  },
-  {
-    title: '鑻辨枃鍚�',
-    dataIndex: 'english',
-    key: 'english',
-  },
-  {
-    title: '鍙俊搴�',
-    dataIndex: 'probabily',
-    key: 'probabily',
-  },
-]
-const handleChange = (info: UploadChangeParam) => {
- // console.log("鍥剧墖",info.file);
-  // let reader = new FileReader()
-  //       reader.readAsDataURL(info.file.originFileObj) // 鏂囦欢杞崲
-  //       reader.onloadend = function () {
-  //         let src = this.result
-
-  //         console.log("src::", src)
-
-  //       }
-
-  const status = info.file.status;
-  if (status !== 'uploading') {
-    console.log(info.file, info.fileList);
-  }
-  if (status === 'done') {
-    message.success(`${info.file.name}  璇嗗埆鎴愬姛锛侊紒`);
-    console.log("done",info.file.response.result)
-    results.value = info.file.response.result
-    spinning.value = false
-  } else if (status === 'error') {
-    message.error(`${info.file.name} 璇嗗埆澶辫触锛侊紒`);
-  }
-};
-function handleDrop(e: DragEvent) {
-  console.log(e);
-}
-
-function beforeUpload(file) {
-  console.log("before",file)
-  spinning.value = true
-  previewUrl.value =  URL.createObjectURL(file)
-
-  console.log("pre",previewUrl.value)
-}
-
-
-
-
-
-// DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛�
-onMounted(() => {
-  
-
-});
-
-onUnmounted(() => {
-
-});
-</script>
-
-<style lang="less" scoped>
-.app {
-  width: 100%;
-
-
-  .dragger {
-    margin:10px;
-    height: 200px;
-    background-color: white; 
-  }
-
-  .card {
-    margin-left: 10px;
-    display: flex;
-    .img {
-      height: 500px;
-    }
-    .res {
-      height: 500px;
-    }
-  }
-}
-
-
-
-
-</style>
diff --git a/src/views/dry/monitor/Eqp copy.vue b/src/views/dry/monitor/Eqp copy.vue
deleted file mode 100644
index 4e0ea32..0000000
--- a/src/views/dry/monitor/Eqp copy.vue
+++ /dev/null
@@ -1,106 +0,0 @@
-<template>
-	<div class="eqpBox">
-		<div class="eqpRow">
-			<div class="eqpImage">
-				<div class="fault">鏈哄櫒鏁呴殰锛氭満鍣ㄨ矊浼兼湁涓�鐐圭偣鏁呴殰</div>
-				<div class="eqpName">{{ eqp.name }}</div>
-			</div>
-			<div class="progress"></div>
-
-			<div class="realData"></div>
-			<div class="realChart"></div>
-		</div>
-	</div>
-</template>
-
-<script setup lang="ts">
-	import { router } from '/@/router'
-	import { ref } from 'vue'
-	// import { Progress } from 'ant-design-vue'
-	// import * as echarts from 'echarts'
-	import { defHttp } from '/@/utils/http/axios'
-	import { queryById } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { useUserStore } from '/@/store/modules/user'
-
-	const eqp = ref({} as dryEquipment)
-	const userStore = useUserStore()
-	function queryEqp() {
-		queryById({ id: router.currentRoute.value.params.id }).then((res) => {
-			// console.log(`output->res`, res)
-			eqp.value = res
-			queryRealTime()
-		})
-	}
-
-	function queryRealTime() {
-		let tenantId = userStore.getTenant
-		let eqpCode = eqp.value.code
-		let queryRealTimeUrl = '/dry/real/getRealTimeData'
-		defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-			console.log(`output->res`, res)
-		})
-	}
-
-	queryEqp()
-</script>
-
-<style scoped>
-	.eqpBox {
-		height: 100%;
-	}
-	.eqpRow {
-		display: flex;
-		flex-wrap: wrap;
-	}
-	.eqpImage {
-		height: 420px;
-		width: 800px;
-
-		background-image: url('../../../assets/images/dry/ganzaoji-z.png');
-		background-repeat: no-repeat;
-		background-size: 100% 100%;
-		background-position: 20px 0px;
-		flex-grow: 0;
-		flex-shrink: 0;
-	}
-	.progress {
-		height: 420px;
-		width: 800px;
-		background: salmon;
-		flex-grow: 0;
-		flex-shrink: 0;
-	}
-	.realData {
-		width: 800px;
-		height: 420px;
-		background: lawngreen;
-		flex-grow: 0;
-		flex-shrink: 0;
-	}
-	.realChart {
-		width: 800px;
-		height: 420px;
-		background: gold;
-		flex-grow: 0;
-		flex-shrink: 0;
-	}
-
-	.fault {
-		padding: 10px;
-		height: 60px;
-		font-size: 26px;
-		width: 100%;
-		text-align: right;
-		color: red;
-	}
-	.eqpName {
-		text-align: center;
-		font-size: 26px;
-		font-weight: bold;
-		height: 40px;
-		width: 236px;
-		margin-top: 80px;
-		margin-left: 249px;
-	}
-</style>
diff --git a/src/views/dry/monitor/Eqp.vue b/src/views/dry/monitor/Eqp.vue
deleted file mode 100644
index a9a8e74..0000000
--- a/src/views/dry/monitor/Eqp.vue
+++ /dev/null
@@ -1,2085 +0,0 @@
-<template>
-	<div class="eqpBox">
-		<div class="eqpRow">
-			<div class="eqpImage">
-				<div class="leftEqp">
-					<div style="width: 300px">
-						<div class="herbInfo">
-							<dv-border-box7 class="curEqp">
-								<div class="eqpName" @click="changeEqp">
-									<div class="mainInfo" style="font-size: 26px">{{ eqp?.name }}</div>
-									<div class="subhead">{{ eqp?.type }}</div>
-									<!-- <dv-decoration-1 style="width:150px;height:60px; margin-left: 20px;" /> -->
-									<!-- 璁惧锛歿{ eqp.name }}</div>
-								<div class="eqpName">鍨嬪彿锛歿{ eqp.type }}</div> -->
-								</div>
-							</dv-border-box7>
-							<dv-border-box7 class="curHerb" :style="{ 'background-image': 'url(/src/assets/images/dry/yaocai/' + realData?.herbImage + ')' }">
-								<div class="eqpName" style="margin-left: 100px">
-									<div class="mainInfo" style="font-size: 26px">{{ realData?.herbName }}</div>
-									<div class="subhead">骞茬嚗閰嶆柟</div>
-								</div>
-								<div class="formula">
-									<div class="formulaItem">
-										<Icon style="color: powderblue" icon="la:box" :size="35" />
-										<div>
-											<div class="mainInfo2">{{ realData?.feed }}绛�</div>
-											<div class="subhead2">鎶曟枡閲�</div>
-										</div>
-									</div>
-									<div class="formulaItem">
-										<Icon style="color: red" icon="bx:wind" :size="35" />
-										<div>
-											<div class="mainInfo2">{{ realData?.windTemp }}掳C</div>
-											<div class="subhead2">鐑</div>
-										</div>
-									</div>
-									<div class="formulaItem">
-										<Icon style="color: green" icon="tabler:target-arrow" :size="35" />
-										<div>
-											<div class="mainInfo2">{{ realData?.target }}%</div>
-											<div class="subhead2">鐩爣</div>
-										</div>
-									</div> 
-								</div>
-								<!-- <div class="eqpName">{{ realData?.herbName }}</div>
-								<div class="eqpName">{{ realData?.feed }} 绛�</div> -->
-							</dv-border-box7>
-						</div>
-						<!-- <dv-border-box7 class="infoChart" style="margin-left: 0px;">
-							<div class="chartTittle">椋庢満棰戠巼</div>
-							<div class="outDiv" style="padding-top: 10px">
-								<div id="fanFreq" style="width: 220px; height: 200px"></div>
-							</div>
-						</dv-border-box7> -->
-						<dv-border-box7 class="infoChart" style="margin-left: 0px">
-							<div class="chartTittle">鍚按鐜�</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 50%">
-										<div class="centerText">
-											<div class="mainInfo3"
-												><span>{{ realData?.target }}</span
-												>%
-											</div>
-											<div class="subhead2">鐩爣鍚按鐜�</div>
-										</div>
-									</div>
-									<div class="center" style="height: 50%">
-										<div>
-											<div class="mainInfo3"
-												><span>{{ realData?.initial }}</span
-												>%</div
-											>
-											<div class="subhead2">鏉ユ枡鍚按鐜�</div>
-										</div>
-									</div>
-								</div>
-								<div id="moisture" style="width: 170px; height: 133px"></div>
-							</div>
-							<div class="subhead2" style="margin-top: -37px; padding-left: 172px">瀹炴椂鍚按鐜�</div>
-						</dv-border-box7>
-					</div>
-					<dv-border-box7 class="leftTop">
-						<div class="leftTop0">
-							<div class="leftTop1">
-								<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-								<div>
-									<div class="mainInfo">{{ realData?.totalRemain | 0 }}min</div>
-									<div class="subhead">鍓╀綑鏃堕棿</div>
-								</div>
-							</div>
-							<div class="leftTop1">
-								<Icon icon="bi:fan" :size="50" />
-								<div>
-									<div class="mainInfo">{{ realData.trendVo?.fanFrequency | 0 }} Hz</div>
-									<div class="subhead">椋庢満棰戠巼</div>
-								</div>
-							</div>
-							<div class="leftTop3" :style="{ 'background-image': 'url(/src/assets/images/dry/' + statusGif + '.gif)' }"></div>
-							<div class="outDiv eqpStatus">
-								<div
-									style="
-										font-size: 28px;
-										margin-top: 60px;
-										color: white;
-										background-color: #1595ea;
-										height: 60px;
-										width: 180px;
-										line-height: 60px;
-										text-align: center;
-										border-radius: 5px;
-										font-weight: bold;
-									"
-								>
-									{{ statusTxt }}
-								</div>
-								<div
-									v-if="realData?.isError"
-									class="eqpInfoText blingbling"
-									style="
-										position: absolute;
-
-										max-height: 130px;
-										max-width: 360px;
-										border-radius: 10px;
-										background-color: #ce0000;
-										color: white;
-										padding: 10px;
-									"
-								>
-									<div class="outDiv">
-										<div><Icon icon="bx:error" :size="30" /> </div>
-										<div
-											><span> {{ realData?.errorMsg }}</span></div
-										>
-									</div>
-								</div>
-							</div>
-						</div>
-					</dv-border-box7>
-
-					<dv-border-box7 class="infoChart" style="margin-left: 0px; margin-right: 10px">
-						<div class="chartTittle">椋庣娓╁害</div>
-						<div class="outDiv">
-							<div id="bellowsTemp" style="width: 220px; height: 200px">
-								<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-							</div>
-						</div>
-					</dv-border-box7>
-					<dv-border-box7 class="leftMid">
-						<div class="chartTittle">瀹炴椂杩涘害</div>
-						<div id="efficiencyLine" style="width: 780px; height: 130px; margin-top: -10px"></div>
-						<div style="height: 10px; display: flex; width: 780px; padding: 0 60px; justify-content: space-between">
-							<div style="width: 100px; height: 20px">{{ realData.dryTime | 0 }} min</div>
-							<div style="width: 100px; height: 20px; text-align: right">{{ realData?.totalTime | 0 }} min</div>
-						</div>
-						<div id="progressBar" style="width: 780px; height: 80px"></div>
-					</dv-border-box7>
-
-					<!-- <div class="outDiv">
-						<div style="height: 100px; width: 400px">
-							<Progress
-								:stroke-color="{
-									from: '#108ee9',
-									to: '#87d068',
-								}"
-								:percent="realData?.percent"
-								status="active"
-								:show-info="false"
-							/>
-							<div style="padding-top: 10px; display: flex; justify-content: space-between; font-weight: bold">
-								<span>骞茬嚗 52 Min</span>
-								<span>棰勮 120 Min</span>
-							</div>
-						</div>
-					</div> -->
-				</div>
-				<div class="rightInfo">
-					<div class="rightTop">
-						<dv-border-box7 class="tempMoisChart">
-							<div :id="'moisChart'" style="width: 550px; height: 320px"></div>
-						</dv-border-box7>
-					</div>
-					<div class="rightTwo">
-						<dv-border-box7 class="infoChart">
-							<div class="chartTittle">
-								骞茬嚗鏁堢巼(kg/h)
-								<div class="rightLabel">
-									<div class="label good">&gt;{{ standard.xiaolv }} 浼� </div>
-									<div class="label bad">&lt;{{ standard.xlMin }} 宸�</div>
-								</div>
-							</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 50%">
-										<div class="centerText">
-											<div class="mainInfo3"
-												><span>{{ (realData?.originWeight - realData?.yield) | 0 }}</span
-												>kg
-											</div>
-											<div class="subhead2">姘村垎钂稿彂</div>
-										</div>
-									</div>
-									<div class="center" style="height: 50%">
-										<div>
-											<div class="mainInfo3">{{ realData?.dryTime | 0 }}min</div>
-											<div class="subhead2">骞茬嚗鐢ㄦ椂</div>
-										</div>
-									</div>
-								</div>
-								<div class="rightChart center">
-									<div class="center compareBar">
-										<div class="barTop">{{ standard.xiaolv }}</div>
-										<div class="barBack">
-											<div class="barDiv" :style="{ height: realData?.xlsHeight }"></div>
-										</div>
-										<div style="line-height: 18px">
-											棰濆畾
-											<br />
-											鏁堢巼
-										</div>
-									</div>
-									<div class="center compareBar">
-										<div class="barTop">{{ realData?.xiaolv | 0 }}</div>
-										<div class="barBack">
-											<div
-												class="barDiv"
-												:class="{ good: realData?.xlgood, bad: realData?.xlbad }"
-												:style="[realData?.xlrHeight && { height: realData?.xlrHeight }]"
-											>
-											</div>
-										</div>
-										<div style="line-height: 18px">
-											瀹炴椂
-											<br />
-											鏁堢巼
-										</div>
-									</div>
-								</div>
-							</div>
-						</dv-border-box7>
-
-						<dv-border-box7 class="infoChart">
-							<div class="chartTittle"
-								>钂告苯娑堣��(m鲁/kg)
-								<div class="rightLabel">
-									<div class="label bad">&gt;{{ standard.zhengqi }} 宸�</div>
-									<div class="label good">&lt;{{ standard.zqMin }} 浼�</div>
-								</div>
-							</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 100%">
-										<div class="centerText">
-											<div class="mainInfo3"
-												><span>{{ realData?.steam }}</span
-												>m鲁
-											</div>
-											<div class="subhead2">钂告苯鐢ㄩ噺</div>
-										</div>
-									</div>
-								</div>
-								<div class="rightChart center">
-									<div class="center compareBar">
-										<div class="barTop">{{ standard.zhengqi }}</div>
-										<div class="barBack">
-											<div class="barDiv" :style="{ height: realData?.zqsHeight }"></div>
-										</div>
-										<div style="line-height: 18px">
-											棰濆畾
-											<br />
-											娑堣��
-										</div>
-									</div>
-									<div class="center compareBar">
-										<div class="barTop">{{ realData?.zhengqi | 0 }}</div>
-										<div class="barBack">
-											<div
-												class="barDiv"
-												:class="{ good: realData?.zqgood, bad: realData?.zqbad }"
-												:style="[realData?.zqrHeight && { height: realData?.zqrHeight }]"
-											>
-											</div>
-										</div>
-										<div style="line-height: 18px">
-											瀹炴椂
-											<br />
-											娑堣��
-										</div>
-									</div>
-								</div>
-							</div>
-						</dv-border-box7>
-						<dv-border-box7 class="infoChart">
-							<div class="chartTittle">鏁堢巼瀵规瘮</div>
-							<div class="outDiv" style="padding-top: 10px">
-								<div id="compare" style="width: 300px; height: 200px"></div>
-							</div>
-						</dv-border-box7>
-						<dv-border-box7 class="infoChart">
-							<div class="chartTittle">
-								<div> 鐢佃兘娑堣��(kWh/kg)</div>
-								<div class="rightLabel">
-									<div class="label bad">&gt;{{ standard.dian }} 宸�</div>
-									<div class="label good">&lt;{{ standard.dMin }} 浼�</div>
-								</div>
-							</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 100%">
-										<div class="centerText">
-											<div class="mainInfo3"
-												><span>{{ realData?.watt }}</span
-												>kWh
-											</div>
-											<div class="subhead2">鐢佃兘鐢ㄩ噺</div>
-										</div>
-									</div>
-								</div>
-								<div class="rightChart center">
-									<div class="center compareBar">
-										<div class="barTop">{{ standard.dian }}</div>
-										<div class="barBack">
-											<div class="barDiv" :style="{ height: realData?.dnsHeight }"></div>
-										</div>
-										<div style="line-height: 18px">
-											棰濆畾
-											<br />
-											娑堣��
-										</div>
-									</div>
-									<div class="center compareBar">
-										<div class="barTop">{{ realData?.dian | 0 }}</div>
-										<div class="barBack">
-											<div
-												class="barDiv"
-												:class="{ good: realData?.dngood, bad: realData?.dnbad }"
-												:style="[realData?.dnrHeight && { height: realData?.dnrHeight }]"
-											></div>
-										</div>
-										<div style="line-height: 18px">
-											瀹炴椂
-											<br />
-											娑堣��
-										</div>
-									</div>
-								</div>
-							</div>
-						</dv-border-box7>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
-</template>
-
-<script setup lang="ts">
-	import { useFullscreen } from '@vueuse/core'
-	import { BorderBox13 as DvBorderBox7 } from '@kjgl77/datav-vue3'
-	import { router } from '/@/router'
-	import { onMounted, ref, onUnmounted } from 'vue'
-	import { Progress } from 'ant-design-vue'
-	import * as echarts from 'echarts'
-	import 'echarts-liquidfill'
-	import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index'
-	import { defHttp } from '/@/utils/http/axios'
-	import { queryById } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { useUserStore } from '/@/store/modules/user'
-	const domRef = ref<Nullable<HTMLElement>>(null)
-	const { enter, toggle, exit, isFullscreen } = useFullscreen()
-
-	const { toggle: toggleDom } = useFullscreen(domRef)
-	const Timer = ref()
-	const marks = ref<Record<number, any>>({
-		0: '0掳C',
-		1: '',
-		2: '',
-		3: '',
-		4: '',
-		5: '',
-		6: '',
-		7: '',
-		8: '',
-		9: '',
-		10: '',
-		11: '',
-		12: '',
-		13: '',
-		14: '',
-		15: '',
-		16: '',
-		17: '',
-		18: '',
-		19: '',
-		20: '',
-		21: '',
-		22: '',
-		23: '',
-		24: '',
-		25: '25掳C',
-		26: '',
-		27: '',
-		28: '',
-		29: '',
-		30: '',
-		31: '',
-		32: '',
-		33: '',
-		34: '',
-		35: '',
-		36: '',
-		37: '',
-		38: '',
-		39: '',
-		40: '',
-		41: '',
-		42: '',
-		43: '',
-		44: '',
-		45: '',
-		46: '',
-		47: '',
-		48: '',
-		49: '',
-		50: '50掳C',
-		51: '',
-		52: '',
-		53: '',
-		54: '',
-		55: '',
-		56: '',
-		57: '',
-		58: '',
-		59: '',
-		60: '',
-		61: '',
-		62: '',
-		63: '',
-		64: '',
-		65: '',
-		66: '',
-		67: '',
-		68: '',
-		69: '',
-		70: '',
-		71: '',
-		72: '',
-		73: '',
-		74: '',
-		75: '75掳C',
-		76: '',
-		77: '',
-		78: '',
-		79: '',
-		80: '',
-		81: '',
-		82: '',
-		83: '',
-		84: '',
-		85: '',
-		86: '',
-		87: '',
-		88: '',
-		89: '',
-		90: '',
-		91: '',
-		92: '',
-		93: '',
-		94: '',
-		95: '',
-		96: '',
-		97: '',
-		98: '',
-		99: '',
-		100: '100掳C',
-	})
-
-	const eqp = ref({} as dryEquipment)
-	const userStore = useUserStore()
-	const realData = ref({})
-	const standard = ref({
-		xiaolv: 220,
-		xlMin: 200,
-		zhengqi: 50,
-		zqMin: 45,
-		dian: 8,
-		dMin: 7.5,
-	})
-	//realData.value.tempValue = [0, 100]
-	realData.value.mois = [0.5, 0.35, 0.2]
-	realData.value.gif = 'tmrefeng2'
-	realData.value.herbImage = 'yaocai1.png'
-	var moisChart: echarts.ECharts
-	var waterChart: echarts.ECharts
-
-	var bellowsTempChart: echarts.ECharts
-	// var fanFreqChart: echarts.ECharts
-	var progressBarChart: echarts.ECharts
-	var efficiencyLineChart: echarts.ECharts
-
-	var compareChart: echarts.ECharts
-	function initCharts() {
-		let domId = 'moisChart'
-		let chartDom: HTMLElement = document.getElementById(domId) as HTMLElement
-		let waterDom: HTMLElement = document.getElementById('moisture') as HTMLElement
-		let bellowsTempDom: HTMLElement = document.getElementById('bellowsTemp') as HTMLElement
-		// let fanFreqDom: HTMLElement = document.getElementById('fanFreq') as HTMLElement
-		let progressBarDom: HTMLElement = document.getElementById('progressBar') as HTMLElement
-		let efficiencyLineDom: HTMLElement = document.getElementById('efficiencyLine') as HTMLElement
-		let compaerDom: HTMLElement = document.getElementById('compare') as HTMLElement
-		// let weightDom: HTMLElement = document.getElementById('weight') as HTMLElement
-		moisChart = echarts.init(chartDom)
-		waterChart = echarts.init(waterDom)
-		bellowsTempChart = echarts.init(bellowsTempDom)
-		//fanFreqChart = echarts.init(fanFreqDom)
-		progressBarChart = echarts.init(progressBarDom)
-		efficiencyLineChart = echarts.init(efficiencyLineDom)
-		compareChart = echarts.init(compaerDom)
-
-		const option = {
-			color: ['green', 'red'],
-			title: {
-				text: '鍚按鐜�/娓╁害瓒嬪娍',
-				textStyle: {
-					//color: '#fff',
-					fontSize: 15,
-				},
-			},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				left: 50,
-				right: 70,
-				top: 50,
-				bottom: 40,
-			},
-			legend: {
-				right: 20,
-			},
-			// toolbox: {
-			// 	show: true,
-			// 	feature: {
-			// 		dataZoom: {
-			// 			yAxisIndex: 'none',
-			// 		},
-			// 		dataView: { readOnly: false },
-			// 		magicType: { type: ['line', 'bar'] },
-			// 		restore: {},
-			// 		saveAsImage: {},
-			// 	},
-			// },
-			xAxis: {
-				type: 'value',
-				//boundaryGap: false,
-				// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
-				min: 0,
-				max: function (value) {
-					if (value.max < 100) {
-						return 100
-					} else {
-						return value.max
-					}
-				},
-			},
-			yAxis: {
-				type: 'value',
-				boundaryGap: ['10%', '10%'],
-				// min: 0,
-				// max: function (value) {
-				// 	if (value.max < 100) {
-				// 		return 100
-				// 	} else {
-				// 		return value.max
-				// 	}
-				// },
-			},
-			// yAxis: {
-			// 	type: 'value',
-			// 	axisLabel: {
-			// 		formatter: '{value} 掳C',
-			// 	},
-			// },
-			series: [
-				{
-					name: '鍚按鐜�',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 1],
-						[2, 2],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					markLine: {
-						data: [{ type: 'average', name: 'Avg' }],
-					},
-					areaStyle: {
-						opacity: 0.2,
-						color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-							{
-								offset: 0,
-								color: 'rgb(128, 255, 165)',
-							},
-							{
-								offset: 1,
-								color: 'rgb(1, 191, 236)',
-							},
-						]),
-					},
-				},
-				{
-					name: '娓╁害',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 10],
-						[2, 20],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					areaStyle: {
-						opacity: 0.2,
-						color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-							{
-								offset: 0,
-								color: 'rgb(255, 0, 135)',
-							},
-							{
-								offset: 1,
-								color: 'rgb(135, 0, 157)',
-							},
-						]),
-					},
-					// markLine: {
-					// 	data: [
-					// 		{ type: 'average', name: 'Avg' },
-					// 		[
-					// 			{
-					// 				symbol: 'none',
-					// 				x: '90%',
-					// 				yAxis: 'max',
-					// 			},
-					// 			{
-					// 				symbol: 'circle',
-					// 				label: {
-					// 					position: 'start',
-					// 					formatter: 'Max',
-					// 				},
-					// 				type: 'max',
-					// 				name: '鏈�楂樼偣',
-					// 			},
-					// 		],
-					// 	],
-					// },
-				},
-			],
-		}
-		const waterOption = {
-			series: [
-				{
-					type: 'liquidFill',
-					radius: '100%',
-					//waveAnimation: false,
-					amplitude: 3,
-					animationDuration: 5,
-					//animationDurationUpdate: 0,
-					data: [0.56, 0.44, 0.32],
-					shape:
-						'path://M828.817,706.209C828.817,881.725,686.98,1024,512,1024c-174.98,0-316.817-142.275-316.817-317.791C195.183,530.74,512,0,512,0s316.817,530.74,316.817,706.209z',
-					outline: {
-						show: false,
-					},
-					label: {
-						// formatter: function () {
-						// 	//console.log(`output->params`,params,mois.value)
-
-						// 	return (
-						// 		'' +
-						// 		// +'鍒濆'+(mois.value[0]*100).toFixed(2) + '%\n\n\n'
-						// 		(mois.value[1] * 100).toFixed(2) +
-						// 		'%'
-						// 		// + '\n\n\n鐩爣'+(mois.value[2]*100).toFixed(2) + '%'
-						// 	)
-						// },
-						fontSize: 20,
-						//position: ['50%',(100-mois.value[1]*100).toFixed(2) + '%'],
-					},
-				},
-			],
-		}
-
-		const bellowsOption = {
-			series: [
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					splitNumber: 8,
-					itemStyle: {
-						color: '#FFAB91',
-					},
-					progress: {
-						show: true,
-						width: 10,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						lineStyle: {
-							width: 10,
-						},
-					},
-					axisTick: {
-						distance: -15,
-						splitNumber: 5,
-						length: 3,
-						lineStyle: {
-							width: 1,
-							color: '#999',
-						},
-					},
-					splitLine: {
-						distance: -18,
-						length: 6,
-						lineStyle: {
-							width: 2,
-							color: '#999',
-						},
-					},
-					axisLabel: {
-						distance: -13,
-						color: '#999',
-						fontSize: 9,
-					},
-					anchor: {
-						show: false,
-					},
-					title: {
-						show: false,
-					},
-					detail: {
-						valueAnimation: true,
-						width: '60%',
-						lineHeight: 40,
-						borderRadius: 8,
-						offsetCenter: [0, '0%'],
-						fontSize: 20,
-						fontWeight: 'bolder',
-						formatter: '{value}掳C',
-						color: 'inherit',
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					itemStyle: {
-						color: '#FD7347',
-					},
-					progress: {
-						show: true,
-						width: 3,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						show: false,
-					},
-					axisTick: {
-						show: false,
-					},
-					splitLine: {
-						show: false,
-					},
-					axisLabel: {
-						show: false,
-					},
-					detail: {
-						show: false,
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-			],
-		}
-
-		// const fanFreqOption = {
-		// 	series: [
-		// 		{
-		// 			type: 'gauge',
-		// 			progress: {
-		// 				show: true,
-		// 				width: 9,
-		// 			},
-		// 			axisLine: {
-		// 				lineStyle: {
-		// 					width: 9,
-		// 				},
-		// 			},
-		// 			axisTick: {
-		// 				show: false,
-		// 			},
-		// 			splitLine: {
-		// 				distance: 3,
-		// 				length: 4,
-		// 				lineStyle: {
-		// 					width: 1,
-		// 					color: '#999',
-		// 				},
-		// 			},
-		// 			axisLabel: {
-		// 				distance: 15,
-		// 				color: '#999',
-		// 				fontSize: 10,
-		// 			},
-		// 			anchor: {
-		// 				show: true,
-		// 				showAbove: true,
-		// 				size: 10,
-		// 				itemStyle: {
-		// 					borderWidth: 3,
-		// 				},
-		// 			},
-		// 			title: {
-		// 				show: false,
-		// 			},
-		// 			detail: {
-		// 				valueAnimation: true,
-		// 				fontSize: 20,
-		// 				offsetCenter: [0, '70%'],
-		// 				formatter: '{value}Hz',
-		// 			},
-		// 			data: [
-		// 				{
-		// 					value: 56,
-		// 				},
-		// 			],
-		// 		},
-		// 	],
-		// }
-		// const weightOption = {
-		// 	// 		title: {
-		// 	//   text: 'Referer of a Website',
-		// 	//   subtext: 'Fake Data',
-		// 	//   left: 'center'
-		// 	// },
-		// 	color: ['#1595EA', '#2C4D90', '#FF7F7F'],
-		// 	tooltip: {
-		// 		trigger: 'item',
-		// 	},
-		// 	radius: [0, '85%'],
-		// 	// grid: {
-		// 	// 	top: 20,
-		// 	// 	left: 20,
-		// 	// 	right: 20,
-		// 	// 	bottom: 20,
-		// 	// },
-		// 	// legend: {
-		// 	// 	orient: 'vertical',
-		// 	// 	left: 'left',
-		// 	// },
-		// 	series: [
-		// 		{
-		// 			name: '閲嶉噺鏁版嵁',
-		// 			type: 'pie',
-		// 			radius: '50%',
-		// 			data: [
-		// 				{ value: 1048, name: '鍓╀綑閲嶉噺' },
-		// 				{ value: 735, name: '鐑樺幓閲嶉噺' },
-		// 			],
-		// 			label: {
-		// 				show: false,
-		// 			},
-		// 			labelLine: {
-		// 				show: false,
-		// 			},
-		// 			emphasis: {
-		// 				itemStyle: {
-		// 					shadowBlur: 10,
-		// 					shadowOffsetX: 0,
-		// 					shadowColor: 'rgba(0, 0, 0, 0.5)',
-		// 				},
-		// 			},
-		// 		},
-		// 	],
-		// }
-
-		const progressBarOption = {
-			// tooltip: {
-			// 	trigger: 'axis',
-			// 	axisPointer: {
-			// 		// Use axis to trigger tooltip
-			// 		type: 'shadow', // 'shadow' as default; can also be 'line' or 'shadow'
-			// 	},
-			// },
-			// color: [
-			// 	'#0653F6',
-			// 	// '#1B61E7',
-			// 	'#3673D5',
-			// 	// '#4A80C8',
-			// 	'#608FB8',
-			// 	// '#719BAD',
-			// 	'#82A6A1',
-			// 	// '#8DAD9A',
-			// 	'#9CB790',
-			// 	// '#A7BE88',
-			// 	'#B3C681',
-			// 	'#CAD671',
-			// 	'#DBE165',
-			// ],
-			animation: false, // 鍏抽棴鍔ㄧ敾
-			color: ['#397FD7', '#2D8CDE', '#239CE5', '#1DA4E8', '#14B2EF', '#0BC4FA', '#02D2FF', '#19EEFF', '#33FAFF', '#5EFFF8', '#60FFFE', '#64FAFF', '#70FFFF', '#7BFFFF', '#88FFFD', '#97FFFF', '#A5FFFD', '#B1FFFF', '#BFFFFF', '#CAFFFF'],
-			grid: {
-				top: '12%',
-				left: '20',
-				right: '55',
-				bottom: '3%',
-				containLabel: true,
-			},
-			xAxis: {
-				min: 0,
-				max: 150,
-				show: false,
-				type: 'value',
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-			},
-			yAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'category',
-				data: ['鏃堕棿'],
-			},
-			series: [
-				// {
-				// 	name: '绗竴闃舵',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	barWidth: 26,
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [30],
-				// },
-				// {
-				// 	name: '绗簩闃舵',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [30],
-				// },
-				// {
-				// 	name: 'Affiliate Ad',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [20],
-				// },
-				// {
-				// 	name: 'Video Ad',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [15],
-				// },
-				// {
-				// 	name: 'Search Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [10],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [5],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [5],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [
-				// 		{
-				// 			value: 35,
-				// 			itemStyle: {
-				// 				color: '#c0c0c0',
-				// 			},
-				// 		},
-				// 	],
-				// },
-			],
-		}
-
-		const efficiencyLineOption = {
-			title: {},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				top: '30%',
-				left: '17',
-				right: '57',
-				bottom: '0%',
-				containLabel: true,
-			},
-			legend: {
-				right: 60,
-			},
-			xAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'value',
-				min: 0,
-				max: 150,
-				// data: [15, 15, 10, 7.5, 5, 2.5, 2.5, 1],
-			},
-			yAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'value',
-				axisLabel: {
-					formatter: '{value} 掳C',
-				},
-				max: standard.value.xiaolv + 3,
-			},
-			series: [
-				{
-					name: '骞茬嚗鏁堢巼',
-					type: 'line',
-					lineStyle: {
-						width: 1,
-					},
-					// [[15,10], [15,11], [10,6], [7.5,12], [5,12], [2.5,5], [2.5,9], [1,7]]
-					data: [
-						[0, 1],
-						[15, 10],
-						[45, 11],
-						[70, 6],
-					],
-					markPoint: {
-						data: [
-							{ type: 'max', name: 'Max' },
-							{ type: 'min', name: 'Min' },
-						],
-					},
-					markLine: {
-						symbol: 'none',
-						data: [
-							{
-								name: '棰濆畾',
-								yAxis: standard.value.xiaolv,
-							},
-						],
-						label: {
-							formatter: '{b}\n{c}',
-						},
-					},
-					// markLine: {
-					// 	data: [{ type: 'average', name: 'Avg' }],
-					// },
-				},
-			],
-		}
-
-		const compareOption = {
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				top: '6%',
-				left: '10%',
-				right: '10%',
-				bottom: '3%',
-				containLabel: true,
-			},
-			xAxis: {
-				show: false,
-				type: 'value',
-			},
-			yAxis: {
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'category',
-				data: ['1#', '2#', '3#', '4#', '5#', '6#'],
-			},
-			series: [
-				{
-					name: '2011',
-					type: 'bar',
-					barWidth: 10,
-					data: [190, 89, 34, 70, 44, 30],
-					label: {
-						show: true,
-						position: 'right',
-						valueAnimation: true,
-
-						color: '#fff',
-					},
-				},
-			],
-		}
-
-		option && moisChart.setOption(option)
-		waterOption && waterChart.setOption(waterOption)
-		bellowsOption && bellowsTempChart.setOption(bellowsOption)
-		//fanFreqOption && fanFreqChart.setOption(fanFreqOption)
-
-		progressBarOption && progressBarChart.setOption(progressBarOption)
-		efficiencyLineOption && efficiencyLineChart.setOption(efficiencyLineOption)
-		compareOption && compareChart.setOption(compareOption)
-	}
-
-	function queryEqp() {
-		queryById({ id: router.currentRoute.value.params.id }).then((res) => {
-			// console.log(`output->res`, res)
-			eqp.value = res
-			queryRealTime()
-			setTimeout(initCharts, 500)
-		})
-	}
-
-	var shangliaoFlag = false
-	var statusGif = 'tmrefeng2'
-	var statusTxt = '姝e湪骞茬嚗'
-
-	function chaiwangban() {
-		statusGif = 'chaiwangban-1'
-		setTimeout(shangliao, 7000)
-	}
-
-	function shangliao() {
-		statusGif = 'shangliao-N'
-		setTimeout(() => {
-			statusGif = 'zhuangwangban'
-			setTimeout(() => {
-				statusGif = 'guanmen1'
-				setTimeout(() => {
-					shangliaoFlag = false
-				}, 4000)
-			}, 5000)
-		}, 13000)
-	}
-
-	function queryRealTime() {
-		let tenantId = userStore.getTenant
-		let eqpCode = eqp.value.code
-		let queryRealTimeUrl = '/dry/real/getRealTimeData'
-		defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-			if (res && res.trendVo) {
-				//console.log(`output->re11s`, res)
-				//	res.tempValue = [res.windTemp, 100]
-				//res.percent = ((res.dryTime / res.et) * 100).toFixed(2)
-				/**姘存淮鍥惧惈姘撮噺 */
-				res.mois = [
-					(res.trendVo.moisture / 100).toFixed(2),
-					(res.trendVo.moisture / 100 / 1.5).toFixed(2),
-					(res.trendVo.moisture / 100 / 3).toFixed(2),
-				]
-				if (waterChart) {
-					waterChart.setOption({
-						series: [
-							{
-								data: res.mois,
-								label: {
-									formatter: function () {
-										return res.trendVo.moisture + '%'
-									},
-									fontSize: 20,
-								},
-							},
-						],
-					})
-				}
-
-				/**娓╁害鐜舰鍥� */
-				if (bellowsTempChart) {
-					bellowsTempChart.setOption({
-						series: [{ data: [{ value: res.windTemp }] }, { data: [{ value: res.windTemp }] }],
-					})
-				}
-				/**椋庢満棰戠巼鐜舰鍥� */
-				// if (fanFreqChart) {
-				// 	fanFreqChart.setOption({
-				// 		series: [
-				// 			{
-				// 				data: [
-				// 					{
-				// 						value: res.trendVo.fanFrequency,
-				// 					},
-				// 				],
-				// 			},
-				// 		],
-				// 	})
-				// }
-				/**骞茬嚗杩涘害銆佽蛋鍔夸笌闃舵鏁堢巼鍜岄樁娈垫秷鑰� */
-				if (res && res.detailList) {
-					var progressSeries = []
-					var ganZaoXiaoLv = []
-					var zhengQiXiaoHao = []
-					var dianNengXiaoHao = []
-					var totalTime = 1
-					var beforeWeight = 0
-					res.moisList = []
-
-					beforeWeight = res.originWeight
-					res.detailList.forEach((item) => {
-						//console.log(`output->item`, item)
-						res.moisList.push([item.totalTime, item.moisture])
-						//console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime)
-						var curDryTime = item.totalTime - totalTime
-						//console.log("curDryTime:", curDryTime)
-						//console.log("bw:",beforeWeight,"iw:", item.weight);
-						if (curDryTime > 0) {
-							progressSeries.push({
-								name: item.moisture,
-								type: 'bar',
-								stack: 'total',
-								label: {
-									show: true,
-								},
-								emphasis: {
-									focus: 'series',
-								},
-								data: [item.totalTime - totalTime],
-							})
-							ganZaoXiaoLv.push([curDryTime / 2 + totalTime, (((beforeWeight - item.weight) / curDryTime) * 60).toFixed(1)])
-
-							totalTime = item.totalTime
-						}
-						beforeWeight = item.weight
-					})
-					if (res.remain) {
-						if (res.dryTime - totalTime > 0) {
-							progressSeries.push({
-								name: '褰撳墠',
-								type: 'bar',
-								stack: 'total',
-								label: {
-									show: true,
-								},
-								emphasis: {
-									focus: 'series',
-								},
-								data: [
-									{
-										value: res.dryTime - totalTime,
-									},
-								],
-							})
-						}
-						res.totalRemain = res.remain - (res.dryTime - totalTime) > 0 ? res.remain - (res.dryTime - totalTime) : 0
-						progressSeries.push({
-							name: '鍓╀綑',
-							type: 'bar',
-							stack: 'total',
-							label: {
-								show: true,
-							},
-							emphasis: {
-								focus: 'series',
-							},
-							data: [
-								{
-									value: res.remain - (res.dryTime - totalTime),
-									itemStyle: {
-										color: '#c0c0c0',
-									},
-								},
-							],
-						})
-					}
-
-					/**骞茬嚗杩涘害 */
-					if (progressBarChart) {
-						//console.log(`output->progressSeries`, progressSeries)
-						progressBarChart.setOption(
-							{
-								xAxis: {
-									max: totalTime + res.remain,
-								},
-								series: progressSeries,
-							},
-							{ replaceMerge: ['series'] }
-						)
-					}
-
-					res.totalTime = totalTime + res.remain
-					/**骞茬嚗鏁堢巼銆佹秷鑰� */
-					if (efficiencyLineChart) {
-						//console.log(`output->ganZaoXiaoLv`, ganZaoXiaoLv)
-						efficiencyLineChart.setOption({
-							xAxis: {
-								max: totalTime + res.remain,
-							},
-							yAxis: {
-								max: function (value) {
-									//	console.log("max::",value);
-									if (value.max < standard.value.xiaolv + 3) {
-										return standard.value.xiaolv + 3
-									} else {
-										return value.max
-									}
-								},
-							},
-							series: [
-								{
-									data: ganZaoXiaoLv,
-									markLine: {
-										symbol: 'none',
-										data: [
-											{
-												name: '棰濆畾',
-												yAxis: standard.value.xiaolv,
-											},
-										],
-										label: {
-											formatter: '{b}\n{c}',
-										},
-									},
-								},
-								{ data: zhengQiXiaoHao },
-								{ data: dianNengXiaoHao },
-							],
-						})
-					}
-
-					res.moisList.push([res.dryTime, res.trendVo.moisture])
-				}
-
-				/**娓╁害瓒嬪娍 */
-				if (res && res.bellowsTemp) {
-					Array.from(Object.entries(res.bellowsTemp))
-					var arr = Object.keys(res.bellowsTemp)
-					var temArr = []
-					arr.forEach((item) => {
-						temArr.push([item * 1, res.bellowsTemp[item]])
-					})
-
-					//console.log(`output->arr` + JSON.stringify(temArr))
-					res.tempArr = temArr
-				}
-
-				/**骞茬嚗杩囩▼瓒嬪娍 */
-				if (moisChart) {
-					//console.log(`output->鏇存柊chart`)
-					moisChart.setOption({
-						series: [
-							{
-								data: res.moisList,
-								markLine: {
-									symbol: 'none',
-									data: [
-										{
-											name: '鐩爣',
-											yAxis: res.target,
-										},
-									],
-									label: {
-										formatter: '{b}\n{c}%',
-									},
-								},
-							},
-							{
-								data: res.tempArr,
-							},
-						],
-					})
-				}
-
-				/**鏁堢巼瀵规瘮鍥� */
-				if (res.originWeight - res.yield <= 0) {
-					res.xiaolv = standard.value.xiaolv + 6
-				} else {
-					res.xiaolv = (((res.originWeight - res.yield) / res.dryTime) * 60).toFixed(2)
-				}
-
-				if (res.xiaolv > standard.value.xiaolv) {
-					res.xlgood = true
-					res.xlsHeight = (standard.value.xiaolv / res.xiaolv) * 100 + '%'
-					res.xlrHeight = '100%'
-				} else if (res.xiaolv < standard.value.xlMin) {
-					res.xlbad = true
-					res.xlsHeight = '100%'
-					res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%'
-				} else {
-					res.xlsHeight = '100%'
-					res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%'
-				}
-
-				/** 钂告苯娑堣�� */
-				if (res.originWeight - res.yield <= 0) {
-					res.zhengqi = standard.value.zhengqi - 3
-				} else {
-					res.zhengqi = (res.steam / (res.originWeight - res.yield)).toFixed(1)
-				}
-				//console.log('zhengqi:', res.zhengqi);
-				if (res.zhengqi > standard.value.zhengqi) {
-					res.zqbad = true
-					res.zqsHeight = (standard.value.zhengqi / res.zhengqi) * 100 + '%'
-					res.zqrHeight = '100%'
-				} else if (res.zhengqi < standard.value.zqMin) {
-					res.zqgood = true
-					res.zqsHeight = '100%'
-					res.zqrHeight = (res.zhengqi / standard.value.zhengqi) * 100 + '%'
-				} else {
-					res.zqsHeight = '100%'
-					res.zqrHeight = (res.zhengqi / standard.value.zhengqi) * 100 + '%'
-				}
-
-				/** 鐢佃兘娑堣�� */
-				if (res.originWeight - res.yield <= 0) {
-					res.dian = standard.value.dian - 1.5
-				} else {
-					res.dian = (res.watt / (res.originWeight - res.yield)).toFixed(1)
-				}
-
-				if (res.dian > standard.value.dian) {
-					res.dnbad = true
-					res.dnsHeight = (standard.value.dian / res.dian) * 100 + '%'
-					res.dnrHeight = '100%'
-				} else if (res.dian < standard.value.dMin) {
-					res.dngood = true
-					res.dnsHeight = '100%'
-					res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%'
-				} else {
-					res.dnsHeight = '100%'
-					res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%'
-				}
-
-				/**鐘舵��/gif鍔ㄥ浘 */
-				if (!shangliaoFlag) {
-					if (res.orderStatus == 0) {
-						statusGif = 'zanting'
-						statusTxt = '鍑嗗'
-					} else if (res.orderStatus == 1) {
-						shangliaoFlag = true
-						statusGif = 'kaimen1'
-						statusTxt = '涓婃枡'
-						setTimeout(chaiwangban, 4000)
-					} else if (res.orderStatus == 2) {
-						if (res.state_fan == 1) {
-							statusGif = 'tmrefeng2'
-							statusTxt = '姝e湪骞茬嚗'
-						}
-
-						if (res.state_roller == 4) {
-							statusGif = 'fanliao-N'
-							statusTxt = '姝e湪缈绘枡'
-						}
-
-						if (res.state_roller == 5) {
-							statusGif = 'chuliao-N'
-							statusTxt = '姝e湪鍑烘枡'
-						}
-
-						if (res.state_windbox == 2 || res.state_windbox == 3) {
-							statusGif = 'fengxiangsheng-1'
-							statusTxt = '姝e湪骞茬嚗'
-						}
-					} else if (res.orderStatus == 3) {
-						statusGif = 'zanting'
-						statusTxt = '鏆傚仠'
-					} else if (res.orderStatus == 4) {
-						statusGif = 'zanting'
-						statusTxt = '骞茬嚗瀹屾垚'
-					}
-				}
-
-				if (compareChart) {
-					compareChart.setOption({
-						yAxis: {
-							data: res.compEqpNum,
-						},
-						series: {
-							data: res.compEqpEffic,
-						},
-					})
-				}
-
-				res.herbImage = 'yaocai1.png'
-
-				if (res.herbName == '鐧借姳铔囪垖鑽�') {
-					res.herbImage = 'baihuasheshecao.png'
-				} else if (res.herbName == '绯ョɑ鏍�') {
-					res.herbImage = 'nuodaogen.png'
-				} else if (res.herbName == '娣緤钘�') {
-					res.herbImage = 'yinyanghuo.png'
-				} else if (res.herbName == '椹娇鑻�') {
-					res.herbImage = 'machixian.png'
-				} else if (res.herbName == '澧ㄦ棻鑾�') {
-					res.herbImage = 'mohanlian.png'
-				} else if (res.herbName == '妗戠櫧鐨�') {
-					res.herbImage = 'sangbaipi.png'
-				}
-				res.isError = false
-
-				res.errorMsg = '鏈変竴涓晠闅滐紝璇锋鏌ャ��'
-			} else {
-				res = {
-					mois: [],
-					gif: 'tmrefeng2',
-					herbImage: 'yaocai1.png',
-				}
-			}
-			//console.log(`output->res`, res)
-			realData.value = res
-		})
-	}
-
-	queryEqp()
-	// DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛�
-	onMounted(() => {
-		Timer.value = setInterval(queryRealTime, 3000)
-	})
-
-	onUnmounted(() => {
-		clearInterval(Timer.value)
-		Timer.value = null
-	})
-</script>
-
-<style scoped>
-	.eqpBox {
-		height: 100%;
-	}
-	.eqpRow {
-		background: white;
-	}
-	.eqpImage {
-		height: 860px;
-		width: 1800px;
-		/* background-image: url(/src/assets/images/dry/bg.png);
-		background-repeat: no-repeat; */
-
-		/*background-position: 160px 280px; */
-		/* background-color: red; */
-		padding: 10px;
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-	}
-
-	.leftEqp {
-		height: 840px;
-		width: 1080px;
-		display: flex;
-		flex-wrap: wrap;
-
-		/* background-color: white;
-		background-image: url(/src/assets/images/dry/shebei1.png);
-		background-repeat: no-repeat;
-		background-size: 125%;
-		border-radius: 10px;
-		background-position: -119px 293px; */
-	}
-
-	.leftTop {
-		height: 600px;
-		width: 780px;
-		display: flex;
-		justify-content: center;
-		align-content: flex-start;
-		/* background-color: white; */
-		background-image: url(/src/assets/images/dry/shebei1.png);
-		background-repeat: no-repeat;
-		background-size: 110%;
-		border-radius: 10px;
-		flex-wrap: wrap;
-		background-position: -78px 119px;
-	}
-	.leftTop0 {
-		height: 600px;
-		width: 780px;
-		display: flex;
-		justify-content: center;
-		align-content: flex-start;
-		flex-wrap: wrap;
-	}
-	.leftMid {
-		width: 780px;
-		height: 230px;
-		/* border: 1px solid; */
-		margin-top: 10px;
-		border-radius: 10px;
-		/* background: white; */
-	}
-	.mainInfo {
-		line-height: 33px;
-		padding-left: 10px;
-		font-size: 30px;
-	}
-	.subhead {
-		color: #a19f9c;
-		font-size: 16px;
-		padding-left: 10px;
-	}
-
-	.mainInfo2 {
-		line-height: 20px;
-		padding-left: 0px;
-		font-size: 16px;
-	}
-	.subhead2 {
-		color: #a19f9c;
-		font-size: 10px;
-		padding-left: 0px;
-	}
-	.zhengqi {
-		height: 180px;
-		width: 200px;
-		background-image: url(/src/assets/images/dry/liuliangji.png);
-		background-repeat: no-repeat;
-		background-size: 160px;
-		/* border-radius: 10px; */
-		background-position: 17px -6px;
-	}
-
-	.liuliangji {
-	}
-	.leftData {
-		height: 180px;
-		width: 120px;
-	}
-	.rightChart {
-		height: 180px;
-		width: 170px;
-		margin-top: -30px;
-	}
-	.leftTop1 {
-		width: 220px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-	}
-	.leftTop2 {
-		width: 250px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-	}
-	.leftTop3 {
-		width: 340px;
-		height: 200px;
-		/* background-image: url(/src/assets/images/dry/fanliao.gif); */
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 300px;
-		border-radius: 50px;
-	}
-
-	.eqpStatus {
-		width: 780px;
-		height: 300px;
-
-		padding: 100px;
-	}
-	.rightInfo {
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-		height: 850px;
-		width: 600px;
-	}
-
-	.rightTop {
-		display: flex;
-		height: 360px;
-		padding-left: 10px;
-	}
-	.rightTwo {
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.infoChart {
-		width: 290px;
-		height: 230px;
-		/* background: white; */
-		margin-left: 10px;
-		margin-top: 10px;
-		border-radius: 10px;
-	}
-	.chartTittle {
-		width: 290px;
-		height: 30px;
-		font-size: 16px;
-		display: flex;
-		justify-content: space-between;
-		padding: 15px 15px;
-	}
-	.chartInfo {
-		width: 60px;
-		height: 180px;
-	}
-
-	.compareBar {
-		width: 55px;
-		height: 140px;
-	}
-	.margintop-30 {
-		margin-top: -30px;
-	}
-
-	.barTop {
-		width: 55px;
-		height: 30px;
-	}
-	.barBack {
-		width: 30px;
-		height: 100px;
-		/* border: 1px solid black; */
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-end;
-	}
-	.barDiv {
-		width: 100%;
-
-		background-color: #1595ea;
-	}
-	.bad {
-		background-color: #ed6f6f;
-	}
-	.rightLabel {
-		width: 110px;
-		display: flex;
-		justify-content: space-between;
-	}
-	.label {
-		color: white;
-		text-align: center;
-		width: 50px;
-		border-radius: 4px;
-		height: 20px;
-		font-size: 10px;
-		line-height: 21px;
-	}
-	.good {
-		background-color: #2ecf54;
-	}
-
-	.mainInfo3 {
-		font-size: 24px;
-	}
-	.herbInfo {
-		width: 290px;
-		height: 360px;
-		color: #727272;
-	}
-
-	.curEqp {
-		width: 290px;
-		height: 120px;
-		/* background: white;
-		border-radius: 10px; */
-	}
-	.curHerb {
-		margin-top: 10px;
-		width: 290px;
-		height: 230px;
-		/* background: white;
-		border-radius: 10px; */
-		background-image: url(/src/assets/images/dry/yaocai.jpg);
-		background-repeat: no-repeat;
-		background-size: 110px 90px;
-		background-position: 10px 10px;
-	}
-	.tempMoisChart {
-		width: 590px;
-		height: 360px;
-		/* background: white; */
-
-		padding: 20px;
-		border-radius: 10px;
-	}
-	.topLeft {
-		margin: 20px 40px 60px 20px;
-		padding: 15px;
-		/* background: white; */
-		border-radius: 10px;
-		height: 325px;
-		width: 440px;
-		/* background-image: url(/src/assets/images/dry/yaocai.jpg); */
-		background-repeat: no-repeat;
-		background-size: 164px 132px;
-		background-position: 239px 65px;
-		display: flex;
-	}
-	.topMid {
-		margin: 20px 20px 60px 40px;
-		/* background: white; */
-		border-radius: 10px;
-		background-image: url(/src/assets/images/dry/fanliao.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 400px;
-		width: 400px;
-
-		padding: 20px;
-	}
-	.topRight {
-		margin: 20px 20px 60px 20px;
-		/* background: white; */
-		border-radius: 10px;
-		width: 700px;
-		padding: 20px;
-	}
-	.midLeft {
-		height: 450px;
-		width: 600px;
-		display: flex;
-		padding: 0 20px 20px 20px;
-	}
-	.midMid {
-		width: 500px;
-		padding-top: 50px;
-	}
-
-	.midRight {
-		background-image: url(/src/assets/images/dry/fengjixz.gif);
-		background-repeat: no-repeat;
-		background-position: 150px 260px;
-		background-size: 120px 120px;
-		width: 600px;
-	}
-
-	.shangJianTou {
-		margin-left: 140px;
-		width: 70px;
-		height: 100px;
-		background-image: url(/src/assets/images/dry/shangjiantoutou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 70px 100px;
-	}
-
-	.zoujiantou {
-		margin-left: 225px;
-		margin-top: 30px;
-		width: 100px;
-		height: 70px;
-		background-image: url(/src/assets/images/dry/zuojiantou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 100px 70px;
-	}
-	.fault {
-		padding: 10px;
-		height: 60px;
-		font-size: 26px;
-		width: 100%;
-		text-align: right;
-		color: red;
-	}
-	.eqpName {
-		padding: 20px;
-
-		height: 160px;
-	}
-
-	.formula {
-		display: flex;
-		width: 290px;
-		height: 40px;
-		padding: 0 20px;
-		justify-content: space-around;
-		justify-items: center;
-	}
-
-	.formulaItem {
-		display: flex;
-		justify-content: center;
-		width: 85px;
-		height: 40px;
-	}
-
-	.eqpInfoText {
-		font-size: 18px;
-		font-weight: bold;
-	}
-
-	:deep() .ant-slider-mark-text {
-		padding-left: 15px;
-		font-size: 10px;
-	}
-	:deep() .ant-slider-mark-text::before {
-		content: '';
-		display: block;
-		width: 6px;
-		height: 1px;
-		background-color: #1890ff;
-
-		position: absolute;
-		top: 10px;
-		left: 0px;
-	}
-	:deep() .ant-slider-rail {
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-		background: linear-gradient(to top, #ce0000 0%, #ce0000 40%, #ce0000 75%, rgb(160, 160, 160) 100%);
-	}
-	:deep() .ant-slider-track {
-		background: rgb(216, 216, 216);
-
-		height: 20px;
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-	}
-	:deep() .ant-slider-track:hover {
-	}
-	:deep() .ant-slider-handle {
-		display: none;
-	}
-	:deep() .ant-slider-dot {
-		display: none;
-	}
-	:deep() .ant-slider-step {
-		width: 10px !important;
-	}
-	:deep() .ant-slider-step > :first-child {
-		display: block !important;
-		width: 30px !important;
-		height: 30px !important;
-		bottom: -26px !important;
-		left: -6px;
-		border: none;
-		background: #ce0000;
-	}
-	:deep() .progress {
-		padding: 25px 25px;
-
-		width: 360px;
-		display: flex;
-	}
-	:deep() .ant-progress-bg {
-		height: 25px !important;
-	}
-	.outDiv {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-	}
-	.blingbling {
-		-webkit-animation: scaleout 1.5s infinite ease-in-out;
-		animation: scaleout 1.5s infinite ease-in-out;
-	}
-	.center {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-		align-items: center;
-		flex-wrap: wrap;
-		text-align: center;
-	}
-
-	.centerText {
-		width: 100%;
-		text-align: center;
-	}
-
-	@-webkit-keyframes scaleout {
-		0% {
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-
-	@keyframes scaleout {
-		0% {
-			transform: scale(1);
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			transform: scale(1.1);
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-</style>
diff --git a/src/views/dry/monitor/Eqp1.vue b/src/views/dry/monitor/Eqp1.vue
deleted file mode 100644
index 783b657..0000000
--- a/src/views/dry/monitor/Eqp1.vue
+++ /dev/null
@@ -1,763 +0,0 @@
-<template>
-	<div class="eqpBox">
-		<div class="eqpRow">
-			<div class="eqpImage">
-				<div class="topLeft">
-					<div class="eqpName">璁惧锛歿{ eqp.name }}</div>
-					<div class="eqpName">鍨嬪彿锛歿{ eqp.type }}</div>
-					<div class="eqpName">鑽潗锛歿{ realData?.herbName }}</div>
-					<div class="eqpName">鎶曟枡锛歿{ realData?.feed }} 绛�</div>
-					<div class="eqpName">閲嶉噺锛歿{ realData?.originWeight }} Kg</div>
-				</div>
-				<div class="topMid">
-					<div class="shangJianTou"></div>
-					<div class="zoujiantou"></div>
-					<div class="eqpInfoText" style="padding-top: 40px; text-align: center">鐑鐑樺共涓�</div>
-				</div>
-				<div class="topRight">
-					<div :id="'moisChart'" style="width: 660px; height: 285px"></div>
-				</div>
-				<div class="midLeft">
-					<div style="width: 300px; background: white; border-radius: 10px; padding: 30px 50px">
-						<div style="height: 1px; font-size: 18px; text-align: center; margin-top: 10px; margin-bottom: -10px"
-							>鍒濆锛歿{ (realData?.mois[0] * 100).toFixed(2) }}%</div
-						>
-						<div id="moisture" style="width: 200px; height: 300px"></div>
-						<div style="height: 1px; font-size: 18px; text-align: center; margin-top: -25px">鐩爣锛歿{ (realData?.mois[2] * 100).toFixed(2) }}%</div>
-						<div style="width: 200px; font-size: 18px; text-align: center; margin-top: 60px; font-weight: bold">鍚按鐜�</div>
-					</div>
-					<div style="width: 260px; padding-left: 60px">
-						<div style="width: 200px; height: 100px; padding-top: 60px; padding-left: 10px">
-							<div style="display: flex; line-height: 40px; align-items: baseline">
-								<div style="width: 10px; margin-right: 10px; height: 10px; background-color: #2c4d90"> </div> 鐑樺幓閲嶉噺锛�<span class="eqpInfoText"
-									>40</span
-								>
-								Kg</div
-							>
-							<div style="display: flex; line-height: 40px; align-items: baseline">
-								<div style="width: 10px; margin-right: 10px; height: 10px; background-color: #1595ea"> </div> 鍓╀綑閲嶉噺锛�<span class="eqpInfoText"
-									>151</span
-								>
-								Kg
-							</div>
-						</div>
-						<div id="weight" style="width: 200px; height: 300px"></div>
-					</div>
-				</div>
-				<div class="midMid">
-					<div class="outDiv">
-						<div style="height: 100px; width: 400px">
-							<Progress
-								:stroke-color="{
-									from: '#108ee9',
-									to: '#87d068',
-								}"
-								:percent="realData?.percent"
-								status="active"
-								:show-info="false"
-							/>
-							<div style="padding-top: 10px; display: flex; justify-content: space-between; font-weight: bold">
-								<span>骞茬嚗 52 Min</span>
-								<span>棰勮 120 Min</span>
-							</div>
-						</div>
-					</div>
-					<div class="outDiv eqpStatus">
-						<div
-							style="
-								font-size: 28px;
-								margin-top: 80px;
-								color: white;
-								background-color: #1595ea;
-								height: 60px;
-								width: 180px;
-								line-height: 60px;
-								text-align: center;
-								border-radius: 5px;
-								font-weight: bold;
-							"
-							>姝e湪骞茬嚗</div
-						>
-						<!-- <div
-							class="eqpInfoText blingbling"
-							style="
-								position: absolute;
-								max-height: 130px;
-								max-width: 360px;
-								border-radius: 10px;
-								background-color: #ce0000;
-								color: white;
-								padding: 10px;
-							"
-						>
-							<div class="outDiv">
-								<div><Icon icon="bx:error" :size="30" /> </div>
-								<div><span> 鏈変竴涓晠闅滐紝璇锋鏌ユ満鍣ㄣ��</span></div>
-							</div>
-						</div> -->
-						<!-- <div class="eqpInfoText blingbling">
-							<div><Icon icon="bx:error" :size="30" /> </div>
-								<div><span style="font-size: 20px">姝e湪鐑樺共</span></div>
-						</div> -->
-					</div>
-				</div>
-				<div class="midRight">
-					<div style="display: flex">
-						<div style="height: 210px; width: 360px">
-							<div style="height: 150px; padding: 0 20px 0 90px; display: flex">
-								<div style="max-height: 150px; width: 220px">
-									<div style="width: 10px; height: 35px; margin-top: -1px; background-color: #ff1515"></div>
-									<div style="width: 10px; height: 35px; background-color: yellow"></div>
-									<div style="width: 10px; height: 35px; background-color: rgb(0, 219, 48)"></div>
-								</div>
-								<div> </div>
-							</div>
-							<div style="padding-left: 150px; padding-top: 20px">
-								<div class="eqpInfoText">鐑娓╁害锛�70 掳C</div>
-								<div class="eqpInfoText">椋庢満棰戠巼锛�56 Hz</div>
-							</div>
-						</div>
-						<div style="height: 430px; width: 220px; padding: 20px 20px; background: white; border-radius: 10px">
-							<div style="text-align: center; margin-top: 10px; font-size: 18px; font-weight: bold">{{ realData.windTemp }} 掳C</div>
-							<div style="height: 230px; width: 220px; margin-top: 30px; margin-left: 55px">
-								<a-slider v-model:value="realData.tempValue" :min="0" range :max="100" :marks="marks" vertical />
-							</div>
-							<div style="text-align: center; margin-top: 55px; font-size: 18px; font-weight: bold">椋庣娓╁害</div>
-						</div>
-					</div>
-				</div>
-				<!-- <div class="fault">鏈哄櫒鏁呴殰锛氭満鍣ㄨ矊浼兼湁涓�鐐圭偣鏁呴殰</div>
-				<div class="eqpName">{{ eqp.name }}</div> -->
-			</div>
-		</div>
-	</div>
-</template>
-
-<script setup lang="ts">
-	import { router } from '/@/router'
-	import { onMounted, ref, onUnmounted } from 'vue'
-	import { Progress } from 'ant-design-vue'
-	import * as echarts from 'echarts'
-	import 'echarts-liquidfill'
-	import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index'
-	import { defHttp } from '/@/utils/http/axios'
-	import { queryById } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { useUserStore } from '/@/store/modules/user'
-	const Timer = ref()
-	const marks = ref<Record<number, any>>({
-		0: '0掳C',
-		1: '',
-		2: '',
-		3: '',
-		4: '',
-		5: '',
-		6: '',
-		7: '',
-		8: '',
-		9: '',
-		10: '',
-		11: '',
-		12: '',
-		13: '',
-		14: '',
-		15: '',
-		16: '',
-		17: '',
-		18: '',
-		19: '',
-		20: '',
-		21: '',
-		22: '',
-		23: '',
-		24: '',
-		25: '25掳C',
-		26: '',
-		27: '',
-		28: '',
-		29: '',
-		30: '',
-		31: '',
-		32: '',
-		33: '',
-		34: '',
-		35: '',
-		36: '',
-		37: '',
-		38: '',
-		39: '',
-		40: '',
-		41: '',
-		42: '',
-		43: '',
-		44: '',
-		45: '',
-		46: '',
-		47: '',
-		48: '',
-		49: '',
-		50: '50掳C',
-		51: '',
-		52: '',
-		53: '',
-		54: '',
-		55: '',
-		56: '',
-		57: '',
-		58: '',
-		59: '',
-		60: '',
-		61: '',
-		62: '',
-		63: '',
-		64: '',
-		65: '',
-		66: '',
-		67: '',
-		68: '',
-		69: '',
-		70: '',
-		71: '',
-		72: '',
-		73: '',
-		74: '',
-		75: '75掳C',
-		76: '',
-		77: '',
-		78: '',
-		79: '',
-		80: '',
-		81: '',
-		82: '',
-		83: '',
-		84: '',
-		85: '',
-		86: '',
-		87: '',
-		88: '',
-		89: '',
-		90: '',
-		91: '',
-		92: '',
-		93: '',
-		94: '',
-		95: '',
-		96: '',
-		97: '',
-		98: '',
-		99: '',
-		100: '100掳C',
-	})
-	const eqp = ref({} as dryEquipment)
-	const userStore = useUserStore()
-	const realData = ref({})
-	realData.value.tempValue = [0, 100]
-	realData.value.mois = [0, 0, 0]
-	var moisChart: echarts.ECharts
-	var waterChart: echarts.ECharts
-	var weightChart: echarts.ECharts
-	function initCharts() {
-		let domId = 'moisChart'
-		let chartDom: HTMLElement = document.getElementById(domId) as HTMLElement
-		let waterDom: HTMLElement = document.getElementById('moisture') as HTMLElement
-		let weightDom: HTMLElement = document.getElementById('weight') as HTMLElement
-		moisChart = echarts.init(chartDom)
-		waterChart = echarts.init(waterDom)
-		weightChart = echarts.init(weightDom)
-
-		const option = {
-			color: ['#2C4D90', '#CE0000'],
-			title: {
-				text: '鍚按鐜囨俯搴﹁秼鍔�',
-			},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				left: 30,
-				right: 35,
-				top: 50,
-				bottom: 30,
-			},
-			legend: {
-				right: 20,
-			},
-			// toolbox: {
-			// 	show: true,
-			// 	feature: {
-			// 		dataZoom: {
-			// 			yAxisIndex: 'none',
-			// 		},
-			// 		dataView: { readOnly: false },
-			// 		magicType: { type: ['line', 'bar'] },
-			// 		restore: {},
-			// 		saveAsImage: {},
-			// 	},
-			// },
-			xAxis: {
-				type: 'value',
-				//boundaryGap: false,
-				// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
-			},
-			yAxis: {
-				type: 'value',
-			},
-			// yAxis: {
-			// 	type: 'value',
-			// 	axisLabel: {
-			// 		formatter: '{value} 掳C',
-			// 	},
-			// },
-			series: [
-				{
-					name: '鍚按鐜�',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 1],
-						[2, 2],
-					],
-					markLine: {
-						data: [{ type: 'average', name: 'Avg' }],
-					},
-				},
-				{
-					name: '娓╁害',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 10],
-						[2, 20],
-					],
-					// markLine: {
-					// 	data: [
-					// 		{ type: 'average', name: 'Avg' },
-					// 		[
-					// 			{
-					// 				symbol: 'none',
-					// 				x: '90%',
-					// 				yAxis: 'max',
-					// 			},
-					// 			{
-					// 				symbol: 'circle',
-					// 				label: {
-					// 					position: 'start',
-					// 					formatter: 'Max',
-					// 				},
-					// 				type: 'max',
-					// 				name: '鏈�楂樼偣',
-					// 			},
-					// 		],
-					// 	],
-					// },
-				},
-			],
-		}
-		const waterOption = {
-			series: [
-				{
-					type: 'liquidFill',
-					radius: '100%',
-					//waveAnimation: false,
-					amplitude: 3,
-					animationDuration: 5,
-					//animationDurationUpdate: 0,
-					data: realData.value.mois,
-					shape:
-						'path://M828.817,706.209C828.817,881.725,686.98,1024,512,1024c-174.98,0-316.817-142.275-316.817-317.791C195.183,530.74,512,0,512,0s316.817,530.74,316.817,706.209z',
-					outline: {
-						show: false,
-					},
-					label: {
-						// formatter: function () {
-						// 	//console.log(`output->params`,params,mois.value)
-
-						// 	return (
-						// 		'' +
-						// 		// +'鍒濆'+(mois.value[0]*100).toFixed(2) + '%\n\n\n'
-						// 		(mois.value[1] * 100).toFixed(2) +
-						// 		'%'
-						// 		// + '\n\n\n鐩爣'+(mois.value[2]*100).toFixed(2) + '%'
-						// 	)
-						// },
-						fontSize: 18,
-						//position: ['50%',(100-mois.value[1]*100).toFixed(2) + '%'],
-					},
-				},
-			],
-		}
-
-		const weightOption = {
-			// 		title: {
-			//   text: 'Referer of a Website',
-			//   subtext: 'Fake Data',
-			//   left: 'center'
-			// },
-			color: ['#1595EA', '#2C4D90', '#FF7F7F'],
-			tooltip: {
-				trigger: 'item',
-			},
-			radius: [0, '85%'],
-			// grid: {
-			// 	top: 20,
-			// 	left: 20,
-			// 	right: 20,
-			// 	bottom: 20,
-			// },
-			// legend: {
-			// 	orient: 'vertical',
-			// 	left: 'left',
-			// },
-			series: [
-				{
-					name: '閲嶉噺鏁版嵁',
-					type: 'pie',
-					radius: '50%',
-					data: [
-						{ value: 1048, name: '鍓╀綑閲嶉噺' },
-						{ value: 735, name: '鐑樺幓閲嶉噺' },
-					],
-					label: {
-						show: false,
-					},
-					labelLine: {
-						show: false,
-					},
-					emphasis: {
-						itemStyle: {
-							shadowBlur: 10,
-							shadowOffsetX: 0,
-							shadowColor: 'rgba(0, 0, 0, 0.5)',
-						},
-					},
-				},
-			],
-		}
-
-		option && moisChart.setOption(option)
-		waterOption && waterChart.setOption(waterOption)
-		weightOption && weightChart.setOption(weightOption)
-	}
-
-	function queryEqp() {
-		queryById({ id: router.currentRoute.value.params.id }).then((res) => {
-			// console.log(`output->res`, res)
-			eqp.value = res
-			queryRealTime()
-			setTimeout(initCharts, 500)
-		})
-	}
-
-	function queryRealTime() {
-		let tenantId = userStore.getTenant
-		let eqpCode = eqp.value.code
-		let queryRealTimeUrl = '/dry/real/getRealTimeData'
-		defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-			console.log(`output->res`, res)
-			if (res && res.trendVo) {
-				res.tempValue = [res.windTemp, 100]
-				res.percent = ((res.dryTime / res.et) * 100).toFixed(2)
-				res.mois = [(res.initial / 100).toFixed(2), (res.trendVo.moisture / 100).toFixed(2), (res.target / 100).toFixed(2)]
-
-				if (waterChart) {
-					waterChart.setOption({
-						series: [
-							{
-								data: res.mois,
-								label: {
-									formatter: function () {
-										return res.trendVo.moisture + '%'
-									},
-									fontSize: 10,
-								},
-							},
-						],
-					})
-				}
-
-				if (weightChart) {
-					weightChart.setOption({})
-				}
-				if (res && res.detailList) {
-					res.moisList = []
-					res.detailList.forEach((item) => {
-						res.moisList.push([item.totalTime, item.moisture])
-					})
-					// for (var i = res.detailList.length - 1; i > 0; i--) {
-					// 	console.log(`output->res.detailList[i]`, res.detailList[i])
-					// 	res.moisList.push([res.detailList[i].totalTime, res.detailList[i].moisture])
-					// }
-					console.log(`output->res.moisList` + JSON.stringify(res.moisList))
-				}
-
-				if (res && res.bellowsTemp) {
-					// let map = new Map(Object.entries(res.bellowsTemp))
-					// console.log(`output->map`, map)
-					Array.from(Object.entries(res.bellowsTemp))
-					var arr = Object.keys(res.bellowsTemp)
-					var temArr = []
-					arr.forEach((item) => {
-						temArr.push([item * 1, res.bellowsTemp[item]])
-					})
-
-					console.log(`output->arr` + JSON.stringify(temArr))
-					res.tempArr = temArr
-				}
-
-				if (moisChart) {
-					console.log(`output->鏇存柊chart`)
-					moisChart.setOption({
-						series: [
-							{
-								data: res.moisList,
-								markLine: {
-									symbol: 'none',
-									data: [
-										{
-											name: '鐩爣',
-											yAxis: res.target,
-										},
-									],
-									label: {
-										formatter: '{b}\n{c}%',
-									},
-								},
-							},
-							{
-								data: res.tempArr,
-							},
-						],
-					})
-				}
-			} else {
-				res = {
-					tempValue: [0, 100],
-					percent: 0,
-					mois: [],
-				}
-			}
-			realData.value = res
-		})
-	}
-
-	queryEqp()
-	// DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛�
-	onMounted(() => {
-		Timer.value = setInterval(queryRealTime, 3000)
-	})
-
-	onUnmounted(() => {
-		clearInterval(Timer.value)
-		Timer.value = null
-	})
-</script>
-
-<style scoped>
-	.eqpBox {
-		height: 100%;
-	}
-	.eqpRow {
-	}
-	.eqpImage {
-		height: 850px;
-		width: 1700px;
-		background-image: url(/src/assets/images/dry/ganzaoji-z.png);
-		background-repeat: no-repeat;
-
-		background-position: 200px 235px;
-		/* background-color: red; */
-
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-	}
-	.topLeft {
-		margin: 20px 40px 60px 20px;
-		padding: 15px;
-		background: white;
-		border-radius: 10px;
-		height: 325px;
-		width: 440px;
-		background-image: url(/src/assets/images/dry/yaocai.jpg);
-		background-repeat: no-repeat;
-		background-size: 164px 132px;
-		background-position: 239px 65px;
-	}
-	.topMid {
-		margin: 20px 20px 60px 40px;
-		background: white;
-		border-radius: 10px;
-		background-image: url(/src/assets/images/dry/fanliao.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 400px;
-		width: 400px;
-
-		padding: 20px;
-	}
-	.topRight {
-		margin: 20px 20px 60px 20px;
-		background: white;
-		border-radius: 10px;
-		width: 700px;
-		padding: 20px;
-	}
-	.midLeft {
-		height: 450px;
-		width: 600px;
-		display: flex;
-		padding: 0 20px 20px 20px;
-	}
-	.midMid {
-		width: 500px;
-		padding-top: 50px;
-	}
-
-	.midRight {
-		background-image: url(/src/assets/images/dry/fengjixz.gif);
-		background-repeat: no-repeat;
-		background-position: 150px 260px;
-		background-size: 120px 120px;
-		width: 600px;
-	}
-
-	.shangJianTou {
-		margin-left: 140px;
-		width: 70px;
-		height: 100px;
-		background-image: url(/src/assets/images/dry/shangjiantoutou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 70px 100px;
-	}
-
-	.zoujiantou {
-		margin-left: 225px;
-		margin-top: 30px;
-		width: 100px;
-		height: 70px;
-		background-image: url(/src/assets/images/dry/zuojiantou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 100px 70px;
-	}
-	.fault {
-		padding: 10px;
-		height: 60px;
-		font-size: 26px;
-		width: 100%;
-		text-align: right;
-		color: red;
-	}
-	.eqpName {
-		padding: 20px;
-		font-size: 18px;
-		font-weight: bold;
-		height: 40px;
-		width: 236px;
-	}
-
-	.eqpInfoText {
-		font-size: 18px;
-		font-weight: bold;
-	}
-
-	.eqpStatus {
-		height: 200px;
-
-		/* background-image: url(/src/assets/images/dry/fengjixz.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 100px 70px; */
-	}
-	:deep() .ant-slider-mark-text {
-		padding-left: 15px;
-		font-size: 10px;
-	}
-	:deep() .ant-slider-mark-text::before {
-		content: '';
-		display: block;
-		width: 6px;
-		height: 1px;
-		background-color: #1890ff;
-
-		position: absolute;
-		top: 10px;
-		left: 0px;
-	}
-	:deep() .ant-slider-rail {
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-		background: linear-gradient(to top, #ce0000 0%, #ce0000 40%, #ce0000 75%, rgb(160, 160, 160) 100%);
-	}
-	:deep() .ant-slider-track {
-		background: rgb(216, 216, 216);
-
-		height: 20px;
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-	}
-	:deep() .ant-slider-track:hover {
-	}
-	:deep() .ant-slider-handle {
-		display: none;
-	}
-	:deep() .ant-slider-dot {
-		display: none;
-	}
-	:deep() .ant-slider-step {
-		width: 10px !important;
-	}
-	:deep() .ant-slider-step > :first-child {
-		display: block !important;
-		width: 30px !important;
-		height: 30px !important;
-		bottom: -26px !important;
-		left: -6px;
-		border: none;
-		background: #ce0000;
-	}
-	:deep() .progress {
-		padding: 25px 25px;
-
-		width: 360px;
-		display: flex;
-	}
-	:deep() .ant-progress-bg {
-		height: 25px !important;
-	}
-	.outDiv {
-		display: flex;
-		justify-content: center;
-	}
-	.blingbling {
-		-webkit-animation: scaleout 1.5s infinite ease-in-out;
-		animation: scaleout 1.5s infinite ease-in-out;
-	}
-
-	@-webkit-keyframes scaleout {
-		0% {
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-
-	@keyframes scaleout {
-		0% {
-			transform: scale(1);
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			transform: scale(1.1);
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-</style>
diff --git a/src/views/dry/monitor/Eqp2.vue b/src/views/dry/monitor/Eqp2.vue
deleted file mode 100644
index cf94fde..0000000
--- a/src/views/dry/monitor/Eqp2.vue
+++ /dev/null
@@ -1,1788 +0,0 @@
-<template>
-	<div class="eqpBox">
-		<div class="eqpRow">
-			<div class="eqpImage">
-				<div class="leftEqp">
-					<div class="leftTop">
-						<div class="leftTop1">
-							<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-							<div>
-								<div class="mainInfo">{{ realData?.remain | 0 }}min</div>
-								<div class="subhead">鍓╀綑鏃堕棿</div>
-							</div>
-						</div>
-						<div class="leftTop1">
-							<!-- <Icon icon="mdi:chart-finance" :size="50" />
-							<div>
-								<div class="mainInfo">98 %</div>
-								<div class="subhead">骞茬嚗鏁堢巼</div>
-							</div> -->
-						</div>
-						<div class="leftTop3" :style="{ 'background-image': 'url(/src/assets/images/dry/' + realData?.gif + '.gif)' }"></div>
-						<div class="outDiv eqpStatus">
-							<div
-								style="
-									font-size: 28px;
-									margin-top: 60px;
-									color: white;
-									background-color: #1595ea;
-									height: 60px;
-									width: 180px;
-									line-height: 60px;
-									text-align: center;
-									border-radius: 5px;
-									font-weight: bold;
-								"
-							>
-								姝e湪骞茬嚗
-							</div>
-							<!-- <div
-								class="eqpInfoText blingbling"
-								style="
-									position: absolute;
-
-									max-height: 130px;
-									max-width: 360px;
-									border-radius: 10px;
-									background-color: #ce0000;
-									color: white;
-									padding: 10px;
-								"
-							>
-								<div class="outDiv">
-									<div><Icon icon="bx:error" :size="30" /> </div>
-									<div><span> 鏈変竴涓晠闅滐紝璇锋鏌ユ満鍣ㄣ��</span></div>
-								</div>
-							</div> -->
-						</div>
-					</div>
-					<div class="leftMid">
-						<div id="efficiencyLine" style="width: 780px; height: 150px"></div>
-						<div style="height: 0px; display: flex; width: 780px; padding: 0 60px; justify-content: space-between">
-							<div style="width: 100px; height: 20px">0 min</div>
-							<div style="width: 100px; height: 20px; text-align: right">{{ realData?.totalTime | 0 }} min</div>
-						</div>
-						<div id="progressBar" style="width: 780px; height: 80px"></div>
-					</div>
-					<!-- <div class="outDiv">
-						<div style="height: 100px; width: 400px">
-							<Progress
-								:stroke-color="{
-									from: '#108ee9',
-									to: '#87d068',
-								}"
-								:percent="realData?.percent"
-								status="active"
-								:show-info="false"
-							/>
-							<div style="padding-top: 10px; display: flex; justify-content: space-between; font-weight: bold">
-								<span>骞茬嚗 52 Min</span>
-								<span>棰勮 120 Min</span>
-							</div>
-						</div>
-					</div> -->
-				</div>
-				<div class="rightInfo">
-					<div class="rightTop">
-						<div class="herbInfo">
-							<div class="curEqp">
-								<div class="eqpName">
-									<div class="mainInfo" style="font-size: 26px">{{ eqp.name }}</div>
-									<div class="subhead">{{ eqp.type }}</div>
-									<!-- 璁惧锛歿{ eqp.name }}</div>
-								<div class="eqpName">鍨嬪彿锛歿{ eqp.type }}</div> -->
-								</div>
-							</div>
-							<div class="curHerb">
-								<div class="eqpName" style="margin-left: 100px">
-									<div class="mainInfo" style="font-size: 26px">{{ realData?.herbName }}</div>
-									<div class="subhead">骞茬嚗閰嶆柟</div>
-								</div>
-								<div class="formula">
-									<div class="formulaItem">
-										<Icon icon="icon-park-twotone:box" :size="35" />
-										<div>
-											<div class="mainInfo2">{{ realData?.feed }}绛�</div>
-											<div class="subhead2">鎶曟枡閲�</div>
-										</div>
-									</div>
-									<div class="formulaItem">
-										<Icon icon="bx:wind" :size="35" />
-										<div>
-											<div class="mainInfo2">{{ realData?.windTemp }}掳C</div>
-											<div class="subhead2">鐑</div>
-										</div>
-									</div>
-									<div class="formulaItem">
-										<Icon icon="tabler:target-arrow" :size="35" />
-										<div>
-											<div class="mainInfo2">{{ realData?.target }}%</div>
-											<div class="subhead2">鐩爣</div>
-										</div>
-									</div>
-								</div>
-								<!-- <div class="eqpName">{{ realData?.herbName }}</div>
-								<div class="eqpName">{{ realData?.feed }} 绛�</div> -->
-							</div>
-						</div>
-						<div class="tempMoisChart">
-							<div :id="'moisChart'" style="width: 550px; height: 320px"></div>
-						</div>
-					</div>
-					<div class="rightTwo">
-						<div class="infoChart">
-							<div class="chartTittle">鍚按鐜�</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 50%">
-										<div class="centerText">
-											<div class="mainInfo3"
-												><span>{{ realData?.target }}</span
-												>%
-											</div>
-											<div class="subhead2">鐩爣鍚按鐜�</div>
-										</div>
-									</div>
-									<div class="center" style="height: 50%">
-										<div>
-											<div class="mainInfo3"
-												><span>{{ realData?.initial }}</span
-												>%</div
-											>
-											<div class="subhead2">鏉ユ枡鍚按鐜�</div>
-										</div>
-									</div>
-								</div>
-								<div id="moisture" style="width: 170px; height: 133px"></div>
-							</div>
-							<div class="subhead2" style="margin-top: -37px; padding-left: 172px">瀹炴椂鍚按鐜�</div>
-						</div>
-						<div class="infoChart">
-							<div class="chartTittle">椋庣娓╁害</div>
-							<div class="outDiv">
-								<div id="bellowsTemp" style="width: 220px; height: 200px">
-									<Icon icon="emojione:hourglass-with-flowing-sand" :size="50" />
-								</div>
-							</div>
-						</div>
-						<div class="infoChart">
-							<div class="chartTittle">椋庢満棰戠巼</div>
-							<div class="outDiv" style="padding-top: 10px">
-								<div id="fanFreq" style="width: 220px; height: 200px"></div>
-							</div>
-						</div>
-						<div class="infoChart">
-							<div class="chartTittle">
-								骞茬嚗鏁堢巼(kg/h)
-								<div class="rightLabel">
-									<div class="label good">&gt;{{ standard.xiaolv }} 浼� </div>
-									<div class="label bad">&lt;{{ standard.xlMin }} 宸�</div>
-								</div>
-							</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 50%">
-										<div class="centerText">
-											<div class="mainInfo3"
-												><span>{{ (realData?.originWeight - realData?.yield) | 0 }}</span
-												>kg
-											</div>
-											<div class="subhead2">姘村垎钂稿彂</div>
-										</div>
-									</div>
-									<div class="center" style="height: 50%">
-										<div>
-											<div class="mainInfo3">{{ realData?.dryTime | 0 }}min</div>
-											<div class="subhead2">骞茬嚗鐢ㄦ椂</div>
-										</div>
-									</div>
-								</div>
-								<div class="rightChart center">
-									<div class="center compareBar">
-										<div class="barTop">{{ standard.xiaolv }}</div>
-										<div class="barBack">
-											<div class="barDiv" :style="{ height: realData?.xlsHeight }"></div>
-										</div>
-										<div style="line-height: 18px">
-											棰濆畾
-											<br />
-											鏁堢巼
-										</div>
-									</div>
-									<div class="center compareBar">
-										<div class="barTop">{{ realData?.xiaolv | 0 }}</div>
-										<div class="barBack">
-											<div
-												class="barDiv"
-												:class="{ good: realData?.xlgood, bad: realData?.xlbad }"
-												:style="[realData?.xlrHeight && { height: realData?.xlrHeight }]"
-											>
-											</div>
-										</div>
-										<div style="line-height: 18px">
-											瀹炴椂
-											<br />
-											鏁堢巼
-										</div>
-									</div>
-								</div>
-							</div>
-						</div>
-						<div class="infoChart">
-							<div class="chartTittle"
-								>钂告苯娑堣��(m鲁/kg)
-								<div class="rightLabel">
-									<div class="label bad">&gt;{{ standard.zhengqi }} 宸�</div>
-									<div class="label good">&lt;{{ standard.zqMin }} 浼�</div>
-								</div>
-							</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 100%">
-										<div class="centerText">
-											<div class="mainInfo3"><span>{{realData?.steam}}</span>m鲁 </div>
-											<div class="subhead2">钂告苯鐢ㄩ噺</div>
-										</div>
-									</div>
-								</div>
-								<div class="rightChart center">
-									<div class="center compareBar">
-										<div class="barTop">{{standard.zhengqi}}</div>
-										<div class="barBack">
-											<div class="barDiv" :style="{ height: realData?.zqsHeight }"></div>
-										</div>
-										<div style="line-height: 18px">
-											棰濆畾
-											<br />
-											娑堣��
-										</div>
-									</div>
-									<div class="center compareBar">
-										<div class="barTop">{{realData?.zhengqi | 0 }}</div>
-										<div class="barBack">
-											<div class="barDiv" :class="{ good: realData?.zqgood, bad: realData?.zqbad }"
-												:style="[realData?.zqrHeight && { height: realData?.zqrHeight }]"> </div>
-										</div>
-										<div style="line-height: 18px">
-											瀹炴椂
-											<br />
-											娑堣��
-										</div>
-									</div>
-								</div>
-							</div>
-						</div>
-						<div class="infoChart">
-							<div class="chartTittle">
-								<div> 鐢佃兘娑堣��(kw/h/kg)</div>
-								<div class="rightLabel">
-									<div class="label bad">&gt;{{ standard.dian }} 宸�</div>
-									<div class="label good">&lt;{{ standard.dMin }} 浼�</div>
-								</div>
-							</div>
-							<div class="outDiv" style="padding-top: 20px">
-								<div class="leftData">
-									<div class="center" style="height: 100%">
-										<div class="centerText">
-											<div class="mainInfo3"><span>{{realData?.watt}}</span>kw/h </div>
-											<div class="subhead2">鐢佃兘鐢ㄩ噺</div>
-										</div>
-									</div>
-								</div>
-								<div class="rightChart center">
-									<div class="center compareBar">
-										<div class="barTop">{{standard.dian}}</div>
-										<div class="barBack">
-											<div class="barDiv" :style="{ height: realData?.dnsHeight }"></div>
-										</div>
-										<div style="line-height: 18px">
-											棰濆畾
-											<br />
-											娑堣��
-										</div>
-									</div>
-									<div class="center compareBar">
-										<div class="barTop">{{realData?.dian | 0}}</div>
-										<div class="barBack">
-											<div class="barDiv" :class="{ good: realData?.dngood, bad: realData?.dnbad }"
-												:style="[realData?.dnrHeight && { height: realData?.dnrHeight }]"></div>
-										</div>
-										<div style="line-height: 18px">
-											瀹炴椂
-											<br />
-											娑堣��
-										</div>
-									</div>
-								</div>
-							</div>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
-</template>
-
-<script setup lang="ts">
-	import { router } from '/@/router'
-	import { onMounted, ref, onUnmounted } from 'vue'
-	import { Progress } from 'ant-design-vue'
-	import * as echarts from 'echarts'
-	import 'echarts-liquidfill'
-	import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index'
-	import { defHttp } from '/@/utils/http/axios'
-	import { queryById } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { useUserStore } from '/@/store/modules/user'
-	const Timer = ref()
-	const marks = ref<Record<number, any>>({
-		0: '0掳C',
-		1: '',
-		2: '',
-		3: '',
-		4: '',
-		5: '',
-		6: '',
-		7: '',
-		8: '',
-		9: '',
-		10: '',
-		11: '',
-		12: '',
-		13: '',
-		14: '',
-		15: '',
-		16: '',
-		17: '',
-		18: '',
-		19: '',
-		20: '',
-		21: '',
-		22: '',
-		23: '',
-		24: '',
-		25: '25掳C',
-		26: '',
-		27: '',
-		28: '',
-		29: '',
-		30: '',
-		31: '',
-		32: '',
-		33: '',
-		34: '',
-		35: '',
-		36: '',
-		37: '',
-		38: '',
-		39: '',
-		40: '',
-		41: '',
-		42: '',
-		43: '',
-		44: '',
-		45: '',
-		46: '',
-		47: '',
-		48: '',
-		49: '',
-		50: '50掳C',
-		51: '',
-		52: '',
-		53: '',
-		54: '',
-		55: '',
-		56: '',
-		57: '',
-		58: '',
-		59: '',
-		60: '',
-		61: '',
-		62: '',
-		63: '',
-		64: '',
-		65: '',
-		66: '',
-		67: '',
-		68: '',
-		69: '',
-		70: '',
-		71: '',
-		72: '',
-		73: '',
-		74: '',
-		75: '75掳C',
-		76: '',
-		77: '',
-		78: '',
-		79: '',
-		80: '',
-		81: '',
-		82: '',
-		83: '',
-		84: '',
-		85: '',
-		86: '',
-		87: '',
-		88: '',
-		89: '',
-		90: '',
-		91: '',
-		92: '',
-		93: '',
-		94: '',
-		95: '',
-		96: '',
-		97: '',
-		98: '',
-		99: '',
-		100: '100掳C',
-	})
-	const eqp = ref({} as dryEquipment)
-	const userStore = useUserStore()
-	const realData = ref({})
-	const standard = ref({
-		xiaolv: 220,
-		xlMin: 200,
-		zhengqi: 50,
-		zqMin: 45,
-		dian: 8,
-		dMin: 7.5,
-	})
-	//realData.value.tempValue = [0, 100]
-	realData.value.mois = [0.5, 0.35, 0.2]
-	var moisChart: echarts.ECharts
-	var waterChart: echarts.ECharts
-
-	var bellowsTempChart: echarts.ECharts
-	var fanFreqChart: echarts.ECharts
-	var progressBarChart: echarts.ECharts
-	var efficiencyLineChart: echarts.ECharts
-
-	function initCharts() {
-		let domId = 'moisChart'
-		let chartDom: HTMLElement = document.getElementById(domId) as HTMLElement
-		let waterDom: HTMLElement = document.getElementById('moisture') as HTMLElement
-		let bellowsTempDom: HTMLElement = document.getElementById('bellowsTemp') as HTMLElement
-		let fanFreqDom: HTMLElement = document.getElementById('fanFreq') as HTMLElement
-		let progressBarDom: HTMLElement = document.getElementById('progressBar') as HTMLElement
-		let efficiencyLineDom: HTMLElement = document.getElementById('efficiencyLine') as HTMLElement
-		// let weightDom: HTMLElement = document.getElementById('weight') as HTMLElement
-		moisChart = echarts.init(chartDom)
-		waterChart = echarts.init(waterDom)
-		bellowsTempChart = echarts.init(bellowsTempDom)
-		fanFreqChart = echarts.init(fanFreqDom)
-		progressBarChart = echarts.init(progressBarDom)
-		efficiencyLineChart = echarts.init(efficiencyLineDom)
-
-		const option = {
-			color: ['#2C4D90', '#CE0000'],
-			title: {
-				text: '鍚按鐜囨俯搴﹁秼鍔�',
-			},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				left: 50,
-				right: 50,
-				top: 50,
-				bottom: 40,
-			},
-			legend: {
-				right: 20,
-			},
-			// toolbox: {
-			// 	show: true,
-			// 	feature: {
-			// 		dataZoom: {
-			// 			yAxisIndex: 'none',
-			// 		},
-			// 		dataView: { readOnly: false },
-			// 		magicType: { type: ['line', 'bar'] },
-			// 		restore: {},
-			// 		saveAsImage: {},
-			// 	},
-			// },
-			xAxis: {
-				type: 'value',
-				//boundaryGap: false,
-				// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
-				min: 0,
-				max: function (value) {
-					if (value.max < 100) {
-						return 100
-					} else {
-						return value.max
-					}
-				},
-			},
-			yAxis: {
-				type: 'value',
-				boundaryGap: ['10%', '10%'],
-				// min: 0,
-				// max: function (value) {
-				// 	if (value.max < 100) {
-				// 		return 100
-				// 	} else {
-				// 		return value.max
-				// 	}
-				// },
-			},
-			// yAxis: {
-			// 	type: 'value',
-			// 	axisLabel: {
-			// 		formatter: '{value} 掳C',
-			// 	},
-			// },
-			series: [
-				{
-					name: '鍚按鐜�',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 1],
-						[2, 2],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					markLine: {
-						data: [{ type: 'average', name: 'Avg' }],
-					},
-				},
-				{
-					name: '娓╁害',
-					type: 'line',
-					smooth: true,
-					symbol: 'none',
-					data: [
-						[1, 10],
-						[2, 20],
-					],
-					lineStyle: {
-						width: 1,
-					},
-					// markLine: {
-					// 	data: [
-					// 		{ type: 'average', name: 'Avg' },
-					// 		[
-					// 			{
-					// 				symbol: 'none',
-					// 				x: '90%',
-					// 				yAxis: 'max',
-					// 			},
-					// 			{
-					// 				symbol: 'circle',
-					// 				label: {
-					// 					position: 'start',
-					// 					formatter: 'Max',
-					// 				},
-					// 				type: 'max',
-					// 				name: '鏈�楂樼偣',
-					// 			},
-					// 		],
-					// 	],
-					// },
-				},
-			],
-		}
-		const waterOption = {
-			series: [
-				{
-					type: 'liquidFill',
-					radius: '100%',
-					//waveAnimation: false,
-					amplitude: 3,
-					animationDuration: 5,
-					//animationDurationUpdate: 0,
-					data: [0.56,0.44,0.32],
-					shape:
-						'path://M828.817,706.209C828.817,881.725,686.98,1024,512,1024c-174.98,0-316.817-142.275-316.817-317.791C195.183,530.74,512,0,512,0s316.817,530.74,316.817,706.209z',
-					outline: {
-						show: false,
-					},
-					label: {
-						// formatter: function () {
-						// 	//console.log(`output->params`,params,mois.value)
-
-						// 	return (
-						// 		'' +
-						// 		// +'鍒濆'+(mois.value[0]*100).toFixed(2) + '%\n\n\n'
-						// 		(mois.value[1] * 100).toFixed(2) +
-						// 		'%'
-						// 		// + '\n\n\n鐩爣'+(mois.value[2]*100).toFixed(2) + '%'
-						// 	)
-						// },
-						fontSize: 20,
-						//position: ['50%',(100-mois.value[1]*100).toFixed(2) + '%'],
-					},
-				},
-			],
-		}
-
-		const bellowsOption = {
-			series: [
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					splitNumber: 8,
-					itemStyle: {
-						color: '#FFAB91',
-					},
-					progress: {
-						show: true,
-						width: 10,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						lineStyle: {
-							width: 10,
-						},
-					},
-					axisTick: {
-						distance: -15,
-						splitNumber: 5,
-						length: 3,
-						lineStyle: {
-							width: 1,
-							color: '#999',
-						},
-					},
-					splitLine: {
-						distance: -18,
-						length: 6,
-						lineStyle: {
-							width: 2,
-							color: '#999',
-						},
-					},
-					axisLabel: {
-						distance: -13,
-						color: '#999',
-						fontSize: 9,
-					},
-					anchor: {
-						show: false,
-					},
-					title: {
-						show: false,
-					},
-					detail: {
-						valueAnimation: true,
-						width: '60%',
-						lineHeight: 40,
-						borderRadius: 8,
-						offsetCenter: [0, '0%'],
-						fontSize: 20,
-						fontWeight: 'bolder',
-						formatter: '{value}掳C',
-						color: 'inherit',
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-				{
-					type: 'gauge',
-					center: ['50%', '60%'],
-					startAngle: 215,
-					endAngle: -35,
-					min: 0,
-					max: 80,
-					itemStyle: {
-						color: '#FD7347',
-					},
-					progress: {
-						show: true,
-						width: 3,
-					},
-					pointer: {
-						show: false,
-					},
-					axisLine: {
-						show: false,
-					},
-					axisTick: {
-						show: false,
-					},
-					splitLine: {
-						show: false,
-					},
-					axisLabel: {
-						show: false,
-					},
-					detail: {
-						show: false,
-					},
-					data: [
-						{
-							value: 20,
-						},
-					],
-				},
-			],
-		}
-
-		const fanFreqOption = {
-			series: [
-				{
-					type: 'gauge',
-					progress: {
-						show: true,
-						width: 9,
-					},
-					axisLine: {
-						lineStyle: {
-							width: 9,
-						},
-					},
-					axisTick: {
-						show: false,
-					},
-					splitLine: {
-						distance: 3,
-						length: 4,
-						lineStyle: {
-							width: 1,
-							color: '#999',
-						},
-					},
-					axisLabel: {
-						distance: 15,
-						color: '#999',
-						fontSize: 10,
-					},
-					anchor: {
-						show: true,
-						showAbove: true,
-						size: 10,
-						itemStyle: {
-							borderWidth: 3,
-						},
-					},
-					title: {
-						show: false,
-					},
-					detail: {
-						valueAnimation: true,
-						fontSize: 20,
-						offsetCenter: [0, '70%'],
-						formatter: '{value}Hz',
-					},
-					data: [
-						{
-							value: 56,
-						},
-					],
-				},
-			],
-		}
-		// const weightOption = {
-		// 	// 		title: {
-		// 	//   text: 'Referer of a Website',
-		// 	//   subtext: 'Fake Data',
-		// 	//   left: 'center'
-		// 	// },
-		// 	color: ['#1595EA', '#2C4D90', '#FF7F7F'],
-		// 	tooltip: {
-		// 		trigger: 'item',
-		// 	},
-		// 	radius: [0, '85%'],
-		// 	// grid: {
-		// 	// 	top: 20,
-		// 	// 	left: 20,
-		// 	// 	right: 20,
-		// 	// 	bottom: 20,
-		// 	// },
-		// 	// legend: {
-		// 	// 	orient: 'vertical',
-		// 	// 	left: 'left',
-		// 	// },
-		// 	series: [
-		// 		{
-		// 			name: '閲嶉噺鏁版嵁',
-		// 			type: 'pie',
-		// 			radius: '50%',
-		// 			data: [
-		// 				{ value: 1048, name: '鍓╀綑閲嶉噺' },
-		// 				{ value: 735, name: '鐑樺幓閲嶉噺' },
-		// 			],
-		// 			label: {
-		// 				show: false,
-		// 			},
-		// 			labelLine: {
-		// 				show: false,
-		// 			},
-		// 			emphasis: {
-		// 				itemStyle: {
-		// 					shadowBlur: 10,
-		// 					shadowOffsetX: 0,
-		// 					shadowColor: 'rgba(0, 0, 0, 0.5)',
-		// 				},
-		// 			},
-		// 		},
-		// 	],
-		// }
-
-		const progressBarOption = {
-			// tooltip: {
-			// 	trigger: 'axis',
-			// 	axisPointer: {
-			// 		// Use axis to trigger tooltip
-			// 		type: 'shadow', // 'shadow' as default; can also be 'line' or 'shadow'
-			// 	},
-			// },
-			// color: [
-			// 	'#0653F6',
-			// 	// '#1B61E7',
-			// 	'#3673D5',
-			// 	// '#4A80C8',
-			// 	'#608FB8',
-			// 	// '#719BAD',
-			// 	'#82A6A1',
-			// 	// '#8DAD9A',
-			// 	'#9CB790',
-			// 	// '#A7BE88',
-			// 	'#B3C681',
-			// 	'#CAD671',
-			// 	'#DBE165',
-			// ],
-			animation: false, // 鍏抽棴鍔ㄧ敾
-			color: ['#397FD7', '#2D8CDE', '#239CE5', '#1DA4E8', '#14B2EF', '#0BC4FA', '#02D2FF', '#19EEFF', '#33FAFF', '#5EFFF8'],
-			grid: {
-				top: '12%',
-				left: '20',
-				right: '55',
-				bottom: '3%',
-				containLabel: true,
-			},
-			xAxis: {
-				min: 0,
-				max: 150,
-				show: false,
-				type: 'value',
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-			},
-			yAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'category',
-				data: ['鏃堕棿'],
-			},
-			series: [
-				// {
-				// 	name: '绗竴闃舵',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	barWidth: 26,
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [30],
-				// },
-				// {
-				// 	name: '绗簩闃舵',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [30],
-				// },
-				// {
-				// 	name: 'Affiliate Ad',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [20],
-				// },
-				// {
-				// 	name: 'Video Ad',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [15],
-				// },
-				// {
-				// 	name: 'Search Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [10],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [5],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [5],
-				// },
-				// {
-				// 	name: 'df Engine',
-				// 	type: 'bar',
-				// 	stack: 'total',
-				// 	label: {
-				// 		show: true,
-				// 	},
-				// 	emphasis: {
-				// 		focus: 'series',
-				// 	},
-				// 	data: [
-				// 		{
-				// 			value: 35,
-				// 			itemStyle: {
-				// 				color: '#c0c0c0',
-				// 			},
-				// 		},
-				// 	],
-				// },
-			],
-		}
-
-		const efficiencyLineOption = {
-			title: {},
-			tooltip: {
-				trigger: 'axis',
-			},
-			grid: {
-				top: '20%',
-				left: '17',
-				right: '57',
-				bottom: '0%',
-				containLabel: true,
-			},
-			legend: {},
-			xAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'value',
-				min: 0,
-				max: 150,
-				// data: [15, 15, 10, 7.5, 5, 2.5, 2.5, 1],
-			},
-			yAxis: {
-				show: false,
-				axisLine: {
-					show: false,
-				},
-				axisTick: {
-					show: false,
-				},
-				type: 'value',
-				axisLabel: {
-					formatter: '{value} 掳C',
-				},
-			},
-			series: [
-				{
-					name: '骞茬嚗鏁堢巼',
-					type: 'line',
-					lineStyle: {
-						width: 1,
-					},
-					// [[15,10], [15,11], [10,6], [7.5,12], [5,12], [2.5,5], [2.5,9], [1,7]]
-					data: [
-						[0, 1],
-						[15, 10],
-						[45, 11],
-						[70, 6],
-					],
-					markPoint: {
-						data: [
-							{ type: 'max', name: 'Max' },
-							{ type: 'min', name: 'Min' },
-						],
-					},
-					// markLine: {
-					// 	data: [{ type: 'average', name: 'Avg' }],
-					// },
-				},
-			],
-		}
-
-		option && moisChart.setOption(option)
-		waterOption && waterChart.setOption(waterOption)
-		bellowsOption && bellowsTempChart.setOption(bellowsOption)
-		fanFreqOption && fanFreqChart.setOption(fanFreqOption)
-
-		progressBarOption && progressBarChart.setOption(progressBarOption)
-		efficiencyLineOption && efficiencyLineChart.setOption(efficiencyLineOption)
-	}
-
-	function queryEqp() {
-		queryById({ id: router.currentRoute.value.params.id }).then((res) => {
-			// console.log(`output->res`, res)
-			eqp.value = res
-			queryRealTime()
-			setTimeout(initCharts, 500)
-		})
-	}
-
-	function queryRealTime() {
-		let tenantId = userStore.getTenant
-		let eqpCode = eqp.value.code
-		let queryRealTimeUrl = '/dry/real/getRealTimeData'
-		defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-			
-			if (res && res.trendVo) {
-				console.log(`output->re11s`, res)
-				//	res.tempValue = [res.windTemp, 100]
-				//res.percent = ((res.dryTime / res.et) * 100).toFixed(2)
-				/**姘存淮鍥惧惈姘撮噺 */
-				res.mois = [
-					(res.trendVo.moisture / 100).toFixed(2),
-					(res.trendVo.moisture / 100 / 1.5).toFixed(2),
-					(res.trendVo.moisture / 100 / 3).toFixed(2),
-				]
-				if (waterChart) {
-					waterChart.setOption({
-						series: [
-							{
-								data: res.mois,
-								label: {
-									formatter: function () {
-										return res.trendVo.moisture + '%'
-									},
-									fontSize: 20,
-								},
-							},
-						],
-					})
-				}
-
-				/**娓╁害鐜舰鍥� */
-				if (bellowsTempChart) {
-					bellowsTempChart.setOption({
-						series: [{ data: [{ value: res.windTemp }] }, { data: [{ value: res.windTemp }] }],
-					})
-				}
-				/**椋庢満棰戠巼鐜舰鍥� */
-				if (fanFreqChart) {
-					fanFreqChart.setOption({
-						series: [
-							{
-								data: [
-									{
-										value: res.trendVo.fanFrequency,
-									},
-								],
-							},
-						],
-					})
-				}
-				/**骞茬嚗杩涘害銆佽蛋鍔夸笌闃舵鏁堢巼鍜岄樁娈垫秷鑰� */
-				if (res && res.detailList) {
-					var progressSeries = []
-					var ganZaoXiaoLv = []
-					var zhengQiXiaoHao = []
-					var dianNengXiaoHao = []
-					var totalTime = 0
-					var beforeWeight = 0
-					res.moisList = []
-
-					res.detailList.forEach((item) => {
-						console.log(`output->item`, item)
-						res.moisList.push([item.totalTime, item.moisture])
-						console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime)
-						var curDryTime = item.totalTime - totalTime
-
-						if (curDryTime > 0) {
-							progressSeries.push({
-								name: item.moisture,
-								type: 'bar',
-								stack: 'total',
-								label: {
-									show: true,
-								},
-								emphasis: {
-									focus: 'series',
-								},
-								data: [item.totalTime - totalTime],
-							})
-							ganZaoXiaoLv.push([curDryTime / 2 + totalTime, (((beforeWeight - item.weight) / curDryTime) * 60).toFixed(1)])
-
-							totalTime = item.totalTime
-						}
-						beforeWeight = item.weight
-					})
-					if (res.remain) {
-						if (res.dryTime - totalTime > 0) {
-							progressSeries.push({
-								name: '褰撳墠',
-								type: 'bar',
-								stack: 'total',
-								label: {
-									show: true,
-								},
-								emphasis: {
-									focus: 'series',
-								},
-								data: [
-									{
-										value: res.dryTime - totalTime,
-									},
-								],
-							})
-						}
-
-						progressSeries.push({
-							name: '鍓╀綑',
-							type: 'bar',
-							stack: 'total',
-							label: {
-								show: true,
-							},
-							emphasis: {
-								focus: 'series',
-							},
-							data: [
-								{
-									value: res.remain - (res.dryTime - totalTime),
-									itemStyle: {
-										color: '#c0c0c0',
-									},
-								},
-							],
-						})
-					}
-
-					/**骞茬嚗杩涘害 */
-					if (progressBarChart) {
-						console.log(`output->progressSeries`, progressSeries)
-						progressBarChart.setOption(
-							{
-								xAxis: {
-									max: totalTime + res.remain,
-								},
-								series: progressSeries,
-							},
-							{ replaceMerge: ['series'] }
-						)
-					}
-
-					res.totalTime = totalTime + res.remain
-					/**骞茬嚗鏁堢巼銆佹秷鑰� */
-					if (efficiencyLineChart) {
-						console.log(`output->ganZaoXiaoLv`, ganZaoXiaoLv)
-						efficiencyLineChart.setOption({
-							xAxis: {
-								max: totalTime + res.remain,
-							},
-							series: [{ data: ganZaoXiaoLv }, { data: zhengQiXiaoHao }, { data: dianNengXiaoHao }],
-						})
-					}
-
-					res.moisList.push([res.dryTime, res.trendVo.moisture])
-				}
-
-				/**娓╁害瓒嬪娍 */
-				if (res && res.bellowsTemp) {
-					Array.from(Object.entries(res.bellowsTemp))
-					var arr = Object.keys(res.bellowsTemp)
-					var temArr = []
-					arr.forEach((item) => {
-						temArr.push([item * 1, res.bellowsTemp[item]])
-					})
-
-					//console.log(`output->arr` + JSON.stringify(temArr))
-					res.tempArr = temArr
-				}
-
-				/**骞茬嚗杩囩▼瓒嬪娍 */
-				if (moisChart) {
-					//console.log(`output->鏇存柊chart`)
-					moisChart.setOption({
-						series: [
-							{
-								data: res.moisList,
-								markLine: {
-									symbol: 'none',
-									data: [
-										{
-											name: '鐩爣',
-											yAxis: res.target,
-										},
-									],
-									label: {
-										formatter: '{b}\n{c}%',
-									},
-								},
-							},
-							{
-								data: res.tempArr,
-							},
-						],
-					})
-				}
-
-				/**鏁堢巼瀵规瘮鍥� */
-				res.xiaolv = (((res.originWeight - res.yield) / res.dryTime) * 60).toFixed(2)
-				if (res.xiaolv > standard.value.xiaolv) {
-					res.xlgood = true
-					res.xlsHeight = (standard.value.xiaolv / res.xiaolv) * 100 + '%'
-					res.xlrHeight = '100%'
-				} else if (res.xiaolv < standard.value.xlMin) {
-					res.xlbad = true
-					res.xlsHeight = '100%'
-					res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%'
-				}
-
-				
-				/** 鐢佃兘娑堣�� */
-				res.dian = (res.watt / (res.originWeight - res.yield))
-				if (res.dian > standard.value.dian) {
-					res.dngood = true
-					res.dnsHeight = (standard.value.dian / res.dian) * 100 + '%'
-					res.dnrHeight = '100%'
-				} else if (res.dian < standard.value.dMin) {
-					res.dnbad = true
-					res.dnsHeight = '100%'
-					res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%'
-				}
-
-				/**gif鍔ㄥ浘 */
-				res.gif = 'refeng2'
-			} else {
-				res = {
-					mois: [],
-				}
-			}
-			console.log(`output->res`, res)
-			realData.value = res
-		})
-	}
-
-	queryEqp()
-	// DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛�
-	onMounted(() => {
-		Timer.value = setInterval(queryRealTime, 3000)
-	})
-
-	onUnmounted(() => {
-		clearInterval(Timer.value)
-		Timer.value = null
-	})
-</script>
-
-<style scoped>
-	.eqpBox {
-		height: 100%;
-	}
-	.eqpRow {
-	}
-	.eqpImage {
-		height: 860px;
-		width: 1800px;
-		background-image: url(/src/assets/images/dry/ganzaoji-x.png);
-		background-repeat: no-repeat;
-
-		background-position: 160px 280px;
-		/* background-color: red; */
-		padding: 10px;
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-	}
-
-	.leftEqp {
-		height: 840px;
-		width: 780px;
-		/* background-color: white;
-		background-image: url(/src/assets/images/dry/shebei1.png);
-		background-repeat: no-repeat;
-		background-size: 125%;
-		border-radius: 10px;
-		background-position: -119px 293px; */
-	}
-
-	.leftTop {
-		height: 600px;
-		display: flex;
-		justify-content: center;
-		align-content: flex-start;
-		background-color: white;
-		background-image: url(/src/assets/images/dry/shebei1.png);
-		background-repeat: no-repeat;
-		background-size: 110%;
-		border-radius: 10px;
-		flex-wrap: wrap;
-		background-position: -78px 119px;
-	}
-	.leftMid {
-		padding-top: 10px;
-		width: 780px;
-		height: 230px;
-		/* border: 1px solid; */
-		margin-top: 10px;
-		border-radius: 10px;
-		background: white;
-	}
-	.mainInfo {
-		line-height: 33px;
-		padding-left: 10px;
-		font-size: 30px;
-	}
-	.subhead {
-		color: #a19f9c;
-		font-size: 16px;
-		padding-left: 10px;
-	}
-
-	.mainInfo2 {
-		line-height: 20px;
-		padding-left: 0px;
-		font-size: 16px;
-	}
-	.subhead2 {
-		color: #a19f9c;
-		font-size: 10px;
-		padding-left: 0px;
-	}
-	.zhengqi {
-		height: 180px;
-		width: 200px;
-		background-image: url(/src/assets/images/dry/liuliangji.png);
-		background-repeat: no-repeat;
-		background-size: 160px;
-		/* border-radius: 10px; */
-		background-position: 17px -6px;
-	}
-
-	.liuliangji {
-	}
-	.leftData {
-		height: 180px;
-		width: 120px;
-	}
-	.rightChart {
-		height: 180px;
-		width: 170px;
-		margin-top: -30px;
-	}
-	.leftTop1 {
-		width: 220px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-	}
-	.leftTop2 {
-		width: 250px;
-		height: 200px;
-		text-align: center;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 30px;
-		color: #727272;
-	}
-	.leftTop3 {
-		width: 340px;
-		height: 200px;
-		/* background-image: url(/src/assets/images/dry/fanliao.gif); */
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 300px;
-		border-radius: 50px;
-	}
-
-	.eqpStatus {
-		width: 780px;
-		height: 300px;
-
-		padding: 100px;
-	}
-	.rightInfo {
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-		height: 850px;
-		width: 900px;
-	}
-
-	.rightTop {
-		display: flex;
-		height: 360px;
-		padding-left: 10px;
-	}
-	.rightTwo {
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.infoChart {
-		width: 290px;
-		height: 230px;
-		background: white;
-		margin-left: 10px;
-		margin-top: 10px;
-		border-radius: 10px;
-	}
-	.chartTittle {
-		width: 290px;
-		height: 30px;
-		font-size: 16px;
-		display: flex;
-		justify-content: space-between;
-		padding: 15px 15px;
-	}
-	.chartInfo {
-		width: 60px;
-		height: 180px;
-	}
-
-	.compareBar {
-		width: 55px;
-		height: 140px;
-	}
-	.margintop-30 {
-		margin-top: -30px;
-	}
-
-	.barTop {
-		width: 55px;
-		height: 30px;
-	}
-	.barBack {
-		width: 30px;
-		height: 100px;
-		/* border: 1px solid black; */
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-end;
-	}
-	.barDiv {
-		width: 100%;
-
-		background-color: #1595ea;
-	}
-	.bad {
-		background-color: #ed6f6f;
-	}
-	.rightLabel {
-		width: 110px;
-		display: flex;
-		justify-content: space-between;
-	}
-	.label {
-		color: white;
-		text-align: center;
-		width: 50px;
-		border-radius: 4px;
-		height: 20px;
-		font-size: 10px;
-		line-height: 21px;
-	}
-	.good {
-		background-color: #2ecf54;
-	}
-
-	.mainInfo3 {
-		font-size: 24px;
-	}
-	.herbInfo {
-		width: 290px;
-		height: 360px;
-		color: #727272;
-	}
-
-	.curEqp {
-		width: 290px;
-		height: 120px;
-		background: white;
-		border-radius: 10px;
-	}
-	.curHerb {
-		margin-top: 10px;
-		width: 290px;
-		height: 230px;
-		background: white;
-		border-radius: 10px;
-		background-image: url(/src/assets/images/dry/yaocai.jpg);
-		background-repeat: no-repeat;
-		background-size: 110px 90px;
-		background-position: 10px 10px;
-	}
-	.tempMoisChart {
-		width: 590px;
-		height: 360px;
-		background: white;
-		margin-left: 10px;
-		padding: 20px;
-		border-radius: 10px;
-	}
-	.topLeft {
-		margin: 20px 40px 60px 20px;
-		padding: 15px;
-		background: white;
-		border-radius: 10px;
-		height: 325px;
-		width: 440px;
-		/* background-image: url(/src/assets/images/dry/yaocai.jpg); */
-		background-repeat: no-repeat;
-		background-size: 164px 132px;
-		background-position: 239px 65px;
-		display: flex;
-	}
-	.topMid {
-		margin: 20px 20px 60px 40px;
-		background: white;
-		border-radius: 10px;
-		background-image: url(/src/assets/images/dry/fanliao.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 20px;
-		background-size: 400px;
-		width: 400px;
-
-		padding: 20px;
-	}
-	.topRight {
-		margin: 20px 20px 60px 20px;
-		background: white;
-		border-radius: 10px;
-		width: 700px;
-		padding: 20px;
-	}
-	.midLeft {
-		height: 450px;
-		width: 600px;
-		display: flex;
-		padding: 0 20px 20px 20px;
-	}
-	.midMid {
-		width: 500px;
-		padding-top: 50px;
-	}
-
-	.midRight {
-		background-image: url(/src/assets/images/dry/fengjixz.gif);
-		background-repeat: no-repeat;
-		background-position: 150px 260px;
-		background-size: 120px 120px;
-		width: 600px;
-	}
-
-	.shangJianTou {
-		margin-left: 140px;
-		width: 70px;
-		height: 100px;
-		background-image: url(/src/assets/images/dry/shangjiantoutou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 70px 100px;
-	}
-
-	.zoujiantou {
-		margin-left: 225px;
-		margin-top: 30px;
-		width: 100px;
-		height: 70px;
-		background-image: url(/src/assets/images/dry/zuojiantou.gif);
-		background-repeat: no-repeat;
-		background-position: 0px 0px;
-		background-size: 100px 70px;
-	}
-	.fault {
-		padding: 10px;
-		height: 60px;
-		font-size: 26px;
-		width: 100%;
-		text-align: right;
-		color: red;
-	}
-	.eqpName {
-		padding: 20px;
-
-		height: 160px;
-	}
-
-	.formula {
-		display: flex;
-		width: 290px;
-		height: 40px;
-		padding: 0 20px;
-		justify-content: space-around;
-		justify-items: center;
-	}
-
-	.formulaItem {
-		display: flex;
-		justify-content: center;
-		width: 85px;
-		height: 40px;
-	}
-
-	.eqpInfoText {
-		font-size: 18px;
-		font-weight: bold;
-	}
-
-	:deep() .ant-slider-mark-text {
-		padding-left: 15px;
-		font-size: 10px;
-	}
-	:deep() .ant-slider-mark-text::before {
-		content: '';
-		display: block;
-		width: 6px;
-		height: 1px;
-		background-color: #1890ff;
-
-		position: absolute;
-		top: 10px;
-		left: 0px;
-	}
-	:deep() .ant-slider-rail {
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-		background: linear-gradient(to top, #ce0000 0%, #ce0000 40%, #ce0000 75%, rgb(160, 160, 160) 100%);
-	}
-	:deep() .ant-slider-track {
-		background: rgb(216, 216, 216);
-
-		height: 20px;
-		width: 10px !important;
-		border-radius: 6px 6px 0 0;
-	}
-	:deep() .ant-slider-track:hover {
-	}
-	:deep() .ant-slider-handle {
-		display: none;
-	}
-	:deep() .ant-slider-dot {
-		display: none;
-	}
-	:deep() .ant-slider-step {
-		width: 10px !important;
-	}
-	:deep() .ant-slider-step > :first-child {
-		display: block !important;
-		width: 30px !important;
-		height: 30px !important;
-		bottom: -26px !important;
-		left: -6px;
-		border: none;
-		background: #ce0000;
-	}
-	:deep() .progress {
-		padding: 25px 25px;
-
-		width: 360px;
-		display: flex;
-	}
-	:deep() .ant-progress-bg {
-		height: 25px !important;
-	}
-	.outDiv {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-	}
-	.blingbling {
-		-webkit-animation: scaleout 1.5s infinite ease-in-out;
-		animation: scaleout 1.5s infinite ease-in-out;
-	}
-	.center {
-		display: flex;
-		justify-content: center;
-		justify-items: center;
-		align-items: center;
-		flex-wrap: wrap;
-		text-align: center;
-	}
-
-	.centerText {
-		width: 100%;
-		text-align: center;
-	}
-
-	@-webkit-keyframes scaleout {
-		0% {
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-
-	@keyframes scaleout {
-		0% {
-			transform: scale(1);
-			-webkit-transform: scale(1);
-		}
-
-		100% {
-			transform: scale(1.1);
-			-webkit-transform: scale(1.1);
-			opacity: 0;
-		}
-	}
-</style>
diff --git a/src/views/dry/monitor/WorkShop copy.vue b/src/views/dry/monitor/WorkShop copy.vue
deleted file mode 100644
index 9dc59a9..0000000
--- a/src/views/dry/monitor/WorkShop copy.vue
+++ /dev/null
@@ -1,516 +0,0 @@
-<template>
-	<div class="workshop">
-		<div class="eqp-row">
-			<div v-for="(item, index) in eqps" :key="index">
-				<div class="eqp-card">
-					<div class="eqp-content">
-						<div class="chart">
-								<div>
-								<div class="progress">
-									<div style=""> 
-										<div>鍔犵儹</div>
-										<div></div> 
-									<span class="info-text">36</span> 鍒嗛挓
-									</div>
-							
-									<div style=" padding: 0 10px;width: 200px;height: 40px;">
-										
-										<div style="padding-top: 10px">
-												<Progress
-													:stroke-color="{
-														from: '#108ee9',
-														to: '#87d068',
-													}"
-													:percent="55.9"
-													status="active"
-													:show-info="false">
-											</Progress>
-										</div>
-			
-									</div>
-								
-									<div>
-										<div>棰勮 </div> 
-										<div><span class="info-text">90</span>  鍒嗛挓
-										</div>	
-									</div>
-							</div>
-							<div style="height:50px; text-align: left; padding-left: 25px; display: flex;">
-								<div class="herbInfo">
-									<div>鑽潗锛�<span class="info-text">褰撳綊</span></div>
-									<div>鎶曟枡锛�<span class="info-text">16</span> 绛�</div>
-								</div>
-								<div class="herbInfo">
-									<div>鍘熷閲嶉噺锛�<span class="info-text">160</span> Kg</div>
-									<div>瀹炴椂閲嶉噺锛�<span class="info-text">70</span> Kg</div>
-								</div>
-								
-							</div>
-						</div>
-							
-							<div class="eqpStatus">
-								<div > <span class="info-text">缈绘枡</span>  </div>
-							</div>
-
-						</div>
-						<!-- <div :id="'chartDom' + item.id" class="chart"> </div> -->
-						<div class="info">
-							<div class="leftInfo" @click="gotoEqp(item.id)">
-								<!-- <div class="herbName"> 褰撳綊 </div> -->
-								<div class="eqpName">{{ item.name }}</div>
-							</div>
-							<div class="rightInfo">
-								<div style="width: 120px" >
-									<div style="    height: 1px;
-    font-size: 10px;
-    text-align: center;
-    margin-top: 10px;
-    margin-bottom: -10px; ">鍒濆锛歿{ (mois[0] * 100).toFixed(2) }}%</div>
-									<div :id="'moisture' + item.id" style="width: 110px; height: 187px"></div>
-									<div style="height: 1px;
-    font-size: 10px;
-    text-align: center;
-    margin-top: -25px;">鐩爣锛歿{ (mois[2] * 100).toFixed(2) }}%</div>
-									<div style="    width: 110px;
-    text-align: center;
-    margin-top: 23px;">鍚按鐜�</div>
-								</div>
-								
-								<div class="tempChart"	style="pointer-events: none; cursor: none;"  :id="'tempDom' + item.id">
-									<a-slider v-model:value="tempValue" 
-							
-									 :min="0" range :max="100" :marks="marks" vertical />
-									 <div>鐑锛�<span class="info-text">{{ tempValue[0] }}</span> 掳C</div>
-								</div>
-							</div>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
-</template>
-
-<script setup lang="ts">
-	import { onMounted, ref } from 'vue'
-	import { Progress } from 'ant-design-vue'
-	import * as echarts from 'echarts'
-	import 'echarts-liquidfill'
-	import { listAll } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { router } from '/@/router';
-	const eqps = ref([] as dryEquipment[])
-	const mois = ref([0.3939,0.2112,0.11])
-
-	const tempValue = ref(<Record<number, number>>([70, 100]))
-
-	const marks = ref<Record<number, any>>({
-		0: '0掳C',
-		1: '',
-		2: '',
-		3: '',
-		4: '',
-		5: '',
-		6: '',
-		7: '',
-		8: '',
-		9: '',
-		10: '',
-		11: '',
-		12: '',
-		13: '',
-		14: '',
-		15: '',
-		16: '',
-		17: '',
-		18: '',
-		19: '',
-		20: '',
-		21: '',
-		22: '',
-		23: '',
-		24: '',
-		25: '25掳C',
-		26: '',
-		27: '',
-		28: '',
-		29: '',
-		30: '',
-		31: '',
-		32: '',
-		33: '',
-		34: '',
-		35: '',
-		36: '',
-		37: '',
-		38: '',
-		39: '',
-		40: '',
-		41: '',
-		42: '',
-		43: '',
-		44: '',
-		45: '',
-		46: '',
-		47: '',
-		48: '',
-		49: '',
-		50: '50掳C',
-		51: '',
-		52: '',
-		53: '',
-		54: '',
-		55: '',
-		56: '',
-		57: '',
-		58: '',
-		59: '',
-		60: '',
-		61: '',
-		62: '',
-		63: '',
-		64: '',
-		65: '',
-		66: '',
-		67: '',
-		68: '',
-		69: '',
-		70: '',
-		71: '',
-		72: '',
-		73: '',
-		74: '',
-		75: '75掳C',
-		76: '',
-		77: '',
-		78: '',
-		79: '',
-		80: '',
-		81: '',
-		82: '',
-		83: '',
-		84: '',
-		85: '',
-		86: '',
-		87: '',
-		88: '',
-		89: '',
-		90: '',
-		91: '',
-		92: '',
-		93: '',
-		94: '',
-		95: '',
-		96: '',
-		97: '',
-		98: '',
-		99: '',
-		100: '100掳C',
-	})
-	function listAllEqp() {
-		listAll({ enable: 'Y' })
-			.then((result) => {
-				console.log(`output->result`, result)
-				eqps.value = result
-				setTimeout(initCharts, 1000)
-			})
-			.catch((err) => {
-				console.log(`output->err`, err)
-			})
-	}
-
-	// var wetCharts: Map<string, echarts.ECharts> = new Map()
-
-		var moistureCharts: Map<String, echarts.ECharts> = new Map()
-
-	 function initCharts() {
-	// 	console.log(`output->initChart`)
-	 	eqps.value.forEach((item) => {
-	// 		console.log(`output->item.id`, item.id)
-	 		let domId = 'moisture' + item.id
-	// 		console.log(`output->domId`, domId)
-	 		var chartDom: HTMLElement = document.getElementById(domId) as HTMLElement
-	// 		console.log(`output->chartDom`, chartDom)
-	 		let myChart = echarts.init(chartDom)
-	 	//	var option
-// 			 option = {
-// 				grid: {
-// 					left: 30,
-// 					top: 15,
-// 					bottom: 13,
-// 					right: 45
-// 				},
-//   xAxis: {
-//     type: 'category',
-// 		show: false,
-//     data: ['鍚按鐜�'],
-// 		axisLine: {
-// 			show: false,
-// 		},
-// 		axisTick: {
-// 			show: false,
-// 		}
-//   },
-//   yAxis: {
-//     type: 'value',
-		
-// 		axisLine: {
-// 			show: false,
-// 		},
-// 		min: 0,
-// 		max: 100,
-// 		axisTick: {
-// 			show: true,
-// 		},
-// 		splitLine: {
-// 			show: false
-// 		}
-//   },
-//   series: [
-//     {
-//       data: [20],
-//       type: 'bar',
-//       showBackground: true,
-//       backgroundStyle: {
-//         color: 'rgba(180, 180, 180, 0.2)'
-//       },
-// 			label: {
-// 				show: true,
-// 			},
-// 			barWidth: 20,
-// 			markLine: {
-// 				symbol: 'none',
-// 				data: [
-// 					{symbol: 'none', 
-// 						xAxis:0,
-// 						x:60,
-// 						yAxis:60,
-												
-// 						lineStyle:{
-// 							color: '#000',
-// 							width:1,
-							
-// 						},
-// 						label: {
-// 							formatter: '鍒濆\n'+ '{c}%'
-// 						}
-// 					},
-// 					{symbol: 'none', 
-// 						xAxis:0,
-// 						x:60,
-// 						yAxis:11,
-												
-// 						lineStyle:{
-// 							color: '#000',
-// 							width:1,
-							
-// 						},
-// 						label: {
-// 							formatter: '鐩爣\n'+ '{c}%'
-// 						}
-// 					},
-
-				
-// 					// {yAxis: 0},
-// 					// {yAxis: 100}
-// 				]
-// 			}
-//     },
-		
-//   ]
-// };
-const option = {
-
-    series: [{
-        type: 'liquidFill',
-				radius: '100%',
-				//waveAnimation: false,
-				amplitude: 3,
-        animationDuration: 5,
-        //animationDurationUpdate: 0,
-        data: mois.value,
-				shape: 'path://M828.817,706.209C828.817,881.725,686.98,1024,512,1024c-174.98,0-316.817-142.275-316.817-317.791C195.183,530.74,512,0,512,0s316.817,530.74,316.817,706.209z',
-				outline: {
-            show: false
-        },
-				label: {
-					
-
-					formatter: function(params) {
-						console.log(`output->params`,params,mois.value)
-
-						return ''
-						// +'鍒濆'+(mois.value[0]*100).toFixed(2) + '%\n\n\n' 
-						+ (mois.value[1]*100).toFixed(2) + '%'
-						// + '\n\n\n鐩爣'+(mois.value[2]*100).toFixed(2) + '%'
-						;
-					},
-					fontSize: 10,
-					position: ['50%',(100-mois.value[1]*100).toFixed(2) + '%'],
-					
-				}
-    }]
-};
-
-	 		option && myChart.setOption(option)
-	 		moistureCharts.set(item.id, myChart)
-	 	})
-	 }
-
-	 function gotoEqp(id: string) {
-		router.push('/dashboard/eqp/'+id)
-	 }
-
-
-	listAllEqp()
-	// DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛�
-	onMounted(() => {})
-</script>
-
-<style>
-	.workshop {
-	}
-	.eqp-row {
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.eqp-card {
-		width: 566px;
-		height: 400px;
-		padding: 6px 6px;
-	}
-
-	.eqp-content {
-		height: 100%;
-		background-color: white;
-		background-image: url('../../../assets/images/dry/ganzaoji-x.png');
-		background-repeat: no-repeat;
-		background-size: 60% 60%;
-		background-position: 10px 150px;
-		border-radius: 8px;
-	}
-
-	.chart {
-		width: 550px;
-		height: 160px;
-
-		display: flex;
-		text-align: center;
-	}
-	.progress {
-		padding:25px 25px;
-
-		width: 360px;
-		display: flex;
-	}
-	.ant-progress-bg {
-		height: 25px !important;
-	}
-	.eqpStatus {
-		width:170px;
-		background-position: 0 -10px;
-		background-image: url('../../../assets/images/dry/ganzaoji.gif');
-		background-size: 100% 100%;
-		display: inline-flex;
-		flex-direction: column-reverse;
-		padding: 15px;
-		
-	}
-	.info {
-		display: flex;
-	}
-	.leftInfo {
-		width: 335px;
-		/* background: gray; */
-	}
-	.rightInfo {
-		flex: 1;
-		height: 210px;
-		display: flex;
-	}
-
-	.info-text {
-		font-size: 16px;
-		font-weight: bold;
-	}
-	.herbName {
-		margin-top: -10px;
-		width: 180px;
-		height: 35px;
-		background: rgb(56, 56, 56);
-		margin-left: 120px;
-		text-align: center;
-		color: white;
-		font-size: 16px;
-		font-weight: bold;
-		line-height: 35px;
-	}
-	.eqpName {
-		margin-top: 68px;
-		margin-left: 174px;
-		width: 95px;
-		font-weight: bold;
-		text-align: center;
-		background-color: white;
-	}
-
-	.tempChart {
-		padding-top: 10px;
-
-
-		height: 150px;
-		width: 100px;
-	}
-
-	.herbInfo {
-	width: 160px;
-	}
-	.ant-slider-mark-text {
-		padding-left: 15px;
-		font-size: 10px;
-	}
-	.ant-slider-mark-text::before {
-		content: '';
-		display: block;
-		width: 6px;
-		height: 1px;
-		background-color: #1890ff;
-
-		position: absolute;
-		top: 10px;
-		left: 0px;
-	}
-	.ant-slider-rail {
-		width: 6px !important;
-		border-radius: 6px 6px 0 0;
-		background: linear-gradient(to top, #ce0000 0%, #ce0000 40%, #ce0000 75%, rgb(160, 160, 160) 100%);
-	}
-	.ant-slider-track {
-		background: rgb(175, 175, 175);
-
-		height: 20px;
-		width: 6px !important;
-		border-radius: 6px 6px 0 0;
-	}
-	.ant-slider-track:hover {
-	}
-	.ant-slider-handle {
-		display: none;
-	}
-	.ant-slider-dot {
-		display: none;
-	}
-	.ant-slider-step {
-		width: 10px !important;
-	}
-	.ant-slider-step > :first-child {
-		display: block !important;
-		width: 22px !important;
-		height: 22px !important;
-		bottom: -17px !important;
-		left: -4px;
-		border: none;
-		background: #ce0000;
-	}
-</style>
diff --git a/src/views/dry/monitor/WorkShop.vue b/src/views/dry/monitor/WorkShop.vue
deleted file mode 100644
index 10a219a..0000000
--- a/src/views/dry/monitor/WorkShop.vue
+++ /dev/null
@@ -1,597 +0,0 @@
-<template>
-	<div class="workshop">
-		<div class="eqp-row">
-			<div class="eqp-card" v-for="(item, index) in eqps" :key="index">
-				<div class="eqp-content">
-					<div class="chart">
-						<div>
-							<div class="progress">
-								<div style="">
-									<div>鍔犵儹</div>
-									<div></div>
-									<span class="info-text">{{ realTime.get(item.id)?.dryTime | 0 }}</span> 鍒嗛挓
-								</div>
-
-								<div style="padding: 0 10px; width: 195px; height: 40px">
-									<div style="padding-top: 10px">
-										<Progress
-											:stroke-color="{
-												from: '#108ee9',
-												to: '#87d068',
-											}"
-											:percent="realTime.get(item.id)?.percent"
-											status="active"
-											trailColor="#2b2b2b2b"
-											:show-info="false"
-										/>
-									</div>
-								</div>
-
-								<div>
-									<div>棰勮 </div>
-									<div
-										><span class="info-text">{{ (realTime.get(item.id)?.dryTime + realTime.get(item.id)?.remain) | 0 }}</span> 鍒嗛挓
-									</div>
-								</div>
-							</div>
-							<div style="height: 50px; text-align: left; padding-left: 25px; display: flex">
-								<div class="herbInfo">
-									<div
-										>鑽潗锛�<span class="info-text">{{ realTime.get(item.id)?.herbName }}</span></div
-									>
-									<div
-										>鎶曟枡锛�<span class="info-text">{{ realTime.get(item.id)?.feed | 0 }}</span> 绛�</div
-									>
-								</div>
-								<div class="herbInfo">
-									<div
-										>鍘熷閲嶉噺锛�<span class="info-text">{{ realTime.get(item.id)?.originWeight | 0 }}</span> Kg</div
-									>
-									<div
-										>瀹炴椂閲嶉噺锛�<span class="info-text">{{ realTime.get(item.id)?.yield | 0 }}</span> Kg</div
-									>
-								</div>
-							</div>
-						</div>
-
-						<div class="eqpStatus">
-							<div> <span class="info-text">姝e湪骞茬嚗</span> </div>
-						</div>
-					</div>
-					<!-- <div :id="'chartDom' + item.id" class="chart"> </div> -->
-					<div class="info">
-						<div class="leftInfo">
-							<div style="width: 120px">
-								<div style="height: 1px; font-size: 14px; text-align: center; margin-top: 10px; margin-bottom: -10px"
-									>鍒濆锛歿{ realTime.get(item.id)?.initial }}%</div
-								>
-								<div :id="'moisture' + item.id" style="width: 110px; height: 187px"></div>
-								<div style="height: 1px; font-size: 14px; text-align: center; margin-top: -25px">鐩爣锛歿{ realTime.get(item.id)?.target }}%</div>
-								<div style="width: 110px; text-align: center; margin-top: 23px">鍚按鐜�</div>
-							</div>
-							<!-- <div class="herbName"> 褰撳綊 </div> -->
-							<div style="flex: 1" @click="gotoEqp(item.id)"
-								><div class="eqpName">{{ item.name }}</div></div
-							>
-						</div>
-						<div class="rightInfo">
-							<div class="tempChart" style="pointer-events: none; cursor: none" :id="'tempDom' + item.id">
-								<a-slider
-									v-if="realTime.get(item.id)"
-									v-model:value="realTime.get(item.id).tempValue"
-									:min="0"
-									range
-									:max="100"
-									:marks="marks"
-									vertical
-								/>
-								<div class="info-text"
-									>鐑锛�<span>{{ realTime.get(item.id)?.trendVo?.bellowsTemp | 0 }}</span> 掳C</div
-								>
-							</div>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
-</template>
-
-<script setup lang="ts">
-	import { onMounted, ref, onUnmounted } from 'vue'
-	import { Progress } from 'ant-design-vue'
-	import * as echarts from 'echarts'
-	import 'echarts-liquidfill'
-	import { listAll } from '../api/DryEquipment.api'
-	import { dryEquipment } from '../dataDefine/DryEquipment.data'
-	import { router } from '/@/router'
-	import { defHttp } from '/@/utils/http/axios'
-	import { useUserStore } from '/@/store/modules/user'
-
-	const eqps = ref([] as dryEquipment[])
-	const mois = ref([0, 0, 0])
-	const userStore = useUserStore()
-	const Timer = ref()
-
-	const realTime = ref(new Map())
-
-	const marks = ref<Record<number, any>>({
-		0: '0掳C',
-		1: '',
-		2: '',
-		3: '',
-		4: '',
-		5: '',
-		6: '',
-		7: '',
-		8: '',
-		9: '',
-		10: '',
-		11: '',
-		12: '',
-		13: '',
-		14: '',
-		15: '',
-		16: '',
-		17: '',
-		18: '',
-		19: '',
-		20: '',
-		21: '',
-		22: '',
-		23: '',
-		24: '',
-		25: '25掳C',
-		26: '',
-		27: '',
-		28: '',
-		29: '',
-		30: '',
-		31: '',
-		32: '',
-		33: '',
-		34: '',
-		35: '',
-		36: '',
-		37: '',
-		38: '',
-		39: '',
-		40: '',
-		41: '',
-		42: '',
-		43: '',
-		44: '',
-		45: '',
-		46: '',
-		47: '',
-		48: '',
-		49: '',
-		50: '50掳C',
-		51: '',
-		52: '',
-		53: '',
-		54: '',
-		55: '',
-		56: '',
-		57: '',
-		58: '',
-		59: '',
-		60: '',
-		61: '',
-		62: '',
-		63: '',
-		64: '',
-		65: '',
-		66: '',
-		67: '',
-		68: '',
-		69: '',
-		70: '',
-		71: '',
-		72: '',
-		73: '',
-		74: '',
-		75: '75掳C',
-		76: '',
-		77: '',
-		78: '',
-		79: '',
-		80: '',
-		81: '',
-		82: '',
-		83: '',
-		84: '',
-		85: '',
-		86: '',
-		87: '',
-		88: '',
-		89: '',
-		90: '',
-		91: '',
-		92: '',
-		93: '',
-		94: '',
-		95: '',
-		96: '',
-		97: '',
-		98: '',
-		99: '',
-		100: '100掳C',
-	})
-	function listAllEqp() {
-		listAll({ enable: 'Y' })
-			.then((result) => {
-				console.log(`output->result`, result)
-				eqps.value = result
-				setTimeout(initCharts, 500)
-				updateRealTime()
-			})
-			.catch((err) => {
-				console.log(`output->err`, err)
-			})
-	}
-
-	// var wetCharts: Map<string, echarts.ECharts> = new Map()
-
-	var moistureCharts: Map<String, echarts.ECharts> = new Map()
-
-	function initCharts() {
-		// 	console.log(`output->initChart`)
-		eqps.value.forEach((item) => {
-			// 		console.log(`output->item.id`, item.id)
-			let domId = 'moisture' + item.id
-			// 		console.log(`output->domId`, domId)
-			var chartDom: HTMLElement = document.getElementById(domId) as HTMLElement
-			// 		console.log(`output->chartDom`, chartDom)
-			let myChart = echarts.init(chartDom)
-			//	var option
-			// 			 option = {
-			// 				grid: {
-			// 					left: 30,
-			// 					top: 15,
-			// 					bottom: 13,
-			// 					right: 45
-			// 				},
-			//   xAxis: {
-			//     type: 'category',
-			// 		show: false,
-			//     data: ['鍚按鐜�'],
-			// 		axisLine: {
-			// 			show: false,
-			// 		},
-			// 		axisTick: {
-			// 			show: false,
-			// 		}
-			//   },
-			//   yAxis: {
-			//     type: 'value',
-
-			// 		axisLine: {
-			// 			show: false,
-			// 		},
-			// 		min: 0,
-			// 		max: 100,
-			// 		axisTick: {
-			// 			show: true,
-			// 		},
-			// 		splitLine: {
-			// 			show: false
-			// 		}
-			//   },
-			//   series: [
-			//     {
-			//       data: [20],
-			//       type: 'bar',
-			//       showBackground: true,
-			//       backgroundStyle: {
-			//         color: 'rgba(180, 180, 180, 0.2)'
-			//       },
-			// 			label: {
-			// 				show: true,
-			// 			},
-			// 			barWidth: 20,
-			// 			markLine: {
-			// 				symbol: 'none',
-			// 				data: [
-			// 					{symbol: 'none',
-			// 						xAxis:0,
-			// 						x:60,
-			// 						yAxis:60,
-
-			// 						lineStyle:{
-			// 							color: '#000',
-			// 							width:1,
-
-			// 						},
-			// 						label: {
-			// 							formatter: '鍒濆\n'+ '{c}%'
-			// 						}
-			// 					},
-			// 					{symbol: 'none',
-			// 						xAxis:0,
-			// 						x:60,
-			// 						yAxis:11,
-
-			// 						lineStyle:{
-			// 							color: '#000',
-			// 							width:1,
-
-			// 						},
-			// 						label: {
-			// 							formatter: '鐩爣\n'+ '{c}%'
-			// 						}
-			// 					},
-
-			// 					// {yAxis: 0},
-			// 					// {yAxis: 100}
-			// 				]
-			// 			}
-			//     },
-
-			//   ]
-			// };
-			const option = {
-				series: [
-					{
-						type: 'liquidFill',
-						radius: '100%',
-						//waveAnimation: false,
-						amplitude: 3,
-						animationDuration: 5,
-						//animationDurationUpdate: 0,
-						data: mois.value,
-						shape:
-							'path://M828.817,706.209C828.817,881.725,686.98,1024,512,1024c-174.98,0-316.817-142.275-316.817-317.791C195.183,530.74,512,0,512,0s316.817,530.74,316.817,706.209z',
-						outline: {
-							show: false,
-						},
-						label: {
-							formatter: function () {
-								//console.log(`output->params`,params,mois.value)
-
-								return (
-									'' +
-									// +'鍒濆'+(mois.value[0]*100).toFixed(2) + '%\n\n\n'
-									(mois.value[1] * 100).toFixed(2) +
-									'%'
-									// + '\n\n\n鐩爣'+(mois.value[2]*100).toFixed(2) + '%'
-								)
-							},
-							fontSize: 14,
-							//position: ['50%',(100-mois.value[1]*100).toFixed(2) + '%'],
-						},
-					},
-				],
-			}
-
-			option && myChart.setOption(option)
-			moistureCharts.set(item.id, myChart)
-		})
-	}
-
-	function gotoEqp(id: string) {
-		router.push('/dashboard/eqp/' + id)
-	}
-
-	function updateRealTime() {
-		console.log(`output->瀹氭椂鍒锋柊鏁版嵁`)
-		eqps.value.forEach((item) => {
-			queryRealTime(item)
-		})
-	}
-
-	function queryRealTime(eqp: dryEquipment) {
-		let tenantId = userStore.getTenant
-		let eqpCode = eqp.code
-		let queryRealTimeUrl = '/dry/real/getRealTimeData'
-		defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
-			console.log(`output->res`, res)
-			if (res && res.trendVo) {
-				res.tempValue = [res.trendVo.bellowsTemp, 100]
-				res.percent = ((res.dryTime / (res.dryTime + res.remain)) * 100).toFixed(2)
-				res.mois = [
-					(res.trendVo.moisture / 100).toFixed(2),
-					(res.trendVo.moisture / 100 / 1.5).toFixed(2),
-					(res.trendVo.moisture / 100 / 3).toFixed(2),
-				]
-				moistureCharts.get(eqp.id)?.setOption({
-					series: [
-						{
-							data: res.mois,
-							label: {
-								formatter: function () {
-									return res.trendVo.moisture + '%'
-								},
-								fontSize: 14,
-								//position: ['50%',(100- res.trendVo.moisture)+ '%'],
-							},
-						},
-					],
-				})
-			} else {
-				res = {
-					tempValue: [0, 100],
-					percent: 0,
-					mois: [],
-				}
-			}
-
-			realTime.value.set(eqp.id, res)
-		})
-	}
-
-	listAllEqp()
-	// DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛�
-	onMounted(() => {
-		Timer.value = setInterval(updateRealTime, 3000)
-	})
-
-	onUnmounted(() => {
-		clearInterval(Timer.value)
-		Timer.value = null
-	})
-</script>
-
-<style scoped>
-	.workshop {
-	}
-	.eqp-row {
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.eqp-card {
-		width: 566px;
-		height: 400px;
-		padding: 6px 6px;
-		flex-grow: 0;
-		flex-shrink: 0;
-	}
-
-	.eqp-content {
-		height: 100%;
-		background-color: #fdfdfd;
-		box-shadow: 0px 0px 23px #72727278;
-		background-image: url(/src/assets/images/dry/ganzaoji-x.png);
-		background-repeat: no-repeat;
-		background-size: 60% 60%;
-		background-position: 105px 127px;
-		border-radius: 8px;
-	}
-
-	.chart {
-		width: 550px;
-		height: 160px;
-
-		display: flex;
-		text-align: center;
-	}
-	:deep() .progress {
-		padding: 25px 25px;
-
-		width: 360px;
-		display: flex;
-	}
-	:deep() .ant-progress-bg {
-		height: 25px !important;
-	}
-	.eqpStatus {
-		width: 170px;
-		background-position: -21px 19px;
-		background-image: url(/src/assets/images/dry/refeng2.gif);
-		background-size: 196px;
-		background-repeat: no-repeat;
-		display: inline-flex;
-		flex-direction: column-reverse;
-		padding: 15px;
-	}
-	.info {
-		display: flex;
-	}
-	.leftInfo {
-		width: 445px;
-		display: flex;
-		/* background: gray; */
-	}
-	.rightInfo {
-		flex: 1;
-		height: 210px;
-		display: flex;
-	}
-
-	.info-text {
-		font-size: 14px;
-		font-weight: bold;
-	}
-	.herbName {
-		margin-top: -10px;
-		width: 180px;
-		height: 35px;
-		background: rgb(56, 56, 56);
-		margin-left: 120px;
-		text-align: center;
-		color: white;
-		font-size: 16px;
-		font-weight: bold;
-		line-height: 35px;
-	}
-	.eqpName {
-		margin-top: 190px;
-		margin-left: 58px;
-		width: 205px;
-		/* font-size: 14px; */
-		font-weight: bold;
-		text-align: center;
-		background-color: white;
-		height: 22px;
-	}
-
-	.tempChart {
-		padding-top: 10px;
-
-		height: 150px;
-		width: 100px;
-	}
-
-	.herbInfo {
-		width: 160px;
-	}
-	:deep() .ant-slider-mark-text {
-		padding-left: 15px;
-		font-size: 10px;
-	}
-	:deep() .ant-slider-mark-text::before {
-		content: '';
-		display: block;
-		width: 6px;
-		height: 1px;
-		background-color: #1890ff;
-
-		position: absolute;
-		top: 10px;
-		left: 0px;
-	}
-	:deep() .ant-slider-rail {
-		width: 6px !important;
-		border-radius: 6px 6px 0 0;
-		background: linear-gradient(to top, #ce0000 0%, #ce0000 40%, #ce0000 75%, rgb(160, 160, 160) 100%);
-	}
-	:deep() .ant-slider-track {
-		background: rgb(175, 175, 175);
-
-		height: 20px;
-		width: 6px !important;
-		border-radius: 6px 6px 0 0;
-	}
-	:deep() .ant-slider-track:hover {
-	}
-	:deep() .ant-slider-handle {
-		display: none;
-	}
-	:deep() .ant-slider-dot {
-		display: none;
-	}
-	:deep() .ant-slider-step {
-		width: 10px !important;
-	}
-	:deep() .ant-slider-step > :first-child {
-		display: block !important;
-		width: 22px !important;
-		height: 22px !important;
-		bottom: -17px !important;
-		left: -4px;
-		border: none;
-		background: #ce0000;
-	}
-
-	
-	.blingbling {
-		-webkit-transition: -webkit-transform 0.4s ease-in-out;
-   transition: transform 0.4s ease-in-out;
-		
-	}
-	.blingbling:hover {
-		-webkit-transform: scale(1.1);
-   		transform: scale(1.1);
-	}
-</style>
diff --git a/src/views/dry/sql/DryBatchTrend_menu_insert.sql b/src/views/dry/sql/DryBatchTrend_menu_insert.sql
deleted file mode 100644
index 81009e4..0000000
--- a/src/views/dry/sql/DryBatchTrend_menu_insert.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- 娉ㄦ剰锛氳椤甸潰瀵瑰簲鐨勫墠鍙扮洰褰曚负views/dry鏂囦欢澶逛笅
--- 濡傛灉浣犳兂鏇存敼鍒板叾浠栫洰褰曪紝璇蜂慨鏀箂ql涓璫omponent瀛楁瀵瑰簲鐨勫��
-
-
-INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
-VALUES ('2023030807237210460', NULL, '宸ュ崟杩囩▼瓒嬪娍', '/dry/dryOrderTrendList', 'dry/DryOrderTrendList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-03-08 19:23:46', NULL, NULL, 0);
-
--- 鏉冮檺鎺у埗sql
--- 鏂板
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807237210461', '2023030807237210460', '娣诲姞宸ュ崟杩囩▼瓒嬪娍', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order_trend:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:46', NULL, NULL, 0, 0, '1', 0);
--- 缂栬緫
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807237210462', '2023030807237210460', '缂栬緫宸ュ崟杩囩▼瓒嬪娍', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order_trend:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:46', NULL, NULL, 0, 0, '1', 0);
--- 鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807237210463', '2023030807237210460', '鍒犻櫎宸ュ崟杩囩▼瓒嬪娍', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order_trend:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:46', NULL, NULL, 0, 0, '1', 0);
--- 鎵归噺鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807237210464', '2023030807237210460', '鎵归噺鍒犻櫎宸ュ崟杩囩▼瓒嬪娍', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order_trend:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:46', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎嚭excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807237210465', '2023030807237210460', '瀵煎嚭excel_宸ュ崟杩囩▼瓒嬪娍', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order_trend:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:46', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎叆excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807237210466', '2023030807237210460', '瀵煎叆excel_宸ュ崟杩囩▼瓒嬪娍', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order_trend:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:46', NULL, NULL, 0, 0, '1', 0);
\ No newline at end of file
diff --git a/src/views/dry/sql/DryBatch_menu_insert.sql b/src/views/dry/sql/DryBatch_menu_insert.sql
deleted file mode 100644
index 02ad9f7..0000000
--- a/src/views/dry/sql/DryBatch_menu_insert.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- 娉ㄦ剰锛氳椤甸潰瀵瑰簲鐨勫墠鍙扮洰褰曚负views/dry鏂囦欢澶逛笅
--- 濡傛灉浣犳兂鏇存敼鍒板叾浠栫洰褰曪紝璇蜂慨鏀箂ql涓璫omponent瀛楁瀵瑰簲鐨勫��
-
-
-INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
-VALUES ('2023030807239780050', NULL, '骞茬嚗宸ュ崟', '/dry/dryOrderList', 'dry/DryOrderList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-03-08 19:23:05', NULL, NULL, 0);
-
--- 鏉冮檺鎺у埗sql
--- 鏂板
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807239780051', '2023030807239780050', '娣诲姞骞茬嚗宸ュ崟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:05', NULL, NULL, 0, 0, '1', 0);
--- 缂栬緫
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807239780052', '2023030807239780050', '缂栬緫骞茬嚗宸ュ崟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:05', NULL, NULL, 0, 0, '1', 0);
--- 鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807239780053', '2023030807239780050', '鍒犻櫎骞茬嚗宸ュ崟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:05', NULL, NULL, 0, 0, '1', 0);
--- 鎵归噺鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807239780054', '2023030807239780050', '鎵归噺鍒犻櫎骞茬嚗宸ュ崟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:05', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎嚭excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807239780055', '2023030807239780050', '瀵煎嚭excel_骞茬嚗宸ュ崟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:05', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎叆excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807239780056', '2023030807239780050', '瀵煎叆excel_骞茬嚗宸ュ崟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_order:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:23:05', NULL, NULL, 0, 0, '1', 0);
\ No newline at end of file
diff --git a/src/views/dry/sql/DryEqpType_menu_insert.sql b/src/views/dry/sql/DryEqpType_menu_insert.sql
deleted file mode 100644
index a640d6d..0000000
--- a/src/views/dry/sql/DryEqpType_menu_insert.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- 娉ㄦ剰锛氳椤甸潰瀵瑰簲鐨勫墠鍙扮洰褰曚负views/dry鏂囦欢澶逛笅
--- 濡傛灉浣犳兂鏇存敼鍒板叾浠栫洰褰曪紝璇蜂慨鏀箂ql涓璫omponent瀛楁瀵瑰簲鐨勫��
-
-
-INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
-VALUES ('2023030807219190430', NULL, '璁惧绫诲瀷', '/dry/dryEqpTypeList', 'dry/DryEqpTypeList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-03-08 19:21:43', NULL, NULL, 0);
-
--- 鏉冮檺鎺у埗sql
--- 鏂板
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807219190431', '2023030807219190430', '娣诲姞璁惧绫诲瀷', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_eqp_type:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:21:43', NULL, NULL, 0, 0, '1', 0);
--- 缂栬緫
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807219190432', '2023030807219190430', '缂栬緫璁惧绫诲瀷', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_eqp_type:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:21:43', NULL, NULL, 0, 0, '1', 0);
--- 鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807219190433', '2023030807219190430', '鍒犻櫎璁惧绫诲瀷', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_eqp_type:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:21:43', NULL, NULL, 0, 0, '1', 0);
--- 鎵归噺鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807219190434', '2023030807219190430', '鎵归噺鍒犻櫎璁惧绫诲瀷', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_eqp_type:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:21:43', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎嚭excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807219190435', '2023030807219190430', '瀵煎嚭excel_璁惧绫诲瀷', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_eqp_type:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:21:43', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎叆excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807219190436', '2023030807219190430', '瀵煎叆excel_璁惧绫诲瀷', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_eqp_type:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:21:43', NULL, NULL, 0, 0, '1', 0);
\ No newline at end of file
diff --git a/src/views/dry/sql/DryEquipment_menu_insert.sql b/src/views/dry/sql/DryEquipment_menu_insert.sql
deleted file mode 100644
index f46ee5c..0000000
--- a/src/views/dry/sql/DryEquipment_menu_insert.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- 娉ㄦ剰锛氳椤甸潰瀵瑰簲鐨勫墠鍙扮洰褰曚负views/dry鏂囦欢澶逛笅
--- 濡傛灉浣犳兂鏇存敼鍒板叾浠栫洰褰曪紝璇蜂慨鏀箂ql涓璫omponent瀛楁瀵瑰簲鐨勫��
-
-
-INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
-VALUES ('2023030807224540190', NULL, '骞茬嚗鏈�', '/dry/dryEquipmentList', 'dry/DryEquipmentList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-03-08 19:22:19', NULL, NULL, 0);
-
--- 鏉冮檺鎺у埗sql
--- 鏂板
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807224540191', '2023030807224540190', '娣诲姞骞茬嚗鏈�', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_equipment:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:22:19', NULL, NULL, 0, 0, '1', 0);
--- 缂栬緫
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807224540192', '2023030807224540190', '缂栬緫骞茬嚗鏈�', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_equipment:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:22:19', NULL, NULL, 0, 0, '1', 0);
--- 鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807224540193', '2023030807224540190', '鍒犻櫎骞茬嚗鏈�', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_equipment:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:22:19', NULL, NULL, 0, 0, '1', 0);
--- 鎵归噺鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807224540194', '2023030807224540190', '鎵归噺鍒犻櫎骞茬嚗鏈�', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_equipment:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:22:19', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎嚭excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807224540195', '2023030807224540190', '瀵煎嚭excel_骞茬嚗鏈�', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_equipment:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:22:19', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎叆excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807224540196', '2023030807224540190', '瀵煎叆excel_骞茬嚗鏈�', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_equipment:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:22:19', NULL, NULL, 0, 0, '1', 0);
\ No newline at end of file
diff --git a/src/views/dry/sql/DryHerbFormula_menu_insert.sql b/src/views/dry/sql/DryHerbFormula_menu_insert.sql
deleted file mode 100644
index e2bc852..0000000
--- a/src/views/dry/sql/DryHerbFormula_menu_insert.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- 娉ㄦ剰锛氳椤甸潰瀵瑰簲鐨勫墠鍙扮洰褰曚负views/dry鏂囦欢澶逛笅
--- 濡傛灉浣犳兂鏇存敼鍒板叾浠栫洰褰曪紝璇蜂慨鏀箂ql涓璫omponent瀛楁瀵瑰簲鐨勫��
-
-
-INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
-VALUES ('2023051608547290510', NULL, '骞茬嚗閰嶆柟', '/dry/dryHerbFormulaList', 'dry/DryHerbFormulaList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-05-16 08:54:51', NULL, NULL, 0);
-
--- 鏉冮檺鎺у埗sql
--- 鏂板
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023051608547300511', '2023051608547290510', '娣诲姞骞茬嚗閰嶆柟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_formula:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-16 08:54:51', NULL, NULL, 0, 0, '1', 0);
--- 缂栬緫
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023051608547300512', '2023051608547290510', '缂栬緫骞茬嚗閰嶆柟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_formula:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-16 08:54:51', NULL, NULL, 0, 0, '1', 0);
--- 鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023051608547300513', '2023051608547290510', '鍒犻櫎骞茬嚗閰嶆柟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_formula:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-16 08:54:51', NULL, NULL, 0, 0, '1', 0);
--- 鎵归噺鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023051608547300514', '2023051608547290510', '鎵归噺鍒犻櫎骞茬嚗閰嶆柟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_formula:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-16 08:54:51', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎嚭excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023051608547300515', '2023051608547290510', '瀵煎嚭excel_骞茬嚗閰嶆柟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_formula:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-16 08:54:51', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎叆excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023051608547300516', '2023051608547290510', '瀵煎叆excel_骞茬嚗閰嶆柟', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_formula:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-16 08:54:51', NULL, NULL, 0, 0, '1', 0);
\ No newline at end of file
diff --git a/src/views/dry/sql/DryHerbInfo_menu_insert.sql b/src/views/dry/sql/DryHerbInfo_menu_insert.sql
deleted file mode 100644
index 8c75804..0000000
--- a/src/views/dry/sql/DryHerbInfo_menu_insert.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- 娉ㄦ剰锛氳椤甸潰瀵瑰簲鐨勫墠鍙扮洰褰曚负views/dry鏂囦欢澶逛笅
--- 濡傛灉浣犳兂鏇存敼鍒板叾浠栫洰褰曪紝璇蜂慨鏀箂ql涓璫omponent瀛楁瀵瑰簲鐨勫��
-
-
-INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
-VALUES ('2023122112489900070', NULL, 'dry_herb_info', '/dry/dryHerbInfoList', 'dry/DryHerbInfoList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-12-21 12:48:07', NULL, NULL, 0);
-
--- 鏉冮檺鎺у埗sql
--- 鏂板
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023122112489900071', '2023122112489900070', '娣诲姞dry_herb_info', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_info:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-12-21 12:48:07', NULL, NULL, 0, 0, '1', 0);
--- 缂栬緫
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023122112489900072', '2023122112489900070', '缂栬緫dry_herb_info', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_info:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-12-21 12:48:07', NULL, NULL, 0, 0, '1', 0);
--- 鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023122112489900073', '2023122112489900070', '鍒犻櫎dry_herb_info', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_info:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-12-21 12:48:07', NULL, NULL, 0, 0, '1', 0);
--- 鎵归噺鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023122112489900074', '2023122112489900070', '鎵归噺鍒犻櫎dry_herb_info', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_info:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-12-21 12:48:07', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎嚭excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023122112489900075', '2023122112489900070', '瀵煎嚭excel_dry_herb_info', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_info:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-12-21 12:48:07', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎叆excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023122112489900076', '2023122112489900070', '瀵煎叆excel_dry_herb_info', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_info:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-12-21 12:48:07', NULL, NULL, 0, 0, '1', 0);
\ No newline at end of file
diff --git a/src/views/dry/sql/DryHerbType_menu_insert.sql b/src/views/dry/sql/DryHerbType_menu_insert.sql
deleted file mode 100644
index d0c9ac2..0000000
--- a/src/views/dry/sql/DryHerbType_menu_insert.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- 娉ㄦ剰锛氳椤甸潰瀵瑰簲鐨勫墠鍙扮洰褰曚负views/dry鏂囦欢澶逛笅
--- 濡傛灉浣犳兂鏇存敼鍒板叾浠栫洰褰曪紝璇蜂慨鏀箂ql涓璫omponent瀛楁瀵瑰簲鐨勫��
-
-
-INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
-VALUES ('2023030805016090240', NULL, '鑽潗鍒嗙被', '/dry/dryHerbTypeList', 'dry/DryHerbTypeList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-03-08 17:01:24', NULL, NULL, 0);
-
--- 鏉冮檺鎺у埗sql
--- 鏂板
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030805016100241', '2023030805016090240', '娣诲姞鑽潗鍒嗙被', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_type:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 17:01:24', NULL, NULL, 0, 0, '1', 0);
--- 缂栬緫
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030805016100242', '2023030805016090240', '缂栬緫鑽潗鍒嗙被', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_type:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 17:01:24', NULL, NULL, 0, 0, '1', 0);
--- 鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030805016100243', '2023030805016090240', '鍒犻櫎鑽潗鍒嗙被', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_type:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 17:01:24', NULL, NULL, 0, 0, '1', 0);
--- 鎵归噺鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030805016100244', '2023030805016090240', '鎵归噺鍒犻櫎鑽潗鍒嗙被', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_type:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 17:01:24', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎嚭excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030805016100245', '2023030805016090240', '瀵煎嚭excel_鑽潗鍒嗙被', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_type:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 17:01:24', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎叆excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030805016100246', '2023030805016090240', '瀵煎叆excel_鑽潗鍒嗙被', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb_type:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 17:01:24', NULL, NULL, 0, 0, '1', 0);
\ No newline at end of file
diff --git a/src/views/dry/sql/DryHerb_menu_insert.sql b/src/views/dry/sql/DryHerb_menu_insert.sql
deleted file mode 100644
index 20ee8ce..0000000
--- a/src/views/dry/sql/DryHerb_menu_insert.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- 娉ㄦ剰锛氳椤甸潰瀵瑰簲鐨勫墠鍙扮洰褰曚负views/dry鏂囦欢澶逛笅
--- 濡傛灉浣犳兂鏇存敼鍒板叾浠栫洰褰曪紝璇蜂慨鏀箂ql涓璫omponent瀛楁瀵瑰簲鐨勫��
-
-
-INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
-VALUES ('2023030807208980410', NULL, '鑽潗', '/dry/dryHerbList', 'dry/DryHerbList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-03-08 19:20:41', NULL, NULL, 0);
-
--- 鏉冮檺鎺у埗sql
--- 鏂板
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807208990411', '2023030807208980410', '娣诲姞鑽潗', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:20:41', NULL, NULL, 0, 0, '1', 0);
--- 缂栬緫
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807208990412', '2023030807208980410', '缂栬緫鑽潗', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:20:41', NULL, NULL, 0, 0, '1', 0);
--- 鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807208990413', '2023030807208980410', '鍒犻櫎鑽潗', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:20:41', NULL, NULL, 0, 0, '1', 0);
--- 鎵归噺鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807208990414', '2023030807208980410', '鎵归噺鍒犻櫎鑽潗', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:20:41', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎嚭excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807208990415', '2023030807208980410', '瀵煎嚭excel_鑽潗', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:20:41', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎叆excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807208990416', '2023030807208980410', '瀵煎叆excel_鑽潗', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_herb:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:20:41', NULL, NULL, 0, 0, '1', 0);
\ No newline at end of file
diff --git a/src/views/dry/sql/DryOpcDevice_menu_insert.sql b/src/views/dry/sql/DryOpcDevice_menu_insert.sql
deleted file mode 100644
index c30a1b8..0000000
--- a/src/views/dry/sql/DryOpcDevice_menu_insert.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- 娉ㄦ剰锛氳椤甸潰瀵瑰簲鐨勫墠鍙扮洰褰曚负views/dry鏂囦欢澶逛笅
--- 濡傛灉浣犳兂鏇存敼鍒板叾浠栫洰褰曪紝璇蜂慨鏀箂ql涓璫omponent瀛楁瀵瑰簲鐨勫��
-
-
-INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
-VALUES ('2023112802425240080', NULL, 'dry_opc_device', '/dry/dryOpcDeviceList', 'dry/DryOpcDeviceList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-11-28 14:42:08', NULL, NULL, 0);
-
--- 鏉冮檺鎺у埗sql
--- 鏂板
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023112802425240081', '2023112802425240080', '娣诲姞dry_opc_device', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_opc_device:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-11-28 14:42:08', NULL, NULL, 0, 0, '1', 0);
--- 缂栬緫
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023112802425240082', '2023112802425240080', '缂栬緫dry_opc_device', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_opc_device:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-11-28 14:42:08', NULL, NULL, 0, 0, '1', 0);
--- 鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023112802425240083', '2023112802425240080', '鍒犻櫎dry_opc_device', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_opc_device:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-11-28 14:42:08', NULL, NULL, 0, 0, '1', 0);
--- 鎵归噺鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023112802425240084', '2023112802425240080', '鎵归噺鍒犻櫎dry_opc_device', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_opc_device:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-11-28 14:42:08', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎嚭excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023112802425240085', '2023112802425240080', '瀵煎嚭excel_dry_opc_device', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_opc_device:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-11-28 14:42:08', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎叆excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023112802425240086', '2023112802425240080', '瀵煎叆excel_dry_opc_device', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_opc_device:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-11-28 14:42:08', NULL, NULL, 0, 0, '1', 0);
\ No newline at end of file
diff --git a/src/views/dry/sql/DryResult_menu_insert.sql b/src/views/dry/sql/DryResult_menu_insert.sql
deleted file mode 100644
index a45d369..0000000
--- a/src/views/dry/sql/DryResult_menu_insert.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- 娉ㄦ剰锛氳椤甸潰瀵瑰簲鐨勫墠鍙扮洰褰曚负views/dry鏂囦欢澶逛笅
--- 濡傛灉浣犳兂鏇存敼鍒板叾浠栫洰褰曪紝璇蜂慨鏀箂ql涓璫omponent瀛楁瀵瑰簲鐨勫��
-
-
-INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
-VALUES ('2023031902327130210', NULL, '娴嬭瘯缁撴灉', '/dry/dryResultList', 'dry/DryResultList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-03-19 14:32:21', NULL, NULL, 0);
-
--- 鏉冮檺鎺у埗sql
--- 鏂板
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023031902327140211', '2023031902327130210', '娣诲姞娴嬭瘯缁撴灉', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_result:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-19 14:32:21', NULL, NULL, 0, 0, '1', 0);
--- 缂栬緫
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023031902327140212', '2023031902327130210', '缂栬緫娴嬭瘯缁撴灉', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_result:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-19 14:32:21', NULL, NULL, 0, 0, '1', 0);
--- 鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023031902327140213', '2023031902327130210', '鍒犻櫎娴嬭瘯缁撴灉', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_result:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-19 14:32:21', NULL, NULL, 0, 0, '1', 0);
--- 鎵归噺鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023031902327140214', '2023031902327130210', '鎵归噺鍒犻櫎娴嬭瘯缁撴灉', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_result:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-19 14:32:21', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎嚭excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023031902327140215', '2023031902327130210', '瀵煎嚭excel_娴嬭瘯缁撴灉', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_result:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-19 14:32:21', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎叆excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023031902327140216', '2023031902327130210', '瀵煎叆excel_娴嬭瘯缁撴灉', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_result:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-19 14:32:21', NULL, NULL, 0, 0, '1', 0);
\ No newline at end of file
diff --git a/src/views/dry/sql/DryShop_menu_insert.sql b/src/views/dry/sql/DryShop_menu_insert.sql
deleted file mode 100644
index bf115d9..0000000
--- a/src/views/dry/sql/DryShop_menu_insert.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- 娉ㄦ剰锛氳椤甸潰瀵瑰簲鐨勫墠鍙扮洰褰曚负views/dry鏂囦欢澶逛笅
--- 濡傛灉浣犳兂鏇存敼鍒板叾浠栫洰褰曪紝璇蜂慨鏀箂ql涓璫omponent瀛楁瀵瑰簲鐨勫��
-
-
-INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) 
-VALUES ('2023030807199390070', NULL, '杞﹂棿', '/dry/dryShopList', 'dry/DryShopList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-03-08 19:19:07', NULL, NULL, 0);
-
--- 鏉冮檺鎺у埗sql
--- 鏂板
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807199400071', '2023030807199390070', '娣诲姞杞﹂棿', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_shop:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:19:07', NULL, NULL, 0, 0, '1', 0);
--- 缂栬緫
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807199400072', '2023030807199390070', '缂栬緫杞﹂棿', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_shop:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:19:07', NULL, NULL, 0, 0, '1', 0);
--- 鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807199400073', '2023030807199390070', '鍒犻櫎杞﹂棿', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_shop:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:19:07', NULL, NULL, 0, 0, '1', 0);
--- 鎵归噺鍒犻櫎
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807199400074', '2023030807199390070', '鎵归噺鍒犻櫎杞﹂棿', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_shop:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:19:07', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎嚭excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807199400075', '2023030807199390070', '瀵煎嚭excel_杞﹂棿', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_shop:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:19:07', NULL, NULL, 0, 0, '1', 0);
--- 瀵煎叆excel
-INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
-VALUES ('2023030807199400076', '2023030807199390070', '瀵煎叆excel_杞﹂棿', NULL, NULL, 0, NULL, NULL, 2, 'dry:dry_shop:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-03-08 19:19:07', NULL, NULL, 0, 0, '1', 0);
\ No newline at end of file
diff --git a/src/views/monitor/datalog/DataLogCompareModal.vue b/src/views/monitor/datalog/DataLogCompareModal.vue
deleted file mode 100644
index 2911c92..0000000
--- a/src/views/monitor/datalog/DataLogCompareModal.vue
+++ /dev/null
@@ -1,220 +0,0 @@
-<!--鐢ㄦ埛閫夋嫨妗�-->
-<template>
-  <div>
-    <BasicModal v-bind="$attrs" @register="register" title="鏁版嵁瀵规瘮" width="50%" destroyOnClose :showOkBtn="false">
-      <a-row :gutter="6" v-if="dataVersionList" style="margin-left: 2px">
-        <span style="margin-top: 5px; margin-right: 3px; margin-left: 4px">鐗堟湰瀵规瘮:</span>
-        <a-select placeholder="鐗堟湰鍙�" @change="handleChange1" v-model:value="params.dataId1">
-          <a-select-option v-for="(log, logindex) in dataVersionList" :key="log.value" :value="log.value">
-            {{ log.text }}
-          </a-select-option>
-        </a-select>
-
-        <a-select placeholder="鐗堟湰鍙�" @change="handleChange2" style="padding-left: 10px" v-model:value="params.dataId2">
-          <a-select-option v-for="(log, logindex) in dataVersionList" :key="log.value" :value="log.value">
-            {{ log.text }}
-          </a-select-option>
-        </a-select>
-      </a-row>
-      <BasicTable
-        :columns="columns"
-        v-bind="getBindValue"
-        :rowClassName="setDataCss"
-        :striped="false"
-        :showIndexColumn="false"
-        :pagination="false"
-        :canResize="false"
-        :bordered="true"
-        :dataSource="dataSource"
-        :searchInfo="searchInfo"
-        v-if="isUpdate"
-      >
-        <template #dataVersionTitle1="{ record }"> <Icon icon="icon-park-outline:grinning-face" /> 鐗堟湰:{{ dataVersion1Num }} </template>
-        <template #dataVersionTitle2="{ record }"> <Icon icon="icon-park-outline:grinning-face" /> 鐗堟湰:{{ dataVersion2Num }} </template>
-        <template #avatarslot="{ record }">
-          <div class="anty-img-wrap" v-if="record.dataVersion1 != record.dataVersion2">
-            <Icon icon="mdi:arrow-right-bold" style="color: red"></Icon>
-          </div>
-        </template>
-      </BasicTable>
-    </BasicModal>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, unref, ref, reactive, watch } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { queryCompareList, queryDataVerList } from './datalog.api';
-  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
-  import { useAttrs } from '/@/hooks/core/useAttrs';
-  import { selectProps } from '/@/components/Form/src/jeecg/props/props';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  export default defineComponent({
-    name: 'DataLogCompareModal',
-    components: {
-      //姝ゅ闇�瑕佸紓姝ュ姞杞紹asicTable
-      BasicModal,
-      BasicTable: createAsyncComponent(() => import('/@/components/Table/src/BasicTable.vue'), { loading: true }),
-    },
-    props: {
-      ...selectProps,
-    },
-    emits: ['register', 'btnOk'],
-    setup(props, { emit, refs }) {
-      const { createMessage } = useMessage();
-      const attrs = useAttrs();
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
-      const dataSource = ref([]);
-      const dataVersion1Num = ref('');
-      const dataVersion2Num = ref('');
-      const isUpdate = ref(true);
-      const searchInfo = {};
-      const dataId1 = ref('');
-      const dataId2 = ref('');
-      const dataId = ref('');
-      const dataTable1 = ref('');
-      const dataID3 = ref('');
-      const dataTable = ref('');
-      const confirmLoading = ref(false);
-      const dataVersionList = ref([]);
-      let params = reactive({ dataId1: '', dataId2: '' });
-      let dataLog = reactive({});
-      const [register, { setModalProps, closeModal }] = useModalInner(async (data) => {
-        isUpdate.value = !!data?.isUpdate;
-        if (unref(isUpdate)) {
-          let checkedRows = data.selectedRows;
-          dataTable.value = checkedRows[0].dataTable;
-          dataId.value = checkedRows[0].dataId;
-          dataId1.value = checkedRows[0].id;
-          dataId2.value = checkedRows[1].id;
-          params.dataId1 = dataId1.value;
-          params.dataId2 = dataId2.value;
-          await initDataVersionList();
-          await initTableData();
-        }
-      });
-
-      //瀹氫箟琛ㄦ牸鍒�
-      const columns = [
-        {
-          title: '瀛楁鍚�',
-          dataIndex: 'code',
-          width: 20,
-          align: 'left',
-        },
-        {
-          dataIndex: 'dataVersion1',
-          align: 'left',
-          width: 60,
-          slots: { title: 'dataVersionTitle1' },
-        },
-        {
-          title: '',
-          dataIndex: 'imgshow',
-          align: 'center',
-          slots: { customRender: 'avatarslot' },
-          width: 5,
-        },
-        {
-          align: 'left',
-          dataIndex: 'dataVersion2',
-          width: 60,
-          filters: [],
-          filterMultiple: false,
-          slots: { title: 'dataVersionTitle2' },
-        },
-      ];
-      async function initTableData() {
-        console.info('params', params);
-        queryCompareList(unref(params)).then((res) => {
-          console.info('test', res);
-          dataVersion1Num.value = res[0].dataVersion;
-          dataVersion2Num.value = res[1].dataVersion;
-          let json1 = JSON.parse(res[0].dataContent);
-          let json2 = JSON.parse(res[1].dataContent);
-          let data = [];
-          for (var item1 in json1) {
-            for (var item2 in json2) {
-              if (item1 == item2) {
-                data.push({
-                  code: item1,
-                  imgshow: '',
-                  dataVersion1: json1[item1],
-                  dataVersion2: json2[item2],
-                });
-              }
-            }
-          }
-          dataSource.value = data;
-        });
-      }
-      function handleChange1(value) {
-        if (params.dataId2 == value) {
-          createMessage.warning('鐩稿悓鐗堟湰鍙蜂笉鑳芥瘮杈�');
-          return;
-        }
-        params.dataId1 = value;
-        initTableData();
-      }
-      function handleChange2(value) {
-        if (params.dataId1 == value) {
-          createMessage.warning('鐩稿悓鐗堟湰鍙蜂笉鑳芥瘮杈�');
-          return;
-        }
-        params.dataId2 = value;
-        initTableData();
-      }
-      function setDataCss(record) {
-        let className = 'trcolor';
-        const dataVersion1 = record.dataVersion1;
-        const dataVersion2 = record.dataVersion2;
-        if (dataVersion1 != dataVersion2) {
-          return className;
-        }
-      }
-      async function initDataVersionList() {
-        queryDataVerList({ dataTable: dataTable.value, dataId: dataId.value }).then((res) => {
-          dataVersionList.value = res.map((value, key, arr) => {
-            let item = {};
-            item['text'] = value['dataVersion'];
-            item['value'] = value['id'];
-            return item;
-          });
-        });
-      }
-
-      return {
-        //config,
-        searchInfo,
-        dataSource,
-        setDataCss,
-        isUpdate,
-        dataVersionList,
-        dataVersion1Num,
-        dataVersion2Num,
-        queryCompareList,
-        initDataVersionList,
-        register,
-        handleChange1,
-        handleChange2,
-        params,
-        getBindValue,
-        columns,
-      };
-    },
-  });
-</script>
-<style scoped>
-  .anty-img-wrap {
-    height: 25px;
-    position: relative;
-  }
-
-  .anty-img-wrap > img {
-    max-height: 100%;
-  }
-
-  .marginCss {
-    margin-top: 20px;
-  }
-</style>
diff --git a/src/views/monitor/datalog/DataLogModal.vue b/src/views/monitor/datalog/DataLogModal.vue
deleted file mode 100644
index 743e8e6..0000000
--- a/src/views/monitor/datalog/DataLogModal.vue
+++ /dev/null
@@ -1,111 +0,0 @@
-<template>
-  <div>
-    <BasicModal v-bind="$attrs" @register="registerModal" title="鏁版嵁瀵规瘮绐楀彛" :minHeight="300" width="800px" @ok="handleSubmit">
-      <a-spin :spinning="confirmLoading">
-        <a-form @submit="handleSubmit" :form="form" class="form">
-          <a-row class="form-row" :gutter="24">
-            <a-col :md="12" :sm="8">
-              <a-form-item label="鏁版嵁搴撹〃鍚�" :label-col="{ span: 6 }" :wrapper-col="{ span: 15 }" name="dataTable">
-                <a-input placeholder="璇疯緭鍏ユ暟鎹簱琛ㄥ悕" v-model:value="dataTable" disabled />
-              </a-form-item>
-            </a-col>
-
-            <a-col :md="12" :sm="8">
-              <a-form-item label="鏁版嵁ID" :label-col="{ span: 5 }" :wrapper-col="{ span: 15 }">
-                <a-input placeholder="璇疯緭鍏ユ暟鎹甀D" v-model:value="dataId" disabled />
-              </a-form-item>
-            </a-col>
-          </a-row>
-
-          <a-row class="form-row" :gutter="24">
-            <a-col :md="12" :sm="8">
-              <a-form-item label="鐗堟湰鍙�1" :label-col="{ span: 6 }" :wrapper-col="{ span: 15 }">
-                <a-select placeholder="璇烽�夋嫨鐗堟湰鍙�" @change="handleChange1" v-model:value="dataVersion1">
-                  <a-select-option v-for="(log, logindex) in dataVersionList" :key="logindex.toString()" :value="log.id">
-                    {{ log.dataVersion }}
-                  </a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-            <a-col :md="12" :sm="8">
-              <a-form-item label="鐗堟湰鍙�2" :label-col="{ span: 5 }" :wrapper-col="{ span: 15 }">
-                <a-select placeholder="璇烽�夋嫨鐗堟湰鍙�" @change="handleChange2" v-model:value="dataVersion2">
-                  <a-select-option v-for="(log, logindex) in dataVersionList" :key="logindex.toString()" :value="log.id">
-                    {{ log.dataVersion }}
-                  </a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-          </a-row>
-        </a-form>
-      </a-spin>
-    </BasicModal>
-    <DataLogCompareModal @register="registerDataLogCompareModal"></DataLogCompareModal>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { BasicModal, useModal, useModalInner } from '/@/components/Modal';
-  import { queryDataVerList } from './datalog.api';
-  import { reactive, ref, unref } from 'vue';
-  import DataLogCompareModal from './DataLogCompareModal.vue';
-  const dataId1 = ref('');
-  const dataId2 = ref('');
-  const dataId = ref('');
-  const dataTable1 = ref('');
-  const dataID3 = ref('');
-  const dataTable = ref('');
-  const confirmLoading = ref(false);
-  const isUpdate = ref(true);
-  const dataVersionList = ref([]);
-  let dataLog = reactive({});
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      let checkedRows = data.selectedRows;
-      dataTable.value = checkedRows[0].dataTable;
-      dataId.value = checkedRows[0].dataId;
-      dataId1.value = checkedRows[0].id;
-      dataId2.value = checkedRows[1].id;
-      initDataVersionList();
-    }
-  });
-
-  const [registerDataLogCompareModal, { openModal }] = useModal();
-
-  function handleChange1(value) {
-    dataId1.value = value;
-  }
-
-  function handleChange2(value) {
-    dataId2.value = value;
-  }
-
-  function handleSubmit() {
-    let result = { dataId1: dataId1.value, dataId2: dataId2.value };
-    openModal(true, {
-      result,
-      isUpdate: true,
-    });
-    closeModal();
-  }
-
-  function initDataVersionList() {
-    queryDataVerList({ dataTable: dataTable.value, dataId: dataId.value }).then((res) => {
-      dataVersionList.value = res.map((value, key, arr) => {
-        arr['label'] = value;
-        return arr;
-      });
-      console.info(dataVersionList.value);
-    });
-  }
-</script>
-
-<style scoped lang="less">
-  .detail-iframe {
-    border: 0;
-    width: 100%;
-    height: 100%;
-    min-height: 600px;
-  }
-</style>
diff --git a/src/views/monitor/datalog/datalog.api.ts b/src/views/monitor/datalog/datalog.api.ts
deleted file mode 100644
index a50f12b..0000000
--- a/src/views/monitor/datalog/datalog.api.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  list = '/sys/dataLog/list',
-  queryDataVerList = '/sys/dataLog/queryDataVerList',
-  queryCompareList = '/sys/dataLog/queryCompareList',
-}
-
-/**
- * 鏌ヨ鏁版嵁鏃ュ織鍒楄〃
- * @param params
- */
-export const getDataLogList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
-
-/**
- * 鏌ヨ鏁版嵁鏃ュ織鍒楄〃
- * @param params
- */
-export const queryDataVerList = (params) => {
-  return defHttp.get({ url: Api.queryDataVerList, params });
-};
-
-/**
- * 鏌ヨ瀵规瘮鏁版嵁
- * @param params
- */
-export const queryCompareList = (params) => {
-  return defHttp.get({ url: Api.queryCompareList, params });
-};
diff --git a/src/views/monitor/datalog/datalog.data.ts b/src/views/monitor/datalog/datalog.data.ts
deleted file mode 100644
index 07de096..0000000
--- a/src/views/monitor/datalog/datalog.data.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '琛ㄥ悕',
-    dataIndex: 'dataTable',
-    width: 150,
-    align: 'left',
-  },
-  {
-    title: '鏁版嵁ID',
-    dataIndex: 'dataId',
-    width: 350,
-  },
-  {
-    title: '鐗堟湰鍙�',
-    dataIndex: 'dataVersion',
-    width: 100,
-  },
-  {
-    title: '鏁版嵁鍐呭',
-    dataIndex: 'dataContent',
-  },
-  {
-    title: '鍒涘缓浜�',
-    dataIndex: 'createBy',
-    sorter: true,
-    width: 200,
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'dataTable',
-    label: '琛ㄥ悕',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'dataId',
-    label: '鏁版嵁ID',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-];
diff --git a/src/views/monitor/datalog/index.vue b/src/views/monitor/datalog/index.vue
deleted file mode 100644
index 77bd99f..0000000
--- a/src/views/monitor/datalog/index.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #tableTitle>
-        <a-button preIcon="ant-design:plus-outlined" type="primary" @click="handleCompare" style="margin-right: 5px">鏁版嵁姣旇緝</a-button>
-      </template>
-    </BasicTable>
-    <DataLogCompareModal @register="registerModal" @success="reload" />
-  </div>
-</template>
-<script lang="ts" name="monitor-datalog" setup>
-  import { ref } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import DataLogCompareModal from './DataLogCompareModal.vue';
-  const [registerModal, { openModal }] = useModal();
-  import { getDataLogList } from './datalog.api';
-  import { columns, searchFormSchema } from './datalog.data';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useModal } from '/@/components/Modal';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  const { createMessage } = useMessage();
-  const checkedRows = ref<Array<object | number>>([]);
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext } = useListPage({
-    designScope: 'datalog-template',
-    tableProps: {
-      title: '鏁版嵁鏃ュ織鍒楄〃',
-      api: getDataLogList,
-      columns: columns,
-      formConfig: {
-        labelWidth: 120,
-        schemas: searchFormSchema,
-      },
-      actionColumn: false,
-    },
-  });
-
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys, selectedRows }] = tableContext;
-
-  function handleCompare() {
-    let obj = selectedRows.value;
-    console.info('sfsfsf', obj);
-    if (!obj || obj.length != 2) {
-      createMessage.warning('璇烽�夋嫨涓ゆ潯鏁版嵁!');
-      return false;
-    }
-    if (obj[0].dataId != obj[1].dataId) {
-      createMessage.warning('璇烽�夋嫨鐩稿悓鐨勬暟鎹簱琛ㄥ拰鏁版嵁ID杩涜姣旇緝!');
-      return false;
-    }
-    openModal(true, {
-      selectedRows,
-      isUpdate: true,
-    });
-  }
-</script>
diff --git a/src/views/monitor/datasource/DataSourceModal.vue b/src/views/monitor/datasource/DataSourceModal.vue
deleted file mode 100644
index e45d9d1..0000000
--- a/src/views/monitor/datasource/DataSourceModal.vue
+++ /dev/null
@@ -1,87 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit" width="40%">
-    <BasicForm @register="registerForm">
-      <template #pwd="{ model, field }">
-        <a-row :gutter="8">
-          <a-col :sm="15" :md="16" :lg="17" :xl="19">
-            <a-input-password v-model:value="model[field]" placeholder="璇疯緭鍏ュ瘑鐮�" />
-          </a-col>
-          <a-col :sm="9" :md="7" :lg="7" :xl="5">
-            <a-button type="primary" style="width: 100%" @click="handleTest">娴嬭瘯</a-button>
-          </a-col>
-        </a-row>
-      </template>
-    </BasicForm>
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './datasource.data';
-  import { saveOrUpdateDataSource, getDataSourceById, testConnection } from './datasource.api';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const { createMessage } = useMessage();
-  // Emits澹版槑
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { getFieldsValue, resetFields, validateFields, setFieldsValue, validate }] = useForm({
-    // labelWidth: 150,
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //鑾峰彇璇︽儏
-      data.record = await getDataSourceById({ id: data.record.id });
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-  //璁剧疆鏍囬
-  const title = computed(() => (!unref(isUpdate) ? '鏂板鏁版嵁婧�' : '缂栬緫鏁版嵁婧�'));
-
-  async function handleTest() {
-    let keys = ['dbType', 'dbDriver', 'dbUrl', 'dbName', 'dbUsername', 'dbPassword'];
-    // 鑾峰彇浠ヤ笂瀛楁鐨勫�硷紝骞舵竻闄ゆ牎楠岀姸鎬�
-    let fieldsValues = getFieldsValue(keys);
-    let setFields = {};
-    keys.forEach((key) => (setFields[key] = { value: fieldsValues[key], errors: null }));
-    await validateFields(keys).then((values) => {
-      let loading = createMessage.loading('杩炴帴涓�....', 0);
-      testConnection(values)
-        .then((data) => {
-          if (data.success) {
-            createMessage.success('杩炴帴鎴愬姛');
-          }
-        })
-        .catch((error) => {})
-        .finally(() => loading());
-    });
-  }
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit(v) {
-    try {
-      let values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateDataSource(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/monitor/datasource/datasource.api.ts b/src/views/monitor/datasource/datasource.api.ts
deleted file mode 100644
index 3aa0580..0000000
--- a/src/views/monitor/datasource/datasource.api.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/sys/dataSource/list',
-  save = '/sys/dataSource/add',
-  edit = '/sys/dataSource/edit',
-  get = '/sys/dataSource/queryById',
-  delete = '/sys/dataSource/delete',
-  testConnection = '/online/cgreport/api/testConnection',
-  deleteBatch = '/sys/dataSource/deleteBatch',
-  exportXlsUrl = 'sys/dataSource/exportXls',
-  importExcelUrl = 'sys/dataSource/importExcel',
-}
-/**
- * 瀵煎嚭api
- */
-export const getExportUrl = Api.exportXlsUrl;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcelUrl;
-
-/**
- * 鏌ヨ鏁版嵁婧愬垪琛�
- * @param params
- */
-export const getDataSourceList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
-
-/**
- * 淇濆瓨鎴栬�呮洿鏂版暟鎹簮
- * @param params
- */
-export const saveOrUpdateDataSource = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-
-/**
- * 鏌ヨ鏁版嵁婧愯鎯�
- * @param params
- */
-export const getDataSourceById = (params) => {
-  return defHttp.get({ url: Api.get, params });
-};
-
-/**
- * 鍒犻櫎鏁版嵁婧�
- * @param params
- */
-export const deleteDataSource = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.delete, data: params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 娴嬭瘯杩炴帴
- * @param params
- */
-export const testConnection = (params) => {
-  return defHttp.post({ url: Api.testConnection, params });
-};
-
-/**
- * 鎵归噺鍒犻櫎鏁版嵁婧�
- * @param params
- */
-export const batchDeleteDataSource = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
diff --git a/src/views/monitor/datasource/datasource.data.ts b/src/views/monitor/datasource/datasource.data.ts
deleted file mode 100644
index de403f8..0000000
--- a/src/views/monitor/datasource/datasource.data.ts
+++ /dev/null
@@ -1,185 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-
-const dbDriverMap = {
-  // MySQL 鏁版嵁搴�
-  '1': { dbDriver: 'com.mysql.jdbc.Driver' },
-  //MySQL5.7+ 鏁版嵁搴�
-  '4': { dbDriver: 'com.mysql.cj.jdbc.Driver' },
-  // Oracle
-  '2': { dbDriver: 'oracle.jdbc.OracleDriver' },
-  // SQLServer 鏁版嵁搴�
-  '3': { dbDriver: 'com.microsoft.sqlserver.jdbc.SQLServerDriver' },
-  // marialDB 鏁版嵁搴�
-  '5': { dbDriver: 'org.mariadb.jdbc.Driver' },
-  // postgresql 鏁版嵁搴�
-  '6': { dbDriver: 'org.postgresql.Driver' },
-  // 杈炬ⅵ 鏁版嵁搴�
-  '7': { dbDriver: 'dm.jdbc.driver.DmDriver' },
-  // 浜哄ぇ閲戜粨 鏁版嵁搴�
-  '8': { dbDriver: 'com.kingbase8.Driver' },
-  // 绁為�� 鏁版嵁搴�
-  '9': { dbDriver: 'com.oscar.Driver' },
-  // SQLite 鏁版嵁搴�
-  '10': { dbDriver: 'org.sqlite.JDBC' },
-  // DB2 鏁版嵁搴�
-  '11': { dbDriver: 'com.ibm.db2.jcc.DB2Driver' },
-  // Hsqldb 鏁版嵁搴�
-  '12': { dbDriver: 'org.hsqldb.jdbc.JDBCDriver' },
-  // Derby 鏁版嵁搴�
-  '13': { dbDriver: 'org.apache.derby.jdbc.ClientDriver' },
-  // H2 鏁版嵁搴�
-  '14': { dbDriver: 'org.h2.Driver' },
-  // 鍏朵粬鏁版嵁搴�
-  '15': { dbDriver: '' },
-};
-const dbUrlMap = {
-  // MySQL 鏁版嵁搴�
-  '1': { dbUrl: 'jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false' },
-  //MySQL5.7+ 鏁版嵁搴�
-  '4': {
-    dbUrl:
-      'jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai',
-  },
-  // Oracle
-  '2': { dbUrl: 'jdbc:oracle:thin:@127.0.0.1:1521:ORCL' },
-  // SQLServer 鏁版嵁搴�
-  '3': { dbUrl: 'jdbc:sqlserver://127.0.0.1:1433;SelectMethod=cursor;DatabaseName=jeecgboot' },
-  // Mariadb 鏁版嵁搴�
-  '5': { dbUrl: 'jdbc:mariadb://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useSSL=false' },
-  // Postgresql 鏁版嵁搴�
-  '6': { dbUrl: 'jdbc:postgresql://127.0.0.1:5432/jeecg-boot' },
-  // 杈炬ⅵ 鏁版嵁搴�
-  '7': { dbUrl: 'jdbc:dm://127.0.0.1:5236/?jeecg-boot&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8' },
-  // 浜哄ぇ閲戜粨 鏁版嵁搴�
-  '8': { dbUrl: 'jdbc:kingbase8://127.0.0.1:54321/jeecg-boot' },
-  // 绁為�� 鏁版嵁搴�
-  '9': { dbUrl: 'jdbc:oscar://192.168.1.125:2003/jeecg-boot' },
-  // SQLite 鏁版嵁搴�
-  '10': { dbUrl: 'jdbc:sqlite://opt/test.db' },
-  // DB2 鏁版嵁搴�
-  '11': { dbUrl: 'jdbc:db2://127.0.0.1:50000/jeecg-boot' },
-  // Hsqldb 鏁版嵁搴�
-  '12': { dbUrl: 'jdbc:hsqldb:hsql://127.0.0.1/jeecg-boot' },
-  // Derby 鏁版嵁搴�
-  '13': { dbUrl: 'jdbc:derby://127.0.0.1:1527/jeecg-boot' },
-  // H2 鏁版嵁搴�
-  '14': { dbUrl: 'jdbc:h2:tcp://127.0.0.1:8082/jeecg-boot' },
-  // 鍏朵粬鏁版嵁搴�
-  '15': { dbUrl: '' },
-};
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鏁版嵁婧愬悕绉�',
-    dataIndex: 'name',
-    width: 200,
-    align: 'left',
-  },
-  {
-    title: '鏁版嵁搴撶被鍨�',
-    dataIndex: 'dbType_dictText',
-    width: 200,
-  },
-  {
-    title: '椹卞姩绫�',
-    dataIndex: 'dbDriver',
-    width: 200,
-  },
-  {
-    title: '鏁版嵁婧愬湴鍧�',
-    dataIndex: 'dbUrl',
-  },
-  {
-    title: '鐢ㄦ埛鍚�',
-    dataIndex: 'dbUsername',
-    width: 200,
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'name',
-    label: '鏁版嵁婧愬悕绉�',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'dbType',
-    label: '鏁版嵁搴撶被鍨�',
-    component: 'JDictSelectTag',
-    colProps: { span: 8 },
-    componentProps: () => {
-      return {
-        dictCode: 'database_type',
-      };
-    },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'id',
-    label: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'code',
-    label: '鏁版嵁婧愮紪鐮�',
-    component: 'Input',
-    required: true,
-    dynamicDisabled: ({ values }) => {
-      return !!values.id;
-    },
-  },
-  {
-    field: 'name',
-    label: '鏁版嵁婧愬悕绉�',
-    component: 'Input',
-    required: true,
-  },
-  {
-    field: 'dbType',
-    label: '鏁版嵁搴撶被鍨�',
-    component: 'JDictSelectTag',
-    required: true,
-    componentProps: ({ formModel }) => {
-      return {
-        dictCode: 'database_type',
-        onChange: (e: any) => {
-          formModel = Object.assign(formModel, dbDriverMap[e], dbUrlMap[e]);
-        },
-      };
-    },
-  },
-  {
-    field: 'dbDriver',
-    label: '椹卞姩绫�',
-    required: true,
-    component: 'Input',
-  },
-  {
-    field: 'dbUrl',
-    label: '鏁版嵁婧愬湴鍧�',
-    required: true,
-    component: 'Input',
-  },
-  {
-    field: 'dbUsername',
-    label: '鐢ㄦ埛鍚�',
-    required: true,
-    component: 'Input',
-  },
-  {
-    field: 'dbPassword',
-    label: '瀵嗙爜',
-    required: true,
-    component: 'InputPassword',
-    slot: 'pwd',
-  },
-  {
-    field: 'remark',
-    label: '澶囨敞',
-    component: 'InputTextArea',
-  },
-];
diff --git a/src/views/monitor/datasource/index.vue b/src/views/monitor/datasource/index.vue
deleted file mode 100644
index f12f5af..0000000
--- a/src/views/monitor/datasource/index.vue
+++ /dev/null
@@ -1,118 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #tableTitle>
-        <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleAdd" style="margin-right: 5px">鏂板</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="mdi:chevron-down"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getActions(record)" />
-      </template>
-    </BasicTable>
-    <DataSourceModal @register="registerModal" @success="reload" />
-  </div>
-</template>
-<script lang="ts" name="monitor-datasource" setup>
-  import { ref } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import { getDataSourceList, deleteDataSource, batchDeleteDataSource, getExportUrl, getImportUrl } from './datasource.api';
-  import { columns, searchFormSchema } from './datasource.data';
-  import DataSourceModal from './DataSourceModal.vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  const { createMessage } = useMessage();
-  const [registerModal, { openModal }] = useModal();
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext, onImportXls, onExportXls } = useListPage({
-    designScope: 'quartz-template',
-    tableProps: {
-      title: '浠诲姟鍒楄〃',
-      api: getDataSourceList,
-      columns: columns,
-      formConfig: {
-        labelWidth: 120,
-        schemas: searchFormSchema,
-        fieldMapToTime: [['fieldTime', ['beginDate', 'endDate'], 'YYYY-MM-DD HH:mm:ss']],
-      },
-    },
-    exportConfig: {
-      name: '鏁版嵁婧愬垪琛�',
-      url: getExportUrl,
-    },
-    importConifg: {
-      url: getImportUrl,
-    },
-  });
-
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鎿嶄綔鍒楀畾涔�
-   * @param record
-   */
-  function getActions(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleAdd() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  function handleEdit(record) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteDataSource({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeleteDataSource({ ids: selectedRowKeys.value }, reload);
-  }
-</script>
diff --git a/src/views/monitor/disk/DiskInfo.vue b/src/views/monitor/disk/DiskInfo.vue
deleted file mode 100644
index 7154678..0000000
--- a/src/views/monitor/disk/DiskInfo.vue
+++ /dev/null
@@ -1,37 +0,0 @@
-<template>
-  <Skeleton v-if="spinning" active />
-  <div v-else>
-    <a-row>
-      <template v-if="diskInfo && diskInfo.length > 0">
-        <a-col :span="6" v-for="(item, index) in diskInfo" :key="'diskInfo' + index">
-          <gauge :data="item"></gauge>
-        </a-col>
-      </template>
-    </a-row>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { onMounted, ref } from 'vue';
-  import { Skeleton } from 'ant-design-vue';
-  import { queryDiskInfo } from './disk.api';
-  import gauge from './gauge.vue';
-
-  const diskInfo = ref([]);
-  const spinning = ref(true);
-
-  function loadRedisInfo() {
-    queryDiskInfo()
-      .then((res) => {
-        for (let i = 0; i < res.length; i++) {
-          // 褰撳墠绠楁硶绠楃殑鏄鐩樼殑宸蹭娇鐢ㄧ┖闂�
-          res[i].restPPT = 100 - parseInt(String((res[i].rest / res[i].max) * 100));
-        }
-        diskInfo.value = res;
-      })
-      .finally(() => (spinning.value = false));
-  }
-
-  onMounted(() => {
-    loadRedisInfo();
-  });
-</script>
diff --git a/src/views/monitor/disk/disk.api.ts b/src/views/monitor/disk/disk.api.ts
deleted file mode 100644
index ce01231..0000000
--- a/src/views/monitor/disk/disk.api.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  queryDiskInfo = '/sys/actuator/redis/queryDiskInfo',
-}
-
-/**
- * 璇︾粏淇℃伅
- */
-export const queryDiskInfo = () => {
-  return defHttp.get({ url: Api.queryDiskInfo }, { successMessageMode: 'none' });
-};
diff --git a/src/views/monitor/disk/gauge.vue b/src/views/monitor/disk/gauge.vue
deleted file mode 100644
index 89224cf..0000000
--- a/src/views/monitor/disk/gauge.vue
+++ /dev/null
@@ -1,82 +0,0 @@
-<template>
-  <div>
-    <div ref="chartRef" style="width: 100%; height: 400px"></div>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { onMounted, ref, reactive, Ref, defineProps } from 'vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useECharts } from '/@/hooks/web/useECharts';
-  import { GaugeChart } from 'echarts/charts';
-
-  const props = defineProps({ data: {} });
-  const dataSource = ref([]);
-  const chartRef = ref<HTMLDivElement | null>(null);
-  const { setOptions, echarts } = useECharts(chartRef as Ref<HTMLDivElement>);
-  const loading = ref(false);
-  const { createMessage } = useMessage();
-  const option = reactive({
-    series: [
-      {
-        type: 'gauge',
-        progress: {
-          show: true,
-          width: 18,
-        },
-        axisLine: {
-          lineStyle: {
-            width: 18,
-          },
-        },
-        axisTick: {
-          show: true,
-        },
-        splitLine: {
-          length: 15,
-          lineStyle: {
-            width: 2,
-            color: '#999',
-          },
-        },
-        axisLabel: {
-          distance: 25,
-          color: '#999',
-          fontSize: 15,
-        },
-        anchor: {
-          show: true,
-          showAbove: true,
-          size: 25,
-          itemStyle: {
-            borderWidth: 10,
-          },
-        },
-        title: {},
-        detail: {
-          valueAnimation: true,
-          fontSize: 50,
-          formatter: '{value}%',
-          offsetCenter: [0, '80%'],
-        },
-        data: [
-          {
-            value: 70,
-            name: '鏈湴纾佺洏',
-          },
-        ],
-      },
-    ],
-  });
-
-  function initCharts() {
-    option.series[0].data[0].name = props.data.name;
-    option.series[0].data[0].value = props.data.restPPT;
-    setOptions(option);
-  }
-
-  onMounted(() => {
-    console.info(props.data);
-    echarts.use(GaugeChart);
-    initCharts();
-  });
-</script>
diff --git a/src/views/monitor/log/index.vue b/src/views/monitor/log/index.vue
deleted file mode 100644
index 1c07137..0000000
--- a/src/views/monitor/log/index.vue
+++ /dev/null
@@ -1,74 +0,0 @@
-<template>
-  <BasicTable @register="registerTable" :searchInfo="searchInfo" :columns="logColumns">
-    <template #tableTitle>
-      <a-tabs defaultActiveKey="1" @change="tabChange" size="small">
-        <a-tab-pane tab="鐧诲綍鏃ュ織" key="1"></a-tab-pane>
-        <a-tab-pane tab="鎿嶄綔鏃ュ織" key="2"></a-tab-pane>
-      </a-tabs>
-    </template>
-    <template #expandedRowRender="{ record }">
-      <div v-if="searchInfo.logType == 2">
-        <div style="margin-bottom: 5px">
-          <a-badge status="success" style="vertical-align: middle" />
-          <span style="vertical-align: middle">璇锋眰鏂规硶:{{ record.method }}</span></div
-        >
-        <div>
-          <a-badge status="processing" style="vertical-align: middle" />
-          <span style="vertical-align: middle">璇锋眰鍙傛暟:{{ record.requestParam }}</span></div
-        >
-      </div>
-    </template>
-  </BasicTable>
-</template>
-<script lang="ts" name="monitor-log" setup>
-  import { ref } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { getLogList } from './log.api';
-  import { columns, searchFormSchema, operationLogColumn } from './log.data';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  const { createMessage } = useMessage();
-  const checkedKeys = ref<Array<string | number>>([]);
-
-  const logColumns = ref<any>(columns);
-  const searchInfo = { logType: '1' };
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext } = useListPage({
-    designScope: 'user-list',
-    tableProps: {
-      title: '鏃ュ織鍒楄〃',
-      api: getLogList,
-      expandRowByClick: true,
-      showActionColumn: false,
-      rowSelection: {
-        columnWidth: 20,
-      },
-      formConfig: {
-        schemas: searchFormSchema,
-        fieldMapToTime: [['fieldTime', ['createTime_begin', 'createTime_end'], 'YYYY-MM-DD']],
-      },
-    },
-  });
-
-  const [registerTable, { reload }] = tableContext;
-
-  // 鏃ュ織绫诲瀷
-  function tabChange(key) {
-    searchInfo.logType = key;
-    //update-begin---author:wangshuai ---date:20220506  for锛歔VUEN-943]vue3鏃ュ織绠$悊鍒楄〃缈昏瘧涓嶅------------
-    if (key == '1') {
-      logColumns.value = columns;
-    } else {
-      logColumns.value = operationLogColumn;
-    }
-    //update-end---author:wangshuai ---date:20220506  for锛歔VUEN-943]vue3鏃ュ織绠$悊鍒楄〃缈昏瘧涓嶅--------------
-    reload();
-  }
-
-  /**
-   * 閫夋嫨浜嬩欢
-   */
-  function onSelectChange(selectedRowKeys: (string | number)[]) {
-    checkedKeys.value = selectedRowKeys;
-  }
-</script>
diff --git a/src/views/monitor/log/log.api.ts b/src/views/monitor/log/log.api.ts
deleted file mode 100644
index 9676b58..0000000
--- a/src/views/monitor/log/log.api.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  list = '/sys/log/list',
-}
-
-/**
- * 鏌ヨ鏃ュ織鍒楄〃
- * @param params
- */
-export const getLogList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
diff --git a/src/views/monitor/log/log.data.ts b/src/views/monitor/log/log.data.ts
deleted file mode 100644
index 6659322..0000000
--- a/src/views/monitor/log/log.data.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鏃ュ織鍐呭',
-    dataIndex: 'logContent',
-    width: 100,
-    align: 'left',
-  },
-  {
-    title: '鎿嶄綔浜篒D',
-    dataIndex: 'userid',
-    width: 80,
-  },
-  {
-    title: '鎿嶄綔浜�',
-    dataIndex: 'username',
-    width: 80,
-  },
-  {
-    title: 'IP',
-    dataIndex: 'ip',
-    width: 80,
-  },
-  {
-    title: '鑰楁椂(姣)',
-    dataIndex: 'costTime',
-    width: 80,
-  },
-  {
-    title: '鍒涘缓鏃堕棿',
-    dataIndex: 'createTime',
-    sorter: true,
-    width: 80,
-  },
-  {
-    title: '鏃ュ織绫诲瀷',
-    dataIndex: 'logType_dictText',
-    width: 60,
-  },
-];
-
-/**
- * 鎿嶄綔鏃ュ織闇�瑕佹搷浣滅被鍨�
- */
-export const operationLogColumn: BasicColumn[] = [
-  ...columns,
-  {
-    title: '鎿嶄綔绫诲瀷',
-    dataIndex: 'operateType_dictText',
-    width: 40,
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'keyWord',
-    label: '鎼滅储鏃ュ織',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'fieldTime',
-    component: 'RangePicker',
-    label: '鍒涘缓鏃堕棿',
-    componentProps: {
-      valueType: 'Date',
-    },
-    colProps: {
-      span: 8,
-    },
-  },
-];
diff --git a/src/views/monitor/mynews/DetailModal.vue b/src/views/monitor/mynews/DetailModal.vue
deleted file mode 100644
index 467e9f9..0000000
--- a/src/views/monitor/mynews/DetailModal.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="鏌ョ湅璇︽儏" :minHeight="600" :showCancelBtn="false" :showOkBtn="false" :height="88">
-    <a-card class="daily-article">
-      <a-card-meta :title="content.titile" :description="'鍙戝竷浜猴細' + content.sender + ' 鍙戝竷鏃堕棿锛� ' + content.sendTime"> </a-card-meta>
-      <a-divider />
-      <span v-html="content.msgContent" class="article-content"></span>
-      
-      <div>
-        <a-button v-if="hasHref" @click="jumpToHandlePage">鍓嶅線鍔炵悊<ArrowRightOutlined /></a-button>
-      </div>
-    </a-card>
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { propTypes } from '/@/utils/propTypes';
-  import { ArrowRightOutlined } from '@ant-design/icons-vue';
-  import { useRouter } from 'vue-router'
-  import xss from 'xss'
-  const router = useRouter()
-  
-  import { ref, unref } from 'vue';
-  const isUpdate = ref(true);
-  const content = ref({});
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //data.record.msgContent = '<p>2323</p><input onmouseover=alert(1)>xss test';
-      //update-begin-author:taoyan date:2022-7-14 for: VUEN-1702 銆愮姝㈤棶棰樸�憇ql娉ㄥ叆婕忔礊
-      if(data.record.msgContent){
-        data.record.msgContent = xss(data.record.msgContent)
-      }
-      //update-end-author:taoyan date:2022-7-14 for: VUEN-1702 銆愮姝㈤棶棰樸�憇ql娉ㄥ叆婕忔礊
-      content.value = data.record;
-      showHrefButton();
-    }
-  });
-  
-  const hasHref = ref(false)
-  //鏌ョ湅娑堟伅璇︽儏鍙互璺宠浆
-  function showHrefButton(){
-    if(content.value.busId){
-      hasHref.value = true;
-    }
-  }
-  //璺宠浆鑷冲姙鐞嗛〉闈�
-  function jumpToHandlePage(){
-    let temp:any = content.value
-    if(temp.busId){
-      //杩欎釜busId鏄� 浠诲姟ID 
-      let jsonStr = temp.msgAbstract;
-      let query = {};
-      try {
-        if(jsonStr){
-          let temp = JSON.parse(jsonStr)
-          if(temp){
-            Object.keys(temp).map(k=>{
-              query[k] = temp[k]
-            });
-          }
-        }
-      }catch(e){
-        console.log('鍙傛暟瑙f瀽寮傚父', e)
-      }
-      
-      console.log('query', query, jsonStr)
-      console.log('busId', temp.busId)
-      
-      if(Object.keys(query).length>0){
-        // taskId taskDefKey procInsId
-        router.push({ path: '/task/handle/' + temp.busId, query: query })
-      }else{
-        router.push({ path: '/task/handle/' + temp.busId })
-      }
-    }
-    closeModal();
-  }
-  
-</script>
-
-<style scoped lang="less">
-  .detail-iframe {
-    border: 0;
-    width: 100%;
-    height: 100%;
-    min-height: 600px;
-  }
-</style>
diff --git a/src/views/monitor/mynews/DynamicNotice.vue b/src/views/monitor/mynews/DynamicNotice.vue
deleted file mode 100644
index 7ff8c4e..0000000
--- a/src/views/monitor/mynews/DynamicNotice.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-<template>
-  <component :is="currentModal" :formData="formData" v-model:visible="modalVisible"></component>
-</template>
-<script setup lang="ts" name="dynamic-notice">
-  import { ref, defineExpose, shallowRef, ComponentOptions, nextTick, defineAsyncComponent } from 'vue';
-  const props = defineProps({
-    path: { type: String, default: '' },
-    formData: { type: Object, default: {} },
-  });
-  const modalVisible = ref<Boolean>(false);
-  const currentModal = shallowRef<Nullable<ComponentOptions>>(null);
-  const formData = ref<any>(props.formData);
-
-  const componentType = {
-  };
-
-  /**
-   * 璺熸崲缁勪欢鍜屼紶鍊间簨浠�
-   */
-  function detail() {
-    setTimeout(() => {
-      if (props.path) {
-        nextTick(() => {
-          currentModal.value = componentType[props.path];
-          formData.value = props.formData;
-          modalVisible.value = true;
-        });
-      }
-    }, 200);
-  }
-
-  defineExpose({
-    detail,
-  });
-</script>
diff --git a/src/views/monitor/mynews/index.vue b/src/views/monitor/mynews/index.vue
deleted file mode 100644
index ae2a5fe..0000000
--- a/src/views/monitor/mynews/index.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable" :searchInfo="searchInfo">
-      <template #tableTitle>
-        <a-button type="primary" @click="handlerReadAllMsg">鍏ㄩ儴鏍囨敞宸茶</a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getActions(record)" />
-      </template>
-    </BasicTable>
-    <DetailModal @register="register" />
-  </div>
-</template>
-<script lang="ts" name="monitor-mynews" setup>
-  import { ref, onMounted } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import DetailModal from './DetailModal.vue';
-  import { getMyNewsList, editCementSend, syncNotic, readAllMsg, getOne } from './mynews.api';
-  import { columns, searchFormSchema } from './mynews.data';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { getToken } from '/@/utils/auth';
-  import { useModal } from '/@/components/Modal';
-  import { useGlobSetting } from '/@/hooks/setting';
-  const glob = useGlobSetting();
-  const { createMessage } = useMessage();
-  const checkedKeys = ref<Array<string | number>>([]);
-  const content = ref({});
-  const searchInfo = { logType: '1' };
-  const [register, { openModal: openDetail }] = useModal();
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { getLogList } from '/@/views/monitor/log/log.api';
-  import { useRouter } from 'vue-router';
-  import { useAppStore } from '/@/store/modules/app';
-  import { useMessageHref } from '/@/views/system/message/components/useSysMessage';
-  const appStore = useAppStore();
-
-  const {goPage} = useMessageHref()
-
-  const { prefixCls, tableContext } = useListPage({
-    designScope: 'mynews-list',
-    tableProps: {
-      title: '鎴戠殑娑堟伅',
-      api: getMyNewsList,
-      columns: columns,
-      formConfig: {
-        schemas: searchFormSchema,
-        fieldMapToTime: [['fieldTime', ['createTime_begin', 'createTime_end'], 'YYYY-MM-DD HH:mm:ss']],
-      },
-    },
-  });
-  const [registerTable, { reload }] = tableContext;
-  /**
-   * 鎿嶄綔鍒楀畾涔�
-   * @param record
-   */
-  function getActions(record) {
-    return [
-      {
-        label: '鏌ョ湅',
-        onClick: handleDetail.bind(null, record),
-      },
-    ];
-  }
-
-  /**
-   * 鏌ョ湅
-   */
-  function handleDetail(record) {
-    let anntId = record.anntId;
-    editCementSend({ anntId: anntId }).then((res) => {
-      reload();
-      syncNotic({ anntId: anntId });
-    });
-    const openModalFun = ()=>{
-      openDetail(true, {
-        record,
-        isUpdate: true,
-      });
-    }
-    goPage(record, openModalFun);
-   
-  }
-  // 鏃ュ織绫诲瀷
-  function callback(key) {
-    searchInfo.logType = key;
-    reload();
-  }
-
-  //鍏ㄩ儴鏍囪宸茶
-  function handlerReadAllMsg() {
-    readAllMsg({}, reload);
-  }
-
-  /**
-   * 閫夋嫨浜嬩欢
-   */
-  function onSelectChange(selectedRowKeys: (string | number)[]) {
-    checkedKeys.value = selectedRowKeys;
-  }
-  
-  //update-begin-author:taoyan date:2022-8-23 for: 娑堟伅璺宠浆锛屾墦寮�璇︽儏琛ㄥ崟
-  onMounted(()=>{
-    initHrefModal();
-  });
-  function initHrefModal(){
-    let params = appStore.getMessageHrefParams;
-    if(params){
-      let anntId = params.id;
-      if(anntId){
-        editCementSend({ anntId: anntId }).then(() => {
-          reload();
-          syncNotic({ anntId: anntId });
-        });
-      }
-      let detailId = params.detailId;
-      if(detailId){
-        getOne(detailId).then(data=>{
-          console.log('getOne', data)
-          openDetail(true, {
-            record: data,
-            isUpdate: true,
-          });
-          appStore.setMessageHrefParams('')
-        })
-      }
-    }
-  }
-  //update-end-author:taoyan date:2022-8-23 for: 娑堟伅璺宠浆锛屾墦寮�璇︽儏琛ㄥ崟
-
-  
-</script>
diff --git a/src/views/monitor/mynews/mynews.api.ts b/src/views/monitor/mynews/mynews.api.ts
deleted file mode 100644
index c9c7724..0000000
--- a/src/views/monitor/mynews/mynews.api.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/sys/sysAnnouncementSend/getMyAnnouncementSend',
-  editCementSend = '/sys/sysAnnouncementSend/editByAnntIdAndUserId',
-  readAllMsg = '/sys/sysAnnouncementSend/readAll',
-  syncNotic = '/sys/annountCement/syncNotic',
-  getOne = '/sys/sysAnnouncementSend/getOne',
-}
-
-/**
- * 鏌ヨ娑堟伅鍒楄〃
- * @param params
- */
-export const getMyNewsList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
-
-/**
- * 鏇存柊鐢ㄦ埛绯荤粺娑堟伅闃呰鐘舵��
- * @param params
- */
-export const editCementSend = (params) => {
-  return defHttp.put({ url: Api.editCementSend, params });
-};
-
-/**
- * 涓�閿凡璇�
- * @param params
- */
-export const readAllMsg = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鎿嶄綔',
-    content: '鏄惁鍏ㄩ儴鏍囨敞宸茶?',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.put({ url: Api.readAllMsg, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-
-/**
- * 鍚屾娑堟伅
- * @param params
- */
-export const syncNotic = (params) => {
-  return defHttp.get({ url: Api.syncNotic, params });
-};
-
-/**
- * 鏍规嵁娑堟伅鍙戦�佽褰旾D鑾峰彇娑堟伅鍐呭
- * @param sendId
- */
-export const getOne = (sendId) => {
-  return defHttp.get({ url: Api.getOne, params:{sendId} });
-};
-
diff --git a/src/views/monitor/mynews/mynews.data.ts b/src/views/monitor/mynews/mynews.data.ts
deleted file mode 100644
index 540cee0..0000000
--- a/src/views/monitor/mynews/mynews.data.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-import { render } from '/@/utils/common/renderUtils';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鏍囬',
-    dataIndex: 'titile',
-    width: 100,
-    align: 'left',
-  },
-  {
-    title: '娑堟伅绫诲瀷',
-    dataIndex: 'msgCategory',
-    width: 80,
-    customRender: ({ text }) => {
-      return render.renderDictNative(
-        text,
-        [
-          { label: '閫氱煡鍏憡', value: '1', color: 'blue' },
-          { label: '绯荤粺娑堟伅', value: '2' },
-        ],
-        true
-      );
-    },
-  },
-  {
-    title: '鍙戝竷浜�',
-    dataIndex: 'sender',
-    width: 80,
-  },
-  {
-    title: '鍙戝竷鏃堕棿',
-    dataIndex: 'sendTime',
-    width: 80,
-  },
-  {
-    title: '浼樺厛绾�',
-    dataIndex: 'priority',
-    width: 80,
-    customRender: ({ text }) => {
-      const color = text == 'L' ? 'blue' : text == 'M' ? 'yellow' : 'red';
-      return render.renderTag(render.renderDict(text, 'priority'), color);
-    },
-  },
-  {
-    title: '闃呰鐘舵��',
-    dataIndex: 'readFlag',
-    width: 80,
-    customRender: ({ text }) => {
-      return render.renderDictNative(
-        text,
-        [
-          { label: '鏈', value: '0', color: 'red' },
-          { label: '宸茶', value: '1' },
-        ],
-        true
-      );
-    },
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'titile',
-    label: '鏍囬',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'sender',
-    label: '鍙戝竷浜�',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-];
diff --git a/src/views/monitor/quartz/QuartzModal.vue b/src/views/monitor/quartz/QuartzModal.vue
deleted file mode 100644
index 285dc22..0000000
--- a/src/views/monitor/quartz/QuartzModal.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit" width="40%">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './quartz.data';
-  import { saveOrUpdateQuartz, getQuartzById } from './quartz.api';
-  import { isJsonObjectString } from '/@/utils/is';
-  // Emits澹版槑
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    // labelWidth: 150,
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //鑾峰彇璇︽儏
-      //data.record = await getQuartzById({id: data.record.id});
-      try {
-        data.record.paramterType = isJsonObjectString(data?.record?.parameter) ? 'json' : 'string';
-      } catch (e) {
-        console.log(e);
-      }
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-  //璁剧疆鏍囬
-  const title = computed(() => (!unref(isUpdate) ? '鏂板浠诲姟' : '缂栬緫浠诲姟'));
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit(v) {
-    try {
-      let values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateQuartz(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/monitor/quartz/index.vue b/src/views/monitor/quartz/index.vue
deleted file mode 100644
index dcfcc30..0000000
--- a/src/views/monitor/quartz/index.vue
+++ /dev/null
@@ -1,177 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #tableTitle>
-        <a-button preIcon="ant-design:plus-outlined" type="primary" @click="handleAdd" style="margin-right: 5px">鏂板</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="mdi:chevron-down"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getActions(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-    </BasicTable>
-    <QuartzModal @register="registerModal" @success="reload" />
-  </div>
-</template>
-<script lang="ts" name="monitor-quartz" setup>
-  import { ref } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { getQuartzList, deleteQuartz, batchDeleteQuartz, executeImmediately, resumeJob, pauseJob, getExportUrl, getImportUrl } from './quartz.api';
-  import { columns, searchFormSchema } from './quartz.data';
-  import QuartzModal from './QuartzModal.vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const { createMessage } = useMessage();
-  const [registerModal, { openModal }] = useModal();
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-    designScope: 'quartz-template',
-    tableProps: {
-      title: '浠诲姟鍒楄〃',
-      api: getQuartzList,
-      columns: columns,
-      actionColumn: {
-        width: 180,
-      },
-      formConfig: {
-        labelWidth: 120,
-        schemas: searchFormSchema,
-        fieldMapToTime: [['fieldTime', ['beginDate', 'endDate'], 'YYYY-MM-DD HH:mm:ss']],
-      },
-    },
-    exportConfig: {
-      name: '瀹氭椂浠诲姟鍒楄〃',
-      url: getExportUrl,
-    },
-    importConfig: {
-      url: getImportUrl,
-    },
-  });
-
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鎿嶄綔鍒楀畾涔�
-   * @param record
-   */
-  function getActions(record) {
-    return [
-      {
-        label: '鍚姩',
-        popConfirm: {
-          title: '鏄惁鍚姩閫変腑浠诲姟?',
-          confirm: handlerResume.bind(null, record),
-        },
-        ifShow: (_action) => {
-          return record.status == -1;
-        },
-      },
-      {
-        label: '鍋滄',
-        popConfirm: {
-          title: '鏄惁鏆傚仠閫変腑浠诲姟?',
-          confirm: handlerPause.bind(null, record),
-        },
-        ifShow: (_action) => {
-          return record.status == 0;
-        },
-      },
-    ];
-  }
-
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record) {
-    return [
-      {
-        label: '绔嬪嵆鎵ц',
-        popConfirm: {
-          title: '鏄惁绔嬪嵆鎵ц浠诲姟?',
-          confirm: handlerExecute.bind(null, record),
-        },
-      },
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleAdd() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  function handleEdit(record) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteQuartz({ id: record.id }, reload);
-  }
-
-  /**
-   * 绔嬪嵆鎵ц
-   */
-  async function handlerExecute(record) {
-    await executeImmediately({ id: record.id }, reload);
-  }
-
-  /**
-   * 鏆傚仠
-   */
-  async function handlerPause(record) {
-    await pauseJob({ id: record.id }, reload);
-  }
-
-  /**
-   * 鍚姩
-   */
-  async function handlerResume(record) {
-    await resumeJob({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeleteQuartz({ ids: selectedRowKeys.value }, reload);
-  }
-</script>
diff --git a/src/views/monitor/quartz/quartz.api.ts b/src/views/monitor/quartz/quartz.api.ts
deleted file mode 100644
index 1b89b27..0000000
--- a/src/views/monitor/quartz/quartz.api.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/sys/quartzJob/list',
-  save = '/sys/quartzJob/add',
-  edit = '/sys/quartzJob/edit',
-  get = '/sys/quartzJob/queryById',
-  pause = '/sys/quartzJob/pause',
-  resume = '/sys/quartzJob/resume',
-  delete = '/sys/quartzJob/delete',
-  exportXlsUrl = '/sys/quartzJob/exportXls',
-  importExcelUrl = '/sys/quartzJob/importExcel',
-  execute = '/sys/quartzJob/execute',
-  deleteBatch = '/sys/quartzJob/deleteBatch',
-}
-
-/**
- * 瀵煎嚭api
- */
-export const getExportUrl = Api.exportXlsUrl;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcelUrl;
-/**
- * 鏌ヨ浠诲姟鍒楄〃
- * @param params
- */
-export const getQuartzList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
-
-/**
- * 淇濆瓨鎴栬�呮洿鏂颁换鍔�
- * @param params
- */
-export const saveOrUpdateQuartz = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-
-/**
- * 鏌ヨ浠诲姟璇︽儏
- * @param params
- */
-export const getQuartzById = (params) => {
-  return defHttp.get({ url: Api.get, params });
-};
-
-/**
- * 鍒犻櫎浠诲姟
- * @param params
- */
-export const deleteQuartz = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.delete, data: params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 鍚姩
- * @param params
- */
-export const resumeJob = (params, handleSuccess) => {
-  return defHttp.get({ url: Api.resume, params }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 鏆傚仠
- * @param params
- */
-export const pauseJob = (params, handleSuccess) => {
-  return defHttp.get({ url: Api.pause, params }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 绔嬪嵆鎵ц
- * @param params
- */
-export const executeImmediately = (params, handleSuccess) => {
-  return defHttp.get({ url: Api.execute, params }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 鎵归噺鍒犻櫎浠诲姟
- * @param params
- */
-export const batchDeleteQuartz = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
diff --git a/src/views/monitor/quartz/quartz.data.ts b/src/views/monitor/quartz/quartz.data.ts
deleted file mode 100644
index 10d94f7..0000000
--- a/src/views/monitor/quartz/quartz.data.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-import { render } from '/@/utils/common/renderUtils';
-import { JCronValidator } from '/@/components/Form';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '浠诲姟绫诲悕',
-    dataIndex: 'jobClassName',
-    width: 200,
-    align: 'left',
-  },
-  {
-    title: 'Cron琛ㄨ揪寮�',
-    dataIndex: 'cronExpression',
-    width: 200,
-  },
-  {
-    title: '鍙傛暟',
-    dataIndex: 'parameter',
-    width: 200,
-  },
-  {
-    title: '鎻忚堪',
-    dataIndex: 'description',
-    width: 200,
-  },
-  {
-    title: '鐘舵��',
-    dataIndex: 'status',
-    width: 100,
-    customRender: ({ text }) => {
-      const color = text == '0' ? 'green' : text == '-1' ? 'red' : 'gray';
-      return render.renderTag(render.renderDict(text, 'quartz_status'), color);
-    },
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'jobClassName',
-    label: '浠诲姟绫诲悕',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'status',
-    label: '浠诲姟鐘舵��',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'quartz_status',
-      stringToNumber: true,
-    },
-    colProps: { span: 8 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'id',
-    label: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'jobClassName',
-    label: '浠诲姟绫诲悕',
-    component: 'Input',
-    required: true,
-  },
-  {
-    field: 'cronExpression',
-    label: 'Cron琛ㄨ揪寮�',
-    component: 'JEasyCron',
-    defaultValue: '* * * * * ? *',
-    rules: [{ required: true, message: '璇疯緭鍏ron琛ㄨ揪寮�' }, { validator: JCronValidator }],
-  },
-  {
-    field: 'paramterType',
-    label: '鍙傛暟绫诲瀷',
-    component: 'Select',
-    defaultValue: 'string',
-    componentProps: {
-      options: [
-        { label: '瀛楃涓�', value: 'string' },
-        { label: 'JSON瀵硅薄', value: 'json' },
-      ],
-    },
-  },
-  {
-    field: 'parameter',
-    label: '鍙傛暟',
-    component: 'InputTextArea',
-    ifShow: ({ values }) => {
-      return values.paramterType == 'string';
-    },
-  },
-  {
-    field: 'parameter',
-    label: '鍙傛暟',
-    component: 'JAddInput',
-    helpMessage: '閿�煎褰㈠紡濉啓',
-    ifShow: ({ values }) => {
-      return values.paramterType == 'json';
-    },
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'quartz_status',
-      type: 'radioButton',
-      stringToNumber: true,
-      dropdownStyle: {
-        maxHeight: '6vh',
-      },
-    },
-  },
-  {
-    field: 'description',
-    label: '鎻忚堪',
-    component: 'InputTextArea',
-  },
-];
diff --git a/src/views/monitor/redis/index.vue b/src/views/monitor/redis/index.vue
deleted file mode 100644
index 9b9da3c..0000000
--- a/src/views/monitor/redis/index.vue
+++ /dev/null
@@ -1,189 +0,0 @@
-<template>
-  <div class="p-4">
-    <a-card>
-      <!-- Redis 淇℃伅瀹炴椂鐩戞帶 -->
-      <a-row :gutter="8">
-        <a-col :sm="24" :xl="12">
-          <div ref="chartRef" style="width: 100%; height: 300px"></div>
-        </a-col>
-        <a-col :sm="24" :xl="12">
-          <div ref="chartRef2" style="width: 100%; height: 300px"></div>
-        </a-col>
-      </a-row>
-    </a-card>
-
-    <BasicTable @register="registerTable" :api="getInfo"></BasicTable>
-  </div>
-</template>
-<script lang="ts" name="monitor-redis" setup>
-  import { onMounted, ref, reactive, Ref } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { getInfo, getRedisInfo } from './redis.api';
-  import dayjs from 'dayjs';
-  import { columns } from './redis.data';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useECharts } from '/@/hooks/web/useECharts';
-
-  const dataSource = ref([]);
-  const chartRef = ref<HTMLDivElement | null>(null);
-  const chartRef2 = ref<HTMLDivElement | null>(null);
-  const { setOptions, echarts } = useECharts(chartRef as Ref<HTMLDivElement>);
-  const { setOptions: setOptions2, echarts: echarts2 } = useECharts(chartRef2 as Ref<HTMLDivElement>);
-  const loading = ref(false);
-  let timer = null;
-  const { createMessage } = useMessage();
-  const key = reactive({
-    title: {
-      text: 'Redis Key 瀹炴椂鏁伴噺锛堜釜锛�',
-    },
-    xAxis: {
-      type: 'category',
-      boundaryGap: false,
-      data: [],
-    },
-    yAxis: {
-      type: 'value',
-    },
-    series: [
-      {
-        data: [],
-        type: 'line',
-        areaStyle: {
-          color: '#ff6987',
-        },
-        lineStyle: {
-          color: '#dc143c',
-          width: 10,
-          type: 'solid',
-        },
-      },
-    ],
-  });
-  const memory = reactive({
-    title: {
-      text: 'Redis 鍐呭瓨瀹炴椂鍗犵敤鎯呭喌锛圞B锛�',
-    },
-    xAxis: {
-      type: 'category',
-      boundaryGap: false,
-      data: [],
-    },
-    yAxis: {
-      type: 'value',
-    },
-    series: [
-      {
-        data: [],
-        type: 'line',
-        areaStyle: {
-          color: '#74bcff',
-        },
-        lineStyle: {
-          color: '#1890ff',
-          width: 10,
-          type: 'solid',
-        },
-      },
-    ],
-  });
-
-  const [registerTable, { reload }] = useTable({
-    columns,
-    showIndexColumn: false,
-    pagination: false,
-    bordered: true,
-  });
-
-  // 鑾峰彇涓�缁勬暟鎹腑鏈�澶у拰鏈�灏忕殑鍊�
-  function getMaxAndMin(dataSource, field) {
-    let maxValue = null,
-      minValue = null;
-    dataSource.forEach((item) => {
-      let value = Number.parseInt(item[field]);
-      // max
-      if (maxValue == null) {
-        maxValue = value;
-      } else if (value > maxValue) {
-        maxValue = value;
-      }
-      // min
-      if (minValue == null) {
-        minValue = value;
-      } else if (value < minValue) {
-        minValue = value;
-      }
-    });
-    return [maxValue, minValue];
-  }
-
-  function loadRedisInfo() {
-    getInfo().then((res) => {
-      dataSource.value = res.result;
-    });
-  }
-
-  function initCharts() {
-    setOptions(memory);
-    setOptions2(key);
-  }
-
-  /** 寮�鍚畾鏃跺櫒 */
-  function openTimer() {
-    loadData();
-    closeTimer();
-    timer = setInterval(() => {
-      loadData();
-    }, 5000);
-  }
-
-  /** 鍏抽棴瀹氭椂鍣� */
-  function closeTimer() {
-    if (timer) clearInterval(timer);
-  }
-
-  function loadData() {
-    getRedisInfo()
-      .then((res) => {
-        let time = dayjs().format('hh:mm:ss');
-        let [{ dbSize: currentSize }, memoryInfo] = res;
-        let currentMemory = memoryInfo.used_memory / 1000;
-        // push 鏁版嵁
-        key.xAxis.data.push(time);
-        key.series[0].data.push(currentSize);
-        memory.xAxis.data.push(time);
-        memory.series[0].data.push(currentMemory);
-        // 鏈�澶ч暱搴︿负6
-        if (key.series[0].data.length > 6) {
-          key.xAxis.data.splice(0, 1);
-          key.series[0].data.splice(0, 1);
-          memory.xAxis.data.splice(0, 1);
-          memory.series[0].data.splice(0, 1);
-        }
-        setOptions(memory, false);
-        setOptions2(key, false);
-
-        // 璁$畻 Key 鏈�澶ф渶灏忓��
-        //let keyPole = getMaxAndMin(key.dataSource, 'y');
-        //key.max = Math.floor(keyPole[0]) + 10;
-        //key.min = Math.floor(keyPole[1]) - 10;
-        //if (key.min < 0) this.key.min = 0;
-
-        // 璁$畻 Memory 鏈�澶ф渶灏忓��
-        //let memoryPole = getMaxAndMin(memory.dataSource, 'y');
-        //memory.max = Math.floor(memoryPole[0]) + 100;
-        //memory.min = Math.floor(memoryPole[1]) - 100;
-        //if (memory.min < 0) memory.min = 0;
-      })
-      .catch((e) => {
-        //closeTimer()
-      });
-  }
-
-  onMounted(() => {
-    initCharts();
-    openTimer();
-    setTimeout(() => {
-      loadData();
-    }, 1000);
-  });
-</script>
diff --git a/src/views/monitor/redis/redis.api.ts b/src/views/monitor/redis/redis.api.ts
deleted file mode 100644
index 09734f3..0000000
--- a/src/views/monitor/redis/redis.api.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  keysSize = '/sys/actuator/redis/keysSize',
-  memoryInfo = '/sys/actuator/redis/memoryInfo',
-  info = '/sys/actuator/redis/info',
-}
-
-/**
- * key涓暟
- */
-export const getKeysSize = () => {
-  return defHttp.get({ url: Api.keysSize }, { isTransformResponse: false });
-};
-
-/**
- * 鍐呭瓨淇℃伅
- */
-export const getMemoryInfo = () => {
-  return defHttp.get({ url: Api.memoryInfo }, { isTransformResponse: false });
-};
-
-/**
- * 璇︾粏淇℃伅
- */
-export const getInfo = () => {
-  return defHttp.get({ url: Api.info });
-};
-
-export const getRedisInfo = () => {
-  return Promise.all([getKeysSize(), getMemoryInfo()]);
-};
diff --git a/src/views/monitor/redis/redis.data.ts b/src/views/monitor/redis/redis.data.ts
deleted file mode 100644
index d370f94..0000000
--- a/src/views/monitor/redis/redis.data.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-
-export const columns: BasicColumn[] = [
-  {
-    title: 'Key',
-    dataIndex: 'key',
-    width: 100,
-  },
-  {
-    title: 'Description',
-    dataIndex: 'description',
-    width: 80,
-  },
-  {
-    title: 'Value',
-    dataIndex: 'value',
-    width: 80,
-  },
-];
diff --git a/src/views/monitor/route/RouteModal.vue b/src/views/monitor/route/RouteModal.vue
deleted file mode 100644
index ba540ea..0000000
--- a/src/views/monitor/route/RouteModal.vue
+++ /dev/null
@@ -1,420 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" :title="getTitle" width="30%" @ok="handleSubmit" destroyOnClose showFooter>
-    <a-form ref="formRef" :label-col="labelCol" :wrapper-col="wrapperCol" :model="router" :rules="validatorRules">
-      <a-form-item label="璺敱ID" name="routerId">
-        <a-input v-model:value="router.routerId" placeholder="璺敱鍞竴ID" />
-      </a-form-item>
-      <a-form-item label="璺敱鍚嶇О" name="name">
-        <a-input v-model:value="router.name" placeholder="璺敱鍚嶇О" />
-      </a-form-item>
-      <a-form-item label="璺敱URI" name="uri">
-        <a-input v-model:value="router.uri" placeholder="璺敱URL" />
-      </a-form-item>
-      <a-form-item label="璺敱鐘舵��" name="status">
-        <a-switch default-checked :checked-value="1" :un-checked-value="0" v-model:checked="router.status" />
-      </a-form-item>
-
-      <a-form-item name="predicates" label="璺敱鏉′欢">
-        <div v-for="(item, index) in router.predicates">
-          <!--褰搉ame鍦╪oKeyRouter鏃朵笉闇�瑕佹寚瀹歬ey-->
-          <template v-if="noKeyRouter.includes(item.name)">
-            <a-divider
-              >{{ item.name }}
-              <DeleteOutlined size="22" @click="removePredicate(router, index)" />
-            </a-divider>
-            <div>
-              <template v-for="(tag, tagIndx) in item.args">
-                <a-input
-                  ref="inputRef2"
-                  v-if="tagIndx == currentTagIndex && index == currentNameIndex"
-                  type="text"
-                  size="small"
-                  :style="{ width: '190px' }"
-                  v-model:value="state.inputValue"
-                  @change="handleInputChange"
-                  @blur="handleInputEditConfirm(item, tag, tagIndx)"
-                  @keyup.enter="handleInputEditConfirm(item, tag, tagIndx)"
-                />
-                <a-tag
-                  v-else
-                  :key="tag"
-                  style="margin-bottom: 2px"
-                  :closable="true"
-                  @close="() => removeTag(item, tag)"
-                  @click="editTag(item, tag, tagIndx, index)"
-                >
-                  {{ tag }}
-                </a-tag>
-              </template>
-              <a-input
-                ref="inputRef"
-                v-if="state.inputVisible && index == currentNameIndex"
-                type="text"
-                size="small"
-                :style="{ width: '100px' }"
-                v-model:value="state.inputValue"
-                @change="handleInputChange"
-                @blur="handleInputConfirm(item)"
-                @keyup.enter="handleInputConfirm(item)"
-              />
-              <a-tag v-else style="background: #fff; borderstyle: dashed; margin-bottom: 2px" @click="showInput(item, index)">
-                <PlusOutlined size="22" />
-                鏂板缓{{ item.name }}
-              </a-tag>
-            </div>
-          </template>
-          <!--褰搉ame涓嶅湪noKeyRouter鏃堕渶瑕佹寚瀹歬ey-->
-          <template v-if="!noKeyRouter.includes(item.name)">
-            <a-divider
-              >{{ item.name }}
-              <DeleteOutlined size="22" @click="removePredicate(router, index)" />
-            </a-divider>
-            <div>
-              <template v-for="(value, key) in item.args">
-                <a-row>
-                  <a-col :span="5" style="margin-top: 8px">
-                    <span v-if="key == 'header'">Header鍚嶇О</span>
-                    <span v-if="key == 'regexp'">鍙傛暟鍊�</span>
-                    <span v-if="key == 'param'">鍙傛暟鍚�</span>
-                    <span v-if="key == 'name'">鍙傛暟鍚�</span>
-                  </a-col>
-                  <a-col :span="18">
-                    <a-input
-                      :defaultValue="value"
-                      placeholder="鍙傛暟鍊�"
-                      style="width: 70%; margin-right: 8px; margin-top: 3px"
-                      @change="(e) => valueChange(e, item.args, key)"
-                    />
-                  </a-col>
-                </a-row>
-              </template>
-            </div>
-          </template>
-        </div>
-        <p class="btn" style="padding-top: 10px">
-          <a-dropdown>
-            <template #overlay>
-              <a-menu>
-                <a-menu-item :key="item.name" v-for="item in tagArray" @click="predicatesHandleMenuClick(item)">{{ item.name }}</a-menu-item>
-              </a-menu>
-            </template>
-            <a-button type="dashed" style="margin-left: 8px; width: 100%">
-              娣诲姞璺敱鏉′欢
-              <DownOutlined :size="22" />
-            </a-button>
-          </a-dropdown>
-        </p>
-      </a-form-item>
-      <a-form-item name="predicates" label="杩囨护鍣�">
-        <div v-for="(item, index) in router.filters">
-          <a-divider
-            >{{ item.name }}
-            <DeleteOutlined size="22" @click="removeFilter(router, index)" />
-          </a-divider>
-          <div v-for="(tag, index) in item.args" :key="tag.key">
-            <a-input v-model:value="tag.key" placeholder="鍙傛暟閿�" style="width: 45%; margin-right: 8px" />
-            <a-input v-model:value="tag.value" placeholder="鍙傛暟鍊�" style="width: 40%; margin-right: 8px; margin-top: 3px" />
-            <CloseOutlined :size="22" @click="removeFilterParams(item, index)" />
-          </div>
-          <a-button type="dashed" style="margin-left: 28%; width: 37%; margin-top: 5px" size="small" @click="addFilterParams(item)">
-            <DownOutlined :size="22" />
-            娣诲姞鍙傛暟
-          </a-button>
-        </div>
-        <p class="btn" style="padding-top: 10px">
-          <a-dropdown>
-            <template #overlay>
-              <a-menu @click="filterHandleMenuClick">
-                <a-menu-item :key="item.key" :name="item.name" v-for="item in filterArray">{{ item.name }}</a-menu-item>
-              </a-menu>
-            </template>
-            <a-button type="dashed" style="margin-left: 8px; width: 100%">
-              娣诲姞杩囨护鍣�
-              <DownOutlined />
-            </a-button>
-          </a-dropdown>
-        </p>
-      </a-form-item>
-    </a-form>
-  </BasicDrawer>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref, useAttrs, reactive, nextTick } from 'vue';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-  import { saveOrUpdateRoute } from './route.api';
-  import { DeleteOutlined } from '@ant-design/icons-vue';
-  import { PlusOutlined } from '@ant-design/icons-vue';
-  import { CloseOutlined } from '@ant-design/icons-vue';
-  import { DownOutlined } from '@ant-design/icons-vue';
-  // 澹版槑Emits
-  const emit = defineEmits(['register', 'success']);
-  const labelCol = reactive({
-    xs: { span: 24 },
-    sm: { span: 5 },
-  });
-  const wrapperCol = reactive({
-    xs: { span: 24 },
-    sm: { span: 16 },
-  });
-  const attrs = useAttrs();
-  const isUpdate = ref(true);
-  const inputRef = ref();
-  const inputRef2 = ref();
-  let state = reactive({
-    inputVisible: false,
-    inputValue: '',
-  });
-  const currentNameIndex = ref(0);
-  const currentTagIndex = ref(-1);
-  const validatorRules = {
-    routerId: [{ required: true, message: 'routerId涓嶈兘涓虹┖', trigger: 'blur' }],
-    name: [{ required: true, message: '璺敱鍚嶇О涓嶈兘涓虹┖', trigger: 'blur' }],
-    uri: [{ required: true, message: 'uri涓嶈兘涓虹┖', trigger: 'blur' }],
-  };
-  const noKeyRouter = ['Path', 'Host', 'Method', 'After', 'Before', 'Between', 'RemoteAddr'];
-  const filterArray = [/*{ key: 0, name: '鐔旀柇鍣�' },*/ { key: 1, name: '闄愭祦杩囨护鍣�' }];
-  const tagArray = ref([
-    {
-      name: 'Path',
-      args: [],
-    },
-    {
-      name: 'Header',
-      args: {
-        header: '',
-        regexp: '',
-      },
-    },
-    {
-      name: 'Query',
-      args: {
-        param: '',
-        regexp: '',
-      },
-    },
-    {
-      name: 'Method',
-      args: [],
-    },
-    {
-      name: 'Host',
-      args: [],
-    },
-    {
-      name: 'Cookie',
-      args: {
-        name: '',
-        regexp: '',
-      },
-    },
-    {
-      name: 'After',
-      args: [],
-    },
-    {
-      name: 'Before',
-      args: [],
-    },
-    {
-      name: 'Between',
-      args: [],
-    },
-    {
-      name: 'RemoteAddr',
-      args: [],
-    },
-  ]);
-  const formRef = ref();
-  let router = reactive({});
-
-  const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-    isUpdate.value = !!data?.isUpdate;
-    setDrawerProps({ confirmLoading: false });
-    initRouter();
-    if (unref(isUpdate)) {
-      router = Object.assign(router, data.record);
-    }
-  });
-  /**
-   * 鏍囬
-   */
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板璺敱' : '缂栬緫璺敱'));
-
-  //鍒犻櫎璺敱鏉′欢閰嶇疆椤�
-  function removeTag(item, removedTag) {
-    let tags = item.args.filter((tag) => tag !== removedTag);
-    item.args = tags;
-  }
-
-  //鍒濆鍖栧弬鏁�
-  function initRouter() {
-    router = Object.assign(router, {
-      id: '',
-      routerId: '',
-      name: '',
-      uri: '',
-      status: 1,
-      predicates: [],
-      filters: [],
-    });
-  }
-
-  //娣诲姞璺敱閫夐」
-  function predicatesHandleMenuClick(e) {
-    router.predicates.push({
-      args: e.args,
-      name: e.name,
-    });
-  }
-
-  /**
-   * 鍊间慨鏀逛簨浠�
-   * @param e
-   * @param item
-   * @param key
-   */
-  function valueChange(e, item, key) {
-    item[key] = e.target.value;
-  }
-
-  function editTag(item, tag, tagIndex, index) {
-    currentNameIndex.value = index;
-    currentTagIndex.value = tagIndex;
-    state.inputValue = tag;
-    nextTick(() => {
-      inputRef2.value.focus();
-    });
-  }
-
-  //鏄剧ず杈撳叆妗�
-  function showInput(item, index) {
-    state.inputValue = '';
-    state.inputVisible = true;
-    currentNameIndex.value = index;
-    nextTick(() => {
-      inputRef.value.focus();
-    });
-  }
-
-  //璺敱閫夐」杈撳叆妗嗘敼鍙樹簨浠�
-  function handleInputChange(e) {
-    console.info('change', e);
-    console.info('change', e.target.value);
-    //state.value = e.target.value;
-    //state.tag=true;
-  }
-
-  //鍒犻櫎璺敱鏉′欢
-  function removePredicate(item, index) {
-    item.predicates.splice(index, 1);
-  }
-
-  //鍒犻櫎杩囨护鍣ㄥ弬鏁�
-  function removeFilterParams(item, index) {
-    item.args.splice(index, 1);
-  }
-
-  //鍒犻櫎杩囨护鍣�
-  function removeFilter(item, index) {
-    item.filters.splice(index, 1);
-  }
-
-  //娣诲姞杩囨护鍣ㄥ弬鏁�
-  function addFilterParams(item) {
-    item.args.push({
-      key: 'key' + item.args.length + 1,
-      value: '',
-    });
-  }
-
-  //杩囨护鍣ㄦ坊鍔犱簨浠�
-  function filterHandleMenuClick(e) {
-    if (e.key == 0) {
-      router.filters.push({
-        args: [
-          {
-            key: 'name',
-            value: 'default',
-          },
-          {
-            key: 'fallbackUri',
-            value: 'forward:/fallback',
-          },
-        ],
-        name: 'Hystrix',
-        title: filterArray[0].name,
-      });
-    }
-    console.info('test', router);
-    if (e.key == 1) {
-      router.filters.push({
-        args: [
-          {
-            key: 'key-resolver',
-            value: '#{@ipKeyResolver}',
-          },
-          {
-            key: 'redis-rate-limiter.replenishRate',
-            value: 20,
-          },
-          {
-            key: 'redis-rate-limiter.burstCapacity',
-            value: 20,
-          },
-        ],
-        name: 'RequestRateLimiter',
-        title: filterArray[0].name,
-      });
-    }
-  }
-
-  //杈撳叆妗嗙‘璁�
-  function handleInputConfirm(item) {
-    let tags = item.args;
-    const inputValue = state.inputValue;
-    if (inputValue && tags.indexOf(inputValue) === -1) {
-      item.args = [...tags, state.inputValue];
-    }
-    state.inputVisible = false;
-    state.inputValue = '';
-    currentTagIndex.value = -1;
-    currentNameIndex.value = -1;
-  }
-
-  //杈撳叆妗嗙‘璁�
-  function handleInputEditConfirm(item, tag, index) {
-    const inputValue = state.inputValue;
-    if (inputValue) {
-      item.args[index] = state.inputValue;
-    }
-    currentTagIndex.value = -1;
-    currentNameIndex.value = -1;
-  }
-
-  //鍏抽棴寮圭獥
-  function handleCancel() {}
-
-  /**
-   * 鎻愪氦
-   */
-  async function handleSubmit() {
-    await formRef.value.validate().then(() => {
-      try {
-        setDrawerProps({ confirmLoading: true });
-        //閲嶆柊鏋勯�犺〃鍗曟彁浜ゅ璞�,鍒囪涓嶅彲淇敼router瀵硅薄锛屾暟缁勪慨鏀逛负瀛楃涓插鏄撻�犳垚鐣岄潰娣蜂贡
-        let params = Object.assign({}, router, {
-          predicates: JSON.stringify(router.predicates),
-          filters: JSON.stringify(router.filters),
-        });
-        //鎻愪氦琛ㄥ崟
-        saveOrUpdateRoute({ router: params }).then(() => {
-          closeDrawer();
-          //鍒锋柊鍒楄〃
-          emit('success');
-        });
-      } finally {
-        setDrawerProps({ confirmLoading: false });
-      }
-    });
-  }
-</script>
diff --git a/src/views/monitor/route/index.vue b/src/views/monitor/route/index.vue
deleted file mode 100644
index 7e96e83..0000000
--- a/src/views/monitor/route/index.vue
+++ /dev/null
@@ -1,104 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable" :indexColumnProps="indexColumnProps">
-      <template #tableTitle>
-        <a-button preIcon="ant-design:plus-outlined" type="primary" @click="handleAdd" style="margin-right: 5px">鏂板</a-button>
-      </template>
-      <template #status="{ record, text }">
-        <a-tag color="pink" v-if="text == 0">绂佺敤</a-tag>
-        <a-tag color="#87d068" v-if="text == 1">姝e父</a-tag>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getActions(record)" />
-      </template>
-    </BasicTable>
-    <RouteModal @register="registerDrawer" @success="reload" />
-  </div>
-</template>
-<script lang="ts" name="monitor-route" setup>
-  import { ref } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import { getRouteList, deleteRoute } from './route.api';
-  import { columns } from './route.data';
-  import RouteModal from './RouteModal.vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useDrawer } from '/@/components/Drawer';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  const { createMessage } = useMessage();
-  const [registerDrawer, { openDrawer }] = useDrawer();
-  const checkedKeys = ref<Array<string | number>>([]);
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext } = useListPage({
-    designScope: 'router-template',
-    tableProps: {
-      title: '璺敱鍒楄〃',
-      api: getRouteList,
-      useSearchForm: false,
-      columns: columns,
-    },
-  });
-
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-  /**
-   * 搴忓彿鍒楅厤缃�
-   */
-  const indexColumnProps = {
-    dataIndex: 'index',
-    width: '15px',
-  };
-
-  /**
-   * 鎿嶄綔鍒楀畾涔�
-   * @param record
-   */
-  function getActions(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-
-  /**
-   * 閫夋嫨浜嬩欢
-   */
-  function onSelectChange(selectedRowKeys: (string | number)[]) {
-    checkedKeys.value = selectedRowKeys;
-  }
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleAdd() {
-    openDrawer(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  function handleEdit(record) {
-    openDrawer(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteRoute({ id: record.id }, reload);
-  }
-</script>
diff --git a/src/views/monitor/route/route.api.ts b/src/views/monitor/route/route.api.ts
deleted file mode 100644
index d78e40a..0000000
--- a/src/views/monitor/route/route.api.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  list = '/sys/gatewayRoute/list',
-  save = '/sys/gatewayRoute/add',
-  edit = '/sys/gatewayRoute/updateAll',
-  delete = '/sys/gatewayRoute/delete',
-}
-
-/**
- * 鏌ヨ璺敱鍒楄〃
- * @param params
- */
-export const getRouteList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
-
-/**
- * 淇濆瓨鎴栬�呮洿鏂拌矾鐢�
- * @param params
- */
-export const saveOrUpdateRoute = (params) => {
-  return defHttp.post({ url: Api.edit, params });
-};
-
-/**
- * 鍒犻櫎璺敱
- * @param params
- */
-export const deleteRoute = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.delete, data: params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
diff --git a/src/views/monitor/route/route.data.ts b/src/views/monitor/route/route.data.ts
deleted file mode 100644
index 9749f5b..0000000
--- a/src/views/monitor/route/route.data.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '璺敱ID',
-    dataIndex: 'routerId',
-    width: 200,
-    align: 'left',
-  },
-  {
-    title: '璺敱鍚嶇О',
-    dataIndex: 'name',
-    width: 200,
-  },
-  {
-    title: '璺敱URI',
-    dataIndex: 'uri',
-    width: 200,
-  },
-  {
-    title: '鐘舵��',
-    dataIndex: 'status',
-    slots: { customRender: 'status' },
-    width: 200,
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'name',
-    label: '璺敱ID',
-    component: 'Input',
-    required: true,
-  },
-  {
-    field: 'name',
-    label: '璺敱鍚嶇О',
-    component: 'InputNumber',
-    required: true,
-  },
-  {
-    field: 'uri',
-    label: '璺敱URI',
-    component: 'Input',
-  },
-  {
-    field: 'predicates',
-    label: '璺敱鏉′欢',
-    slot: 'predicates',
-    component: 'Input',
-  },
-];
diff --git a/src/views/monitor/server/index.vue b/src/views/monitor/server/index.vue
deleted file mode 100644
index 7e0138e..0000000
--- a/src/views/monitor/server/index.vue
+++ /dev/null
@@ -1,107 +0,0 @@
-<template>
-  <div class="p-4">
-    <a-card :bordered="false" style="height: 100%">
-      <a-tabs v-model:activeKey="activeKey" @change="tabChange">
-        <a-tab-pane key="1" tab="鏈嶅姟鍣ㄤ俊鎭�"></a-tab-pane>
-        <a-tab-pane key="2" tab="JVM淇℃伅" force-render></a-tab-pane>
-        <a-tab-pane key="3" tab="Tomcat淇℃伅"></a-tab-pane>
-        <a-tab-pane key="4" tab="纾佺洏鐩戞帶">
-          <DiskInfo v-if="activeKey == 4" style="height: 100%"></DiskInfo>
-        </a-tab-pane>
-      </a-tabs>
-      <BasicTable @register="registerTable" :searchInfo="searchInfo" :dataSource="dataSource" v-if="activeKey != 4">
-        <template #tableTitle>
-          <div slot="message"
-            >涓婃鏇存柊鏃堕棿锛歿{ lastUpdateTime }}
-            <a-divider type="vertical" />
-            <a @click="handleUpdate">绔嬪嵆鏇存柊</a></div
-          >
-        </template>
-        <template #param="{ record, text }">
-          <a-tag :color="textInfo[record.param].color">{{ text }}</a-tag>
-        </template>
-        <template #text="{ record }">
-          {{ textInfo[record.param].text }}
-        </template>
-        <template #value="{ record, text }"> {{ text }} {{ textInfo[record.param].unit }} </template>
-      </BasicTable>
-    </a-card>
-  </div>
-</template>
-<script lang="ts" name="monitor-server" setup>
-  import { onMounted, ref, unref } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import DiskInfo from '../disk/DiskInfo.vue';
-  import { getServerInfo, getTextInfo, getMoreInfo } from './server.api';
-  import { columns } from './server.data';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import dayjs from 'dayjs';
-
-  const dataSource = ref([]);
-  const activeKey = ref('1');
-  const moreInfo = ref({});
-  const lastUpdateTime = ref({});
-  let textInfo = ref({});
-  const { createMessage } = useMessage();
-  const checkedKeys = ref<Array<string | number>>([]);
-
-  const searchInfo = { logType: '1' };
-  const [registerTable, { reload }] = useTable({
-    columns,
-    showIndexColumn: false,
-    bordered: true,
-    pagination: false,
-    canResize: false,
-    tableSetting: { fullScreen: true },
-    rowKey: 'id',
-  });
-
-  //tab鍒囨崲
-  function tabChange(key) {
-    if (key != 4) {
-      getInfoList(key);
-    }
-  }
-
-  //鍔犺浇淇℃伅
-  function getInfoList(infoType) {
-    lastUpdateTime.value = dayjs().format('YYYY骞碝M鏈圖D鏃� HH鏃秏m鍒唖s绉�');
-    getServerInfo(infoType).then((res) => {
-      textInfo.value = getTextInfo(infoType);
-      moreInfo.value = getMoreInfo(infoType);
-      let info = [];
-      res.forEach((value, id) => {
-        let more = unref(moreInfo)[value.name];
-        if (!(more instanceof Array)) {
-          more = [''];
-        }
-        more.forEach((item, idx) => {
-          let param = value.name + item;
-          let val = convert(value.measurements[idx].value, unref(textInfo)[param].valueType);
-          info.push({ id: param + id, param, text: 'false value', value: val });
-        });
-      });
-      dataSource.value = info;
-    });
-  }
-
-  function handleUpdate() {
-    getInfoList(activeKey.value);
-  }
-
-  //鍗曚綅杞崲
-  function convert(value, type) {
-    if (type === 'Number') {
-      return Number(value * 100).toFixed(2);
-    } else if (type === 'Date') {
-      return dayjs(value * 1000).format('YYYY-MM-DD HH:mm:ss');
-    } else if (type === 'RAM') {
-      return Number(value / 1048576).toFixed(3);
-    }
-    return value;
-  }
-
-  onMounted(() => {
-    getInfoList(activeKey.value);
-  });
-</script>
diff --git a/src/views/monitor/server/server.api.ts b/src/views/monitor/server/server.api.ts
deleted file mode 100644
index ff1776b..0000000
--- a/src/views/monitor/server/server.api.ts
+++ /dev/null
@@ -1,309 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  cpuCount = '/actuator/metrics/system.cpu.count',
-  cpuUsage = '/actuator/metrics/system.cpu.usage',
-  processStartTime = '/actuator/metrics/process.start.time',
-  processUptime = '/actuator/metrics/process.uptime',
-  processCpuUsage = '/actuator/metrics/process.cpu.usage',
-
-  jvmMemoryMax = '/actuator/metrics/jvm.memory.max',
-  jvmMemoryCommitted = '/actuator/metrics/jvm.memory.committed',
-  jvmMemoryUsed = '/actuator/metrics/jvm.memory.used',
-  jvmBufferMemoryUsed = '/actuator/metrics/jvm.buffer.memory.used',
-  jvmBufferCount = '/actuator/metrics/jvm.buffer.count',
-  jvmThreadsDaemon = '/actuator/metrics/jvm.threads.daemon',
-  jvmThreadsLive = '/actuator/metrics/jvm.threads.live',
-  jvmThreadsPeak = '/actuator/metrics/jvm.threads.peak',
-  jvmClassesLoaded = '/actuator/metrics/jvm.classes.loaded',
-  jvmClassesUnloaded = '/actuator/metrics/jvm.classes.unloaded',
-  jvmGcMemoryAllocated = '/actuator/metrics/jvm.gc.memory.allocated',
-  jvmGcMemoryPromoted = '/actuator/metrics/jvm.gc.memory.promoted',
-  jvmGcMaxDataSize = '/actuator/metrics/jvm.gc.max.data.size',
-  jvmGcLiveDataSize = '/actuator/metrics/jvm.gc.live.data.size',
-  jvmGcPause = '/actuator/metrics/jvm.gc.pause',
-
-  tomcatSessionsCreated = '/actuator/metrics/tomcat.sessions.created',
-  tomcatSessionsExpired = '/actuator/metrics/tomcat.sessions.expired',
-  tomcatSessionsActiveCurrent = '/actuator/metrics/tomcat.sessions.active.current',
-  tomcatSessionsActiveMax = '/actuator/metrics/tomcat.sessions.active.max',
-  tomcatSessionsRejected = '/actuator/metrics/tomcat.sessions.rejected',
-}
-
-/**
- * 鏌ヨcpu鏁伴噺
- */
-export const getCpuCount = () => {
-  return defHttp.get({ url: Api.cpuCount }, { isTransformResponse: false });
-};
-
-/**
- * 鏌ヨ绯荤粺 CPU 浣跨敤鐜�
- */
-export const getCpuUsage = () => {
-  return defHttp.get({ url: Api.cpuUsage }, { isTransformResponse: false });
-};
-
-/**
- * 鏌ヨ搴旂敤鍚姩鏃堕棿鐐�
- */
-export const getProcessStartTime = () => {
-  return defHttp.get({ url: Api.processStartTime }, { isTransformResponse: false });
-};
-
-/**
- * 鏌ヨ搴旂敤宸茶繍琛屾椂闂�
- */
-export const getProcessUptime = () => {
-  return defHttp.get({ url: Api.processUptime }, { isTransformResponse: false });
-};
-
-/**
- * 鏌ヨ褰撳墠搴旂敤 CPU 浣跨敤鐜�
- */
-export const getProcessCpuUsage = () => {
-  return defHttp.get({ url: Api.processCpuUsage }, { isTransformResponse: false });
-};
-
-/**
- * 鏌ヨJVM 鏈�澶у唴瀛�
- */
-export const getJvmMemoryMax = () => {
-  return defHttp.get({ url: Api.jvmMemoryMax }, { isTransformResponse: false });
-};
-
-/**
- * JVM 鍙敤鍐呭瓨
- */
-export const getJvmMemoryCommitted = () => {
-  return defHttp.get({ url: Api.jvmMemoryCommitted }, { isTransformResponse: false });
-};
-
-/**
- * JVM 宸茬敤鍐呭瓨
- */
-export const getJvmMemoryUsed = () => {
-  return defHttp.get({ url: Api.jvmMemoryUsed }, { isTransformResponse: false });
-};
-
-/**
- * JVM 缂撳啿鍖哄凡鐢ㄥ唴瀛�
- */
-export const getJvmBufferMemoryUsed = () => {
-  return defHttp.get({ url: Api.jvmBufferMemoryUsed }, { isTransformResponse: false });
-};
-
-/**
- *JVM 褰撳墠缂撳啿鍖烘暟閲�
- */
-export const getJvmBufferCount = () => {
-  return defHttp.get({ url: Api.jvmBufferCount }, { isTransformResponse: false });
-};
-
-/**
- **JVM 瀹堟姢绾跨▼鏁伴噺
- */
-export const getJvmThreadsDaemon = () => {
-  return defHttp.get({ url: Api.jvmThreadsDaemon }, { isTransformResponse: false });
-};
-
-/**
- *JVM 褰撳墠娲昏穬绾跨▼鏁伴噺
- */
-export const getJvmThreadsLive = () => {
-  return defHttp.get({ url: Api.jvmThreadsLive }, { isTransformResponse: false });
-};
-
-/**
- *JVM 宄板�肩嚎绋嬫暟閲�
- */
-export const getJvmThreadsPeak = () => {
-  return defHttp.get({ url: Api.jvmThreadsPeak }, { isTransformResponse: false });
-};
-
-/**
- *JVM 宸插姞杞� Class 鏁伴噺
- */
-export const getJvmClassesLoaded = () => {
-  return defHttp.get({ url: Api.jvmClassesLoaded }, { isTransformResponse: false });
-};
-
-/**
- *JVM 鏈姞杞� Class 鏁伴噺
- */
-export const getJvmClassesUnloaded = () => {
-  return defHttp.get({ url: Api.jvmClassesUnloaded }, { isTransformResponse: false });
-};
-
-/**
- **GC 鏃�, 骞磋交浠e垎閰嶇殑鍐呭瓨绌洪棿
- */
-export const getJvmGcMemoryAllocated = () => {
-  return defHttp.get({ url: Api.jvmGcMemoryAllocated }, { isTransformResponse: false });
-};
-
-/**
- *GC 鏃�, 鑰佸勾浠e垎閰嶇殑鍐呭瓨绌洪棿
- */
-export const getJvmGcMemoryPromoted = () => {
-  return defHttp.get({ url: Api.jvmGcMemoryPromoted }, { isTransformResponse: false });
-};
-
-/**
- *GC 鏃�, 鑰佸勾浠g殑鏈�澶у唴瀛樼┖闂�
- */
-export const getJvmGcMaxDataSize = () => {
-  return defHttp.get({ url: Api.jvmGcMaxDataSize }, { isTransformResponse: false });
-};
-
-/**
- *FullGC 鏃�, 鑰佸勾浠g殑鍐呭瓨绌洪棿
- */
-export const getJvmGcLiveDataSize = () => {
-  return defHttp.get({ url: Api.jvmGcLiveDataSize }, { isTransformResponse: false });
-};
-
-/**
- *绯荤粺鍚姩浠ユ潵GC 娆℃暟
- */
-export const getJvmGcPause = () => {
-  return defHttp.get({ url: Api.jvmGcPause }, { isTransformResponse: false });
-};
-
-/**
- *tomcat 宸插垱寤� session 鏁�
- */
-export const getTomcatSessionsCreated = () => {
-  return defHttp.get({ url: Api.tomcatSessionsCreated }, { isTransformResponse: false });
-};
-
-/**
- *tomcat 宸茶繃鏈� session 鏁�
- */
-export const getTomcatSessionsExpired = () => {
-  return defHttp.get({ url: Api.tomcatSessionsExpired }, { isTransformResponse: false });
-};
-
-/**
- *tomcat 褰撳墠娲昏穬 session 鏁�
- */
-export const getTomcatSessionsActiveCurrent = () => {
-  return defHttp.get({ url: Api.tomcatSessionsActiveCurrent }, { isTransformResponse: false });
-};
-
-/**
- *tomcat 娲昏穬 session 鏁板嘲鍊�
- */
-export const getTomcatSessionsActiveMax = () => {
-  return defHttp.get({ url: Api.tomcatSessionsActiveMax }, { isTransformResponse: false });
-};
-
-/**
- *瓒呰繃session 鏈�澶ч厤缃悗锛屾嫆缁濈殑 session 涓暟
- */
-export const getTomcatSessionsRejected = () => {
-  return defHttp.get({ url: Api.tomcatSessionsRejected }, { isTransformResponse: false });
-};
-
-export const getMoreInfo = (infoType) => {
-  if (infoType == '1') {
-    return {};
-  }
-  if (infoType == '2') {
-    return { 'jvm.gc.pause': ['.count', '.totalTime'] };
-  }
-  if (infoType == '3') {
-    return {
-      'tomcat.global.request': ['.count', '.totalTime'],
-      'tomcat.servlet.request': ['.count', '.totalTime'],
-    };
-  }
-};
-
-export const getTextInfo = (infoType) => {
-  if (infoType == '1') {
-    return {
-      'system.cpu.count': { color: 'green', text: 'CPU 鏁伴噺', unit: '鏍�' },
-      'system.cpu.usage': { color: 'green', text: '绯荤粺 CPU 浣跨敤鐜�', unit: '%', valueType: 'Number' },
-      'process.start.time': { color: 'purple', text: '搴旂敤鍚姩鏃堕棿鐐�', unit: '', valueType: 'Date' },
-      'process.uptime': { color: 'purple', text: '搴旂敤宸茶繍琛屾椂闂�', unit: '绉�' },
-      'process.cpu.usage': { color: 'purple', text: '褰撳墠搴旂敤 CPU 浣跨敤鐜�', unit: '%', valueType: 'Number' },
-    };
-  }
-  if (infoType == '2') {
-    return {
-      'jvm.memory.max': { color: 'purple', text: 'JVM 鏈�澶у唴瀛�', unit: 'MB', valueType: 'RAM' },
-      'jvm.memory.committed': { color: 'purple', text: 'JVM 鍙敤鍐呭瓨', unit: 'MB', valueType: 'RAM' },
-      'jvm.memory.used': { color: 'purple', text: 'JVM 宸茬敤鍐呭瓨', unit: 'MB', valueType: 'RAM' },
-      'jvm.buffer.memory.used': { color: 'cyan', text: 'JVM 缂撳啿鍖哄凡鐢ㄥ唴瀛�', unit: 'MB', valueType: 'RAM' },
-      'jvm.buffer.count': { color: 'cyan', text: '褰撳墠缂撳啿鍖烘暟閲�', unit: '涓�' },
-      'jvm.threads.daemon': { color: 'green', text: 'JVM 瀹堟姢绾跨▼鏁伴噺', unit: '涓�' },
-      'jvm.threads.live': { color: 'green', text: 'JVM 褰撳墠娲昏穬绾跨▼鏁伴噺', unit: '涓�' },
-      'jvm.threads.peak': { color: 'green', text: 'JVM 宄板�肩嚎绋嬫暟閲�', unit: '涓�' },
-      'jvm.classes.loaded': { color: 'orange', text: 'JVM 宸插姞杞� Class 鏁伴噺', unit: '涓�' },
-      'jvm.classes.unloaded': { color: 'orange', text: 'JVM 鏈姞杞� Class 鏁伴噺', unit: '涓�' },
-      'jvm.gc.memory.allocated': { color: 'pink', text: 'GC 鏃�, 骞磋交浠e垎閰嶇殑鍐呭瓨绌洪棿', unit: 'MB', valueType: 'RAM' },
-      'jvm.gc.memory.promoted': { color: 'pink', text: 'GC 鏃�, 鑰佸勾浠e垎閰嶇殑鍐呭瓨绌洪棿', unit: 'MB', valueType: 'RAM' },
-      'jvm.gc.max.data.size': { color: 'pink', text: 'GC 鏃�, 鑰佸勾浠g殑鏈�澶у唴瀛樼┖闂�', unit: 'MB', valueType: 'RAM' },
-      'jvm.gc.live.data.size': { color: 'pink', text: 'FullGC 鏃�, 鑰佸勾浠g殑鍐呭瓨绌洪棿', unit: 'MB', valueType: 'RAM' },
-      'jvm.gc.pause.count': { color: 'blue', text: '绯荤粺鍚姩浠ユ潵GC 娆℃暟', unit: '娆�' },
-      'jvm.gc.pause.totalTime': { color: 'blue', text: '绯荤粺鍚姩浠ユ潵GC 鎬昏�楁椂', unit: '绉�' },
-    };
-  }
-  if (infoType == '3') {
-    return {
-      'tomcat.sessions.created': { color: 'green', text: 'tomcat 宸插垱寤� session 鏁�', unit: '涓�' },
-      'tomcat.sessions.expired': { color: 'green', text: 'tomcat 宸茶繃鏈� session 鏁�', unit: '涓�' },
-      'tomcat.sessions.active.current': { color: 'green', text: 'tomcat 褰撳墠娲昏穬 session 鏁�', unit: '涓�' },
-      'tomcat.sessions.active.max': { color: 'green', text: 'tomcat 娲昏穬 session 鏁板嘲鍊�', unit: '涓�' },
-      'tomcat.sessions.rejected': { color: 'green', text: '瓒呰繃session 鏈�澶ч厤缃悗锛屾嫆缁濈殑 session 涓暟', unit: '涓�' },
-      'tomcat.global.sent': { color: 'purple', text: '鍙戦�佺殑瀛楄妭鏁�', unit: 'bytes' },
-      'tomcat.global.request.max': { color: 'purple', text: 'request 璇锋眰鏈�闀胯�楁椂', unit: '绉�' },
-      'tomcat.global.request.count': { color: 'purple', text: '鍏ㄥ眬 request 璇锋眰娆℃暟', unit: '娆�' },
-      'tomcat.global.request.totalTime': { color: 'purple', text: '鍏ㄥ眬 request 璇锋眰鎬昏�楁椂', unit: '绉�' },
-      'tomcat.servlet.request.max': { color: 'cyan', text: 'servlet 璇锋眰鏈�闀胯�楁椂', unit: '绉�' },
-      'tomcat.servlet.request.count': { color: 'cyan', text: 'servlet 鎬昏姹傛鏁�', unit: '娆�' },
-      'tomcat.servlet.request.totalTime': { color: 'cyan', text: 'servlet 璇锋眰鎬昏�楁椂', unit: '绉�' },
-      'tomcat.threads.current': { color: 'pink', text: 'tomcat 褰撳墠绾跨▼鏁帮紙鍖呮嫭瀹堟姢绾跨▼锛�', unit: '涓�' },
-      'tomcat.threads.config.max': { color: 'pink', text: 'tomcat 閰嶇疆鐨勭嚎绋嬫渶澶ф暟', unit: '涓�' },
-    };
-  }
-};
-
-/**
- * 鏌ヨcpu鏁伴噺
- * @param params
- */
-export const getServerInfo = (infoType) => {
-  if (infoType == '1') {
-    return Promise.all([getCpuCount(), getCpuUsage(), getProcessStartTime(), getProcessUptime(), getProcessCpuUsage()]);
-  }
-  if (infoType == '2') {
-    return Promise.all([
-      getJvmMemoryMax(),
-      getJvmMemoryCommitted(),
-      getJvmMemoryUsed(),
-      getJvmBufferCount(),
-      getJvmBufferMemoryUsed(),
-      getJvmThreadsDaemon(),
-      getJvmThreadsLive(),
-      getJvmThreadsPeak(),
-      getJvmClassesLoaded(),
-      getJvmClassesUnloaded(),
-      getJvmGcLiveDataSize(),
-      getJvmGcMaxDataSize(),
-      getJvmGcMemoryAllocated(),
-      getJvmGcMemoryPromoted(),
-      getJvmGcPause(),
-    ]);
-  }
-  if (infoType == '3') {
-    return Promise.all([
-      getTomcatSessionsActiveCurrent(),
-      getTomcatSessionsActiveMax(),
-      getTomcatSessionsCreated(),
-      getTomcatSessionsExpired(),
-      getTomcatSessionsRejected(),
-    ]);
-  }
-};
diff --git a/src/views/monitor/server/server.data.ts b/src/views/monitor/server/server.data.ts
deleted file mode 100644
index 8b9fa54..0000000
--- a/src/views/monitor/server/server.data.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鍙傛暟',
-    dataIndex: 'param',
-    width: 80,
-    align: 'left',
-    slots: { customRender: 'param' },
-  },
-  {
-    title: '鎻忚堪',
-    dataIndex: 'text',
-    slots: { customRender: 'text' },
-    width: 80,
-  },
-  {
-    title: '褰撳墠鍊�',
-    dataIndex: 'value',
-    slots: { customRender: 'value' },
-    width: 80,
-  },
-];
diff --git a/src/views/monitor/trace/index.vue b/src/views/monitor/trace/index.vue
deleted file mode 100644
index b79ca97..0000000
--- a/src/views/monitor/trace/index.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable" :dataSource="dataSource">
-      <template #tableTitle>
-        <div slot="message">
-          鍏辫拷韪埌 {{ dataSource.length }} 鏉¤繎鏈烪TTP璇锋眰璁板綍
-          <a-divider type="vertical" />
-          <a @click="loadDate">绔嬪嵆鍒锋柊</a>
-        </div>
-      </template>
-
-    </BasicTable>
-  </div>
-</template>
-<script lang="ts" name="monitor-trace" setup>
-  import { onMounted, ref, reactive } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { getActuatorList } from './trace.api';
-  import { columns } from './trace.data';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const dataSource = ref([]);
-  const { createMessage } = useMessage();
-
-  const [registerTable, { reload }] = useTable({
-    columns,
-    showIndexColumn: false,
-    bordered: true,
-    rowKey: 'id',
-  });
-
-  function loadDate() {
-    getActuatorList().then((res) => {
-      let filterData = [];
-      for (let d of res.traces) {
-        if (d.request.method !== 'OPTIONS' && d.request.uri.indexOf('httptrace') === -1) {
-          filterData.push(d);
-        }
-      }
-      dataSource.value = filterData;
-    });
-  }
-
-  onMounted(() => {
-    loadDate();
-  });
-</script>
diff --git a/src/views/monitor/trace/trace.api.ts b/src/views/monitor/trace/trace.api.ts
deleted file mode 100644
index f41b093..0000000
--- a/src/views/monitor/trace/trace.api.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  actuatorList = '/actuator/httptrace',
-}
-
-/**
- * 杩借釜淇℃伅
- */
-export const getActuatorList = () => {
-  return defHttp.get({ url: Api.actuatorList }, { isTransformResponse: false });
-};
diff --git a/src/views/monitor/trace/trace.data.ts b/src/views/monitor/trace/trace.data.ts
deleted file mode 100644
index 3b4f0f1..0000000
--- a/src/views/monitor/trace/trace.data.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import dayjs from 'dayjs';
-import _get from 'lodash.get';
-import { h } from 'vue';
-import { Tag } from 'ant-design-vue';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '璇锋眰鏃堕棿',
-    dataIndex: 'timestamp',
-    width: 50,
-    customRender({ text }) {
-      return dayjs(text).format('YYYY-MM-DD HH:mm:ss');
-    },
-  },
-  {
-    title: '璇锋眰鏂规硶',
-    dataIndex: 'request.method',
-    width: 20,
-    customRender({ record, column }) {
-      let value = _get(record, column.dataIndex!);
-      let color = '';
-      if (value === 'GET') {
-        color = '#87d068';
-      }
-      if (value === 'POST') {
-        color = '#2db7f5';
-      }
-      if (value === 'PUT') {
-        color = '#ffba5a';
-      }
-      if (value === 'DELETE') {
-        color = '#ff5500';
-      }
-      return h(Tag, { color }, () => value);
-    },
-  },
-  {
-    title: '璇锋眰URL',
-    dataIndex: 'request.uri',
-    width: 200,
-    customRender({ record, column }) {
-      return _get(record, column.dataIndex!);
-    },
-  },
-  {
-    title: '鍝嶅簲鐘舵��',
-    dataIndex: 'response.status',
-    width: 50,
-    customRender({ record, column }) {
-      let value = _get(record, column.dataIndex!);
-      let color = '';
-      if (value < 200) {
-        color = 'pink';
-      } else if (value < 201) {
-        color = 'green';
-      } else if (value < 399) {
-        color = 'cyan';
-      } else if (value < 403) {
-        color = 'orange';
-      } else if (value < 501) {
-        color = 'red';
-      }
-      return h(Tag, { color }, () => value);
-    },
-  },
-  {
-    title: '璇锋眰鑰楁椂',
-    dataIndex: 'timeTaken',
-    width: 50,
-    customRender({ record, column }) {
-      let value = _get(record, column.dataIndex!);
-      let color = 'red';
-      if (value < 500) {
-        color = 'green';
-      } else if (value < 1000) {
-        color = 'cyan';
-      } else if (value < 1500) {
-        color = 'orange';
-      }
-      return h(Tag, { color }, () => `${value} ms`);
-    },
-  },
-];
diff --git a/src/views/report/chartdemo/chartdemo.data.ts b/src/views/report/chartdemo/chartdemo.data.ts
deleted file mode 100644
index d87e020..0000000
--- a/src/views/report/chartdemo/chartdemo.data.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-export const getData = (() => {
-  let dottedBase = +new Date();
-  const barDataSource: any[] = [];
-  const barMultiData: any[] = [];
-  const barLineData: any[] = [];
-
-  for (let i = 0; i < 20; i++) {
-    let obj = { name: '', value: 0 };
-    const date = new Date((dottedBase += 1000 * 3600 * 24));
-    obj.name = [date.getFullYear(), date.getMonth() + 1, date.getDate()].join('-');
-    obj.value = Math.random() * 200;
-    barDataSource.push(obj);
-  }
-
-  for (let j = 0; j < 2; j++) {
-    for (let i = 0; i < 20; i++) {
-      let obj = { name: '', value: 0, type: 2010 + j + '' };
-      const date = new Date(dottedBase + 1000 * 3600 * 24 * i);
-      obj.name = [date.getFullYear(), date.getMonth() + 1, date.getDate()].join('-');
-      obj.value = Math.random() * 200;
-      barMultiData.push(obj);
-    }
-  }
-  const pieData = [
-    { value: 335, name: '瀹㈡湇鐢佃瘽' },
-    { value: 310, name: '濂ヨ开瀹樼綉' },
-    { value: 234, name: '濯掍綋鏇濆厜' },
-    { value: 135, name: '璐ㄦ鎬诲眬' },
-    { value: 105, name: '鍏朵粬' },
-  ];
-  const radarData = [
-    { value: 75, name: '鏀挎不', type: '鏂囩患', max: 100 },
-    { value: 65, name: '鍘嗗彶', type: '鏂囩患', max: 100 },
-    { value: 55, name: '鍦扮悊', type: '鏂囩患', max: 100 },
-    { value: 74, name: '鍖栧', type: '鏂囩患', max: 100 },
-    { value: 38, name: '鐗╃悊', type: '鏂囩患', max: 100 },
-    { value: 88, name: '鐢熺墿', type: '鏂囩患', max: 100 },
-  ];
-  for (let j = 0; j < 2; j++) {
-    for (let i = 0; i < 15; i++) {
-      let obj = { name: '', value: 0, type: 2010 + j + '', seriesType: j >= 1 ? 'line' : 'bar' };
-      const date = new Date(dottedBase + 1000 * 3600 * 24 * i);
-      obj.name = [date.getFullYear(), date.getMonth() + 1, date.getDate()].join('-');
-      obj.value = Math.random() * 200;
-      barLineData.push(obj);
-    }
-  }
-  return { barDataSource, barMultiData, pieData, barLineData, radarData };
-})();
diff --git a/src/views/report/chartdemo/index.vue b/src/views/report/chartdemo/index.vue
deleted file mode 100644
index 4c81e9f..0000000
--- a/src/views/report/chartdemo/index.vue
+++ /dev/null
@@ -1,93 +0,0 @@
-<template>
-  <div class="p-4">
-    <a-card :bordered="false" style="height: 100%">
-      <a-tabs v-model:activeKey="activeKey" animated @change="tabChange">
-        <a-tab-pane key="1" tab="鏌辩姸鍥�">
-          <a-row>
-            <a-col :span="24">
-              <Bar :chartData="barDataSource" height="50vh" :option="{ title: { text: '閿�鍞鎺掕', left: 'center' } }"></Bar>
-            </a-col>
-            <!-- <a-col :span="7" style="margin-left:50px" >
-                            閰嶇疆椤癸細
-                            <textarea rows="18" style="width: 500px">{{ barDataSource }}</textarea>
-                        </a-col>-->
-          </a-row>
-        </a-tab-pane>
-        <a-tab-pane key="2" tab="澶氬垪鏌辩姸鍥�" force-render>
-          <BarMulti :chartData="barMultiData" :option="multiBarOption" height="50vh"></BarMulti>
-        </a-tab-pane>
-        <a-tab-pane key="3" tab="杩蜂綘鏌辩姸鍥�" style="display: flex; justify-content: center">
-          <Bar :chartData="barDataSource" width="30%" height="50vh"></Bar>
-        </a-tab-pane>
-        <a-tab-pane key="4" tab="闈㈢Н鍥�">
-          <Line :chartData="barDataSource" height="50vh" :option="{ title: { text: '閿�鍞鎺掕', left: 'center' } }"></Line>
-        </a-tab-pane>
-        <a-tab-pane key="5" tab="杩蜂綘闈㈢Н鍥�" style="display: flex; justify-content: center">
-          <Line :chartData="barDataSource" width="30%" height="50vh"></Line>
-        </a-tab-pane>
-        <a-tab-pane key="6" tab="澶氳鎶樼嚎鍥�">
-          <LineMulti :chartData="barMultiData" height="50vh" :option="multiBarOption" type="line"></LineMulti>
-        </a-tab-pane>
-        <a-tab-pane key="7" tab="楗煎浘">
-          <pie :chartData="pieData" height="40vh" :option="{ title: { text: '鍩虹楗肩姸鍥�', left: 'center' } }" />
-        </a-tab-pane>
-        <a-tab-pane key="8" tab="闆疯揪鍥�">
-          <Radar :chartData="radarData" height="50vh"></Radar>
-        </a-tab-pane>
-        <a-tab-pane key="9" tab="浠〃鐩�">
-          <Gauge :chartData="{ name: '鍑哄嫟鐜�', value: 70 }" height="50vh"></Gauge>
-        </a-tab-pane>
-        <a-tab-pane key="10" tab="鎶樻煴鍥�">
-          <BarAndLine :chartData="barLineData" height="50vh"></BarAndLine>
-        </a-tab-pane>
-        <a-tab-pane key="11" tab="鎺掑悕鍒楄〃">
-          <RankList title="闂ㄥ簵閿�鍞帓琛屾" :list="rankList" style="width: 600px; margin: 0 auto"></RankList>
-        </a-tab-pane>
-        <a-tab-pane key="13" tab="瓒嬪娍">
-          <trend title="Trend" term="Trend锛�" :percentage="30" />
-        </a-tab-pane>
-        <!--鏆傛棤-->
-        <!-- <a-tab-pane key="14" tab="杩涘害鏉�">
-                    <Bar :option="{xAxis:{show:false},yAxis:{show:false}}" :chartData="chartData" width="100px" height="50px"></Bar>
-                </a-tab-pane>-->
-        <!--<a-tab-pane key="15" tab="姘存尝鍥�"></a-tab-pane>-->
-      </a-tabs>
-    </a-card>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { getData } from './chartdemo.data.ts';
-  import Bar from '/@/components/chart/Bar.vue';
-  import BarMulti from '/@/components/chart/BarMulti.vue';
-  import Line from '/@/components/chart/Line.vue';
-  import LineMulti from '/@/components/chart/LineMulti.vue';
-  import Pie from '/@/components/chart/Pie.vue';
-  import Radar from '/@/components/chart/Radar.vue';
-  import Gauge from '/@/components/chart/Gauge.vue';
-  import RankList from '/@/components/chart/RankList.vue';
-  import Trend from '/@/components/chart/Trend.vue';
-  import BarAndLine from '/@/components/chart/BarAndLine.vue';
-
-  const activeKey = ref('1');
-  const { barDataSource, barMultiData, pieData, barLineData, radarData } = getData;
-  const multiBarOption = {
-    title: { text: '澶氬垪鏌辩姸鍥�', left: 'center' },
-  };
-  const rankList = loadData('name', 'total', 2000, 100, '鍖椾含鏈濋槼 ', ' 鍙峰簵');
-  //tab鍒囨崲
-  function tabChange(key) {
-    console.log('鍒囨崲鐨刱ey:', key);
-  }
-  function loadData(x, y, max, min, before = '', after = '鏈�') {
-    let data = [];
-    for (let i = 0; i < 12; i += 1) {
-      data.push({
-        [x]: `${before}${i + 1}${after}`,
-        [y]: Math.floor(Math.random() * max) + min,
-      });
-    }
-    return data;
-  }
-</script>
diff --git a/src/views/report/statisticst/index.vue b/src/views/report/statisticst/index.vue
deleted file mode 100644
index 673a5d6..0000000
--- a/src/views/report/statisticst/index.vue
+++ /dev/null
@@ -1,135 +0,0 @@
-<template>
-  <div class="p-4">
-    <a-card :bordered="false" style="height: 100%">
-      <a-tabs v-model:activeKey="activeKey" animated @change="tabChange">
-        <a-tab-pane key="bar" tab="鏌辩姸鍥�">
-          <a-row>
-            <a-col :span="10">
-              <a-radio-group v-model:value="barType" @change="statisticst">
-                <a-radio-button value="year">鎸夊勾缁熻</a-radio-button>
-                <a-radio-button value="month">鎸夋湀缁熻</a-radio-button>
-                <a-radio-button value="category">鎸夌被鍒粺璁�</a-radio-button>
-                <a-radio-button value="cabinet">鎸夋煖鍙风粺璁�</a-radio-button>
-              </a-radio-group>
-            </a-col>
-          </a-row>
-          <Bar :chartData="dataSource" height="50vh"></Bar>
-        </a-tab-pane>
-        <a-tab-pane key="pie" tab="楗肩姸鍥�" force-render>
-          <a-row :gutter="24">
-            <a-col :span="10">
-              <a-radio-group v-model:value="pieType" @change="statisticst">
-                <a-radio-button value="year">鎸夊勾缁熻</a-radio-button>
-                <a-radio-button value="month">鎸夋湀缁熻</a-radio-button>
-                <a-radio-button value="category">鎸夌被鍒粺璁�</a-radio-button>
-                <a-radio-button value="cabinet">鎸夋煖鍙风粺璁�</a-radio-button>
-              </a-radio-group>
-            </a-col>
-            <Pie :chartData="dataSource" height="40vh"></Pie>
-          </a-row>
-        </a-tab-pane>
-      </a-tabs>
-    </a-card>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { defHttp } from '/@/utils/http/axios';
-  import { ref, unref, reactive } from 'vue';
-  import Bar from '/@/components/chart/Bar.vue';
-  import Pie from '/@/components/chart/Pie.vue';
-
-  const activeKey = ref('bar');
-  const barType = ref('year');
-  const pieType = ref('year');
-  const dataSource = ref([]);
-  const url = reactive({
-    getYearCountInfo: '/mock/api/report/getYearCountInfo',
-    getMonthCountInfo: '/mock/api/report/getMonthCountInfo',
-    getCntrNoCountInfo: '/mock/api/report/getCntrNoCountInfo',
-    getCabinetCountInfo: '/mock/api/report/getCabinetCountInfo',
-  });
-
-  async function loadDate(url, type, params) {
-    const res = await defHttp.get({ url, params }, { isTransformResponse: false, errorMessageMode: 'none' });
-    if (res.success) {
-      dataSource.value = [];
-      switch (type) {
-        case 'year':
-          getYearCountSource(res.result);
-          break;
-        case 'month':
-          getMonthCountSource(res.result);
-          break;
-        case 'category':
-          getCategoryCountSource(res.result);
-          break;
-        case 'cabinet':
-          getCabinetCountSource(res.result);
-          break;
-        default:
-          break;
-      }
-    }
-  }
-  function getYearCountSource(data) {
-    for (let i = 0; i < data.length; i++) {
-      dataSource.value.push({
-        name: `${data[i].year}骞碻,
-        value: data[i].yearcount,
-      });
-    }
-  }
-  function getMonthCountSource(data) {
-    for (let i = 0; i < data.length; i++) {
-      dataSource.value.push({
-        name: `${data[i].month}`,
-        value: data[i].monthcount,
-      });
-    }
-  }
-  function getCategoryCountSource(data) {
-    for (let i = 0; i < data.length; i++) {
-      dataSource.value.push({
-        name: `${data[i].classifyname}`,
-        value: data[i].cntrnocount,
-      });
-    }
-  }
-  function getCabinetCountSource(data) {
-    for (let i = 0; i < data.length; i++) {
-      dataSource.value.push({
-        name: `${data[i].cabinetname}`,
-        value: data[i].cabinetcocunt,
-      });
-    }
-  }
-  // 閫夋嫨缁熻绫诲埆
-  function statisticst(e) {
-    if (unref(activeKey) === 'pie') {
-      loadDate(getUrl(unref(pieType)), unref(pieType), {});
-    } else {
-      loadDate(getUrl(unref(barType)), unref(barType), {});
-    }
-  }
-
-  function getUrl(type) {
-    if (type === 'year') {
-      return url.getYearCountInfo;
-    }
-    if (type === 'month') {
-      return url.getMonthCountInfo;
-    }
-    if (type === 'category') {
-      return url.getCntrNoCountInfo;
-    }
-    if (type === 'cabinet') {
-      return url.getCabinetCountInfo;
-    }
-  }
-  //tab鍒囨崲
-  function tabChange(key) {
-    console.log('鍒囨崲鐨刱ey:', key);
-  }
-  loadDate(url.getYearCountInfo, 'year', {});
-</script>
diff --git a/src/views/sys/about/index.vue b/src/views/sys/about/index.vue
deleted file mode 100644
index 1b2cf37..0000000
--- a/src/views/sys/about/index.vue
+++ /dev/null
@@ -1,98 +0,0 @@
-<template>
-  <PageWrapper title="鍏充簬">
-    <template #headerContent>
-      <div class="flex justify-between items-center">
-        <span class="flex-1">
-          <a :href="GITHUB_URL" target="_blank">{{ name }}</a>
-          鏄竴涓熀浜嶸ue3.0銆乂ite銆� Ant-Design-Vue 銆乀ypeScript
-          鐨勫悗鍙拌В鍐虫柟妗堬紝鐩爣鏄负涓ぇ鍨嬮」鐩紑鍙�,鎻愪緵鐜版垚鐨勫紑绠辫В鍐虫柟妗堝強涓板瘜鐨勭ず渚�,鍘熷垯涓婁笉浼氶檺鍒朵换浣曚唬鐮佺敤浜庡晢鐢ㄣ��
-        </span>
-      </div>
-    </template>
-    <Description @register="infoRegister" class="enter-y" />
-    <Description @register="register" class="my-4 enter-y" />
-    <Description @register="registerDev" class="enter-y" />
-  </PageWrapper>
-</template>
-<script lang="ts" setup>
-  import { h } from 'vue';
-  import { Tag } from 'ant-design-vue';
-  import { PageWrapper } from '/@/components/Page';
-  import { Description, DescItem, useDescription } from '/@/components/Description/index';
-  import { GITHUB_URL, SITE_URL, DOC_URL } from '/@/settings/siteSetting';
-
-  const { pkg, lastBuildTime } = __APP_INFO__;
-
-  const { dependencies, devDependencies, name, version } = pkg;
-
-  const schema: DescItem[] = [];
-  const devSchema: DescItem[] = [];
-
-  const commonTagRender = (color: string) => (curVal) => h(Tag, { color }, () => curVal);
-  const commonLinkRender = (text: string) => (href) => h('a', { href, target: '_blank' }, text);
-
-  const infoSchema: DescItem[] = [
-    {
-      label: '鐗堟湰',
-      field: 'version',
-      render: commonTagRender('blue'),
-    },
-    {
-      label: '鏈�鍚庣紪璇戞椂闂�',
-      field: 'lastBuildTime',
-      render: commonTagRender('blue'),
-    },
-    {
-      label: '鏂囨。鍦板潃',
-      field: 'doc',
-      render: commonLinkRender('鏂囨。鍦板潃'),
-    },
-    {
-      label: '棰勮鍦板潃',
-      field: 'preview',
-      render: commonLinkRender('棰勮鍦板潃'),
-    },
-    {
-      label: 'Github',
-      field: 'github',
-      render: commonLinkRender('Github'),
-    },
-  ];
-
-  const infoData = {
-    version,
-    lastBuildTime,
-    doc: DOC_URL,
-    preview: SITE_URL,
-    github: GITHUB_URL,
-  };
-
-  Object.keys(dependencies).forEach((key) => {
-    schema.push({ field: key, label: key });
-  });
-
-  Object.keys(devDependencies).forEach((key) => {
-    devSchema.push({ field: key, label: key });
-  });
-
-  const [register] = useDescription({
-    title: '鐢熶骇鐜渚濊禆',
-    data: dependencies,
-    schema: schema,
-    column: 3,
-  });
-
-  const [registerDev] = useDescription({
-    title: '寮�鍙戠幆澧冧緷璧�',
-    data: devDependencies,
-    schema: devSchema,
-    column: 3,
-  });
-
-  const [infoRegister] = useDescription({
-    title: '椤圭洰淇℃伅',
-    data: infoData,
-    schema: infoSchema,
-    column: 2,
-  });
-</script>
diff --git a/src/views/sys/error-log/DetailModal.vue b/src/views/sys/error-log/DetailModal.vue
deleted file mode 100644
index 2047707..0000000
--- a/src/views/sys/error-log/DetailModal.vue
+++ /dev/null
@@ -1,27 +0,0 @@
-<template>
-  <BasicModal :width="800" :title="t('sys.errorLog.tableActionDesc')" v-bind="$attrs">
-    <Description :data="info" @register="register" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import type { PropType } from 'vue';
-  import type { ErrorLogInfo } from '/#/store';
-  import { BasicModal } from '/@/components/Modal/index';
-  import { Description, useDescription } from '/@/components/Description/index';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { getDescSchema } from './data';
-
-  defineProps({
-    info: {
-      type: Object as PropType<ErrorLogInfo>,
-      default: null,
-    },
-  });
-
-  const { t } = useI18n();
-
-  const [register] = useDescription({
-    column: 2,
-    schema: getDescSchema()!,
-  });
-</script>
diff --git a/src/views/sys/error-log/data.tsx b/src/views/sys/error-log/data.tsx
deleted file mode 100644
index 3ffc2f4..0000000
--- a/src/views/sys/error-log/data.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import { Tag } from 'ant-design-vue';
-import { BasicColumn } from '/@/components/Table/index';
-import { ErrorTypeEnum } from '/@/enums/exceptionEnum';
-import { useI18n } from '/@/hooks/web/useI18n';
-
-const { t } = useI18n();
-
-export function getColumns(): BasicColumn[] {
-  return [
-    {
-      dataIndex: 'type',
-      title: t('sys.errorLog.tableColumnType'),
-      width: 80,
-      customRender: ({ text }) => {
-        const color =
-          text === ErrorTypeEnum.VUE
-            ? 'green'
-            : text === ErrorTypeEnum.RESOURCE
-            ? 'cyan'
-            : text === ErrorTypeEnum.PROMISE
-            ? 'blue'
-            : ErrorTypeEnum.AJAX
-            ? 'red'
-            : 'purple';
-        return <Tag color={color}>{() => text}</Tag>;
-      },
-    },
-    {
-      dataIndex: 'url',
-      title: 'URL',
-      width: 200,
-    },
-    {
-      dataIndex: 'time',
-      title: t('sys.errorLog.tableColumnDate'),
-      width: 160,
-    },
-    {
-      dataIndex: 'file',
-      title: t('sys.errorLog.tableColumnFile'),
-      width: 200,
-    },
-    {
-      dataIndex: 'name',
-      title: 'Name',
-      width: 200,
-    },
-    {
-      dataIndex: 'message',
-      title: t('sys.errorLog.tableColumnMsg'),
-      width: 300,
-    },
-    {
-      dataIndex: 'stack',
-      title: t('sys.errorLog.tableColumnStackMsg'),
-    },
-  ];
-}
-
-export function getDescSchema(): any {
-  return getColumns().map((column) => {
-    return {
-      field: column.dataIndex!,
-      label: column.title,
-    };
-  });
-}
diff --git a/src/views/sys/error-log/index.vue b/src/views/sys/error-log/index.vue
deleted file mode 100644
index 1895524..0000000
--- a/src/views/sys/error-log/index.vue
+++ /dev/null
@@ -1,88 +0,0 @@
-<template>
-  <div class="p-4">
-    <template v-for="src in imgList" :key="src">
-      <img :src="src" v-show="false" />
-    </template>
-    <DetailModal :info="rowInfo" @register="registerModal" />
-    <BasicTable @register="register" class="error-handle-table">
-      <template #toolbar>
-        <a-button @click="fireVueError" type="primary">
-          {{ t('sys.errorLog.fireVueError') }}
-        </a-button>
-        <a-button @click="fireResourceError" type="primary">
-          {{ t('sys.errorLog.fireResourceError') }}
-        </a-button>
-        <a-button @click="fireAjaxError" type="primary">
-          {{ t('sys.errorLog.fireAjaxError') }}
-        </a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="[{ label: t('sys.errorLog.tableActionDesc'), onClick: handleDetail.bind(null, record) }]" />
-      </template>
-    </BasicTable>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import type { ErrorLogInfo } from '/#/store';
-  import { watch, ref, nextTick } from 'vue';
-  import DetailModal from './DetailModal.vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table/index';
-  import { useModal } from '/@/components/Modal';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useErrorLogStore } from '/@/store/modules/errorLog';
-  import { fireErrorApi } from '/@/api/demo/error';
-  import { getColumns } from './data';
-  import { cloneDeep } from 'lodash-es';
-
-  const rowInfo = ref<ErrorLogInfo>();
-  const imgList = ref<string[]>([]);
-
-  const { t } = useI18n();
-  const errorLogStore = useErrorLogStore();
-  const [register, { setTableData }] = useTable({
-    title: t('sys.errorLog.tableTitle'),
-    columns: getColumns(),
-    actionColumn: {
-      width: 80,
-      title: 'Action',
-      dataIndex: 'action',
-      slots: { customRender: 'action' },
-    },
-  });
-  const [registerModal, { openModal }] = useModal();
-
-  watch(
-    () => errorLogStore.getErrorLogInfoList,
-    (list) => {
-      nextTick(() => {
-        setTableData(cloneDeep(list));
-      });
-    },
-    {
-      immediate: true,
-    }
-  );
-  const { createMessage } = useMessage();
-  if (import.meta.env.DEV) {
-    createMessage.info(t('sys.errorLog.enableMessage'));
-  }
-  // 鏌ョ湅璇︽儏
-  function handleDetail(row: ErrorLogInfo) {
-    rowInfo.value = row;
-    openModal(true);
-  }
-
-  function fireVueError() {
-    throw new Error('fire vue error!');
-  }
-
-  function fireResourceError() {
-    imgList.value.push(`${new Date().getTime()}.png`);
-  }
-
-  async function fireAjaxError() {
-    await fireErrorApi();
-  }
-</script>
diff --git a/src/views/sys/exception/Exception.vue b/src/views/sys/exception/Exception.vue
deleted file mode 100644
index c3db956..0000000
--- a/src/views/sys/exception/Exception.vue
+++ /dev/null
@@ -1,143 +0,0 @@
-<script lang="tsx">
-  import type { PropType } from 'vue';
-  import { Result, Button } from 'ant-design-vue';
-  import { defineComponent, ref, computed, unref } from 'vue';
-  import { ExceptionEnum } from '/@/enums/exceptionEnum';
-  import notDataSvg from '/@/assets/svg/no-data.svg';
-  import netWorkSvg from '/@/assets/svg/net-error.svg';
-  import { useRoute } from 'vue-router';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useGo, useRedo } from '/@/hooks/web/usePage';
-  import { PageEnum } from '/@/enums/pageEnum';
-
-  interface MapValue {
-    title: string;
-    subTitle: string;
-    btnText?: string;
-    icon?: string;
-    handler?: Fn;
-    status?: string;
-  }
-
-  export default defineComponent({
-    name: 'ErrorPage',
-    props: {
-      // 鐘舵�佺爜
-      status: {
-        type: Number as PropType<number>,
-        default: ExceptionEnum.PAGE_NOT_FOUND,
-      },
-
-      title: {
-        type: String as PropType<string>,
-        default: '',
-      },
-
-      subTitle: {
-        type: String as PropType<string>,
-        default: '',
-      },
-
-      full: {
-        type: Boolean as PropType<boolean>,
-        default: false,
-      },
-    },
-    setup(props) {
-      const statusMapRef = ref(new Map<string | number, MapValue>());
-
-      const { query } = useRoute();
-      const go = useGo();
-      const redo = useRedo();
-      const { t } = useI18n();
-      const { prefixCls } = useDesign('app-exception-page');
-
-      const getStatus = computed(() => {
-        const { status: routeStatus } = query;
-        const { status } = props;
-        return Number(routeStatus) || status;
-      });
-
-      const getMapValue = computed((): MapValue => {
-        return unref(statusMapRef).get(unref(getStatus)) as MapValue;
-      });
-
-      const backLoginI18n = t('sys.exception.backLogin');
-      const backHomeI18n = t('sys.exception.backHome');
-
-      unref(statusMapRef).set(ExceptionEnum.PAGE_NOT_ACCESS, {
-        title: '403',
-        status: `${ExceptionEnum.PAGE_NOT_ACCESS}`,
-        subTitle: t('sys.exception.subTitle403'),
-        btnText: props.full ? backLoginI18n : backHomeI18n,
-        handler: () => (props.full ? go(PageEnum.BASE_LOGIN) : go()),
-      });
-
-      unref(statusMapRef).set(ExceptionEnum.PAGE_NOT_FOUND, {
-        title: '404',
-        status: `${ExceptionEnum.PAGE_NOT_FOUND}`,
-        subTitle: t('sys.exception.subTitle404'),
-        btnText: props.full ? backLoginI18n : backHomeI18n,
-        handler: () => (props.full ? go(PageEnum.BASE_LOGIN) : go()),
-      });
-
-      unref(statusMapRef).set(ExceptionEnum.ERROR, {
-        title: '500',
-        status: `${ExceptionEnum.ERROR}`,
-        subTitle: t('sys.exception.subTitle500'),
-        btnText: backHomeI18n,
-        handler: () => go(),
-      });
-
-      unref(statusMapRef).set(ExceptionEnum.PAGE_NOT_DATA, {
-        title: t('sys.exception.noDataTitle'),
-        subTitle: '',
-        btnText: t('common.redo'),
-        handler: () => redo(),
-        icon: notDataSvg,
-      });
-
-      unref(statusMapRef).set(ExceptionEnum.NET_WORK_ERROR, {
-        title: t('sys.exception.networkErrorTitle'),
-        subTitle: t('sys.exception.networkErrorSubTitle'),
-        btnText: t('common.redo'),
-        handler: () => redo(),
-        icon: netWorkSvg,
-      });
-
-      return () => {
-        const { title, subTitle, btnText, icon, handler, status } = unref(getMapValue) || {};
-        return (
-          <Result class={prefixCls} status={status as any} title={props.title || title} sub-title={props.subTitle || subTitle}>
-            {{
-              extra: () =>
-                btnText && (
-                  <Button type="primary" onClick={handler}>
-                    {() => btnText}
-                  </Button>
-                ),
-              icon: () => (icon ? <img src={icon} /> : null),
-            }}
-          </Result>
-        );
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-app-exception-page';
-
-  .@{prefix-cls} {
-    display: flex;
-    align-items: center;
-    flex-direction: column;
-
-    .ant-result-icon {
-      img {
-        max-width: 400px;
-        max-height: 300px;
-      }
-    }
-  }
-</style>
diff --git a/src/views/sys/exception/NetworkErrorException.vue b/src/views/sys/exception/NetworkErrorException.vue
deleted file mode 100644
index e4ce2b9..0000000
--- a/src/views/sys/exception/NetworkErrorException.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-<template>
-  <Exception :status="status" />
-</template>
-
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { Exception } from '/@/views/sys/exception/index';
-  import { ExceptionEnum } from '/@/enums/exceptionEnum';
-
-  const status = ref(ExceptionEnum.NET_WORK_ERROR);
-</script>
diff --git a/src/views/sys/exception/NotAccessException.vue b/src/views/sys/exception/NotAccessException.vue
deleted file mode 100644
index a5b2a5f..0000000
--- a/src/views/sys/exception/NotAccessException.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-<template>
-  <Exception :status="status" />
-</template>
-
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { Exception } from '/@/views/sys/exception/index';
-  import { ExceptionEnum } from '/@/enums/exceptionEnum';
-
-  const status = ref(ExceptionEnum.PAGE_NOT_ACCESS);
-</script>
diff --git a/src/views/sys/exception/NotDataErrorException.vue b/src/views/sys/exception/NotDataErrorException.vue
deleted file mode 100644
index 9a09dd0..0000000
--- a/src/views/sys/exception/NotDataErrorException.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-<template>
-  <Exception :status="status" />
-</template>
-
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { Exception } from '/@/views/sys/exception/index';
-  import { ExceptionEnum } from '/@/enums/exceptionEnum';
-
-  const status = ref(ExceptionEnum.PAGE_NOT_DATA);
-</script>
diff --git a/src/views/sys/exception/ServerErrorException.vue b/src/views/sys/exception/ServerErrorException.vue
deleted file mode 100644
index 9742f55..0000000
--- a/src/views/sys/exception/ServerErrorException.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-<template>
-  <Exception :status="status" />
-</template>
-
-<script lang="ts" setup>
-  import { ref } from 'vue';
-  import { Exception } from '/@/views/sys/exception/index';
-  import { ExceptionEnum } from '/@/enums/exceptionEnum';
-
-  const status = ref(ExceptionEnum.ERROR);
-</script>
diff --git a/src/views/sys/exception/index.ts b/src/views/sys/exception/index.ts
deleted file mode 100644
index fb57528..0000000
--- a/src/views/sys/exception/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export { default as Exception } from './Exception.vue';
-export { default as NotAccessException } from './NotAccessException.vue';
-export { default as NetworkErrorException } from './NetworkErrorException.vue';
-export { default as NotDataErrorException } from './NotDataErrorException.vue';
-export { default as ServerErrorException } from './ServerErrorException.vue';
diff --git a/src/views/sys/forget-password/step1.vue b/src/views/sys/forget-password/step1.vue
deleted file mode 100644
index 7a7892f..0000000
--- a/src/views/sys/forget-password/step1.vue
+++ /dev/null
@@ -1,96 +0,0 @@
-<template>
-  <Form class="p-4 enter-x" :model="formData" :rules="getFormRules" ref="formRef">
-    <FormItem name="mobile" class="enter-x">
-      <Input size="large" v-model:value="formData.mobile" :placeholder="t('sys.login.mobile')" />
-    </FormItem>
-    <FormItem name="sms" class="enter-x">
-      <CountdownInput size="large" v-model:value="formData.sms" :placeholder="t('sys.login.smsCode')" :sendCodeApi="sendCodeApi" />
-    </FormItem>
-    <FormItem class="enter-x">
-      <Button type="primary" size="large" block @click="handleNext" :loading="loading"> 涓嬩竴姝� </Button>
-      <Button size="large" block class="mt-4" @click="handleBackLogin">
-        {{ t('sys.login.backSignIn') }}
-      </Button>
-    </FormItem>
-  </Form>
-</template>
-<script lang="ts">
-  import { defineComponent, reactive, ref, computed, unref, toRaw } from 'vue';
-
-  import { Form, Input, Button, steps } from 'ant-design-vue';
-  import { CountdownInput } from '/@/components/CountDown';
-
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useLoginState, useFormRules, useFormValid, LoginStateEnum, SmsEnum } from '../login/useLogin';
-  import { phoneVerify, getCaptcha } from '/@/api/sys/user';
-
-  export default defineComponent({
-    name: 'step1',
-    components: {
-      Button,
-      Form,
-      FormItem: Form.Item,
-      Input,
-      CountdownInput,
-    },
-    emits: ['nextStep'],
-    setup(_, { emit }) {
-      const { t } = useI18n();
-      const { handleBackLogin } = useLoginState();
-      const { notification } = useMessage();
-
-      const formRef = ref();
-      const { validForm } = useFormValid(formRef);
-      const { getFormRules } = useFormRules();
-
-      const loading = ref(false);
-      const formData = reactive({
-        mobile: '',
-        sms: '',
-      });
-
-      /**
-       * 涓嬩竴姝�
-       */
-      async function handleNext() {
-        const data = await validForm();
-        if (!data) return;
-        const resultInfo = await phoneVerify(
-          toRaw({
-            phone: data.mobile,
-            smscode: data.sms,
-          })
-        );
-        if (resultInfo.success) {
-          let accountInfo = {
-            username: resultInfo.result.username,
-            phone: data.mobile,
-            smscode: resultInfo.result.smscode,
-          };
-          emit('nextStep', accountInfo);
-        } else {
-          notification.error({
-            message: t('sys.api.errorTip'),
-            description: resultInfo.message || t('sys.api.networkExceptionMsg'),
-            duration: 3,
-          });
-        }
-      }
-      //鍊掕鏃舵墽琛屽墠鐨勫嚱鏁�
-      function sendCodeApi() {
-        return getCaptcha({ mobile: formData.mobile, smsmode: SmsEnum.FORGET_PASSWORD });
-      }
-      return {
-        t,
-        formRef,
-        formData,
-        getFormRules,
-        handleNext,
-        loading,
-        handleBackLogin,
-        sendCodeApi,
-      };
-    },
-  });
-</script>
diff --git a/src/views/sys/forget-password/step2.vue b/src/views/sys/forget-password/step2.vue
deleted file mode 100644
index b81d49e..0000000
--- a/src/views/sys/forget-password/step2.vue
+++ /dev/null
@@ -1,103 +0,0 @@
-<template>
-  <Form class="p-4 enter-x" :model="formData" :rules="getFormRules" ref="formRef">
-    <FormItem name="username" class="enter-x">
-      <Input size="large" v-model:value="formData.username" :placeholder="t('sys.login.userName')" disabled />
-    </FormItem>
-
-    <FormItem name="password" class="enter-x">
-      <StrengthMeter size="large" v-model:value="formData.password" :placeholder="t('sys.login.password')" />
-    </FormItem>
-
-    <FormItem name="confirmPassword" class="enter-x">
-      <InputPassword size="large" visibilityToggle v-model:value="formData.confirmPassword" :placeholder="t('sys.login.confirmPassword')" />
-    </FormItem>
-
-    <FormItem class="enter-x">
-      <Button type="primary" size="large" block @click="handlePrev"> 涓婁竴姝� </Button>
-      <Button size="large" block class="mt-4" @click="handleNext"> 涓嬩竴姝� </Button>
-    </FormItem>
-  </Form>
-</template>
-<script lang="ts">
-  import { defineComponent, reactive, ref, computed, unref, toRaw, toRefs } from 'vue';
-  import { Form, Input, Button } from 'ant-design-vue';
-  import { StrengthMeter } from '/@/components/StrengthMeter';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useFormRules, useFormValid } from '../login/useLogin';
-  import { passwordChange } from '/@/api/sys/user';
-
-  export default defineComponent({
-    name: 'step2',
-    components: {
-      Button,
-      Form,
-      FormItem: Form.Item,
-      InputPassword: Input.Password,
-      Input,
-      StrengthMeter,
-    },
-    props: {
-      accountInfo: {
-        type: Object,
-        default: () => ({}),
-      },
-    },
-    emits: ['prevStep', 'nextStep'],
-    setup(props, { emit }) {
-      const { t } = useI18n();
-      const { createErrorModal } = useMessage();
-      const { accountInfo } = props;
-      const formRef = ref();
-      const formData = reactive({
-        username: accountInfo.obj.username || '',
-        password: '',
-        confirmPassword: '',
-      });
-      const { getFormRules } = useFormRules(formData);
-      const { validForm } = useFormValid(formRef);
-
-      /**
-       * 涓婁竴姝�
-       */
-      function handlePrev() {
-        emit('prevStep', accountInfo.obj);
-      }
-
-      /**
-       * 涓嬩竴姝�
-       */
-      async function handleNext() {
-        const data = await validForm();
-        if (!data) return;
-        const resultInfo = await passwordChange(
-          toRaw({
-            username: data.username,
-            password: data.password,
-            smscode: accountInfo.obj.smscode,
-            phone: accountInfo.obj.phone,
-          })
-        );
-        if (resultInfo.success) {
-          //淇敼瀵嗙爜
-          emit('nextStep', accountInfo.obj);
-        } else {
-          //閿欒鎻愮ず
-          createErrorModal({
-            title: t('sys.api.errorTip'),
-            content: resultInfo.message || t('sys.api.networkExceptionMsg'),
-          });
-        }
-      }
-
-      return {
-        t,
-        formRef,
-        formData,
-        getFormRules,
-        handleNext,
-        handlePrev,
-      };
-    },
-  });
-</script>
diff --git a/src/views/sys/forget-password/step3.vue b/src/views/sys/forget-password/step3.vue
deleted file mode 100644
index 77ab02b..0000000
--- a/src/views/sys/forget-password/step3.vue
+++ /dev/null
@@ -1,71 +0,0 @@
-<template>
-  <Result status="success" title="鏇存敼瀵嗙爜鎴愬姛" :sub-title="getSubTitle">
-    <template #extra>
-      <a-button key="console" type="primary" @click="finish"> 杩斿洖鐧诲綍 </a-button>
-    </template>
-  </Result>
-</template>
-<script lang="ts">
-  import { defineComponent, ref, computed, unref, onMounted, watchEffect, watch } from 'vue';
-  import { Form, Input, Button, Result } from 'ant-design-vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useLoginState } from '../login/useLogin';
-  import { useCountdown } from '/@/components/CountDown/src/useCountdown';
-  import { propTypes } from '/@/utils/propTypes';
-
-  export default defineComponent({
-    name: 'step3',
-    components: {
-      Button,
-      Form,
-      FormItem: Form.Item,
-      Input,
-      Result,
-    },
-    props: {
-      accountInfo: {
-        type: Object,
-        default: () => ({}),
-      },
-      count: propTypes.number.def(5),
-    },
-    emits: ['finish'],
-    setup(props, { emit }) {
-      const { t } = useI18n();
-      const { accountInfo } = props;
-      const { handleBackLogin } = useLoginState();
-
-      const { currentCount, start } = useCountdown(props.count);
-      const getSubTitle = computed(() => {
-        return t('sys.login.subTitleText', [unref(currentCount)]);
-      });
-      /**
-       * 鍊掕鏃�
-       */
-      watchEffect(() => {
-        if (unref(currentCount) === 1) {
-          setTimeout(() => {
-            finish();
-          }, 500);
-        }
-      });
-
-      /**
-       * 缁撴潫鍥炶皟
-       */
-      function finish() {
-        handleBackLogin();
-        emit('finish');
-      }
-
-      onMounted(() => {
-        start();
-      });
-
-      return {
-        getSubTitle,
-        finish,
-      };
-    },
-  });
-</script>
diff --git a/src/views/sys/iframe/FrameBlank.vue b/src/views/sys/iframe/FrameBlank.vue
deleted file mode 100644
index a8a61f5..0000000
--- a/src/views/sys/iframe/FrameBlank.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-<template>
-  <div></div>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  export default defineComponent({
-    name: 'FrameBlank',
-  });
-</script>
diff --git a/src/views/sys/iframe/index.vue b/src/views/sys/iframe/index.vue
deleted file mode 100644
index e73bef3..0000000
--- a/src/views/sys/iframe/index.vue
+++ /dev/null
@@ -1,85 +0,0 @@
-<template>
-  <div :class="prefixCls" :style="getWrapStyle">
-    <Spin :spinning="loading" size="large" :style="getWrapStyle">
-      <iframe :src="frameSrc" :class="`${prefixCls}__main`" ref="frameRef" @load="hideLoading"></iframe>
-    </Spin>
-  </div>
-</template>
-<script lang="ts" setup>
-  import type { CSSProperties } from 'vue';
-  import { ref, unref, computed } from 'vue';
-  import { Spin } from 'ant-design-vue';
-  import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
-  import { propTypes } from '/@/utils/propTypes';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useLayoutHeight } from '/@/layouts/default/content/useContentViewHeight';
-
-  defineProps({
-    frameSrc: propTypes.string.def(''),
-  });
-
-  const loading = ref(true);
-  const topRef = ref(50);
-  const heightRef = ref(window.innerHeight);
-  const frameRef = ref<HTMLFrameElement>();
-  const { headerHeightRef } = useLayoutHeight();
-
-  const { prefixCls } = useDesign('iframe-page');
-  useWindowSizeFn(calcHeight, 150, { immediate: true });
-
-  const getWrapStyle = computed((): CSSProperties => {
-    return {
-      height: `${unref(heightRef)}px`,
-    };
-  });
-
-  function calcHeight() {
-    const iframe = unref(frameRef);
-    if (!iframe) {
-      return;
-    }
-    const top = headerHeightRef.value;
-    topRef.value = top;
-    heightRef.value = window.innerHeight - top;
-    const clientHeight = document.documentElement.clientHeight - top;
-    iframe.style.height = `${clientHeight}px`;
-  }
-
-  function hideLoading() {
-    loading.value = false;
-    calcHeight();
-  }
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-iframe-page';
-
-  .@{prefix-cls} {
-    .ant-spin-nested-loading {
-      position: relative;
-      height: 100%;
-
-      .ant-spin-container {
-        width: 100%;
-        height: 100%;
-        padding: 10px;
-      }
-    }
-
-    &__mask {
-      position: absolute;
-      top: 0;
-      left: 0;
-      width: 100%;
-      height: 100%;
-    }
-
-    &__main {
-      width: 100%;
-      height: 100%;
-      overflow: hidden;
-      background-color: @component-background;
-      border: 0;
-      box-sizing: border-box;
-    }
-  }
-</style>
diff --git a/src/views/sys/lock/LockPage.vue b/src/views/sys/lock/LockPage.vue
deleted file mode 100644
index 76262c3..0000000
--- a/src/views/sys/lock/LockPage.vue
+++ /dev/null
@@ -1,215 +0,0 @@
-<template>
-  <div :class="prefixCls" class="fixed inset-0 flex h-screen w-screen bg-black items-center justify-center">
-    <div
-      :class="`${prefixCls}__unlock`"
-      class="absolute top-0 left-1/2 flex pt-5 h-16 items-center justify-center sm:text-md xl:text-xl text-white flex-col cursor-pointer transform translate-x-1/2"
-      @click="handleShowForm(false)"
-      v-show="showDate"
-    >
-      <LockOutlined />
-      <span>{{ t('sys.lock.unlock') }}</span>
-    </div>
-
-    <div class="flex w-screen h-screen justify-center items-center">
-      <div :class="`${prefixCls}__hour`" class="relative mr-5 md:mr-20 w-2/5 h-2/5 md:h-4/5">
-        <span>{{ hour }}</span>
-        <span class="meridiem absolute left-5 top-5 text-md xl:text-xl" v-show="showDate">
-          {{ meridiem }}
-        </span>
-      </div>
-      <div :class="`${prefixCls}__minute w-2/5 h-2/5 md:h-4/5 `">
-        <span> {{ minute }}</span>
-      </div>
-    </div>
-    <transition name="fade-slide">
-      <div :class="`${prefixCls}-entry`" v-show="!showDate">
-        <div :class="`${prefixCls}-entry-content`">
-          <div :class="`${prefixCls}-entry__header enter-x`">
-            <img :src="userinfo.avatar || headerImg" :class="`${prefixCls}-entry__header-img`" />
-            <p :class="`${prefixCls}-entry__header-name`">
-              {{ userinfo.realname }}
-            </p>
-          </div>
-          <InputPassword :placeholder="t('sys.lock.placeholder')" class="enter-x" v-model:value="password" />
-          <span :class="`${prefixCls}-entry__err-msg enter-x`" v-if="errMsg">
-            {{ t('sys.lock.alert') }}
-          </span>
-          <div :class="`${prefixCls}-entry__footer enter-x`">
-            <a-button type="link" size="small" class="mt-2 mr-2 enter-x" :disabled="loading" @click="handleShowForm(true)">
-              {{ t('common.back') }}
-            </a-button>
-            <a-button type="link" size="small" class="mt-2 mr-2 enter-x" :disabled="loading" @click="goLogin">
-              {{ t('sys.lock.backToLogin') }}
-            </a-button>
-            <a-button class="mt-2" type="link" size="small" @click="unLock()" :loading="loading">
-              {{ t('sys.lock.entry') }}
-            </a-button>
-          </div>
-        </div>
-      </div>
-    </transition>
-
-    <div class="absolute bottom-5 w-full text-gray-300 xl:text-xl 2xl:text-3xl text-center enter-y">
-      <div class="text-5xl mb-4 enter-x" v-show="!showDate">
-        {{ hour }}:{{ minute }} <span class="text-3xl">{{ meridiem }}</span>
-      </div>
-      <div class="text-2xl"> {{ year }}/{{ month }}/{{ day }} {{ week }} </div>
-    </div>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref, computed } from 'vue';
-  import { Input } from 'ant-design-vue';
-  import { useUserStore } from '/@/store/modules/user';
-  import { useLockStore } from '/@/store/modules/lock';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useNow } from './useNow';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { LockOutlined } from '@ant-design/icons-vue';
-  import headerImg from '/@/assets/images/header.jpg';
-
-  const InputPassword = Input.Password;
-
-  const password = ref('');
-  const loading = ref(false);
-  const errMsg = ref(false);
-  const showDate = ref(true);
-
-  const { prefixCls } = useDesign('lock-page');
-  const lockStore = useLockStore();
-  const userStore = useUserStore();
-
-  const { hour, month, minute, meridiem, year, day, week } = useNow(true);
-
-  const { t } = useI18n();
-
-  const userinfo = computed(() => {
-    return userStore.getUserInfo || {};
-  });
-
-  /**
-   * @description: unLock
-   */
-  async function unLock() {
-    if (!password.value) {
-      return;
-    }
-    let pwd = password.value;
-    try {
-      loading.value = true;
-      const res = await lockStore.unLock(pwd);
-      errMsg.value = !res;
-    } finally {
-      loading.value = false;
-    }
-  }
-
-  function goLogin() {
-    userStore.logout(true);
-    lockStore.resetLockInfo();
-  }
-
-  function handleShowForm(show = false) {
-    showDate.value = show;
-  }
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-lock-page';
-
-  .@{prefix-cls} {
-    z-index: @lock-page-z-index;
-
-    &__unlock {
-      transform: translate(-50%, 0);
-    }
-
-    &__hour,
-    &__minute {
-      display: flex;
-      font-weight: 700;
-      color: #bababa;
-      background-color: #141313;
-      border-radius: 30px;
-      justify-content: center;
-      align-items: center;
-
-      @media screen and (max-width: @screen-md) {
-        span:not(.meridiem) {
-          font-size: 160px;
-        }
-      }
-
-      @media screen and (min-width: @screen-md) {
-        span:not(.meridiem) {
-          font-size: 160px;
-        }
-      }
-
-      @media screen and (max-width: @screen-sm) {
-        span:not(.meridiem) {
-          font-size: 90px;
-        }
-      }
-      @media screen and (min-width: @screen-lg) {
-        span:not(.meridiem) {
-          font-size: 220px;
-        }
-      }
-
-      @media screen and (min-width: @screen-xl) {
-        span:not(.meridiem) {
-          font-size: 260px;
-        }
-      }
-      @media screen and (min-width: @screen-2xl) {
-        span:not(.meridiem) {
-          font-size: 320px;
-        }
-      }
-    }
-
-    &-entry {
-      position: absolute;
-      top: 0;
-      left: 0;
-      display: flex;
-      width: 100%;
-      height: 100%;
-      background-color: rgba(0, 0, 0, 0.5);
-      backdrop-filter: blur(8px);
-      justify-content: center;
-      align-items: center;
-
-      &-content {
-        width: 260px;
-      }
-
-      &__header {
-        text-align: center;
-
-        &-img {
-          width: 70px;
-          margin: 0 auto;
-          border-radius: 50%;
-        }
-
-        &-name {
-          margin-top: 5px;
-          font-weight: 500;
-          color: #bababa;
-        }
-      }
-
-      &__err-msg {
-        display: inline-block;
-        margin-top: 10px;
-        color: @error-color;
-      }
-
-      &__footer {
-        display: flex;
-        justify-content: space-between;
-      }
-    }
-  }
-</style>
diff --git a/src/views/sys/lock/index.vue b/src/views/sys/lock/index.vue
deleted file mode 100644
index e8c4d55..0000000
--- a/src/views/sys/lock/index.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-<template>
-  <transition name="fade-bottom" mode="out-in">
-    <LockPage v-if="getIsLock" />
-  </transition>
-</template>
-<script lang="ts" setup>
-  import { computed } from 'vue';
-  import LockPage from './LockPage.vue';
-  import { useLockStore } from '/@/store/modules/lock';
-
-  const lockStore = useLockStore();
-  const getIsLock = computed(() => lockStore?.getLockInfo?.isLock ?? false);
-</script>
diff --git a/src/views/sys/lock/useNow.ts b/src/views/sys/lock/useNow.ts
deleted file mode 100644
index ee461fc..0000000
--- a/src/views/sys/lock/useNow.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { dateUtil } from '/@/utils/dateUtil';
-import { reactive, toRefs } from 'vue';
-import { tryOnMounted, tryOnUnmounted } from '@vueuse/core';
-
-export function useNow(immediate = true) {
-  let timer: IntervalHandle;
-
-  const state = reactive({
-    year: 0,
-    month: 0,
-    week: '',
-    day: 0,
-    hour: '',
-    minute: '',
-    second: 0,
-    meridiem: '',
-  });
-
-  const update = () => {
-    const now = dateUtil();
-
-    const h = now.format('HH');
-    const m = now.format('mm');
-    const s = now.get('s');
-
-    state.year = now.get('y');
-    state.month = now.get('M') + 1;
-    state.week = '鏄熸湡' + ['鏃�', '涓�', '浜�', '涓�', '鍥�', '浜�', '鍏�'][now.day()];
-    state.day = now.get('date');
-    state.hour = h;
-    state.minute = m;
-    state.second = s;
-
-    state.meridiem = now.format('A');
-  };
-
-  function start() {
-    update();
-    clearInterval(timer);
-    timer = setInterval(() => update(), 1000);
-  }
-
-  function stop() {
-    clearInterval(timer);
-  }
-
-  tryOnMounted(() => {
-    immediate && start();
-  });
-
-  tryOnUnmounted(() => {
-    stop();
-  });
-
-  return {
-    ...toRefs(state),
-    start,
-    stop,
-  };
-}
diff --git a/src/views/sys/login/ForgetPasswordForm.vue b/src/views/sys/login/ForgetPasswordForm.vue
deleted file mode 100644
index 4f2d152..0000000
--- a/src/views/sys/login/ForgetPasswordForm.vue
+++ /dev/null
@@ -1,68 +0,0 @@
-<template>
-  <template v-if="getShow">
-    <!--鑺傜偣-->
-    <a-steps style="margin-bottom: 20px" :current="currentTab">
-      <a-step title="鎵嬫満楠岃瘉" />
-      <a-step title="鏇存敼瀵嗙爜" />
-      <a-step title="瀹屾垚" />
-    </a-steps>
-    <!--缁勪欢-->
-    <div>
-      <step1 v-if="currentTab === 0" @nextStep="nextStep" />
-      <step2 v-if="currentTab === 1" @nextStep="nextStep" @prevStep="prevStep" :accountInfo="accountInfo" />
-      <step3 v-if="currentTab === 2" @prevStep="prevStep" @finish="finish" />
-    </div>
-  </template>
-</template>
-<script lang="ts" setup>
-  import { reactive, ref, computed, unref } from 'vue';
-  import { useLoginState, useFormRules, LoginStateEnum } from './useLogin';
-  import step1 from '../forget-password/step1.vue';
-  import step2 from '../forget-password/step2.vue';
-  import step3 from '../forget-password/step3.vue';
-  const { handleBackLogin, getLoginState } = useLoginState();
-  const { getFormRules } = useFormRules();
-
-  const formRef = ref();
-  const loading = ref(false);
-  const currentTab = ref(0);
-  const formData = reactive({
-    account: '',
-    mobile: '',
-    sms: '',
-  });
-  const getShow = computed(() => unref(getLoginState) === LoginStateEnum.RESET_PASSWORD);
-  const accountInfo = reactive({
-    obj: {
-      username: '',
-      phone: '',
-      smscode: '',
-    },
-  });
-  /**
-   * 涓嬩竴姝�
-   * @param data
-   */
-  function nextStep(data) {
-    accountInfo.obj = data;
-    if (currentTab.value < 4) {
-      currentTab.value += 1;
-    }
-  }
-  /**
-   * 涓婁竴姝�
-   * @param data
-   */
-  function prevStep(data) {
-    accountInfo.obj = data;
-    if (currentTab.value > 0) {
-      currentTab.value -= 1;
-    }
-  }
-  /**
-   * 缁撴潫
-   */
-  function finish() {
-    currentTab.value = 0;
-  }
-</script>
diff --git a/src/views/sys/login/Login.vue b/src/views/sys/login/Login.vue
deleted file mode 100644
index 59304c4..0000000
--- a/src/views/sys/login/Login.vue
+++ /dev/null
@@ -1,208 +0,0 @@
-<template>
-  <div :class="prefixCls" class="relative w-full h-full px-4">
-    <AppLocalePicker class="absolute text-white top-4 right-4 enter-x xl:text-gray-600" :showText="false" v-if="!sessionTimeout && showLocale" />
-    <AppDarkModeToggle class="absolute top-3 right-7 enter-x" v-if="!sessionTimeout" />
-    <span class="-enter-x xl:hidden">
-      <AppLogo :alwaysShowTitle="true" />
-    </span>
-
-    <div class="container relative h-full py-2 mx-auto sm:px-10">
-      <div class="flex h-full">
-        <div class="hidden min-h-full pl-4 mr-4 xl:flex xl:flex-col xl:w-6/12">
-          <AppLogo class="-enter-x" />
-          <div class="my-auto">
-            <img :alt="title" src="../../../assets/svg/login-box-bg.svg" class="w-1/2 -mt-16 -enter-x" />
-            <div class="mt-10 font-medium text-white -enter-x">
-              <span class="inline-block mt-4 text-3xl"> {{ t('sys.login.signInTitle') }}</span>
-            </div>
-            <div class="mt-5 font-normal text-white text-md dark:text-gray-500 -enter-x">
-              {{ t('sys.login.signInDesc') }}
-            </div>
-          </div>
-        </div>
-        <div class="flex w-full h-full py-5 xl:h-auto xl:py-0 xl:my-0 xl:w-6/12">
-          <div
-            :class="`${prefixCls}-form`"
-            class="relative w-full px-5 py-8 mx-auto my-auto rounded-md shadow-md xl:ml-16 xl:bg-transparent sm:px-8 xl:p-4 xl:shadow-none sm:w-3/4 lg:w-2/4 xl:w-auto enter-x"
-          >
-            <LoginForm />
-            <ForgetPasswordForm />
-            <RegisterForm />
-            <MobileForm />
-            <QrCodeForm />
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { computed } from 'vue';
-  import { AppLogo } from '/@/components/Application';
-  import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application';
-  import LoginForm from './LoginForm.vue';
-  import ForgetPasswordForm from './ForgetPasswordForm.vue';
-  import RegisterForm from './RegisterForm.vue';
-  import MobileForm from './MobileForm.vue';
-  import QrCodeForm from './QrCodeForm.vue';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useLocaleStore } from '/@/store/modules/locale';
-  import { useLoginState, LoginStateEnum } from './useLogin';
-  defineProps({
-    sessionTimeout: {
-      type: Boolean,
-    },
-  });
-
-  const globSetting = useGlobSetting();
-  const { prefixCls } = useDesign('login');
-  const { t } = useI18n();
-  const localeStore = useLocaleStore();
-  const showLocale = localeStore.getShowPicker;
-  const title = computed(() => globSetting?.title ?? '');
-  const { handleBackLogin } = useLoginState();
-  handleBackLogin();
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-login';
-  @logo-prefix-cls: ~'@{namespace}-app-logo';
-  @countdown-prefix-cls: ~'@{namespace}-countdown-input';
-  @dark-bg: #293146;
-
-  html[data-theme='dark'] {
-    .@{prefix-cls} {
-      background-color: @dark-bg;
-
-      &::before {
-        background-image: url(/@/assets/svg/login-bg-dark.svg);
-      }
-
-      .ant-input,
-      .ant-input-password {
-        background-color: #232a3b;
-      }
-
-      .ant-btn:not(.ant-btn-link):not(.ant-btn-primary) {
-        border: 1px solid #4a5569;
-      }
-
-      &-form {
-        background: transparent !important;
-      }
-
-      .app-iconify {
-        color: #fff;
-      }
-    }
-
-    input.fix-auto-fill,
-    .fix-auto-fill input {
-      -webkit-text-fill-color: #c9d1d9 !important;
-      box-shadow: inherit !important;
-    }
-  }
-
-  .@{prefix-cls} {
-    min-height: 100%;
-    overflow: hidden;
-    @media (max-width: @screen-xl) {
-      background-color: #293146;
-
-      .@{prefix-cls}-form {
-        background-color: #fff;
-      }
-    }
-
-    &::before {
-      position: absolute;
-      top: 0;
-      left: 0;
-      width: 100%;
-      height: 100%;
-      margin-left: -48%;
-      background-image: url(/@/assets/svg/login-bg.svg);
-      background-position: 100%;
-      background-repeat: no-repeat;
-      background-size: auto 100%;
-      content: '';
-      @media (max-width: @screen-xl) {
-        display: none;
-      }
-    }
-
-    .@{logo-prefix-cls} {
-      position: absolute;
-      top: 12px;
-      height: 30px;
-
-      &__title {
-        font-size: 16px;
-        color: #fff;
-      }
-
-      img {
-        width: 32px;
-      }
-    }
-
-    .container {
-      .@{logo-prefix-cls} {
-        display: flex;
-        width: 60%;
-        height: 80px;
-
-        &__title {
-          font-size: 24px;
-          color: #fff;
-        }
-
-        img {
-          width: 48px;
-        }
-      }
-    }
-
-    &-sign-in-way {
-      .anticon {
-        font-size: 22px;
-        color: #888;
-        cursor: pointer;
-
-        &:hover {
-          color: @primary-color;
-        }
-      }
-    }
-
-    input:not([type='checkbox']) {
-      min-width: 360px;
-
-      @media (max-width: @screen-xl) {
-        min-width: 320px;
-      }
-
-      @media (max-width: @screen-lg) {
-        min-width: 260px;
-      }
-
-      @media (max-width: @screen-md) {
-        min-width: 240px;
-      }
-
-      @media (max-width: @screen-sm) {
-        min-width: 160px;
-      }
-    }
-
-    .@{countdown-prefix-cls} input {
-      min-width: unset;
-    }
-
-    .ant-divider-inner-text {
-      font-size: 12px;
-      color: @text-color-secondary;
-    }
-  }
-</style>
diff --git a/src/views/sys/login/LoginForm.vue b/src/views/sys/login/LoginForm.vue
deleted file mode 100644
index 6fdbac7..0000000
--- a/src/views/sys/login/LoginForm.vue
+++ /dev/null
@@ -1,196 +0,0 @@
-<template>
-  <LoginFormTitle v-show="getShow" class="enter-x" />
-  <Form class="p-4 enter-x" :model="formData" :rules="getFormRules" ref="formRef" v-show="getShow" @keypress.enter="handleLogin">
-    <FormItem name="account" class="enter-x">
-      <Input size="large" v-model:value="formData.account" :placeholder="t('sys.login.userName')" class="fix-auto-fill" />
-    </FormItem>
-    <FormItem name="password" class="enter-x">
-      <InputPassword size="large" visibilityToggle v-model:value="formData.password" :placeholder="t('sys.login.password')" />
-    </FormItem>
-
-    <!--楠岃瘉鐮�-->
-    <ARow class="enter-x">
-      <ACol :span="12">
-        <FormItem name="inputCode" class="enter-x">
-          <Input size="large" v-model:value="formData.inputCode" :placeholder="t('sys.login.inputCode')" style="min-width: 100px" />
-        </FormItem>
-      </ACol>
-      <ACol :span="8">
-        <FormItem :style="{ 'text-align': 'right', 'margin-left': '20px' }" class="enter-x">
-          <img
-            v-if="randCodeData.requestCodeSuccess"
-            style="margin-top: 2px; max-width: initial"
-            :src="randCodeData.randCodeImage"
-            @click="handleChangeCheckCode"
-          />
-          <img v-else style="margin-top: 2px; max-width: initial" src="../../../assets/images/checkcode.png" @click="handleChangeCheckCode" />
-        </FormItem>
-      </ACol>
-    </ARow>
-
-    <ARow class="enter-x">
-      <ACol :span="12">
-        <FormItem>
-          <!-- No logic, you need to deal with it yourself -->
-          <Checkbox v-model:checked="rememberMe" size="small">
-            {{ t('sys.login.rememberMe') }}
-          </Checkbox>
-        </FormItem>
-      </ACol>
-      <ACol :span="12">
-        <FormItem :style="{ 'text-align': 'right' }">
-          <!-- No logic, you need to deal with it yourself -->
-          <Button type="link" size="small" @click="setLoginState(LoginStateEnum.RESET_PASSWORD)">
-            {{ t('sys.login.forgetPassword') }}
-          </Button>
-        </FormItem>
-      </ACol>
-    </ARow>
-
-    <FormItem class="enter-x">
-      <Button type="primary" size="large" block @click="handleLogin" :loading="loading">
-        {{ t('sys.login.loginButton') }}
-      </Button>
-      <!-- <Button size="large" class="mt-4 enter-x" block @click="handleRegister">
-              {{ t('sys.login.registerButton') }}
-            </Button> -->
-    </FormItem>
-    <ARow class="enter-x">
-      <ACol :md="8" :xs="24">
-        <Button block @click="setLoginState(LoginStateEnum.MOBILE)">
-          {{ t('sys.login.mobileSignInFormTitle') }}
-        </Button>
-      </ACol>
-      <ACol :md="8" :xs="24" class="!my-2 !md:my-0 xs:mx-0 md:mx-2">
-        <Button block @click="setLoginState(LoginStateEnum.QR_CODE)">
-          {{ t('sys.login.qrSignInFormTitle') }}
-        </Button>
-      </ACol>
-      <ACol :md="7" :xs="24">
-        <Button block @click="setLoginState(LoginStateEnum.REGISTER)">
-          {{ t('sys.login.registerButton') }}
-        </Button>
-      </ACol>
-    </ARow>
-
-    <Divider class="enter-x">{{ t('sys.login.otherSignIn') }}</Divider>
-
-    <div class="flex justify-evenly enter-x" :class="`${prefixCls}-sign-in-way`">
-      <a @click="onThirdLogin('github')" title="github"><GithubFilled /></a>
-      <a @click="onThirdLogin('wechat_enterprise')" title="浼佷笟寰俊"> <icon-font class="item-icon" type="icon-qiyeweixin3" /></a>
-      <a @click="onThirdLogin('dingtalk')" title="閽夐拤"><DingtalkCircleFilled /></a>
-      <a @click="onThirdLogin('wechat_open')" title="寰俊"><WechatFilled /></a>
-    </div>
-  </Form>
-  <!-- 绗笁鏂圭櫥褰曠浉鍏冲脊妗� -->
-  <ThirdModal ref="thirdModalRef"></ThirdModal>
-</template>
-<script lang="ts" setup>
-  import { reactive, ref, toRaw, unref, computed, onMounted } from 'vue';
-
-  import { Checkbox, Form, Input, Row, Col, Button, Divider } from 'ant-design-vue';
-  import { GithubFilled, WechatFilled, DingtalkCircleFilled, createFromIconfontCN } from '@ant-design/icons-vue';
-  import LoginFormTitle from './LoginFormTitle.vue';
-  import ThirdModal from './ThirdModal.vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  import { useUserStore } from '/@/store/modules/user';
-  import { LoginStateEnum, useLoginState, useFormRules, useFormValid } from './useLogin';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { getCodeInfo } from '/@/api/sys/user';
-  //import { onKeyStroke } from '@vueuse/core';
-
-  const ACol = Col;
-  const ARow = Row;
-  const FormItem = Form.Item;
-  const InputPassword = Input.Password;
-  const IconFont = createFromIconfontCN({
-    scriptUrl: '//at.alicdn.com/t/font_2316098_umqusozousr.js',
-  });
-  const { t } = useI18n();
-  const { notification, createErrorModal } = useMessage();
-  const { prefixCls } = useDesign('login');
-  const userStore = useUserStore();
-
-  const { setLoginState, getLoginState } = useLoginState();
-  const { getFormRules } = useFormRules();
-
-  const formRef = ref();
-  const thirdModalRef = ref();
-  const loading = ref(false);
-  const rememberMe = ref(false);
-
-  const formData = reactive({
-    account: 'jeecg',
-    password: '123456',
-    inputCode: '',
-  });
-  const randCodeData = reactive({
-    randCodeImage: '',
-    requestCodeSuccess: false,
-    checkKey: null,
-  });
-
-  const { validForm } = useFormValid(formRef);
-
-  //onKeyStroke('Enter', handleLogin);
-
-  const getShow = computed(() => unref(getLoginState) === LoginStateEnum.LOGIN);
-
-  async function handleLogin() {
-    const data = await validForm();
-    if (!data) return;
-    try {
-      loading.value = true;
-      const { userInfo } = await userStore.login(
-        toRaw({
-          password: data.password,
-          username: data.account,
-          captcha: data.inputCode,
-          checkKey: randCodeData.checkKey,
-          mode: 'none', //涓嶈榛樿鐨勯敊璇彁绀�
-        })
-      );
-      if (userInfo) {
-        notification.success({
-          message: t('sys.login.loginSuccessTitle'),
-          description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.realname}`,
-          duration: 3,
-        });
-      }
-    } catch (error) {
-      notification.error({
-        message: t('sys.api.errorTip'),
-        description: error.message || t('sys.api.networkExceptionMsg'),
-        duration: 3,
-      });
-      loading.value = false;
-
-      //update-begin-author:taoyan date:2022-5-3 for: issues/41 鐧诲綍椤甸潰锛屽綋杈撳叆楠岃瘉鐮侀敊璇椂锛岄獙璇佺爜鍥剧墖瑕佸埛鏂颁竴涓嬶紝鑰屼笉鏄繚鎸佹棫鐨勯獙璇佺爜鍥剧墖涓嶅彉
-      handleChangeCheckCode();
-      //update-end-author:taoyan date:2022-5-3 for: issues/41 鐧诲綍椤甸潰锛屽綋杈撳叆楠岃瘉鐮侀敊璇椂锛岄獙璇佺爜鍥剧墖瑕佸埛鏂颁竴涓嬶紝鑰屼笉鏄繚鎸佹棫鐨勯獙璇佺爜鍥剧墖涓嶅彉
-    }
-  }
-  function handleChangeCheckCode() {
-    formData.inputCode = '';
-    //TODO 鍏煎mock鍜屾帴鍙o紝鏆傛椂杩欐牱澶勭悊
-    randCodeData.checkKey = 1629428467008; //new Date().getTime();
-    getCodeInfo(randCodeData.checkKey).then((res) => {
-      randCodeData.randCodeImage = res;
-      randCodeData.requestCodeSuccess = true;
-    });
-  }
-
-  /**
-   * 绗笁鏂圭櫥褰�
-   * @param type
-   */
-  function onThirdLogin(type) {
-    thirdModalRef.value.onThirdLogin(type);
-  }
-  //鍒濆鍖栭獙璇佺爜
-  onMounted(() => {
-    handleChangeCheckCode();
-  });
-</script>
diff --git a/src/views/sys/login/LoginFormTitle.vue b/src/views/sys/login/LoginFormTitle.vue
deleted file mode 100644
index a673636..0000000
--- a/src/views/sys/login/LoginFormTitle.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-<template>
-  <h2 class="mb-3 text-2xl font-bold text-center xl:text-3xl enter-x xl:text-left">
-    {{ getFormTitle }}
-  </h2>
-</template>
-<script lang="ts" setup>
-  import { computed, unref } from 'vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { LoginStateEnum, useLoginState } from './useLogin';
-
-  const { t } = useI18n();
-
-  const { getLoginState } = useLoginState();
-
-  const getFormTitle = computed(() => {
-    const titleObj = {
-      [LoginStateEnum.RESET_PASSWORD]: t('sys.login.forgetFormTitle'),
-      [LoginStateEnum.LOGIN]: t('sys.login.signInFormTitle'),
-      [LoginStateEnum.REGISTER]: t('sys.login.signUpFormTitle'),
-      [LoginStateEnum.MOBILE]: t('sys.login.mobileSignInFormTitle'),
-      [LoginStateEnum.QR_CODE]: t('sys.login.qrSignInFormTitle'),
-    };
-    return titleObj[unref(getLoginState)];
-  });
-</script>
diff --git a/src/views/sys/login/LoginSelect.vue b/src/views/sys/login/LoginSelect.vue
deleted file mode 100644
index 57ad48d..0000000
--- a/src/views/sys/login/LoginSelect.vue
+++ /dev/null
@@ -1,334 +0,0 @@
-<template>
-  <BasicModal v-bind="config" @register="registerModal" :title="currTitle" wrapClassName="loginSelectModal" v-model:visible="visible">
-    <a-form ref="formRef" :model="formState" :rules="rules" v-bind="layout" :colon="false" class="loginSelectForm">
-      <!--澶氱鎴烽�夋嫨-->
-      <a-form-item v-if="isMultiTenant" name="tenantId" :validate-status="validate_status">
-        <!--label鍐呭-->
-        <template #label>
-          <a-tooltip placement="topLeft">
-            <template #title>
-              <span>鎮ㄩ毝灞炰簬澶氱鎴凤紝璇烽�夋嫨鐧诲綍绉熸埛</span>
-            </template>
-            <a-avatar style="background-color: #87d068" :size="30"> 绉熸埛 </a-avatar>
-          </a-tooltip>
-        </template>
-        <template #extra v-if="validate_status == 'error'">
-          <span style="color: #ed6f6f">璇烽�夋嫨鐧诲綍绉熸埛</span>
-        </template>
-        <!--绉熸埛涓嬫媺鍐呭-->
-        <a-select
-          v-model:value="formState.tenantId"
-          @change="handleTenantChange"
-          placeholder="璇烽�夋嫨鐧诲綍绉熸埛"
-          :class="{ 'valid-error': validate_status == 'error' }"
-        >
-          <template v-for="tenant in tenantList" :key="tenant.id">
-            <a-select-option :value="tenant.id">{{ tenant.name }}</a-select-option>
-          </template>
-        </a-select>
-      </a-form-item>
-      <!--澶氶儴闂ㄩ�夋嫨-->
-      <a-form-item v-if="isMultiDepart" :validate-status="validate_status1" :colon="false">
-        <!--label鍐呭-->
-        <template #label>
-          <a-tooltip placement="topLeft">
-            <template #title>
-              <span>鎮ㄩ毝灞炰簬澶氶儴闂紝璇烽�夋嫨鐧诲綍閮ㄩ棬</span>
-            </template>
-            <a-avatar style="background-color: rgb(104, 208, 203)" :size="30"> 閮ㄩ棬 </a-avatar>
-          </a-tooltip>
-        </template>
-        <template #extra v-if="validate_status1 == 'error'">
-          <span style="color: #ed6f6f">璇烽�夋嫨鐧诲綍閮ㄩ棬</span>
-        </template>
-        <!--閮ㄩ棬涓嬫媺鍐呭-->
-        <a-select
-          v-model:value="formState.orgCode"
-          @change="handleDepartChange"
-          placeholder="璇烽�夋嫨鐧诲綍閮ㄩ棬"
-          :class="{ 'valid-error': validate_status1 == 'error' }"
-        >
-          <template v-for="depart in departList" :key="depart.orgCode">
-            <a-select-option :value="depart.orgCode">{{ depart.departName }}</a-select-option>
-          </template>
-        </a-select>
-      </a-form-item>
-    </a-form>
-
-    <template #footer>
-      <a-button @click="handleSubmit" type="primary">纭</a-button>
-    </template>
-  </BasicModal>
-</template>
-
-<script lang="ts">
-  import { defineComponent, ref, computed, watch, unref, reactive, UnwrapRef } from 'vue';
-  import { Avatar } from 'ant-design-vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useUserStore } from '/@/store/modules/user';
-  import { defHttp } from '/@/utils/http/axios';
-  interface FormState {
-    orgCode: string | undefined;
-    tenantId: number;
-  }
-  export default defineComponent({
-    name: 'loginSelect',
-    components: {
-      Avatar,
-      BasicModal,
-    },
-    emits: ['success', 'register'],
-    setup(props, { emit }) {
-      const userStore = useUserStore();
-      const { notification } = useMessage();
-      //绉熸埛閰嶇疆
-      const isMultiTenant = ref(false);
-      const tenantList = ref([]);
-      const validate_status = ref('');
-      //閮ㄩ棬閰嶇疆
-      const isMultiDepart = ref(false);
-      const departList = ref([]);
-      const validate_status1 = ref('');
-      //寮圭獥鏄鹃殣
-      const visible = ref(false);
-      //鐧诲綍鐢ㄦ埛
-      const username = ref('');
-      //琛ㄥ崟
-      const formRef = ref();
-      //閫夋嫨鐨勭鎴烽儴闂ㄤ俊鎭�
-      const formState: UnwrapRef<FormState> = reactive({
-        orgCode: undefined,
-        tenantId: null,
-      });
-
-      const config = {
-        maskClosable: false,
-        closable: false,
-        canFullscreen: false,
-        width: '500px',
-        minHeight: 20,
-        maxHeight: 20,
-      };
-      //寮圭獥鎿嶄綔
-      const [registerModal, { closeModal }] = useModalInner();
-
-      //褰撳墠鏍囬
-      const currTitle = computed(() => {
-        if (unref(isMultiDepart) && unref(isMultiTenant)) {
-          return '璇烽�夋嫨绉熸埛鍜岄儴闂�';
-        } else if (unref(isMultiDepart) && !unref(isMultiTenant)) {
-          return '璇烽�夋嫨閮ㄩ棬';
-        } else if (!unref(isMultiDepart) && unref(isMultiTenant)) {
-          return '璇烽�夋嫨绉熸埛';
-        }
-      });
-
-      const rules = ref({
-        tenantId: [{ required: unref(isMultiTenant), type: 'number', message: '璇烽�夋嫨绉熸埛', trigger: 'change' }],
-        orgCode: [{ required: unref(isMultiDepart), message: '璇烽�夋嫨閮ㄩ棬', trigger: 'change' }],
-      });
-
-      const layout = {
-        labelCol: { span: 4 },
-        wrapperCol: { span: 18 },
-      };
-      /**
-       * 澶勭悊閮ㄩ棬鎯呭喌
-       */
-      function bizDepart(loginResult) {
-        //濡傛灉鐧诲綍鎺ュ彛杩斿洖浜嗙敤鎴蜂笂娆$櫥褰曠鎴稩D锛屽垯涓嶉渶瑕侀噸鏂伴�夋嫨
-        if(loginResult.userInfo?.orgCode && loginResult.userInfo?.orgCode!==''){
-          isMultiDepart.value = false;
-          return;
-        }
-        
-        let multi_depart = loginResult.multi_depart;
-        console.log("loginResult::",loginResult);
-        //0:鏃犻儴闂� 1:涓�涓儴闂� 2:澶氫釜閮ㄩ棬
-        if (multi_depart == 0) {
-          notification.warn({
-            message: '鎻愮ず',
-            description: `鎮ㄥ皻鏈綊灞為儴闂�,璇风‘璁よ处鍙蜂俊鎭痐,
-            duration: 3,
-          });
-          isMultiDepart.value = false;
-        } else if (multi_depart == 2) {
-          isMultiDepart.value = true;
-          departList.value = loginResult.departs;
-        } else {
-          isMultiDepart.value = false;
-        }
-      }
-
-      /**
-       * 澶勭悊绉熸埛鎯呭喌
-       */
-      function bizTenantList(loginResult) {
-        //濡傛灉鐧诲綍鎺ュ彛杩斿洖浜嗙敤鎴蜂笂娆$櫥褰曠鎴稩D锛屽垯涓嶉渶瑕侀噸鏂伴�夋嫨
-        if(loginResult.userInfo?.loginTenantId && loginResult.userInfo?.loginTenantId!==0){
-          isMultiTenant.value = false;
-          return;
-        }
-        
-        let tenantArr = loginResult.tenantList;
-        if (Array.isArray(tenantArr)) {
-          if (tenantArr.length === 0) {
-            isMultiTenant.value = false;
-            userStore.setTenant(formState.tenantId);
-          } else if (tenantArr.length === 1) {
-            formState.tenantId = tenantArr[0].id;
-            isMultiTenant.value = false;
-            userStore.setTenant(formState.tenantId);
-          } else {
-            isMultiTenant.value = true;
-            tenantList.value = tenantArr;
-          }
-        }
-      }
-
-      /**
-       * 纭閫変腑鐨勭鎴峰拰閮ㄩ棬淇℃伅
-       */
-      function handleSubmit() {
-        if (unref(isMultiTenant) && !formState.tenantId) {
-          validate_status.value = 'error';
-          return false;
-        }
-        if (unref(isMultiDepart) && !formState.orgCode) {
-          validate_status1.value = 'error';
-          return false;
-        }
-        formRef.value
-          .validate()
-          .then(() => {
-            departResolve()
-              .then(() => {
-                userStore.setTenant(formState.tenantId);
-                emit('success');
-              })
-              .catch((e) => {
-                console.log('鐧诲綍閫夋嫨鍑虹幇闂', e);
-              })
-              .finally(() => {
-                close();
-              });
-          })
-          .catch((err) => {
-            console.log('琛ㄥ崟鏍¢獙鏈�氳繃error', err);
-          });
-      }
-      /**
-       *鍒囨崲閫夋嫨閮ㄩ棬
-       */
-      function departResolve() {
-        return new Promise((resolve, reject) => {
-          if (!unref(isMultiDepart) && !unref(isMultiTenant)) {
-            resolve();
-          } else {
-            let params = { orgCode: formState.orgCode,loginTenantId: formState.tenantId, username: unref(username) };
-            defHttp.put({ url: '/sys/selectDepart', params }).then((res) => {
-              if (res.userInfo) {
-                userStore.setUserInfo(res.userInfo);
-                resolve();
-              } else {
-                requestFailed(res);
-                userStore.logout();
-                reject();
-              }
-            });
-          }
-        });
-      }
-
-      /**
-       * 璇锋眰澶辫触澶勭悊
-       */
-      function requestFailed(err) {
-        notification.error({
-          message: '鐧诲綍澶辫触',
-          description: ((err.response || {}).data || {}).message || err.message || '璇锋眰鍑虹幇閿欒锛岃绋嶅悗鍐嶈瘯',
-          duration: 4,
-        });
-      }
-
-      /**
-       * 鍏抽棴model
-       */
-      function close() {
-        closeModal();
-        reset();
-      }
-      /**
-       * 寮圭獥鎵撳紑鍓嶅鐞�
-       */
-      async function show(loginResult) {
-        console.log("showLoginResult::", loginResult);
-        if (loginResult) {
-          username.value = userStore.username;
-          await reset();
-          await bizDepart(loginResult);
-          await bizTenantList(loginResult);
-          if (!unref(isMultiDepart) && !unref(isMultiTenant)) {
-            emit('success', userStore.getUserInfo);
-          } else {
-            visible.value = true;
-          }
-        }
-        //鐧诲綍寮圭獥瀹屾垚鍚庯紝灏嗙櫥褰曠殑鏍囪瘑璁剧疆鎴恌alse
-        loginResult.isLogin = false;
-        userStore.setLoginInfo(loginResult);
-      }
-
-      /**
-       *閲嶇疆鏁版嵁
-       */
-      function reset() {
-        tenantList.value = [];
-        validate_status.value = '';
-
-        departList.value = [];
-        validate_status1.value = '';
-      }
-
-      function handleTenantChange(e) {
-        validate_status.value = '';
-      }
-
-      function handleDepartChange(e) {
-        validate_status1.value = '';
-      }
-
-      return {
-        registerModal,
-        visible,
-        tenantList,
-        isMultiTenant,
-        validate_status,
-        isMultiDepart,
-        departList,
-        validate_status1,
-        formState,
-        rules,
-        layout,
-        formRef,
-        currTitle,
-        config,
-        handleTenantChange,
-        handleDepartChange,
-        show,
-        handleSubmit,
-      };
-    },
-  });
-</script>
-
-<style lang="less" scoped>
-  .loginSelectForm {
-    margin-bottom: -20px;
-  }
-
-  .loginSelectModal {
-    top: 10px;
-  }
-</style>
diff --git a/src/views/sys/login/MobileForm.vue b/src/views/sys/login/MobileForm.vue
deleted file mode 100644
index affdb2c..0000000
--- a/src/views/sys/login/MobileForm.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-<template>
-  <template v-if="getShow">
-    <LoginFormTitle class="enter-x" />
-    <Form class="p-4 enter-x" :model="formData" :rules="getFormRules" ref="formRef">
-      <FormItem name="mobile" class="enter-x">
-        <Input size="large" v-model:value="formData.mobile" :placeholder="t('sys.login.mobile')" class="fix-auto-fill" />
-      </FormItem>
-      <FormItem name="sms" class="enter-x">
-        <CountdownInput
-          size="large"
-          class="fix-auto-fill"
-          v-model:value="formData.sms"
-          :placeholder="t('sys.login.smsCode')"
-          :sendCodeApi="sendCodeApi"
-        />
-      </FormItem>
-
-      <FormItem class="enter-x">
-        <Button type="primary" size="large" block @click="handleLogin" :loading="loading">
-          {{ t('sys.login.loginButton') }}
-        </Button>
-        <Button size="large" block class="mt-4" @click="handleBackLogin">
-          {{ t('sys.login.backSignIn') }}
-        </Button>
-      </FormItem>
-    </Form>
-  </template>
-</template>
-<script lang="ts" setup>
-  import { reactive, ref, computed, unref, toRaw } from 'vue';
-  import { Form, Input, Button } from 'ant-design-vue';
-  import { CountdownInput } from '/@/components/CountDown';
-  import LoginFormTitle from './LoginFormTitle.vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useLoginState, useFormRules, useFormValid, LoginStateEnum, SmsEnum } from './useLogin';
-  import { useUserStore } from '/@/store/modules/user';
-  import { getCaptcha } from '/@/api/sys/user';
-  const FormItem = Form.Item;
-  const { t } = useI18n();
-  const { handleBackLogin, getLoginState } = useLoginState();
-  const { getFormRules } = useFormRules();
-  const { notification, createErrorModal } = useMessage();
-  const userStore = useUserStore();
-  const formRef = ref();
-  const loading = ref(false);
-  const formData = reactive({
-    mobile: '',
-    sms: '',
-  });
-  const { validForm } = useFormValid(formRef);
-  const getShow = computed(() => unref(getLoginState) === LoginStateEnum.MOBILE);
-  /**
-   * 鐧诲綍
-   */
-  async function handleLogin() {
-    const data = await validForm();
-    if (!data) return;
-    try {
-      loading.value = true;
-      const userInfo = await userStore.phoneLogin(
-        toRaw({
-          mobile: data.mobile,
-          captcha: data.sms,
-          mode: 'none', //涓嶈榛樿鐨勯敊璇彁绀�
-        })
-      );
-      if (userInfo) {
-        notification.success({
-          message: t('sys.login.loginSuccessTitle'),
-          description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.realname}`,
-          duration: 3,
-        });
-      }
-    } catch (error) {
-      notification.error({
-        message: t('sys.api.errorTip'),
-        description: error.message || t('sys.api.networkExceptionMsg'),
-        duration: 3,
-      });
-    } finally {
-      loading.value = false;
-    }
-  }
-  //鍊掕鏃舵墽琛屽墠鐨勫嚱鏁�
-  function sendCodeApi() {
-    return getCaptcha({ mobile: formData.mobile, smsmode: SmsEnum.FORGET_PASSWORD });
-  }
-</script>
diff --git a/src/views/sys/login/OAuth2Login.vue b/src/views/sys/login/OAuth2Login.vue
deleted file mode 100644
index 9b07a4f..0000000
--- a/src/views/sys/login/OAuth2Login.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-<template>
-  <div> </div>
-</template>
-
-<script setup lang="ts">
-  import { ref } from 'vue';
-  import { isOAuth2AppEnv, sysOAuth2Login } from '/@/views/sys/login/useLogin';
-  import { useRouter } from 'vue-router';
-  import { PageEnum } from '/@/enums/pageEnum';
-  import { router } from '/@/router';
-  import { useUserStore } from '/@/store/modules/user';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  const isOAuth = ref<boolean>(isOAuth2AppEnv());
-  const env = ref<any>({ thirdApp: false, wxWork: false, dingtalk: false });
-  const { currentRoute } = useRouter();
-  const route = currentRoute.value;
-  if (!isOAuth2AppEnv()) {
-    router.replace({ path: PageEnum.BASE_LOGIN, query: route.query });
-  }
-
-  if (isOAuth.value) {
-    checkEnv();
-  }
-
-  /**
-   * 妫�娴嬪綋鍓嶇殑鐜
-   */
-  function checkEnv() {
-    // 鍒ゆ柇褰撴椂鏄惁鏄紒涓氬井淇$幆澧�
-    if (/wxwork/i.test(navigator.userAgent)) {
-      env.value.thirdApp = true;
-      env.value.wxWork = true;
-    }
-    // 鍒ゆ柇褰撴椂鏄惁鏄拤閽夌幆澧�
-    if (/dingtalk/i.test(navigator.userAgent)) {
-      env.value.thirdApp = true;
-      env.value.dingtalk = true;
-    }
-    doOAuth2Login();
-  }
-
-  /**
-   * 杩涜OAuth2鐧诲綍鎿嶄綔
-   */
-  function doOAuth2Login() {
-    if (env.value.thirdApp) {
-      // 鍒ゆ柇鏄惁鎼哄甫浜員oken锛屾槸灏辫鏄庣櫥褰曟垚鍔�
-      if (route.query.oauth2LoginToken) {
-        let token = route.query.oauth2LoginToken;
-        //鎵ц鐧诲綍鎿嶄綔
-        thirdLogin({ token, thirdType: route.query.thirdType });
-      } else if (env.value.wxWork) {
-        sysOAuth2Login('wechat_enterprise');
-      } else if (env.value.dingtalk) {
-        sysOAuth2Login('dingtalk');
-      }
-    }
-  }
-
-  /**
-   * 绗笁鏂圭櫥褰�
-   * @param params
-   */
-  function thirdLogin(params) {
-    const userStore = useUserStore();
-    const { notification } = useMessage();
-    const { t } = useI18n();
-    userStore.ThirdLogin(params).then((res) => {
-      if (res && res.userInfo) {
-        notification.success({
-          message: t('sys.login.loginSuccessTitle'),
-          description: `${t('sys.login.loginSuccessDesc')}: ${res.userInfo.realname}`,
-          duration: 3,
-        });
-      } else {
-        notification.error({
-          message: '鐧诲綍澶辫触',
-          description: ((res.response || {}).data || {}).message || res.message || '璇锋眰鍑虹幇閿欒锛岃绋嶅悗鍐嶈瘯',
-          duration: 4,
-        });
-      }
-    });
-  }
-</script>
\ No newline at end of file
diff --git a/src/views/sys/login/QrCodeForm.vue b/src/views/sys/login/QrCodeForm.vue
deleted file mode 100644
index 3b36731..0000000
--- a/src/views/sys/login/QrCodeForm.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-<template>
-  <template v-if="getShow">
-    <LoginFormTitle class="enter-x" />
-    <div class="enter-x min-w-64 min-h-64">
-      <QrCode :value="qrCodeUrl" class="enter-x flex justify-center xl:justify-start" :width="280" />
-      <Divider class="enter-x">{{ scanContent }}</Divider>
-      <Button size="large" block class="mt-4 enter-x" @click="handleBackLogin">
-        {{ t('sys.login.backSignIn') }}
-      </Button>
-    </div>
-  </template>
-</template>
-<script lang="ts" setup>
-  import { computed, onMounted, unref, ref, watch } from 'vue';
-  import LoginFormTitle from './LoginFormTitle.vue';
-  import { Button, Divider } from 'ant-design-vue';
-  import { QrCode } from '/@/components/Qrcode/index';
-  import { useUserStore } from '/@/store/modules/user';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useLoginState, LoginStateEnum } from './useLogin';
-  import { getLoginQrcode, getQrcodeToken } from '/@/api/sys/user';
-  const qrCodeUrl = ref('');
-  let timer: IntervalHandle;
-  const { t } = useI18n();
-  const userStore = useUserStore();
-  const { handleBackLogin, getLoginState } = useLoginState();
-  const state = ref('0');
-  const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE);
-  const scanContent = computed(() => {
-    return unref(state) === '0' ? t('sys.login.scanSign') : t('sys.login.scanSuccess');
-  });
-  //鍔犺浇浜岀淮鐮佷俊鎭�
-  function loadQrCode() {
-    state.value = '0';
-    getLoginQrcode().then((res) => {
-      qrCodeUrl.value = res.qrcodeId;
-      if (res.qrcodeId) {
-        openTimer(res.qrcodeId);
-      }
-    });
-  }
-  //鐩戞帶鎵爜鐘舵��
-  function watchQrcodeToken(qrcodeId) {
-    getQrcodeToken({ qrcodeId: qrcodeId }).then((res) => {
-      let token = res.token;
-      if (token == '-2') {
-        //浜岀淮鐮佽繃鏈熼噸鏂拌幏鍙�
-        loadQrCode();
-        clearInterval(timer);
-      }
-      //鎵爜鎴愬姛
-      if (res.success) {
-        state.value = '2';
-        clearInterval(timer);
-        setTimeout(() => {
-          userStore.qrCodeLogin(token);
-        }, 500);
-      }
-    });
-  }
-
-  /** 寮�鍚畾鏃跺櫒 */
-  function openTimer(qrcodeId) {
-    watchQrcodeToken(qrcodeId);
-    closeTimer();
-    timer = setInterval(() => {
-      watchQrcodeToken(qrcodeId);
-    }, 1500);
-  }
-
-  /** 鍏抽棴瀹氭椂鍣� */
-  function closeTimer() {
-    if (timer) clearInterval(timer);
-  }
-
-  watch(getShow, (v) => {
-    if (v) {
-      loadQrCode();
-    } else {
-      closeTimer();
-    }
-  });
-</script>
diff --git a/src/views/sys/login/RegisterForm.vue b/src/views/sys/login/RegisterForm.vue
deleted file mode 100644
index 528ddea..0000000
--- a/src/views/sys/login/RegisterForm.vue
+++ /dev/null
@@ -1,114 +0,0 @@
-<template>
-  <template v-if="getShow">
-    <LoginFormTitle class="enter-x" />
-    <Form class="p-4 enter-x" :model="formData" :rules="getFormRules" ref="formRef">
-      <FormItem name="account" class="enter-x">
-        <Input class="fix-auto-fill" size="large" v-model:value="formData.account" :placeholder="t('sys.login.userName')" />
-      </FormItem>
-      <FormItem name="mobile" class="enter-x">
-        <Input size="large" v-model:value="formData.mobile" :placeholder="t('sys.login.mobile')" class="fix-auto-fill" />
-      </FormItem>
-      <FormItem name="sms" class="enter-x">
-        <CountdownInput
-          size="large"
-          class="fix-auto-fill"
-          v-model:value="formData.sms"
-          :placeholder="t('sys.login.smsCode')"
-          :sendCodeApi="sendCodeApi"
-        />
-      </FormItem>
-      <FormItem name="password" class="enter-x">
-        <StrengthMeter size="large" v-model:value="formData.password" :placeholder="t('sys.login.password')" />
-      </FormItem>
-      <FormItem name="confirmPassword" class="enter-x">
-        <InputPassword size="large" visibilityToggle v-model:value="formData.confirmPassword" :placeholder="t('sys.login.confirmPassword')" />
-      </FormItem>
-
-      <FormItem class="enter-x" name="policy">
-        <!-- No logic, you need to deal with it yourself -->
-        <Checkbox v-model:checked="formData.policy" size="small">
-          {{ t('sys.login.policy') }}
-        </Checkbox>
-      </FormItem>
-
-      <Button type="primary" class="enter-x" size="large" block @click="handleRegister" :loading="loading">
-        {{ t('sys.login.registerButton') }}
-      </Button>
-      <Button size="large" block class="mt-4 enter-x" @click="handleBackLogin">
-        {{ t('sys.login.backSignIn') }}
-      </Button>
-    </Form>
-  </template>
-</template>
-<script lang="ts" setup>
-  import { reactive, ref, unref, computed, toRaw } from 'vue';
-  import LoginFormTitle from './LoginFormTitle.vue';
-  import { Form, Input, Button, Checkbox } from 'ant-design-vue';
-  import { StrengthMeter } from '/@/components/StrengthMeter';
-  import { CountdownInput } from '/@/components/CountDown';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useLoginState, useFormRules, useFormValid, LoginStateEnum, SmsEnum } from './useLogin';
-  import { register, getCaptcha } from '/@/api/sys/user';
-  const FormItem = Form.Item;
-  const InputPassword = Input.Password;
-  const { t } = useI18n();
-  const { handleBackLogin, getLoginState } = useLoginState();
-  const { notification, createErrorModal } = useMessage();
-  const formRef = ref();
-  const loading = ref(false);
-  const formData = reactive({
-    account: '',
-    password: '',
-    confirmPassword: '',
-    mobile: '',
-    sms: '',
-    policy: false,
-  });
-  const { getFormRules } = useFormRules(formData);
-  const { validForm } = useFormValid(formRef);
-  const getShow = computed(() => unref(getLoginState) === LoginStateEnum.REGISTER);
-  /**
-   * 娉ㄥ唽
-   */
-  async function handleRegister() {
-    const data = await validForm();
-    if (!data) return;
-    try {
-      loading.value = true;
-      const resultInfo = await register(
-        toRaw({
-          username: data.account,
-          password: data.password,
-          phone: data.mobile,
-          smscode: data.sms,
-        })
-      );
-      if (resultInfo && resultInfo.data.success) {
-        notification.success({
-          description: resultInfo.data.message || t('sys.api.registerMsg'),
-          duration: 3,
-        });
-        handleBackLogin();
-      } else {
-        notification.warning({
-          message: t('sys.api.errorTip'),
-          description: resultInfo.data.message || t('sys.api.networkExceptionMsg'),
-          duration: 3,
-        });
-      }
-    } catch (error) {
-      notification.error({
-        message: t('sys.api.errorTip'),
-        description: error.message || t('sys.api.networkExceptionMsg'),
-        duration: 3,
-      });
-    } finally {
-      loading.value = false;
-    }
-  }
-  //鍙戦�侀獙璇佺爜鐨勫嚱鏁�
-  function sendCodeApi() {
-    return getCaptcha({ mobile: formData.mobile, smsmode: SmsEnum.REGISTER });
-  }
-</script>
diff --git a/src/views/sys/login/SessionTimeoutLogin.vue b/src/views/sys/login/SessionTimeoutLogin.vue
deleted file mode 100644
index d1a2f34..0000000
--- a/src/views/sys/login/SessionTimeoutLogin.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <transition>
-    <div :class="prefixCls">
-      <Login sessionTimeout />
-    </div>
-  </transition>
-</template>
-<script lang="ts" setup>
-  import { onBeforeUnmount, onMounted, ref } from 'vue';
-  import Login from './Login.vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useUserStore } from '/@/store/modules/user';
-  import { usePermissionStore } from '/@/store/modules/permission';
-  import { useAppStore } from '/@/store/modules/app';
-  import { PermissionModeEnum } from '/@/enums/appEnum';
-
-  const { prefixCls } = useDesign('st-login');
-  const userStore = useUserStore();
-  const permissionStore = usePermissionStore();
-  const appStore = useAppStore();
-  const userId = ref<Nullable<number | string>>(0);
-
-  const isBackMode = () => {
-    return appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK;
-  };
-
-  onMounted(() => {
-    // 璁板綍褰撳墠鐨刄serId
-    userId.value = userStore.getUserInfo?.userId;
-    console.log('Mounted', userStore.getUserInfo);
-  });
-
-  onBeforeUnmount(() => {
-    if (userId.value && userId.value !== userStore.getUserInfo.userId) {
-      // 鐧诲綍鐨勪笉鏄悓涓�涓敤鎴凤紝鍒锋柊鏁翠釜椤甸潰浠ヤ究涓㈠純涔嬪墠鐢ㄦ埛鐨勯〉闈㈢姸鎬�
-      document.location.reload();
-    } else if (isBackMode() && permissionStore.getLastBuildMenuTime === 0) {
-      // 鍚庡彴鏉冮檺妯″紡涓嬶紝娌℃湁鎴愬姛鍔犺浇杩囪彍鍗曪紝灏遍噸鏂板姞杞芥暣涓〉闈€�傝繖閫氬父鍙戠敓鍦ㄤ細璇濊繃鏈熷悗鎸塅5鍒锋柊鏁翠釜椤甸潰鍚庤浇鍏ヤ簡鏈ā鍧楄繖绉嶅満鏅�
-      document.location.reload();
-    }
-  });
-</script>
-<style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-st-login';
-
-  .@{prefix-cls} {
-    position: fixed;
-    z-index: 9999999;
-    width: 100%;
-    height: 100%;
-    background: @component-background;
-  }
-</style>
diff --git a/src/views/sys/login/ThirdModal.vue b/src/views/sys/login/ThirdModal.vue
deleted file mode 100644
index 0adffa3..0000000
--- a/src/views/sys/login/ThirdModal.vue
+++ /dev/null
@@ -1,64 +0,0 @@
-<template>
-  <!-- 绗笁鏂圭櫥褰曠粦瀹氳处鍙峰瘑鐮佽緭鍏ュ脊妗� -->
-  <a-modal title="璇疯緭鍏ュ瘑鐮�" v-model:visible="thirdPasswordShow" @ok="thirdLoginCheckPassword" @cancel="thirdLoginNoPassword">
-    <a-input-password placeholder="璇疯緭鍏ュ瘑鐮�" v-model:value="thirdLoginPassword" style="margin: 15px; width: 80%" />
-  </a-modal>
-
-  <!-- 绗笁鏂圭櫥褰曟彁绀烘槸鍚︾粦瀹氳处鍙峰脊妗� -->
-  <a-modal :footer="null" :closable="false" v-model:visible="thirdConfirmShow" :class="'ant-modal-confirm'">
-    <div class="ant-modal-confirm-body-wrapper">
-      <div class="ant-modal-confirm-body">
-        <QuestionCircleFilled style="color: #faad14" />
-        <span class="ant-modal-confirm-title">鎻愮ず</span>
-        <div class="ant-modal-confirm-content"> 宸叉湁鍚屽悕璐﹀彿瀛樺湪,璇风‘璁ゆ槸鍚︾粦瀹氳璐﹀彿锛� </div>
-      </div>
-      <div class="ant-modal-confirm-btns">
-        <a-button @click="thirdLoginUserCreate" :loading="thirdCreateUserLoding">鍒涘缓鏂拌处鍙�</a-button>
-        <a-button @click="thirdLoginUserBind" type="primary">纭缁戝畾</a-button>
-      </div>
-    </div>
-  </a-modal>
-
-  <!-- 绗笁鏂圭櫥褰曠粦瀹氭墜鏈哄彿 -->
-  <a-modal title="缁戝畾鎵嬫満鍙�" v-model:visible="bindingPhoneModal" :maskClosable="false">
-    <Form class="p-4 enter-x" style="margin: 15px 10px">
-      <FormItem class="enter-x">
-        <a-input size="large" placeholder="璇疯緭鍏ユ墜鏈哄彿" v-model:value="thirdPhone" class="fix-auto-fill">
-          <template #prefix>
-            <Icon icon="ant-design:mobile-outlined" :style="{ color: 'rgba(0,0,0,.25)' }"></Icon>
-          </template>
-        </a-input>
-      </FormItem>
-      <FormItem name="sms" class="enter-x">
-        <CountdownInput size="large" class="fix-auto-fill" v-model:value="thirdCaptcha" placeholder="璇疯緭鍏ラ獙璇佺爜" :sendCodeApi="sendCodeApi">
-          <template #prefix>
-            <Icon icon="ant-design:mail-outlined" :style="{ color: 'rgba(0,0,0,.25)' }"></Icon>
-          </template>
-        </CountdownInput>
-      </FormItem>
-    </Form>
-    <template #footer>
-      <a-button type="primary" @click="thirdHandleOk">纭畾</a-button>
-    </template>
-  </a-modal>
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Form, Input } from 'ant-design-vue';
-  import { CountdownInput } from '/@/components/CountDown';
-  import { useThirdLogin } from '/@/hooks/system/useThirdLogin';
-  import { QuestionCircleFilled } from '@ant-design/icons-vue';
-
-  const FormItem = Form.Item;
-  const InputPassword = Input.Password;
-
-  export default defineComponent({
-    name: 'ThirdModal',
-    components: { FormItem, Form, InputPassword, CountdownInput, QuestionCircleFilled },
-    setup() {
-      return {
-        ...useThirdLogin(),
-      };
-    },
-  });
-</script>
diff --git a/src/views/sys/login/TokenLoginPage.vue b/src/views/sys/login/TokenLoginPage.vue
deleted file mode 100644
index d386fb2..0000000
--- a/src/views/sys/login/TokenLoginPage.vue
+++ /dev/null
@@ -1,209 +0,0 @@
-<template>
-    <div class="app-loading">
-        <div class="app-loading-wrap">
-            <img src="/resource/img/logo.png" class="app-loading-logo" alt="Logo">
-            <div class="app-loading-dots">
-                <span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
-            </div>
-            <div class="app-loading-title">鏅鸿兘涓嵂骞茬嚗鏈烘暟瀛楀寲杞﹂棿</div>
-        </div>
-    </div>
-</template>
-
-
-<script lang="ts">
-  /**
-   * 鍦板潃涓惡甯oken锛岃烦杞嚦姝ら〉闈㈣繘琛岀櫥褰曟搷浣�
-   */
-  import { useRoute, useRouter } from 'vue-router';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useUserStore } from '/@/store/modules/user';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  export default {
-    name: "TokenLogin",
-    setup(){
-      const route = useRoute();
-      let router = useRouter();
-      const {createMessage, notification} = useMessage()
-      const {t} = useI18n();
-      const routeQuery:any = route.query;
-      if(!routeQuery){
-        createMessage.warning('鍙傛暟鏃犳晥')
-      }
-
-      const token = routeQuery['loginToken'];
-      if(!token){
-        createMessage.warning('token鏃犳晥')
-      }
-      const userStore = useUserStore();
-      userStore.ThirdLogin({ token, thirdType:'email' }).then(res => {
-        console.log("res====>doThirdLogin",res)
-        if(res && res.userInfo){
-          requestSuccess(res)
-        }else{
-          requestFailed(res)
-        }
-      });
-
-      function requestFailed (err) {
-        notification.error({
-          message: '鐧诲綍澶辫触',
-          description: ((err.response || {}).data || {}).message || err.message || "璇锋眰鍑虹幇閿欒锛岃绋嶅悗鍐嶈瘯",
-          duration: 4,
-        });
-      }
-
-      function requestSuccess(res){
-        let info = routeQuery.info;
-        if(info){
-          let query = JSON.parse(info)
-          let taskId = query.taskId;
-          let path = '/task/handle/'+taskId
-          router.replace({ path, query })
-          notification.success({
-            message: t('sys.login.loginSuccessTitle'),
-            description: `${t('sys.login.loginSuccessDesc')}: ${res.userInfo.realname}`,
-            duration: 3,
-          });
-        }else{
-          notification.error({
-            message: '鍙傛暟澶辨晥',
-            description: "椤甸潰璺宠浆鍙傛暟涓㈠け锛岃鏌ョ湅鏃ュ織",
-            duration: 4,
-          });
-        }
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-    html[data-theme='dark'] .app-loading {
-        background-color: #2c344a;
-    }
-
-    html[data-theme='dark'] .app-loading .app-loading-title {
-        color: rgba(255, 255, 255, 0.85);
-    }
-
-    .app-loading {
-        display: flex;
-        width: 100%;
-        height: 100%;
-        justify-content: center;
-        align-items: center;
-        flex-direction: column;
-        background-color: #f4f7f9;
-    }
-
-    .app-loading .app-loading-wrap {
-        position: absolute;
-        top: 50%;
-        left: 50%;
-        display: flex;
-        -webkit-transform: translate3d(-50%, -50%, 0);
-        transform: translate3d(-50%, -50%, 0);
-        justify-content: center;
-        align-items: center;
-        flex-direction: column;
-    }
-
-    .app-loading .dots {
-        display: flex;
-        padding: 98px;
-        justify-content: center;
-        align-items: center;
-    }
-
-    .app-loading .app-loading-title {
-        display: flex;
-        margin-top: 30px;
-        font-size: 30px;
-        color: rgba(0, 0, 0, 0.85);
-        justify-content: center;
-        align-items: center;
-    }
-
-    .app-loading .app-loading-logo {
-        display: block;
-        width: 90px;
-        margin: 0 auto;
-        margin-bottom: 20px;
-    }
-
-    .dot {
-        position: relative;
-        display: inline-block;
-        width: 48px;
-        height: 48px;
-        margin-top: 30px;
-        font-size: 32px;
-        transform: rotate(45deg);
-        box-sizing: border-box;
-        animation: antRotate 1.2s infinite linear;
-    }
-
-    .dot i {
-        position: absolute;
-        display: block;
-        width: 20px;
-        height: 20px;
-        background-color: #0065cc;
-        border-radius: 100%;
-        opacity: 0.3;
-        transform: scale(0.75);
-        animation: antSpinMove 1s infinite linear alternate;
-        transform-origin: 50% 50%;
-    }
-
-    .dot i:nth-child(1) {
-        top: 0;
-        left: 0;
-    }
-
-    .dot i:nth-child(2) {
-        top: 0;
-        right: 0;
-        -webkit-animation-delay: 0.4s;
-        animation-delay: 0.4s;
-    }
-
-    .dot i:nth-child(3) {
-        right: 0;
-        bottom: 0;
-        -webkit-animation-delay: 0.8s;
-        animation-delay: 0.8s;
-    }
-
-    .dot i:nth-child(4) {
-        bottom: 0;
-        left: 0;
-        -webkit-animation-delay: 1.2s;
-        animation-delay: 1.2s;
-    }
-    @keyframes antRotate {
-        to {
-            -webkit-transform: rotate(405deg);
-            transform: rotate(405deg);
-        }
-    }
-    @-webkit-keyframes antRotate {
-        to {
-            -webkit-transform: rotate(405deg);
-            transform: rotate(405deg);
-        }
-    }
-    @keyframes antSpinMove {
-        to {
-            opacity: 1;
-        }
-    }
-    @-webkit-keyframes antSpinMove {
-        to {
-            opacity: 1;
-        }
-    }
-
-</style>
diff --git a/src/views/sys/login/useLogin.ts b/src/views/sys/login/useLogin.ts
deleted file mode 100644
index 029abde..0000000
--- a/src/views/sys/login/useLogin.ts
+++ /dev/null
@@ -1,184 +0,0 @@
-import type { ValidationRule } from 'ant-design-vue/lib/form/Form';
-import type { RuleObject } from 'ant-design-vue/lib/form/interface';
-import { ref, computed, unref, Ref } from 'vue';
-import { useI18n } from '/@/hooks/web/useI18n';
-import { checkOnlyUser } from '/@/api/sys/user';
-import { defHttp } from '/@/utils/http/axios';
-
-export enum LoginStateEnum {
-  LOGIN,
-  REGISTER,
-  RESET_PASSWORD,
-  MOBILE,
-  QR_CODE,
-}
-
-export enum SmsEnum {
-  LOGIN = '0',
-  REGISTER = '1',
-  FORGET_PASSWORD = '2',
-}
-const currentState = ref(LoginStateEnum.LOGIN);
-
-export function useLoginState() {
-  function setLoginState(state: LoginStateEnum) {
-    currentState.value = state;
-  }
-
-  const getLoginState = computed(() => currentState.value);
-
-  function handleBackLogin() {
-    setLoginState(LoginStateEnum.LOGIN);
-  }
-
-  return { setLoginState, getLoginState, handleBackLogin };
-}
-
-export function useFormValid<T extends Object = any>(formRef: Ref<any>) {
-  async function validForm() {
-    const form = unref(formRef);
-    if (!form) return;
-    const data = await form.validate();
-    return data as T;
-  }
-
-  return { validForm };
-}
-
-export function useFormRules(formData?: Recordable) {
-  const { t } = useI18n();
-
-  const getAccountFormRule = computed(() => createRule(t('sys.login.accountPlaceholder')));
-  const getPasswordFormRule = computed(() => createRule(t('sys.login.passwordPlaceholder')));
-  const getSmsFormRule = computed(() => createRule(t('sys.login.smsPlaceholder')));
-  const getMobileFormRule = computed(() => createRule(t('sys.login.mobilePlaceholder')));
-
-  const getRegisterAccountRule = computed(() => createRegisterAccountRule('account'));
-  const getRegisterMobileRule = computed(() => createRegisterAccountRule('mobile'));
-
-  const validatePolicy = async (_: RuleObject, value: boolean) => {
-    return !value ? Promise.reject(t('sys.login.policyPlaceholder')) : Promise.resolve();
-  };
-
-  const validateConfirmPassword = (password: string) => {
-    return async (_: RuleObject, value: string) => {
-      if (!value) {
-        return Promise.reject(t('sys.login.passwordPlaceholder'));
-      }
-      if (value !== password) {
-        return Promise.reject(t('sys.login.diffPwd'));
-      }
-      return Promise.resolve();
-    };
-  };
-
-  const getFormRules = computed((): { [k: string]: ValidationRule | ValidationRule[] } => {
-    const accountFormRule = unref(getAccountFormRule);
-    const passwordFormRule = unref(getPasswordFormRule);
-    const smsFormRule = unref(getSmsFormRule);
-    const mobileFormRule = unref(getMobileFormRule);
-
-    const registerAccountRule = unref(getRegisterAccountRule);
-    const registerMobileRule = unref(getRegisterMobileRule);
-
-    const mobileRule = {
-      sms: smsFormRule,
-      mobile: mobileFormRule,
-    };
-    switch (unref(currentState)) {
-      // register form rules
-      case LoginStateEnum.REGISTER:
-        return {
-          account: registerAccountRule,
-          password: passwordFormRule,
-          mobile: registerMobileRule,
-          sms: smsFormRule,
-          confirmPassword: [{ validator: validateConfirmPassword(formData?.password), trigger: 'change' }],
-          policy: [{ validator: validatePolicy, trigger: 'change' }],
-        };
-
-      // reset password form rules
-      case LoginStateEnum.RESET_PASSWORD:
-        return {
-          username: accountFormRule,
-          confirmPassword: [{ validator: validateConfirmPassword(formData?.password), trigger: 'change' }],
-          ...mobileRule,
-        };
-
-      // mobile form rules
-      case LoginStateEnum.MOBILE:
-        return mobileRule;
-
-      // login form rules
-      default:
-        return {
-          account: accountFormRule,
-          password: passwordFormRule,
-        };
-    }
-  });
-  return { getFormRules };
-}
-
-function createRule(message: string) {
-  return [
-    {
-      required: true,
-      message,
-      trigger: 'change',
-    },
-  ];
-}
-function createRegisterAccountRule(type) {
-  return [
-    {
-      validator: type == 'account' ? checkUsername : checkPhone,
-      trigger: 'change',
-    },
-  ];
-}
-
-function checkUsername(rule, value, callback) {
-  const { t } = useI18n();
-  if (!value) {
-    return Promise.reject(t('sys.login.accountPlaceholder'));
-  } else {
-    return new Promise((resolve, reject) => {
-      checkOnlyUser({ username: value }).then((res) => {
-        res.success ? resolve() : reject('鐢ㄦ埛鍚嶅凡瀛樺湪!');
-      });
-    });
-  }
-}
-async function checkPhone(rule, value, callback) {
-  const { t } = useI18n();
-  var reg = /^1[3456789]\d{9}$/;
-  if (!reg.test(value)) {
-    return Promise.reject(new Error('璇疯緭鍏ユ纭墜鏈哄彿'));
-  } else {
-    return new Promise((resolve, reject) => {
-      checkOnlyUser({ phone: value }).then((res) => {
-        res.success ? resolve() : reject('鎵嬫満鍙峰凡瀛樺湪!');
-      });
-    });
-  }
-}
-
-//update-begin---author:wangshuai ---date:20220629  for锛歔issues/I5BG1I]vue3涓嶆敮鎸乤uth2鐧诲綍------------
-/**
- * 鍒ゆ柇鏄惁鏄疧Auth2APP鐜
- */
-export function isOAuth2AppEnv() {
-  return /wxwork|dingtalk/i.test(navigator.userAgent);
-}
-
-/**
- * 鍚庡彴鏋勯�爋auth2鐧诲綍鍦板潃
- * @param source
- */
-export function sysOAuth2Login(source) {
-  let url = `${window._CONFIG['domianURL']}/sys/thirdLogin/oauth2/${source}/login`;
-  url += `?state=${encodeURIComponent(window.location.origin)}`;
-  window.location.href = url;
-}
-//update-end---author:wangshuai ---date:20220629  for锛歔issues/I5BG1I]vue3涓嶆敮鎸乤uth2鐧诲綍------------
\ No newline at end of file
diff --git a/src/views/sys/redirect/index.vue b/src/views/sys/redirect/index.vue
deleted file mode 100644
index 7aa5463..0000000
--- a/src/views/sys/redirect/index.vue
+++ /dev/null
@@ -1,30 +0,0 @@
-<template>
-  <div></div>
-</template>
-<script lang="ts" setup>
-  import { unref } from 'vue';
-  import { useRouter } from 'vue-router';
-
-  const { currentRoute, replace } = useRouter();
-
-  const { params, query } = unref(currentRoute);
-  const { path, _redirect_type = 'path' } = params;
-
-  Reflect.deleteProperty(params, '_redirect_type');
-  Reflect.deleteProperty(params, 'path');
-
-  const _path = Array.isArray(path) ? path.join('/') : path;
-
-  if (_redirect_type === 'name') {
-    replace({
-      name: _path,
-      query,
-      params,
-    });
-  } else {
-    replace({
-      path: _path.startsWith('/') ? _path : '/' + _path,
-      query,
-    });
-  }
-</script>
diff --git a/src/views/system/address/address.api.ts b/src/views/system/address/address.api.ts
deleted file mode 100644
index 4890d34..0000000
--- a/src/views/system/address/address.api.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-export enum Api {
-  list = '/sys/user/queryByOrgCodeForAddressList',
-  positionList = '/sys/position/list',
-  queryDepartTreeSync = '/sys/sysDepart/queryDepartTreeSync',
-}
-/**
- * 鑾峰彇閮ㄩ棬鏍戝垪琛�
- */
-export const queryDepartTreeSync = (params?) => defHttp.get({ url: Api.queryDepartTreeSync, params });
-/**
- * 閮ㄩ棬鐢ㄦ埛淇℃伅
- */
-export const list = (params?) => defHttp.get({ url: Api.list, params });
-/**
- * 鑱屽姟list
- */
-export const positionList = (params?) => defHttp.get({ url: Api.positionList, params });
diff --git a/src/views/system/address/address.data.ts b/src/views/system/address/address.data.ts
deleted file mode 100644
index ffa5945..0000000
--- a/src/views/system/address/address.data.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { FormSchema } from '/@/components/Form';
-import { BasicColumn } from '/@/components/Table';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '濮撳悕',
-    dataIndex: 'realname',
-    width: 150,
-  },
-  {
-    title: '宸ュ彿',
-    dataIndex: 'workNo',
-    width: 100,
-  },
-  {
-    title: '閮ㄩ棬',
-    dataIndex: 'departName',
-    width: 200,
-  },
-  {
-    title: '鑱屽姟',
-    dataIndex: 'post',
-    width: 150,
-    slots: { customRender: 'post' },
-  },
-  {
-    title: '鎵嬫満',
-    width: 150,
-    dataIndex: 'telephone',
-  },
-  {
-    title: '閭',
-    width: 150,
-    dataIndex: 'email',
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    label: '濮撳悕',
-    field: 'realname',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '宸ュ彿',
-    field: 'workNo',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-];
diff --git a/src/views/system/address/components/DepartLeftTree.vue b/src/views/system/address/components/DepartLeftTree.vue
deleted file mode 100644
index 1225fea..0000000
--- a/src/views/system/address/components/DepartLeftTree.vue
+++ /dev/null
@@ -1,158 +0,0 @@
-<template>
-  <a-card :bordered="false" style="height: 100%">
-    <a-spin :spinning="loading">
-      <a-input-search placeholder="鎸夐儴闂ㄥ悕绉版悳绱⑩��" style="margin-bottom: 10px" @search="onSearch" allowClear />
-      <!--缁勭粐鏈烘瀯鏍�-->
-      <template v-if="treeData.length > 0">
-        <a-tree
-          v-if="!treeReloading"
-          showLine
-          :clickRowToExpand="false"
-          :treeData="treeData"
-          :selectedKeys="selectedKeys"
-          :load-data="loadChildrenTreeData"
-          v-model:expandedKeys="expandedKeys"
-          @select="onSelect"
-        ></a-tree>
-      </template>
-      <a-empty v-else description="鏆傛棤鏁版嵁" />
-    </a-spin>
-  </a-card>
-</template>
-
-<script lang="ts" setup>
-  import { inject, nextTick, ref, unref, defineExpose } from 'vue';
-  import { queryDepartTreeSync } from '../address.api';
-  import { searchByKeywords } from '/@/views/system/departUser/depart.user.api';
-  import { Popconfirm } from 'ant-design-vue';
-
-  const prefixCls = inject('prefixCls');
-  const emit = defineEmits(['select', 'rootTreeData']);
-
-  const loading = ref<boolean>(false);
-  // 閮ㄩ棬鏍戝垪琛ㄦ暟鎹�
-  const treeData = ref<any[]>([]);
-  // 褰撳墠灞曞紑鐨勯」
-  const expandedKeys = ref<any[]>([]);
-  // 褰撳墠閫変腑鐨勯」
-  const selectedKeys = ref<any[]>([]);
-  // 鏍戠粍浠堕噸鏂板姞杞�
-  const treeReloading = ref<boolean>(false);
-  // 褰撳墠閫変腑鐨勯儴闂�
-  const currentDepart = ref<any>(null);
-  // 鎼滅储鍏抽敭瀛�
-  const searchKeyword = ref('');
-
-  // 鍔犺浇椤剁骇閮ㄩ棬淇℃伅
-  async function loadRootTreeData() {
-    try {
-      loading.value = true;
-      treeData.value = [];
-      const result = await queryDepartTreeSync();
-      if (Array.isArray(result)) {
-        treeData.value = result;
-      }
-      if (expandedKeys.value.length === 0) {
-        autoExpandParentNode();
-      }
-    } finally {
-      loading.value = false;
-    }
-  }
-
-  loadRootTreeData();
-
-  // 鍔犺浇瀛愮骇閮ㄩ棬淇℃伅
-  async function loadChildrenTreeData(treeNode) {
-    try {
-      const result = await queryDepartTreeSync({
-        pid: treeNode.dataRef.id,
-      });
-      if (result.length == 0) {
-        treeNode.dataRef.isLeaf = true;
-      } else {
-        treeNode.dataRef.children = result;
-        if (expandedKeys.value.length > 0) {
-          // 鍒ゆ柇鑾峰彇鐨勫瓙绾ф槸鍚︽湁褰撳墠灞曞紑鐨勯」
-          let subKeys: any[] = [];
-          for (let key of expandedKeys.value) {
-            if (result.findIndex((item) => item.id === key) !== -1) {
-              subKeys.push(key);
-            }
-          }
-          if (subKeys.length > 0) {
-            expandedKeys.value = [...expandedKeys.value];
-          }
-        }
-      }
-      treeData.value = [...treeData.value];
-    } catch (e) {
-      console.error(e);
-    }
-    return Promise.resolve();
-  }
-
-  // 鑷姩灞曞紑鐖惰妭鐐癸紝鍙睍寮�涓�绾�
-  function autoExpandParentNode() {
-    let item = treeData.value[0];
-    if (item) {
-      if (!item.isLeaf) {
-        expandedKeys.value = [item.key];
-      }
-      reloadTree();
-    }
-  }
-
-  // 閲嶆柊鍔犺浇鏍戠粍浠讹紝闃叉鏃犳硶榛樿灞曞紑鏁版嵁
-  async function reloadTree() {
-    await nextTick();
-    treeReloading.value = true;
-    await nextTick();
-    treeReloading.value = false;
-  }
-
-  /**
-   * 璁剧疆褰撳墠閫変腑鐨勮
-   */
-  function setSelectedKey(key: string, data?: object) {
-    selectedKeys.value = [key];
-    if (data) {
-      currentDepart.value = data;
-      emit('select', data);
-    }
-  }
-
-  // 鎼滅储浜嬩欢
-  async function onSearch(value: string) {
-    if (value) {
-      try {
-        loading.value = true;
-        treeData.value = [];
-        let result = await searchByKeywords({ keyWord: value });
-        if (Array.isArray(result)) {
-          treeData.value = result;
-        }
-        autoExpandParentNode();
-      } finally {
-        loading.value = false;
-      }
-    } else {
-      loadRootTreeData();
-    }
-    searchKeyword.value = value;
-  }
-
-  // 鏍戦�夋嫨浜嬩欢
-  function onSelect(selKeys, event) {
-    if (selKeys.length > 0 && selectedKeys.value[0] !== selKeys[0]) {
-      setSelectedKey(selKeys[0], event.selectedNodes[0]);
-    } else {
-      // 杩欐牱鍙互闃叉鐢ㄦ埛鍙栨秷閫夋嫨
-      setSelectedKey(selectedKeys.value[0]);
-    }
-  }
-
-  defineExpose({
-    loadRootTreeData,
-  });
-</script>
diff --git a/src/views/system/address/index.less b/src/views/system/address/index.less
deleted file mode 100644
index e1f751a..0000000
--- a/src/views/system/address/index.less
+++ /dev/null
@@ -1,10 +0,0 @@
-//noinspection LessUnresolvedVariable
-@prefix-cls: ~'@{namespace}-depart-manage';
-
-.@{prefix-cls} {
-  &--box {
-    .ant-tabs-nav {
-      padding: 0 20px;
-    }
-  }
-}
diff --git a/src/views/system/address/index.vue b/src/views/system/address/index.vue
deleted file mode 100644
index 02e2bc6..0000000
--- a/src/views/system/address/index.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-<template>
-  <a-row :class="['p-4', `${prefixCls}--box`]" type="flex" :gutter="10" style="max-height: 800px">
-    <a-col :xl="6" :lg="24" :md="24" style="margin-bottom: 10px">
-      <DepartLeftTree ref="leftTree" @select="onTreeSelect" />
-    </a-col>
-    <a-col :xl="18" :lg="24" :md="24" style="margin-bottom: 10px">
-      <div style="height: 100%; background-color: white">
-        <!--寮曠敤琛ㄦ牸-->
-        <BasicTable @register="registerTable">
-          <template #post="{ text }">
-            {{
-              (text || '')
-                .split(',')
-                .map((t) => (positionInfo[t] ? positionInfo[t] : t))
-                .join(',')
-            }}
-          </template>
-        </BasicTable>
-      </div>
-    </a-col>
-  </a-row>
-</template>
-
-<script lang="ts" setup>
-  import { provide, ref, unref } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import DepartLeftTree from './components/DepartLeftTree.vue';
-  import { BasicTable } from '/@/components/Table';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { columns, searchFormSchema } from './address.data';
-  import { list, positionList } from './address.api';
-
-  const { prefixCls } = useDesign('address-list');
-  provide('prefixCls', prefixCls);
-
-  // 缁欏瓙缁勪欢瀹氫箟涓�涓猺ef鍙橀噺
-  const leftTree = ref();
-
-  // 褰撳墠閫変腑鐨勯儴闂╟ode
-  const orgCode = ref('');
-  const positionInfo = ref({});
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { tableContext } = useListPage({
-    tableProps: {
-      api: list,
-      columns,
-      //update-begin---author:wangshuai ---date:20220629  for锛歔VUEN-1485]杩涘叆绯荤粺绠$悊--閫氳褰曢〉闈㈠悗锛岀綉椤靛懡浠よ鎶ラ敊------------
-      rowKey: 'userId',
-      //update-end---author:wangshuai ---date:20220629  for锛歔VUEN-1485]杩涘叆绯荤粺绠$悊--閫氳褰曢〉闈㈠悗锛岀綉椤靛懡浠よ鎶ラ敊--------------
-      showIndexColumn: true,
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-      canResize: false,
-      actionColumn: null,
-      showTableSetting: false,
-      // 璇锋眰涔嬪墠瀵瑰弬鏁板仛澶勭悊
-      beforeFetch(params) {
-        params.orgCode = orgCode.value;
-      },
-    },
-  });
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload }] = tableContext;
-
-  // 宸︿晶鏍戦�夋嫨鍚庤Е鍙�
-  function onTreeSelect(data) {
-    orgCode.value = data.orgCode;
-    reload();
-  }
-
-  // 鏌ヨ鑱屽姟淇℃伅
-  async function queryPositionInfo() {
-    const result = await positionList({ pageSize: 99999 });
-    if (result) {
-      let obj = {};
-      result.records.forEach((position) => {
-        obj[position['code']] = position['name'];
-      });
-      positionInfo.value = obj;
-    }
-  }
-  queryPositionInfo();
-</script>
-
-<style lang="less" scoped>
-  @import './index.less';
-</style>
diff --git a/src/views/system/category/category.api.ts b/src/views/system/category/category.api.ts
deleted file mode 100644
index 9295745..0000000
--- a/src/views/system/category/category.api.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/sys/category/rootList',
-  save = '/sys/category/add',
-  edit = '/sys/category/edit',
-  deleteCategory = '/sys/category/delete',
-  deleteBatch = '/sys/category/deleteBatch',
-  importExcel = '/sys/category/importExcel',
-  exportXls = '/sys/category/exportXls',
-  loadTreeData = '/sys/category/loadTreeRoot',
-  getChildList = '/sys/category/childList',
-  getChildListBatch = '/sys/category/getChildListBatch',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- * @param params
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-/**
- * 鍒犻櫎
- */
-export const deleteCategory = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteCategory, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDeleteCategory = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdateDict = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-/**
- * 鏌ヨ鍏ㄩ儴鏍戝舰鑺傜偣鏁版嵁
- * @param params
- */
-export const loadTreeData = (params) => defHttp.get({ url: Api.loadTreeData, params });
-/**
- * 鏌ヨ瀛愯妭鐐规暟鎹�
- * @param params
- */
-export const getChildList = (params) => defHttp.get({ url: Api.getChildList, params });
-/**
- * 鎵归噺鏌ヨ瀛愯妭鐐规暟鎹�
- * @param params
- */
-export const getChildListBatch = (params) => defHttp.get({ url: Api.getChildListBatch, params }, { isTransformResponse: false });
diff --git a/src/views/system/category/category.data.ts b/src/views/system/category/category.data.ts
deleted file mode 100644
index c1f117f..0000000
--- a/src/views/system/category/category.data.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鍒嗙被鍚嶇О',
-    dataIndex: 'name',
-    width: 350,
-    align: 'left',
-  },
-  {
-    title: '鍒嗙被缂栫爜',
-    dataIndex: 'code',
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    label: '鍚嶇О',
-    field: 'name',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '缂栫爜',
-    field: 'code',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '鐖剁骇鑺傜偣',
-    field: 'pid',
-    component: 'TreeSelect',
-    componentProps: {
-      replaceFields: {
-        value: 'key',
-      },
-      dropdownStyle: {
-        maxHeight: '50vh',
-      },
-      getPopupContainer: () => document.body,
-    },
-    show: ({ values }) => {
-      return values.pid !== '0';
-    },
-    dynamicDisabled: ({ values }) => {
-      return !!values.id;
-    },
-  },
-  {
-    label: '鍒嗙被鍚嶇О',
-    field: 'name',
-    required: true,
-    component: 'Input',
-  },
-];
diff --git a/src/views/system/category/components/CategoryModal.vue b/src/views/system/category/components/CategoryModal.vue
deleted file mode 100644
index 8526482..0000000
--- a/src/views/system/category/components/CategoryModal.vue
+++ /dev/null
@@ -1,87 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="getTitle" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/src/components/Modal';
-  import { BasicForm, useForm } from '/src/components/Form';
-  import { formSchema } from '../category.data';
-  import { loadTreeData, saveOrUpdateDict } from '../category.api';
-  // 鑾峰彇emit
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-  const expandedRowKeys = ref([]);
-  const treeData = ref([]);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
-    schemas: formSchema,
-    showActionButtonGroup: false,
-    labelCol: {
-      xs: { span: 24 },
-      sm: { span: 4 },
-    },
-    wrapperCol: {
-      xs: { span: 24 },
-      sm: { span: 18 },
-    },
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    expandedRowKeys.value = [];
-    setModalProps({ confirmLoading: false, minHeight: 80 });
-    isUpdate.value = !!data?.isUpdate;
-    if (data?.record) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-    //鐖剁骇鑺傜偣鏍戜俊鎭�
-    treeData.value = await loadTreeData({ async: false, pcode: '' });
-    updateSchema({
-      field: 'pid',
-      componentProps: { treeData },
-    });
-  });
-  //璁剧疆鏍囬
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板瀛楀吀' : '缂栬緫瀛楀吀'));
-
-  /**
-   * 鏍规嵁pid鑾峰彇灞曞紑鐨勮妭鐐�
-   * @param pid
-   * @param arr
-   */
-  function getExpandKeysByPid(pid, arr) {
-    if (pid && arr && arr.length > 0) {
-      for (let i = 0; i < arr.length; i++) {
-        if (arr[i].key == pid && unref(expandedRowKeys).indexOf(pid) < 0) {
-          expandedRowKeys.value.push(arr[i].key);
-          getExpandKeysByPid(arr[i]['parentId'], unref(treeData));
-        } else {
-          getExpandKeysByPid(pid, arr[i].children);
-        }
-      }
-    }
-  }
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      let values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateDict(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //灞曞紑鐨勮妭鐐逛俊鎭�
-      await getExpandKeysByPid(values['pid'], unref(treeData));
-      //鍒锋柊鍒楄〃(isUpdate:鏄惁缂栬緫;values:琛ㄥ崟淇℃伅;expandedArr:灞曞紑鐨勮妭鐐逛俊鎭�)
-      emit('success', { isUpdate: unref(isUpdate), values: { ...values }, expandedArr: unref(expandedRowKeys).reverse() });
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/category/index.vue b/src/views/system/category/index.vue
deleted file mode 100644
index e1b15d7..0000000
--- a/src/views/system/category/index.vue
+++ /dev/null
@@ -1,285 +0,0 @@
-<template>
-  <div>
-    <!--寮曠敤琛ㄦ牸-->
-    <BasicTable
-      @register="registerTable"
-      :rowSelection="rowSelection"
-      :expandedRowKeys="expandedRowKeys"
-      @expand="handleExpand"
-      @fetch-success="onFetchSuccess"
-    >
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 鏂板</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="ant-design:down-outlined"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-    <!--瀛楀吀寮圭獥-->
-    <CategoryModal @register="registerModal" @success="handleSuccess" />
-  </div>
-</template>
-
-<script lang="ts" name="system-category" setup>
-  //ts璇硶
-  import { ref, computed, unref, toRaw, nextTick } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/src/components/Table';
-  import { useDrawer } from '/src/components/Drawer';
-  import CategoryModal from './components/CategoryModal.vue';
-  import { useModal } from '/src/components/Modal';
-  import { useMethods } from '/src/hooks/system/useMethods';
-  import { columns, searchFormSchema } from './category.data';
-  import { list, deleteCategory, batchDeleteCategory, getExportUrl, getImportUrl, getChildList, getChildListBatch } from './category.api';
-  import { useListPage } from '/@/hooks/system/useListPage';
-
-  const expandedRowKeys = ref([]);
-  const { handleExportXls, handleImportXls } = useMethods();
-  //瀛楀吀model
-  const [registerModal, { openModal }] = useModal();
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, onExportXls, onImportXls, tableContext } = useListPage({
-    designScope: 'category-template',
-    tableProps: {
-      title: '鍒嗙被瀛楀吀',
-      api: list,
-      columns: columns,
-      actionColumn: {
-        width: 180,
-      },
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-    },
-    exportConfig: {
-      name: '鍒嗙被瀛楀吀鍒楄〃',
-      url: getExportUrl,
-    },
-    importConfig: {
-      url: getImportUrl,
-    },
-  });
-
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] =
-    tableContext;
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleCreate() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  async function handleEdit(record) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 璇︽儏
-   */
-  async function handleDetail(record) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-      hideFooter: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteCategory({ id: record.id }, importSuccess);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    const ids = selectedRowKeys.value.filter((item) => !item.includes('loading'));
-    await batchDeleteCategory({ ids: ids }, importSuccess);
-  }
-  /**
-   * 瀵煎叆
-   */
-  function importSuccess() {
-    //update-begin---author:wangshuai ---date:20220530  for锛歔issues/54]鏍戝瓧鍏革紝鍕鹃�夛紝鐒跺悗鎵归噺鍒犻櫎锛岀郴缁熼敊璇�------------
-    (selectedRowKeys.value = []) && reload();
-    //update-end---author:wangshuai ---date:20220530  for锛歔issues/54]鏍戝瓧鍏革紝鍕鹃�夛紝鐒跺悗鎵归噺鍒犻櫎锛岀郴缁熼敊璇�--------------
-  }
-  /**
-   * 娣诲姞涓嬬骇
-   */
-  function handleAddSub(record) {
-    openModal(true, {
-      record,
-      isUpdate: false,
-    });
-  }
-  /**
-   * 鎴愬姛鍥炶皟
-   */
-  async function handleSuccess({ isUpdate, values, expandedArr }) {
-    if (isUpdate) {
-      //缂栬緫鍥炶皟
-      updateTableDataRecord(values.id, values);
-    } else {
-      if (!values['pid']) {
-        //鏂板鏍硅妭鐐�
-        reload();
-      } else {
-        //鏂板瀛愰泦
-        expandedRowKeys.value = [];
-        for (let key of unref(expandedArr)) {
-          await expandTreeNode(key);
-        }
-      }
-    }
-  }
-
-  /**
-   * 鎺ュ彛璇锋眰鎴愬姛鍚庡洖璋�
-   */
-  function onFetchSuccess(result) {
-    getDataByResult(result.items) && loadDataByExpandedRows();
-  }
-  /**
-   * 鏍规嵁宸插睍寮�鐨勮鏌ヨ鏁版嵁锛堢敤浜庝繚瀛樺悗鍒锋柊鏃跺紓姝ュ姞杞藉瓙绾х殑鏁版嵁锛�
-   */
-  async function loadDataByExpandedRows() {
-    if (unref(expandedRowKeys).length > 0) {
-      const res = await getChildListBatch({ parentIds: unref(expandedRowKeys).join(',') });
-      if (res.success && res.result.records.length > 0) {
-        //宸插睍寮�鐨勬暟鎹壒閲忓瓙鑺傜偣
-        let records = res.result.records;
-        const listMap = new Map();
-        for (let item of records) {
-          let pid = item['pid'];
-          if (unref(expandedRowKeys).includes(pid)) {
-            let mapList = listMap.get(pid);
-            if (mapList == null) {
-              mapList = [];
-            }
-            mapList.push(item);
-            listMap.set(pid, mapList);
-          }
-        }
-        let childrenMap = listMap;
-        let fn = (list) => {
-          if (list) {
-            list.forEach((data) => {
-              if (unref(expandedRowKeys).includes(data.id)) {
-                data.children = getDataByResult(childrenMap.get(data.id));
-                fn(data.children);
-              }
-            });
-          }
-        };
-        fn(getDataSource());
-      }
-    }
-  }
-  /**
-   * 澶勭悊鏁版嵁闆�
-   */
-  function getDataByResult(result) {
-    if (result && result.length > 0) {
-      return result.map((item) => {
-        //鍒ゆ柇鏄惁鏍囪浜嗗甫鏈夊瓙鑺傜偣
-        if (item['hasChild'] == '1') {
-          let loadChild = { id: item.id + '_loadChild', name: 'loading...', isLoading: true };
-          item.children = [loadChild];
-        }
-        return item;
-      });
-    }
-  }
-  /**
-   *鏍戣妭鐐瑰睍寮�鍚堝苟
-   * */
-  async function handleExpand(expanded, record) {
-    // 鍒ゆ柇鏄惁鏄睍寮�鐘舵�侊紝灞曞紑鐘舵��(expanded)骞朵笖瀛樺湪瀛愰泦(children)骞朵笖鏈姞杞借繃(isLoading)鐨勫氨鍘绘煡璇㈠瓙鑺傜偣鏁版嵁
-    if (expanded) {
-      expandedRowKeys.value.push(record.id);
-      if (record.children.length > 0 && !!record.children[0].isLoading) {
-        let result = await getChildList({ pid: record.id });
-        if (result && result.length > 0) {
-          record.children = getDataByResult(result);
-        } else {
-          record.children = null;
-          record.hasChild = '0';
-        }
-      }
-    } else {
-      let keyIndex = expandedRowKeys.value.indexOf(record.id);
-      if (keyIndex >= 0) {
-        expandedRowKeys.value.splice(keyIndex, 1);
-      }
-    }
-  }
-  /**
-   *鎿嶄綔琛ㄦ牸鍚庡鐞嗘爲鑺傜偣灞曞紑鍚堝苟
-   * */
-  async function expandTreeNode(key) {
-    let record = findTableDataRecord(key);
-    expandedRowKeys.value.push(key);
-    let result = await getChildList({ pid: key });
-    if (result && result.length > 0) {
-      record.children = getDataByResult(result);
-    } else {
-      record.children = null;
-      record.hasChild = '0';
-    }
-    updateTableDataRecord(key, record);
-  }
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '纭畾鍒犻櫎鍚�?',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-      {
-        label: '娣诲姞涓嬬骇',
-        onClick: handleAddSub.bind(null, { pid: record.id }),
-      },
-    ];
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/system/checkRule/CheckRuleModal.vue b/src/views/system/checkRule/CheckRuleModal.vue
deleted file mode 100644
index 466c3ba..0000000
--- a/src/views/system/checkRule/CheckRuleModal.vue
+++ /dev/null
@@ -1,247 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" @ok="handleSubmit" :title="title" :width="1200" destroyOnClose>
-    <BasicForm @register="registerForm" />
-
-    <a-tabs v-model:activeKey="activeKey" animated>
-      <a-tab-pane tab="灞�閮ㄨ鍒�" key="1" :forceRender="true">
-        <JVxeTable ref="vTable1" toolbar rowNumber dragSort rowSelection :maxHeight="580" :dataSource="dataSource1" :columns="columns1">
-          <template #toolbarAfter>
-            <a-alert type="info" showIcon message="灞�閮ㄨ鍒欐寜鐓т綘杈撳叆鐨勪綅鏁版湁搴忕殑鏍¢獙" style="margin-bottom: 8px" />
-          </template>
-        </JVxeTable>
-      </a-tab-pane>
-      <a-tab-pane tab="鍏ㄥ眬瑙勫垯" key="2" :forceRender="true">
-        <JVxeTable
-          ref="vTable2"
-          toolbar
-          rowNumber
-          dragSort
-          rowSelection
-          :maxHeight="580"
-          :dataSource="dataSource2"
-          :addSetActive="false"
-          :columns="columns2"
-        >
-          <template #toolbarAfter>
-            <a-alert type="info" showIcon message="鍏ㄥ眬瑙勫垯鍙牎楠岀敤鎴疯緭鍏ョ殑鎵�鏈夊瓧绗︼紱鍏ㄥ眬瑙勫垯鐨勪紭鍏堢骇姣斿眬閮ㄨ鍒欑殑瑕侀珮銆�" style="margin-bottom: 8px" />
-          </template>
-        </JVxeTable>
-      </a-tab-pane>
-    </a-tabs>
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { computed, ref, unref } from 'vue';
-  import { formSchema } from './check.rule.data';
-  import { saveCheckRule, updateCheckRule } from './check.rule.api';
-  import { JVxeTypes, JVxeColumn, JVxeTableInstance } from '/@/components/jeecg/JVxeTable/types';
-  import { pick } from 'lodash-es';
-
-  //璁剧疆鏍囬
-  const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-  // 澹版槑Emits
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate, getFieldsValue }] = useForm({
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-
-  const activeKey = ref('1');
-  let arr1: any[] = [];
-  let dataSource1 = ref(arr1);
-  let arr2: any[] = [];
-  let dataSource2 = ref(arr2);
-
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    activeKey.value = '1';
-    dataSource1.value = [];
-    dataSource2.value = [];
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-
-      let ruleJson = data.record.ruleJson;
-      if (ruleJson) {
-        let ruleList = JSON.parse(ruleJson);
-        // 绛涢�夊嚭鍏ㄥ眬瑙勫垯鍜屽眬閮ㄨ鍒�
-        let global: any[] = [],
-          design: any[] = [],
-          priority = '1';
-        ruleList.forEach((rule) => {
-          if (rule.digits === '*') {
-            global.push(Object.assign(rule, { priority }));
-          } else {
-            priority = '0';
-            design.push(rule);
-          }
-        });
-        dataSource1.value = design;
-        dataSource2.value = global;
-      }
-    }
-  });
-
-  const vTable1 = ref<JVxeTableInstance>();
-  const vTable2 = ref<JVxeTableInstance>();
-
-  // 楠岃瘉琛ㄦ牸 杩斿洖琛ㄦ牸鏁版嵁
-  function validateMyTable(tableRef, key) {
-    return new Promise((resolve, reject) => {
-      tableRef.value!.validateTable().then((errMap) => {
-        if (errMap) {
-          activeKey.value = key;
-          reject();
-        } else {
-          const values = tableRef.value!.getTableData();
-          resolve(values);
-        }
-      });
-    });
-  }
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    let mainData;
-    let globalValues = [];
-    let designValues = [];
-    validate()
-      .then((formValue) => {
-        mainData = formValue;
-        return validateMyTable(vTable1, '1');
-      })
-      .then((tableData1: []) => {
-        if (tableData1 && tableData1.length > 0) {
-          designValues = tableData1;
-        }
-        return validateMyTable(vTable2, '2');
-      })
-      .then((tableData2: []) => {
-        if (tableData2 && tableData2.length > 0) {
-          globalValues = tableData2;
-        }
-        // 鏁村悎涓や釜瀛愯〃鐨勬暟鎹�
-        let firstGlobal: any[] = [],
-          afterGlobal: any[] = [];
-        for (let i = 0; i < globalValues.length; i++) {
-          let v: any = globalValues[i];
-          v.digits = '*';
-          if (v.priority === '1') {
-            firstGlobal.push(v);
-          } else {
-            afterGlobal.push(v);
-          }
-        }
-        let concatValues = firstGlobal.concat(designValues).concat(afterGlobal);
-        let subValues = concatValues.map((i) => pick(i, 'digits', 'pattern', 'message'));
-        // 鐢熸垚 formData锛岀敤浜庝紶鍏ュ悗鍙�
-        let ruleJson = JSON.stringify(subValues);
-        let formData = Object.assign({}, mainData, { ruleJson });
-        saveOrUpdateFormData(formData);
-      })
-      .catch(() => {
-        setModalProps({ confirmLoading: false });
-        console.error('楠岃瘉鏈�氳繃!');
-      });
-  }
-
-  // 琛ㄥ崟鎻愪氦璇锋眰
-  async function saveOrUpdateFormData(formData) {
-    try {
-      console.log('琛ㄥ崟鎻愪氦鏁版嵁', formData);
-      setModalProps({ confirmLoading: true });
-      if (isUpdate.value) {
-        await updateCheckRule(formData);
-      } else {
-        await saveCheckRule(formData);
-      }
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-
-  /**
-   * 鏍¢獙
-   * @param cellValue
-   * @param callback
-   */
-  const validatePatternHandler = ({ cellValue }, callback) => {
-    try {
-      new RegExp(cellValue);
-      callback(true);
-    } catch (e) {
-      callback(false, '璇疯緭鍏ユ纭殑姝e垯琛ㄨ揪寮�');
-    }
-  };
-
-  const columns1 = ref<JVxeColumn[]>([
-    {
-      title: '浣嶆暟',
-      key: 'digits',
-      type: JVxeTypes.inputNumber,
-      minWidth: 180,
-      validateRules: [
-        { required: true, message: '${title}涓嶈兘涓虹┖' },
-        { pattern: /^[1-9]\d*$/, message: '璇疯緭鍏ラ浂浠ヤ笂鐨勬鏁存暟' },
-      ],
-    },
-    {
-      title: '瑙勫垯锛堟鍒欒〃杈惧紡锛�',
-      key: 'pattern',
-      minWidth: 320,
-      type: JVxeTypes.input,
-      validateRules: [{ required: true, message: '瑙勫垯涓嶈兘涓虹┖' }, { handler: validatePatternHandler }],
-    },
-    {
-      title: '鎻愮ず鏂囨湰',
-      key: 'message',
-      minWidth: 180,
-      type: JVxeTypes.input,
-      validateRules: [{ required: true, message: '${title}涓嶈兘涓虹┖' }],
-    },
-  ]);
-
-  const columns2 = ref<JVxeColumn[]>([
-    {
-      title: '浼樺厛绾�',
-      key: 'priority',
-      type: JVxeTypes.select,
-      defaultValue: '1',
-      options: [
-        { title: '浼樺厛杩愯', value: '1' },
-        { title: '鏈�鍚庤繍琛�', value: '0' },
-      ],
-      validateRules: [],
-    },
-    {
-      title: '瑙勫垯锛堟鍒欒〃杈惧紡锛�',
-      key: 'pattern',
-      width: '40%',
-      type: JVxeTypes.input,
-      validateRules: [{ required: true, message: '瑙勫垯涓嶈兘涓虹┖' }, { handler: validatePatternHandler }],
-    },
-    {
-      title: '鎻愮ず鏂囨湰',
-      key: 'message',
-      width: '20%',
-      type: JVxeTypes.input,
-      validateRules: [{ required: true, message: '${title}涓嶈兘涓虹┖' }],
-    },
-  ]);
-</script>
diff --git a/src/views/system/checkRule/CheckRuleTestModal.vue b/src/views/system/checkRule/CheckRuleTestModal.vue
deleted file mode 100644
index 06dd10c..0000000
--- a/src/views/system/checkRule/CheckRuleTestModal.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" :okButtonProps="okButtonProps" @register="registerModal" destroyOnClose>
-    <BasicForm @register="registerForm" />
-    <div style="display: flex; flex-flow: row wrap">
-      <div style="padding: 0 4px" v-for="(str, index) of realTestValue" :key="index">
-        <a-row>
-          <a-col style="text-align: center">
-            <a-input :value="str" style="text-align: center; width: 40px" />
-          </a-col>
-          <a-col style="text-align: center">{{ index + 1 }}</a-col>
-        </a-row>
-      </div>
-    </div>
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { checkRuleInput } from '/@/views/system/checkRule/check.rule.data';
-  import { ref } from 'vue';
-  let realTestValue = ref('');
-  const okButtonProps = {
-    style: { display: 'none' },
-  };
-  const [registerForm, { resetFields, setFieldsValue, validate, getFieldsValue }] = useForm({
-    schemas: checkRuleInput,
-    showActionButtonGroup: false,
-    labelCol: {
-      span: 24,
-    },
-    wrapperCol: {
-      span: 24,
-    },
-  });
-
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    realTestValue.value = '';
-    setModalProps({
-      confirmLoading: false,
-      cancelText: '鍏抽棴',
-      title: '鍔熻兘娴嬭瘯',
-      width: '1000px',
-    });
-    await setFieldsValue({
-      ruleCode: data.ruleCode,
-      testValue: realTestValue,
-    });
-  });
-</script>
-
-<style scoped></style>
diff --git a/src/views/system/checkRule/check.rule.api.ts b/src/views/system/checkRule/check.rule.api.ts
deleted file mode 100644
index c4b5391..0000000
--- a/src/views/system/checkRule/check.rule.api.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/sys/checkRule/list',
-  delete = '/sys/checkRule/delete',
-  deleteBatch = '/sys/checkRule/deleteBatch',
-  exportXls = 'sys/checkRule/exportXls',
-  importXls = 'sys/checkRule/importExcel',
-  checkByCode = '/sys/checkRule/checkByCode',
-  save = '/sys/checkRule/add',
-  edit = '/sys/checkRule/edit',
-}
-
-/**
- * 瀵煎嚭鍦板潃
- */
-export const exportUrl = Api.exportXls;
-/**
- * 瀵煎叆鍦板潃
- */
-export const importUrl = Api.importXls;
-
-/**
- * 鍒楄〃鏌ヨ
- * @param params
- */
-export const getCheckRuleList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
-
-/**
- * 鍒犻櫎
- * @param params
- * @param handleSuccess
- */
-export const deleteCheckRule = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.delete, data: params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDeleteCheckRule = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-
-/**
- * 鏍规嵁缂栫爜鏍¢獙瑙勫垯code锛屾牎楠屼紶鍏ョ殑鍊兼槸鍚﹀悎娉�
- * @param ruleCode
- * @param value
- */
-export const validateCheckRule = (ruleCode, value) => {
-  value = encodeURIComponent(value);
-  let params = { ruleCode, value };
-  return defHttp.get({ url: Api.checkByCode, params }, { isTransformResponse: false });
-};
-
-/**
- * 淇濆瓨
- * @param params
- */
-export const saveCheckRule = (params) => {
-  return defHttp.post({ url: Api.save, params });
-};
-
-/**
- * 鏇存柊
- * @param params
- */
-export const updateCheckRule = (params) => {
-  return defHttp.put({ url: Api.edit, params });
-};
diff --git a/src/views/system/checkRule/check.rule.data.ts b/src/views/system/checkRule/check.rule.data.ts
deleted file mode 100644
index 59fe236..0000000
--- a/src/views/system/checkRule/check.rule.data.ts
+++ /dev/null
@@ -1,152 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-import { render } from '/@/utils/common/renderUtils';
-import { duplicateCheck } from '/@/views/system/user/user.api';
-import { validateCheckRule } from '/@/views/system/checkRule/check.rule.api';
-import { array } from 'vue-types';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '瑙勫垯鍚嶇О',
-    dataIndex: 'ruleName',
-    width: 200,
-    align: 'center',
-  },
-  {
-    title: '瑙勫垯缂栫爜',
-    dataIndex: 'ruleCode',
-    width: 200,
-    align: 'center',
-  },
-  {
-    title: '瑙勫垯鎻忚堪',
-    dataIndex: 'ruleDescription',
-    width: 300,
-    align: 'center',
-    customRender: function ({ text }) {
-      return render.renderTip(text, 30);
-    },
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'ruleName',
-    label: '瑙勫垯鍚嶇О',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    field: 'ruleCode',
-    label: '瑙勫垯缂栫爜',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'ruleName',
-    label: '瑙勫垯鍚嶇О',
-    component: 'Input',
-    required: true,
-    colProps: { span: 24 },
-  },
-  {
-    field: 'ruleCode',
-    label: '瑙勫垯缂栫爜',
-    component: 'Input',
-    colProps: { span: 24 },
-    dynamicDisabled: ({ values }) => {
-      return !!values.id;
-    },
-    dynamicRules: ({ model }) => {
-      return [
-        {
-          required: true,
-          validator: (_, value) => {
-            return new Promise((resolve, reject) => {
-              if (!value) {
-                return reject('璇疯緭鍏ヨ鍒欑紪鐮侊紒');
-              }
-              let params = {
-                tableName: 'sys_check_rule',
-                fieldName: 'rule_code',
-                fieldVal: value,
-                dataId: model.id,
-              };
-              duplicateCheck(params)
-                .then((res) => {
-                  res.success ? resolve() : reject('瑙勫垯缂栫爜宸插瓨鍦�!');
-                })
-                .catch((err) => {
-                  reject(err.message || '鏍¢獙澶辫触');
-                });
-            });
-          },
-        },
-      ];
-    },
-  },
-  {
-    field: 'ruleDescription',
-    label: '瑙勫垯鎻忚堪',
-    colProps: { span: 24 },
-    component: 'InputTextArea',
-    componentProps: {
-      placeholder: '璇疯緭鍏ヨ鍒欐弿杩�',
-      rows: 2,
-    },
-  },
-];
-
-export const checkRuleInput: FormSchema[] = [
-  {
-    label: '123',
-    field: 'ruleCode',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'testValue',
-    label: '闇�瑕佹祴璇曠殑鍊�:',
-    component: 'Input',
-    componentProps: ({ formModel }) => {
-      return {
-        onChange: (e) => {
-          formModel.testValue = e.target.value;
-        },
-      };
-    },
-    dynamicRules: ({ model }) => {
-      const { ruleCode } = model;
-      return [
-        {
-          required: false,
-          validator: (_, value) => {
-            return new Promise((resolve, reject) => {
-              if (ruleCode && value) {
-                /*console.log({ruleCode,value})*/
-                validateCheckRule(ruleCode, value)
-                  .then((res) => {
-                    //console.log(1233, res)
-                    res['success'] ? resolve() : reject(res['message']);
-                  })
-                  .catch((err) => {
-                    reject(err.message || err);
-                  });
-              } else {
-                resolve();
-              }
-            });
-          },
-        },
-      ];
-    },
-  },
-];
diff --git a/src/views/system/checkRule/index.vue b/src/views/system/checkRule/index.vue
deleted file mode 100644
index 9dbf249..0000000
--- a/src/views/system/checkRule/index.vue
+++ /dev/null
@@ -1,150 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-button preIcon="ant-design:plus-outlined" type="primary" @click="handleAdd">鏂板</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                <span>鍒犻櫎</span>
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button>
-            <span>鎵归噺鎿嶄綔</span>
-            <Icon icon="mdi:chevron-down"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-    </BasicTable>
-
-    <CheckRuleTestModal @register="testModal"></CheckRuleTestModal>
-    <CheckRuleModal @register="registerModal" @success="reload"></CheckRuleModal>
-  </div>
-</template>
-
-<script name="system-fillrule" lang="ts" setup>
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { useListPage } from '/@/hooks/system/useListPage';
-
-  import { useModal } from '/@/components/Modal';
-  import {
-    getCheckRuleList,
-    exportUrl,
-    importUrl,
-    deleteCheckRule,
-    batchDeleteCheckRule,
-    validateCheckRule,
-  } from '/@/views/system/checkRule/check.rule.api';
-  import { columns, searchFormSchema } from '/@/views/system/checkRule/check.rule.data';
-  import { ActionItem } from '/@/components/Table';
-
-  import CheckRuleTestModal from '/@/views/system/checkRule/CheckRuleTestModal.vue';
-  const [testModal, { openModal: openTestModal }] = useModal();
-
-  import CheckRuleModal from '/@/views/system/checkRule/CheckRuleModal.vue';
-  const [registerModal, { openModal }] = useModal();
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext, createMessage, onExportXls, onImportXls, createSuccessModal } = useListPage({
-    designScope: 'check-rule',
-    tableProps: {
-      title: '缂栫爜鏍¢獙瑙勫垯绠$悊椤甸潰',
-      api: getCheckRuleList,
-      columns: columns,
-      showIndexColumn: true,
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-    },
-    exportConfig: {
-      url: exportUrl,
-      name: '缂栫爜鏍¢獙瑙勫垯鍒楄〃',
-    },
-    importConfig: {
-      url: importUrl,
-      success: () => reload(),
-    },
-  });
-  // 娉ㄥ唽 ListTable
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleAdd() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  function handleEdit(record) {
-    console.log('record....', record);
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    console.log(12345, record);
-    await deleteCheckRule({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeleteCheckRule({ ids: selectedRowKeys.value }, () => {
-      selectedRowKeys.value = [];
-      reload();
-    });
-  }
-
-  /**
-   * 鍔熻兘娴嬭瘯
-   */
-  function testRule(record) {
-    openTestModal(true, { ruleCode: record.ruleCode });
-  }
-
-  /**
-   * 缂栬緫
-   */
-  function getTableAction(record): ActionItem[] {
-    return [{ label: '缂栬緫', onClick: handleEdit.bind(null, record) }];
-  }
-
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record): ActionItem[] {
-    return [
-      { label: '鍔熻兘娴嬭瘯', onClick: testRule.bind(null, record) },
-      {
-        label: '鍒犻櫎',
-        color: 'error',
-        popConfirm: {
-          title: '纭瑕佸垹闄ゅ悧锛�',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/depart/components/DepartDataRuleDrawer.vue b/src/views/system/depart/components/DepartDataRuleDrawer.vue
deleted file mode 100644
index 3427872..0000000
--- a/src/views/system/depart/components/DepartDataRuleDrawer.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-<template>
-  <BasicDrawer title="鏁版嵁瑙勫垯/鎸夐挳鏉冮檺閰嶇疆" :width="365" @close="onClose" @register="registerDrawer">
-    <a-spin :spinning="loading">
-      <a-tabs defaultActiveKey="1">
-        <a-tab-pane tab="鏁版嵁瑙勫垯" key="1">
-          <a-checkbox-group v-model:value="dataRuleChecked" v-if="dataRuleList.length > 0">
-            <a-row>
-              <a-col :span="24" v-for="(item, index) in dataRuleList" :key="'dr' + index">
-                <a-checkbox :value="item.id">{{ item.ruleName }}</a-checkbox>
-              </a-col>
-              <a-col :span="24">
-                <div style="width: 100%; margin-top: 15px">
-                  <a-button type="primary" :loading="loading" :size="'small'" preIcon="ant-design:save-filled" @click="saveDataRuleForRole">
-                    <span>鐐瑰嚮淇濆瓨</span>
-                  </a-button>
-                </div>
-              </a-col>
-            </a-row>
-          </a-checkbox-group>
-          <a-empty v-else description="鏃犻厤缃俊鎭�" />
-        </a-tab-pane>
-      </a-tabs>
-    </a-spin>
-  </BasicDrawer>
-</template>
-
-<script lang="ts" setup>
-  import { ref, unref } from 'vue';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-
-  import { queryDepartDataRule, saveDepartDataRule } from '../depart.api';
-
-  defineEmits(['register']);
-  const loading = ref<boolean>(false);
-  const departId = ref('');
-  const functionId = ref('');
-  const dataRuleList = ref<Array<any>>([]);
-  const dataRuleChecked = ref<Array<any>>([]);
-
-  // 娉ㄥ唽鎶藉眽缁勪欢
-  const [registerDrawer, { closeDrawer }] = useDrawerInner((data) => {
-    departId.value = unref(data.departId);
-    functionId.value = unref(data.functionId);
-    loadData();
-  });
-
-  async function loadData() {
-    try {
-      loading.value = true;
-      const { datarule, drChecked } = await queryDepartDataRule(functionId, departId);
-      dataRuleList.value = datarule;
-      if (drChecked) {
-        dataRuleChecked.value = drChecked.split(',');
-      }
-    } finally {
-      loading.value = false;
-    }
-  }
-
-  function saveDataRuleForRole() {
-    let params = {
-      departId: departId.value,
-      permissionId: functionId.value,
-      dataRuleIds: dataRuleChecked.value.join(','),
-    };
-    saveDepartDataRule(params);
-  }
-
-  function onClose() {
-    doReset();
-  }
-
-  function doReset() {
-    functionId.value = '';
-    dataRuleList.value = [];
-    dataRuleChecked.value = [];
-  }
-</script>
diff --git a/src/views/system/depart/components/DepartFormModal.vue b/src/views/system/depart/components/DepartFormModal.vue
deleted file mode 100644
index 7376154..0000000
--- a/src/views/system/depart/components/DepartFormModal.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-<template>
-  <BasicModal :title="title" :width="800" v-bind="$attrs" @ok="handleOk" @register="registerModal">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { watch, computed, inject, ref, unref, onMounted } from 'vue';
-
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-
-  import { saveOrUpdateDepart } from '../depart.api';
-  import { useBasicFormSchema, orgCategoryOptions } from '../depart.data';
-
-  const emit = defineEmits(['success', 'register']);
-  const props = defineProps({
-    rootTreeData: { type: Array, default: () => [] },
-  });
-  const prefixCls = inject('prefixCls');
-  // 褰撳墠鏄惁鏄洿鏂版ā寮�
-  const isUpdate = ref<boolean>(false);
-  // 褰撳墠鐨勫脊绐楁暟鎹�
-  const model = ref<object>({});
-  const title = computed(() => (isUpdate.value ? '缂栬緫' : '鏂板'));
-
-  //娉ㄥ唽琛ㄥ崟
-  const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
-    schemas: useBasicFormSchema().basicFormSchema,
-    showActionButtonGroup: false,
-  });
-
-  // 娉ㄥ唽寮圭獥
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    await resetFields();
-    isUpdate.value = unref(data?.isUpdate);
-    // 褰撳墠鏄惁涓烘坊鍔犲瓙绾�
-    let isChild = unref(data?.isChild);
-    let categoryOptions = isChild ? orgCategoryOptions.child : orgCategoryOptions.root;
-    // 闅愯棌涓嶉渶瑕佸睍绀虹殑瀛楁
-    updateSchema([
-      {
-        field: 'parentId',
-        show: isChild,
-        componentProps: {
-          // 濡傛灉鏄坊鍔犲瓙閮ㄩ棬锛屽氨绂佺敤璇ュ瓧娈�
-          disabled: isChild,
-          treeData: props.rootTreeData,
-        },
-      },
-      {
-        field: 'orgCode',
-        show: false,
-      },
-      {
-        field: 'orgCategory',
-        componentProps: { options: categoryOptions },
-      },
-    ]);
-
-    let record = unref(data?.record);
-    if (typeof record !== 'object') {
-      record = {};
-    }
-    // 璧嬮粯璁ゅ��
-    record = Object.assign(
-      {
-        departOrder: 0,
-        orgCategory: categoryOptions[0].value,
-      },
-      record
-    );
-    model.value = record;
-    await setFieldsValue({ ...record });
-  });
-
-  // 鎻愪氦浜嬩欢
-  async function handleOk() {
-    try {
-      setModalProps({ confirmLoading: true });
-      let values = await validate();
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateDepart(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/depart/components/DepartFormTab.vue b/src/views/system/depart/components/DepartFormTab.vue
deleted file mode 100644
index 83600c5..0000000
--- a/src/views/system/depart/components/DepartFormTab.vue
+++ /dev/null
@@ -1,114 +0,0 @@
-<template>
-  <a-spin :spinning="loading">
-    <BasicForm @register="registerForm" />
-    <div class="j-box-bottom-button offset-20" style="margin-top: 30px">
-      <div class="j-box-bottom-button-float">
-        <a-button preIcon="ant-design:sync-outlined" @click="onReset">閲嶇疆</a-button>
-        <a-button type="primary" preIcon="ant-design:save-filled" @click="onSubmit">淇濆瓨</a-button>
-      </div>
-    </div>
-  </a-spin>
-</template>
-
-<script lang="ts" setup>
-  import { watch, computed, inject, ref, unref, onMounted } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { saveOrUpdateDepart } from '../depart.api';
-  import { useBasicFormSchema, orgCategoryOptions } from '../depart.data';
-
-  const emit = defineEmits(['success']);
-  const props = defineProps({
-    data: { type: Object, default: () => ({}) },
-    rootTreeData: { type: Array, default: () => [] },
-  });
-  const prefixCls = inject('prefixCls');
-  const loading = ref<boolean>(false);
-  // 褰撳墠鏄惁鏄洿鏂版ā寮�
-  const isUpdate = ref<boolean>(true);
-  // 褰撳墠鐨勫脊绐楁暟鎹�
-  const model = ref<object>({});
-
-  //娉ㄥ唽琛ㄥ崟
-  const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
-    schemas: useBasicFormSchema().basicFormSchema,
-    showActionButtonGroup: false,
-  });
-
-  const categoryOptions = computed(() => {
-    if (!!props?.data?.parentId) {
-      return orgCategoryOptions.child;
-    } else {
-      return orgCategoryOptions.root;
-    }
-  });
-
-  onMounted(() => {
-    // 绂佺敤瀛楁
-    updateSchema([
-      { field: 'parentId', componentProps: { disabled: true } },
-      { field: 'orgCode', componentProps: { disabled: true } },
-    ]);
-    // data 鍙樺寲锛岄噸濉〃鍗�
-    watch(
-      () => props.data,
-      async () => {
-        let record = unref(props.data);
-        if (typeof record !== 'object') {
-          record = {};
-        }
-        model.value = record;
-        await resetFields();
-        await setFieldsValue({ ...record });
-      },
-      { deep: true, immediate: true }
-    );
-    // 鏇存柊 鐖堕儴闂� 閫夐」
-    watch(
-      () => props.rootTreeData,
-      async () => {
-        updateSchema([
-          {
-            field: 'parentId',
-            componentProps: { treeData: props.rootTreeData },
-          },
-        ]);
-      },
-      { deep: true, immediate: true }
-    );
-    // 鐩戝惉骞舵洿鏀� orgCategory options
-    watch(
-      categoryOptions,
-      async () => {
-        updateSchema([
-          {
-            field: 'orgCategory',
-            componentProps: { options: categoryOptions.value },
-          },
-        ]);
-      },
-      { immediate: true }
-    );
-  });
-
-  // 閲嶇疆琛ㄥ崟
-  async function onReset() {
-    await resetFields();
-    await setFieldsValue({ ...model.value });
-  }
-
-  // 鎻愪氦浜嬩欢
-  async function onSubmit() {
-    try {
-      loading.value = true;
-      let values = await validate();
-      values = Object.assign({}, model.value, values);
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateDepart(values, isUpdate.value);
-      //鍒锋柊鍒楄〃
-      emit('success');
-      Object.assign(model.value, values);
-    } finally {
-      loading.value = false;
-    }
-  }
-</script>
diff --git a/src/views/system/depart/components/DepartLeftTree.vue b/src/views/system/depart/components/DepartLeftTree.vue
deleted file mode 100644
index cb313e9..0000000
--- a/src/views/system/depart/components/DepartLeftTree.vue
+++ /dev/null
@@ -1,332 +0,0 @@
-<template>
-  <a-card :bordered="false" style="height: 100%">
-    <div class="j-table-operator" style="width: 100%">
-      <a-button type="primary" preIcon="ant-design:plus-outlined" @click="onAddDepart">鏂板</a-button>
-      <a-button type="primary" preIcon="ant-design:plus-outlined" @click="onAddChildDepart()">娣诲姞涓嬬骇</a-button>
-      <a-upload name="file" :showUploadList="false" :customRequest="onImportXls">
-        <a-button type="primary" preIcon="ant-design:import-outlined">瀵煎叆</a-button>
-      </a-upload>
-      <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls">瀵煎嚭</a-button>
-      <a-button type="primary" preIcon="ant-design:sync-outlined">鍚屾浼佸井?</a-button>
-      <a-button type="primary" preIcon="ant-design:sync-outlined">鍚屾閽夐拤?</a-button>
-      <template v-if="checkedKeys.length > 0">
-        <a-dropdown>
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="onDeleteBatch">
-                <icon icon="ant-design:delete-outlined" />
-                <span>鍒犻櫎</span>
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button>
-            <span>鎵归噺鎿嶄綔 </span>
-            <icon icon="akar-icons:chevron-down" />
-          </a-button>
-        </a-dropdown>
-      </template>
-    </div>
-    <a-alert type="info" show-icon class="alert" style="margin-bottom: 8px">
-      <template #message>
-        <template v-if="checkedKeys.length > 0">
-          <span>宸查�変腑 {{ checkedKeys.length }} 鏉¤褰�</span>
-          <a-divider type="vertical" />
-          <a @click="checkedKeys = []">娓呯┖</a>
-        </template>
-        <template v-else>
-          <span>鏈�変腑浠讳綍鏁版嵁</span>
-        </template>
-      </template>
-    </a-alert>
-    <a-spin :spinning="loading">
-      <a-input-search placeholder="鎸夐儴闂ㄥ悕绉版悳绱⑩��" style="margin-bottom: 10px" @search="onSearch" />
-      <!--缁勭粐鏈烘瀯鏍�-->
-      <template v-if="treeData.length > 0">
-        <a-tree
-          v-if="!treeReloading"
-          checkable
-          :clickRowToExpand="false"
-          :treeData="treeData"
-          :selectedKeys="selectedKeys"
-          :checkStrictly="checkStrictly"
-          :load-data="loadChildrenTreeData"
-          :checkedKeys="checkedKeys"
-          v-model:expandedKeys="expandedKeys"
-          @check="onCheck"
-          @select="onSelect"
-        >
-          <template #title="{ key: treeKey, title, dataRef }">
-            <a-dropdown :trigger="['contextmenu']">
-              <Popconfirm
-                :visible="visibleTreeKey === treeKey"
-                title="纭畾瑕佸垹闄ゅ悧锛�"
-                ok-text="纭畾"
-                cancel-text="鍙栨秷"
-                placement="rightTop"
-                @confirm="onDelete(dataRef)"
-                @visibleChange="onVisibleChange"
-              >
-                <span>{{ title }}</span>
-              </Popconfirm>
-
-              <template #overlay>
-                <a-menu @click="">
-                  <a-menu-item key="1" @click="onAddChildDepart(dataRef)">娣诲姞瀛愮骇</a-menu-item>
-                  <a-menu-item key="2" @click="visibleTreeKey = treeKey">
-                    <span style="color: red">鍒犻櫎</span>
-                  </a-menu-item>
-                </a-menu>
-              </template>
-            </a-dropdown>
-          </template>
-        </a-tree>
-      </template>
-      <a-empty v-else description="鏆傛棤鏁版嵁" />
-    </a-spin>
-    <DepartFormModal :rootTreeData="treeData" @register="registerModal" @success="loadRootTreeData" />
-  </a-card>
-</template>
-
-<script lang="ts" setup>
-  import { inject, nextTick, ref, unref, defineExpose } from 'vue';
-  import { useModal } from '/@/components/Modal';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useMethods } from '/@/hooks/system/useMethods';
-  import { Api, deleteBatchDepart, queryDepartTreeSync } from '../depart.api';
-  import { searchByKeywords } from '/@/views/system/departUser/depart.user.api';
-  import DepartFormModal from '/@/views/system/depart/components/DepartFormModal.vue';
-  import { Popconfirm } from 'ant-design-vue';
-
-  const prefixCls = inject('prefixCls');
-  const emit = defineEmits(['select', 'rootTreeData']);
-  const { createMessage } = useMessage();
-  const { handleImportXls, handleExportXls } = useMethods();
-
-  const loading = ref<boolean>(false);
-  // 閮ㄩ棬鏍戝垪琛ㄦ暟鎹�
-  const treeData = ref<any[]>([]);
-  // 褰撳墠閫変腑鐨勯」
-  const checkedKeys = ref<any[]>([]);
-  // 褰撳墠灞曞紑鐨勯」
-  const expandedKeys = ref<any[]>([]);
-  // 褰撳墠閫変腑鐨勯」
-  const selectedKeys = ref<any[]>([]);
-  // 鏍戠粍浠堕噸鏂板姞杞�
-  const treeReloading = ref<boolean>(false);
-  // 鏍戠埗瀛愭槸鍚﹀叧鑱�
-  const checkStrictly = ref<boolean>(true);
-  // 褰撳墠閫変腑鐨勯儴闂�
-  const currentDepart = ref<any>(null);
-  // 鎺у埗纭鍒犻櫎鎻愮ず妗嗘槸鍚︽樉绀�
-  const visibleTreeKey = ref<any>(null);
-  // 鎼滅储鍏抽敭瀛�
-  const searchKeyword = ref('');
-
-  // 娉ㄥ唽 modal
-  const [registerModal, { openModal }] = useModal();
-
-  // 鍔犺浇椤剁骇閮ㄩ棬淇℃伅
-  async function loadRootTreeData() {
-    try {
-      loading.value = true;
-      treeData.value = [];
-      const result = await queryDepartTreeSync();
-      if (Array.isArray(result)) {
-        treeData.value = result;
-      }
-      if (expandedKeys.value.length === 0) {
-        autoExpandParentNode();
-      } else {
-        if (selectedKeys.value.length === 0) {
-          let item = treeData.value[0];
-          if (item) {
-            // 榛樿閫変腑绗竴涓�
-            setSelectedKey(item.id, item);
-          }
-        } else {
-          emit('select', currentDepart.value);
-        }
-      }
-      emit('rootTreeData', treeData.value);
-    } finally {
-      loading.value = false;
-    }
-  }
-
-  loadRootTreeData();
-
-  // 鍔犺浇瀛愮骇閮ㄩ棬淇℃伅
-  async function loadChildrenTreeData(treeNode) {
-    try {
-      const result = await queryDepartTreeSync({
-        pid: treeNode.dataRef.id,
-      });
-      if (result.length == 0) {
-        treeNode.dataRef.isLeaf = true;
-      } else {
-        treeNode.dataRef.children = result;
-        if (expandedKeys.value.length > 0) {
-          // 鍒ゆ柇鑾峰彇鐨勫瓙绾ф槸鍚︽湁褰撳墠灞曞紑鐨勯」
-          let subKeys: any[] = [];
-          for (let key of expandedKeys.value) {
-            if (result.findIndex((item) => item.id === key) !== -1) {
-              subKeys.push(key);
-            }
-          }
-          if (subKeys.length > 0) {
-            expandedKeys.value = [...expandedKeys.value];
-          }
-        }
-      }
-      treeData.value = [...treeData.value];
-      emit('rootTreeData', treeData.value);
-    } catch (e) {
-      console.error(e);
-    }
-    return Promise.resolve();
-  }
-
-  // 鑷姩灞曞紑鐖惰妭鐐癸紝鍙睍寮�涓�绾�
-  function autoExpandParentNode() {
-    let item = treeData.value[0];
-    if (item) {
-      if (!item.isLeaf) {
-        expandedKeys.value = [item.key];
-      }
-      // 榛樿閫変腑绗竴涓�
-      setSelectedKey(item.id, item);
-      reloadTree();
-    } else {
-      emit('select', null);
-    }
-  }
-
-  // 閲嶆柊鍔犺浇鏍戠粍浠讹紝闃叉鏃犳硶榛樿灞曞紑鏁版嵁
-  async function reloadTree() {
-    await nextTick();
-    treeReloading.value = true;
-    await nextTick();
-    treeReloading.value = false;
-  }
-
-  /**
-   * 璁剧疆褰撳墠閫変腑鐨勮
-   */
-  function setSelectedKey(key: string, data?: object) {
-    selectedKeys.value = [key];
-    if (data) {
-      currentDepart.value = data;
-      emit('select', data);
-    }
-  }
-
-  // 娣诲姞涓�绾ч儴闂�
-  function onAddDepart() {
-    openModal(true, { isUpdate: false, isChild: false });
-  }
-
-  // 娣诲姞瀛愮骇閮ㄩ棬
-  function onAddChildDepart(data = currentDepart.value) {
-    if (data == null) {
-      createMessage.warning('璇峰厛閫夋嫨涓�涓儴闂�');
-      return;
-    }
-    const record = { parentId: data.id };
-    openModal(true, { isUpdate: false, isChild: true, record });
-  }
-
-  // 鎼滅储浜嬩欢
-  async function onSearch(value: string) {
-    if (value) {
-      try {
-        loading.value = true;
-        treeData.value = [];
-        let result = await searchByKeywords({ keyWord: value });
-        if (Array.isArray(result)) {
-          treeData.value = result;
-        }
-        autoExpandParentNode();
-      } finally {
-        loading.value = false;
-      }
-    } else {
-      loadRootTreeData();
-    }
-    searchKeyword.value = value;
-  }
-
-  // 鏍戝閫夋閫夋嫨浜嬩欢
-  function onCheck(e) {
-    if (Array.isArray(e)) {
-      checkedKeys.value = e;
-    } else {
-      checkedKeys.value = e.checked;
-    }
-  }
-
-  // 鏍戦�夋嫨浜嬩欢
-  function onSelect(selKeys, event) {
-    console.log('select: ', selKeys, event);
-    if (selKeys.length > 0 && selectedKeys.value[0] !== selKeys[0]) {
-      setSelectedKey(selKeys[0], event.selectedNodes[0]);
-    } else {
-      // 杩欐牱鍙互闃叉鐢ㄦ埛鍙栨秷閫夋嫨
-      setSelectedKey(selectedKeys.value[0]);
-    }
-  }
-
-  /**
-   * 鏍规嵁 ids 鍒犻櫎閮ㄩ棬
-   * @param idListRef array
-   * @param confirm 鏄惁鏄剧ず纭鎻愮ず妗�
-   */
-  async function doDeleteDepart(idListRef, confirm = true) {
-    const idList = unref(idListRef);
-    if (idList.length > 0) {
-      try {
-        loading.value = true;
-        await deleteBatchDepart({ ids: idList.join(',') }, confirm);
-        await loadRootTreeData();
-      } finally {
-        loading.value = false;
-      }
-    }
-  }
-
-  // 鍒犻櫎鍗曚釜閮ㄩ棬
-  async function onDelete(data) {
-    if (data) {
-      onVisibleChange(false);
-      doDeleteDepart([data.id], false);
-    }
-  }
-
-  // 鎵归噺鍒犻櫎閮ㄩ棬
-  async function onDeleteBatch() {
-    try {
-      await doDeleteDepart(checkedKeys);
-      checkedKeys.value = [];
-    } finally {
-    }
-  }
-
-  function onVisibleChange(visible) {
-    if (!visible) {
-      visibleTreeKey.value = null;
-    }
-  }
-
-  function onImportXls(d) {
-    handleImportXls(d, Api.importExcelUrl, () => {
-      loadRootTreeData();
-    });
-  }
-
-  function onExportXls() {
-    handleExportXls('閮ㄩ棬淇℃伅', Api.exportXlsUrl);
-  }
-
-  defineExpose({
-    loadRootTreeData,
-  });
-</script>
diff --git a/src/views/system/depart/components/DepartRuleTab.vue b/src/views/system/depart/components/DepartRuleTab.vue
deleted file mode 100644
index d66ca3f..0000000
--- a/src/views/system/depart/components/DepartRuleTab.vue
+++ /dev/null
@@ -1,160 +0,0 @@
-<template>
-  <a-spin :spinning="loading">
-    <template v-if="treeData.length > 0">
-      <BasicTree ref="basicTree" class="depart-rule-tree" checkable :treeData="treeData" :checkedKeys="checkedKeys"
-        :selectedKeys="selectedKeys" :expandedKeys="expandedKeys" :checkStrictly="checkStrictly"
-        style="height: 500px; overflow: auto" @check="onCheck" @expand="onExpand" @select="onSelect">
-        <template #title="{ slotTitle, ruleFlag }">
-          <span>{{ slotTitle }}</span>
-          <Icon v-if="ruleFlag" icon="ant-design:align-left-outlined" style="margin-left: 5px; color: red" />
-        </template>
-      </BasicTree>
-    </template>
-    <a-empty v-else description="鏃犲彲閰嶇疆閮ㄩ棬鏉冮檺" />
-
-    <div class="j-box-bottom-button offset-20" style="margin-top: 30px">
-      <div class="j-box-bottom-button-float">
-        <a-dropdown :trigger="['click']" placement="top">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="toggleCheckStrictly(false)">鐖跺瓙鍏宠仈</a-menu-item>
-              <a-menu-item key="2" @click="toggleCheckStrictly(true)">鍙栨秷鍏宠仈</a-menu-item>
-              <a-menu-item key="3" @click="toggleCheckALL(true)">鍏ㄩ儴鍕鹃��</a-menu-item>
-              <a-menu-item key="4" @click="toggleCheckALL(false)">鍙栨秷鍏ㄩ��</a-menu-item>
-              <a-menu-item key="5" @click="toggleExpandAll(true)">灞曞紑鎵�鏈�</a-menu-item>
-              <a-menu-item key="6" @click="toggleExpandAll(false)">鏀惰捣鎵�鏈�</a-menu-item>
-            </a-menu>
-          </template>
-          <a-button style="float: left">
-            鏍戞搷浣�
-            <Icon icon="ant-design:up-outlined" />
-          </a-button>
-        </a-dropdown>
-        <a-button type="primary" preIcon="ant-design:save-filled" @click="onSubmit">淇濆瓨</a-button>
-      </div>
-    </div>
-  </a-spin>
-  <DepartDataRuleDrawer @register="registerDataRuleDrawer" />
-</template>
-
-<script lang="ts" setup>
-import { computed, inject, nextTick, ref, watch } from 'vue'
-import { queryDepartPermission, queryRoleTreeList, saveDepartPermission } from '../depart.api'
-import DepartDataRuleDrawer from './DepartDataRuleDrawer.vue'
-import { useDrawer } from '/@/components/Drawer'
-import { BasicTree } from '/@/components/Tree/index'
-
-const props = defineProps({
-  data: { type: Object, default: () => ({}) },
-})
-// 褰撳墠閫変腑鐨勯儴闂↖D锛屽彲鑳戒細涓虹┖锛屼唬琛ㄦ湭閫夋嫨閮ㄩ棬
-const departId = computed(() => props.data?.id)
-
-const prefixCls = inject('prefixCls')
-const basicTree = ref()
-const loading = ref<boolean>(false)
-const treeData = ref<any[]>([])
-const expandedKeys = ref<Array<any>>([])
-const selectedKeys = ref<Array<any>>([])
-const checkedKeys = ref<Array<any>>([])
-const lastCheckedKeys = ref<Array<any>>([])
-const checkStrictly = ref(true)
-
-// 娉ㄥ唽鏁版嵁瑙勫垯鎺堟潈寮圭獥鎶藉眽
-const [registerDataRuleDrawer, dataRuleDrawer] = useDrawer()
-
-// onCreated
-loadData()
-watch(departId, () => loadDepartPermission(), { immediate: true })
-
-async function loadData() {
-  try {
-    loading.value = true
-    let { treeList } = await queryRoleTreeList()
-    treeData.value = treeList
-    await nextTick()
-    toggleExpandAll(true)
-  } finally {
-    loading.value = false
-  }
-}
-
-async function loadDepartPermission() {
-  if (departId.value) {
-    try {
-      loading.value = true
-      let keys = await queryDepartPermission({ departId: departId.value })
-      checkedKeys.value = keys
-      lastCheckedKeys.value = [...keys]
-    } finally {
-      loading.value = false
-    }
-  }
-}
-
-async function onSubmit() {
-  try {
-    loading.value = true
-    await saveDepartPermission({
-      departId: departId.value,
-      permissionIds: checkedKeys.value.join(','),
-      lastpermissionIds: lastCheckedKeys.value.join(','),
-    })
-    await loadData()
-    await loadDepartPermission()
-  } finally {
-    loading.value = false
-  }
-}
-
-// tree鍕鹃�夊閫夋浜嬩欢
-function onCheck(event) {
-  if (!Array.isArray(event)) {
-    checkedKeys.value = event.checked
-  } else {
-    checkedKeys.value = event
-  }
-}
-
-// tree灞曞紑浜嬩欢
-function onExpand($expandedKeys) {
-  expandedKeys.value = $expandedKeys
-}
-
-// tree閫変腑浜嬩欢
-function onSelect($selectedKeys, { selectedNodes }) {
-  if (selectedNodes[0]?.ruleFlag) {
-    let functionId = $selectedKeys[0]
-    dataRuleDrawer.openDrawer(true, { departId, functionId })
-  }
-  selectedKeys.value = []
-}
-
-// 鍒囨崲鐖跺瓙鍏宠仈
-async function toggleCheckStrictly(flag) {
-  checkStrictly.value = flag
-  await nextTick()
-  checkedKeys.value = basicTree.value.getCheckedKeys()
-}
-
-// 鍒囨崲灞曞紑鏀惰捣
-async function toggleExpandAll(flag) {
-  basicTree.value.expandAll(flag)
-  await nextTick()
-  expandedKeys.value = basicTree.value.getExpandedKeys()
-}
-
-// 鍒囨崲鍏ㄩ��
-async function toggleCheckALL(flag) {
-  basicTree.value.checkAll(flag)
-  await nextTick()
-  checkedKeys.value = basicTree.value.getCheckedKeys()
-}
-</script>
-
-<style lang="less" scoped>
-// 銆怴UEN-188銆戣В鍐虫粴鍔ㄦ潯涓嶇伒鏁忕殑闂
-.depart-rule-tree :deep(.scrollbar__bar) {
-  pointer-events: none;
-}
-</style>
diff --git a/src/views/system/depart/depart.api.ts b/src/views/system/depart/depart.api.ts
deleted file mode 100644
index f224f49..0000000
--- a/src/views/system/depart/depart.api.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-import { unref } from 'vue';
-import { defHttp } from '/@/utils/http/axios';
-import { useMessage } from '/@/hooks/web/useMessage';
-
-const { createConfirm } = useMessage();
-
-export enum Api {
-  queryDepartTreeSync = '/sys/sysDepart/queryDepartTreeSync',
-  save = '/sys/sysDepart/add',
-  edit = '/sys/sysDepart/edit',
-  delete = '/sys/sysDepart/delete',
-  deleteBatch = '/sys/sysDepart/deleteBatch',
-  exportXlsUrl = '/sys/sysDepart/exportXls',
-  importExcelUrl = '/sys/sysDepart/importExcel',
-
-  roleQueryTreeList = '/sys/role/queryTreeList',
-  queryDepartPermission = '/sys/permission/queryDepartPermission',
-  saveDepartPermission = '/sys/permission/saveDepartPermission',
-
-  dataRule = '/sys/sysDepartPermission/datarule',
-
-  getCurrentUserDeparts = '/sys/user/getCurrentUserDeparts',
-  selectDepart = '/sys/selectDepart',
-  getUpdateDepartInfo = '/sys/user/getUpdateDepartInfo',
-  doUpdateDepartInfo = '/sys/user/doUpdateDepartInfo',
-  changeDepartChargePerson = '/sys/user/changeDepartChargePerson',
-}
-
-/**
- * 鑾峰彇閮ㄩ棬鏍戝垪琛�
- */
-export const queryDepartTreeSync = (params?) => defHttp.get({ url: Api.queryDepartTreeSync, params });
-
-/**
- * 淇濆瓨鎴栬�呮洿鏂伴儴闂ㄨ鑹�
- */
-export const saveOrUpdateDepart = (params, isUpdate) => {
-  if (isUpdate) {
-    return defHttp.put({ url: Api.edit, params });
-  } else {
-    return defHttp.post({ url: Api.save, params });
-  }
-};
-
-/**
- * 鎵归噺鍒犻櫎閮ㄩ棬瑙掕壊
- */
-export const deleteBatchDepart = (params, confirm = false) => {
-  return new Promise((resolve, reject) => {
-    const doDelete = () => {
-      resolve(defHttp.delete({ url: Api.deleteBatch, params }, { joinParamsToUrl: true }));
-    };
-    if (confirm) {
-      createConfirm({
-        iconType: 'warning',
-        title: '鍒犻櫎',
-        content: '纭畾瑕佸垹闄ゅ悧锛�',
-        onOk: () => doDelete(),
-        onCancel: () => reject(),
-      });
-    } else {
-      doDelete();
-    }
-  });
-};
-
-/**
- * 鑾峰彇鏉冮檺鏍戝垪琛�
- */
-export const queryRoleTreeList = (params?) => defHttp.get({ url: Api.roleQueryTreeList, params });
-/**
- * 鏌ヨ閮ㄩ棬鏉冮檺
- */
-export const queryDepartPermission = (params?) => defHttp.get({ url: Api.queryDepartPermission, params });
-/**
- * 淇濆瓨閮ㄩ棬鏉冮檺
- */
-export const saveDepartPermission = (params) => defHttp.post({ url: Api.saveDepartPermission, params });
-
-/**
- *  鏌ヨ閮ㄩ棬鏁版嵁鏉冮檺鍒楄〃
- */
-export const queryDepartDataRule = (functionId, departId, params?) => {
-  let url = `${Api.dataRule}/${unref(functionId)}/${unref(departId)}`;
-  return defHttp.get({ url, params });
-};
-/**
- * 淇濆瓨閮ㄩ棬鏁版嵁鏉冮檺
- */
-export const saveDepartDataRule = (params) => defHttp.post({ url: Api.dataRule, params });
-/**
- * 鑾峰彇鐧诲綍鐢ㄦ埛閮ㄩ棬淇℃伅
- */
-export const getUserDeparts = (params?) => defHttp.get({ url: Api.getCurrentUserDeparts, params });
-/**
- * 鍒囨崲閫夋嫨閮ㄩ棬
- */
-export const selectDepart = (params?) => defHttp.put({ url: Api.selectDepart, params });
-
-/**
- * 缂栬緫閮ㄩ棬鍓嶈幏鍙栭儴闂ㄧ浉鍏充俊鎭�
- * @param id
- */
-export const getUpdateDepartInfo = (id) => defHttp.get({ url: Api.getUpdateDepartInfo, params: {id} });
-
-/**
- * 缂栬緫閮ㄩ棬
- * @param params
- */
-export const doUpdateDepartInfo = (params) => defHttp.put({ url: Api.doUpdateDepartInfo, params });
-
-/**
- * 鍒犻櫎閮ㄩ棬
- * @param id
- */
-export const deleteDepart = (id) => defHttp.delete({ url: Api.delete, params:{ id } }, { joinParamsToUrl: true });
-
-/**
- * 璁剧疆璐熻矗浜� 鍙栨秷璐熻矗浜�
- * @param params
- */
-export const changeDepartChargePerson = (params) => defHttp.put({ url: Api.changeDepartChargePerson, params });
diff --git a/src/views/system/depart/depart.data.ts b/src/views/system/depart/depart.data.ts
deleted file mode 100644
index 9e0346e..0000000
--- a/src/views/system/depart/depart.data.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-import { FormSchema } from '/@/components/Form';
-
-// 閮ㄩ棬鍩虹琛ㄥ崟
-export function useBasicFormSchema() {
-  const basicFormSchema: FormSchema[] = [
-    {
-      field: 'departName',
-      label: '鏈烘瀯鍚嶇О',
-      component: 'Input',
-      componentProps: {
-        placeholder: '璇疯緭鍏ユ満鏋�/閮ㄩ棬鍚嶇О',
-      },
-      rules: [{ required: true, message: '鏈烘瀯鍚嶇О涓嶈兘涓虹┖' }],
-    },
-    {
-      field: 'parentId',
-      label: '涓婄骇閮ㄩ棬',
-      component: 'TreeSelect',
-      componentProps: {
-        treeData: [],
-        placeholder: '鏃�',
-        dropdownStyle: { maxHeight: '200px', overflow: 'auto' },
-      },
-    },
-    {
-      field: 'orgCode',
-      label: '鏈烘瀯缂栫爜',
-      component: 'Input',
-      componentProps: {
-        placeholder: '璇疯緭鍏ユ満鏋勭紪鐮�',
-      },
-    },
-    {
-      field: 'orgCategory',
-      label: '鏈烘瀯绫诲瀷',
-      component: 'RadioButtonGroup',
-      componentProps: { options: [] },
-    },
-    {
-      field: 'departOrder',
-      label: '鎺掑簭',
-      component: 'InputNumber',
-      componentProps: {},
-    },
-    {
-      field: 'mobile',
-      label: '鐢佃瘽',
-      component: 'Input',
-      componentProps: {
-        placeholder: '璇疯緭鍏ョ數璇�',
-      },
-    },
-    {
-      field: 'fax',
-      label: '浼犵湡',
-      component: 'Input',
-      componentProps: {
-        placeholder: '璇疯緭鍏ヤ紶鐪�',
-      },
-    },
-    {
-      field: 'address',
-      label: '鍦板潃',
-      component: 'Input',
-      componentProps: {
-        placeholder: '璇疯緭鍏ュ湴鍧�',
-      },
-    },
-    {
-      field: 'memo',
-      label: '澶囨敞',
-      component: 'InputTextArea',
-      componentProps: {
-        placeholder: '璇疯緭鍏ュ娉�',
-      },
-    },
-  ];
-  return { basicFormSchema };
-}
-
-// 鏈烘瀯绫诲瀷閫夐」
-export const orgCategoryOptions = {
-  // 涓�绾ч儴闂�
-  root: [{ value: '1', label: '鍏徃' }],
-  // 瀛愮骇閮ㄩ棬
-  child: [
-    { value: '2', label: '閮ㄩ棬' },
-    { value: '3', label: '宀椾綅' },
-  ],
-};
diff --git a/src/views/system/depart/index.less b/src/views/system/depart/index.less
deleted file mode 100644
index e1f751a..0000000
--- a/src/views/system/depart/index.less
+++ /dev/null
@@ -1,10 +0,0 @@
-//noinspection LessUnresolvedVariable
-@prefix-cls: ~'@{namespace}-depart-manage';
-
-.@{prefix-cls} {
-  &--box {
-    .ant-tabs-nav {
-      padding: 0 20px;
-    }
-  }
-}
diff --git a/src/views/system/depart/index.vue b/src/views/system/depart/index.vue
deleted file mode 100644
index 68ed965..0000000
--- a/src/views/system/depart/index.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-<template>
-  <a-row :class="['p-4', `${prefixCls}--box`]" type="flex" :gutter="10">
-    <a-col :xl="12" :lg="24" :md="24" style="margin-bottom: 10px">
-      <DepartLeftTree ref="leftTree" @select="onTreeSelect" @rootTreeData="onRootTreeData" />
-    </a-col>
-    <a-col :xl="12" :lg="24" :md="24" style="margin-bottom: 10px">
-      <div style="height: 100%; background-color: white">
-        <a-tabs v-show="departData != null" defaultActiveKey="base-info">
-          <a-tab-pane tab="鍩烘湰淇℃伅" key="base-info" forceRender style="position: relative">
-            <div style="padding: 20px">
-              <DepartFormTab :data="departData" :rootTreeData="rootTreeData" @success="onSuccess" />
-            </div>
-          </a-tab-pane>
-          <a-tab-pane tab="閮ㄩ棬鏉冮檺" key="role-info">
-            <div style="padding: 0 20px 20px">
-              <DepartRuleTab :data="departData" />
-            </div>
-          </a-tab-pane>
-        </a-tabs>
-        <div v-show="departData == null" style="padding-top: 40px">
-          <a-empty description="灏氭湭閫夋嫨閮ㄩ棬" />
-        </div>
-      </div>
-    </a-col>
-  </a-row>
-</template>
-
-<script lang="ts" setup name="system-depart">
-  import { provide, ref } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import DepartLeftTree from './components/DepartLeftTree.vue';
-  import DepartFormTab from './components/DepartFormTab.vue';
-  import DepartRuleTab from './components/DepartRuleTab.vue';
-
-  const { prefixCls } = useDesign('depart-manage');
-  provide('prefixCls', prefixCls);
-
-  // 缁欏瓙缁勪欢瀹氫箟涓�涓猺ef鍙橀噺
-  const leftTree = ref();
-
-  // 褰撳墠閫変腑鐨勯儴闂ㄤ俊鎭�
-  const departData = ref({});
-  const rootTreeData = ref<any[]>([]);
-
-  // 宸︿晶鏍戦�夋嫨鍚庤Е鍙�
-  function onTreeSelect(data) {
-    console.log('onTreeSelect: ', data);
-    departData.value = data;
-  }
-
-  // 宸︿晶鏍憆ootTreeData瑙﹀彂
-  function onRootTreeData(data) {
-    rootTreeData.value = data;
-  }
-
-  function onSuccess() {
-    leftTree.value.loadRootTreeData();
-  }
-</script>
-
-<style lang="less">
-  @import './index.less';
-</style>
diff --git a/src/views/system/departUser/components/DepartBaseInfoTab.vue b/src/views/system/departUser/components/DepartBaseInfoTab.vue
deleted file mode 100644
index 911319f..0000000
--- a/src/views/system/departUser/components/DepartBaseInfoTab.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-<template>
-  <Description @register="registerDesc" />
-</template>
-
-<script lang="ts" setup>
-  import { ref, inject, onMounted, watch } from 'vue';
-  import { queryIdTree } from '../depart.user.api';
-  import { useBaseInfoForm } from '../depart.user.data';
-  import { Description, useDescription } from '/@/components/Description/index';
-
-  const prefixCls = inject('prefixCls');
-  const props = defineProps({
-    data: { require: true, type: Object },
-  });
-  const treeData = ref([]);
-  const { descItems } = useBaseInfoForm(treeData);
-
-  const [registerDesc, { setDescProps }] = useDescription({
-    data: props.data,
-    schema: descItems,
-    column: 1,
-    labelStyle: {
-      width: '180px',
-    },
-  });
-
-  function setData(data) {
-    setDescProps({ data });
-  }
-
-  onMounted(() => {
-    watch(
-      () => props.data,
-      () => setData(props.data),
-      { immediate: true }
-    );
-  });
-  // 鍔ㄦ�佹煡璇� parentId 缁勪欢鐨� treeData
-  queryIdTree().then((data) => (treeData.value = data));
-</script>
diff --git a/src/views/system/departUser/components/DepartRoleAuthDrawer.vue b/src/views/system/departUser/components/DepartRoleAuthDrawer.vue
deleted file mode 100644
index 10989df..0000000
--- a/src/views/system/departUser/components/DepartRoleAuthDrawer.vue
+++ /dev/null
@@ -1,158 +0,0 @@
-<template>
-	<BasicDrawer
-		title="閮ㄩ棬瑙掕壊鏉冮檺閰嶇疆"
-		:width="650"
-		:loading="loading"
-		showFooter
-		okText="淇濆瓨骞跺叧闂�"
-		@ok="onSubmit(true)"
-		@close="onClose"
-		@register="registerDrawer"
-	>
-		<div>
-			<a-spin :spinning="loading">
-				<template v-if="treeData.length > 0">
-					<BasicTree
-						title="鎵�鎷ユ湁鐨勯儴闂ㄦ潈闄�"
-						toolbar
-						checkable
-						:treeData="treeData"
-						:checkedKeys="checkedKeys"
-						:selectedKeys="selectedKeys"
-						:expandedKeys="expandedKeys"
-						:checkStrictly="checkStrictly"
-						:clickRowToExpand="false"
-						@check="onCheck"
-						@expand="onExpand"
-						@select="onSelect"
-					>
-						<template #title="{ slotTitle, ruleFlag }">
-							<span>{{ slotTitle }}</span>
-							<Icon v-if="ruleFlag" icon="ant-design:align-left-outlined" style="margin-left: 5px; color: red" />
-						</template>
-					</BasicTree>
-				</template>
-				<a-empty v-else description="鏃犲彲閰嶇疆閮ㄩ棬鏉冮檺" />
-			</a-spin>
-		</div>
-
-		<template #centerFooter>
-			<a-button type="primary" :loading="loading" ghost @click="onSubmit(false)">浠呬繚瀛�</a-button>
-		</template>
-	</BasicDrawer>
-	<DepartRoleDataRuleDrawer @register="registerDataRuleDrawer" />
-</template>
-
-<script lang="ts" setup>
-	import { ref } from 'vue'
-
-	import { BasicDrawer, useDrawer, useDrawerInner } from '/@/components/Drawer'
-	import { BasicTree } from '/@/components/Tree/index'
-	import { useMessage } from '/@/hooks/web/useMessage'
-
-	import { queryDeptRolePermission, queryTreeListForDeptRole, saveDeptRolePermission } from '../depart.user.api'
-	import DepartRoleDataRuleDrawer from './DepartRoleDataRuleDrawer.vue'
-
-	defineEmits(['register'])
-	const { createMessage } = useMessage()
-	const loading = ref(false)
-	const departId = ref('')
-	const roleId = ref('')
-	const treeData = ref<Array<any>>([])
-	const checkedKeys = ref<Array<any>>([])
-	const lastCheckedKeys = ref<Array<any>>([])
-	const expandedKeys = ref<Array<any>>([])
-	const selectedKeys = ref<Array<any>>([])
-	const allTreeKeys = ref<Array<any>>([])
-	const checkStrictly = ref(true)
-
-	// 娉ㄥ唽鎶藉眽缁勪欢
-	const [registerDrawer, { closeDrawer }] = useDrawerInner((data) => {
-		roleId.value = data.record.id
-		departId.value = data.record.departId
-		loadData()
-	})
-	// 娉ㄥ唽鏁版嵁瑙勫垯鎺堟潈寮圭獥鎶藉眽
-	const [registerDataRuleDrawer, dataRuleDrawer] = useDrawer()
-
-	async function loadData() {
-		try {
-			loading.value = true
-			// 鐢ㄦ埛瑙掕壊鎺堟潈鍔熻兘锛屾煡璇㈣彍鍗曟潈闄愭爲
-			const { ids, treeList } = await queryTreeListForDeptRole({ departId: departId.value })
-			if (ids.length > 0) {
-				allTreeKeys.value = ids
-				expandedKeys.value = ids
-				treeData.value = treeList
-				// 鏌ヨ瑙掕壊鎺堟潈
-				checkedKeys.value = await queryDeptRolePermission({ roleId: roleId.value })
-				lastCheckedKeys.value = [checkedKeys.value]
-			} else {
-				reset()
-			}
-		} finally {
-			loading.value = false
-		}
-	}
-
-	// 閲嶇疆椤甸潰
-	function reset() {
-		treeData.value = []
-		expandedKeys.value = []
-		checkedKeys.value = []
-		lastCheckedKeys.value = []
-		loading.value = false
-	}
-
-	// tree鍕鹃�夊閫夋浜嬩欢
-	function onCheck(event) {
-		if (checkStrictly.value) {
-			checkedKeys.value = event.checked
-		} else {
-			checkedKeys.value = event
-		}
-	}
-
-	// tree灞曞紑浜嬩欢
-	function onExpand($expandedKeys) {
-		expandedKeys.value = $expandedKeys
-	}
-
-	// tree閫変腑浜嬩欢
-	function onSelect($selectedKeys, { selectedNodes }) {
-		if (selectedNodes[0]?.ruleFlag) {
-			let functionId = $selectedKeys[0]
-			dataRuleDrawer.openDrawer(true, { roleId, departId, functionId })
-		}
-		selectedKeys.value = []
-	}
-
-	function doClose() {
-		reset()
-		closeDrawer()
-	}
-
-	function onClose() {
-		reset()
-	}
-
-	async function onSubmit(exit) {
-		try {
-			loading.value = true
-			let params = {
-				roleId: roleId.value,
-				permissionIds: checkedKeys.value.join(','),
-				lastpermissionIds: lastCheckedKeys.value.join(','),
-			}
-			await saveDeptRolePermission(params)
-			if (exit) {
-				doClose()
-			}
-		} finally {
-			loading.value = false
-			if (!exit) {
-				loadData()
-			}
-		}
-	}
-</script>
diff --git a/src/views/system/departUser/components/DepartRoleDataRuleDrawer.vue b/src/views/system/departUser/components/DepartRoleDataRuleDrawer.vue
deleted file mode 100644
index 04f2e45..0000000
--- a/src/views/system/departUser/components/DepartRoleDataRuleDrawer.vue
+++ /dev/null
@@ -1,82 +0,0 @@
-<template>
-  <BasicDrawer title="鏁版嵁瑙勫垯/鎸夐挳鏉冮檺閰嶇疆" :width="365" @close="onClose" @register="registerDrawer">
-    <a-spin :spinning="loading">
-      <a-tabs defaultActiveKey="1">
-        <a-tab-pane tab="鏁版嵁瑙勫垯" key="1">
-          <a-checkbox-group v-model:value="dataRuleChecked" v-if="dataRuleList.length > 0">
-            <a-row>
-              <a-col :span="24" v-for="(item, index) in dataRuleList" :key="'dr' + index">
-                <a-checkbox :value="item.id">{{ item.ruleName }}</a-checkbox>
-              </a-col>
-              <a-col :span="24">
-                <div style="width: 100%; margin-top: 15px">
-                  <a-button type="primary" :loading="loading" :size="'small'" preIcon="ant-design:save-filled" @click="saveDataRuleForRole">
-                    <span>鐐瑰嚮淇濆瓨</span>
-                  </a-button>
-                </div>
-              </a-col>
-            </a-row>
-          </a-checkbox-group>
-          <a-empty v-else description="鏃犻厤缃俊鎭�" />
-        </a-tab-pane>
-        <!--<a-tab-pane tab="鎸夐挳鏉冮檺" key="2">鏁鏈熷緟!!!</a-tab-pane>-->
-      </a-tabs>
-    </a-spin>
-  </BasicDrawer>
-</template>
-
-<script lang="ts" setup>
-  import { ref, unref } from 'vue';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-
-  import { queryDepartRoleDataRule, saveDepartRoleDataRule } from '../depart.user.api';
-
-  defineEmits(['register']);
-  const loading = ref<boolean>(false);
-  const departId = ref('');
-  const functionId = ref('');
-  const roleId = ref('');
-  const dataRuleList = ref<Array<any>>([]);
-  const dataRuleChecked = ref<Array<any>>([]);
-
-  // 娉ㄥ唽鎶藉眽缁勪欢
-  const [registerDrawer, { closeDrawer }] = useDrawerInner((data) => {
-    roleId.value = unref(data.roleId);
-    departId.value = unref(data.departId);
-    functionId.value = unref(data.functionId);
-    loadData();
-  });
-
-  async function loadData() {
-    try {
-      loading.value = true;
-      const { datarule, drChecked } = await queryDepartRoleDataRule(functionId, departId, roleId);
-      dataRuleList.value = datarule;
-      if (drChecked) {
-        dataRuleChecked.value = drChecked.split(',');
-      }
-    } finally {
-      loading.value = false;
-    }
-  }
-
-  function saveDataRuleForRole() {
-    let params = {
-      permissionId: functionId.value,
-      roleId: roleId.value,
-      dataRuleIds: dataRuleChecked.value.join(','),
-    };
-    saveDepartRoleDataRule(params);
-  }
-
-  function onClose() {
-    doReset();
-  }
-
-  function doReset() {
-    functionId.value = '';
-    roleId.value = '';
-    dataRuleList.value = [];
-    dataRuleChecked.value = [];
-  }
-</script>
diff --git a/src/views/system/departUser/components/DepartRoleInfoTab.vue b/src/views/system/departUser/components/DepartRoleInfoTab.vue
deleted file mode 100644
index 625ddc7..0000000
--- a/src/views/system/departUser/components/DepartRoleInfoTab.vue
+++ /dev/null
@@ -1,196 +0,0 @@
-<template>
-  <!--寮曠敤琛ㄦ牸-->
-  <BasicTable @register="registerTable" :rowSelection="rowSelection">
-    <!--鎻掓Ы:table鏍囬-->
-    <template #tableTitle>
-      <a-button type="primary" preIcon="ant-design:plus-outlined" @click="addDepartRole">娣诲姞閮ㄩ棬瑙掕壊</a-button>
-      <template v-if="selectedRowKeys.length > 0">
-        <a-divider type="vertical" />
-        <a-dropdown>
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="onDeleteDepartRoleBatch">
-                <icon icon="ant-design:delete-outlined" />
-                <span>鍒犻櫎</span>
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button>
-            <span>鎵归噺鎿嶄綔 </span>
-            <icon icon="akar-icons:chevron-down" />
-          </a-button>
-        </a-dropdown>
-      </template>
-    </template>
-    <!-- 鎻掓Ы锛氳鍐呮搷浣滄寜閽� -->
-    <template #action="{ record }">
-      <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-    </template>
-  </BasicTable>
-  <!-- 娣诲姞閮ㄩ棬寮圭獥 -->
-  <DepartRoleModal :departId="departId" @register="registerFormModal" @success="onFormModalSuccess" />
-  <DepartRoleAuthDrawer @register="registerAuthDrawer" />
-</template>
-
-<script lang="ts" setup>
-  import { inject, ref, unref, watch, computed, onMounted } from 'vue';
-
-  import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import { useDrawer } from '/@/components/Drawer';
-  import { useListPage } from '/@/hooks/system/useListPage';
-
-  import DepartRoleModal from './DepartRoleModal.vue';
-  import DepartRoleAuthDrawer from './DepartRoleAuthDrawer.vue';
-  import { deleteBatchDepartRole, departRoleList } from '../depart.user.api';
-  import { departRoleColumns, departRoleSearchFormSchema } from '../depart.user.data';
-  import { ColEx } from '/@/components/Form/src/types';
-
-  const prefixCls = inject('prefixCls');
-  const props = defineProps({
-    data: { require: true, type: Object },
-  });
-  defineEmits(['register']);
-  // 褰撳墠閫変腑鐨勯儴闂↖D锛屽彲鑳戒細涓虹┖锛屼唬琛ㄦ湭閫夋嫨閮ㄩ棬
-  const departId = computed(() => props.data?.id);
-
-  // 鑷�傚簲鍒楅厤缃�
-  const adaptiveColProps: Partial<ColEx> = {
-    xs: 24, // <576px
-    sm: 24, // 鈮�576px
-    md: 24, // 鈮�768px
-    lg: 12, // 鈮�992px
-    xl: 12, // 鈮�1200px
-    xxl: 8, // 鈮�1600px
-  };
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { tableContext, createMessage } = useListPage({
-    tableProps: {
-      api: departRoleList,
-      columns: departRoleColumns,
-      canResize: false,
-      formConfig: {
-        labelWidth: 100,
-        schemas: departRoleSearchFormSchema,
-        baseColProps: adaptiveColProps,
-        labelAlign: 'left',
-        labelCol: {
-          xs: 24,
-          sm: 24,
-          md: 24,
-          lg: 9,
-          xl: 7,
-          xxl: 6,
-        },
-        wrapperCol: {},
-        // 鎿嶄綔鎸夐挳閰嶇疆
-        actionColOptions: {
-          ...adaptiveColProps,
-          style: { textAlign: 'left' },
-        },
-      },
-      // 璇锋眰涔嬪墠瀵瑰弬鏁板仛澶勭悊
-      beforeFetch(params) {
-        params.deptId = departId.value;
-      },
-    },
-  });
-
-  // 娉ㄥ唽 ListTable
-  const [registerTable, { reload, setProps, setLoading, updateTableDataRecord }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  // 娉ㄥ唽Form寮圭獥
-  const [registerFormModal, formModal] = useModal();
-  // 娉ㄥ唽鎺堟潈寮圭獥鎶藉眽
-  const [registerAuthDrawer, authDrawer] = useDrawer();
-
-  // 鐩戝惉 data 鏇存敼锛岄噸鏂板姞杞芥暟鎹�
-  watch(
-    () => props.data,
-    () => reload()
-  );
-  onMounted(() => {
-    reload();
-  });
-
-  // 娓呯┖閫夋嫨鐨勮
-  function clearSelection() {
-    selectedRowKeys.value = [];
-  }
-
-  // 娣诲姞閮ㄩ棬瑙掕壊
-  function addDepartRole() {
-    formModal.openModal(true, {
-      isUpdate: false,
-      record: {},
-    });
-  }
-
-  // 缂栬緫閮ㄩ棬瑙掕壊
-  function editDepartRole(record) {
-    formModal.openModal(true, {
-      isUpdate: true,
-      record: record,
-    });
-  }
-
-  // 鎺堟潈閮ㄩ棬瑙掕壊
-  function permissionDepartRole(record) {
-    authDrawer.openDrawer(true, { record });
-  }
-
-  // 鎵归噺鍒犻櫎閮ㄩ棬瑙掕壊
-  async function deleteDepartRole(idList, confirm) {
-    if (!departId.value) {
-      createMessage.warning('璇峰厛閫夋嫨涓�涓儴闂�');
-    } else {
-      setLoading(true);
-      let ids = unref(idList).join(',');
-      try {
-        await deleteBatchDepartRole({ ids }, confirm);
-        return reload();
-      } finally {
-        setLoading(false);
-      }
-    }
-    return Promise.reject();
-  }
-
-  // 鎵归噺鍒犻櫎閮ㄩ棬瑙掕壊浜嬩欢
-  async function onDeleteDepartRoleBatch() {
-    try {
-      await deleteDepartRole(selectedRowKeys, true);
-      // 鎵归噺鍒犻櫎鎴愬姛鍚庢竻绌洪�夋嫨
-      clearSelection();
-    } catch (e) {}
-  }
-
-  // 琛ㄥ崟寮圭獥鎴愬姛鍚庣殑鍥炶皟
-  function onFormModalSuccess({ isUpdate, values }) {
-    isUpdate ? updateTableDataRecord(values.id, values) : reload();
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record): ActionItem[] {
-    return [{ label: '缂栬緫', onClick: editDepartRole.bind(null, record) }];
-  }
-
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record): ActionItem[] {
-    return [
-      { label: '鎺堟潈', onClick: permissionDepartRole.bind(null, record) },
-      {
-        label: '鍒犻櫎',
-        color: 'error',
-        popConfirm: {
-          title: '纭瑕佸垹闄ゅ悧锛�',
-          confirm: deleteDepartRole.bind(null, [record.id], false),
-        },
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/departUser/components/DepartRoleModal.vue b/src/views/system/departUser/components/DepartRoleModal.vue
deleted file mode 100644
index 4eec504..0000000
--- a/src/views/system/departUser/components/DepartRoleModal.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-<template>
-  <BasicModal :title="title" :width="800" v-bind="$attrs" @ok="handleOk" @register="registerModal">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { computed, inject, ref, unref } from 'vue';
-
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  // noinspection ES6UnusedImports
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-
-  import { saveOrUpdateDepartRole } from '../depart.user.api';
-  import { departRoleModalFormSchema } from '../depart.user.data';
-
-  const emit = defineEmits(['success', 'register']);
-  const props = defineProps({
-    // 褰撳墠閮ㄩ棬ID
-    departId: { require: true, type: String },
-  });
-  const prefixCls = inject('prefixCls');
-  // 褰撳墠鏄惁鏄洿鏂版ā寮�
-  const isUpdate = ref<boolean>(true);
-  // 褰撳墠鐨勫脊绐楁暟鎹�
-  const model = ref<object>({});
-  const title = computed(() => (isUpdate.value ? '缂栬緫' : '鏂板'));
-
-  //娉ㄥ唽琛ㄥ崟
-  const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
-    schemas: departRoleModalFormSchema,
-    showActionButtonGroup: false,
-  });
-
-  // 娉ㄥ唽寮圭獥
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    await resetFields();
-    isUpdate.value = unref(data?.isUpdate);
-    // 鏃犺鏂板杩樻槸缂栬緫锛岄兘鍙互璁剧疆琛ㄥ崟鍊�
-    let record = unref(data?.record);
-    if (typeof record === 'object') {
-      model.value = record;
-      await setFieldsValue({ ...record });
-    }
-  });
-
-  //鎻愪氦浜嬩欢
-  async function handleOk() {
-    try {
-      setModalProps({ confirmLoading: true });
-      let values = await validate();
-      values.departId = unref(props.departId);
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateDepartRole(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success', { isUpdate: unref(isUpdate), values });
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/departUser/components/DepartRoleUserAuthDrawer.vue b/src/views/system/departUser/components/DepartRoleUserAuthDrawer.vue
deleted file mode 100644
index 78dbc1b..0000000
--- a/src/views/system/departUser/components/DepartRoleUserAuthDrawer.vue
+++ /dev/null
@@ -1,91 +0,0 @@
-<template>
-  <BasicDrawer title="閮ㄩ棬瑙掕壊鍒嗛厤" :width="365" @close="onClose" @register="registerDrawer">
-    <a-spin :spinning="loading">
-      <template v-if="desformList.length > 0">
-        <a-checkbox-group v-model:value="designNameValue">
-          <a-row>
-            <a-col :span="24" v-for="item of desformList">
-              <a-checkbox :value="item.id">{{ item.roleName }}</a-checkbox>
-            </a-col>
-          </a-row>
-        </a-checkbox-group>
-        <div style="width: 100%; margin-top: 15px">
-          <a-button type="primary" :loading="loading" :size="'small'" preIcon="ant-design:save-filled" @click="onSubmit">
-            <span>鐐瑰嚮淇濆瓨</span>
-          </a-button>
-        </div>
-      </template>
-      <a-empty v-else description="鏃犻厤缃俊鎭�" />
-    </a-spin>
-  </BasicDrawer>
-</template>
-
-<script lang="ts" setup>
-  import { ref, unref } from 'vue';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-
-  import { queryDepartRoleByUserId, queryDepartRoleUserList, saveDepartRoleUser } from '../depart.user.api';
-
-  defineEmits(['register']);
-  const loading = ref<boolean>(false);
-  const userId = ref('');
-  const departId = ref('');
-  const oldRoleId = ref('');
-  const desformList = ref<Array<any>>([]);
-  const designNameValue = ref<Array<any>>([]);
-
-  // 娉ㄥ唽鎶藉眽缁勪欢
-  const [registerDrawer, { closeDrawer }] = useDrawerInner((data) => {
-    userId.value = unref(data.userId);
-    departId.value = unref(data.departId);
-    loadData();
-  });
-
-  async function loadData() {
-    try {
-      loading.value = true;
-      const params = {
-        departId: departId.value,
-        userId: userId.value,
-      };
-      // 鏌ヨ DepartRole
-      const [$desformList, $departRoleList] = await Promise.all([queryDepartRoleUserList(params), queryDepartRoleByUserId(params)]);
-      desformList.value = $desformList;
-      designNameValue.value = $departRoleList.map((item) => item.droleId);
-      oldRoleId.value = designNameValue.value.join(',');
-    } finally {
-      loading.value = false;
-    }
-  }
-
-  async function onSubmit() {
-    try {
-      loading.value = true;
-      await saveDepartRoleUser({
-        userId: userId.value,
-        newRoleId: designNameValue.value.join(','),
-        oldRoleId: oldRoleId.value,
-      });
-      doClose();
-    } finally {
-      loading.value = false;
-    }
-  }
-
-  function onClose() {
-    doReset();
-  }
-
-  function doClose() {
-    doReset();
-    closeDrawer();
-  }
-
-  function doReset() {
-    userId.value = '';
-    departId.value = '';
-    oldRoleId.value = '';
-    desformList.value = [];
-    designNameValue.value = [];
-  }
-</script>
diff --git a/src/views/system/departUser/components/DepartTree.vue b/src/views/system/departUser/components/DepartTree.vue
deleted file mode 100644
index 2617d9f..0000000
--- a/src/views/system/departUser/components/DepartTree.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<template>
-  <div class="bg-white m-4 mr-0 overflow-hidden">
-    <a-spin :spinning="loading">
-      <template v-if="userIdentity === '2'">
-        <!--缁勭粐鏈烘瀯鏍�-->
-        <BasicTree
-          v-if="!treeReloading"
-          title="閮ㄩ棬鍒楄〃"
-          toolbar
-          search
-          showLine
-          :checkStrictly="true"
-          :clickRowToExpand="false"
-          :treeData="treeData"
-          :selectedKeys="selectedKeys"
-          :expandedKeys="expandedKeys"
-          :autoExpandParent="autoExpandParent"
-          @select="onSelect"
-          @expand="onExpand"
-          @search="onSearch"
-        />
-      </template>
-      <a-empty v-else description="鏅�氬憳宸ユ棤姝ゆ潈闄�" />
-    </a-spin>
-  </div>
-</template>
-
-<script lang="ts" setup>
-  import { inject, nextTick, ref } from 'vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { BasicTree } from '/@/components/Tree';
-  import { queryMyDepartTreeList, searchByKeywords } from '../depart.user.api';
-
-  const prefixCls = inject('prefixCls');
-  const emit = defineEmits(['select']);
-  const { createMessage } = useMessage();
-
-  let loading = ref<boolean>(false);
-  // 閮ㄩ棬鏍戝垪琛ㄦ暟鎹�
-  let treeData = ref<any[]>([]);
-  // 褰撳墠灞曞紑鐨勯」
-  let expandedKeys = ref<any[]>([]);
-  // 褰撳墠閫変腑鐨勯」
-  let selectedKeys = ref<any[]>([]);
-  // 鏄惁鑷姩灞曞紑鐖剁骇
-  let autoExpandParent = ref<boolean>(true);
-  // 鐢ㄦ埛韬唤
-  let userIdentity = ref<string>('2');
-  // 鏍戠粍浠堕噸鏂板姞杞�
-  let treeReloading = ref<boolean>(false);
-
-  // 鍔犺浇閮ㄩ棬淇℃伅
-  function loadDepartTreeData() {
-    loading.value = true;
-    treeData.value = [];
-    queryMyDepartTreeList()
-      .then((res) => {
-        if (res.success) {
-          if (Array.isArray(res.result)) {
-            treeData.value = res.result;
-            userIdentity.value = res.message;
-            autoExpandParentNode();
-          }
-        } else {
-          createMessage.warning(res.message);
-        }
-      })
-      .finally(() => (loading.value = false));
-  }
-
-  loadDepartTreeData();
-
-  // 鑷姩灞曞紑鐖惰妭鐐癸紝鍙睍寮�涓�绾�
-  function autoExpandParentNode() {
-    let keys: Array<any> = [];
-    treeData.value.forEach((item, index) => {
-      if (item.children && item.children.length > 0) {
-        keys.push(item.key);
-      }
-      if (index === 0) {
-        // 榛樿閫変腑绗竴涓�
-        setSelectedKey(item.id, item);
-      }
-    });
-    if (keys.length > 0) {
-      reloadTree();
-      expandedKeys.value = keys;
-    }
-  }
-
-  // 閲嶆柊鍔犺浇鏍戠粍浠讹紝闃叉鏃犳硶榛樿灞曞紑鏁版嵁
-  async function reloadTree() {
-    await nextTick();
-    treeReloading.value = true;
-    await nextTick();
-    treeReloading.value = false;
-  }
-
-  /**
-   * 璁剧疆褰撳墠閫変腑鐨勮
-   */
-  function setSelectedKey(key: string, data?: object) {
-    selectedKeys.value = [key];
-    if (data) {
-      emit('select', data);
-    }
-  }
-
-  // 鎼滅储浜嬩欢
-  function onSearch(value: string) {
-    if (value) {
-      loading.value = true;
-      searchByKeywords({ keyWord: value, myDeptSearch: '1' })
-        .then((result) => {
-          if (Array.isArray(result)) {
-            treeData.value = result;
-          } else {
-            createMessage.warning('鏈煡璇㈠埌閮ㄩ棬淇℃伅');
-            treeData.value = [];
-          }
-        })
-        .finally(() => (loading.value = false));
-    } else {
-      loadDepartTreeData();
-    }
-  }
-
-  // 鏍戦�夋嫨浜嬩欢
-  function onSelect(selKeys, event) {
-    if (selKeys.length > 0 && selectedKeys.value[0] !== selKeys[0]) {
-      setSelectedKey(selKeys[0], event.selectedNodes[0]);
-    } else {
-      // 杩欐牱鍙互闃叉鐢ㄦ埛鍙栨秷閫夋嫨
-      setSelectedKey(selectedKeys.value[0]);
-    }
-  }
-
-  // 鏍戝睍寮�浜嬩欢
-  function onExpand(keys) {
-    expandedKeys.value = keys;
-    autoExpandParent.value = false;
-  }
-</script>
-<style lang="less" scoped>
-  /*鍗囩骇antd3鍚庯紝鏌ヨ妗嗕笌鏍戣创鐨勫お杩戯紝鏍峰紡浼樺寲*/
-  :deep(.jeecg-tree-header) {
-    margin-bottom: 6px;
-  }
-</style>
diff --git a/src/views/system/departUser/components/DepartUserInfoTab.vue b/src/views/system/departUser/components/DepartUserInfoTab.vue
deleted file mode 100644
index a941e8a..0000000
--- a/src/views/system/departUser/components/DepartUserInfoTab.vue
+++ /dev/null
@@ -1,229 +0,0 @@
-<template>
-  <!--寮曠敤琛ㄦ牸-->
-  <BasicTable @register="registerTable" :rowSelection="rowSelection">
-    <!--鎻掓Ы:table鏍囬-->
-    <template #tableTitle>
-      <a-button type="primary" preIcon="ant-design:plus-outlined" @click="selectAddUser">娣诲姞宸叉湁鐢ㄦ埛</a-button>
-      <a-button type="primary" preIcon="ant-design:plus-outlined" @click="createUser">鏂板缓鐢ㄦ埛</a-button>
-      <template v-if="selectedRowKeys.length > 0">
-        <a-dropdown>
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="onUnlinkDepartUserBatch">
-                <icon icon="bx:bx-unlink" />
-                <span>鍙栨秷鍏宠仈</span>
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button>
-            <span>鎵归噺鎿嶄綔 </span>
-            <icon icon="akar-icons:chevron-down" />
-          </a-button>
-        </a-dropdown>
-      </template>
-    </template>
-    <!-- 鎻掓Ы锛氳鍐呮搷浣滄寜閽� -->
-    <template #action="{ record }">
-      <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-    </template>
-  </BasicTable>
-  <UserDrawer @register="registerDrawer" @success="onUserDrawerSuccess" />
-  <DepartRoleUserAuthDrawer @register="registerUserAuthDrawer" />
-  <UserSelectModal rowKey="id" @register="registerSelUserModal" @getSelectResult="onSelectUserOk" />
-</template>
-
-<script lang="ts" setup>
-  import { computed, inject, ref, unref, watch } from 'vue';
-  import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import { useDrawer } from '/@/components/Drawer';
-  import { useListPage } from '/@/hooks/system/useListPage';
-
-  import UserDrawer from '/@/views/system/user/UserDrawer.vue';
-  import UserSelectModal from '/@/components/Form/src/jeecg/components/modal/UserSelectModal.vue';
-  import DepartRoleUserAuthDrawer from './DepartRoleUserAuthDrawer.vue';
-  import { departUserList, linkDepartUserBatch, unlinkDepartUserBatch } from '../depart.user.api';
-  import { userInfoColumns, userInfoSearchFormSchema } from '../depart.user.data';
-  import { ColEx } from '/@/components/Form/src/types';
-
-  const prefixCls = inject('prefixCls');
-  const props = defineProps({
-    data: { require: true, type: Object },
-  });
-  // 褰撳墠閫変腑鐨勯儴闂↖D锛屽彲鑳戒細涓虹┖锛屼唬琛ㄦ湭閫夋嫨閮ㄩ棬
-  const departId = computed(() => props.data?.id);
-
-  // 鑷�傚簲鍒楅厤缃�
-  const adaptiveColProps: Partial<ColEx> = {
-    xs: 24, // <576px
-    sm: 24, // 鈮�576px
-    md: 24, // 鈮�768px
-    lg: 12, // 鈮�992px
-    xl: 12, // 鈮�1200px
-    xxl: 8, // 鈮�1600px
-  };
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { tableContext, createMessage } = useListPage({
-    tableProps: {
-      api: departUserList,
-      columns: userInfoColumns,
-      canResize: false,
-      formConfig: {
-        schemas: userInfoSearchFormSchema,
-        baseColProps: adaptiveColProps,
-        labelAlign: 'left',
-        labelCol: {
-          xs: 24,
-          sm: 24,
-          md: 24,
-          lg: 9,
-          xl: 7,
-          xxl: 5,
-        },
-        wrapperCol: {},
-        // 鎿嶄綔鎸夐挳閰嶇疆
-        actionColOptions: {
-          ...adaptiveColProps,
-          style: { textAlign: 'left' },
-        },
-      },
-      // 璇锋眰涔嬪墠瀵瑰弬鏁板仛澶勭悊
-      beforeFetch(params) {
-        params.depId = departId.value;
-      },
-    },
-  });
-
-  // 娉ㄥ唽 ListTable
-  const [registerTable, { reload, setProps, setLoading, updateTableDataRecord }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  watch(
-    () => props.data,
-    () => reload()
-  );
-  //娉ㄥ唽drawer
-  const [registerDrawer, { openDrawer, setDrawerProps }] = useDrawer();
-  const [registerUserAuthDrawer, userAuthDrawer] = useDrawer();
-  // 娉ㄥ唽鐢ㄦ埛閫夋嫨 modal
-  const [registerSelUserModal, selUserModal] = useModal();
-
-  // 娓呯┖閫夋嫨鐨勮
-  function clearSelection() {
-    selectedRowKeys.value = [];
-  }
-
-  // 鏌ョ湅閮ㄩ棬瑙掕壊
-  function showDepartRole(record) {
-    userAuthDrawer.openDrawer(true, { userId: record.id, departId });
-  }
-
-  // 鍒涘缓鐢ㄦ埛
-  function createUser() {
-    if (!departId.value) {
-      createMessage.warning('璇峰厛閫夋嫨涓�涓儴闂�');
-    } else {
-      openDrawer(true, {
-        isUpdate: false,
-        departDisabled: true,
-        // 鍒濆鍖栬礋璐i儴闂�
-        nextDepartOptions: { value: props.data?.key, label: props.data?.title },
-        record: {
-          activitiSync: 1,
-          userIdentity: 1,
-          selecteddeparts: departId.value,
-        },
-      });
-    }
-  }
-
-  // 鏌ョ湅鐢ㄦ埛璇︽儏
-  function showUserDetail(record) {
-    openDrawer(true, {
-      record,
-      isUpdate: true,
-      departDisabled: true,
-      showFooter: false,
-    });
-  }
-
-  // 缂栬緫鐢ㄦ埛淇℃伅
-  function editUserInfo(record) {
-    openDrawer(true, { isUpdate: true, record, departDisabled: true });
-  }
-
-  // 閫夋嫨娣诲姞宸叉湁鐢ㄦ埛
-  function selectAddUser() {
-    selUserModal.openModal();
-  }
-
-  // 鎵归噺鍙栨秷鍏宠仈閮ㄩ棬鍜岀敤鎴蜂箣闂寸殑鍏崇郴
-  async function unlinkDepartUser(idList, confirm) {
-    if (!departId.value) {
-      createMessage.warning('璇峰厛閫夋嫨涓�涓儴闂�');
-    } else {
-      setLoading(true);
-      let userIds = unref(idList).join(',');
-      try {
-        await unlinkDepartUserBatch({ depId: departId.value, userIds }, confirm);
-        return reload();
-      } finally {
-        setLoading(false);
-      }
-    }
-    return Promise.reject();
-  }
-
-  // 鎵归噺鍙栨秷鍏宠仈浜嬩欢
-  async function onUnlinkDepartUserBatch() {
-    try {
-      await unlinkDepartUser(selectedRowKeys, true);
-      // 鎵归噺鍒犻櫎鎴愬姛鍚庢竻绌洪�夋嫨
-      clearSelection();
-    } catch (e) {}
-  }
-
-  // 閫夋嫨鐢ㄦ埛鎴愬姛
-  async function onSelectUserOk(options, userIdList) {
-    if (userIdList.length > 0) {
-      try {
-        setLoading(true);
-        await linkDepartUserBatch(departId.value, userIdList);
-        reload();
-      } finally {
-        setLoading(false);
-      }
-    }
-  }
-
-  /**
-   * 鐢ㄦ埛鎶藉眽琛ㄥ崟鎴愬姛鍥炶皟
-   */
-  function onUserDrawerSuccess({ isUpdate, values }) {
-    isUpdate ? updateTableDataRecord(values.id, values) : reload();
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record): ActionItem[] {
-    return [{ label: '缂栬緫', onClick: editUserInfo.bind(null, record) }];
-  }
-
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record): ActionItem[] {
-    return [
-      { label: '閮ㄩ棬瑙掕壊', onClick: showDepartRole.bind(null, record) },
-      { label: '鐢ㄦ埛璇︽儏', onClick: showUserDetail.bind(null, record) },
-      {
-        label: '鍙栨秷鍏宠仈',
-        color: 'error',
-        popConfirm: {
-          title: '纭鍙栨秷鍏宠仈鍚楋紵',
-          confirm: unlinkDepartUser.bind(null, [record.id], false),
-        },
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/departUser/depart.user.api.ts b/src/views/system/departUser/depart.user.api.ts
deleted file mode 100644
index d5a37ed..0000000
--- a/src/views/system/departUser/depart.user.api.ts
+++ /dev/null
@@ -1,159 +0,0 @@
-import { unref } from 'vue';
-import { defHttp } from '/@/utils/http/axios';
-import { useMessage } from '/@/hooks/web/useMessage';
-
-const { createConfirm } = useMessage();
-
-enum Api {
-  treeList = '/sys/sysDepart/queryMyDeptTreeList',
-  queryIdTree = '/sys/sysDepart/queryIdTree',
-  searchBy = '/sys/sysDepart/searchBy',
-}
-
-// 閮ㄩ棬鐢ㄦ埛API
-enum DepartUserApi {
-  list = '/sys/user/departUserList',
-  link = '/sys/user/editSysDepartWithUser',
-  unlink = '/sys/user/deleteUserInDepartBatch',
-}
-
-// 閮ㄩ棬瑙掕壊API
-enum DepartRoleApi {
-  list = '/sys/sysDepartRole/list',
-  deleteBatch = '/sys/sysDepartRole/deleteBatch',
-  save = '/sys/sysDepartRole/add',
-  edit = '/sys/sysDepartRole/edit',
-  queryTreeListForDeptRole = '/sys/sysDepartPermission/queryTreeListForDeptRole',
-  queryDeptRolePermission = '/sys/sysDepartPermission/queryDeptRolePermission',
-  saveDeptRolePermission = '/sys/sysDepartPermission/saveDeptRolePermission',
-  dataRule = '/sys/sysDepartRole/datarule',
-  getDeptRoleList = '/sys/sysDepartRole/getDeptRoleList',
-  getDeptRoleByUserId = '/sys/sysDepartRole/getDeptRoleByUserId',
-  saveDeptRoleUser = '/sys/sysDepartRole/deptRoleUserAdd',
-}
-
-/**
- * 鑾峰彇閮ㄩ棬鏍戝垪琛�
- */
-export const queryMyDepartTreeList = (params?) => defHttp.get({ url: Api.treeList, params }, { isTransformResponse: false });
-
-/**
- * 鏌ヨ鏁版嵁锛屼互鏍戠粨鏋勫舰寮忓姞杞芥墍鏈夐儴闂ㄧ殑鍚嶇О
- */
-export const queryIdTree = (params?) => defHttp.get({ url: Api.queryIdTree, params });
-
-/**
- * 鏍规嵁鍏抽敭瀛楁悳绱㈤儴闂�
- */
-export const searchByKeywords = (params) => defHttp.get({ url: Api.searchBy, params });
-
-/**
- * 鏌ヨ閮ㄩ棬涓嬬殑鐢ㄦ埛淇℃伅
- */
-export const departUserList = (params) => defHttp.get({ url: DepartUserApi.list, params });
-
-/**
- * 鎵归噺娣诲姞閮ㄩ棬鍜岀敤鎴风殑鍏宠仈鍏崇郴
- *
- * @param departId 閮ㄩ棬ID
- * @param userIdList 鐢ㄦ埛ID鍒楄〃
- */
-export const linkDepartUserBatch = (departId: string, userIdList: string[]) =>
-  defHttp.post({ url: DepartUserApi.link, params: { depId: departId, userIdList } });
-
-/**
- * 鎵归噺鍙栨秷閮ㄩ棬鍜岀敤鎴风殑鍏宠仈鍏崇郴
- */
-export const unlinkDepartUserBatch = (params, confirm = false) => {
-  return new Promise((resolve, reject) => {
-    const doDelete = () => {
-      resolve(defHttp.delete({ url: DepartUserApi.unlink, params }, { joinParamsToUrl: true }));
-    };
-    if (confirm) {
-      createConfirm({
-        iconType: 'warning',
-        title: '鍙栨秷鍏宠仈',
-        content: '纭畾瑕佸彇娑堝叧鑱斿悧锛�',
-        onOk: () => doDelete(),
-        onCancel: () => reject(),
-      });
-    } else {
-      doDelete();
-    }
-  });
-};
-
-/**
- * 鏌ヨ閮ㄩ棬瑙掕壊淇℃伅
- */
-export const departRoleList = (params) => defHttp.get({ url: DepartRoleApi.list, params });
-
-/**
- * 淇濆瓨鎴栬�呮洿鏂伴儴闂ㄨ鑹�
- */
-export const saveOrUpdateDepartRole = (params, isUpdate) => {
-  if (isUpdate) {
-    return defHttp.put({ url: DepartRoleApi.edit, params });
-  } else {
-    return defHttp.post({ url: DepartRoleApi.save, params });
-  }
-};
-
-/**
- * 鎵归噺鍒犻櫎閮ㄩ棬瑙掕壊
- */
-export const deleteBatchDepartRole = (params, confirm = false) => {
-  return new Promise((resolve, reject) => {
-    const doDelete = () => {
-      resolve(defHttp.delete({ url: DepartRoleApi.deleteBatch, params }, { joinParamsToUrl: true }));
-    };
-    if (confirm) {
-      createConfirm({
-        iconType: 'warning',
-        title: '鍒犻櫎',
-        content: '纭畾瑕佸垹闄ゅ悧锛�',
-        onOk: () => doDelete(),
-        onCancel: () => reject(),
-      });
-    } else {
-      doDelete();
-    }
-  });
-};
-
-/**
- * 鐢ㄦ埛瑙掕壊鎺堟潈鍔熻兘锛屾煡璇㈣彍鍗曟潈闄愭爲
- */
-export const queryTreeListForDeptRole = (params) => defHttp.get({ url: DepartRoleApi.queryTreeListForDeptRole, params });
-/**
- * 鏌ヨ瑙掕壊鎺堟潈
- */
-export const queryDeptRolePermission = (params) => defHttp.get({ url: DepartRoleApi.queryDeptRolePermission, params });
-/**
- * 淇濆瓨瑙掕壊鎺堟潈
- */
-export const saveDeptRolePermission = (params) => defHttp.post({ url: DepartRoleApi.saveDeptRolePermission, params });
-
-/**
- *  鏌ヨ閮ㄩ棬瑙掕壊鏁版嵁鏉冮檺鍒楄〃
- */
-export const queryDepartRoleDataRule = (functionId, departId, roleId, params?) => {
-  let url = `${DepartRoleApi.dataRule}/${unref(functionId)}/${unref(departId)}/${unref(roleId)}`;
-  return defHttp.get({ url, params });
-};
-/**
- * 淇濆瓨閮ㄩ棬瑙掕壊鏁版嵁鏉冮檺
- */
-export const saveDepartRoleDataRule = (params) => defHttp.post({ url: DepartRoleApi.dataRule, params });
-/**
- * 鏌ヨ閮ㄩ棬瑙掕壊鐢ㄦ埛鎺堟潈
- */
-export const queryDepartRoleUserList = (params) => defHttp.get({ url: DepartRoleApi.getDeptRoleList, params });
-/**
- * 鏍规嵁 userId 鏌ヨ閮ㄩ棬瑙掕壊鐢ㄦ埛鎺堟潈
- */
-export const queryDepartRoleByUserId = (params) => defHttp.get({ url: DepartRoleApi.getDeptRoleByUserId, params });
-/**
- * 淇濆瓨閮ㄩ棬瑙掕壊鐢ㄦ埛鎺堟潈
- */
-export const saveDepartRoleUser = (params) => defHttp.post({ url: DepartRoleApi.saveDeptRoleUser, params });
diff --git a/src/views/system/departUser/depart.user.data.ts b/src/views/system/departUser/depart.user.data.ts
deleted file mode 100644
index 6eaa191..0000000
--- a/src/views/system/departUser/depart.user.data.ts
+++ /dev/null
@@ -1,195 +0,0 @@
-import { Ref } from 'vue';
-import { duplicateCheck } from '/@/views/system/user/user.api';
-import { BasicColumn, FormSchema } from '/@/components/Table';
-import { DescItem } from '/@/components/Description';
-import { findTree } from '/@/utils/common/compUtils';
-
-// 鐢ㄦ埛淇℃伅 columns
-export const userInfoColumns: BasicColumn[] = [
-  {
-    title: '鐢ㄦ埛璐﹀彿',
-    dataIndex: 'username',
-    width: 150,
-  },
-  {
-    title: '鐢ㄦ埛鍚嶇О',
-    dataIndex: 'realname',
-    width: 180,
-  },
-  {
-    title: '閮ㄩ棬',
-    dataIndex: 'orgCode',
-    width: 200,
-  },
-  {
-    title: '鎬у埆',
-    dataIndex: 'sex_dictText',
-    width: 80,
-  },
-  {
-    title: '鐢佃瘽',
-    dataIndex: 'phone',
-    width: 120,
-  },
-];
-
-// 鐢ㄦ埛淇℃伅鏌ヨ鏉′欢琛ㄥ崟
-export const userInfoSearchFormSchema: FormSchema[] = [
-  {
-    field: 'username',
-    label: '鐢ㄦ埛璐﹀彿',
-    component: 'Input',
-  },
-];
-
-// 閮ㄩ棬瑙掕壊 columns
-export const departRoleColumns: BasicColumn[] = [
-  {
-    title: '閮ㄩ棬瑙掕壊鍚嶇О',
-    dataIndex: 'roleName',
-    width: 100,
-  },
-  {
-    title: '閮ㄩ棬瑙掕壊缂栫爜',
-    dataIndex: 'roleCode',
-    width: 100,
-  },
-  {
-    title: '閮ㄩ棬',
-    dataIndex: 'departId_dictText',
-    width: 100,
-  },
-  {
-    title: '澶囨敞',
-    dataIndex: 'description',
-    width: 100,
-  },
-];
-
-// 閮ㄩ棬瑙掕壊鏌ヨ鏉′欢琛ㄥ崟
-export const departRoleSearchFormSchema: FormSchema[] = [
-  {
-    field: 'roleName',
-    label: '閮ㄩ棬瑙掕壊鍚嶇О',
-    component: 'Input',
-  },
-];
-
-// 閮ㄩ棬瑙掕壊寮圭獥form琛ㄥ崟
-export const departRoleModalFormSchema: FormSchema[] = [
-  {
-    label: 'id',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'roleName',
-    label: '閮ㄩ棬瑙掕壊鍚嶇О',
-    component: 'Input',
-    rules: [
-      { required: true, message: '閮ㄩ棬瑙掕壊鍚嶇О涓嶈兘涓虹┖锛�' },
-      { min: 2, max: 30, message: '闀垮害鍦� 2 鍒� 30 涓瓧绗�', trigger: 'blur' },
-    ],
-  },
-  {
-    field: 'roleCode',
-    label: '閮ㄩ棬瑙掕壊缂栫爜',
-    component: 'Input',
-    dynamicDisabled: ({ values }) => {
-      return !!values.id;
-    },
-    dynamicRules: ({ model }) => {
-      return [
-        { required: true, message: '閮ㄩ棬瑙掕壊缂栫爜涓嶈兘涓虹┖锛�' },
-        { min: 0, max: 64, message: '闀垮害涓嶈兘瓒呰繃 64 涓瓧绗�', trigger: 'blur' },
-        {
-          validator: (_, value) => {
-            if (/[\u4E00-\u9FA5]/g.test(value)) {
-              return Promise.reject('閮ㄩ棬瑙掕壊缂栫爜涓嶅彲杈撳叆姹夊瓧锛�');
-            }
-            return new Promise((resolve, reject) => {
-              let params = {
-                tableName: 'sys_depart_role',
-                fieldName: 'role_code',
-                fieldVal: value,
-                dataId: model.id,
-              };
-              duplicateCheck(params)
-                .then((res) => {
-                  res.success ? resolve() : reject(res.message || '鏍¢獙澶辫触');
-                })
-                .catch((err) => {
-                  reject(err.message || '楠岃瘉澶辫触');
-                });
-            });
-          },
-        },
-      ];
-    },
-  },
-  {
-    field: 'description',
-    label: '鎻忚堪',
-    component: 'Input',
-    rules: [{ min: 0, max: 126, message: '闀垮害涓嶈兘瓒呰繃 126 涓瓧绗�', trigger: 'blur' }],
-  },
-];
-
-// 鍩烘湰淇℃伅form
-export function useBaseInfoForm(treeData: Ref<any[]>) {
-  const descItems: DescItem[] = [
-    {
-      field: 'departName',
-      label: '鏈烘瀯鍚嶇О',
-    },
-    {
-      field: 'parentId',
-      label: '涓婄骇閮ㄩ棬',
-      render(val) {
-        if (val) {
-          let data = findTree(treeData.value, (item) => item.key == val);
-          return data?.title ?? val;
-        }
-        return val;
-      },
-    },
-    {
-      field: 'orgCode',
-      label: '鏈烘瀯缂栫爜',
-    },
-    {
-      field: 'orgCategory',
-      label: '鏈烘瀯绫诲瀷',
-      render(val) {
-        if (val === '1') {
-          return '鍏徃';
-        } else if (val === '2') {
-          return '閮ㄩ棬';
-        } else if (val === '3') {
-          return '宀椾綅';
-        }
-        return val;
-      },
-    },
-    {
-      field: 'departOrder',
-      label: '鎺掑簭',
-    },
-
-    {
-      field: 'mobile',
-      label: '鎵嬫満鍙�',
-    },
-    {
-      field: 'address',
-      label: '鍦板潃',
-    },
-    {
-      field: 'memo',
-      label: '澶囨敞',
-    },
-  ];
-
-  return { descItems };
-}
diff --git a/src/views/system/departUser/index.less b/src/views/system/departUser/index.less
deleted file mode 100644
index df2d981..0000000
--- a/src/views/system/departUser/index.less
+++ /dev/null
@@ -1,48 +0,0 @@
-@prefix-cls: ~'@{namespace}-depart-user';
-
-.@{prefix-cls} {
-  &--tree-search {
-    width: 100%;
-    margin: 10px 0 20px;
-  }
-
-  &--base-info-form {
-    @media (min-width: 576px) {
-      .no-border {
-        border: 0;
-        box-shadow: none;
-      }
-
-      .ant-select.ant-select-disabled {
-        .ant-select-selector {
-          border: 0;
-          color: black;
-          background-color: transparent;
-        }
-
-        .ant-select-selector,
-        .ant-select-selection-item {
-          cursor: text !important;
-          user-select: initial !important;
-        }
-
-        .ant-select-selection-search,
-        .ant-select-arrow {
-          display: none;
-        }
-      }
-    }
-  }
-}
-
-// 澶滈棿妯″紡鏍峰紡鍏煎
-[data-theme='dark'] .@{prefix-cls} {
-  &--base-info-form {
-    .ant-select.ant-select-disabled {
-      .ant-select-selector {
-        color: #c9d1d9;
-        background-color: transparent;
-      }
-    }
-  }
-}
diff --git a/src/views/system/departUser/index.vue b/src/views/system/departUser/index.vue
deleted file mode 100644
index 8e053f3..0000000
--- a/src/views/system/departUser/index.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-<template>
-  <a-row :class="['p-4', `${prefixCls}--box`]" :gutter="10">
-    <a-col :xl="6" :lg="8" :md="10" :sm="24" style="flex: 1">
-      <a-card :bordered="false" style="height: 100%">
-        <DepartTree @select="onTreeSelect" />
-      </a-card>
-    </a-col>
-    <a-col :xl="18" :lg="16" :md="14" :sm="24" style="flex: 1">
-      <a-card :bordered="false" style="height: 100%">
-        <a-tabs defaultActiveKey="user-info">
-          <a-tab-pane tab="鍩烘湰淇℃伅" key="base-info" forceRender>
-            <DepartBaseInfoTab :data="departData" />
-          </a-tab-pane>
-          <a-tab-pane tab="鐢ㄦ埛淇℃伅" key="user-info">
-            <DepartUserInfoTab :data="departData" />
-          </a-tab-pane>
-          <a-tab-pane tab="閮ㄩ棬瑙掕壊" key="role-info">
-            <DepartRoleInfoTab :data="departData" />
-          </a-tab-pane>
-        </a-tabs>
-      </a-card>
-    </a-col>
-  </a-row>
-</template>
-
-<script lang="ts" setup name="system-depart-user">
-  import { provide, ref } from 'vue';
-  import { useDesign } from '/@/hooks/web/useDesign';
-
-  import DepartTree from './components/DepartTree.vue';
-  import DepartBaseInfoTab from './components/DepartBaseInfoTab.vue';
-  import DepartUserInfoTab from './components/DepartUserInfoTab.vue';
-  import DepartRoleInfoTab from './components/DepartRoleInfoTab.vue';
-
-  const { prefixCls } = useDesign('depart-user');
-  provide('prefixCls', prefixCls);
-
-  // 褰撳墠閫変腑鐨勯儴闂ㄤ俊鎭�
-  let departData = ref({});
-
-  // 宸︿晶鏍戦�夋嫨鍚庤Е鍙�
-  function onTreeSelect(data) {
-    departData.value = data;
-  }
-</script>
-
-<style lang="less">
-  @import './index.less';
-</style>
diff --git a/src/views/system/dict/components/DictItemList.vue b/src/views/system/dict/components/DictItemList.vue
deleted file mode 100644
index 8bca0c9..0000000
--- a/src/views/system/dict/components/DictItemList.vue
+++ /dev/null
@@ -1,132 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" title="瀛楀吀鍒楄〃" width="800px">
-    <BasicTable @register="registerTable" :rowClassName="getRowClassName">
-      <template #tableTitle>
-        <a-button type="primary" @click="handleCreate"> 鏂板</a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-  </BasicDrawer>
-  <DictItemModal @register="registerModal" @success="reload" :dictId="dictId" />
-</template>
-<script lang="ts" setup>
-  import { ref, unref } from 'vue';
-  import { BasicDrawer, useDrawerInner } from '/src/components/Drawer';
-  import { BasicTable, useTable, TableAction } from '/src/components/Table';
-  import { useModal } from '/src/components/Modal';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import DictItemModal from './DictItemModal.vue';
-  import { dictItemColumns, dictItemSearchFormSchema } from '../dict.data';
-  import { itemList, deleteItem } from '../dict.api';
-  import { ColEx } from '/@/components/Form/src/types';
-
-  const { prefixCls } = useDesign('row-invalid');
-  const dictId = ref('');
-  //瀛楀吀閰嶇疆model
-  const [registerModal, { openModal }] = useModal();
-  const [registerDrawer] = useDrawerInner(async (data) => {
-    dictId.value = data.id;
-    setProps({ searchInfo: { dictId: unref(dictId) } });
-    reload();
-  });
-  // 鑷�傚簲鍒楅厤缃�
-  const adaptiveColProps: Partial<ColEx> = {
-    xs: 24, // <576px
-    sm: 24, // 鈮�576px
-    md: 24, // 鈮�768px
-    lg: 12, // 鈮�992px
-    xl: 12, // 鈮�1200px
-    xxl: 8, // 鈮�1600px
-  };
-  const [registerTable, { reload, setProps }] = useTable({
-    api: itemList,
-    columns: dictItemColumns,
-    formConfig: {
-      baseColProps: adaptiveColProps,
-      labelAlign: 'right',
-      labelCol: {
-        offset: 1,
-        xs: 24,
-        sm: 24,
-        md: 24,
-        lg: 9,
-        xl: 7,
-        xxl: 4,
-      },
-      wrapperCol: {},
-      schemas: dictItemSearchFormSchema,
-      autoSubmitOnEnter: true,
-    },
-    striped: true,
-    useSearchForm: true,
-    bordered: true,
-    showIndexColumn: false,
-    canResize: false,
-    immediate: false,
-    actionColumn: {
-      width: 100,
-      title: '鎿嶄綔',
-      dataIndex: 'action',
-      slots: { customRender: 'action' },
-      fixed: undefined,
-    },
-  });
-
-  /**
-   * 鏂板
-   */
-  function handleCreate() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫
-   */
-  function handleEdit(record) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎
-   */
-  async function handleDelete(record) {
-    await deleteItem({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-  function getRowClassName(record) {
-    return record.status == 0 ? prefixCls : '';
-  }
-</script>
-<style scoped lang="less">
-  @prefix-cls: ~'@{namespace}-row-invalid';
-
-  :deep(.@{prefix-cls}) {
-    background: #f4f4f4;
-    color: #bababa;
-  }
-</style>
diff --git a/src/views/system/dict/components/DictItemModal.vue b/src/views/system/dict/components/DictItemModal.vue
deleted file mode 100644
index 1fea1c8..0000000
--- a/src/views/system/dict/components/DictItemModal.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" width="800px">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { defineProps, ref, computed, unref, reactive } from 'vue';
-  import { BasicModal, useModalInner } from '/src/components/Modal';
-  import { BasicForm, useForm } from '/src/components/Form';
-  import { itemFormSchema } from '../dict.data';
-  import { saveOrUpdateDictItem } from '../dict.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const props = defineProps({ dictId: String });
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    schemas: itemFormSchema,
-    showActionButtonGroup: false,
-    mergeDynamicData: props,
-    labelCol: {
-      xs: { span: 24 },
-      sm: { span: 4 },
-    },
-    wrapperCol: {
-      xs: { span: 24 },
-      sm: { span: 18 },
-    },
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-
-  //璁剧疆鏍囬
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      values.dictId = props.dictId;
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateDictItem(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/dict/components/DictModal.vue b/src/views/system/dict/components/DictModal.vue
deleted file mode 100644
index 812a788..0000000
--- a/src/views/system/dict/components/DictModal.vue
+++ /dev/null
@@ -1,52 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" width="500px" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/src/components/Modal';
-  import { BasicForm, useForm } from '/src/components/Form';
-  import { formSchema } from '../dict.data';
-  import { saveOrUpdateDict } from '../dict.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-  const rowId = ref('');
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false, minHeight: 80 });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      rowId.value = data.record.id;
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-  //璁剧疆鏍囬
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板瀛楀吀' : '缂栬緫瀛楀吀'));
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      let values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateDict(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success', { isUpdate: unref(isUpdate), values: { ...values, id: rowId.value } });
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/dict/components/DictRecycleBinModal.vue b/src/views/system/dict/components/DictRecycleBinModal.vue
deleted file mode 100644
index c7e7cf5..0000000
--- a/src/views/system/dict/components/DictRecycleBinModal.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="瀛楀吀鍥炴敹绔�" :showOkBtn="false" width="1000px" destroyOnClose>
-    <BasicTable @register="registerTable">
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, toRaw } from 'vue';
-  import { BasicModal, useModalInner } from '/src/components/Modal';
-  import { BasicTable, useTable, TableAction } from '/src/components/Table';
-  import { recycleBincolumns } from '../dict.data';
-  import { getRecycleBinList, putRecycleBin, deleteRecycleBin } from '../dict.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const checkedKeys = ref<Array<string | number>>([]);
-  const [registerModal, { setModalProps, closeModal }] = useModalInner();
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload }] = useTable({
-    api: getRecycleBinList,
-    columns: recycleBincolumns,
-    striped: true,
-    useSearchForm: false,
-    showTableSetting: false,
-    clickToRowSelect: false,
-    bordered: true,
-    showIndexColumn: false,
-    pagination: false,
-    tableSetting: { fullScreen: true },
-    canResize: false,
-    actionColumn: {
-      width: 100,
-      title: '鎿嶄綔',
-      dataIndex: 'action',
-      slots: { customRender: 'action' },
-      fixed: undefined,
-    },
-  });
-
-  /**
-   * 杩樺師浜嬩欢
-   */
-  async function handleRevert(record) {
-    await putRecycleBin(record.id, reload);
-    emit('success');
-  }
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteRecycleBin(record.id, reload);
-  }
-  /**
-   * 鎵归噺杩樺師浜嬩欢
-   */
-  function batchHandleRevert() {
-    handleRevert({ id: toRaw(checkedKeys.value).join(',') });
-  }
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  function batchHandleDelete() {
-    handleDelete({ id: toRaw(checkedKeys.value).join(',') });
-  }
-  //鑾峰彇鎿嶄綔鏍忎簨浠�
-  function getTableAction(record) {
-    return [
-      {
-        label: '鍙栧洖',
-        icon: 'ant-design:redo-outlined',
-        popConfirm: {
-          title: '鏄惁纭鍙栧洖',
-          confirm: handleRevert.bind(null, record),
-        },
-      },
-      {
-        label: '褰诲簳鍒犻櫎',
-        icon: 'ant-design:scissor-outlined',
-        color: 'error',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/dict/dict.api.ts b/src/views/system/dict/dict.api.ts
deleted file mode 100644
index 1a839ac..0000000
--- a/src/views/system/dict/dict.api.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-enum Api {
-  list = '/sys/dict/list',
-  save = '/sys/dict/add',
-  edit = '/sys/dict/edit',
-  duplicateCheck = '/sys/duplicate/check',
-  deleteDict = '/sys/dict/delete',
-  deleteBatch = '/sys/dict/deleteBatch',
-  importExcel = '/sys/dict/importExcel',
-  exportXls = '/sys/dict/exportXls',
-  recycleBinList = '/sys/dict/deleteList',
-  putRecycleBin = '/sys/dict/back',
-  deleteRecycleBin = '/sys/dict/deletePhysic',
-  itemList = '/sys/dictItem/list',
-  deleteItem = '/sys/dictItem/delete',
-  itemSave = '/sys/dictItem/add',
-  itemEdit = '/sys/dictItem/edit',
-  dictItemCheck = '/sys/dictItem/dictItemCheck',
-  refreshCache = '/sys/dict/refleshCache',
-  queryAllDictItems = '/sys/dict/queryAllDictItems',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- * @param params
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 瀛楀吀鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-/**
- * 鍒犻櫎瀛楀吀
- */
-export const deleteDict = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteDict, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鎵归噺鍒犻櫎瀛楀吀
- * @param params
- */
-export const batchDeleteDict = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂板瓧鍏�
- * @param params
- */
-export const saveOrUpdateDict = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-/**
- * 鍞竴鏍¢獙
- * @param params
- */
-export const duplicateCheck = (params) => defHttp.get({ url: Api.duplicateCheck, params }, { isTransformResponse: false });
-/**
- * 瀛楀吀鍥炴敹绔欏垪琛�
- * @param params
- */
-export const getRecycleBinList = (params) => defHttp.get({ url: Api.recycleBinList, params });
-/**
- * 鍥炴敹绔欒繕鍘�
- * @param params
- */
-export const putRecycleBin = (id, handleSuccess) => {
-  return defHttp.put({ url: Api.putRecycleBin + `/${id}` }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鍥炴敹绔欏垹闄�
- * @param params
- */
-export const deleteRecycleBin = (id, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteRecycleBin + `/${id}` }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 瀛楀吀閰嶇疆鍒楄〃
- * @param params
- */
-export const itemList = (params) => defHttp.get({ url: Api.itemList, params });
-/**
- * 瀛楀吀閰嶇疆鍒犻櫎
- * @param params
- */
-export const deleteItem = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteItem, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂板瓧鍏搁厤缃�
- * @param params
- */
-export const saveOrUpdateDictItem = (params, isUpdate) => {
-  let url = isUpdate ? Api.itemEdit : Api.itemSave;
-  return defHttp.post({ url: url, params });
-};
-/**
- * 鏍¢獙瀛楀吀鏁版嵁鍊�
- * @param params
- */
-export const dictItemCheck = (params) => defHttp.get({ url: Api.dictItemCheck, params }, { isTransformResponse: false });
-/**
- * 鍒锋柊瀛楀吀
- * @param params
- */
-export const refreshCache = () => defHttp.get({ url: Api.refreshCache }, { isTransformResponse: false });
-/**
- * 鑾峰彇鎵�鏈夊瓧鍏搁」
- * @param params
- */
-export const queryAllDictItems = () => defHttp.get({ url: Api.queryAllDictItems }, { isTransformResponse: false });
diff --git a/src/views/system/dict/dict.data.ts b/src/views/system/dict/dict.data.ts
deleted file mode 100644
index c616581..0000000
--- a/src/views/system/dict/dict.data.ts
+++ /dev/null
@@ -1,184 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-import { dictItemCheck } from './dict.api';
-import { rules } from '/@/utils/helper/validator';
-export const columns: BasicColumn[] = [
-  {
-    title: '瀛楀吀鍚嶇О',
-    dataIndex: 'dictName',
-    width: 240,
-  },
-  {
-    title: '瀛楀吀缂栫爜',
-    dataIndex: 'dictCode',
-    width: 240,
-  },
-  {
-    title: '鎻忚堪',
-    dataIndex: 'description',
-    // width: 120
-  },
-];
-
-export const recycleBincolumns: BasicColumn[] = [
-  {
-    title: '瀛楀吀鍚嶇О',
-    dataIndex: 'dictName',
-    width: 120,
-  },
-  {
-    title: '瀛楀吀缂栫爜',
-    dataIndex: 'dictCode',
-    width: 120,
-  },
-  {
-    title: '鎻忚堪',
-    dataIndex: 'description',
-    width: 120,
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    label: '瀛楀吀鍚嶇О',
-    field: 'dictName',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '瀛楀吀缂栫爜',
-    field: 'dictCode',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '瀛楀吀鍚嶇О',
-    field: 'dictName',
-    required: true,
-    component: 'Input',
-  },
-  {
-    label: '瀛楀吀缂栫爜',
-    field: 'dictCode',
-    component: 'Input',
-    dynamicDisabled: ({ values }) => {
-      return !!values.id;
-    },
-    dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_dict', 'dict_code', model, schema, true),
-  },
-  {
-    label: '鎻忚堪',
-    field: 'description',
-    component: 'Input',
-  },
-];
-
-export const dictItemColumns: BasicColumn[] = [
-  {
-    title: '鍚嶇О',
-    dataIndex: 'itemText',
-    width: 80,
-  },
-  {
-    title: '鏁版嵁鍊�',
-    dataIndex: 'itemValue',
-    width: 80,
-  },
-];
-
-export const dictItemSearchFormSchema: FormSchema[] = [
-  {
-    label: '鍚嶇О',
-    field: 'itemText',
-    component: 'Input',
-  },
-  {
-    label: '鐘舵��',
-    field: 'status',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'dict_item_status',
-      stringToNumber: true,
-    },
-  },
-];
-
-export const itemFormSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '鍚嶇О',
-    field: 'itemText',
-    required: true,
-    component: 'Input',
-  },
-  {
-    label: '鏁版嵁鍊�',
-    field: 'itemValue',
-    component: 'Input',
-    dynamicRules: ({ values, model }) => {
-      return [
-        {
-          required: true,
-          validator: (_, value) => {
-            if (!value) {
-              return Promise.reject('璇疯緭鍏ユ暟鎹��');
-            }
-            if (new RegExp("[`~!@#$^&*()=|{}'<>銆娿��/?锛侊骏锛堬級鈥斻�愩�戔�橈紱锛氣�濃�溿�傦紝銆侊紵]").test(value)) {
-              return Promise.reject('鏁版嵁鍊间笉鑳藉寘鍚壒娈婂瓧绗︼紒');
-            }
-            return new Promise<void>((resolve, reject) => {
-              let params = {
-                dictId: values.dictId,
-                id: model.id,
-                itemValue: value,
-              };
-              dictItemCheck(params)
-                .then((res) => {
-                  res.success ? resolve() : reject(res.message || '鏍¢獙澶辫触');
-                })
-                .catch((err) => {
-                  reject(err.message || '楠岃瘉澶辫触');
-                });
-            });
-          },
-        },
-      ];
-    },
-  },
-  {
-    label: '鎻忚堪',
-    field: 'description',
-    component: 'Input',
-  },
-  {
-    field: 'sortOrder',
-    label: '鎺掑簭',
-    component: 'InputNumber',
-    defaultValue: 1,
-  },
-  {
-    field: 'status',
-    label: '鏄惁鍚敤',
-    defaultValue: 1,
-    component: 'JDictSelectTag',
-    componentProps: {
-      type: 'radioButton',
-      dictCode: 'dict_item_status',
-      stringToNumber: true,
-    },
-  },
-];
diff --git a/src/views/system/dict/index.vue b/src/views/system/dict/index.vue
deleted file mode 100644
index bd932d1..0000000
--- a/src/views/system/dict/index.vue
+++ /dev/null
@@ -1,187 +0,0 @@
-<template>
-  <!--寮曠敤琛ㄦ牸-->
-  <BasicTable @register="registerTable" :rowSelection="rowSelection">
-    <!--鎻掓Ы:table鏍囬-->
-    <template #tableTitle>
-      <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 鏂板</a-button>
-      <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-      <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-      <a-button type="primary" @click="handlerRefreshCache" preIcon="ant-design:sync-outlined"> 鍒锋柊缂撳瓨</a-button>
-      <a-button type="primary" @click="openRecycleModal(true)" preIcon="ant-design:hdd-outlined"> 鍥炴敹绔�</a-button>
-
-      <a-dropdown v-if="selectedRowKeys.length > 0">
-        <template #overlay>
-          <a-menu>
-            <a-menu-item key="1" @click="batchHandleDelete">
-              <Icon icon="ant-design:delete-outlined"></Icon>
-              鍒犻櫎
-            </a-menu-item>
-          </a-menu>
-        </template>
-        <a-button
-          >鎵归噺鎿嶄綔
-          <Icon icon="ant-design:down-outlined"></Icon>
-        </a-button>
-      </a-dropdown>
-    </template>
-    <!--鎿嶄綔鏍�-->
-    <template #action="{ record }">
-      <TableAction :actions="getTableAction(record)" />
-    </template>
-  </BasicTable>
-  <!--瀛楀吀寮圭獥-->
-  <DictModal @register="registerModal" @success="handleSuccess" />
-  <!--瀛楀吀閰嶇疆鎶藉眽-->
-  <DictItemList @register="registerDrawer" />
-  <!--鍥炴敹绔欏脊绐�-->
-  <DictRecycleBinModal @register="registerModal1" @success="reload" />
-</template>
-
-<script lang="ts" name="system-dict" setup>
-  //ts璇硶
-  import { ref, computed, unref } from 'vue';
-  import { BasicTable, TableAction } from '/src/components/Table';
-  import { useDrawer } from '/src/components/Drawer';
-  import { useModal } from '/src/components/Modal';
-  import DictItemList from './components/DictItemList.vue';
-  import DictModal from './components/DictModal.vue';
-  import DictRecycleBinModal from './components/DictRecycleBinModal.vue';
-  import { useMessage } from '/src/hooks/web/useMessage';
-  import { removeAuthCache, setAuthCache } from '/src/utils/auth';
-  import { columns, searchFormSchema } from './dict.data';
-  import { list, deleteDict, batchDeleteDict, getExportUrl, getImportUrl, refreshCache, queryAllDictItems } from './dict.api';
-  import { DB_DICT_DATA_KEY } from '/src/enums/cacheEnum';
-
-  const { createMessage } = useMessage();
-  //瀛楀吀model
-  const [registerModal, { openModal }] = useModal();
-  //瀛楀吀閰嶇疆drawer
-  const [registerDrawer, { openDrawer }] = useDrawer();
-  import { useListPage } from '/@/hooks/system/useListPage';
-
-  //鍥炴敹绔檓odel
-  const [registerModal1, { openModal: openRecycleModal }] = useModal();
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-    designScope: 'dict-template',
-    tableProps: {
-      title: '鏁版嵁瀛楀吀',
-      api: list,
-      columns: columns,
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-      actionColumn: {
-        width: 240,
-      },
-    },
-    //update-begin---author:wangshuai ---date:20220616  for锛歔issues/I5AMDD]瀵煎叆/瀵煎嚭鍔熻兘锛屾搷浣滃悗鎻愮ず娌℃湁浼犻�� export.url/import.url 鍙傛暟------------
-    exportConfig: {
-      name: '鏁版嵁瀛楀吀鍒楄〃',
-      url: getExportUrl,
-    },
-    importConfig: {
-      url: getImportUrl,
-    },
-    //update-end---author:wangshuai ---date:20220616  for锛歔issues/I5AMDD]瀵煎叆/瀵煎嚭鍔熻兘锛屾搷浣滃悗鎻愮ず娌℃湁浼犻�� export.url/import.url 鍙傛暟--------------
-  });
-
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload, updateTableDataRecord }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleCreate() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  async function handleEdit(record: Recordable) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-  /**
-   * 璇︽儏
-   */
-  async function handleDetail(record) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteDict({ id: record.id }, reload);
-  }
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeleteDict({ ids: selectedRowKeys.value }, reload);
-  }
-  /**
-   * 鎴愬姛鍥炶皟
-   */
-  function handleSuccess({ isUpdate, values }) {
-    if (isUpdate) {
-      updateTableDataRecord(values.id, values);
-    } else {
-      reload();
-    }
-  }
-  /**
-   * 鍒锋柊缂撳瓨
-   */
-  async function handlerRefreshCache() {
-    const result = await refreshCache();
-    if (result.success) {
-      const res = await queryAllDictItems();
-      removeAuthCache(DB_DICT_DATA_KEY);
-      setAuthCache(DB_DICT_DATA_KEY, res.result);
-      createMessage.success('鍒锋柊缂撳瓨瀹屾垚锛�');
-    } else {
-      createMessage.error('鍒锋柊缂撳瓨澶辫触锛�');
-    }
-  }
-  /**
-   * 瀛楀吀閰嶇疆
-   */
-  function handleItem(record) {
-    openDrawer(true, {
-      id: record.id,
-    });
-  }
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '瀛楀吀閰嶇疆',
-        onClick: handleItem.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '纭畾鍒犻櫎鍚�?',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/system/examples/demo/DemoModal.vue b/src/views/system/examples/demo/DemoModal.vue
deleted file mode 100644
index 2a2d366..0000000
--- a/src/views/system/examples/demo/DemoModal.vue
+++ /dev/null
@@ -1,69 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit" width="40%">
-    <BasicForm @register="registerForm" :disabled="isDisabled" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref, defineProps } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './demo.data';
-  import { saveOrUpdateDemo, getDemoById } from './demo.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-
-  //鑷畾涔夋帴鍙楀弬鏁�
-  const props = defineProps({
-    //鏄惁绂佺敤椤甸潰
-    isDisabled: {
-      type: Boolean,
-      default: false,
-    },
-  });
-
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    //labelWidth: 150,
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false, showOkBtn: !props.isDisabled});
-    isUpdate.value = !!data?.isUpdate;
-    if(data.createBy){
-      await setFieldsValue({createBy: data.createBy})
-    }
-    if(data.createTime){
-      await setFieldsValue({createTime: data.createTime})
-    }
-    if (unref(isUpdate)) {
-      //鑾峰彇璇︽儏
-      data.record = await getDemoById({ id: data.record.id });
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-  //璁剧疆鏍囬
-  const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit(v) {
-    try {
-      let values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateDemo(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success', values);
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/examples/demo/demo.api.ts b/src/views/system/examples/demo/demo.api.ts
deleted file mode 100644
index 1cde92b..0000000
--- a/src/views/system/examples/demo/demo.api.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/test/jeecgDemo/list',
-  save = '/test/jeecgDemo/add',
-  edit = '/test/jeecgDemo/edit',
-  get = '/test/jeecgDemo/queryById',
-  delete = '/test/jeecgDemo/delete',
-  deleteBatch = '/test/jeecgDemo/deleteBatch',
-  exportXls = '/test/jeecgDemo/exportXls',
-  importExcel = '/test/jeecgDemo/importExcel',
-}
-/**
- * 瀵煎嚭api
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鏌ヨ绀轰緥鍒楄〃
- * @param params
- */
-export const getDemoList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
-
-/**
- * 淇濆瓨鎴栬�呮洿鏂扮ず渚�
- * @param params
- */
-export const saveOrUpdateDemo = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-
-/**
- * 鏌ヨ绀轰緥璇︽儏
- * @param params
- */
-export const getDemoById = (params) => {
-  return defHttp.get({ url: Api.get, params });
-};
-
-/**
- * 鍒犻櫎绀轰緥
- * @param params
- */
-export const deleteDemo = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.delete, data: params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 鎵归噺鍒犻櫎绀轰緥
- * @param params
- */
-export const batchDeleteDemo = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
diff --git a/src/views/system/examples/demo/demo.data.ts b/src/views/system/examples/demo/demo.data.ts
deleted file mode 100644
index 19a820d..0000000
--- a/src/views/system/examples/demo/demo.data.ts
+++ /dev/null
@@ -1,220 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-import { render } from '/@/utils/common/renderUtils';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '濮撳悕',
-    dataIndex: 'name',
-    width: 170,
-    align: 'left',
-    resizable: true,
-    sorter: {
-      multiple:1
-    }
-  },
-  {
-    title: '鍏抽敭璇�',
-    dataIndex: 'keyWord',
-    width: 130,
-    resizable: true,
-  },
-  {
-    title: '鎵撳崱鏃堕棿',
-    dataIndex: 'punchTime',
-    width: 140,
-    resizable: true,
-  },
-  {
-    title: '宸ヨ祫',
-    dataIndex: 'salaryMoney',
-    width: 140,
-    resizable: true,
-    sorter: {
-      multiple: 2
-    }
-  },
-  {
-    title: '濂栭噾',
-    dataIndex: 'bonusMoney',
-    width: 140,
-    resizable: true,
-  },
-  {
-    title: '鎬у埆',
-    dataIndex: 'sex',
-    sorter: {
-      multiple: 3
-    },
-    customRender: ({ record }) => {
-      return render.renderDict(record.sex, 'sex');
-      // let v = record.sex ? (record.sex == '1' ? '鐢�' : '濂�') : '';
-      // return h('span', v);
-    },
-    width: 120,
-    resizable: true,
-  },
-  {
-    title: '鐢熸棩',
-    dataIndex: 'birthday',
-    width: 120,
-    resizable: true,
-  },
-  {
-    title: '閭',
-    dataIndex: 'email',
-    width: 120,
-    resizable: true,
-  },
-  {
-    title: '涓汉绠�浠�',
-    dataIndex: 'content',
-    width: 120,
-    resizable: true,
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'name',
-    label: '濮撳悕',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'birthday',
-    label: '鐢熸棩',
-    component: 'RangePicker',
-    componentProps: {
-      valueType: 'Date'
-    },
-    colProps: { span: 8 },
-  },
-  {
-    field: 'age',
-    label: '骞撮緞',
-    component: 'Input',
-    slot: 'age',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'sex',
-    label: '鎬у埆',
-    colProps: { span: 8 },
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'sex',
-      placeholder: '璇烽�夋嫨鎬у埆',
-    },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'id',
-    label: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'createBy',
-    label: 'createBy',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'createTime',
-    label: 'createTime',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'name',
-    label: '鍚嶅瓧',
-    component: 'Input',
-    required: true,
-    componentProps: {
-      placeholder: '璇疯緭鍏ュ悕瀛�',
-    },
-  },
-  {
-    field: 'keyWord',
-    label: '鍏抽敭璇�',
-    component: 'Input',
-    componentProps: {
-      placeholder: '璇疯緭鍏ュ叧閿瘝',
-    },
-  },
-  {
-    field: 'punchTime',
-    label: '鎵撳崱鏃堕棿',
-    component: 'DatePicker',
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      placeholder: '璇烽�夋嫨鎵撳崱鏃堕棿',
-    },
-  },
-  {
-    field: 'salaryMoney',
-    label: '宸ヨ祫',
-    component: 'Input',
-    componentProps: {
-      placeholder: '璇疯緭鍏ュ伐璧�',
-    },
-  },
-  {
-    field: 'sex',
-    label: '鎬у埆',
-    component: 'JDictSelectTag',
-    defaultValue: '1',
-    componentProps: {
-      type: 'radio',
-      dictCode: 'sex',
-      placeholder: '璇烽�夋嫨鎬у埆',
-    },
-  },
-  {
-    field: 'age',
-    label: '骞撮緞',
-    component: 'InputNumber',
-    defaultValue: 1,
-    componentProps: {
-      placeholder: '璇疯緭鍏ュ勾榫�',
-    },
-  },
-  {
-    field: 'birthday',
-    label: '鐢熸棩',
-    component: 'DatePicker',
-    defaultValue: '',
-    componentProps: {
-      valueFormat: 'YYYY-MM-DD',
-      placeholder: '璇烽�夋嫨鐢熸棩',
-    },
-  },
-  {
-    field: 'email',
-    label: '閭',
-    component: 'Input',
-    rules: [{ required: false, type: 'email', message: '閭鏍煎紡涓嶆纭�', trigger: 'blur' }],
-    componentProps: {
-      placeholder: '璇疯緭鍏ラ偖绠�',
-    },
-  },
-  {
-    field: 'content',
-    label: '涓汉绠�浠� - To introduce myself',
-    component: 'InputTextArea',
-    labelLength: 4,
-    componentProps: {
-      placeholder: '璇疯緭鍏ヤ釜浜虹畝浠�',
-    },
-  },
-  {
-    field: 'updateCount',
-    label: '涔愯閿�',
-    show: false,
-    component: 'Input',
-  },
-];
diff --git a/src/views/system/examples/demo/index.vue b/src/views/system/examples/demo/index.vue
deleted file mode 100644
index bedc7a1..0000000
--- a/src/views/system/examples/demo/index.vue
+++ /dev/null
@@ -1,311 +0,0 @@
-<template>
-  <div>
-    <!--鑷畾涔夋煡璇㈠尯鍩�-->
-    <div class="jeecg-basic-table-form-container" @keyup.enter="searchQuery" v-if="customSearch">
-      <a-form ref="formRef" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
-        <a-row :gutter="24">
-          <a-col :lg="8">
-            <a-form-item label="鐢ㄦ埛鍚�">
-              <a-input placeholder="璇疯緭鍏ュ悕绉版ā绯婃煡璇�" v-model:value="queryParam.name"></a-input>
-            </a-form-item>
-          </a-col>
-          <a-col :lg="8">
-            <a-form-item label="骞撮緞">
-              <a-input placeholder="鏈�灏忓勾榫�" type="ge" v-model:value="queryParam.age_begin" style="width: calc(50% - 15px)"></a-input>
-              <span>~</span>
-              <a-input placeholder="鏈�澶у勾榫�" type="le" v-model:value="queryParam.age_end" style="width: calc(50% - 15px)"></a-input>
-            </a-form-item>
-          </a-col>
-          <template v-if="toggleSearchStatus">
-            <a-col :lg="8">
-              <a-form-item label="鎬у埆">
-                <JDictSelectTag v-model:value="queryParam.sex" placeholder="璇烽�夋嫨鎬у埆" dictCode="sex" />
-              </a-form-item>
-            </a-col>
-            <a-col :lg="8">
-              <a-form-item label="閫夋嫨鐢ㄦ埛">
-                <JDictSelectTag v-model:value="queryParam.id" placeholder="璇烽�夋嫨鐢ㄦ埛" dictCode="demo,name,id" />
-              </a-form-item>
-            </a-col>
-          </template>
-          <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
-            <a-col :lg="6">
-              <a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">鏌ヨ</a-button>
-              <a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">閲嶇疆</a-button>
-              <a @click="toggleSearchStatus = !toggleSearchStatus" style="margin-left: 8px">
-                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
-                <Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
-              </a>
-            </a-col>
-          </span>
-        </a-row>
-      </a-form>
-    </div>
-    <BasicTable @register="registerTable" :rowSelection="rowSelection" :class="{ 'p-4': customSearch }">
-      <template #form-age="{ model, field }">
-        <a-input placeholder="鏈�灏忓勾榫�" type="ge" v-model:value="min" style="width: calc(50% - 15px)" @change="ageChange(model, field)"></a-input>
-        <span>~</span>
-        <a-input placeholder="鏈�澶у勾榫�" type="le" v-model:value="max" style="width: calc(50% - 15px)" @change="ageChange(model, field)"></a-input>
-      </template>
-      <template #tableTitle>
-        <a-button preIcon="ant-design:plus-outlined" type="primary" @click="handleAdd">鏂板</a-button>
-        <a-upload name="file" :showUploadList="false" :customRequest="(file) => handleImportXls(file, getImportUrl, reload)">
-          <a-button preIcon="ant-design:import-outlined" type="primary">瀵煎叆</a-button>
-        </a-upload>
-        <a-button preIcon="ant-design:export-outlined" type="primary" @click="handleExportXls('鍗曡〃绀轰緥', getExportUrl,exportParams)">瀵煎嚭</a-button>
-        <a-button preIcon="ant-design:filter" type="primary" @click="">楂樼骇鏌ヨ</a-button>
-        <a-button preIcon="ant-design:plus-outlined" type="primary" @click="openTab">鎵撳紑Tab椤�</a-button>
-        <a-button preIcon="ant-design:retweet-outlined" type="primary" @click="customSearch = !customSearch">{{
-          customSearch ? '琛ㄥ崟閰嶇疆鏌ヨ' : '鑷畾涔夋煡璇�'
-        }}</a-button>
-        <a-button preIcon="ant-design:import-outlined" type="primary" @click="handleImport">寮圭獥瀵煎叆</a-button>
-
-        <super-query :config="superQueryConfig" @search="handleSuperQuery"/>
-
-        <a-dropdown v-if="checkedKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon style="fontsize: 12px" icon="ant-design:down-outlined"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getActions(record)" />
-      </template>
-    </BasicTable>
-    <DemoModal @register="registerModal" @success="reload" :isDisabled="isDisabled"/>
-    <JImportModal @register="registerModalJimport" :url="getImportUrl" online />
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref, unref, reactive, toRaw, watch,computed } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import DemoModal from './DemoModal.vue';
-  import JImportModal from '/@/components/Form/src/jeecg/components/JImportModal.vue';
-  import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useMethods } from '/@/hooks/system/useMethods';
-  import { getDemoList, deleteDemo, batchDeleteDemo, getExportUrl, getImportUrl } from './demo.api';
-  import { columns, searchFormSchema } from './demo.data';
-  import { useGo } from '/@/hooks/web/usePage';
-  import { router } from '/@/router';
-  import { filterObj } from '/@/utils/common/compUtils';
-  
-  const go = useGo();
-  const checkedKeys = ref<Array<string | number>>([]);
-  const [registerModal, { openModal }] = useModal();
-  const [registerModalJimport, { openModal: openModalJimport }] = useModal();
-  const { handleExportXls, handleImportXls } = useMethods();
-  const min = ref();
-  const max = ref();
-  const isDisabled = ref(false);
-  
-  const [registerTable, { reload, setProps }] = useTable({
-    title: '鍗曡〃绀轰緥',
-    api: getDemoList,
-    columns,
-    formConfig: {
-      //labelWidth: 120,
-      schemas: searchFormSchema,
-      fieldMapToTime: [['birthday', ['birthday_begin', 'birthday_end'], 'YYYY-MM-DD']],
-      fieldMapToNumber: [['age', ['age_begin', 'age_end']]],
-      autoAdvancedCol: 2,
-      actionColOptions: {
-        style: { textAlign: 'left' },
-      },
-    },
-    //鑷畾涔夐粯璁ゆ帓搴�
-    defSort: {
-      column: 'createTime,sex',
-      order: 'desc',
-    },
-    striped: true,
-    useSearchForm: true,
-    showTableSetting: true,
-    clickToRowSelect: false,
-    bordered: true,
-    showIndexColumn: false,
-    tableSetting: { fullScreen: true },
-    canResize: false,
-    rowKey: 'id',
-    actionColumn: {
-      width: 180,
-      title: '鎿嶄綔',
-      dataIndex: 'action',
-      slots: { customRender: 'action' },
-      fixed: undefined,
-    },
-  });
-  /**
-   * 閫夋嫨鍒楅厤缃�
-   */
-  const rowSelection = {
-    type: 'checkbox',
-    columnWidth: 40,
-    selectedRowKeys: checkedKeys,
-    onChange: onSelectChange,
-  };
-
-  function handleImport() {
-    openModalJimport(true);
-  }
-
-  const exportParams = computed(()=>{
-    let paramsForm = {};
-    if (checkedKeys.value && checkedKeys.value.length > 0) {
-      paramsForm['selections'] = checkedKeys.value.join(',');
-    }
-    return filterObj(paramsForm)
-  })
-  /**
-   * 鎿嶄綔鍒楀畾涔�
-   * @param record
-   */
-  function getActions(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '璇︽儏',
-        onClick: handleDetail.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-
-  /**
-   * 閫夋嫨浜嬩欢
-   */
-  function onSelectChange(selectedRowKeys: (string | number)[]) {
-    console.log("checkedKeys------>",checkedKeys)
-    checkedKeys.value = selectedRowKeys;
-  }
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleAdd() {
-    isDisabled.value = false;
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  function handleEdit(record) {
-    isDisabled.value = false;
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 璇︽儏椤甸潰
-   */
-  function handleDetail(record) {
-    isDisabled.value = true;
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteDemo({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeleteDemo({ ids: checkedKeys.value }, reload);
-  }
-  /**
-   * 骞撮緞淇敼浜嬩欢
-   */
-  function ageChange(model, field) {
-    model[field] = [unref(min), unref(max)];
-  }
-
-  /**
-   * 鎵撳紑tab椤甸潰
-   */
-  function openTab() {
-    go(`/comp/jeecg/basic`);
-  }
-  //-----鑷畾涔夋煡璇�----begin--------
-  const formElRef = ref();
-  const labelCol = reactive({
-    xs: { span: 24 },
-    sm: { span: 7 },
-  });
-  const wrapperCol = reactive({
-    xs: { span: 24 },
-    sm: { span: 16 },
-  });
-  const toggleSearchStatus = ref(false);
-  const customSearch = ref(false);
-  const queryParam = reactive({
-    name: '',
-    age_begin: '',
-    age_end: '',
-    sex: '',
-    id: '',
-  });
-  watch(customSearch, () => {
-    setProps({ useSearchForm: !unref(customSearch) });
-  });
-  function searchQuery() {
-    setProps({ searchInfo: toRaw(queryParam) });
-    reload();
-  }
-  function searchReset() {
-    Object.assign(queryParam, { name: '', age_begin: '', age_end: '', sex: '', id: '' });
-    reload();
-  }
-  //鑷畾涔夋煡璇�----end---------
-
-  const superQueryConfig = reactive({
-    name:{ title: "鍚嶇О", view: "text", type: "string", order: 1 },
-    sex:{ title: "鎬у埆", view: "list", type: "string", dictCode:'sex', order: 2 },
-  });
-  
-  function handleSuperQuery(params) {
-    Object.keys(params).map(k=>{
-      queryParam[k] = params[k]
-    });
-    searchQuery();
-  }
-</script>
-<style lang="less" scoped>
-  .jeecg-basic-table-form-container {
-    .table-page-search-submitButtons {
-      display: block;
-      margin-bottom: 24px;
-      white-space: nowrap;
-    }
-  }
-</style>
diff --git a/src/views/system/fillRule/FillRuleModal.vue b/src/views/system/fillRule/FillRuleModal.vue
deleted file mode 100644
index 6dec588..0000000
--- a/src/views/system/fillRule/FillRuleModal.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit" :width="800" destroyOnClose>
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './fill.rule.data';
-  import { saveFillRule, updateFillRule } from './fill.rule.api';
-
-  //璁剧疆鏍囬
-  const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-
-  // 澹版槑Emits
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate, getFieldsValue }] = useForm({
-    schemas: formSchema,
-    showActionButtonGroup: false,
-    baseColProps: { span: 12 },
-  });
-
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      let formValue = await validate();
-      setModalProps({ confirmLoading: true });
-      if (isUpdate.value) {
-        let allFieldsValue = getFieldsValue();
-        // 缂栬緫椤甸潰 濡傛灉琛ㄥ崟娌℃湁鐖剁骇涓嬫媺妗� 鍒欐彁浜ゆ椂鍊� validate鏂规硶涓嶈繑璇ュ�� 闇�瑕佹墜鍔ㄨ缃�
-        if (!formValue.parentId && allFieldsValue.parentId) {
-          formValue.parentId = allFieldsValue.parentId;
-        }
-        await updateFillRule(formValue);
-      } else {
-        await saveFillRule(formValue);
-      }
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/fillRule/fill.rule.api.ts b/src/views/system/fillRule/fill.rule.api.ts
deleted file mode 100644
index 1348a12..0000000
--- a/src/views/system/fillRule/fill.rule.api.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/sys/fillRule/list',
-  test = '/sys/fillRule/testFillRule',
-  save = '/sys/fillRule/add',
-  edit = '/sys/fillRule/edit',
-  delete = '/sys/fillRule/delete',
-  deleteBatch = '/sys/fillRule/deleteBatch',
-  exportXls = '/sys/fillRule/exportXls',
-  importExcel = '/sys/fillRule/importExcel',
-}
-
-/**
- * 瀵煎嚭鍦板潃
- */
-export const exportUrl = Api.exportXls;
-/**
- * 瀵煎叆鍦板潃
- */
-export const importUrl = Api.importExcel;
-
-/**
- * 鍒楄〃鏌ヨ
- * @param params
- */
-export const getFillRuleList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
-
-/**
- * 鍒犻櫎
- * @param params
- * @param handleSuccess
- */
-export const deleteFillRule = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.delete, data: params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDeleteFillRule = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-
-/**
- * 瑙勫垯鍔熻兘娴嬭瘯
- * @param params
- */
-export const handleTest = (params) => {
-  return defHttp.get({ url: Api.test, params }, { isTransformResponse: false });
-};
-
-/**
- * 淇濆瓨
- * @param params
- */
-export const saveFillRule = (params) => {
-  return defHttp.post({ url: Api.save, params });
-};
-
-/**
- * 鏇存柊
- * @param params
- */
-export const updateFillRule = (params) => {
-  return defHttp.put({ url: Api.edit, params });
-};
diff --git a/src/views/system/fillRule/fill.rule.data.ts b/src/views/system/fillRule/fill.rule.data.ts
deleted file mode 100644
index 05676d6..0000000
--- a/src/views/system/fillRule/fill.rule.data.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-import { duplicateCheck } from '/@/views/system/user/user.api';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '瑙勫垯鍚嶇О',
-    dataIndex: 'ruleName',
-    width: 200,
-    align: 'center',
-  },
-  {
-    title: '瑙勫垯缂栫爜',
-    dataIndex: 'ruleCode',
-    width: 200,
-    align: 'center',
-  },
-  {
-    title: '瑙勫垯瀹炵幇绫�',
-    dataIndex: 'ruleClass',
-    width: 300,
-    align: 'center',
-  },
-  {
-    title: '瑙勫垯鍙傛暟',
-    dataIndex: 'ruleParams',
-    width: 200,
-    align: 'center',
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'ruleName',
-    label: '瑙勫垯鍚嶇О',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    field: 'ruleCode',
-    label: '瑙勫垯缂栫爜',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'ruleName',
-    label: '瑙勫垯鍚嶇О',
-    component: 'Input',
-    required: true,
-    colProps: { span: 24 },
-  },
-  {
-    field: 'ruleCode',
-    label: '瑙勫垯缂栫爜',
-    component: 'Input',
-    colProps: { span: 24 },
-    dynamicDisabled: ({ values }) => {
-      return !!values.id;
-    },
-    dynamicRules: ({ model }) => {
-      return [
-        {
-          required: true,
-          validator: (_, value) => {
-            return new Promise((resolve, reject) => {
-              if (!value) {
-                return reject('璇疯緭鍏ヨ鍒欑紪鐮侊紒');
-              }
-              let params = {
-                tableName: 'sys_fill_rule',
-                fieldName: 'rule_code',
-                fieldVal: value,
-                dataId: model.id,
-              };
-              duplicateCheck(params)
-                .then((res) => {
-                  res.success ? resolve() : reject('瑙勫垯缂栫爜宸插瓨鍦�!');
-                })
-                .catch((err) => {
-                  reject(err.message || '鏍¢獙澶辫触');
-                });
-            });
-          },
-        },
-      ];
-    },
-  },
-  {
-    field: 'ruleClass',
-    label: '瑙勫垯瀹炵幇绫�',
-    component: 'Input',
-    required: true,
-    colProps: { span: 24 },
-  },
-  {
-    field: 'ruleParams',
-    label: '瑙勫垯鍙傛暟',
-    colProps: { span: 24 },
-    component: 'JAddInput',
-    componentProps: {
-      min: 0,
-    },
-  },
-];
diff --git a/src/views/system/fillRule/index.vue b/src/views/system/fillRule/index.vue
deleted file mode 100644
index 93d5e1c..0000000
--- a/src/views/system/fillRule/index.vue
+++ /dev/null
@@ -1,146 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-button preIcon="ant-design:plus-outlined" type="primary" @click="handleAdd">鏂板</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                <span>鍒犻櫎</span>
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button>
-            <span>鎵归噺鎿嶄綔</span>
-            <Icon icon="mdi:chevron-down"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-    </BasicTable>
-    <FillRuleModal @register="registerModal" @success="reload" />
-  </div>
-</template>
-
-<script name="system-fillrule" lang="ts" setup>
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { getFillRuleList, exportUrl, importUrl, deleteFillRule, batchDeleteFillRule, handleTest } from '/@/views/system/fillRule/fill.rule.api';
-  import { columns, searchFormSchema } from '/@/views/system/fillRule/fill.rule.data';
-  import { useModal } from '/@/components/Modal';
-  import { ActionItem } from '/@/components/Table';
-  const [registerModal, { openModal }] = useModal();
-  import FillRuleModal from '/@/views/system/fillRule/FillRuleModal.vue';
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext, createMessage, createSuccessModal, onExportXls, onImportXls } = useListPage({
-    designScope: 'fill-rule',
-    tableProps: {
-      title: '濉�艰鍒欑鐞嗛〉闈�',
-      api: getFillRuleList,
-      columns: columns,
-      showIndexColumn: true,
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-    },
-    exportConfig: {
-      url: exportUrl,
-      name: '濉�艰鍒欏垪琛�',
-    },
-    importConfig: {
-      url: importUrl,
-      success: () => reload(),
-    },
-  });
-  // 娉ㄥ唽 ListTable
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleAdd() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  function handleEdit(record) {
-    console.log('record....', record);
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    console.log(12345, record);
-    await deleteFillRule({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeleteFillRule({ ids: selectedRowKeys.value }, () => {
-      selectedRowKeys.value = [];
-      reload();
-    });
-  }
-
-  /**
-   * 鍔熻兘娴嬭瘯
-   */
-  function testRule(record) {
-    let params = { ruleCode: record.ruleCode };
-    handleTest(params).then((res) => {
-      if (res.success) {
-        createSuccessModal({
-          title: '濉�艰鍒欏姛鑳芥祴璇�',
-          content: '鐢熸垚缁撴灉锛�' + res.result,
-        });
-      } else {
-        createMessage.warn(res.message);
-      }
-    });
-  }
-
-  /**
-   * 缂栬緫
-   */
-  function getTableAction(record): ActionItem[] {
-    return [{ label: '缂栬緫', onClick: handleEdit.bind(null, record) }];
-  }
-
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record): ActionItem[] {
-    return [
-      { label: '鍔熻兘娴嬭瘯', onClick: testRule.bind(null, record) },
-      {
-        label: '鍒犻櫎',
-        color: 'error',
-        popConfirm: {
-          title: '纭瑕佸垹闄ゅ悧锛�',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/loginmini/MiniCodelogin.vue b/src/views/system/loginmini/MiniCodelogin.vue
deleted file mode 100644
index 1ee5aa4..0000000
--- a/src/views/system/loginmini/MiniCodelogin.vue
+++ /dev/null
@@ -1,165 +0,0 @@
-<template>
-  <div class="aui-content">
-    <div class="aui-container">
-      <div class="aui-form">
-        <div class="aui-image">
-          <div class="aui-image-text">
-            <img :src="adTextImg" alt="" />
-          </div>
-        </div>
-        <div class="aui-formBox aui-formEwm">
-          <div class="aui-formWell">
-            <form>
-              <div class="aui-flex aui-form-nav investment_title" style="padding-bottom: 19px">
-                <div class="aui-flex-box activeNav">{{t('sys.login.qrSignInFormTitle')}}</div>
-              </div>
-              <div class="aui-form-box">
-                <div class="aui-account" style="padding: 30px 0">
-                  <div class="aui-ewm">
-                    <QrCode :value="qrCodeUrl" class="enter-x flex justify-center xl:justify-start" :width="280" />
-                  </div>
-                </div>
-              </div>
-              <div class="aui-formButton">
-                <a class="aui-linek-code aui-link-register" @click="goBackHandleClick">{{t('sys.login.backSignIn')}}</a>
-              </div>
-            </form>
-          </div>
-          <div class="aui-flex aui-third-text">
-            <div class="aui-flex-box aui-third-border">
-              <span>{{ t('sys.login.otherSignIn') }}</span>
-            </div>
-          </div>
-          <div class="aui-flex" :class="`${prefixCls}-sign-in-way`">
-            <div class="aui-flex-box">
-              <div class="aui-third-login">
-                <a href="" title="github" @click="onThirdLogin('github')"><GithubFilled /></a>
-              </div>
-            </div>
-            <div class="aui-flex-box">
-              <div class="aui-third-login">
-                <a href="" title="浼佷笟寰俊" @click="onThirdLogin('wechat_enterprise')"><icon-font class="item-icon" type="icon-qiyeweixin3" /></a>
-              </div>
-            </div>
-            <div class="aui-flex-box">
-              <div class="aui-third-login">
-                <a href="" title="閽夐拤" @click="onThirdLogin('dingtalk')"><DingtalkCircleFilled /></a>
-              </div>
-            </div>
-            <div class="aui-flex-box">
-              <div class="aui-third-login">
-                <a href="" title="寰俊" @click="onThirdLogin('wechat_open')"><WechatFilled /></a>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-  <!-- 绗笁鏂圭櫥褰曠浉鍏冲脊妗� -->
-  <ThirdModal ref="thirdModalRef"></ThirdModal>
-</template>
-
-<script lang="ts" setup name="mini-code-login">
-  import { ref, onUnmounted } from 'vue';
-  import { getLoginQrcode, getQrcodeToken } from '/@/api/sys/user';
-  import { useUserStore } from '/@/store/modules/user';
-  import { QrCode } from '/@/components/Qrcode/index';
-  import ThirdModal from '/@/views/sys/login/ThirdModal.vue';
-  import logoImg from '/@/assets/loginmini/icon/lanpu_logo.png';
-  import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useDesign } from "/@/hooks/web/useDesign";
-  import { GithubFilled, WechatFilled, DingtalkCircleFilled, createFromIconfontCN } from '@ant-design/icons-vue';
-
-  const IconFont = createFromIconfontCN({
-    scriptUrl: '//at.alicdn.com/t/font_2316098_umqusozousr.js',
-  });
-  const { prefixCls } = useDesign('minilogin');
-  const { t } = useI18n();
-  const qrCodeUrl = ref<string>('');
-  let timer: IntervalHandle;
-  const state = ref('0');
-  const thirdModalRef = ref();
-  const userStore = useUserStore();
-  const emit = defineEmits(['go-back', 'success', 'register']);
-
-  //鍔犺浇浜岀淮鐮佷俊鎭�
-  function loadQrCode() {
-    state.value = '0';
-    getLoginQrcode().then((res) => {
-      qrCodeUrl.value = res.qrcodeId;
-      if (res.qrcodeId) {
-        openTimer(res.qrcodeId);
-      }
-    });
-  }
-  //鐩戞帶鎵爜鐘舵��
-  function watchQrcodeToken(qrcodeId) {
-    getQrcodeToken({ qrcodeId: qrcodeId }).then((res) => {
-      let token = res.token;
-      if (token == '-2') {
-        //浜岀淮鐮佽繃鏈熼噸鏂拌幏鍙�
-        loadQrCode();
-        clearInterval(timer);
-      }
-      //鎵爜鎴愬姛
-      if (res.success) {
-        state.value = '2';
-        clearInterval(timer);
-        setTimeout(() => {
-          userStore.qrCodeLogin(token);
-        }, 500);
-      }
-    });
-  }
-
-  /** 寮�鍚畾鏃跺櫒 */
-  function openTimer(qrcodeId) {
-    watchQrcodeToken(qrcodeId);
-    closeTimer();
-    timer = setInterval(() => {
-      watchQrcodeToken(qrcodeId);
-    }, 1500);
-  }
-
-  /** 鍏抽棴瀹氭椂鍣� */
-  function closeTimer() {
-    if (timer) clearInterval(timer);
-  }
-
-  /**
-   * 绗笁鏂圭櫥褰�
-   * @param type
-   */
-  function onThirdLogin(type) {
-    thirdModalRef.value.onThirdLogin(type);
-  }
-
-  /**
-   * 鍒濆鍖栬〃鍗�
-   */
-  function initFrom() {
-    loadQrCode();
-  }
-
-  /**
-   * 杩斿洖
-   */
-  function goBackHandleClick() {
-    emit('go-back');
-    closeTimer();
-  }
-
-  onUnmounted(() => {
-    closeTimer();
-  });
-
-  defineExpose({
-    initFrom,
-  });
-</script>
-<style lang="less" scoped>
-@import '/@/assets/loginmini/style/home.less';
-@import '/@/assets/loginmini/style/base.less';
-</style>
diff --git a/src/views/system/loginmini/MiniForgotpad.vue b/src/views/system/loginmini/MiniForgotpad.vue
deleted file mode 100644
index c19b508..0000000
--- a/src/views/system/loginmini/MiniForgotpad.vue
+++ /dev/null
@@ -1,282 +0,0 @@
-<template>
-  <div class="aui-content">
-    <div class="aui-container">
-      <div class="aui-form">
-        <div class="aui-image">
-          <div class="aui-image-text">
-            <img :src="adTextImg" alt="" />
-          </div>
-        </div>
-        <div class="aui-formBox">
-          <div class="aui-formWell">
-            <div class="aui-step-box">
-              <div class="aui-step-item" :class="activeKey === 1 ? 'activeStep' : ''">
-                <div class="aui-step-tags">
-                  <em>1</em>
-                  <p>{{t('sys.login.authentication')}}</p>
-                </div>
-              </div>
-              <div class="aui-step-item" :class="activeKey === 2 ? 'activeStep' : ''">
-                <div class="aui-step-tags">
-                  <em>2</em>
-                  <p>{{t('sys.login.resetLoginPassword')}}</p>
-                </div>
-              </div>
-              <div class="aui-step-item" :class="activeKey === 3 ? 'activeStep' : ''">
-                <div class="aui-step-tags">
-                  <em>3</em>
-                  <p>{{t('sys.login.resetSuccess')}}</p>
-                </div>
-              </div>
-            </div>
-            <div class="" style="height: 230px; position: relative">
-              <a-form ref="formRef" :model="formData" v-if="activeKey === 1">
-                <!-- 韬唤楠岃瘉 begin -->
-                <div class="aui-account aui-account-line aui-forgot">
-                  <a-form-item>
-                    <div class="aui-input-line">
-                      <a-input type="text" :placeholder="t('sys.login.mobile')" v-model:value="formData.mobile" />
-                    </div>
-                  </a-form-item>
-                  <div class="aui-input-line">
-                    <a-form-item>
-                      <a-input type="text" :placeholder="t('sys.login.smsCode')" v-model:value="formData.smscode" />
-                    </a-form-item>
-                    <div v-if="showInterval" class="aui-code-line" @click="getLoginCode">{{t('component.countdown.normalText')}}</div>
-                    <div v-else class="aui-code-line">{{t('component.countdown.sendText',[unref(timeRuning)])}}</div>
-                  </div>
-                </div>
-                <!-- 韬唤楠岃瘉 end -->
-              </a-form>
-              <a-form ref="pwdFormRef" :model="pwdFormData" v-else-if="activeKey === 2">
-                <!-- 閲嶇疆瀵嗙爜 begin -->
-                <div class="aui-account aui-account-line aui-forgot">
-                  <a-form-item>
-                    <div class="aui-input-line">
-                      <a-input type="password" :placeholder="t('sys.login.passwordPlaceholder')" v-model:value="pwdFormData.password" />
-                    </div>
-                  </a-form-item>
-                  <a-form-item>
-                    <div class="aui-input-line">
-                      <a-input type="password" :placeholder="t('sys.login.confirmPassword')" v-model:value="pwdFormData.confirmPassword" />
-                    </div>
-                  </a-form-item>
-                </div>
-                <!-- 閲嶇疆瀵嗙爜 end -->
-              </a-form>
-                <!-- 閲嶇疆鎴愬姛 begin -->
-                <div class="aui-success" v-else>
-                  <div class="aui-success-icon">
-                    <img :src="successImg"/>
-                  </div>
-                  <h3>鎭枩鎮紝閲嶇疆瀵嗙爜鎴愬姛锛�</h3>
-                </div>
-                <!-- 閲嶇疆鎴愬姛 end -->
-            </div>
-            <div class="aui-formButton" style="padding-bottom: 40px">
-              <div class="aui-flex" v-if="activeKey === 1 || activeKey === 2">
-                <a class="aui-link-login aui-flex-box" @click="nextStepClick">{{t('sys.login.nextStep')}}</a>
-              </div>
-              <div class="aui-flex" v-else>
-                <a class="aui-linek-code aui-flex-box" @click="toLogin">{{t('sys.login.goToLogin')}}</a>
-              </div>
-              <div class="aui-flex">
-                <a class="aui-linek-code aui-flex-box" @click="goBack"> {{ t('sys.login.backSignIn') }}</a>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-<script lang="ts" name="mini-forgotpad" setup>
-  import { reactive, ref, toRaw, unref } from 'vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { SmsEnum, useFormRules, useFormValid, useLoginState } from '/@/views/sys/login/useLogin';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { getCaptcha, passwordChange, phoneVerify } from '/@/api/sys/user';
-  import logoImg from '/@/assets/loginmini/icon/lanpu_logo.png'
-  import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png'
-  import successImg from '/@/assets/loginmini/icon/icon-success.png'
-
-  //涓嬩竴姝ユ帶鍒�
-  const activeKey = ref<number>(1);
-  const { t } = useI18n();
-  const { handleBackLogin } = useLoginState();
-  const { notification, createMessage, createErrorModal } = useMessage();
-  //鏄惁鏄剧ず鑾峰彇楠岃瘉鐮�
-  const showInterval = ref<boolean>(true);
-  //60s
-  const timeRuning = ref<number>(60);
-  //瀹氭椂鍣�
-  const timer = ref<any>(null);
-  const formRef = ref();
-  const pwdFormRef = ref();
-  //璐﹀彿鏁版嵁
-  const accountInfo = reactive<any>({});
-  //鎵嬫満鍙疯〃鍗�
-  const formData = reactive({
-    mobile: '',
-    smscode: '',
-  });
-  //瀵嗙爜琛ㄥ崟
-  const pwdFormData = reactive<any>({
-    password: '',
-    confirmPassword: '',
-  });
-  const emit = defineEmits(['go-back', 'success', 'register']);
-
-  /**
-   * 涓嬩竴姝�
-   */
-  async function handleNext() {
-    if (!formData.mobile) {
-      createMessage.warn(t('sys.login.mobilePlaceholder'));
-      return;
-    }
-    if (!formData.smscode) {
-      createMessage.warn(t('sys.login.smsPlaceholder'));
-      return;
-    }
-    const resultInfo = await phoneVerify(
-      toRaw({
-        phone: formData.mobile,
-        smscode: formData.smscode,
-      })
-    );
-    if (resultInfo.success) {
-      Object.assign(accountInfo, {
-        username: resultInfo.result.username,
-        phone: formData.mobile,
-        smscode: formData.smscode,
-      });
-      activeKey.value = 2;
-      setTimeout(()=>{
-        pwdFormRef.value.resetFields();
-      },300)
-    } else {
-      notification.error({
-        message: '閿欒鎻愮ず',
-        description: resultInfo.message || t('sys.api.networkExceptionMsg'),
-        duration: 3,
-      });
-    }
-  }
-
-  /**
-   * 瀹屾垚淇敼瀵嗙爜
-   */
-  async function finishedPwd() {
-    if (!pwdFormData.password) {
-      createMessage.warn(t('sys.login.passwordPlaceholder'));
-      return;
-    }
-    if (!pwdFormData.confirmPassword) {
-      createMessage.warn(t('sys.login.confirmPassword'));
-      return;
-    }
-    if (pwdFormData.password !== pwdFormData.confirmPassword) {
-      createMessage.warn(t('sys.login.diffPwd'));
-      return;
-    }
-    const resultInfo = await passwordChange(
-      toRaw({
-        username: accountInfo.username,
-        password: pwdFormData.password,
-        smscode: accountInfo.smscode,
-        phone: accountInfo.phone,
-      })
-    );
-    if (resultInfo.success) {
-      accountInfo.password = pwdFormData.password;
-      //淇敼瀵嗙爜
-      activeKey.value = 3;
-    } else {
-      //閿欒鎻愮ず
-      createErrorModal({
-        title: t('sys.api.errorTip'),
-        content: resultInfo.message || t('sys.api.networkExceptionMsg'),
-      });
-    }
-  }
-  /**
-   * 涓嬩竴姝�
-   */
-  function nextStepClick() {
-    if (unref(activeKey) == 1) {
-      handleNext();
-    } else if (unref(activeKey) == 2) {
-      finishedPwd();
-    }
-  }
-
-  /**
-   * 鍘荤櫥褰�
-   */
-  function toLogin() {
-    emit('success', { username: accountInfo.username, password: accountInfo.password });
-    initForm();
-  }
-
-  /**
-   * 杩斿洖
-   */
-  function goBack() {
-    emit('go-back');
-    initForm();
-  }
-
-  /**
-   * 鑾峰彇鎵嬫満楠岃瘉鐮�
-   */
-  async function getLoginCode() {
-    if (!formData.mobile) {
-      createMessage.warn(t('sys.login.mobilePlaceholder'));
-      return;
-    }
-    const result = await getCaptcha({ mobile: formData.mobile, smsmode: SmsEnum.FORGET_PASSWORD });
-    if (result) {
-      const TIME_COUNT = 60;
-      if (!unref(timer)) {
-        timeRuning.value = TIME_COUNT;
-        showInterval.value = false;
-        timer.value = setInterval(() => {
-          if (unref(timeRuning) > 0 && unref(timeRuning) <= TIME_COUNT) {
-            timeRuning.value = timeRuning.value - 1;
-          } else {
-            showInterval.value = true;
-            clearInterval(unref(timer));
-            timer.value = null;
-          }
-        }, 1000);
-      }
-    }
-  }
-
-  /**
-   * 鍒濆鍖栬〃鍗�
-   */
-  function initForm() {
-    activeKey.value = 1;
-    Object.assign(formData, { phone: '', smscode: '' });
-    Object.assign(pwdFormData, { password: '', confirmPassword: '' });
-    Object.assign(accountInfo, {});
-    if(unref(timer)){
-      clearInterval(unref(timer));
-      timer.value = null;
-      showInterval.value = true;
-    }
-    setTimeout(()=>{
-      formRef.value.resetFields();
-    },300)
-  }
-
-  defineExpose({
-    initForm,
-  });
-</script>
-<style lang="less" scoped>
-@import '/@/assets/loginmini/style/home.less';
-@import '/@/assets/loginmini/style/base.less';
-</style>
diff --git a/src/views/system/loginmini/MiniLogin.vue b/src/views/system/loginmini/MiniLogin.vue
deleted file mode 100644
index 5d8bd7e..0000000
--- a/src/views/system/loginmini/MiniLogin.vue
+++ /dev/null
@@ -1,563 +0,0 @@
-<template>
-	<div :class="prefixCls" class="login-background-img">
-		<AppLocalePicker class="absolute top-4 right-4 enter-x xl:text-gray-600" :showText="false" />
-		<AppDarkModeToggle class="absolute top-3 right-7 enter-x" />
-		<div class="aui-logo" v-if="!getIsMobile">
-			<div>
-				<h3>
-					<img :src="logoImg" alt="jeecg" />
-				</h3>
-			</div>
-		</div>
-		<div v-else class="aui-phone-logo">
-			<img :src="logoImg" alt="jeecg" />
-		</div>
-		<div v-show="type === 'login'">
-			<div class="aui-content">
-				<div class="aui-container">
-					<div class="aui-form">
-						<div class="aui-image">
-							<div>Lanpu</div>
-							<div>鏅鸿兘涓嵂骞茬嚗鏈烘暟瀛楀寲杞﹂棿</div>
-							<!--              <div class="aui-image-text">-->
-							<!--                <img :src="adTextImg" />-->
-							<!--              </div>-->
-						</div>
-						<div class="aui-formBox">
-							<div class="aui-formWell">
-								<div class="aui-flex aui-form-nav investment_title">
-									<div class="aui-flex-box" :class="activeIndex === 'accountLogin' ? 'activeNav on' : ''" @click="loginClick('accountLogin')"
-										>{{ t('sys.login.signInFormTitle') }}
-									</div>
-									<div class="aui-flex-box" :class="activeIndex === 'phoneLogin' ? 'activeNav on' : ''" @click="loginClick('phoneLogin')"
-										>{{ t('sys.login.mobileSignInFormTitle') }}
-									</div>
-								</div>
-								<div class="aui-form-box" style="height: 180px">
-									<a-form ref="loginRef" :model="formData" v-if="activeIndex === 'accountLogin'" @keyup.enter.native="loginHandleClick">
-										<div class="aui-account">
-											<div class="aui-inputClear">
-												<i class="icon icon-code"></i>
-												<a-form-item>
-													<a-input class="fix-auto-fill" :placeholder="t('sys.login.userName')" v-model:value="formData.username" />
-												</a-form-item>
-											</div>
-											<div class="aui-inputClear">
-												<i class="icon icon-password"></i>
-												<a-form-item>
-													<a-input class="fix-auto-fill" type="password" :placeholder="t('sys.login.password')" v-model:value="formData.password" />
-												</a-form-item>
-											</div>
-											<!-- <div class="aui-inputClear">
-												<i class="icon icon-code"></i>
-												<a-form-item>
-													<a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.inputCode')" v-model:value="formData.inputCode" />
-												</a-form-item>
-												<div class="aui-code">
-													<img v-if="randCodeData.requestCodeSuccess" :src="randCodeData.randCodeImage" @click="handleChangeCheckCode" />
-													<img v-else style="margin-top: 2px; max-width: initial" :src="codeImg" @click="handleChangeCheckCode" />
-												</div>
-											</div> -->
-											<div class="aui-flex">
-												<div class="aui-flex-box">
-													<div class="aui-choice">
-														<a-input class="fix-auto-fill" type="checkbox" v-model:value="rememberMe" />
-														<span style="margin-left: 5px">{{ t('sys.login.rememberMe') }}</span>
-													</div>
-												</div>
-												<div class="aui-forget">
-													<a @click="forgetHandelClick"> {{ t('sys.login.forgetPassword') }}</a>
-												</div>
-											</div>
-										</div>
-									</a-form>
-									<a-form v-else ref="phoneFormRef" :model="phoneFormData" @keyup.enter.native="loginHandleClick">
-										<div class="aui-account phone">
-											<div class="aui-inputClear phoneClear">
-												<a-input class="fix-auto-fill" :placeholder="t('sys.login.mobile')" v-model:value="phoneFormData.mobile" />
-											</div>
-											<div class="aui-inputClear">
-												<a-input class="fix-auto-fill" :maxlength="6" :placeholder="t('sys.login.smsCode')" v-model:value="phoneFormData.smscode" />
-												<div v-if="showInterval" class="aui-code" @click="getLoginCode">
-													<a>{{ t('component.countdown.normalText') }}</a>
-												</div>
-												<div v-else class="aui-code">
-													<span class="aui-get-code code-shape">{{ t('component.countdown.sendText', [unref(timeRuning)]) }}</span>
-												</div>
-											</div>
-										</div>
-									</a-form>
-								</div>
-								<div class="aui-formButton">
-									<div class="aui-flex">
-										<a-button :loading="loginLoading" class="aui-link-login aui-flex-box" type="primary" @click="loginHandleClick">
-											{{ t('sys.login.loginButton') }}</a-button
-										>
-									</div>
-									<div class="aui-flex">
-										<a class="aui-linek-code aui-flex-box" @click="codeHandleClick">{{ t('sys.login.qrSignInFormTitle') }}</a>
-									</div>
-									<div class="aui-flex">
-										<a class="aui-linek-code aui-flex-box" @click="registerHandleClick">{{ t('sys.login.registerButton') }}</a>
-									</div>
-								</div>
-							</div>
-							<a-form @keyup.enter.native="loginHandleClick">
-								<div class="aui-flex aui-third-text">
-									<div class="aui-flex-box aui-third-border">
-										<span>{{ t('sys.login.otherSignIn') }}</span>
-									</div>
-								</div>
-								<div class="aui-flex" :class="`${prefixCls}-sign-in-way`">
-									<div class="aui-flex-box">
-										<div class="aui-third-login">
-											<a title="github" @click="onThirdLogin('github')"><GithubFilled /></a>
-										</div>
-									</div>
-									<div class="aui-flex-box">
-										<div class="aui-third-login">
-											<a title="浼佷笟寰俊" @click="onThirdLogin('wechat_enterprise')"><icon-font class="item-icon" type="icon-qiyeweixin3" /></a>
-										</div>
-									</div>
-									<div class="aui-flex-box">
-										<div class="aui-third-login">
-											<a title="閽夐拤" @click="onThirdLogin('dingtalk')"><DingtalkCircleFilled /></a>
-										</div>
-									</div>
-									<div class="aui-flex-box">
-										<div class="aui-third-login">
-											<a title="寰俊" @click="onThirdLogin('wechat_open')"><WechatFilled /></a>
-										</div>
-									</div>
-								</div>
-							</a-form>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-		<div v-show="type === 'forgot'" :class="`${prefixCls}-form`">
-			<MiniForgotpad ref="forgotRef" @go-back="goBack" @success="handleSuccess" />
-		</div>
-		<div v-show="type === 'register'" :class="`${prefixCls}-form`">
-			<MiniRegister ref="registerRef" @go-back="goBack" @success="handleSuccess" />
-		</div>
-		<div v-show="type === 'codeLogin'" :class="`${prefixCls}-form`">
-			<MiniCodelogin ref="codeRef" @go-back="goBack" @success="handleSuccess" />
-		</div>
-		<!-- 绗笁鏂圭櫥褰曠浉鍏冲脊妗� -->
-		<ThirdModal ref="thirdModalRef" />
-	</div>
-</template>
-<script lang="ts" setup name="login-mini">
-	import { getCaptcha, getCodeInfo } from '/@/api/sys/user'
-	import { computed, onMounted, reactive, ref, toRaw, unref } from 'vue'
-	import codeImg from '/@/assets/images/checkcode.png'
-	import { Rule } from '/@/components/Form'
-	import { useUserStore } from '/@/store/modules/user'
-	import { useMessage } from '/@/hooks/web/useMessage'
-	import { useI18n } from '/@/hooks/web/useI18n'
-	import { SmsEnum } from '/@/views/sys/login/useLogin'
-	import ThirdModal from '/@/views/sys/login/ThirdModal.vue'
-	import MiniForgotpad from './MiniForgotpad.vue'
-	import MiniRegister from './MiniRegister.vue'
-	import MiniCodelogin from './MiniCodelogin.vue'
-	import logoImg from '/@/assets/loginmini/icon/lanpu_logo.png'
-	import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png'
-	import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application'
-	import { useLocaleStore } from '/@/store/modules/locale'
-	import { useDesign } from '/@/hooks/web/useDesign'
-	import { useAppInject } from '/@/hooks/web/useAppInject'
-	import { GithubFilled, WechatFilled, DingtalkCircleFilled, createFromIconfontCN } from '@ant-design/icons-vue'
-
-	const IconFont = createFromIconfontCN({
-		scriptUrl: '//at.alicdn.com/t/font_2316098_umqusozousr.js',
-	})
-	const { prefixCls } = useDesign('mini-login')
-	const { notification, createMessage } = useMessage()
-	const userStore = useUserStore()
-	const { t } = useI18n()
-	const localeStore = useLocaleStore()
-	const showLocale = localeStore.getShowPicker
-	const randCodeData = reactive<any>({
-		randCodeImage: '',
-		requestCodeSuccess: false,
-		checkKey: null,
-	})
-	const rememberMe = ref<string>('0')
-	//鎵嬫満鍙风櫥褰曡繕鏄处鍙风櫥褰�
-	const activeIndex = ref<string>('accountLogin')
-	const type = ref<string>('login')
-	//璐﹀彿鐧诲綍琛ㄥ崟瀛楁
-	const formData = reactive<any>({
-		inputCode: '',
-		username: '',
-		password: '',
-	})
-	//鎵嬫満鐧诲綍琛ㄥ崟瀛楁
-	const phoneFormData = reactive<any>({
-		mobile: '',
-		smscode: '',
-	})
-	const loginRef = ref()
-	//绗笁鏂圭櫥褰曞脊绐�
-	const thirdModalRef = ref()
-	//鎵爜鐧诲綍
-	const codeRef = ref()
-	//鏄惁鏄剧ず鑾峰彇楠岃瘉鐮�
-	const showInterval = ref<boolean>(true)
-	//60s
-	const timeRuning = ref<number>(60)
-	//瀹氭椂鍣�
-	const timer = ref<any>(null)
-	//蹇樿瀵嗙爜
-	const forgotRef = ref()
-	//娉ㄥ唽
-	const registerRef = ref()
-	const loginLoading = ref<boolean>(false)
-	const { getIsMobile } = useAppInject()
-
-	defineProps({
-		sessionTimeout: {
-			type: Boolean,
-		},
-	})
-
-	/**
-	 * 鑾峰彇楠岃瘉鐮�
-	 */
-	// function handleChangeCheckCode() {
-	// 	formData.inputCode = ''
-
-	// 	randCodeData.checkKey = 1629428467008
-	// 	getCodeInfo(randCodeData.checkKey).then((res) => {
-	// 		randCodeData.randCodeImage = res
-	// 		randCodeData.requestCodeSuccess = true
-	// 	})
-	// }
-
-	/**
-	 * 鍒囨崲鐧诲綍鏂瑰紡
-	 */
-	function loginClick(type) {
-		activeIndex.value = type
-	}
-
-	/**
-	 * 璐﹀彿鎴栬�呮墜鏈虹櫥褰�
-	 */
-	async function loginHandleClick() {
-		if (unref(activeIndex) === 'accountLogin') {
-			accountLogin()
-		} else {
-			//鎵嬫満鍙风櫥褰�
-			phoneLogin()
-		}
-	}
-
-	async function accountLogin() {
-		if (!formData.username) {
-			createMessage.warn(t('sys.login.accountPlaceholder'))
-			return
-		}
-		if (!formData.password) {
-			createMessage.warn(t('sys.login.passwordPlaceholder'))
-			return
-		}
-		try {
-			loginLoading.value = true
-			const { userInfo } = await userStore.login(
-				toRaw({
-					password: formData.password,
-					username: formData.username,
-					captcha: formData.inputCode,
-					checkKey: randCodeData.checkKey,
-					mode: 'none', //涓嶈榛樿鐨勯敊璇彁绀�
-				})
-			)
-			if (userInfo) {
-				notification.success({
-					message: t('sys.login.loginSuccessTitle'),
-					description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.realname}`,
-					duration: 3,
-				})
-			}
-		} catch (error) {
-			notification.error({
-				message: t('sys.api.errorTip'),
-				description: error.message || t('sys.login.networkExceptionMsg'),
-				duration: 3,
-			})
-			// handleChangeCheckCode()
-		} finally {
-			loginLoading.value = false
-		}
-	}
-
-	/**
-	 * 鎵嬫満鍙风櫥褰�
-	 */
-	async function phoneLogin() {
-		if (!phoneFormData.mobile) {
-			createMessage.warn(t('sys.login.mobilePlaceholder'))
-			return
-		}
-		if (!phoneFormData.smscode) {
-			createMessage.warn(t('sys.login.smsPlaceholder'))
-			return
-		}
-		try {
-			loginLoading.value = true
-			const { userInfo }: any = await userStore.phoneLogin({
-				mobile: phoneFormData.mobile,
-				captcha: phoneFormData.smscode,
-				mode: 'none', //涓嶈榛樿鐨勯敊璇彁绀�
-			})
-			if (userInfo) {
-				notification.success({
-					message: t('sys.login.loginSuccessTitle'),
-					description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.realname}`,
-					duration: 3,
-				})
-			}
-		} catch (error) {
-			notification.error({
-				message: t('sys.api.errorTip'),
-				description: error.message || t('sys.login.networkExceptionMsg'),
-				duration: 3,
-			})
-		} finally {
-			loginLoading.value = false
-		}
-	}
-
-	/**
-	 * 鑾峰彇鎵嬫満楠岃瘉鐮�
-	 */
-	async function getLoginCode() {
-		if (!phoneFormData.mobile) {
-			createMessage.warn(t('sys.login.mobilePlaceholder'))
-			return
-		}
-		const result = await getCaptcha({ mobile: phoneFormData.mobile, smsmode: SmsEnum.FORGET_PASSWORD })
-		if (result) {
-			const TIME_COUNT = 60
-			if (!unref(timer)) {
-				timeRuning.value = TIME_COUNT
-				showInterval.value = false
-				timer.value = setInterval(() => {
-					if (unref(timeRuning) > 0 && unref(timeRuning) <= TIME_COUNT) {
-						timeRuning.value = timeRuning.value - 1
-					} else {
-						showInterval.value = true
-						clearInterval(unref(timer))
-						timer.value = null
-					}
-				}, 1000)
-			}
-		}
-	}
-
-	/**
-	 * 绗笁鏂圭櫥褰�
-	 * @param type
-	 */
-	function onThirdLogin(type) {
-		thirdModalRef.value.onThirdLogin(type)
-	}
-
-	/**
-	 * 蹇樿瀵嗙爜
-	 */
-	function forgetHandelClick() {
-		type.value = 'forgot'
-		setTimeout(() => {
-			forgotRef.value.initForm()
-		}, 300)
-	}
-
-	/**
-	 * 杩斿洖鐧诲綍椤甸潰
-	 */
-	function goBack() {
-		activeIndex.value = 'accountLogin'
-		type.value = 'login'
-	}
-
-	/**
-	 * 蹇樿瀵嗙爜/娉ㄥ唽璐﹀彿鍥炶皟浜嬩欢
-	 * @param value
-	 */
-	function handleSuccess(value) {
-		Object.assign(formData, value)
-		Object.assign(phoneFormData, { mobile: '', smscode: '' })
-		type.value = 'login'
-		activeIndex.value = 'accountLogin'
-		// handleChangeCheckCode()
-	}
-
-	/**
-	 * 娉ㄥ唽
-	 */
-	function registerHandleClick() {
-		type.value = 'register'
-		setTimeout(() => {
-			registerRef.value.initForm()
-		}, 300)
-	}
-
-	/**
-	 * 娉ㄥ唽
-	 */
-	function codeHandleClick() {
-		type.value = 'codeLogin'
-		setTimeout(() => {
-			codeRef.value.initFrom()
-		}, 300)
-	}
-
-	onMounted(() => {
-		//鍔犺浇楠岃瘉鐮�
-		// handleChangeCheckCode()
-	})
-</script>
-
-<style lang="less" scoped>
-	@import '/@/assets/loginmini/style/home.less';
-	@import '/@/assets/loginmini/style/base.less';
-
-	:deep(.ant-input:focus) {
-		box-shadow: none;
-	}
-	.aui-get-code {
-		float: right;
-		position: relative;
-		z-index: 3;
-		background: #ffffff;
-		color: #1573e9;
-		border-radius: 100px;
-		padding: 5px 16px;
-		margin: 7px;
-		border: 1px solid #1573e9;
-		top: 12px;
-	}
-
-	.aui-get-code:hover {
-		color: #1573e9;
-	}
-
-	.code-shape {
-		border-color: #dadada !important;
-		color: #aaa !important;
-	}
-
-	:deep(.jeecg-dark-switch) {
-		position: absolute;
-		margin-right: 10px;
-	}
-	.aui-link-login {
-		height: 42px;
-		padding: 10px 15px;
-		font-size: 14px;
-		border-radius: 8px;
-		margin-top: 15px;
-		margin-bottom: 8px;
-	}
-	.aui-phone-logo {
-		position: absolute;
-		margin-left: 10px;
-		width: 60px;
-		top: 2px;
-		z-index: 4;
-	}
-	.top-3 {
-		top: 0.45rem;
-	}
-</style>
-
-<style lang="less">
-	@prefix-cls: ~'@{namespace}-mini-login';
-	@dark-bg: #293146;
-
-	html[data-theme='dark'] {
-		.@{prefix-cls} {
-			background-color: @dark-bg !important;
-			background-image: none;
-
-			&::before {
-				background-image: url(/@/assets/svg/login-bg-dark.svg);
-			}
-			.aui-inputClear {
-				background-color: #232a3b !important;
-			}
-			.ant-input,
-			.ant-input-password {
-				background-color: #232a3b !important;
-			}
-
-			.ant-btn:not(.ant-btn-link):not(.ant-btn-primary) {
-				border: 1px solid #4a5569 !important;
-			}
-
-			&-form {
-				background: @dark-bg !important;
-			}
-
-			.app-iconify {
-				color: #fff !important;
-			}
-			.aui-inputClear input,
-			.aui-input-line input,
-			.aui-choice {
-				color: #c9d1d9 !important;
-			}
-
-			.aui-formBox {
-				background-color: @dark-bg !important;
-			}
-			.aui-third-text span {
-				background-color: @dark-bg !important;
-			}
-			.aui-form-nav .aui-flex-box {
-				color: #c9d1d9 !important;
-			}
-
-			.aui-formButton .aui-linek-code {
-				background: @dark-bg !important;
-				color: white !important;
-			}
-			.aui-code-line {
-				border-left: none !important;
-			}
-			.ant-checkbox-inner,
-			.aui-success h3 {
-				border-color: #c9d1d9;
-			}
-		}
-
-		input.fix-auto-fill,
-		.fix-auto-fill input {
-			-webkit-text-fill-color: #c9d1d9 !important;
-			box-shadow: inherit !important;
-		}
-
-		&-sign-in-way {
-			.anticon {
-				font-size: 22px !important;
-				color: #888 !important;
-				cursor: pointer !important;
-
-				&:hover {
-					color: @primary-color !important;
-				}
-			}
-		}
-		.ant-divider-inner-text {
-			font-size: 12px !important;
-			color: @text-color-secondary !important;
-		}
-		.aui-third-login a {
-			background: transparent;
-		}
-	}
-</style>
diff --git a/src/views/system/loginmini/MiniRegister.vue b/src/views/system/loginmini/MiniRegister.vue
deleted file mode 100644
index 617b765..0000000
--- a/src/views/system/loginmini/MiniRegister.vue
+++ /dev/null
@@ -1,266 +0,0 @@
-<template>
-  <div class="aui-content">
-    <div class="aui-container">
-      <div class="aui-form">
-        <div class="aui-image">
-          <div class="aui-image-text">
-            <img :src="jeecgAdTextImg" alt="" />
-          </div>
-        </div>
-        <div class="aui-formBox">
-          <div class="aui-formWell">
-            <a-form ref="formRef" :model="formData">
-              <div class="aui-flex aui-form-nav aui-clear-left" style="padding-bottom: 21px">
-                <div class="aui-flex-box activeNav on">{{t('sys.login.signUpFormTitle')}}</div>
-              </div>
-              <div class="aui-form-box">
-                <div class="aui-account aui-account-line">
-                  <a-form-item>
-                    <div class="aui-input-line">
-                      <Icon class="aui-icon" icon="ant-design:user-outlined"/>
-                      <a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.userName')" v-model:value="formData.username" />
-                    </div>
-                  </a-form-item>
-                  <a-form-item>
-                    <div class="aui-input-line">
-                      <Icon class="aui-icon" icon="ant-design:mobile-outlined"/>
-                      <a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.mobile')" v-model:value="formData.mobile" />
-                    </div>
-                  </a-form-item>
-                  <a-form-item>
-                    <div class="aui-input-line">
-                      <Icon class="aui-icon" icon="ant-design:mail-outlined"/>
-                      <a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.smsCode')" v-model:value="formData.smscode" />
-                      <div v-if="showInterval" class="aui-code-line" @click="getLoginCode">{{t('component.countdown.normalText')}}</div>
-                      <div v-else class="aui-code-line">{{t('component.countdown.sendText',[unref(timeRuning)])}}</div>
-                    </div>
-                  </a-form-item>
-                  <a-form-item>
-                    <div class="aui-input-line">
-                      <Icon class="aui-icon" icon="ant-design:lock-outlined"/>
-                      <a-input class="fix-auto-fill" :type="pwdIndex==='close'?'password':'text'" :placeholder="t('sys.login.password')" v-model:value="formData.password" />
-                      <div class="aui-eye">
-                        <img :src="eyeKImg" alt="寮�鍚�" v-if="pwdIndex==='open'"  @click="pwdClick('close')" />
-                        <img :src="eyeGImg" alt="鍏抽棴"  v-else-if="pwdIndex==='close'"  @click="pwdClick('open')" />
-                      </div>
-                    </div>
-                  </a-form-item>
-                  <a-form-item>
-                    <div class="aui-input-line">
-                      <Icon class="aui-icon" icon="ant-design:lock-outlined"/>
-                      <a-input class="fix-auto-fill" :type="confirmPwdIndex==='close'?'password':'text'" :placeholder="t('sys.login.confirmPassword')" v-model:value="formData.confirmPassword" />
-                      <div class="aui-eye">
-                        <img :src="eyeKImg" alt="寮�鍚�" v-if="confirmPwdIndex==='open'" @click="confirmPwdClick('close')" />
-                        <img :src="eyeGImg" alt="鍏抽棴" v-else-if="confirmPwdIndex==='close'" @click="confirmPwdClick('open')" />
-                      </div>
-                    </div>
-                  </a-form-item>
-                  <a-form-item name="policy">
-                    <div class="aui-flex">
-                      <div class="aui-flex-box">
-                        <div class="aui-choice">
-                          <a-checkbox  v-model:checked="formData.policy" />
-                          <span style="color: #1b90ff;margin-left: 4px">{{ t('sys.login.policy') }}</span>
-                        </div>
-                      </div>
-                    </div>
-                  </a-form-item>
-                </div>
-              </div>
-              <div class="aui-formButton">
-                <div class="aui-flex">
-                  <a class="aui-link-login aui-flex-box" @click="registerHandleClick"> {{ t('sys.login.registerButton') }}</a>
-                </div>
-                <div class="aui-flex">
-                  <a class="aui-linek-code aui-flex-box" @click="goBackHandleClick">{{ t('sys.login.backSignIn') }}</a>
-                </div>
-              </div>
-            </a-form>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script lang="ts" setup name="mini-register">
-  import { ref, reactive, unref, toRaw } from 'vue';
-  import { getCaptcha, register } from '/@/api/sys/user';
-  import { SmsEnum } from '/@/views/sys/login/useLogin';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import logoImg from '/@/assets/loginmini/icon/lanpu_logo.png';
-  import jeecgAdTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
-  import eyeKImg from '/@/assets/loginmini/icon/icon-eye-k.png';
-  import eyeGImg from '/@/assets/loginmini/icon/icon-eye-g.png';
-  import { useI18n } from "/@/hooks/web/useI18n";
-
-  const { t } = useI18n();
-  const { notification, createErrorModal, createMessage } = useMessage();
-  const emit = defineEmits(['go-back', 'success', 'register']);
-  const formRef = ref();
-  const formData = reactive<any>({
-    username: '',
-    mobile: '',
-    smscode: '',
-    password: '',
-    confirmPassword: '',
-    policy: false,
-  });
-  //鏄惁鏄剧ず鑾峰彇楠岃瘉鐮�
-  const showInterval = ref<boolean>(true);
-  //60s
-  const timeRuning = ref<number>(60);
-  //瀹氭椂鍣�
-  const timer = ref<any>(null);
-  //瀵嗙爜鐪肩潧鎵撳紑鍏抽棴
-  const pwdIndex = ref<string>('close');
-  //纭瀵嗙爜鐪肩潧鎵撳紑鍏抽棴
-  const confirmPwdIndex = ref<string>('close');
-
-  /**
-   * 杩斿洖
-   */
-  function goBackHandleClick() {
-    emit('go-back');
-    initForm();
-  }
-
-  /**
-   * 鑾峰彇鎵嬫満楠岃瘉鐮�
-   */
-  async function getLoginCode() {
-    if (!formData.mobile) {
-      createMessage.warn(t('sys.login.mobilePlaceholder'));
-      return;
-    }
-    const result = await getCaptcha({ mobile: formData.mobile, smsmode: SmsEnum.REGISTER });
-    if (result) {
-      const TIME_COUNT = 60;
-      if (!unref(timer)) {
-        timeRuning.value = TIME_COUNT;
-        showInterval.value = false;
-        timer.value = setInterval(() => {
-          if (unref(timeRuning) > 0 && unref(timeRuning) <= TIME_COUNT) {
-            timeRuning.value = timeRuning.value - 1;
-          } else {
-            showInterval.value = true;
-            clearInterval(unref(timer));
-            timer.value = null;
-          }
-        }, 1000);
-      }
-    }
-  }
-
-  function registerHandleClick() {
-    if (!formData.username) {
-      createMessage.warn(t('sys.login.accountPlaceholder'));
-      return;
-    }
-    if (!formData.mobile) {
-      createMessage.warn(t('sys.login.mobilePlaceholder'));
-      return;
-    }
-    if (!formData.smscode) {
-      createMessage.warn(t('sys.login.smsPlaceholder'));
-      return;
-    }
-    if (!formData.password) {
-      createMessage.warn(t('sys.login.passwordPlaceholder'));
-      return;
-    }
-    if (!formData.confirmPassword) {
-      createMessage.warn(t('sys.login.confirmPassword'));
-      return;
-    }
-    if (formData.password !== formData.confirmPassword) {
-      createMessage.warn(t('sys.login.diffPwd'));
-      return;
-    }
-    if(!formData.policy){
-      createMessage.warn(t('sys.login.policyPlaceholder'));
-      return;
-    }
-    registerAccount();
-  }
-
-  /**
-   * 娉ㄥ唽璐﹀彿
-   */
-  async function registerAccount() {
-    try {
-      const resultInfo = await register(
-        toRaw({
-          username: formData.username,
-          password: formData.password,
-          phone: formData.mobile,
-          smscode: formData.smscode,
-        })
-      );
-      if (resultInfo && resultInfo.data.success) {
-        notification.success({
-          description: resultInfo.data.message || t('sys.api.registerMsg'),
-          duration: 3,
-        });
-        emit('success', { username: formData.username, password: formData.password });
-        initForm();
-      } else {
-        notification.warning({
-          message: t('sys.api.errorTip'),
-          description: resultInfo.data.message || t('sys.api.networkExceptionMsg'),
-          duration: 3,
-        });
-      }
-    } catch (error) {
-      notification.error({
-        message: t('sys.api.errorTip'),
-        description: error.message || t('sys.api.networkExceptionMsg'),
-        duration: 3,
-      });
-    }
-  }
-
-  /**
-   * 鍒濆鍖栬〃鍗�
-   */
-  function initForm() {
-    Object.assign(formData,{username:'',mobile: '', smscode: '', password: '', confirmPassword: '', policy: false})
-    if(!unref(timer)){
-      showInterval.value = true;
-      clearInterval(unref(timer));
-      timer.value = null;
-    }
-    formRef.value.resetFields();
-  }
-
-  /**
-   * 瀵嗙爜鎵撳紑鎴栧叧闂�
-   * @param value
-   */
-  function pwdClick(value) {
-    pwdIndex.value = value;
-  }
-
-  /**
-   * 纭瀵嗙爜鎵撳紑鎴栧叧闂�
-   * @param value
-   */
-  function confirmPwdClick(value) {
-    confirmPwdIndex.value = value;
-  }
-
-  defineExpose({
-    initForm
-  })
-</script>
-<style lang="less" scoped>
-@import '/@/assets/loginmini/style/home.less';
-@import '/@/assets/loginmini/style/base.less';
-.aui-input-line .aui-icon{
-  position: absolute;
-  z-index: 2;
-  top: 10px;
-  left: 10px;
-  font-size: 20px !important;
-}
-</style>
diff --git a/src/views/system/loginmini/OAuth2Login.vue b/src/views/system/loginmini/OAuth2Login.vue
deleted file mode 100644
index c03501c..0000000
--- a/src/views/system/loginmini/OAuth2Login.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-<template>
-  <div> </div>
-</template>
-
-<script setup lang="ts">
-  import { ref } from 'vue';
-  import { isOAuth2AppEnv, sysOAuth2Login } from '/@/views/sys/login/useLogin';
-  import { useRouter } from 'vue-router';
-  import { PageEnum } from '/@/enums/pageEnum';
-  import { router } from '/@/router';
-  import { useUserStore } from '/@/store/modules/user';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  const isOAuth = ref<boolean>(isOAuth2AppEnv());
-  const env = ref<any>({ thirdApp: false, wxWork: false, dingtalk: false });
-  const { currentRoute } = useRouter();
-  const route = currentRoute.value;
-  if (!isOAuth2AppEnv()) {
-    router.replace({ path: PageEnum.BASE_LOGIN, query: route.query });
-  }
-
-  if (isOAuth.value) {
-    checkEnv();
-  }
-
-  /**
-   * 妫�娴嬪綋鍓嶇殑鐜
-   */
-  function checkEnv() {
-    // 鍒ゆ柇褰撴椂鏄惁鏄紒涓氬井淇$幆澧�
-    if (/wxwork/i.test(navigator.userAgent)) {
-      env.value.thirdApp = true;
-      env.value.wxWork = true;
-    }
-    // 鍒ゆ柇褰撴椂鏄惁鏄拤閽夌幆澧�
-    if (/dingtalk/i.test(navigator.userAgent)) {
-      env.value.thirdApp = true;
-      env.value.dingtalk = true;
-    }
-    doOAuth2Login();
-  }
-
-  /**
-   * 杩涜OAuth2鐧诲綍鎿嶄綔
-   */
-  function doOAuth2Login() {
-    if (env.value.thirdApp) {
-      // 鍒ゆ柇鏄惁鎼哄甫浜員oken锛屾槸灏辫鏄庣櫥褰曟垚鍔�
-      if (route.query.oauth2LoginToken) {
-        let token = route.query.oauth2LoginToken;
-        //鎵ц鐧诲綍鎿嶄綔
-        thirdLogin({ token, thirdType: route.query.thirdType });
-      } else if (env.value.wxWork) {
-        sysOAuth2Login('wechat_enterprise');
-      } else if (env.value.dingtalk) {
-        sysOAuth2Login('dingtalk');
-      }
-    }
-  }
-
-  /**
-   * 绗笁鏂圭櫥褰�
-   * @param params
-   */
-  function thirdLogin(params) {
-    const userStore = useUserStore();
-    const { notification } = useMessage();
-    const { t } = useI18n();
-    userStore.ThirdLogin(params).then((res) => {
-      if (res && res.userInfo) {
-        notification.success({
-          message: t('sys.login.loginSuccessTitle'),
-          description: `${t('sys.login.loginSuccessDesc')}: ${res.userInfo.realname}`,
-          duration: 3,
-        });
-      } else {
-        notification.error({
-          message: t('sys.login.errorTip'),
-          description: ((res.response || {}).data || {}).message || res.message || t('sys.login.networkExceptionMsg'),
-          duration: 4,
-        });
-      }
-    });
-  }
-</script>
\ No newline at end of file
diff --git a/src/views/system/menu/DataRuleList.vue b/src/views/system/menu/DataRuleList.vue
deleted file mode 100644
index 9ccc1a4..0000000
--- a/src/views/system/menu/DataRuleList.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" title="鏁版嵁鏉冮檺瑙勫垯" :width="adaptiveWidth">
-    <BasicTable @register="registerTable">
-      <template #tableTitle>
-        <a-button type="primary" @click="handleCreate"> 鏂板</a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-  </BasicDrawer>
-  <DataRuleModal @register="registerModal" @success="reload" :permissionId="permissionId" />
-</template>
-<script lang="ts" setup>
-  import { ref, unref } from 'vue';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import DataRuleModal from './DataRuleModal.vue';
-  import { dataRuleColumns, dataRuleSearchFormSchema } from './menu.data';
-  import { dataRuleList, deleteRule } from './menu.api';
-  import { ColEx } from '/@/components/Form/src/types';
-  import { useDrawerAdaptiveWidth } from '/@/hooks/jeecg/useAdaptiveWidth';
-  const permissionId = ref('');
-  const { adaptiveWidth } = useDrawerAdaptiveWidth();
-  //鏉冮檺瑙勫垯model
-  const [registerModal, { openModal }] = useModal();
-  const [registerDrawer] = useDrawerInner(async (data) => {
-    permissionId.value = data.id;
-    setProps({ searchInfo: { permissionId: unref(permissionId) } });
-    reload();
-  });
-  // 鑷�傚簲鍒楅厤缃�
-  const adaptiveColProps: Partial<ColEx> = {
-    xs: 24, // <576px
-    sm: 24, // 鈮�576px
-    md: 24, // 鈮�768px
-    lg: 12, // 鈮�992px
-    xl: 8, // 鈮�1200px
-    xxl: 8, // 鈮�1600px
-  };
-  const [registerTable, { reload, setProps }] = useTable({
-    api: dataRuleList,
-    columns: dataRuleColumns,
-    size: 'small',
-    formConfig: {
-      baseColProps: adaptiveColProps,
-      labelAlign: 'right',
-      labelCol: {
-        offset: 1,
-        xs: 24,
-        sm: 24,
-        md: 24,
-        lg: 8,
-        xl: 8,
-        xxl: 8,
-      },
-      wrapperCol: {},
-      schemas: dataRuleSearchFormSchema,
-      autoSubmitOnEnter: true,
-    },
-    striped: true,
-    useSearchForm: true,
-    bordered: true,
-    showIndexColumn: false,
-    showTableSetting: false,
-    canResize: false,
-    immediate: false,
-    actionColumn: {
-      width: 100,
-      title: '鎿嶄綔',
-      dataIndex: 'action',
-      slots: { customRender: 'action' },
-      fixed: undefined,
-    },
-  });
-
-  /**
-   * 鏂板
-   */
-  function handleCreate() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫
-   */
-  function handleEdit(record) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎
-   */
-  async function handleDelete(record) {
-    await deleteRule({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/menu/DataRuleModal.vue b/src/views/system/menu/DataRuleModal.vue
deleted file mode 100644
index 1daa5a8..0000000
--- a/src/views/system/menu/DataRuleModal.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" width="700px">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { defineProps, ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { dataRuleFormSchema } from './menu.data';
-  import { saveOrUpdateRule } from './menu.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const props = defineProps({ permissionId: String });
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    schemas: dataRuleFormSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-
-  //璁剧疆鏍囬
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板瑙勫垯' : '缂栬緫瑙勫垯'));
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      values.permissionId = props.permissionId;
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateRule(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/menu/MenuDrawer.vue b/src/views/system/menu/MenuDrawer.vue
deleted file mode 100644
index 2b067e9..0000000
--- a/src/views/system/menu/MenuDrawer.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :width="adaptiveWidth" :title="getTitle" @ok="handleSubmit">
-    <BasicForm @register="registerForm" class="menuForm" />
-  </BasicDrawer>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref, useAttrs } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema, ComponentTypes } from './menu.data';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-  import { list, saveOrUpdateMenu } from './menu.api';
-  import { useDrawerAdaptiveWidth } from '/@/hooks/jeecg/useAdaptiveWidth';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const { adaptiveWidth } = useDrawerAdaptiveWidth();
-  const attrs = useAttrs();
-  const isUpdate = ref(true);
-  const menuType = ref(0);
-  const isButton = (type) => type === 2;
-  const [registerForm, { setProps, resetFields, setFieldsValue, updateSchema, validate, clearValidate }] = useForm({
-    labelCol: {
-      md: { span: 4 },
-      sm: { span: 6 },
-    },
-    wrapperCol: {
-      md: { span: 20 },
-      sm: { span: 18 },
-    },
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-
-  const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-    await resetFields();
-    setDrawerProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    menuType.value = data?.record?.menuType;
-
-    //鑾峰彇涓嬫媺鏍戜俊鎭�
-    const treeData = await list();
-    updateSchema([
-      {
-        field: 'parentId',
-        componentProps: { treeData },
-      },
-      {
-        field: 'name',
-        label: isButton(unref(menuType)) ? '鎸夐挳/鏉冮檺' : '鑿滃崟鍚嶇О',
-      },
-      {
-        field: 'url',
-        required: !isButton(unref(menuType)),
-        componentProps: {
-          onChange: (e) => onUrlChange(e.target.value),
-        },
-      },
-    ]);
-
-    // 鏃犺鏂板杩樻槸缂栬緫锛岄兘鍙互璁剧疆琛ㄥ崟鍊�
-    if (typeof data.record === 'object') {
-      let values = { ...data.record };
-      setFieldsValue(values);
-      onUrlChange(values.url);
-    }
-    //绂佺敤琛ㄥ崟
-    setProps({ disabled: !attrs.showFooter });
-  });
-  //鑾峰彇寮圭獥鏍囬
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板鑿滃崟' : '缂栬緫鑿滃崟'));
-  //鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      // iframe鍏煎
-      if (ComponentTypes.IFrame === values.component) {
-        values.component = values.frameSrc;
-      }
-      setDrawerProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateMenu(values, unref(isUpdate));
-      closeDrawer();
-      emit('success');
-    } finally {
-      setDrawerProps({ confirmLoading: false });
-    }
-  }
-
-  /** url 鍙樺寲鏃讹紝鍔ㄦ�佽缃粍浠跺悕绉皃laceholder */
-  function onUrlChange(url) {
-    let placeholder = '';
-    let httpUrl = url;
-    if (url != null && url != '') {
-      if (url.startsWith('/')) {
-        url = url.substring(1);
-      }
-      url = url.replaceAll('/', '-');
-      // 鐗规畩鏍囪
-      url = url.replaceAll(':', '@');
-      placeholder = `${url}`;
-    } else {
-      placeholder = '璇疯緭鍏ョ粍浠跺悕绉�';
-    }
-    updateSchema([{ field: 'componentName', componentProps: { placeholder } }]);
-    //update-begin---author:wangshuai ---date:20230204  for锛歔QQYUN-4058]鑿滃崟娣诲姞鏅鸿兘鍖栧鐞�------------
-    if (httpUrl != null && httpUrl != '') {
-      if (httpUrl.startsWith('http://') || httpUrl.startsWith('https://')) {
-        setFieldsValue({ component: httpUrl });
-      }
-    }
-    //update-end---author:wangshuai ---date:20230204  for锛歔QQYUN-4058]鑿滃崟娣诲姞鏅鸿兘鍖栧鐞�------------
-  }
-</script>
diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue
deleted file mode 100644
index c83a432..0000000
--- a/src/views/system/menu/index.vue
+++ /dev/null
@@ -1,201 +0,0 @@
-<template>
-  <div class="p-4">
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #tableTitle>
-        <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 鏂板鑿滃崟</a-button>
-        <a-button type="primary" preIcon="ic:round-expand" @click="expandAll">灞曞紑鍏ㄩ儴</a-button>
-        <a-button type="primary" preIcon="ic:round-compress" @click="collapseAll">鎶樺彔鍏ㄩ儴</a-button>
-
-        <a-dropdown v-if="checkedKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined" />
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="ant-design:down-outlined" />
-          </a-button>
-        </a-dropdown>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-    </BasicTable>
-    <MenuDrawer @register="registerDrawer" @success="handleSuccess" :showFooter="showFooter" />
-    <DataRuleList @register="registerDrawer1" />
-  </div>
-</template>
-<script lang="ts" name="system-menu" setup>
-  import { nextTick, ref } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { useDrawer } from '/@/components/Drawer';
-  import MenuDrawer from './MenuDrawer.vue';
-  import DataRuleList from './DataRuleList.vue';
-  import { columns,searchFormSchema } from './menu.data';
-  import { list, deleteMenu, batchDeleteMenu } from './menu.api';
-
-  const checkedKeys = ref<Array<string | number>>([]);
-  const showFooter = ref(true);
-  const [registerDrawer, { openDrawer }] = useDrawer();
-  const [registerDrawer1, { openDrawer: openDataRule }] = useDrawer();
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext } = useListPage({
-    tableProps: {
-      title: '鑿滃崟鍒楄〃',
-      api: list,
-      columns: columns,
-      size: 'small',
-      pagination: false,
-      isTreeTable: true,
-      striped: true,
-      useSearchForm: true,
-      showTableSetting: true,
-      bordered: true,
-      showIndexColumn: false,
-      tableSetting: { fullScreen: true },
-      formConfig: {
-        schemas: searchFormSchema,
-        autoAdvancedCol: 4,
-        baseColProps: { xs: 24, sm: 12, md: 6, lg: 6, xl: 6, xxl: 6 },
-        actionColOptions: { xs: 24, sm: 12, md: 6, lg: 6, xl: 6, xxl: 6 },
-      },
-      actionColumn: {
-        width: 120,
-      },
-    },
-  });
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload, expandAll, collapseAll }] = tableContext;
-
-  /**
-   * 閫夋嫨鍒楅厤缃�
-   */
-  const rowSelection = {
-    type: 'checkbox',
-    columnWidth: 30,
-    selectedRowKeys: checkedKeys,
-    onChange: onSelectChange,
-  };
-
-  /**
-   * 閫夋嫨浜嬩欢
-   */
-  function onSelectChange(selectedRowKeys: (string | number)[]) {
-    checkedKeys.value = selectedRowKeys;
-  }
-
-  /**
-   * 鏂板
-   */
-  function handleCreate() {
-    showFooter.value = true;
-    openDrawer(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫
-   */
-  function handleEdit(record) {
-    showFooter.value = true;
-    openDrawer(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-  /**
-   * 璇︽儏
-   */
-  function handleDetail(record) {
-    showFooter.value = false;
-    openDrawer(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-  /**
-   * 娣诲姞涓嬬骇
-   */
-  function handleAddSub(record) {
-    openDrawer(true, {
-      record: { parentId: record.id, menuType: 1 },
-      isUpdate: false,
-    });
-  }
-  /**
-   * 鏁版嵁鏉冮檺寮圭獥
-   */
-  function handleDataRule(record) {
-    openDataRule(true, { id: record.id });
-  }
-
-  /**
-   * 鍒犻櫎
-   */
-  async function handleDelete(record) {
-    await deleteMenu({ id: record.id }, reload);
-  }
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeleteMenu({ ids: checkedKeys.value }, reload);
-  }
-  /**
-   * 鎴愬姛鍥炶皟
-   */
-  function handleSuccess() {
-    reload();
-  }
-
-  function onFetchSuccess() {
-    // 婕旂ず榛樿灞曞紑鎵�鏈夎〃椤�
-    nextTick(expandAll);
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-    ];
-  }
-
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record) {
-    return [
-      // {
-      //   label: '璇︽儏',
-      //   onClick: handleDetail.bind(null, record),
-      // },
-      {
-        label: '娣诲姞涓嬬骇',
-        onClick: handleAddSub.bind(null, record),
-      },
-      {
-        label: '鏁版嵁瑙勫垯',
-        onClick: handleDataRule.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        color: 'error',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/menu/menu.api.ts b/src/views/system/menu/menu.api.ts
deleted file mode 100644
index 0daec11..0000000
--- a/src/views/system/menu/menu.api.ts
+++ /dev/null
@@ -1,119 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/sys/permission/list',
-  save = '/sys/permission/add',
-  edit = '/sys/permission/edit',
-  delete = '/sys/permission/delete',
-  deleteBatch = '/sys/permission/deleteBatch',
-  ruleList = '/sys/permission/queryPermissionRule',
-  ruleSave = '/sys/permission/addPermissionRule',
-  ruleEdit = '/sys/permission/editPermissionRule',
-  ruleDelete = '/sys/permission/deletePermissionRule',
-  checkPermDuplication = '/sys/permission/checkPermDuplication',
-}
-
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) => {
-  return defHttp.get({ url: Api.list, params });
-}
-
-/**
- * 鍒犻櫎鑿滃崟
- */
-export const deleteMenu = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.delete, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鎵归噺鍒犻櫎鑿滃崟
- * @param params
- */
-export const batchDeleteMenu = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂拌彍鍗�
- * @param params
- */
-export const saveOrUpdateMenu = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-/**
- * 鑿滃崟鏁版嵁鏉冮檺鍒楄〃鎺ュ彛
- * @param params
- */
-export const dataRuleList = (params) => defHttp.get({ url: Api.ruleList, params });
-/**
- * 淇濆瓨鎴栬�呮洿鏂版暟鎹鍒�
- * @param params
- */
-export const saveOrUpdateRule = (params, isUpdate) => {
-  let url = isUpdate ? Api.ruleEdit : Api.ruleSave;
-  return defHttp.post({ url: url, params });
-};
-
-/**
- * 鍒犻櫎鏁版嵁鏉冮檺
- */
-export const deleteRule = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.ruleDelete, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鏍规嵁code鑾峰彇瀛楀吀鏁板��
- * @param params
- */
-export const ajaxGetDictItems = (params) => defHttp.get({ url: `/sys/dict/getDictItems/${params.code}` });
-
-/**
- * 鍞竴鏍¢獙
- * @param params
- */
-export const getCheckPermDuplication = (params) => defHttp.get({ url: Api.checkPermDuplication, params }, { isTransformResponse: false });
-
-/**
- * 鏍¢獙鑿滃崟鏄惁瀛樺湪
- * @param model
- * @param schema
- * @param required
- */
-export const checkPermDuplication=(model, schema, required?)=>{
-  return [
-    {
-      validator: (_, value) => {
-        if (!value && required) {
-          return Promise.reject(`璇疯緭鍏�${schema.label}`);
-        }
-        return new Promise<void>((resolve, reject) => {
-          getCheckPermDuplication({
-            id: model.id,
-            url:model.url,
-            alwaysShow:model.alwaysShow
-          }).then((res) => {
-              res.success ? resolve() : reject(res.message || '鏍¢獙澶辫触');
-          }).catch((err) => {
-              reject(err.message || '楠岃瘉澶辫触');
-          });
-        });
-      },
-    },
-  ];
-}
diff --git a/src/views/system/menu/menu.data.ts b/src/views/system/menu/menu.data.ts
deleted file mode 100644
index 88cce4b..0000000
--- a/src/views/system/menu/menu.data.ts
+++ /dev/null
@@ -1,413 +0,0 @@
-import { h } from 'vue'
-import { ajaxGetDictItems, checkPermDuplication } from './menu.api'
-import { Icon } from '/@/components/Icon'
-import { BasicColumn, FormSchema } from '/@/components/Table'
-import { render } from '/@/utils/common/renderUtils'
-
-const isDir = (type) => type === 0
-const isMenu = (type) => type === 1
-const isButton = (type) => type === 2
-
-// 瀹氫箟鍙�夋嫨鐨勭粍浠剁被鍨�
-export enum ComponentTypes {
-  Default = 'layouts/default/index',
-  IFrame = 'sys/iframe/FrameBlank',
-}
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鑿滃崟鍚嶇О',
-    dataIndex: 'name',
-    width: 200,
-    align: 'left',
-  },
-  {
-    title: '鑿滃崟绫诲瀷',
-    dataIndex: 'menuType',
-    width: 150,
-    customRender: ({ text }) => {
-      return render.renderDict(text, 'menu_type')
-    },
-  },
-  {
-    title: '鍥炬爣',
-    dataIndex: 'icon',
-    width: 50,
-    customRender: ({ record }) => {
-      return h(Icon, { icon: record.icon })
-    },
-  },
-  {
-    title: '缁勪欢',
-    dataIndex: 'component',
-    align: 'left',
-    width: 150,
-  },
-  {
-    title: '璺緞',
-    dataIndex: 'url',
-    align: 'left',
-    width: 150,
-  },
-  {
-    title: '鎺掑簭',
-    dataIndex: 'sortNo',
-    width: 50,
-  },
-]
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'name',
-    label: '鑿滃崟鍚嶇О',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-]
-
-export const formSchema: FormSchema[] = [
-  {
-    label: 'id',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'menuType',
-    label: '鑿滃崟绫诲瀷',
-    component: 'RadioButtonGroup',
-    defaultValue: 0,
-    componentProps: ({ formActionType, formModel }) => {
-      return {
-        options: [
-          { label: '涓�绾ц彍鍗�', value: 0 },
-          { label: '瀛愯彍鍗�', value: 1 },
-          { label: '鎸夐挳/鏉冮檺', value: 2 },
-        ],
-        onChange: (e) => {
-          const { updateSchema, clearValidate } = formActionType
-          const label = isButton(e) ? '鎸夐挳/鏉冮檺' : '鑿滃崟鍚嶇О'
-          //娓呴櫎鏍¢獙
-          clearValidate()
-          updateSchema([
-            {
-              field: 'name',
-              label: label,
-            },
-            {
-              field: 'url',
-              required: !isButton(e),
-            },
-          ])
-          //update-begin---author:wangshuai ---date:20220729  for锛歔VUEN-1834]鍙湁涓�绾ц彍鍗曪紝鎵嶉粯璁ゅ�硷紝瀛愯彍鍗曠殑鏃跺�欙紝娓呯┖------------
-          if (isMenu(e) && !formModel.id && formModel.component == 'layouts/RouteView') {
-            formModel.component = ''
-          }
-          //update-end---author:wangshuai ---date:20220729  for锛歔VUEN-1834]鍙湁涓�绾ц彍鍗曪紝鎵嶉粯璁ゅ�硷紝瀛愯彍鍗曠殑鏃跺�欙紝娓呯┖------------
-        },
-      }
-    },
-  },
-  {
-    field: 'name',
-    label: '鑿滃崟鍚嶇О',
-    component: 'Input',
-    required: true,
-  },
-  {
-    field: 'parentId',
-    label: '涓婄骇鑿滃崟',
-    component: 'TreeSelect',
-    required: true,
-    componentProps: {
-      replaceFields: {
-        title: 'name',
-        key: 'id',
-        value: 'id',
-      },
-      dropdownStyle: {
-        maxHeight: '50vh',
-      },
-      getPopupContainer: (node) => node.parentNode,
-    },
-    ifShow: ({ values }) => !isDir(values.menuType),
-  },
-  {
-    field: 'url',
-    label: '璁块棶璺緞',
-    component: 'Input',
-    required: true,
-    ifShow: ({ values }) => !(values.component === ComponentTypes.IFrame && values.internalOrExternal) && values.menuType !== 2,
-    //update-begin-author:zyf date:2022-11-02 for: 鑱氬悎璺敱鍏佽璺緞閲嶅
-    dynamicRules: ({ model, schema }) => {
-      return checkPermDuplication(model, schema, true)
-    },
-    //update-end-author:zyf date:2022-11-02 for: 鑱氬悎璺敱鍏佽璺緞閲嶅
-  },
-  {
-    field: 'component',
-    label: '鍓嶇缁勪欢',
-    component: 'Input',
-    componentProps: {
-      placeholder: '璇疯緭鍏ュ墠绔粍浠�',
-    },
-    defaultValue: 'layouts/RouteView',
-    required: true,
-    ifShow: ({ values }) => !isButton(values.menuType),
-  },
-  {
-    field: 'componentName',
-    label: '缁勪欢鍚嶇О',
-    component: 'Input',
-    componentProps: {
-      placeholder: '璇疯緭鍏ョ粍浠跺悕绉�',
-    },
-    helpMessage: [
-      '姝ゅ鍚嶇О搴斿拰vue缁勪欢鐨刵ame灞炴�т繚鎸佷竴鑷淬��',
-      '缁勪欢鍚嶇О涓嶈兘閲嶅锛屼富瑕佺敤浜庤矾鐢辩紦瀛樺姛鑳姐��',
-      '濡傛灉缁勪欢鍚嶇О鍜寁ue缁勪欢鐨刵ame灞炴�т笉涓�鑷达紝鍒欎細瀵艰嚧璺敱缂撳瓨澶辨晥銆�',
-      '闈炲繀濉紝鐣欑┖鍒欎細鏍规嵁璁块棶璺緞鑷姩鐢熸垚銆�',
-    ],
-    defaultValue: '',
-    ifShow: ({ values }) => !isButton(values.menuType),
-  },
-  {
-    field: 'frameSrc',
-    label: 'Iframe鍦板潃',
-    component: 'Input',
-    rules: [
-      { required: true, message: '璇疯緭鍏frame鍦板潃' },
-      { type: 'url', message: '璇疯緭鍏ユ纭殑url鍦板潃' },
-    ],
-    ifShow: ({ values }) => !isButton(values.menuType) && values.component === ComponentTypes.IFrame,
-  },
-  {
-    field: 'redirect',
-    label: '榛樿璺宠浆鍦板潃',
-    component: 'Input',
-    ifShow: ({ values }) => isDir(values.menuType),
-  },
-  {
-    field: 'perms',
-    label: '鎺堟潈鏍囪瘑',
-    component: 'Input',
-    ifShow: ({ values }) => isButton(values.menuType),
-    // dynamicRules: ({ model }) => {
-    //   return [
-    //     {
-    //       required: false,
-    //       validator: (_, value) => {
-    //         return new Promise((resolve, reject) => {
-    //           let params = {
-    //             tableName: 'sys_permission',
-    //             fieldName: 'perms',
-    //             fieldVal: value,
-    //             dataId: model.id,
-    //           };
-    //           duplicateCheck(params)
-    //             .then((res) => {
-    //               res.success ? resolve() : reject(res.message || '鏍¢獙澶辫触');
-    //             })
-    //             .catch((err) => {
-    //               reject(err.message || '鏍¢獙澶辫触');
-    //             });
-    //         });
-    //       },
-    //     },
-    //   ];
-    // },
-  },
-  {
-    field: 'permsType',
-    label: '鎺堟潈绛栫暐',
-    component: 'RadioGroup',
-    defaultValue: '1',
-    helpMessage: ['鍙/鍙闂�(鎺堟潈鍚庡彲瑙�/鍙闂�)', '鍙紪杈�(鏈巿鏉冩椂绂佺敤)'],
-    componentProps: {
-      options: [
-        { label: '鍙/鍙闂�', value: '1' },
-        { label: '鍙紪杈�', value: '2' },
-      ],
-    },
-    ifShow: ({ values }) => isButton(values.menuType),
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'RadioGroup',
-    defaultValue: '1',
-    componentProps: {
-      options: [
-        { label: '鏈夋晥', value: '1' },
-        { label: '鏃犳晥', value: '0' },
-      ],
-    },
-    ifShow: ({ values }) => isButton(values.menuType),
-  },
-  {
-    field: 'icon',
-    label: '鑿滃崟鍥炬爣',
-    component: 'IconPicker',
-    ifShow: ({ values }) => !isButton(values.menuType),
-  },
-  {
-    field: 'sortNo',
-    label: '鎺掑簭',
-    component: 'InputNumber',
-    defaultValue: 1,
-    ifShow: ({ values }) => !isButton(values.menuType),
-  },
-  {
-    field: 'route',
-    label: '鏄惁璺敱鑿滃崟',
-    component: 'Switch',
-    defaultValue: true,
-    componentProps: {
-      checkedChildren: '鏄�',
-      unCheckedChildren: '鍚�',
-    },
-    ifShow: ({ values }) => !isButton(values.menuType),
-  },
-  {
-    field: 'hidden',
-    label: '闅愯棌璺敱',
-    component: 'Switch',
-    defaultValue: 0,
-    componentProps: {
-      checkedChildren: '鏄�',
-      unCheckedChildren: '鍚�',
-    },
-    ifShow: ({ values }) => !isButton(values.menuType),
-  },
-  {
-    field: 'hideTab',
-    label: '闅愯棌Tab',
-    component: 'Switch',
-    defaultValue: 0,
-    componentProps: {
-      checkedChildren: '鏄�',
-      unCheckedChildren: '鍚�',
-    },
-    ifShow: ({ values }) => !isButton(values.menuType),
-  },
-  {
-    field: 'keepAlive',
-    label: '鏄惁缂撳瓨璺敱',
-    component: 'Switch',
-    defaultValue: false,
-    componentProps: {
-      checkedChildren: '鏄�',
-      unCheckedChildren: '鍚�',
-    },
-    ifShow: ({ values }) => !isButton(values.menuType),
-  },
-  {
-    field: 'alwaysShow',
-    label: '鑱氬悎璺敱',
-    component: 'Switch',
-    defaultValue: false,
-    componentProps: {
-      checkedChildren: '鏄�',
-      unCheckedChildren: '鍚�',
-    },
-    ifShow: ({ values }) => !isButton(values.menuType),
-  },
-  {
-    field: 'internalOrExternal',
-    label: '鎵撳紑鏂瑰紡',
-    component: 'Switch',
-    defaultValue: false,
-    componentProps: {
-      checkedChildren: '澶栭儴',
-      unCheckedChildren: '鍐呴儴',
-    },
-    ifShow: ({ values }) => !isButton(values.menuType),
-  },
-]
-
-export const dataRuleColumns: BasicColumn[] = [
-  {
-    title: '瑙勫垯鍚嶇О',
-    dataIndex: 'ruleName',
-    width: 150,
-  },
-  {
-    title: '瑙勫垯瀛楁',
-    dataIndex: 'ruleColumn',
-    width: 100,
-  },
-  {
-    title: '瑙勫垯鍊�',
-    dataIndex: 'ruleValue',
-    width: 100,
-  },
-]
-
-export const dataRuleSearchFormSchema: FormSchema[] = [
-  {
-    field: 'ruleName',
-    label: '瑙勫垯鍚嶇О',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    field: 'ruleValue',
-    label: '瑙勫垯鍊�',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-]
-
-export const dataRuleFormSchema: FormSchema[] = [
-  {
-    label: 'id',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'ruleName',
-    label: '瑙勫垯鍚嶇О',
-    component: 'Input',
-    required: true,
-  },
-  {
-    field: 'ruleColumn',
-    label: '瑙勫垯瀛楁',
-    component: 'Input',
-    ifShow: ({ values }) => {
-      return values.ruleConditions !== 'USE_SQL_RULES'
-    },
-  },
-  {
-    field: 'ruleConditions',
-    label: '鏉′欢瑙勫垯',
-    required: true,
-    component: 'ApiSelect',
-    componentProps: {
-      api: ajaxGetDictItems,
-      params: { code: 'rule_conditions' },
-      labelField: 'text',
-      valueField: 'value',
-      getPopupContainer: (node) => document.body,
-    },
-  },
-  {
-    field: 'ruleValue',
-    label: '瑙勫垯鍊�',
-    component: 'Input',
-    required: true,
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'RadioButtonGroup',
-    defaultValue: '1',
-    componentProps: {
-      options: [
-        { label: '鏃犳晥', value: '0' },
-        { label: '鏈夋晥', value: '1' },
-      ],
-    },
-  },
-]
diff --git a/src/views/system/message/components/SysMessageList.vue b/src/views/system/message/components/SysMessageList.vue
deleted file mode 100644
index 7254aab..0000000
--- a/src/views/system/message/components/SysMessageList.vue
+++ /dev/null
@@ -1,165 +0,0 @@
-<template>
-  <a-list item-layout="horizontal" :data-source="messageList">
-    <template #loadMore>
-      <div
-        v-if="messageList && messageList.length > 0 && !loadEndStatus && !loadingMoreStatus"
-        :style="{ textAlign: 'center', marginTop: '12px', height: '32px', lineHeight: '32px' }"
-      >
-        <a-button @click="onLoadMore">鍔犺浇鏇村</a-button>
-      </div>
-      <div
-        v-if="messageList && messageList.length > 0 && loadEndStatus"
-        :style="{ textAlign: 'center', marginTop: '12px', height: '32px', lineHeight: '32px' }"
-      >
-        娌℃湁鏇村浜�
-      </div>
-    </template>
-
-    <template #renderItem="{ item }">
-      <a-list-item>
-        <template #actions>
-          <a-rate :value="item.starFlag=='1'?1:0" :count="1" @click="clickStar(item)" style="cursor: pointer" disabled />
-        </template>
-
-        <a-list-item-meta :description="item.createTime">
-          <template #title>
-            <div style="position: relative">
-           <!--   <span style="display: inline-block; position: absolute; left: -16px">
-                <exclamation-outlined v-if="noRead(item)" title="鏈娑堟伅" style="color: red" />
-              </span>-->
-
-              <span>{{ getMsgCategory(item) }}</span>
-              <span v-if="item.busType == 'bpm'" class="bpm-cuiban-content" v-html="item.msgContent">
-              </span>
-              <a-tooltip v-else>
-                <template #title>
-                  <div v-html="item.msgContent"></div>
-                </template>
-                {{ item.titile }}
-              </a-tooltip>
-
-              <a @click="showMessageDetail(item)" style="margin-left: 16px">鏌ョ湅璇︽儏</a>
-            </div>
-          </template>
-          <template #avatar>
-            <template v-if="item.busType=='email'">
-              <a-badge dot v-if="noRead(item)" class="msg-no-read">
-                <a-avatar style="background: #79919d"><mail-outlined style="font-size: 16px" title="鏈娑堟伅"/></a-avatar>
-              </a-badge>
-              <a-avatar v-else style="background: #79919d"><mail-outlined style="font-size: 16px"/></a-avatar>
-            </template>
-
-            <template v-else-if="item.busType=='bpm_task'">
-              <a-badge dot v-if="noRead(item)" class="msg-no-read">
-                <a-avatar style="background: #79919d"><interaction-outlined style="font-size: 16px" title="鏈娑堟伅"/></a-avatar>
-              </a-badge>
-              <a-avatar v-else style="background: #79919d"><interaction-outlined style="font-size: 16px"/></a-avatar>
-            </template>
-
-            <template v-else-if="item.busType=='bpm'">
-              <a-badge dot v-if="noRead(item)" class="msg-no-read">
-                <a-avatar style="background: #79919d"><alert-outlined style="font-size: 16px" title="鏈娑堟伅"/></a-avatar>
-              </a-badge>
-              <a-avatar v-else style="background: #79919d"><alert-outlined style="font-size: 16px"/></a-avatar>
-            </template>
-            
-            <template v-else>
-              <a-badge dot v-if="noRead(item)" class="msg-no-read">
-                <a-avatar style="background: #79919d"><bell-filled style="font-size: 16px" title="鏈娑堟伅"/></a-avatar>
-              </a-badge>
-              <a-avatar v-else style="background: #79919d"><bell-filled style="font-size: 16px" /></a-avatar>
-            </template>
-          </template>
-        </a-list-item-meta>
-      </a-list-item>
-    </template>
-  </a-list>
-</template>
-
-<script>
-
-  import { FilterOutlined, CloseOutlined, BellFilled, ExclamationOutlined, MailOutlined,InteractionOutlined, AlertOutlined } from '@ant-design/icons-vue';
-  import { useSysMessage, useMessageHref } from './useSysMessage';
-  
-  
-  export default {
-    name: 'SysMessageList',
-    components: {
-      FilterOutlined,
-      CloseOutlined,
-      BellFilled,
-      ExclamationOutlined,
-      MailOutlined,
-      InteractionOutlined,
-      AlertOutlined
-    },
-    props:{
-      star: {
-        type:Boolean,
-        default: false
-      }
-    },
-    emits:['close', 'detail'],
-    setup(props, {emit}){
-      const { messageList,loadEndStatus,loadingMoreStatus,onLoadMore,noRead, getMsgCategory, searchParams, reset, loadData, updateStarMessage } = useSysMessage();
-      
-      function reload(params){
-        let { fromUser, rangeDateKey, rangeDate } = params;
-        searchParams.fromUser = fromUser||'';
-        searchParams.rangeDateKey = rangeDateKey||'';
-        searchParams.rangeDate = rangeDate||[];
-        if(props.star===true){
-          searchParams.starFlag = '1'
-        }else{
-          searchParams.starFlag = ''
-        }
-        reset();
-        loadData();
-      }
-      
-      function clickStar(item){
-        console.log(item)
-        updateStarMessage(item);
-        if(item.starFlag=='1'){
-          item.starFlag = '0'
-        }else{
-          item.starFlag = '1'
-        }
-      }
-      
-      const { goPage } = useMessageHref(emit);
-    
-      function showMessageDetail(record){
-        record.readFlag = '1'
-        goPage(record);
-        emit('close', record.id)
-      }
-
-      return {
-        messageList,
-        loadEndStatus,
-        loadingMoreStatus,
-        onLoadMore,
-        noRead,
-        getMsgCategory,
-        reload,
-        clickStar,
-        showMessageDetail
-      }
-    }
-  };
-</script>
-
-<style scoped lang="less">
-   .msg-no-read{
-     :deep(.ant-badge-dot){
-      top: 5px;
-      right: 3px;
-    }
-  }
-   :deep(.bpm-cuiban-content) p{
-    display: inherit;
-     margin-bottom: 0;
-     margin-top: 0;
-   }
-</style>
diff --git a/src/views/system/message/components/SysMessageModal.vue b/src/views/system/message/components/SysMessageModal.vue
deleted file mode 100644
index 7e511f0..0000000
--- a/src/views/system/message/components/SysMessageModal.vue
+++ /dev/null
@@ -1,487 +0,0 @@
-<template>
-  <BasicModal
-    :canFullscreen="false"
-    :draggable="false"
-    :closable="false"
-    @register="registerModal"
-    wrapClassName="sys-msg-modal"
-    :width="800"
-    :footer="null"
-    destroyOnClose
-  >
-    <template #title>
-      <div class="sys-msg-modal-title">
-        <div class="title"></div>
-        <div class="ant-tabs-nav-wrap">
-          <div class="ant-tabs-nav-scroll">
-            <div class="ant-tabs-nav ant-tabs-nav-animated">
-              <div>
-                <div
-                  @click="(e) => handleChangeTab(e, 'all')"
-                  role="tab"
-                  aria-disabled="false"
-                  aria-selected="false"
-                  class="ant-tabs-tab"
-                  :class="{ 'ant-tabs-tab-active': activeKey == 'all' }"
-                >
-                  鍏ㄩ儴娑堟伅
-                </div>
-                <div
-                  @click="(e) => handleChangeTab(e, 'star')"
-                  role="tab"
-                  aria-disabled="false"
-                  aria-selected="true"
-                  class="ant-tabs-tab"
-                  :class="{ 'ant-tabs-tab-active': activeKey == 'star' }"
-                >
-                  鏍囨槦娑堟伅
-                </div>
-              </div>
-              <div
-                class="ant-tabs-ink-bar ant-tabs-ink-bar-animated"
-                :style="{
-                  transform: activeKey == 'all' ? 'translate3d(0px, 0px, 0px)' : 'translate3d(120px, 0px, 0px)',
-                  display: 'block',
-                  width: '88px',
-                }"
-              ></div>
-            </div>
-          </div>
-        </div>
-
-        <!-- 澶撮儴鍥炬爣 -->
-        <div class="icon-right">
-          <div class="icons">
-            <a-popover placement="bottomRight" :overlayStyle="{ width: '400px' }" trigger="click" v-model:visible="showSearch">
-              <template #content>
-                <div>
-                  <span class="search-label">鍥炲銆佹彁鍒版垜鐨勪汉?锛�</span>
-                  <span style="display: inline-block;">
-                    <div v-if="searchParams.fromUser" class="selected-user">
-                      <span>{{searchParams.realname}}</span>
-                      <span class="clear-user-icon"><close-outlined style="font-size: 12px" @click="clearSearchParamsUser"/></span>
-                    </div>
-                    <a-button v-else type="dashed" shape="circle" @click="openSelectPerson">
-                      <plus-outlined />
-                    </a-button>
-                    
-                  </span>
-                </div>
-                <div class="search-date">
-                  <div class="date-label">鏃堕棿锛�</div>
-                  <div class="date-tags">
-                    <div class="tags-container">
-                      <div v-for="item in dateTags" :class="item.active == true ? 'tag active' : 'tag'" @click="handleClickDateTag(item)">{{
-                        item.text
-                      }}</div>
-                    </div>
-                    <div class="cust-range-date" v-if="showRangeDate">
-                      <a-range-picker v-model:value="searchRangeDate" @change="handleChangeSearchDate" />
-                    </div>
-                  </div>
-                </div>
-              </template>
-              
-              <span v-if="conditionStr" class="anticon filtera">
-                <filter-outlined />
-                <span style="font-size:12px;margin-left: 3px">{{conditionStr}}</span>
-                <span style="display: flex;margin:0 5px;"><close-outlined style="font-size: 12px" @click="clearAll"/></span>
-              </span>
-              <filter-outlined v-else/>
-            </a-popover>
-            <close-outlined @click="closeModal" />
-          </div>
-        </div>
-      </div>
-    </template>
-
-    <div class="sys-message-card">
-      <a-tabs :activeKey="activeKey" center @tabClick="handleChangePanel">
-        <template #renderTabBar>
-          <div></div>
-        </template>
-
-        <a-tab-pane tab="鍏ㄩ儴娑堟伅" key="all" forceRender>
-          <sys-message-list ref="allMessageRef" @close="hrefThenClose" @detail="showDetailModal"/>
-        </a-tab-pane>
-
-        <!-- 鏍囨槦 -->
-        <a-tab-pane tab="鏍囨槦娑堟伅" key="star" forceRender>
-          <sys-message-list ref="starMessageRef" star @close="hrefThenClose" @detail="showDetailModal"/>
-        </a-tab-pane>
-      </a-tabs>
-    </div>
-  </BasicModal>
-
-  <user-select-modal isRadioSelection :showButton="false" labelKey="realname" rowKey="username" @register="regModal" @getSelectResult="getSelectedUser"></user-select-modal>
-
-  <DetailModal @register="registerDetail" />
-</template>
-
-<script>
-  import { BasicModal, useModalInner, useModal } from '/@/components/Modal';
-  import { FilterOutlined, CloseOutlined, BellFilled, ExclamationOutlined, PlusOutlined } from '@ant-design/icons-vue';
-  import { JSelectUser } from '/@/components/Form';
-  import { ref, unref, reactive, computed } from 'vue';
-  import SysMessageList from './SysMessageList.vue'
-  import UserSelectModal from '/@/components/Form/src/jeecg/components/modal/UserSelectModal.vue'
-  import DetailModal from '/@/views/monitor/mynews/DetailModal.vue';
-  
-  export default {
-    name: 'SysMessageModal',
-    components: {
-      BasicModal,
-      FilterOutlined,
-      CloseOutlined,
-      BellFilled,
-      ExclamationOutlined,
-      JSelectUser,
-      SysMessageList,
-      UserSelectModal,
-      PlusOutlined,
-      DetailModal
-    },
-    emits:['register', 'refresh'],
-    setup(_p, {emit}) {
-      const allMessageRef = ref();
-      const starMessageRef = ref();
-      const activeKey = ref('all');
-      function handleChangeTab(e, key) {
-        activeKey.value = key;
-        loadData();
-      }
-      function handleChangePanel(key) {
-        activeKey.value = key;
-      }
-      
-      // 鏌ヨ鍖哄煙瀛樺偍鍊�
-      const searchParams = reactive({
-        fromUser: '',
-        realname: '',
-        rangeDateKey: '',
-        rangeDate: [],
-      });
-
-      function loadData(){
-        let params = {
-          fromUser: searchParams.fromUser,
-          rangeDateKey: searchParams.rangeDateKey,
-          rangeDate: searchParams.rangeDate,
-        }
-        if(activeKey.value == 'all'){
-          allMessageRef.value.reload(params);
-        }else{
-          starMessageRef.value.reload(params);
-        }
-      }
-      
-      //useModalInner
-      const [registerModal, { closeModal }] = useModalInner(async () => {
-        //姣忔寮圭獥鎵撳紑 鍔犺浇鏈�鏂扮殑鏁版嵁
-        loadData();
-      });
-      
-      const showSearch = ref(false);
-      
-      function handleChangeSearchPerson(value, a) {
-        console.log('閫夋嫨鏀瑰彉', value, a);
-        showSearch.value = true;
-      }
-
-      const dateTags = reactive([
-        { key: 'jt', text: '浠婂ぉ', active: false },
-        { key: 'zt', text: '鏄ㄥぉ', active: false },
-        { key: 'qt', text: '鍓嶅ぉ', active: false },
-        { key: 'bz', text: '鏈懆', active: false },
-        { key: 'sz', text: '涓婂懆', active: false },
-        { key: 'by', text: '鏈湀', active: false },
-        { key: 'sy', text: '涓婃湀', active: false },
-        { key: 'zdy', text: '鑷畾涔�', active: false },
-      ]);
-      function handleClickDateTag(item) {
-        for (let a of dateTags) {
-          if(a.key != item.key){
-            a.active = false;
-          }
-        }
-        item.active = !item.active;
-        if(item.active == false){
-          searchParams.rangeDateKey = ''
-        }else{
-          searchParams.rangeDateKey = item.key;
-        }
-        if (item.key == 'zdy') {
-          // 鑷畾涔夋棩鏈熸煡璇㈣蛋鐨勬槸 handleChangeSearchDate
-          if(item.active == false){
-            searchParams.rangeDate = []
-            loadData();
-          }
-        }else{
-          loadData();
-        }
-      }
-      const showRangeDate = computed(() => {
-        let temp = dateTags.filter((i) => i.active == true);
-        if (temp && temp.length > 0) {
-          if (temp[0].text == '鑷畾涔�') {
-            return true;
-          }
-        }
-        return false;
-      });
-      const searchRangeDate = ref([]);
-      function handleChangeSearchDate(_value, dateStringArray) {
-        searchParams.rangeDate = [...dateStringArray]
-        loadData();
-      }
-      
-      function hrefThenClose(id){
-        emit('refresh', id)
-       // closeModal();
-      }
-      
-      // 鏈夋煡璇㈡潯浠跺�肩殑鏃跺�欐樉绀鸿瀛楃涓�
-      const conditionStr = computed(()=>{
-        const { fromUser, rangeDateKey, realname } = searchParams;
-        if(!fromUser && !rangeDateKey){
-          return ''
-        }
-        let arr = [];
-        if(fromUser){
-          arr.push(realname)
-        }
-        if(rangeDateKey){
-          let rangDates = dateTags.filter(item=>item.key == rangeDateKey);
-          if(rangDates && rangDates.length>0){
-            arr.push(rangDates[0].text)
-          }
-        }
-        return arr.join('銆�')
-      });
-
-      //娉ㄥ唽model
-      const [regModal, { openModal }] = useModal();
-
-      function getSelectedUser(options, value){
-        if(options && options.length>0){
-          searchParams.fromUser = value
-          searchParams.realname = options[0].label;
-        }
-      }
-      
-      function openSelectPerson(){
-        openModal(true, {})
-      }
-      
-      function clearSearchParamsUser(){
-        searchParams.fromUser = ''
-        searchParams.realname = ''
-      }
-      
-      function clearAll(){
-        searchParams.fromUser='';
-        searchParams.realname='';
-        searchParams.rangeDateKey='';
-        searchParams.rangeDate=[];
-        for (let a of dateTags) {
-          a.active = false;
-        }
-      }
-
-      const [registerDetail, { openModal: openDetailModal }] = useModal();
-      function showDetailModal(record){
-        console.error(123, record)
-        openDetailModal(true, {record: unref(record), isUpdate: true})
-      }
-      return {
-        conditionStr,
-        regModal,
-        getSelectedUser,
-        openSelectPerson,
-        clearSearchParamsUser,
-        clearAll,
-        
-        registerModal,
-        activeKey,
-        handleChangePanel,
-        handleChangeTab,
-
-        showSearch,
-        searchParams,
-        handleChangeSearchPerson,
-        dateTags,
-        handleClickDateTag,
-        showRangeDate,
-        searchRangeDate,
-        handleChangeSearchDate,
-        closeModal,
-        hrefThenClose,
-
-        allMessageRef,
-        starMessageRef,
-        registerDetail,
-        showDetailModal
-     
-      };
-    },
-  };
-</script>
-
-<style lang="less">
-
-  @keyframes move22{
-    0%{ transform:translateY(0px); }
-    100%{transform:translateY(600px);}
-  }
-
-  
-  .sys-msg-modal {
-    .ant-modal-header {
-      padding-bottom: 0;
-      padding-top: 6px;
-      padding-right: 12px;
-    }
-    .ant-modal-body {
-      height: 550px;
-      overflow-y: auto;
-    }
-    .ant-modal {
-      position: absolute;
-      right: 10px;
-      top: calc(100% - 600px);
-/*      animation-name: move22;
-      animation-duration:0.8s;
-      animation-timing-function:ease;*/
-    }
-  }
-  .sys-msg-modal-title {
-    .title {
-      display: inline-block;
-      width: 120px;
-    }
-    .icon-right {
-      display: inline-block;
-      width: 220px;
-      vertical-align: top;
-      
-      .icons {
-        display: flex;
-        height: 100%;
-        flex-direction: row;
-        justify-content: flex-end;
-  
-        > span.anticon {
-          padding: 10px;
-          display: inline-block;
-          cursor: pointer;
-          &:hover {
-            color: #1890ff;
-          }
-          &:active {
-            color: #1890ff;
-          }
-        }
-
-        > span.filtera{
-          background-color: #d3eafd;
-          border-radius: 4px;
-          cursor: pointer;
-          height: 27px;
-          padding-top: 7px;
-          margin-top: 3px;
-          line-height: 25px;
-          color: #2196f3;
-          display: flex;
-          
-          >span.anticon{
-            height: 30px;
-            line-height: 9px;
-            display: inline-block;
-          }
-        }
-
-    
-      }
-    }
-    .ant-tabs-nav-wrap {
-      display: inline-block;
-      width: calc(100% - 340px);
-    }
-    .ant-tabs-nav-scroll {
-      text-align: center;
-      font-size: 14px;
-      font-weight: normal;
-    }
-  }
-
-  .sys-message-card {
-  }
-
-  .search-label {
-    font-weight: 500;
-    font-size: 14px !important;
-    color: #757575 !important;
-    display: inline-block;
-    margin-right: 15px !important;
-  }
-  .search-date {
-    display: flex;
-    min-width: 0;
-    margin-top: 15px;
-    .date-label {
-      margin-top: 4px;
-      font-weight: 500;
-      font-size: 14px !important;
-      color: #757575 !important;
-      margin-right: 15px !important;
-    }
-
-    .date-tags {
-      display: -ms-flexbox;
-      display: flex;
-      display: -webkit-flex;
-      -ms-flex-direction: column;
-      -webkit-flex-direction: column;
-      flex-direction: column;
-      -webkit-flex: 1;
-      flex: 1;
-      -ms-flex: 1;
-      .tags-container {
-        display: flex;
-        min-width: 0;
-        -webkit-flex: 1;
-        flex: 1;
-        -ms-flex: 1;
-        flex-wrap: wrap;
-        .tag {
-          background-color: #f5f5f5;
-          border-radius: 17px;
-          font-size: 13px;
-          margin-bottom: 10px;
-          margin-right: 10px;
-          padding: 6px 12px;
-          cursor: pointer;
-          &.active {
-            background-color: #d3eafd !important;
-            color: #2196f3;
-          }
-        }
-      }
-    }
-  }
-
-  .selected-user{
-    background: #f5f5f5;
-    padding: 2px 14px;
-    border-radius: 30px;
-    .clear-user-icon{
-      margin-left: 5px;
-
-      .anticon{
-        &:hover{
-          color: #2196f3;
-        }
-      }
-    }
-  }
-</style>
diff --git a/src/views/system/message/components/useSysMessage.ts b/src/views/system/message/components/useSysMessage.ts
deleted file mode 100644
index e7d7b49..0000000
--- a/src/views/system/message/components/useSysMessage.ts
+++ /dev/null
@@ -1,229 +0,0 @@
-import { ref, reactive } from 'vue';
-import { defHttp } from '/@/utils/http/axios';
-import { getDictItemsByCode } from '/@/utils/dict/index';
-import { useRouter, useRoute } from 'vue-router'
-import { useAppStore } from '/@/store/modules/app';
-import { useTabs } from '/@/hooks/web/useTabs';
-import { useModal } from '/@/components/Modal';
-
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-const queryMessageList = (params) => {
-  const url = '/sys/annountCement/vue3List';
-  return defHttp.get({ url, params });
-};
-
-/**
- * 鑾峰彇娑堟伅鍒楄〃鏁版嵁
- */
-export function useSysMessage() {
-  const rangeDateArray = getDictItemsByCode('rangeDate');
-  console.log('+++++++++++++++++++++');
-  console.log('rangeDateArray', rangeDateArray);
-  console.log('+++++++++++++++++++++');
-
-  const messageList = ref<any[]>([]);
-  const pageNo = ref(1)
-  let pageSize = 10;
-  
-  const searchParams = reactive({
-    fromUser: '',
-    rangeDateKey: '',
-    rangeDate: [],
-    starFlag: ''
-  });
-
-
-  function getQueryParams() {
-    let { fromUser, rangeDateKey, rangeDate, starFlag } = searchParams;
-    let params = {
-      fromUser,
-      starFlag,
-      rangeDateKey,
-      beginDate: '',
-      endDate: '',
-      pageNo: pageNo.value,
-      pageSize
-    };
-    if (rangeDateKey == 'zdy') {
-      params.beginDate = rangeDate[0]+' 00:00:00';
-      params.endDate = rangeDate[1]+' 23:59:59';
-    }
-    return params;
-  }
-
-  // 鏁版嵁鏄惁鍔犺浇瀹屼簡
-  const loadEndStatus = ref(false);
-  
-  //璇锋眰鏁版嵁
-  async function loadData() {
-    if(loadEndStatus.value === true){
-      return;
-    }
-    let params = getQueryParams();
-    const data = await queryMessageList(params);
-    console.log('鑾峰彇缁撴灉', data);
-    if(!data || data.length<=0){
-      loadEndStatus.value = true;
-      return;
-    }
-    if(data.length<pageSize){
-      loadEndStatus.value = true;
-    }
-    pageNo.value = pageNo.value+1
-    let temp:any[] = messageList.value;
-    temp.push(...data);
-    messageList.value = temp;
-  }
-
-  //閲嶇疆
-  function reset(){
-    messageList.value = []
-    pageNo.value = 1;
-    loadEndStatus.value = false;
-  }
-  
-  //鏍囨槦
-  function updateStarMessage(item){
-    const url = '/sys/sysAnnouncementSend/edit';
-    let starFlag = '1';
-    if(item.starFlag==starFlag){
-      starFlag = '0'
-    }
-    const params = {
-      starFlag,
-      id: item.sendId
-    }
-    defHttp.put({url, params});
-  }
-
-
-  const loadingMoreStatus = ref(false);
-  async function onLoadMore() {
-    loadingMoreStatus.value = true;
-    await loadData();
-    loadingMoreStatus.value = false;
-  }
-
-  function noRead(item) {
-    if (item.readFlag === '1') {
-      return false;
-    }
-    return true;
-  }
-
-  // 娑堟伅绫诲瀷
-  function getMsgCategory(item) {
-    if(item.busType=='email'){
-      return '閭欢鎻愰啋:';
-    } else if(item.busType=='bpm'){
-      return '娴佺▼鍌姙:';
-    }else if(item.busType=='bpm_task'){
-      return '娴佺▼浠诲姟:';
-    } else if (item.msgCategory == '2') {
-      return '绯荤粺娑堟伅:';
-    } else if (item.msgCategory == '1') {
-      return '閫氱煡鍏憡:';
-    }
-    return '';
-  }
-  
-  return {
-    messageList,
-    reset,
-    loadData,
-    loadEndStatus,
-    searchParams,
-    updateStarMessage,
-    
-    onLoadMore,
-    noRead,
-    getMsgCategory,
-    
-  };
-}
-
-/**
- * 鐢ㄤ簬娑堟伅璺宠浆
- */
-export function useMessageHref(emit){
-  const messageHrefArray:any[] = getDictItemsByCode('messageHref');
-  const router = useRouter();
-  const appStore = useAppStore();
-  const rt = useRoute();
-  const { close: closeTab, closeSameRoute } = useTabs();
- // const defaultPath = '/monitor/mynews';
-  //const bpmPath = '/task/handle/'
-  
-  async function goPage(record, openModalFun?){
-    if(!record.busType){
-      if(!openModalFun){
-        // 浠庨椤电殑娑堟伅閫氱煡璺宠浆
-        await goPageFromOuter(record);
-      }else{
-        // 浠庢秷鎭〉闈㈠垪琛ㄧ偣鍑昏鎯呮煡鐪� 鐩存帴鎵撳紑modal
-        openModalFun()
-      }
-    }else{
-      await goPageWithBusType(record)
-    }
-/*    busId: "1562035005173587970"
-    busType: "email"
-    openPage: "modules/eoa/email/modals/EoaEmailInForm"
-    openType: "component"*/
-  }
-
-  /**
-   * 鏍规嵁busType涓嶅悓璺宠浆涓嶅悓椤甸潰
-   * @param record
-   */
-  async function goPageWithBusType(record){
-    const { busType, busId, msgAbstract } = record;
-    let temp = messageHrefArray.filter(item=>item.value === busType);
-    if(!temp || temp.length==0){
-      console.error('褰撳墠涓氬姟绫诲瀷涓嶈瘑鍒�', busType);
-      return;
-    }
-    let path = temp[0].text;
-    path = path.replace('{DETAIL_ID}', busId)
-    //鍥哄畾鍙傛暟 detailId 鐢ㄤ簬鏌ヨ琛ㄥ崟鏁版嵁
-    let query:any = {
-      detailId: busId
-    };
-    // 棰濆鍙傛暟澶勭悊
-    if(msgAbstract){
-      try {
-        let json = JSON.parse(msgAbstract);
-        Object.keys(json).map(k=>{
-          query[k] = json[k]
-        });
-      }catch (e) {
-        console.error('msgAbstract鍙傛暟涓嶆槸JSON鏍煎紡', msgAbstract)
-      }
-    }
-    // 璺宠浆璺敱
-    appStore.setMessageHrefParams(query);
-    if(rt.path.indexOf(path)>=0){
-      await closeTab();
-      await router.replace({ path: path, query:{ time: new Date().getTime() } });
-    }else{
-      closeSameRoute(path)
-      await router.push({ path: path });
-    }
-  }
-
-  /**
-   * 浠庨椤电殑娑堟伅閫氱煡璺宠浆娑堟伅鍒楄〃鎵撳紑modal
-   * @param record
-   */
-  async function goPageFromOuter(record){
-    //娌℃湁瀹氫箟涓氬姟绫诲瀷 鐩存帴璺宠浆鎴戠殑娑堟伅椤甸潰
-    emit('detail', record)
-  }
-  
-  return {
-    goPage
-  }
-}
diff --git a/src/views/system/message/manage/ManageDrawer.vue b/src/views/system/message/manage/ManageDrawer.vue
deleted file mode 100644
index 407888c..0000000
--- a/src/views/system/message/manage/ManageDrawer.vue
+++ /dev/null
@@ -1,24 +0,0 @@
-<template>
-  <BasicDrawer @register="registerModal" title="璇︽儏" :width="600" v-bind="$attrs" @ok="closeDrawer">
-    <BasicForm @register="registerForm" />
-  </BasicDrawer>
-</template>
-
-<script lang="ts" setup>
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-  import { formSchemas } from './manage.data';
-
-  // 澹版槑 emits
-  const emit = defineEmits(['register']);
-  // 娉ㄥ唽 form
-  const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
-    schemas: formSchemas,
-    showActionButtonGroup: false,
-  });
-  // 娉ㄥ唽 modal
-  const [registerModal, { closeDrawer }] = useDrawerInner(async (data) => {
-    await resetFields();
-    await setFieldsValue({ ...data.record });
-  });
-</script>
diff --git a/src/views/system/message/manage/index.less b/src/views/system/message/manage/index.less
deleted file mode 100644
index 63b7bd0..0000000
--- a/src/views/system/message/manage/index.less
+++ /dev/null
@@ -1,5 +0,0 @@
-//noinspection LessUnresolvedVariable
-@prefix-cls: ~'@{namespace}-message-manage';
-
-.@{prefix-cls} {
-}
diff --git a/src/views/system/message/manage/index.vue b/src/views/system/message/manage/index.vue
deleted file mode 100644
index 2602be1..0000000
--- a/src/views/system/message/manage/index.vue
+++ /dev/null
@@ -1,129 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-dropdown v-if="showBatchBtn">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="onDeleteBatch">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                <span>鍒犻櫎</span>
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button>
-            <span>鎵归噺鎿嶄綔</span>
-            <Icon icon="mdi:chevron-down"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-    </BasicTable>
-    <ManageDrawer @register="registerDrawer" />
-  </div>
-</template>
-
-<script lang="ts" setup name="message-manage">
-  import { unref, computed } from 'vue';
-  import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
-  import { useDrawer } from '/@/components/Drawer';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import ManageDrawer from './ManageDrawer.vue';
-  import { Api, list, deleteBatch } from './manage.api';
-  import { columns, searchFormSchema } from './manage.data';
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext } = useListPage({
-    designScope: 'message-manage',
-    tableProps: {
-      title: '娑堟伅涓績妯℃澘鍒楄〃鏁版嵁',
-      api: list,
-      columns: columns,
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-    },
-    exportConfig: {
-      url: Api.exportXls,
-      name: '娑堟伅涓績妯℃澘鍒楄〃',
-    },
-    importConfig: {
-      url: Api.importXls,
-      success: () => reload(),
-    },
-  });
-
-  // 娉ㄥ唽 ListTable
-  const [registerTable, { reload, setLoading }, { rowSelection, selectedRowKeys }] = tableContext;
-  const showBatchBtn = computed(() => selectedRowKeys.value.length > 0);
-
-  const [registerDrawer, { openDrawer }] = useDrawer();
-
-  function onDetail(record) {
-    openDrawer(true, { record: record });
-  }
-
-  function onDelete(record) {
-    if (record) {
-      doDeleteDepart([record.id], false);
-    }
-  }
-
-  async function onDeleteBatch() {
-    try {
-      await doDeleteDepart(selectedRowKeys);
-      selectedRowKeys.value = [];
-    } finally {
-    }
-  }
-
-  /**
-   * 鏍规嵁 ids 鎵归噺鍒犻櫎
-   * @param idListRef array
-   * @param confirm 鏄惁鏄剧ず纭鎻愮ず妗�
-   */
-  async function doDeleteDepart(idListRef, confirm = true) {
-    const idList = unref(idListRef);
-    if (idList.length > 0) {
-      try {
-        setLoading(true);
-        await deleteBatch({ ids: idList.join(',') }, confirm);
-        await reload();
-      } finally {
-        setLoading(false);
-      }
-    }
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record): ActionItem[] {
-    return [{ label: '璇︽儏', onClick: onDetail.bind(null, record) }];
-  }
-
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record): ActionItem[] {
-    return [
-      {
-        label: '鍒犻櫎',
-        color: 'error',
-        popConfirm: {
-          title: '纭瑕佸垹闄ゅ悧锛�',
-          confirm: onDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
-
-<style lang="less">
-  @import 'index';
-</style>
diff --git a/src/views/system/message/manage/manage.api.ts b/src/views/system/message/manage/manage.api.ts
deleted file mode 100644
index b83d6c2..0000000
--- a/src/views/system/message/manage/manage.api.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { unref } from 'vue';
-import { defHttp } from '/@/utils/http/axios';
-import { useMessage } from '/@/hooks/web/useMessage';
-
-const { createConfirm } = useMessage();
-
-export enum Api {
-  list = '/sys/message/sysMessage/list',
-  delete = '/sys/message/sysMessage/delete',
-  deleteBatch = '/sys/message/sysMessage/deleteBatch',
-  exportXls = 'sys/message/sysMessage/exportXls',
-  importXls = 'sys/message/sysMessage/importExcel',
-  save = '/sys/message/sysMessage/add',
-  edit = '/sys/message/sysMessage/edit',
-}
-
-export const list = (params) => defHttp.get({ url: Api.list, params });
-
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- * @param confirm
- */
-export const deleteBatch = (params, confirm = false) => {
-  return new Promise((resolve, reject) => {
-    const doDelete = () => {
-      resolve(defHttp.delete({ url: Api.deleteBatch, params }, { joinParamsToUrl: true }));
-    };
-    if (confirm) {
-      createConfirm({
-        iconType: 'warning',
-        title: '鍒犻櫎',
-        content: '纭畾瑕佸垹闄ゅ悧锛�',
-        onOk: () => doDelete(),
-        onCancel: () => reject(),
-      });
-    } else {
-      doDelete();
-    }
-  });
-};
-
-/**
- * 淇濆瓨鎴栬�呮洿鏀规秷鎭ā鏉�
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  if (unref(isUpdate)) {
-    return defHttp.put({ url: Api.edit, params });
-  } else {
-    return defHttp.post({ url: Api.save, params });
-  }
-};
diff --git a/src/views/system/message/manage/manage.data.ts b/src/views/system/message/manage/manage.data.ts
deleted file mode 100644
index 3806fda..0000000
--- a/src/views/system/message/manage/manage.data.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '娑堟伅鏍囬',
-    dataIndex: 'esTitle',
-    width: 140,
-  },
-  {
-    title: '鍙戦�佸唴瀹�',
-    dataIndex: 'esContent',
-    width: 200,
-    // slots: { customRender: 'esContent' },
-  },
-  {
-    title: '鎺ユ敹浜�',
-    dataIndex: 'esReceiver',
-    width: 140,
-  },
-  {
-    title: '鍙戦�佹鏁�',
-    dataIndex: 'esSendNum',
-    width: 120,
-  },
-  {
-    title: '鍙戦�佺姸鎬�',
-    dataIndex: 'esSendStatus_dictText',
-    width: 120,
-  },
-  {
-    title: '鍙戦�佹椂闂�',
-    dataIndex: 'esSendTime',
-    width: 140,
-  },
-  {
-    title: '鍙戦�佹柟寮�',
-    dataIndex: 'esType_dictText',
-    width: 120,
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    label: '娑堟伅鏍囬',
-    field: 'esTitle',
-    component: 'Input',
-  },
-  {
-    label: '鍙戦�佺姸鎬�',
-    field: 'esSendStatus',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'msgSendStatus',
-    },
-  },
-  {
-    label: '鍙戦�佹柟寮�',
-    field: 'esType',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'messageType',
-    },
-  },
-];
-
-export const formSchemas: FormSchema[] = [
-  {
-    label: 'ID',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '娑堟伅鏍囬',
-    field: 'esTitle',
-    component: 'Input',
-    componentProps: { readOnly: true },
-  },
-  {
-    label: '鍙戦�佸唴瀹�',
-    field: 'esContent',
-    component: 'InputTextArea',
-    componentProps: { readOnly: true },
-  },
-  {
-    label: '鍙戦�佸弬鏁�',
-    field: 'esParam',
-    component: 'Input',
-    componentProps: { readOnly: true },
-  },
-
-  {
-    label: '鎺ユ敹浜�',
-    field: 'esReceiver',
-    component: 'Input',
-    componentProps: { readOnly: true },
-  },
-  {
-    label: '鍙戦�佹柟寮�',
-    field: 'esType',
-    component: 'JDictSelectTag',
-    componentProps: { disabled: true, dictCode: 'messageType' },
-  },
-  {
-    label: '鍙戦�佹椂闂�',
-    field: 'esSendTime',
-    component: 'Input',
-    componentProps: { readOnly: true },
-  },
-  {
-    label: '鍙戦�佺姸鎬�',
-    field: 'esSendStatus',
-    component: 'JDictSelectTag',
-    componentProps: { disabled: true, dictCode: 'msgSendStatus' },
-  },
-  {
-    label: '鍙戦�佹鏁�',
-    field: 'esSendNum',
-    component: 'Input',
-    componentProps: { readOnly: true },
-  },
-  {
-    label: '鍙戦�佸け璐ュ師鍥�',
-    field: 'esResult',
-    component: 'Input',
-    componentProps: { readOnly: true },
-  },
-  {
-    label: '澶囨敞',
-    field: 'remark',
-    component: 'InputTextArea',
-    componentProps: { readOnly: true },
-  },
-];
diff --git a/src/views/system/message/template/TemplateModal.vue b/src/views/system/message/template/TemplateModal.vue
deleted file mode 100644
index bc2885a..0000000
--- a/src/views/system/message/template/TemplateModal.vue
+++ /dev/null
@@ -1,51 +0,0 @@
-<template>
-  <BasicModal @register="registerModal" :title="title" :width="800" v-bind="$attrs" @ok="onSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { ref, unref } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { formSchemas } from './template.data';
-  import { saveOrUpdate } from './template.api';
-
-  // 澹版槑 emits
-  const emit = defineEmits(['success', 'register']);
-  const title = ref<string>('');
-  const isUpdate = ref<boolean>(false);
-  // 娉ㄥ唽 form
-  //update-begin---author:wangshuai ---date:20221123  for锛歔VUEN-2807]娑堟伅妯℃澘鍔犱竴涓煡鐪嬪姛鑳�------------
-  const [registerForm, { resetFields, setFieldsValue, validate, updateSchema, setProps }] = useForm({
-  //update-end---author:wangshuai ---date:20221123  for锛歔VUEN-2807]娑堟伅妯℃澘鍔犱竴涓煡鐪嬪姛鑳�--------------z
-    schemas: formSchemas,
-    showActionButtonGroup: false,
-  });
-  // 娉ㄥ唽 modal
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
-    isUpdate.value = unref(data.isUpdate);
-    title.value = unref(data.title);
-    await resetFields();
-    await setFieldsValue({ ...data.record });
-    // 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-    setProps({ disabled: !data?.showFooter })
-  });
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function onSubmit() {
-    try {
-      const values = await validate();
-      setModalProps({ confirmLoading: true });
-      // 鎻愪氦琛ㄥ崟
-      await saveOrUpdate(values, isUpdate);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/message/template/TemplateTestModal.vue b/src/views/system/message/template/TemplateTestModal.vue
deleted file mode 100644
index eeea2f5..0000000
--- a/src/views/system/message/template/TemplateTestModal.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-<template>
-  <BasicModal @register="registerModal" title="鍙戦�佹祴璇�" :width="800" v-bind="$attrs" @ok="onSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { ref, unref } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { sendTestFormSchemas } from './template.data';
-  import { sendMessageTest } from './template.api';
-
-  // 澹版槑 emits
-  const emit = defineEmits(['register']);
-  // 娉ㄥ唽 form
-  const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
-    schemas: sendTestFormSchemas,
-    showActionButtonGroup: false,
-  });
-  // 娉ㄥ唽 modal
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    await resetFields();
-    await setFieldsValue({ ...unref(data.record) });
-  });
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function onSubmit() {
-    try {
-      const values = await validate();
-      setModalProps({ confirmLoading: true });
-      // 鎻愪氦琛ㄥ崟
-      await sendMessageTest(values);
-      //鍏抽棴寮圭獥
-      closeModal();
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/message/template/index.less b/src/views/system/message/template/index.less
deleted file mode 100644
index 15e8d49..0000000
--- a/src/views/system/message/template/index.less
+++ /dev/null
@@ -1,5 +0,0 @@
-//noinspection LessUnresolvedVariable
-@prefix-cls: ~'@{namespace}-message-template';
-
-.@{prefix-cls} {
-}
diff --git a/src/views/system/message/template/index.vue b/src/views/system/message/template/index.vue
deleted file mode 100644
index d1b5945..0000000
--- a/src/views/system/message/template/index.vue
+++ /dev/null
@@ -1,208 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-button type="primary" preIcon="ant-design:plus-outlined" @click="onAdd">鏂板</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-        <a-dropdown v-if="showBatchBtn">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="onDeleteBatch">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                <span>鍒犻櫎</span>
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button>
-            <span>鎵归噺鎿嶄綔</span>
-            <Icon icon="mdi:chevron-down"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-    </BasicTable>
-    <TemplateModal @register="registerModal" @success="reload" />
-    <TemplateTestModal @register="registerTestModal" />
-  </div>
-</template>
-
-<script lang="ts" setup name="message-template">
-  import { unref, computed, toRaw } from 'vue';
-  import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import TemplateModal from './TemplateModal.vue';
-  import TemplateTestModal from './TemplateTestModal.vue';
-  import { Api, saveOrUpdate, list, deleteBatch } from './template.api';
-  import { columns, searchFormSchema } from './template.data';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  const { createMessage } = useMessage();
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, onExportXls, onImportXls, tableContext } = useListPage({
-    designScope: 'message-template',
-    tableProps: {
-      title: '娑堟伅涓績妯℃澘鍒楄〃鏁版嵁',
-      api: list,
-      columns: columns,
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-    },
-    exportConfig: {
-      url: Api.exportXls,
-      name: '娑堟伅涓績妯℃澘鍒楄〃',
-    },
-    importConfig: {
-      url: Api.importXls,
-      success: () => reload(),
-    },
-  });
-
-  // 娉ㄥ唽 ListTable
-  const [registerTable, { reload, setLoading }, { rowSelection, selectedRowKeys, selectedRows }] = tableContext;
-  const [registerModal, { openModal }] = useModal();
-  const [registerTestModal, testModal] = useModal();
-  const showBatchBtn = computed(() => selectedRowKeys.value.length > 0);
-
-  function onAdd() {
-    openModal(true, {
-      title: '鏂板娑堟伅妯℃澘',
-      isUpdate: false,
-      showFooter: true,
-      record: {},
-    });
-  }
-
-  function onEdit(record) {
-    if (record.useStatus === '1') {
-      createMessage.warning('姝ゆā鏉垮凡琚簲鐢紝绂佹缂栬緫!');
-      return;
-    }
-    openModal(true, {
-      title: '淇敼娑堟伅妯℃澘',
-      isUpdate: true,
-      record: record,
-      showFooter: true,
-    });
-  }
-
-  function onDelete(record) {
-    if (record) {
-      //update-begin-author:taoyan date:2022-7-14 for: VUEN-1652銆恇ug銆戝簲鐢ㄧ姸鎬佷笅涓嶅厑璁稿垹闄�
-      if(record.useStatus == '1'){
-        createMessage.warning('璇ユā鏉垮凡琚簲鐢ㄧ姝㈠垹闄�!');
-        return;
-      }
-      //update-end-author:taoyan date:2022-7-14 for: VUEN-1652銆恇ug銆戝簲鐢ㄧ姸鎬佷笅涓嶅厑璁稿垹闄�
-      doDeleteDepart([record.id], false);
-    }
-  }
-
-  /**
-   * 鏍规嵁 ids 鎵归噺鍒犻櫎
-   * @param idListRef array
-   * @param confirm 鏄惁鏄剧ず纭鎻愮ず妗�
-   */
-  async function doDeleteDepart(idListRef, confirm = true) {
-    const idList = unref(idListRef);
-    if (idList.length > 0) {
-      try {
-        setLoading(true);
-        await deleteBatch({ ids: idList.join(',') }, confirm);
-        await reload();
-      } finally {
-        setLoading(false);
-      }
-    }
-  }
-
-  async function onDeleteBatch() {
-    try {
-      //update-begin-author:taoyan date:2022-7-14 for: VUEN-1652銆恇ug銆戝簲鐢ㄧ姸鎬佷笅涓嶅厑璁稿垹闄�
-      let arr = toRaw(selectedRows.value);
-      let temp = arr.filter(item=>item.useStatus=='1')
-      if(temp.length>0){
-        createMessage.warning('閫変腑鐨勬ā鏉垮凡琚簲鐢ㄧ姝㈠垹闄�!');
-        return;
-      }
-      //update-end-author:taoyan date:2022-7-14 for: VUEN-1652銆恇ug銆戝簲鐢ㄧ姸鎬佷笅涓嶅厑璁稿垹闄�
-      await doDeleteDepart(selectedRowKeys);
-      selectedRowKeys.value = [];
-    } finally {
-    }
-  }
-
-  // 鍙戦�佹秷鎭祴璇�
-  function onSendTest(record) {
-    testModal.openModal(true, { record });
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record): ActionItem[] {
-    //update-begin---author:wangshuai ---date:20221123  for锛歔VUEN-2807]娑堟伅妯℃澘鍔犱竴涓煡鐪嬪姛鑳�------------
-    return [{ label: '鏌ョ湅', onClick: handleDetail.bind(null, record)}, { label: '缂栬緫', onClick: onEdit.bind(null, record) }];
-    //update-end---author:wangshuai ---date:20221123  for锛歔VUEN-2807]娑堟伅妯℃澘鍔犱竴涓煡鐪嬪姛鑳�------------
-  }
-
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record): ActionItem[] {
-    return [
-      { label: '搴旂敤', onClick: handleUse.bind(null, record) },
-      { label: '鍋滅敤', onClick: handleNotUse.bind(null, record) },
-      { label: '鍙戦�佹祴璇�', onClick: onSendTest.bind(null, record) },
-      {
-        label: '鍒犻櫎',
-        color: 'error',
-        popConfirm: {
-          title: '纭瑕佸垹闄ゅ悧锛�',
-          confirm: onDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-
-  /**
-   * 搴旂敤
-   */
-  async function handleUse(record) {
-    let param = { id: record.id, useStatus: '1' };
-    await saveOrUpdate(param, true);
-    await reload();
-  }
-
-  /**
-   * 鍋滅敤
-   */
-  async function handleNotUse(record) {
-    let param = { id: record.id, useStatus: '0' };
-    await saveOrUpdate(param, true);
-    await reload();
-  }
-
-  /**
-   * 鏌ョ湅
-   * @param record
-   */
-  function handleDetail(record) {
-    openModal(true,{
-      isUpdate: true,
-      showFooter: false,
-      record:record
-    })
-  }
-</script>
-
-<style lang="less">
-  @import 'index';
-</style>
diff --git a/src/views/system/message/template/template.api.ts b/src/views/system/message/template/template.api.ts
deleted file mode 100644
index fe4f03c..0000000
--- a/src/views/system/message/template/template.api.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { unref } from 'vue';
-import { defHttp } from '/@/utils/http/axios';
-import { useMessage } from '/@/hooks/web/useMessage';
-
-const { createConfirm } = useMessage();
-
-export enum Api {
-  list = '/sys/message/sysMessageTemplate/list',
-  delete = '/sys/message/sysMessageTemplate/delete',
-  deleteBatch = '/sys/message/sysMessageTemplate/deleteBatch',
-  exportXls = 'sys/message/sysMessageTemplate/exportXls',
-  importXls = 'sys/message/sysMessageTemplate/importExcel',
-  save = '/sys/message/sysMessageTemplate/add',
-  edit = '/sys/message/sysMessageTemplate/edit',
-  // 鍙戦�佹祴璇�
-  send = '/sys/message/sysMessageTemplate/sendMsg',
-}
-
-export const list = (params) => defHttp.get({ url: Api.list, params });
-
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- * @param confirm
- */
-export const deleteBatch = (params, confirm = false) => {
-  return new Promise((resolve, reject) => {
-    const doDelete = () => {
-      resolve(defHttp.delete({ url: Api.deleteBatch, params }, { joinParamsToUrl: true }));
-    };
-    if (confirm) {
-      createConfirm({
-        iconType: 'warning',
-        title: '鍒犻櫎',
-        content: '纭畾瑕佸垹闄ゅ悧锛�',
-        onOk: () => doDelete(),
-        onCancel: () => reject(),
-      });
-    } else {
-      doDelete();
-    }
-  });
-};
-
-/**
- * 淇濆瓨鎴栬�呮洿鏀规秷鎭ā鏉�
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  if (unref(isUpdate)) {
-    return defHttp.put({ url: Api.edit, params });
-  } else {
-    return defHttp.post({ url: Api.save, params });
-  }
-};
-
-/**
- * 鍙戦�佹秷鎭祴璇�
- * @param params
- */
-export const sendMessageTest = (params) => defHttp.post({ url: Api.send, params });
diff --git a/src/views/system/message/template/template.data.ts b/src/views/system/message/template/template.data.ts
deleted file mode 100644
index 005a2db..0000000
--- a/src/views/system/message/template/template.data.ts
+++ /dev/null
@@ -1,185 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-import { rules } from '/@/utils/helper/validator';
-import { filterDictTextByCache } from '/@/utils/dict/JDictSelectUtil';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '妯℃澘鏍囬',
-    dataIndex: 'templateName',
-    width: 80,
-  },
-  {
-    title: '妯℃澘缂栫爜',
-    dataIndex: 'templateCode',
-    width: 100,
-  },
-  {
-    title: '閫氱煡妯℃澘',
-    dataIndex: 'templateContent',
-    width: 150,
-  },
-  {
-    title: '妯℃澘绫诲瀷',
-    dataIndex: 'templateType',
-    width: 100,
-    customRender: ({ text }) => filterDictTextByCache('msgType', text),
-  },
-  {
-    title: '鏄惁搴旂敤',
-    dataIndex: 'useStatus',
-    width: 90,
-    customRender: function ({ text }) {
-      if (text == '1') {
-        return '鏄�';
-      } else {
-        return '鍚�';
-      }
-    },
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    label: '妯℃澘鏍囬',
-    field: 'templateName',
-    component: 'Input',
-  },
-  {
-    label: '妯℃澘缂栫爜',
-    field: 'templateCode',
-    component: 'Input',
-  },
-  {
-    label: '妯℃澘绫诲瀷',
-    field: 'templateType',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'msgType',
-    },
-  },
-];
-
-export const formSchemas: FormSchema[] = [
-  {
-    label: 'ID',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '妯℃澘鏍囬',
-    field: 'templateName',
-    component: 'Input',
-    required: true,
-  },
-  {
-    label: '妯℃澘缂栫爜',
-    field: 'templateCode',
-    component: 'Input',
-    dynamicRules: ({ model, schema }) => {
-      return [ ...rules.duplicateCheckRule('sys_sms_template', 'template_code', model, schema, true)];
-    },
-    // 缂栬緫妯″紡涓嬩笉鍙慨鏀圭紪鐮�
-    dynamicDisabled: (params) => !!params.values.id,
-  },
-  {
-    label: '妯℃澘绫诲瀷',
-    field: 'templateType',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'msgType',
-      placeholder: '璇烽�夋嫨妯℃澘绫诲瀷',
-    },
-    required: true,
-  },
-  {
-    label: '鏄惁搴旂敤',
-    field: 'useStatus',
-    component: 'JSwitch',
-    componentProps: {
-      options: ['1', '0'],
-    },
-  },
-  {
-    label: '妯℃澘鍐呭',
-    field: 'templateContent',
-    component: 'InputTextArea',
-    componentProps: {
-      autoSize: {
-        minRows: 8,
-        maxRows: 8,
-      },
-    },
-    ifShow: ({ values }) => {
-      return !['2', '4', '5'].includes(values.templateType);
-    },
-  },
-
-  {
-    label: '妯℃澘鍐呭',
-    field: 'templateContent',
-    component: 'JEditor',
-    ifShow: ({ values }) => {
-      return ['2', '4'].includes(values.templateType);
-    },
-  },
-  {
-    label: '妯℃澘鍐呭',
-    field: 'templateContent',
-    component: 'JMarkdownEditor',
-    ifShow: ({ values }) => {
-      return ['5'].includes(values.templateType);
-    },
-  },
-];
-
-export const sendTestFormSchemas: FormSchema[] = [
-  {
-    label: '妯℃澘缂栫爜',
-    field: 'templateCode',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '妯℃澘鏍囬',
-    field: 'templateName',
-    component: 'Input',
-    componentProps: { disabled: true },
-  },
-  {
-    label: '妯℃澘鍐呭',
-    field: 'templateContent',
-    component: 'InputTextArea',
-    componentProps: { disabled: true, rows: 5 },
-  },
-  {
-    label: '娴嬭瘯鏁版嵁',
-    field: 'testData',
-    component: 'InputTextArea',
-    required: true,
-    helpMessage: 'JSON鏁版嵁',
-    defaultValue: '{}',
-    componentProps: {
-      placeholder: '璇疯緭鍏SON鏍煎紡娴嬭瘯鏁版嵁',
-      rows: 5,
-    },
-  },
-  {
-    label: '娑堟伅绫诲瀷',
-    field: 'msgType',
-    component: 'JDictSelectTag',
-    required: true,
-    defaultValue:'system',
-    componentProps: { dictCode: 'messageType',type:'radio' },
-  },
-  {
-    label: '娑堟伅鎺ユ敹鏂�',
-    field: 'receiver',
-    required: true,
-    component: 'JSelectUser',
-    componentProps: {
-      labelKey: 'username',
-      rowKey: 'username',
-    },
-  },
-];
diff --git a/src/views/system/notice/DetailModal.vue b/src/views/system/notice/DetailModal.vue
deleted file mode 100644
index 7497e73..0000000
--- a/src/views/system/notice/DetailModal.vue
+++ /dev/null
@@ -1,24 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="鏌ョ湅璇︽儏" :showCancelBtn="false" :showOkBtn="false" :height="500">
-    <iframe :src="frameSrc" class="detail-iframe" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { propTypes } from '/@/utils/propTypes';
-  // 鑾峰彇props
-  defineProps({
-    frameSrc: propTypes.string.def(''),
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal] = useModalInner();
-</script>
-
-<style scoped lang="less">
-  .detail-iframe {
-    border: 0;
-    width: 100%;
-    height: 100%;
-    min-height: 500px;
-  }
-</style>
diff --git a/src/views/system/notice/NoticeModal.vue b/src/views/system/notice/NoticeModal.vue
deleted file mode 100644
index 84bc9e3..0000000
--- a/src/views/system/notice/NoticeModal.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit" width="900px" destroyOnClose>
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './notice.data';
-  import { saveOrUpdate } from './notice.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      if (data.record.userIds) {
-        data.record.userIds = data.record.userIds.substring(0, data.record.userIds.length - 1);
-      }
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-  //璁剧疆鏍囬
-  const title = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit(v) {
-    try {
-      let values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      values.userIds += ',';
-      await saveOrUpdate(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/notice/index.vue b/src/views/system/notice/index.vue
deleted file mode 100644
index e324a64..0000000
--- a/src/views/system/notice/index.vue
+++ /dev/null
@@ -1,168 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #tableTitle>
-        <a-button preIcon="ant-design:plus-outlined" type="primary" @click="handleAdd">鏂板</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon style="fontsize: 12px" icon="ant-design:down-outlined"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getActions(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-    </BasicTable>
-    <NoticeModal @register="registerModal" @success="reload" />
-    <DetailModal @register="register" :frameSrc="iframeUrl" />
-  </div>
-</template>
-<script lang="ts" name="system-notice" setup>
-  import { ref } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import NoticeModal from './NoticeModal.vue';
-  import DetailModal from './DetailModal.vue';
-  import { useMethods } from '/@/hooks/system/useMethods';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { getToken } from '/@/utils/auth';
-  import { columns, searchFormSchema } from './notice.data';
-  import { getList, deleteNotice, batchDeleteNotice, getExportUrl, getImportUrl, doReleaseData, doReovkeData } from './notice.api';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  const glob = useGlobSetting();
-  const [registerModal, { openModal }] = useModal();
-  const [register, { openModal: openDetail }] = useModal();
-  const iframeUrl = ref('');
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, onExportXls, onImportXls, tableContext, doRequest } = useListPage({
-    designScope: 'notice-template',
-    tableProps: {
-      title: '娑堟伅閫氱煡',
-      api: getList,
-      columns: columns,
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-    },
-    exportConfig: {
-      name: '娑堟伅閫氱煡鍒楄〃',
-      url: getExportUrl,
-    },
-    importConfig: {
-      url: getImportUrl,
-    },
-  });
-
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleAdd() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  function handleEdit(record) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteNotice({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    doRequest(() => batchDeleteNotice({ ids: selectedRowKeys.value }));
-  }
-  /**
-   * 鍙戝竷
-   */
-  async function handleRelease(id) {
-    await doReleaseData({ id });
-    reload();
-  }
-  /**
-   * 鎾ら攢
-   */
-  async function handleReovke(id) {
-    await doReovkeData({ id });
-    reload();
-  }
-  /**
-   * 鏌ョ湅
-   */
-  function handleDetail(record) {
-    iframeUrl.value = `${glob.uploadUrl}/sys/annountCement/show/${record.id}?token=${getToken()}`;
-    openDetail(true);
-  }
-  /**
-   * 鎿嶄綔鍒楀畾涔�
-   * @param record
-   */
-  function getActions(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-        ifShow: record.sendStatus == 0,
-      },
-    ];
-  }
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record) {
-    return [
-      {
-        label: '鍒犻櫎',
-        ifShow: record.sendStatus != 1,
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-      {
-        label: '鍙戝竷',
-        ifShow: record.sendStatus == 0,
-        onClick: handleRelease.bind(null, record.id),
-      },
-      {
-        label: '鎾ら攢',
-        ifShow: record.sendStatus == 1,
-        popConfirm: {
-          title: '纭畾瑕佹挙閿�鍚楋紵',
-          confirm: handleReovke.bind(null, record.id),
-        },
-      },
-      {
-        label: '鏌ョ湅',
-        onClick: handleDetail.bind(null, record),
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/notice/notice.api.ts b/src/views/system/notice/notice.api.ts
deleted file mode 100644
index 3e9fdc8..0000000
--- a/src/views/system/notice/notice.api.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  list = '/sys/annountCement/list',
-  save = '/sys/annountCement/add',
-  edit = '/sys/annountCement/edit',
-  delete = '/sys/annountCement/delete',
-  deleteBatch = '/sys/annountCement/deleteBatch',
-  exportXls = '/sys/annountCement/exportXls',
-  importExcel = '/sys/annountCement/importExcel',
-  releaseData = '/sys/annountCement/doReleaseData',
-  reovkeData = '/sys/annountCement/doReovkeData',
-}
-
-/**
- * 瀵煎嚭url
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆url
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鏌ヨ绉熸埛鍒楄〃
- * @param params
- */
-export const getList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
-
-/**
- * 淇濆瓨鎴栬�呮洿鏂伴�氬憡
- * @param params
- */
-export const saveOrUpdate = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-
-/**
- * 鍒犻櫎閫氬憡
- * @param params
- */
-export const deleteNotice = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.delete, data: params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 鎵归噺娑堟伅鍏憡
- * @param params
- */
-export const batchDeleteNotice = (params) => defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true });
-
-/**
- * 鍙戝竷
- * @param id
- */
-export const doReleaseData = (params) => defHttp.get({ url: Api.releaseData, params });
-/**
- * 鎾ら攢
- * @param id
- */
-export const doReovkeData = (params) => defHttp.get({ url: Api.reovkeData, params });
diff --git a/src/views/system/notice/notice.data.ts b/src/views/system/notice/notice.data.ts
deleted file mode 100644
index 10ccbb8..0000000
--- a/src/views/system/notice/notice.data.ts
+++ /dev/null
@@ -1,156 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-import { rules } from '/@/utils/helper/validator';
-import { render } from '/@/utils/common/renderUtils';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鏍囬',
-    width: 150,
-    dataIndex: 'titile',
-  },
-  {
-    title: '娑堟伅绫诲瀷',
-    dataIndex: 'msgCategory',
-    width: 100,
-    customRender: ({ text }) => {
-      return render.renderDict(text, 'msg_category');
-    },
-  },
-  {
-    title: '鍙戝竷浜�',
-    width: 100,
-    dataIndex: 'sender',
-  },
-  {
-    title: '浼樺厛绾�',
-    dataIndex: 'priority',
-    width: 70,
-    customRender: ({ text }) => {
-      const color = text == 'L' ? 'blue' : text == 'M' ? 'yellow' : 'red';
-      return render.renderTag(render.renderDict(text, 'priority'), color);
-    },
-  },
-  {
-    title: '閫氬憡瀵硅薄',
-    dataIndex: 'msgType',
-    width: 100,
-    customRender: ({ text }) => {
-      return render.renderDict(text, 'msg_type');
-    },
-  },
-  {
-    title: '鍙戝竷鐘舵��',
-    dataIndex: 'sendStatus',
-    width: 70,
-    customRender: ({ text }) => {
-      const color = text == '0' ? 'red' : text == '1' ? 'green' : 'gray';
-      return render.renderTag(render.renderDict(text, 'send_status'), color);
-    },
-  },
-  {
-    title: '鍙戝竷鏃堕棿',
-    width: 100,
-    dataIndex: 'sendTime',
-  },
-  {
-    title: '鎾ら攢鏃堕棿',
-    width: 100,
-    dataIndex: 'cancelTime',
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'titile',
-    label: '鏍囬',
-    component: 'JInput',
-    colProps: { span: 8 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'id',
-    label: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'msgCategory',
-    label: '娑堟伅绫诲瀷',
-    required: true,
-    component: 'JDictSelectTag',
-    defaultValue: '1',
-    componentProps: {
-      type: 'radio',
-      dictCode: 'msg_category',
-      placeholder: '璇烽�夋嫨绫诲瀷',
-    },
-  },
-  {
-    field: 'titile',
-    label: '鏍囬',
-    component: 'Input',
-    required: true,
-    componentProps: {
-      placeholder: '璇疯緭鍏ユ爣棰�',
-    },
-  },
-  {
-    field: 'msgAbstract',
-    label: '鎽樿',
-    component: 'InputTextArea',
-    required: true,
-  },
-  {
-    field: 'endTime',
-    label: '鎴嚦鏃ユ湡',
-    component: 'DatePicker',
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      placeholder: '璇烽�夋嫨鎴嚦鏃ユ湡',
-    },
-    dynamicRules: ({ model }) => rules.endTime(model.startTime, true),
-  },
-  {
-    field: 'msgType',
-    label: '鎺ユ敹鐢ㄦ埛',
-    defaultValue: 'ALL',
-    component: 'JDictSelectTag',
-    required: true,
-    componentProps: {
-      type: 'radio',
-      dictCode: 'msg_type',
-      placeholder: '璇烽�夋嫨鍙戝竷鑼冨洿',
-    },
-  },
-  {
-    field: 'userIds',
-    label: '鎸囧畾鐢ㄦ埛',
-    component: 'JSelectUser',
-    required: true,
-    componentProps: {
-      rowKey: 'id',
-      labelKey: 'username',
-    },
-    ifShow: ({ values }) => values.msgType == 'USER',
-  },
-  {
-    field: 'priority',
-    label: '浼樺厛绾�',
-    defaultValue: 'H',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'priority',
-      type: 'radio',
-      placeholder: '璇烽�夋嫨浼樺厛绾�',
-    },
-  },
-  {
-    field: 'msgContent',
-    label: '鍐呭',
-    component: 'Input',
-    render: render.renderTinymce,
-  },
-];
diff --git a/src/views/system/onlineuser/OnlineUser.api.ts b/src/views/system/onlineuser/OnlineUser.api.ts
deleted file mode 100644
index e7438dc..0000000
--- a/src/views/system/onlineuser/OnlineUser.api.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  list = '/sys/online/list',
-  forceLogout = '/sys/online/forceLogout'
-}
-
-/**
- * 鍒楄〃
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-
-/**
- * 鎵归噺鍒犻櫎瑙掕壊
- * @param params
- */
-export const forceLogout = (params) => {
-  return defHttp.post({url:Api.forceLogout,params},{isTransformResponse:false})
-};
diff --git a/src/views/system/onlineuser/OnlineUser.data.ts b/src/views/system/onlineuser/OnlineUser.data.ts
deleted file mode 100644
index bf6f8eb..0000000
--- a/src/views/system/onlineuser/OnlineUser.data.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { FormSchema } from '/@/components/Table';
-import { render } from "/@/utils/common/renderUtils";
-import { getToken } from '/@/utils/auth';
-
-//鍒楄〃
-export const columns = [
-  {
-    title:'鐢ㄦ埛璐﹀彿',
-    align:"center",
-    dataIndex: 'username',
-    customRender: ( {text,record} ) => {
-      let token = getToken();
-      if(record.token === token) {
-        return text + '锛堟垜锛�'
-      }
-      return text
-    },
-  },{
-    title:'鐢ㄦ埛濮撳悕',
-    align:"center",
-    dataIndex: 'realname'
-  },{
-    title: '澶村儚',
-    align: "center",
-    width: 120,
-    dataIndex: 'avatar',
-    customRender: render.renderAvatar,
-  },{
-    title:'鐢熸棩',
-    align:"center",
-    dataIndex: 'birthday'
-  },{
-    title: '鎬у埆',
-    align: "center",
-    dataIndex: 'sex',
-    customRender: ({text}) => {
-      return render.renderDict(text, 'sex');
-    }
-  },{
-    title:'鎵嬫満鍙�',
-    align:"center",
-    dataIndex: 'phone'
-  }
-];
-
-//鏌ヨ鍖哄煙
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'username',
-    label: '鐢ㄦ埛璐﹀彿',
-    component: 'Input',
-    colProps: { span: 6 },
-  }
-];
diff --git a/src/views/system/onlineuser/OnlineUserList.vue b/src/views/system/onlineuser/OnlineUserList.vue
deleted file mode 100644
index ffe0b13..0000000
--- a/src/views/system/onlineuser/OnlineUserList.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-<template>
-  <BasicTable @register="registerTable" :rowSelection="rowSelection">
-    <template #action="{ record }">
-      <TableAction :actions="getTableAction(record)" />
-    </template>
-  </BasicTable>
-</template>
-
-<script lang="ts" name="online-user" setup>
-import { BasicTable, TableAction } from '/@/components/Table';
-import { columns, searchFormSchema } from './OnlineUser.data';
-import { list, forceLogout } from './OnlineUser.api';
-import { useListPage } from '/@/hooks/system/useListPage';
-import { useMessage } from "/@/hooks/web/useMessage";
-// 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-const { prefixCls, tableContext, onImportXls, onExportXls } = useListPage({
-  designScope: 'online-user',
-  tableProps: {
-    title: '鍦ㄧ嚎鐢ㄦ埛',
-    api: list,
-    columns: columns,
-    formConfig: {
-      schemas: searchFormSchema,
-    },
-    actionColumn: {
-      width: 120,
-    },
-    rowSelection: null,
-  },
-});
-const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-const $message = useMessage();
-
-//鎿嶄綔鏍�
-function getTableAction(record) {
-  return [
-    {
-      label: '寮洪��',
-      popConfirm: {
-        title: '寮哄埗閫�鍑虹敤鎴凤紵',
-        confirm: handleForce.bind(null, record),
-      },
-    },
-  ];
-}
-
-/**
- * 寮洪��
- * @param record
- */
-function handleForce(record) {
-   forceLogout({ token: record.token }).then((res)=>{
-     if(res.success){
-       reload();
-       $message.createMessage.success('寮哄埗閫�鍑虹敤鎴封��'+record.realname+'鈥滄垚鍔燂紒');
-     }else{
-       $message.createMessage.warn(res.message);
-     }
-   })
-}
-</script>
-
-<style scoped>
-
-</style>
\ No newline at end of file
diff --git a/src/views/system/ossfile/index.vue b/src/views/system/ossfile/index.vue
deleted file mode 100644
index ab95eac..0000000
--- a/src/views/system/ossfile/index.vue
+++ /dev/null
@@ -1,154 +0,0 @@
-<template>
-  <div>
-    <!--寮曠敤琛ㄦ牸-->
-    <BasicTable @register="registerTable">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-upload name="file" :showUploadList="false" :action="ossAction" :headers="tokenHeader" :beforeUpload="beforeUpload" @change="handleChange">
-          <a-button type="primary" preIcon="ant-design:upload-outlined">OSS鏂囦欢涓婁紶</a-button>
-        </a-upload>
-        <a-upload
-          name="file"
-          :showUploadList="false"
-          :action="minioAction"
-          :headers="tokenHeader"
-          :beforeUpload="beforeUpload"
-          @change="handleChange"
-        >
-          <a-button type="primary" preIcon="ant-design:upload-outlined">MINIO鏂囦欢涓婁紶</a-button>
-        </a-upload>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-  </div>
-</template>
-
-<script lang="ts" name="system-ossfile" setup>
-  //ts璇硶
-  import { ref, computed, unref } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { columns, searchFormSchema } from './ossfile.data';
-  import { list, deleteFile, getOssUrl, getMinioUrl } from './ossfile.api';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { getToken } from '/@/utils/auth';
-
-  const { createMessage } = useMessage();
-  const glob = useGlobSetting();
-  const tokenHeader = { 'X-Access-Token': getToken() };
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload }] = useTable({
-    api: list,
-    rowKey: 'id',
-    columns,
-    formConfig: {
-      labelWidth: 120,
-      schemas: searchFormSchema,
-      autoSubmitOnEnter: true,
-    },
-    striped: true,
-    useSearchForm: true,
-    showTableSetting: true,
-    clickToRowSelect: false,
-    bordered: true,
-    showIndexColumn: false,
-    tableSetting: { fullScreen: true },
-    beforeFetch: (params) => {
-      return Object.assign({ column: 'createTime', order: 'desc' }, params);
-    },
-    actionColumn: {
-      width: 80,
-      title: '鎿嶄綔',
-      dataIndex: 'action',
-      slots: { customRender: 'action' },
-      fixed: undefined,
-    },
-  });
-  /**
-   * 涓婁紶url
-   */
-  const ossAction = computed(() => `${glob.uploadUrl}${getOssUrl}`);
-  const minioAction = computed(() => `${glob.uploadUrl}${getMinioUrl}`);
-
-  /**
-   * 棰勮
-   */
-  function handleView(record) {
-    if (record && record.url) {
-      console.log('glob.onlineUrl', glob.viewUrl);
-      let filePath = encodeURIComponent(record.url);
-      //鏂囨。閲囩敤pdf棰勮楂樼骇妯″紡
-      if(filePath.endsWith(".pdf") || filePath.endsWith(".doc") || filePath.endsWith(".docx")){
-        filePath = filePath + '&officePreviewType=pdf'
-      }
-      let url = `${glob.viewUrl}?url=` + filePath;
-      window.open(url, '_blank');
-    }
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteFile({ id: record.id }, reload);
-  }
-
-  /**
-   * 涓婁紶鍓嶄簨浠�
-   */
-  function beforeUpload(file) {
-    var fileType = file.type;
-    if (fileType === 'image') {
-      if (fileType.indexOf('image') < 0) {
-        createMessage.warning('璇蜂笂浼犲浘鐗�');
-        return false;
-      }
-    } else if (fileType === 'file') {
-      if (fileType.indexOf('image') >= 0) {
-        createMessage.warning('璇蜂笂浼犳枃浠�');
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * 鏂囦欢涓婁紶浜嬩欢
-   */
-  function handleChange(info) {
-    if (info.file.status === 'done') {
-      if (info.file.response.success) {
-        reload();
-        createMessage.success(`${info.file.name} 涓婁紶鎴愬姛!`);
-      } else {
-        createMessage.error(`${info.file.response.message}`);
-      }
-    } else if (info.file.status === 'error') {
-      createMessage.error(`${info.file.response.message}`);
-    }
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '棰勮',
-        onClick: handleView.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/system/ossfile/ossfile.api.ts b/src/views/system/ossfile/ossfile.api.ts
deleted file mode 100644
index fe08466..0000000
--- a/src/views/system/ossfile/ossfile.api.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-
-enum Api {
-  list = '/sys/oss/file/list',
-  deleteFile = '/sys/oss/file/delete',
-  ossUpload = '/sys/oss/file/upload',
-  minioUpload = '/sys/upload/uploadMinio',
-}
-
-/**
- * oss涓婁紶
- * @param params
- */
-export const getOssUrl = Api.ossUpload;
-/**
- * minio涓婁紶
- * @param params
- */
-export const getMinioUrl = Api.minioUpload;
-/**
- * 鍒楄〃鎺ュ彛
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-
-/**
- * 鍒犻櫎鐢ㄦ埛
- */
-export const deleteFile = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteFile, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
diff --git a/src/views/system/ossfile/ossfile.data.ts b/src/views/system/ossfile/ossfile.data.ts
deleted file mode 100644
index abd0839..0000000
--- a/src/views/system/ossfile/ossfile.data.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鏂囦欢鍚嶇О',
-    dataIndex: 'fileName',
-    width: 120,
-  },
-  {
-    title: '鏂囦欢鍦板潃',
-    dataIndex: 'url',
-    width: 100,
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    label: '鏂囦欢鍚嶇О',
-    field: 'fileName',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '鏂囦欢鍦板潃',
-    field: 'url',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-];
diff --git a/src/views/system/position/PositionModal.vue b/src/views/system/position/PositionModal.vue
deleted file mode 100644
index 86ab21a..0000000
--- a/src/views/system/position/PositionModal.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" :width="700">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './position.data';
-  import { saveOrUpdatePosition, getPositionById } from './position.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    //labelWidth: 150,
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      //鑾峰彇璇︽儏
-      data.record = await getPositionById({ id: data.record.id });
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    }
-  });
-  //璁剧疆鏍囬
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板鑱屽姟' : '缂栬緫鑱屽姟'));
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdatePosition(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/position/index.vue b/src/views/system/position/index.vue
deleted file mode 100644
index 0c7a291..0000000
--- a/src/views/system/position/index.vue
+++ /dev/null
@@ -1,116 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #tableTitle>
-        <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleAdd">鏂板</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="ant-design:down-outlined"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getActions(record)" />
-      </template>
-    </BasicTable>
-    <PositionModal @register="registerModal" @success="reload" />
-  </div>
-</template>
-<script lang="ts" name="system-position" setup>
-  import { ref } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import { getPositionList, deletePosition, batchDeletePosition, customUpload, getExportUrl, getImportUrl } from './position.api';
-  import { columns, searchFormSchema } from './position.data';
-  import PositionModal from './PositionModal.vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  const { createMessage } = useMessage();
-  const [registerModal, { openModal }] = useModal();
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, onExportXls, onImportXls, tableContext } = useListPage({
-    designScope: 'position-template',
-    tableProps: {
-      title: '鑱屽姟鍒楄〃',
-      api: getPositionList,
-      columns: columns,
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-    },
-    exportConfig: {
-      name: '鑱屽姟鍒楄〃',
-      url: getExportUrl,
-    },
-    importConfig: {
-      url: getImportUrl,
-    },
-  });
-
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鎿嶄綔鍒楀畾涔�
-   * @param record
-   */
-  function getActions(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleAdd() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  function handleEdit(record) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deletePosition({ id: record.id }, reload);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeletePosition({ ids: selectedRowKeys.value }, reload);
-  }
-</script>
diff --git a/src/views/system/position/position.api.ts b/src/views/system/position/position.api.ts
deleted file mode 100644
index 5e5e58b..0000000
--- a/src/views/system/position/position.api.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/sys/position/list',
-  save = '/sys/position/add',
-  edit = '/sys/position/edit',
-  get = '/sys/position/queryById',
-  delete = '/sys/position/delete',
-  importExcel = '/sys/position/importExcel',
-  exportXls = '/sys/position/exportXls',
-  deleteBatch = '/sys/position/deleteBatch',
-}
-/**
- * 瀵煎嚭api
- */
-export const getExportUrl = Api.exportXls;
-
-export const getImportUrl = Api.importExcel;
-/**
- * 鏌ヨ鍒楄〃
- * @param params
- */
-export const getPositionList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
-
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- */
-export const saveOrUpdatePosition = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-
-/**
- * 鏌ヨ璇︽儏
- * @param params
- */
-export const getPositionById = (params) => {
-  return defHttp.get({ url: Api.get, params });
-};
-
-/**
- * 鍗曟潯鍒犻櫎
- * @param params
- */
-export const deletePosition = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.delete, data: params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 鎵归噺鍒犻櫎
- * @param params
- */
-export const batchDeletePosition = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-
-/**
- * 鑷畾涔変笂浼�
- * @param customUpload
- */
-export const customUpload = (params) => {
-  defHttp.uploadFile({ url: Api.importExcel }, params);
-};
diff --git a/src/views/system/position/position.data.ts b/src/views/system/position/position.data.ts
deleted file mode 100644
index cec59e2..0000000
--- a/src/views/system/position/position.data.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-import { rules } from '/@/utils/helper/validator';
-
-export const columns: BasicColumn[] = [
-  {
-    title: '鑱屽姟缂栫爜',
-    dataIndex: 'code',
-    width: 200,
-    align: 'left',
-  },
-  {
-    title: '鑱屽姟鍚嶇О',
-    dataIndex: 'name',
-    width: 200,
-  },
-  {
-    title: '鑱屽姟绛夌骇',
-    dataIndex: 'postRank_dictText',
-    width: 100,
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'name',
-    label: '鑱屽姟鍚嶇О',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    label: '涓婚敭',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '鑱岀骇',
-    field: 'postRank',
-    component: 'JDictSelectTag',
-    required: true,
-    componentProps: {
-      dictCode: 'position_rank',
-      dropdownStyle: {
-        maxHeight: '100vh',
-      },
-      getPopupContainer: () => document.body,
-    },
-  },
-  {
-    field: 'name',
-    label: '鑱屽姟鍚嶇О',
-    component: 'Input',
-    required: true,
-  },
-  {
-    field: 'code',
-    label: '鑱屽姟缂栫爜',
-    component: 'Input',
-    required: true,
-    dynamicDisabled: ({ values }) => {
-      return !!values.id;
-    },
-    dynamicRules: ({ model, schema }) => {
-      return rules.duplicateCheckRule('sys_position', 'code', model, schema, true);
-    },
-  },
-];
diff --git a/src/views/system/role/TenantRoleList.vue b/src/views/system/role/TenantRoleList.vue
deleted file mode 100644
index 39ea19b..0000000
--- a/src/views/system/role/TenantRoleList.vue
+++ /dev/null
@@ -1,160 +0,0 @@
-<template>
-  <BasicTable @register="registerTable">
-    <template #tableTitle>
-      <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 鏂板</a-button>
-      <a-dropdown v-if="selectedRowKeys.length > 0">
-        <template #overlay>
-          <a-menu>
-            <a-menu-item key="1" @click="batchHandleDelete">
-              <Icon icon="ant-design:delete-outlined"></Icon>
-              鍒犻櫎
-            </a-menu-item>
-          </a-menu>
-        </template>
-        <a-button
-          >鎵归噺鎿嶄綔
-          <Icon icon="mdi:chevron-down"></Icon>
-        </a-button>
-      </a-dropdown>
-    </template>
-    <template #action="{ record }">
-      <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-    </template>
-  </BasicTable>
-  <!--瑙掕壊鐢ㄦ埛琛ㄦ牸-->
-  <RoleUserTable @register="roleUserDrawer" :disableUserEdit="true"/>
-  <!--瑙掕壊缂栬緫鎶藉眽-->
-  <RoleDrawer @register="registerDrawer" @success="reload" :showFooter="showFooter" />
-  <!--瑙掕壊璇︽儏-->
-  <RoleDesc @register="registerDesc"></RoleDesc>
-</template>
-<script lang="ts" name="system-role" setup>
-  import { ref } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { useDrawer } from '/@/components/Drawer';
-  import { useModal } from '/@/components/Modal';
-  import RoleDesc from './components/RoleDesc.vue';
-  import RoleDrawer from './components/RoleDrawer.vue';
-  import RoleUserTable from './components/RoleUserTable.vue';
-  import { columns, searchFormSchema } from './role.data';
-  import { listByTenant, deleteRole, batchDeleteRole, getExportUrl, getImportUrl } from './role.api';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  const showFooter = ref(true);
-  const [roleUserDrawer, { openDrawer: openRoleUserDrawer }] = useDrawer();
-  const [registerDrawer, { openDrawer }] = useDrawer();
-  const [registerModal, { openModal }] = useModal();
-  const [registerDesc, { openDrawer: openRoleDesc }] = useDrawer();
-  
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext, onImportXls, onExportXls } = useListPage({
-    designScope: 'role-template',
-    tableProps: {
-      title: '绉熸埛瑙掕壊鍒楄〃',
-      api: listByTenant,
-      columns: columns,
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-      actionColumn: {
-        width: 120,
-      },
-      rowSelection: null,
-      //鑷畾涔夐粯璁ゆ帓搴�
-      defSort: {
-        column: 'id',
-        order: 'desc',
-      },
-    },
-    exportConfig: {
-      name: '瑙掕壊鍒楄〃',
-      url: getExportUrl,
-    },
-    importConfig: {
-      url: getImportUrl,
-    },
-  });
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鏂板
-   */
-  function handleCreate() {
-    showFooter.value = true;
-    openDrawer(true, {
-      isUpdate: false,
-    });
-  }
-  /**
-   * 缂栬緫
-   */
-  function handleEdit(record: Recordable) {
-    showFooter.value = true;
-    openDrawer(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-  /**
-   * 璇︽儏
-   */
-  function handleDetail(record) {
-    showFooter.value = false;
-    openRoleDesc(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteRole({ id: record.id }, reload);
-  }
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeleteRole({ ids: selectedRowKeys.value }, reload);
-  }
-  /**
-   * 瑙掕壊鐢ㄦ埛
-   */
-  function handleUser(record) {
-    //onSelectChange(selectedRowKeys)
-    openRoleUserDrawer(true, record);
-  }
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '鐢ㄦ埛',
-        onClick: handleUser.bind(null, record),
-      },
-    ];
-  }
-
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '璇︽儏',
-        onClick: handleDetail.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/role/components/RoleDataRuleDrawer.vue b/src/views/system/role/components/RoleDataRuleDrawer.vue
deleted file mode 100644
index d5b0596..0000000
--- a/src/views/system/role/components/RoleDataRuleDrawer.vue
+++ /dev/null
@@ -1,85 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" title="鏁版嵁瑙勫垯閰嶇疆" width="450px" destroyOnClose>
-    <a-tabs defaultActiveKey="1">
-      <a-tab-pane tab="鏁版嵁瑙勫垯" key="1">
-        <a-checkbox-group v-model:value="dataRuleChecked" v-if="dataRuleList.length > 0">
-          <a-row>
-            <a-col :span="24" v-for="(item, index) in dataRuleList" :key="'dr' + index">
-              <a-checkbox :value="item.id">{{ item.ruleName }}</a-checkbox>
-            </a-col>
-
-            <a-col :span="24">
-              <div style="width: 100%; margin-top: 15px">
-                <a-button @click="saveDataRuleForRole" type="primary" size="small"> <Icon icon="ant-design:save-outlined"></Icon>鐐瑰嚮淇濆瓨</a-button>
-              </div>
-            </a-col>
-          </a-row>
-        </a-checkbox-group>
-        <div v-else><h3>鏃犻厤缃俊鎭�!</h3></div>
-      </a-tab-pane>
-    </a-tabs>
-  </BasicDrawer>
-</template>
-<script lang="ts" setup>
-  import { ref, unref } from 'vue';
-  import { BasicDrawer, useDrawerInner } from '/src/components/Drawer';
-  import { useMessage } from '/src/hooks/web/useMessage';
-  import { queryDataRule, saveDataRule } from '../role.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const { createMessage } = useMessage();
-  // 澹版槑鏁版嵁
-  const functionId = ref('');
-  const roleId = ref('');
-  const dataRuleList = ref([]);
-  const dataRuleChecked = ref([]);
-
-  /**
-   * 鏁版嵁
-   */
-  const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-    await reset();
-    setDrawerProps({ confirmLoading: false });
-    //鏉冮檺鐨刬d
-    functionId.value = data.functionId;
-    //瑙掕壊鐨刬d
-    roleId.value = data.roleId;
-    //鏌ヨ鏁版嵁
-    const res = await queryDataRule({ functionId: unref(functionId), roleId: unref(roleId) });
-    if (res.success) {
-      dataRuleList.value = res.result.datarule;
-      if (res.result.drChecked) {
-        dataRuleChecked.value = res.result.drChecked.split(',');
-      }
-    }
-  });
-
-  /**
-   * 閲嶇疆
-   */
-  function reset() {
-    functionId.value = '';
-    roleId.value = '';
-    dataRuleList.value = [];
-    dataRuleChecked.value = [];
-  }
-
-  /**
-   * 鎻愪氦
-   */
-  async function saveDataRuleForRole() {
-    if (!unref(dataRuleChecked) || unref(dataRuleChecked).length == 0) {
-      createMessage.warning('璇锋敞鎰忥紝鐜版湭鍕鹃�変换浣曟暟鎹潈闄�!');
-    }
-    let params = {
-      permissionId: unref(functionId),
-      roleId: unref(roleId),
-      dataRuleIds: unref(dataRuleChecked).join(','),
-    };
-    await saveDataRule(params);
-    //鍏抽棴寮圭獥
-    closeDrawer();
-    //鍒锋柊鍒楄〃
-    emit('success');
-  }
-</script>
diff --git a/src/views/system/role/components/RoleDesc.vue b/src/views/system/role/components/RoleDesc.vue
deleted file mode 100644
index 2a4edc6..0000000
--- a/src/views/system/role/components/RoleDesc.vue
+++ /dev/null
@@ -1,18 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" title="瑙掕壊璇︽儏" width="500px" destroyOnClose>
-    <Description :column="1" :data="roleData" :schema="formDescSchema" />
-  </BasicDrawer>
-</template>
-<script lang="ts" setup>
-  import { ref, useAttrs } from 'vue';
-  import { BasicDrawer, useDrawerInner } from '/src/components/Drawer';
-  import { formDescSchema } from '../role.data';
-  import { Description, useDescription } from '/@/components/Description/index';
-  const emit = defineEmits(['register']);
-  const attrs = useAttrs();
-  const roleData = ref({});
-  const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-    setDrawerProps({ confirmLoading: false });
-    roleData.value = data.record;
-  });
-</script>
diff --git a/src/views/system/role/components/RoleDrawer.vue b/src/views/system/role/components/RoleDrawer.vue
deleted file mode 100644
index 2d4c14e..0000000
--- a/src/views/system/role/components/RoleDrawer.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" :title="getTitle" width="500px" @ok="handleSubmit" destroyOnClose>
-    <BasicForm @register="registerForm" />
-  </BasicDrawer>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref, useAttrs } from 'vue';
-  import { BasicForm, useForm } from '/src/components/Form';
-  import { BasicDrawer, useDrawerInner } from '/src/components/Drawer';
-  import { BasicTree, TreeItem } from '/src/components/Tree';
-  import { formSchema } from '../role.data';
-  import { saveOrUpdateRole } from '../role.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const attrs = useAttrs();
-  const isUpdate = ref(true);
-  const [registerForm, { setProps, resetFields, setFieldsValue, validate }] = useForm({
-    labelWidth: 90,
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-  const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-    resetFields();
-    isUpdate.value = !!data?.isUpdate;
-    setDrawerProps({ confirmLoading: false });
-    if (unref(isUpdate)) {
-      setFieldsValue({
-        ...data.record,
-      });
-    }
-    //绂佺敤琛ㄥ崟
-    setProps({ disabled: !attrs.showFooter });
-  });
-  /**
-   * 鏍囬
-   */
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板瑙掕壊' : '缂栬緫瑙掕壊'));
-  /**
-   * 鎻愪氦
-   */
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      setDrawerProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateRole(values, isUpdate.value);
-      closeDrawer();
-      emit('success');
-    } finally {
-      setDrawerProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/role/components/RoleIndexModal.vue b/src/views/system/role/components/RoleIndexModal.vue
deleted file mode 100644
index 07b35d3..0000000
--- a/src/views/system/role/components/RoleIndexModal.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="棣栭〉閰嶇疆" @ok="handleSubmit" width="40%">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { roleIndexFormSchema } from '../role.data';
-  import { saveOrUpdateRoleIndex, queryIndexByCode } from '../role.api';
-  // Emits澹版槑
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    labelWidth: 150,
-    schemas: roleIndexFormSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    setFieldsValue({ roleCode: data.roleCode });
-    let res = await queryIndexByCode({ roleCode: data.roleCode });
-    isUpdate.value = !!res.result?.id;
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...res.result,
-      });
-    }
-  });
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit(v) {
-    try {
-      let values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateRoleIndex(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success', { isUpdate: isUpdate.value, values });
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
-
-<style lang="less" scoped></style>
diff --git a/src/views/system/role/components/RolePermissionDrawer.vue b/src/views/system/role/components/RolePermissionDrawer.vue
deleted file mode 100644
index 3fbe54b..0000000
--- a/src/views/system/role/components/RolePermissionDrawer.vue
+++ /dev/null
@@ -1,205 +0,0 @@
-<template>
-  <BasicDrawer v-bind="$attrs"
-               @register="registerDrawer"
-               width="650px"
-               destroyOnClose
-               showFooter>
-    <template #title>
-      瑙掕壊鏉冮檺閰嶇疆
-      <a-dropdown>
-        <Icon icon="ant-design:more-outlined" class="more-icon" />
-        <template #overlay>
-          <a-menu @click="treeMenuClick">
-            <a-menu-item key="checkAll">閫夋嫨鍏ㄩ儴</a-menu-item>
-            <a-menu-item key="cancelCheck">鍙栨秷閫夋嫨</a-menu-item>
-            <div class="line"></div>
-            <a-menu-item key="openAll">灞曞紑鍏ㄩ儴</a-menu-item>
-            <a-menu-item key="closeAll">鎶樺彔鍏ㄩ儴</a-menu-item>
-            <div class="line"></div>
-            <a-menu-item key="relation">灞傜骇鍏宠仈</a-menu-item>
-            <a-menu-item key="standAlone">灞傜骇鐙珛</a-menu-item>
-          </a-menu>
-        </template>
-      </a-dropdown>
-    </template>
-    <BasicTree ref="treeRef" checkable :treeData="treeData" :checkedKeys="checkedKeys" :expandedKeys="expandedKeys"
-      :selectedKeys="selectedKeys" :checkStrictly="checkStrictly" :clickRowToExpand="false" title="鎵�鎷ユ湁鐨勭殑鏉冮檺"
-      @check="onCheck" @select="onTreeNodeSelect">
-      <template #title="{ slotTitle, ruleFlag }">
-        {{ slotTitle }}
-        <Icon v-if="ruleFlag" icon="ant-design:align-left-outlined" style="margin-left: 5px; color: red"></Icon>
-      </template>
-    </BasicTree>
-    <!--鍙充笅瑙掓寜閽�-->
-    <template #footer>
-      <PopConfirmButton title="纭畾鏀惧純缂栬緫锛�" @confirm="closeDrawer" okText="纭畾" cancelText="鍙栨秷">鍙栨秷</PopConfirmButton>
-      <a-button @click="handleSubmit(false)" type="primary" :loading="loading" ghost
-        style="margin-right: 0.8rem">浠呬繚瀛�</a-button>
-      <a-button @click="handleSubmit(true)" type="primary" :loading="loading">淇濆瓨骞跺叧闂�</a-button>
-    </template>
-    <RoleDataRuleDrawer @register="registerDrawer1" />
-  </BasicDrawer>
-</template>
-<script lang="ts" setup>
-import { ref, computed, unref, onMounted } from 'vue'
-import { BasicDrawer, useDrawer, useDrawerInner } from '/src/components/Drawer'
-import { BasicTree, TreeItem } from '/src/components/Tree'
-import { PopConfirmButton } from '/@/components/Button'
-import RoleDataRuleDrawer from './RoleDataRuleDrawer.vue'
-import { queryTreeListForRole, queryRolePermission, saveRolePermission } from '../role.api'
-const emit = defineEmits(['register'])
-//鏍戠殑淇℃伅
-const treeData = ref<TreeItem[]>([])
-//鏍戠殑鍏ㄩ儴鑺傜偣淇℃伅
-const allTreeKeys = ref([])
-//鏍戠殑閫夋嫨鑺傜偣淇℃伅
-const checkedKeys = ref([])
-const defaultCheckedKeys = ref([])
-//鏍戠殑閫変腑鐨勮妭鐐逛俊鎭�
-const selectedKeys = ref([])
-const roleId = ref('')
-//鏍戠殑瀹炰緥
-const treeRef = ref(null)
-const loading = ref(false)
-
-//灞曞紑鎶樺彔鐨刱ey
-const expandedKeys = ref<any>([])
-//鐖跺瓙鑺傜偣閫変腑鐘舵�佹槸鍚﹀叧鑱�
-const checkStrictly = ref<boolean>(true)
-const [registerDrawer1, { openDrawer: openDataRuleDrawer }] = useDrawer()
-const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-  await reset()
-  setDrawerProps({ confirmLoading: false, loading: true })
-  roleId.value = data.roleId
-  //鍒濆鍖栨暟鎹�
-  const roleResult = await queryTreeListForRole()
-  treeData.value = roleResult.treeList
-  allTreeKeys.value = roleResult.ids
-  expandedKeys.value = roleResult.ids
-  //鍒濆鍖栬鑹茶彍鍗曟暟鎹�
-  const permResult = await queryRolePermission({ roleId: unref(roleId) })
-  checkedKeys.value = permResult
-  defaultCheckedKeys.value = permResult
-  setDrawerProps({ loading: false })
-})
-/**
- * 鐐瑰嚮閫変腑
- */
-function onCheck(o) {
-  checkedKeys.value = o.checked ? o.checked : o
-}
-/**
- * 閫変腑鑺傜偣锛屾墦寮�鏁版嵁鏉冮檺鎶藉眽
- */
-function onTreeNodeSelect(key) {
-  if (key && key.length > 0) {
-    selectedKeys.value = key
-  }
-  openDataRuleDrawer(true, { functionId: unref(selectedKeys)[0], roleId: unref(roleId) })
-}
-/**
- * 鏁版嵁閲嶇疆
- */
-function reset() {
-  treeData.value = []
-  allTreeKeys.value = []
-  checkedKeys.value = []
-  defaultCheckedKeys.value = []
-  selectedKeys.value = []
-  roleId.value = ''
-}
-/**
- * 鑾峰彇tree瀹炰緥
- */
-function getTree() {
-  const tree = unref(treeRef)
-  if (!tree) {
-    throw new Error('tree is null!')
-  }
-  return tree
-}
-/**
- * 鎻愪氦
- */
-async function handleSubmit(exit) {
-  let params = {
-    roleId: unref(roleId),
-    permissionIds: unref(getTree().getCheckedKeys()).join(','),
-    lastpermissionIds: unref(defaultCheckedKeys).join(','),
-  }
-  //update-begin-author:taoyan date:2023-2-11 for: issues/352 VUE瑙掕壊鎺堟潈閲嶅淇濆瓨
-  if (loading.value === false) {
-    await doSave(params)
-  } else {
-    console.log('璇风瓑寰呬笂娆℃墽琛屽畬姣�!')
-  }
-  if (exit) {
-    // 濡傛灉鍏抽棴
-    closeDrawer()
-  } else {
-    // 娌℃湁鍏抽棴闇�瑕侀噸鏂拌幏鍙栭�変腑鏁版嵁
-    const permResult = await queryRolePermission({ roleId: unref(roleId) })
-    defaultCheckedKeys.value = permResult
-  }
-}
-
-// VUE瑙掕壊鎺堟潈閲嶅淇濆瓨 #352
-async function doSave(params) {
-  loading.value = true
-  await saveRolePermission(params)
-  setTimeout(() => {
-    loading.value = false
-  }, 500)
-}
-//update-end-author:taoyan date:2023-2-11 for: issues/352 VUE瑙掕壊鎺堟潈閲嶅淇濆瓨
-
-/**
- * 鏍戣彍鍗曢�夋嫨
- * @param key
- */
-function treeMenuClick({ key }) {
-  if (key === 'checkAll') {
-    checkedKeys.value = allTreeKeys.value
-  } else if (key === 'cancelCheck') {
-    checkedKeys.value = []
-  } else if (key === 'openAll') {
-    expandedKeys.value = allTreeKeys.value
-  } else if (key === 'closeAll') {
-    expandedKeys.value = []
-  } else if (key === 'relation') {
-    checkStrictly.value = false
-  } else {
-    checkStrictly.value = true
-  }
-}
-</script>
-
-<style lang="less" scoped>
-/** 鍥哄畾鎿嶄綔鎸夐挳 */
-.jeecg-basic-tree {
-  position: absolute;
-  width: 618px;
-}
-
-//update-begin---author:wangshuai ---date:20230202  for锛氭娊灞夊脊绐楁爣棰樺浘鏍囦笅鎷夋牱寮�------------
-.line {
-  height: 1px;
-  width: 100%;
-  border-bottom: 1px solid #f0f0f0;
-}
-
-.more-icon {
-  font-size: 20px !important;
-  color: black;
-  display: inline-flex;
-  float: right;
-  margin-right: 2px;
-  cursor: pointer;
-}
-
-:deep(.jeecg-tree-header) {
-  border-bottom: none;
-}
-
-//update-end---author:wangshuai ---date:20230202  for锛氭娊灞夊脊绐楁爣棰樺浘鏍囦笅鎷夋牱寮�------------
-</style>
diff --git a/src/views/system/role/components/RoleUserTable.vue b/src/views/system/role/components/RoleUserTable.vue
deleted file mode 100644
index e9c8a16..0000000
--- a/src/views/system/role/components/RoleUserTable.vue
+++ /dev/null
@@ -1,185 +0,0 @@
-<template>
-  <BasicDrawer @register="registerBaseDrawer" title="瑙掕壊鐢ㄦ埛" width="800" destroyOnClose>
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #tableTitle>
-        <a-button type="primary" @click="handleCreate" v-if="!disableUserEdit"> 鏂板鐢ㄦ埛</a-button>
-        <a-button type="primary" @click="handleSelect"> 宸叉湁鐢ㄦ埛</a-button>
-
-        <a-dropdown v-if="checkedKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="bx:bx-unlink"></Icon>
-                鍙栨秷鍏宠仈
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="ant-design:down-outlined"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-    <!--鐢ㄦ埛鎿嶄綔鎶藉眽-->
-    <UserDrawer @register="registerDrawer" @success="handleSuccess" />
-    <!--鐢ㄦ埛閫夋嫨寮圭獥-->
-    <UseSelectModal @register="registerModal" @select="selectOk" />
-  </BasicDrawer>
-</template>
-<script lang="ts" setup>
-  import { ref, defineProps, watch, unref } from 'vue';
-  import { BasicTable, useTable, TableAction } from '/src/components/Table';
-  import { BasicDrawer, useDrawer, useDrawerInner } from '/src/components/Drawer';
-  import { useModal } from '/src/components/Modal';
-  import UserDrawer from '../../user/UserDrawer.vue';
-  import UseSelectModal from './UseSelectModal.vue';
-  import { userList, deleteUserRole, batchDeleteUserRole, addUserRole } from '../role.api';
-  import { userColumns, searchUserFormSchema } from '../role.data';
-  import { getUserRoles } from '../../user/user.api';
-
-  const emit = defineEmits(['register', 'hideUserList']);
-  const props = defineProps({
-    disableUserEdit: {type:Boolean,default:false}
-  })
-  
-  const checkedKeys = ref<Array<string | number>>([]);
-  const roleId = ref('');
-  const [registerBaseDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-    roleId.value = data.id;
-    setProps({ searchInfo: { roleId: data.id } });
-    reload();
-  });
-  //娉ㄥ唽drawer
-  const [registerDrawer, { openDrawer }] = useDrawer();
-  //娉ㄥ唽drawer
-  const [registerModal, { openModal }] = useModal();
-  const [registerTable, { reload, updateTableDataRecord, setProps }] = useTable({
-    title: '鐢ㄦ埛鍒楄〃',
-    api: userList,
-    columns: userColumns,
-    formConfig: {
-      labelWidth: 120,
-      schemas: searchUserFormSchema,
-      autoSubmitOnEnter: true,
-      actionColOptions: { pull: 1 },
-    },
-    striped: true,
-    useSearchForm: true,
-    showTableSetting: true,
-    clickToRowSelect: false,
-    bordered: true,
-    showIndexColumn: false,
-    tableSetting: { fullScreen: true },
-    canResize: false,
-    rowKey: 'id',
-    actionColumn: {
-      width: 180,
-      title: '鎿嶄綔',
-      dataIndex: 'action',
-      slots: { customRender: 'action' },
-      fixed: undefined,
-    },
-  });
-
-  /**
-   * 閫夋嫨鍒楅厤缃�
-   */
-  const rowSelection = {
-    type: 'checkbox',
-    columnWidth: 50,
-    selectedRowKeys: checkedKeys,
-    onChange: onSelectChange,
-  };
-
-  /**
-   * 閫夋嫨浜嬩欢
-   */
-  function onSelectChange(selectedRowKeys: (string | number)[], selectionRows) {
-    checkedKeys.value = selectedRowKeys;
-  }
-
-  /**
-   * 鏂板
-   */
-  function handleCreate() {
-    openDrawer(true, {
-      isUpdate: false,
-      selectedroles: [roleId.value],
-      isRole: true,
-    });
-  }
-  /**
-   * 缂栬緫
-   */
-  async function handleEdit(record: Recordable) {
-    try {
-      const userRoles = await getUserRoles({ userid: record.id });
-      if (userRoles && userRoles.length > 0) {
-        record.selectedroles = userRoles;
-      }
-    } catch (e) {
-      console.log(e);
-    }
-    openDrawer(true, {
-      record,
-      isUpdate: true,
-      isRole: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteUserRole({ userId: record.id, roleId: roleId.value }, reload);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeleteUserRole({ userIds: checkedKeys.value.join(','), roleId: roleId.value }, reload);
-  }
-
-  /**
-   * 鎴愬姛鍥炶皟
-   */
-  function handleSuccess({ isUpdate, values }) {
-    isUpdate ? updateTableDataRecord(values.id, values) : reload();
-  }
-  /**
-   * 閫夋嫨宸叉湁鐢ㄦ埛
-   */
-  function handleSelect() {
-    openModal(true);
-  }
-  /**
-   * 娣诲姞宸叉湁鐢ㄦ埛
-   */
-  async function selectOk(val) {
-    await addUserRole({ roleId: roleId.value, userIdList: val }, reload);
-  }
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-        ifShow: () => !props.disableUserEdit,
-      },
-      {
-        label: '鍙栨秷鍏宠仈',
-        popConfirm: {
-          title: '鏄惁纭鍙栨秷鍏宠仈',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/role/components/UseSelectModal.vue b/src/views/system/role/components/UseSelectModal.vue
deleted file mode 100644
index f57b091..0000000
--- a/src/views/system/role/components/UseSelectModal.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="鐢ㄦ埛閫夋嫨鍒楄〃" width="1000px" @ok="handleSubmit">
-    <BasicTable @register="registerTable" :rowSelection="rowSelection" style="padding: 0px" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, unref, toRaw } from 'vue';
-  import { BasicModal, useModalInner } from '/src/components/Modal';
-  import { BasicTable, useTable, TableAction } from '/src/components/Table';
-  import { userColumns, searchUserFormSchema } from '../role.data';
-  import { list } from '../../user/user.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['select', 'register']);
-  const checkedKeys = ref<Array<string | number>>([]);
-  const [registerModal, { setModalProps, closeModal }] = useModalInner();
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload }] = useTable({
-    api: list,
-    rowKey: 'id',
-    columns: userColumns,
-    formConfig: {
-      labelWidth: 60,
-      schemas: searchUserFormSchema,
-      baseRowStyle: { maxHeight: '20px' },
-      autoSubmitOnEnter: true,
-    },
-    striped: true,
-    useSearchForm: true,
-    showTableSetting: false,
-    bordered: true,
-    showIndexColumn: false,
-    canResize: false,
-  });
-  /**
-   * 閫夋嫨鍒楅厤缃�
-   */
-  const rowSelection = {
-    type: 'checkbox',
-    columnWidth: 50,
-    selectedRowKeys: checkedKeys,
-    onChange: onSelectChange,
-  };
-  /**
-   * 閫夋嫨浜嬩欢
-   */
-  function onSelectChange(selectedRowKeys: (string | number)[]) {
-    checkedKeys.value = selectedRowKeys;
-  }
-
-  //鎻愪氦浜嬩欢
-  function handleSubmit() {
-    setModalProps({ confirmLoading: true });
-    //鍏抽棴寮圭獥
-    closeModal();
-    //鍒锋柊鍒楄〃
-    emit('select', toRaw(unref(checkedKeys)));
-    setModalProps({ confirmLoading: false });
-  }
-</script>
diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue
deleted file mode 100644
index 0614e7b..0000000
--- a/src/views/system/role/index.vue
+++ /dev/null
@@ -1,191 +0,0 @@
-<template>
-  <BasicTable @register="registerTable">
-    <template #tableTitle>
-      <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 鏂板</a-button>
-      <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-      <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-      <a-dropdown v-if="selectedRowKeys.length > 0">
-        <template #overlay>
-          <a-menu>
-            <a-menu-item key="1" @click="batchHandleDelete">
-              <Icon icon="ant-design:delete-outlined"></Icon>
-              鍒犻櫎
-            </a-menu-item>
-          </a-menu>
-        </template>
-        <a-button
-          >鎵归噺鎿嶄綔
-          <Icon icon="mdi:chevron-down"></Icon>
-        </a-button>
-      </a-dropdown>
-    </template>
-    <template #action="{ record }">
-      <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-    </template>
-  </BasicTable>
-  <!--瑙掕壊鐢ㄦ埛琛ㄦ牸-->
-  <RoleUserTable @register="roleUserDrawer" />
-  <!--瑙掕壊缂栬緫鎶藉眽-->
-  <RoleDrawer @register="registerDrawer" @success="reload" :showFooter="showFooter" />
-  <!--瑙掕壊璇︽儏-->
-  <RoleDesc @register="registerDesc"></RoleDesc>
-  <!--瑙掕壊鑿滃崟鎺堟潈鎶藉眽-->
-  <RolePermissionDrawer @register="rolePermissionDrawer" />
-  <!--瑙掕壊棣栭〉閰嶇疆-->
-  <RoleIndexModal @register="registerIndexModal" />
-</template>
-<script lang="ts" name="system-role" setup>
-  import { ref } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { useDrawer } from '/@/components/Drawer';
-  import { useModal } from '/@/components/Modal';
-  import RoleDrawer from './components/RoleDrawer.vue';
-  import RoleDesc from './components/RoleDesc.vue';
-  import RolePermissionDrawer from './components/RolePermissionDrawer.vue';
-  import RoleIndexModal from './components/RoleIndexModal.vue';
-  import RoleUserTable from './components/RoleUserTable.vue';
-  import { columns, searchFormSchema } from './role.data';
-  import { list, deleteRole, batchDeleteRole, getExportUrl, getImportUrl } from './role.api';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  const showFooter = ref(true);
-  const [roleUserDrawer, { openDrawer: openRoleUserDrawer }] = useDrawer();
-  const [registerDrawer, { openDrawer }] = useDrawer();
-  const [registerModal, { openModal }] = useModal();
-  const [registerIndexModal, { openModal: openIndexModal }] = useModal();
-  const [rolePermissionDrawer, { openDrawer: openRolePermissionDrawer }] = useDrawer();
-  const [registerDesc, { openDrawer: openRoleDesc }] = useDrawer();
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext, onImportXls, onExportXls } = useListPage({
-    designScope: 'role-template',
-    tableProps: {
-      title: '绯荤粺瑙掕壊鍒楄〃',
-      api: list,
-      columns: columns,
-      formConfig: {
-        schemas: searchFormSchema,
-      },
-      actionColumn: {
-        width: 120,
-      },
-      rowSelection: null,
-      //鑷畾涔夐粯璁ゆ帓搴�
-      defSort: {
-        column: 'id',
-        order: 'desc',
-      },
-    },
-    exportConfig: {
-      name: '瑙掕壊鍒楄〃',
-      url: getExportUrl,
-    },
-    importConfig: {
-      url: getImportUrl,
-    },
-  });
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鏂板
-   */
-  function handleCreate() {
-    showFooter.value = true;
-    openDrawer(true, {
-      isUpdate: false,
-    });
-  }
-  /**
-   * 缂栬緫
-   */
-  function handleEdit(record: Recordable) {
-    showFooter.value = true;
-    openDrawer(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-  /**
-   * 璇︽儏
-   */
-  function handleDetail(record) {
-    showFooter.value = false;
-    openRoleDesc(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteRole({ id: record.id }, reload);
-  }
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeleteRole({ ids: selectedRowKeys.value }, reload);
-  }
-  /**
-   * 瑙掕壊鎺堟潈寮圭獥
-   */
-  function handlePerssion(record) {
-    openRolePermissionDrawer(true, { roleId: record.id });
-  }
-
-  /**
-   * 棣栭〉閰嶇疆寮圭獥
-   */
-  function handleIndexConfig(roleCode) {
-    openIndexModal(true, { roleCode });
-  }
-  /**
-   * 瑙掕壊鐢ㄦ埛
-   */
-  function handleUser(record) {
-    //onSelectChange(selectedRowKeys)
-    openRoleUserDrawer(true, record);
-  }
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record) {
-    return [
-      {
-        label: '鐢ㄦ埛',
-        onClick: handleUser.bind(null, record),
-      },
-      {
-        label: '鎺堟潈',
-        onClick: handlePerssion.bind(null, record),
-      },
-    ];
-  }
-
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '璇︽儏',
-        onClick: handleDetail.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-      {
-        label: '棣栭〉閰嶇疆',
-        onClick: handleIndexConfig.bind(null, record.roleCode),
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/role/role.api.ts b/src/views/system/role/role.api.ts
deleted file mode 100644
index 426e0ec..0000000
--- a/src/views/system/role/role.api.ts
+++ /dev/null
@@ -1,172 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/sys/role/list',
-  listByTenant = '/sys/role/listByTenant',
-  save = '/sys/role/add',
-  edit = '/sys/role/edit',
-  deleteRole = '/sys/role/delete',
-  deleteBatch = '/sys/role/deleteBatch',
-  exportXls = '/sys/role/exportXls',
-  importExcel = '/sys/role/importExcel',
-  isRoleExist = '/sys/role/checkRoleCode',
-  queryTreeListForRole = '/sys/role/queryTreeList',
-  queryRolePermission = '/sys/permission/queryRolePermission',
-  saveRolePermission = '/sys/permission/saveRolePermission',
-  queryDataRule = '/sys/role/datarule',
-  getParentDesignList = '/act/process/extActDesignFlowData/getDesFormFlows',
-  getRoleDegisnList = '/joa/designform/designFormCommuse/getRoleDegisnList',
-  saveRoleDesign = '/joa/designform/designFormCommuse/sysRoleDesignAdd',
-  userList = '/sys/user/userRoleList',
-  deleteUserRole = '/sys/user/deleteUserRole',
-  batchDeleteUserRole = '/sys/user/deleteUserRoleBatch',
-  addUserRole = '/sys/user/addSysUserRole',
-  saveRoleIndex = '/sys/sysRoleIndex/add',
-  editRoleIndex = '/sys/sysRoleIndex/edit',
-  queryIndexByCode = '/sys/sysRoleIndex/queryByCode',
-}
-/**
- * 瀵煎嚭api
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 绯荤粺瑙掕壊鍒楄〃
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-/**
- * 绉熸埛瑙掕壊鍒楄〃
- * @param params
- */
-export const listByTenant = (params) => defHttp.get({ url: Api.listByTenant, params });
-
-/**
- * 鍒犻櫎瑙掕壊
- */
-export const deleteRole = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteRole, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鎵归噺鍒犻櫎瑙掕壊
- * @param params
- */
-export const batchDeleteRole = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂拌鑹�
- * @param params
- */
-export const saveOrUpdateRole = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-/**
- * 缂栫爜鏍¢獙
- * @param params
- */
-export const isRoleExist = (params) => defHttp.get({ url: Api.isRoleExist, params }, { isTransformResponse: false });
-/**
- * 鏍规嵁瑙掕壊鏌ヨ鏍戜俊鎭�
- */
-export const queryTreeListForRole = () => defHttp.get({ url: Api.queryTreeListForRole });
-/**
- * 鏌ヨ瑙掕壊鏉冮檺
- */
-export const queryRolePermission = (params) => defHttp.get({ url: Api.queryRolePermission, params });
-/**
- * 淇濆瓨瑙掕壊鏉冮檺
- */
-export const saveRolePermission = (params) => defHttp.post({ url: Api.saveRolePermission, params });
-/**
- * 鏌ヨ瑙掕壊鏁版嵁瑙勫垯
- */
-export const queryDataRule = (params) =>
-  defHttp.get({ url: `${Api.queryDataRule}/${params.functionId}/${params.roleId}` }, { isTransformResponse: false });
-/**
- * 淇濆瓨瑙掕壊鏁版嵁瑙勫垯
- */
-export const saveDataRule = (params) => defHttp.post({ url: Api.queryDataRule, params });
-/**
- * 鑾峰彇琛ㄥ崟鏁版嵁
- * @return List<Map>
- */
-export const getParentDesignList = () => defHttp.get({ url: Api.getParentDesignList });
-/**
- * 鑾峰彇瑙掕壊琛ㄥ崟鏁版嵁
- * @return List<Map>
- */
-export const getRoleDegisnList = (params) => defHttp.get({ url: Api.getRoleDegisnList, params });
-/**
- * 鎻愪氦瑙掕壊宸ュ崟淇℃伅
- */
-export const saveRoleDesign = (params) => defHttp.post({ url: Api.saveRoleDesign, params });
-/**
- * 瑙掕壊鍒楄〃鎺ュ彛
- * @param params
- */
-export const userList = (params) => defHttp.get({ url: Api.userList, params });
-/**
- * 鍒犻櫎瑙掕壊鐢ㄦ埛
- */
-export const deleteUserRole = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteUserRole, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鎵归噺鍒犻櫎瑙掕壊鐢ㄦ埛
- * @param params
- */
-export const batchDeleteUserRole = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.batchDeleteUserRole, params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-/**
- * 娣诲姞宸叉湁鐢ㄦ埛
- */
-export const addUserRole = (params, handleSuccess) => {
-  return defHttp.post({ url: Api.addUserRole, params }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂�
- * @param params
- * @param isUpdate 鏄惁鏄洿鏂版暟鎹�
- */
-export const saveOrUpdateRoleIndex = (params, isUpdate) => {
-  let url = isUpdate ? Api.editRoleIndex : Api.saveRoleIndex;
-  return defHttp.post({ url: url, params });
-};
-/**
- * 鏍规嵁code鏌ヨ棣栭〉閰嶇疆
- * @param params
- */
-export const queryIndexByCode = (params) => defHttp.get({ url: Api.queryIndexByCode, params }, { isTransformResponse: false });
diff --git a/src/views/system/role/role.data.ts b/src/views/system/role/role.data.ts
deleted file mode 100644
index 75abeda..0000000
--- a/src/views/system/role/role.data.ts
+++ /dev/null
@@ -1,177 +0,0 @@
-import { FormSchema } from '/@/components/Table';
-import { isRoleExist } from './role.api';
-export const columns = [
-  {
-    title: '瑙掕壊鍚嶇О',
-    dataIndex: 'roleName',
-    width: 100,
-  },
-  {
-    title: '瑙掕壊缂栫爜',
-    dataIndex: 'roleCode',
-    width: 100,
-  },
-  {
-    title: '鍒涘缓鏃堕棿',
-    dataIndex: 'createTime',
-    width: 100,
-  },
-];
-/**
- * 瑙掕壊鐢ㄦ埛Columns
- */
-export const userColumns = [
-  {
-    title: '鐢ㄦ埛璐﹀彿',
-    dataIndex: 'username',
-  },
-  {
-    title: '鐢ㄦ埛濮撳悕',
-    dataIndex: 'realname',
-  },
-  {
-    title: '鐘舵��',
-    dataIndex: 'status_dictText',
-    width: 80,
-  },
-];
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'roleName',
-    label: '瑙掕壊鍚嶇О',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-];
-/**
- * 瑙掕壊鐢ㄦ埛鎼滅储form
- */
-export const searchUserFormSchema: FormSchema[] = [
-  {
-    field: 'username',
-    label: '鐢ㄦ埛璐﹀彿',
-    component: 'Input',
-    colProps: { span: 12 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'id',
-    label: '',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'roleName',
-    label: '瑙掕壊鍚嶇О',
-    required: true,
-    component: 'Input',
-  },
-  {
-    field: 'roleCode',
-    label: '瑙掕壊缂栫爜',
-    required: true,
-    component: 'Input',
-    dynamicDisabled: ({ values }) => {
-      return !!values.id;
-    },
-    dynamicRules: ({ values, model }) => {
-      console.log('values:', values);
-      return [
-        {
-          required: true,
-          validator: (_, value) => {
-            if (!value) {
-              return Promise.reject('璇疯緭鍏ヨ鑹茬紪鐮�');
-            }
-            if (values) {
-              return new Promise((resolve, reject) => {
-                isRoleExist({ id: model.id, roleCode: value })
-                  .then((res) => {
-                    res.success ? resolve() : reject(res.message || '鏍¢獙澶辫触');
-                  })
-                  .catch((err) => {
-                    reject(err.message || '楠岃瘉澶辫触');
-                  });
-              });
-            }
-            return Promise.resolve();
-          },
-        },
-      ];
-    },
-  },
-  {
-    label: '澶囨敞',
-    field: 'description',
-    component: 'InputTextArea',
-  },
-];
-
-export const formDescSchema = [
-  {
-    field: 'roleName',
-    label: '瑙掕壊鍚嶇О',
-  },
-  {
-    field: 'roleCode',
-    label: '瑙掕壊缂栫爜',
-  },
-  {
-    label: '澶囨敞',
-    field: 'description',
-  },
-];
-
-export const roleIndexFormSchema: FormSchema[] = [
-  {
-    field: 'id',
-    label: '',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '瑙掕壊缂栫爜',
-    field: 'roleCode',
-    component: 'Input',
-    dynamicDisabled: true,
-  },
-  {
-    label: '棣栭〉璺敱',
-    field: 'url',
-    component: 'Input',
-    required: true,
-    helpMessage: '棣栭〉璺敱鐨勮闂湴鍧�',
-  },
-  {
-    label: '缁勪欢鍦板潃',
-    field: 'component',
-    component: 'Input',
-    helpMessage: '棣栭〉璺敱鐨勭粍浠跺湴鍧�',
-    componentProps: {
-      placeholder: '璇疯緭鍏ュ墠绔粍浠�',
-    },
-    required: true,
-  },
-  {
-    field: 'route',
-    label: '鏄惁璺敱鑿滃崟',
-    helpMessage: '闈炶矾鐢辫彍鍗曡缃垚棣栭〉锛岄渶寮�鍚�',
-    component: 'Switch',
-    defaultValue: true
-  },
-  {
-    label: '浼樺厛绾�',
-    field: 'priority',
-    component: 'InputNumber',
-  },
-  {
-    label: '鏄惁寮�鍚�',
-    field: 'status',
-    component: 'JSwitch',
-    componentProps: {
-      options: ['1', '0'],
-    },
-  },
-];
diff --git a/src/views/system/tenant/TenantModal.vue b/src/views/system/tenant/TenantModal.vue
deleted file mode 100644
index 26af473..0000000
--- a/src/views/system/tenant/TenantModal.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit" width="700px">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './tenant.data';
-  import { saveOrUpdateTenant, getTenantById } from './tenant.api';
-  // Emits澹版槑
-  const emit = defineEmits(['register', 'success']);
-  const isUpdate = ref(true);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
-    // labelWidth: 150,
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      // 缂栬緫妯″紡涓嬬鐢╥d瀛楁
-      updateSchema({ field: 'id', dynamicDisabled: true });
-      //鑾峰彇璇︽儏
-      data.record = await getTenantById({ id: data.record.id });
-      //琛ㄥ崟璧嬪��
-      await setFieldsValue({
-        ...data.record,
-      });
-    } else {
-      updateSchema({ field: 'id', dynamicDisabled: false });
-    }
-  });
-  //璁剧疆鏍囬
-  const title = computed(() => (!unref(isUpdate) ? '鏂板绉熸埛' : '缂栬緫绉熸埛'));
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit(v) {
-    try {
-      let values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateTenant(values, isUpdate.value);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/tenant/TenantPackMenuModal.vue b/src/views/system/tenant/TenantPackMenuModal.vue
deleted file mode 100644
index 648464b..0000000
--- a/src/views/system/tenant/TenantPackMenuModal.vue
+++ /dev/null
@@ -1,52 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit" width="800px" destroyOnClose>
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup name="tenant-pack-menu-modal">
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { packMenuFormSchema } from './tenant.data';
-  import { addPackPermission, editPackPermission } from './tenant.api';
-
-  const isUpdate = ref<boolean>(false);
-  // Emits澹版槑
-  const emit = defineEmits(['register', 'success']);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    schemas: packMenuFormSchema,
-    showActionButtonGroup: false,
-  });
-  //绉熸埛
-  const tenantId = ref<number>();
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    isUpdate.value = !!data?.isUpdate;
-    tenantId.value = data.tenantId;
-    if (unref(isUpdate)) {
-      //琛ㄥ崟璧嬪��
-      console.log(data.record)
-      await setFieldsValue({ ...data.record });
-    }
-  });
-  //璁剧疆鏍囬
-  const title = computed(() => (unref(isUpdate) ? '鏂板绉熸埛浜у搧鍖�' : '缂栬緫绉熸埛浜у搧鍖�'));
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit(v) {
-    const values = await validate();
-    
-    setModalProps({ confirmLoading: true });
-    values.tenantId = unref(tenantId);
-    if (!unref(isUpdate)) {
-      await addPackPermission(values);
-    } else {
-      await editPackPermission(values);
-    }
-    emit('success');
-    setModalProps({ confirmLoading: false });
-    closeModal();
-  }
-</script>
diff --git a/src/views/system/tenant/TenantPackModal.vue b/src/views/system/tenant/TenantPackModal.vue
deleted file mode 100644
index ad63655..0000000
--- a/src/views/system/tenant/TenantPackModal.vue
+++ /dev/null
@@ -1,144 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit" width="800px" :showCancelBtn="false" :showOkBtn="false">
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #tableTitle>
-        <a-button preIcon="ant-design:plus-outlined" type="primary" @click="handleAdd" style="margin-right: 5px">鏂板 </a-button>
-        <a-button
-          v-if="selectedRowKeys.length > 0"
-          preIcon="ant-design:delete-outlined"
-          type="primary"
-          @click="handlePackBatch"
-          style="margin-right: 5px"
-          >鎵归噺鍒犻櫎
-        </a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getActions(record)" />
-      </template>
-    </BasicTable>
-  </BasicModal>
-  <TenantPackMenuModal @register="registerPackMenu" @success="success" />
-</template>
-<script lang="ts" setup name="tenant-pack-modal">
-  import { ref, unref } from 'vue';
-  import { BasicModal, useModal, useModalInner } from '/@/components/Modal';
-  import { packColumns, userColumns, packFormSchema } from './tenant.data';
-  import { getTenantUserList, leaveTenant, packList, deletePackPermissions } from './tenant.api';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import TenantPackMenuModal from './TenantPackMenuModal.vue';
-  import {Modal} from "ant-design-vue";
-
-  const [registerPackMenu, { openModal }] = useModal();
-  const tenantId = ref<number>(0);
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext } = useListPage({
-    designScope: 'tenant-template',
-    tableProps: {
-      api: packList,
-      columns: packColumns,
-      immediate: false,
-      formConfig: {
-        schemas: packFormSchema,
-        labelCol: {
-          xxl: 8,
-        },
-        actionColOptions: {
-          xs: 24,
-          sm: 8,
-          md: 8,
-          lg: 8,
-          xl: 8,
-          xxl: 8,
-        },
-      },
-      beforeFetch: (params) => {
-        return Object.assign(params, { tenantId: unref(tenantId) });
-      },
-    },
-  });
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-  // Emits澹版槑
-  const emit = defineEmits(['register', 'success']);
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    tenantId.value = data.tenantId;
-    success();
-  });
-  //璁剧疆鏍囬
-  const title = '绉熸埛浜у搧鍖呭垪琛�';
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit(v) {
-    closeModal();
-  }
-
-  function getActions(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎绉熸埛浜у搧鍖�',
-          confirm: handleDelete.bind(null, record.id),
-        },
-      },
-    ];
-  }
-
-  /**
-   * 鎴愬姛
-   */
-  function success() {
-    (selectedRowKeys.value = []) && reload();
-  }
-
-  /**
-   * 缂栬緫
-   * @param record
-   */
-  async function handleEdit(record) {
-    openModal(true, {
-      isUpdate: true,
-      record: record,
-      tenantId: unref(tenantId)
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜у搧鍖�
-   * @param 鍒犻櫎
-   */
-  async function handleDelete(id) {
-    await deletePackPermissions({ ids: id }, success);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜у搧鍖�
-   */
-  async function handlePackBatch() {
-    Modal.confirm({
-      title: '鍒犻櫎绉熸埛浜у搧鍖�',
-      content: '鏄惁鍒犻櫎绉熸埛浜у搧鍖�',
-      okText: '纭',
-      cancelText: '鍙栨秷',
-      onOk: async () => {
-        await deletePackPermissions({ ids: selectedRowKeys.value.join(',')}, success);
-      }
-    })
-  }
-
-  /**
-   *
-   * 鏂板琛ㄥ崟
-   */
-  function handleAdd() {
-    openModal(true, {
-      isUpdate: false,
-      tenantId: unref(tenantId),
-    });
-  }
-</script>
diff --git a/src/views/system/tenant/TenantRecycleBinModal.vue b/src/views/system/tenant/TenantRecycleBinModal.vue
deleted file mode 100644
index 7ac57e6..0000000
--- a/src/views/system/tenant/TenantRecycleBinModal.vue
+++ /dev/null
@@ -1,146 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="鐢ㄦ埛鍥炴敹绔�" :showOkBtn="false" width="1000px" destroyOnClose>
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鎵归噺鍒犻櫎
-              </a-menu-item>
-              <a-menu-item key="1" @click="batchHandleRevert">
-                <Icon icon="ant-design:redo-outlined"></Icon>
-                鎵归噺杩樺師
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="ant-design:down-outlined"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-  </BasicModal>
-</template>
-
-<script lang="ts" setup name="tenant-recycle-bin-modal">
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { recycleBinPageList, deleteLogicDeleted, revertTenantLogic } from './tenant.api';
-  import { recycleColumns, searchRecycleFormSchema } from './tenant.data';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { Modal } from 'ant-design-vue';
-  import { toRaw, unref } from 'vue';
-
-  const { createMessage: $message } = useMessage();
-  const [registerModal] = useModalInner(() => {});
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-    tableProps: {
-      api: recycleBinPageList,
-      columns: recycleColumns,
-      size: 'small',
-      formConfig: {
-        schemas: searchRecycleFormSchema,
-      },
-      actionColumn: {
-        width: 120,
-      },
-      ellipsis: true,
-    },
-  });
-  const emit = defineEmits(['success', 'register']);
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload, updateTableDataRecord }, { rowSelection, selectedRows, selectedRowKeys }] = tableContext;
-
-  //鑾峰彇鎿嶄綔鏍忎簨浠�
-  function getTableAction(record) {
-    return [
-      {
-        label: '杩樺師',
-        icon: 'ant-design:redo-outlined',
-        popConfirm: {
-          title: '鏄惁纭杩樺師',
-          confirm: handleRevert.bind(null, record),
-        },
-      },
-      {
-        label: '褰诲簳鍒犻櫎',
-        icon: 'ant-design:scissor-outlined',
-        popConfirm: {
-          title: '鏄惁纭褰诲簳鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-
-  /**
-   * 杩樺師
-   * @param record
-   */
-  function handleRevert(record) {
-    revertTenantLogic({ ids: record.id }, handleSuccess);
-    emit('success');
-  }
-
-  /**
-   * 鎴愬姛鍒锋柊琛ㄦ牸
-   */
-  function handleSuccess() {
-    (selectedRowKeys.value = []) && reload();
-  }
-
-  /**
-   * 褰诲簳鍒犻櫎
-   * @param record
-   */
-  async function handleDelete(record) {
-    await deleteLogicDeleted({ ids: record.id }, handleSuccess);
-  }
-
-  /**
-   * 鎵归噺褰诲簳鍒犻櫎
-   */
-  function batchHandleDelete() {
-    Modal.confirm({
-      title: '褰诲簳鍒犻櫎',
-      content: '鏄惁纭褰诲簳鍒犻櫎',
-      okText: '纭',
-      cancelText: '鍙栨秷',
-      onOk: () => {
-        deleteLogicDeleted({ ids: toRaw(unref(selectedRowKeys)).join(',') }, handleSuccess);
-      },
-    });
-  }
-
-  /**
-   * 鎵归噺杩樺師
-   */
-  function batchHandleRevert() {
-    Modal.confirm({
-      title: '杩樺師',
-      content: '鏄惁纭杩樺師',
-      okText: '纭',
-      cancelText: '鍙栨秷',
-      onOk: () => {
-        revertTenantLogic({ ids: toRaw(unref(selectedRowKeys)).join(',') }, handleSuccess);
-        emit('success');
-      },
-    });
-  }
-</script>
-
-<style lang="less" scoped>
-  :deep(.ant-popover-inner-content) {
-    width: 185px !important;
-  }
-</style>
diff --git a/src/views/system/tenant/TenantUserModal.vue b/src/views/system/tenant/TenantUserModal.vue
deleted file mode 100644
index 2474abf..0000000
--- a/src/views/system/tenant/TenantUserModal.vue
+++ /dev/null
@@ -1,95 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit" width="800px">
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #tableTitle>
-        <a-button v-if="selectedRowKeys.length>0" preIcon="ant-design:delete-outlined" type="primary" @click="handleLeaveBatch" style="margin-right: 5px">鎵归噺璇风</a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getActions(record)" />
-      </template>
-    </BasicTable>
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-import { ref, computed, unref } from 'vue';
-import { BasicModal, useModalInner } from '/@/components/Modal';
-import { BasicForm, useForm } from '/@/components/Form/index';
-import { userColumns, userSearchFormSchema } from "./tenant.data";
-import { getTenantUserList, leaveTenant } from "./tenant.api";
-import { useListPage } from "/@/hooks/system/useListPage";
-import { BasicTable, TableAction } from '/@/components/Table';
-
-const tenantId = ref<number>(0);
-// 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-const { prefixCls, tableContext } = useListPage({
-  designScope: 'tenant-template',
-  tableProps: {
-    api: getTenantUserList,
-    columns: userColumns,
-    immediate:false,
-    formConfig: {
-      schemas: userSearchFormSchema,
-      labelCol: {
-        span: 8,
-      },
-      actionColOptions: {
-        xs: 24,
-        sm: 8,
-        md: 8,
-        lg: 8,
-        xl: 8,
-        xxl: 8,
-      },
-    },
-    beforeFetch: (params) => {
-      return Object.assign(params, { userTenantId: unref(tenantId) });
-    },
-  },
-});
-const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-
-// Emits澹版槑
-const emit = defineEmits(['register', 'success']);
-//琛ㄥ崟璧嬪��
-const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-  tenantId.value = data.id;
-  success();
-});
-//璁剧疆鏍囬
-const title = '鎴愬憳';
-//琛ㄥ崟鎻愪氦浜嬩欢
-async function handleSubmit(v) {
-  closeModal();
-}
-
-function getActions(record) {
-  return [
-    {
-      label: '璇风',
-      onClick: handleLeave.bind(null, record.id),
-    },
-  ]
-}
-
-/**
- * 鎴愬姛
- */
-function success() {
-  (selectedRowKeys.value = []) && reload();
-}
-
-/**
- * 璇风
- * @param id
- */
-async function handleLeave(id) {
-  await leaveTenant({userIds:id,tenantId:unref(tenantId)},success)
-}
-
-/**
- * 鎵归噺璇风
- */
-async function  handleLeaveBatch(){
-  await leaveTenant({userIds:selectedRowKeys.value.join(","),tenantId:unref(tenantId)},success)
-}
-</script>
diff --git a/src/views/system/tenant/index.vue b/src/views/system/tenant/index.vue
deleted file mode 100644
index 7dca935..0000000
--- a/src/views/system/tenant/index.vue
+++ /dev/null
@@ -1,205 +0,0 @@
-<template>
-  <div>
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #tableTitle>
-        <a-button preIcon="ant-design:plus-outlined" type="primary" @click="handleAdd" style="margin-right: 5px">鏂板</a-button>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="mdi:chevron-down"></Icon>
-          </a-button>
-        </a-dropdown>
-        <a-button
-          preIcon="ant-design:user-add-outlined"
-          type="primary"
-          @click="handleInvitation"
-          style="margin-right: 5px"
-          :disabled="selectedRowKeys.length === 0"
-          >閭�璇风敤鎴峰姞鍏�</a-button
-        >
-        <a-button
-          preIcon="ant-design:plus-outlined"
-          type="primary"
-          @click="handlePack"
-          style="margin-right: 5px"
-          :disabled="selectedRowKeys.length === 0"
-          >濂楅</a-button
-        >
-        <a-button type="primary" @click="recycleBinClick" preIcon="ant-design:hdd-outlined">鍥炴敹绔�</a-button>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="getActions(record)" />
-      </template>
-    </BasicTable>
-    <TenantModal @register="registerModal" @success="reload" />
-    <UserSelectModal rowKey="id" @register="registerSelUserModal" @getSelectResult="onSelectOk" />
-    <TenantUserModal @register="registerTenUserModal" />
-    <!--  浜у搧鍖�  -->
-    <TenantPackModal @register="registerPackModal" />
-    <!--  绉熸埛鍥炴敹绔�  -->
-    <TenantRecycleBinModal @register="registerRecycleBinModal" @success="reload" />
-  </div>
-</template>
-<script lang="ts" name="system-tenant" setup>
-  import { ref, unref } from 'vue';
-  import { BasicTable, TableAction } from '/@/components/Table';
-  import { useModal } from '/@/components/Modal';
-  import { getTenantList, deleteTenant, batchDeleteTenant, invitationUserJoin } from './tenant.api';
-  import { columns, searchFormSchema } from './tenant.data';
-  import TenantModal from './TenantModal.vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import UserSelectModal from '/@/components/Form/src/jeecg/components/modal/UserSelectModal.vue';
-  import TenantUserModal from './TenantUserModal.vue';
-  import TenantPackModal from './TenantPackModal.vue';
-  import TenantRecycleBinModal from './TenantRecycleBinModal.vue';
-
-  const { createMessage } = useMessage();
-  const [registerModal, { openModal }] = useModal();
-  const [registerSelUserModal, { openModal: userOpenModal }] = useModal();
-  const [registerTenUserModal, { openModal: tenUserOpenModal }] = useModal();
-  const [registerPackModal, { openModal: packModal }] = useModal();
-  const [registerRecycleBinModal, { openModal: recycleBinModal }] = useModal();
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext } = useListPage({
-    designScope: 'tenant-template',
-    tableProps: {
-      title: '绉熸埛鍒楄〃',
-      api: getTenantList,
-      columns: columns,
-      formConfig: {
-        schemas: searchFormSchema,
-        fieldMapToTime: [['fieldTime', ['beginDate', 'endDate'], 'YYYY-MM-DD HH:mm:ss']],
-      },
-      actionColumn:{
-        width: 150,
-        fixed:'right'
-      }
-    },
-  });
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鎿嶄綔鍒楀畾涔�
-   * @param record
-   */
-  function getActions(record) {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-      },
-      {
-        label: '鍒犻櫎',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          placement: 'left',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-      {
-        label: '鐢ㄦ埛',
-        onClick: handleSeeUser.bind(null, record.id),
-      },
-    ];
-  }
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleAdd() {
-    openModal(true, {
-      isUpdate: false,
-    });
-  }
-
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  function handleEdit(record) {
-    openModal(true, {
-      record,
-      isUpdate: true,
-    });
-  }
-
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteTenant({ id: record.id }, handleSuccess);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  async function batchHandleDelete() {
-    await batchDeleteTenant({ ids: selectedRowKeys.value }, handleSuccess);
-  }
-
-  /**
-   * 閭�璇风敤鎴峰姞鍏ョ鎴�
-   */
-  function handleInvitation() {
-    userOpenModal(true, {});
-  }
-
-  /**
-   * 鐢ㄦ埛閫夋嫨鍥炶皟浜嬩欢
-   * @param options
-   * @param values
-   */
-  async function onSelectOk(options, values) {
-    if (values && values.length > 0) {
-      await invitationUserJoin({ ids: selectedRowKeys.value.join(','), userIds: values.join(',') });
-    } else {
-      createMessage.warn('璇烽�夋嫨鐢ㄦ埛!');
-    }
-  }
-
-  /**
-   * 鏌ョ湅鐢ㄦ埛
-   * @param id
-   */
-  function handleSeeUser(id) {
-    tenUserOpenModal(true, {
-      id: id,
-    });
-  }
-
-  /**
-   * 鏂板浜у搧鍖�
-   */
-  function handlePack() {
-    if (unref(selectedRowKeys).length > 1) {
-      createMessage.warn('璇烽�夋嫨涓�涓�');
-      return;
-    }
-    packModal(true, {
-      tenantId: unref(selectedRowKeys.value.join(',')),
-    });
-  }
-
-  /**
-   * 鍥炴敹绔�
-   */
-  function recycleBinClick() {
-    recycleBinModal(true, {});
-  }
-
-  /**
-   * 鍒犻櫎鎴愬姛涔嬪悗鍥炶皟浜嬩欢
-   */
-  function handleSuccess() {
-    (selectedRowKeys.value = []) && reload();
-  }
-</script>
diff --git a/src/views/system/tenant/tenant.api.ts b/src/views/system/tenant/tenant.api.ts
deleted file mode 100644
index 2ac4a05..0000000
--- a/src/views/system/tenant/tenant.api.ts
+++ /dev/null
@@ -1,176 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  list = '/sys/tenant/list',
-  save = '/sys/tenant/add',
-  edit = '/sys/tenant/edit',
-  get = '/sys/tenant/queryById',
-  delete = '/sys/tenant/delete',
-  deleteBatch = '/sys/tenant/deleteBatch',
-  getCurrentUserTenants = '/sys/tenant/getCurrentUserTenant',
-  invitationUserJoin = '/sys/tenant/invitationUserJoin',
-  getTenantUserList = '/sys/tenant/getTenantUserList',
-  leaveTenant = '/sys/tenant/leaveTenant',
-  packList = '/sys/tenant/packList',
-  addPackPermission = '/sys/tenant/addPackPermission',
-  editPackPermission = '/sys/tenant/editPackPermission',
-  deletePackPermissions = '/sys/tenant/deletePackPermissions',
-  recycleBinPageList = '/sys/tenant/recycleBinPageList',
-  deleteLogicDeleted = '/sys/tenant/deleteLogicDeleted',
-  revertTenantLogic = '/sys/tenant/revertTenantLogic',
-}
-
-/**
- * 鏌ヨ绉熸埛鍒楄〃
- * @param params
- */
-export const getTenantList = (params) => {
-  return defHttp.get({ url: Api.list, params });
-};
-
-/**
- * 淇濆瓨鎴栬�呮洿鏂扮鎴�
- * @param params
- */
-export const saveOrUpdateTenant = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-
-/**
- * 鏌ヨ绉熸埛璇︽儏
- * @param params
- */
-export const getTenantById = (params) => {
-  return defHttp.get({ url: Api.get, params });
-};
-
-/**
- * 鍒犻櫎绉熸埛
- * @param params
- */
-export const deleteTenant = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.delete, data: params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 鎵归噺鍒犻櫎绉熸埛
- * @param params
- */
-export const batchDeleteTenant = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-
-/**
- * 鑾峰彇鐧诲綍鐢ㄦ埛閮ㄩ棬淇℃伅
- */
-export const getUserTenants = (params?) => defHttp.get({ url: Api.getCurrentUserTenants, params });
-
-/**
- * 閭�璇风敤鎴峰姞鍏ョ鎴�
- * @param params
- */
-export const invitationUserJoin = (params) => defHttp.put({ url: Api.invitationUserJoin, params }, { joinParamsToUrl: true });
-
-/**
- * 閫氳繃绉熸埛id鑾峰彇鏁版嵁
- * @param params
- */
-export const getTenantUserList = (params) => {
-  return defHttp.get({ url: Api.getTenantUserList, params });
-};
-
-/**
- * 鐢ㄦ埛绂诲紑绉熸埛
- * @param params
- */
-export const leaveTenant = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '璇风',
-    content: '鏄惁璇风璇ョ敤鎴�',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.put({ url: Api.leaveTenant, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-
-/**
- * 鑾峰彇浜у搧鍖呭垪琛�
- * @param params
- */
-export const packList = (params) => {
-  return defHttp.get({ url: Api.packList, params });
-};
-
-/**
- * 娣诲姞鑿滃崟
- * @param params
- */
-export const addPackPermission = (params) => {
-  return defHttp.post({ url: Api.addPackPermission, params });
-};
-
-/**
- * 娣诲姞鑿滃崟
- * @param params
- */
-export const editPackPermission = (params) => {
-  return defHttp.put({ url: Api.editPackPermission, params });
-};
-
-/**
- * 鍒犻櫎鑿滃崟
- * @param params
- */
-export const deletePackPermissions = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deletePackPermissions, data: params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 鑾峰彇绉熸埛鍥炴敹绔欑殑鍒楄〃
- * @param params
- */
-export const recycleBinPageList = (params) => {
-  return defHttp.get({ url: Api.recycleBinPageList, params });
-};
-
-/**
- * 绉熸埛褰诲簳鍒犻櫎
- * @param params
- */
-export const deleteLogicDeleted = (params,handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteLogicDeleted, params },{ joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  }).catch(()=>{
-    handleSuccess();
-  });
-};
-
-/**
- * 绉熸埛杩樺師
- * @param params
- */
-export const revertTenantLogic = (params,handleSuccess) => {
-  return defHttp.put({ url: Api.revertTenantLogic, params },{ joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  })
-};
diff --git a/src/views/system/tenant/tenant.data.ts b/src/views/system/tenant/tenant.data.ts
deleted file mode 100644
index b3367ff..0000000
--- a/src/views/system/tenant/tenant.data.ts
+++ /dev/null
@@ -1,374 +0,0 @@
-import { BasicColumn, FormSchema } from '/@/components/Table';
-import { getAutoScrollContainer } from '/@/utils/common/compUtils';
-import { render } from "/@/utils/common/renderUtils";
-
-export const columns: BasicColumn[] = [
-  {
-    title: '绉熸埛鍚嶇О',
-    dataIndex: 'name',
-    width: 200,
-    align: 'left',
-  },
-  {
-    title: '绉熸埛缂栧彿(ID)',
-    dataIndex: 'id',
-    width: 180,
-  },{
-    title: '缁勭粐LOGO',
-    dataIndex: 'companyLogo',
-    width: 100,
-    customRender: ({ text }) => {
-      if(!text){
-        return text;
-      }
-      return render.renderImage({text});
-    },
-  },
-  {
-    dataIndex: 'trade_dictText',
-    title: '鎵�灞炶涓�',
-    width: 150
-  },
-  {
-    dataIndex: 'companySize_dictText',
-    title: '鍏徃瑙勬ā',
-    width: 100
-  },
-  {
-    dataIndex: 'houseNumber',
-    title: '闂ㄧ墝鍙�',
-    width: 100,
-  },
-  {
-    dataIndex: 'position_dictText',
-    title: '鑱岀骇',
-    width: 150
-  },
-  {
-    dataIndex: 'department_dictText',
-    title: '閮ㄩ棬',
-    width: 150
-  },
-/*  {
-    title: '寮�濮嬫椂闂�',
-    dataIndex: 'beginDate',
-    sorter: true,
-    width: 180,
-  },
-  {
-    title: '缁撴潫鏃堕棿',
-    dataIndex: 'endDate',
-    sorter: true,
-    width: 180,
-  },*/
-  {
-    title: '鐘舵��',
-    dataIndex: 'status_dictText',
-    width: 100,
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    field: 'name',
-    label: '绉熸埛鍚嶇О',
-    component: 'Input',
-    colProps: { span: 8 },
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'Select',
-    componentProps: {
-      options: [
-        { label: '姝e父', value: 1 },
-        { label: '鍐荤粨', value: 0 },
-      ],
-    },
-    colProps: { span: 8 },
-  },
-  // {
-  //   field: 'fieldTime',
-  //   component: 'RangePicker',
-  //   label: '鏃堕棿瀛楁',
-  //   componentProps: {
-  //     valueType: 'Date',
-  //   },
-  //   colProps: {
-  //     span: 8,
-  //   },
-  // },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    field: 'name',
-    label: '绉熸埛鍚嶇О',
-    component: 'Input',
-    required: true,
-  },
-  {
-    field: 'id',
-    label: '绉熸埛缂栧彿(ID)',
-    component: 'InputNumber',
-    required: true,
-    ifShow: ({ values }) => {
-      return values.id!=null;
-    },
-  },
-  {
-    field: 'companyLogo',
-    label: '缁勭粐LOGO',
-    component: 'JImageUpload',
-    componentProps:{
-      text:'logo'
-    }
-  },
-  {
-    field: 'trade',
-    label: '鎵�灞炶涓�',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode:'trade',
-    }
-  }, {
-    field: 'companySize',
-    label: '鍏徃瑙勬ā',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode:'company_size',
-    }
-  }, {
-    field: 'companyAddress',
-    label: '鍏徃鍦板潃',
-    component: 'InputTextArea',
-    componentProps: {
-      placeholder: '璇疯緭鍏ュ叕鍙稿湴鍧�',
-      rows: 4,
-    }
-  },
-/*  {
-    field: 'beginDate',
-    label: '寮�濮嬫椂闂�',
-    component: 'DatePicker',
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      getPopupContainer: getAutoScrollContainer,
-    },
-  },
-  {
-    field: 'endDate',
-    label: '缁撴潫鏃堕棿',
-    component: 'DatePicker',
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      getPopupContainer: getAutoScrollContainer,
-    },
-  },*/
-  {
-    field: 'houseNumber',
-    label: '闂ㄧ墝鍙�',
-    component: 'Input',
-    dynamicDisabled: true,
-    ifShow: ({ values }) => {
-      return values.id!=null;
-    },
-  },
-  {
-    field: 'position',
-    label: '鑱岀骇',
-    component: 'JDictSelectTag',
-    componentProps:{
-      dictCode: 'company_rank'
-    }
-  },
-  {
-    field: 'department',
-    label: '閮ㄩ棬',
-    component: 'JDictSelectTag',
-    componentProps:{
-      dictCode:'company_department'
-    }
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'RadioButtonGroup',
-    defaultValue: 1,
-    componentProps: {
-      options: [
-        { label: '姝e父', value: 1 },
-        { label: '鍐荤粨', value: 0 },
-      ],
-    },
-  },
-];
-
-//瀹氫箟鐢ㄦ埛琛ㄦ牸鍒�
-export const userColumns: BasicColumn[] =[
-  {
-    title: '鐢ㄦ埛璐﹀彿',
-    dataIndex: 'username',
-    width: 100,
-    align: 'left',
-  },
-  {
-    title: '鐢ㄦ埛濮撳悕',
-    dataIndex: 'realname',
-    width: 100,
-  },
-  {
-    title: '鎬у埆',
-    dataIndex: 'sex_dictText',
-    width: 100,
-  },
-  {
-    title: '鎵嬫満鍙风爜',
-    dataIndex: 'phone',
-    width: 100,
-  },
-];
-
-//閭�璇风敤鎴锋悳绱㈣〃鍗�
-export const userSearchFormSchema: FormSchema[] = [
-  {
-    field: 'username',
-    label: '鐢ㄦ埛鍚�',
-    component: 'Input',
-    colProps: { span: 10 },
-  },
-  {
-    field: 'realname',
-    label: '鐪熷疄濮撳悕',
-    component: 'Input',
-    colProps: { span: 10 },
-  },
-];
-
-//浜у搧鍖呭垪琛�
-export const packColumns: BasicColumn[] = [
-  {
-    title: '浜у搧鍖呭悕绉�',
-    dataIndex: 'packName',
-    width: 100,
-  },
-  {
-    title: '鐘舵��',
-    dataIndex: 'status',
-    width: 100,
-    customRender: ({ text }) => {
-      console.log("text::",text)
-      if (text === '1') {
-        return '寮�鍚�';
-      } else {
-        return '鍏抽棴';
-      }
-    },
-  },
-  {
-    title: '澶囨敞',
-    dataIndex: 'remarks',
-    width: 150,
-  },
-];
-
-//浜у搧鍖呮悳绱㈣〃鍗�
-export const packFormSchema: FormSchema[] = [
-  {
-    field: 'packName',
-    label: '浜у搧鍖呭悕绉�',
-    component: 'JInput',
-    colProps: { xxl: 8 },
-  },
-];
-
-//浜у搧鍖呰〃鍗�
-export const packMenuFormSchema: FormSchema[] = [
-  {
-    field: 'packName',
-    label: '浜у搧鍖呭悕绉�',
-    component: 'Input',
-  },
-  {
-    field: 'permissionIds',
-    label: '鑿滃崟鍒楄〃',
-    component: 'JTreeSelect',
-    componentProps: {
-      dict: 'sys_permission,name,id',
-      pidField: 'parent_id',
-      multiple: true,
-      treeCheckAble:true,
-      getPopupContainer: () => document.body,
-    },
-  },
-  {
-    field: 'remarks',
-    label: '鎻忚堪',
-    component: 'InputTextArea',
-  },
-  {
-    field: 'status',
-    label: '寮�鍚姸鎬�',
-    component: 'Switch',
-    componentProps: {
-      checkedValue: '1',
-      checkedChildren: '寮�鍚�',
-      unCheckedValue: '0',
-      unCheckedChildren: '鍏抽棴',
-    },
-    defaultValue: '1',
-  },
-  {
-    field: 'id',
-    label: '寮�鍚姸鎬�',
-    component: 'Input',
-    show: false
-  },
-];
-
-//鍥炴敹绔欏垪琛�
-export const recycleColumns : BasicColumn[] = [
-  {
-    title: '绉熸埛鍚嶇О',
-    dataIndex: 'name',
-    width: 100,
-    align: 'left',
-  },
-  {
-    title: '绉熸埛缂栧彿(ID)',
-    dataIndex: 'id',
-    width: 100,
-  },
-  {
-    title: '缁勭粐LOGO',
-    dataIndex: 'companyLogo',
-    width: 100,
-    customRender: ({ text }) => {
-      if(!text){
-        return text;
-      }
-      return render.renderImage({text});
-    },
-  },
-  {
-    dataIndex: 'houseNumber',
-    title: '闂ㄧ墝鍙�',
-    width: 100,
-  }
-]
-
-//绉熸埛鍥炴敹绔欐悳绱㈣〃鍗�
-export const searchRecycleFormSchema : FormSchema[] = [
-  {
-    field: 'name',
-    label: '绉熸埛鍚嶇О',
-    component: 'Input',
-  },
-  {
-    field: 'houseNumber',
-    label: '闂ㄧ墝鍙�',
-    component: 'Input',
-  },
-]
diff --git a/src/views/system/user/PasswordModal.vue b/src/views/system/user/PasswordModal.vue
deleted file mode 100644
index d638c86..0000000
--- a/src/views/system/user/PasswordModal.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="淇敼瀵嗙爜" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" name="PassWordModal" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formPasswordSchema } from './user.data';
-  import { changePassword } from './user.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    schemas: formPasswordSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    //琛ㄥ崟璧嬪��
-    await setFieldsValue({ ...data });
-  });
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await changePassword(values);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/user/TenantUserList.vue b/src/views/system/user/TenantUserList.vue
deleted file mode 100644
index 54ee83b..0000000
--- a/src/views/system/user/TenantUserList.vue
+++ /dev/null
@@ -1,203 +0,0 @@
-<template>
-  <div>
-    <!--寮曠敤琛ㄦ牸-->
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-button type="primary" preIcon="ant-design:plus-outlined"  @click="handleCreate"> 鏂板</a-button>
-        <JThirdAppButton biz-type="user" :selected-row-keys="selectedRowKeys" syncToApp syncToLocal @sync-finally="onSyncFinally" />
-        <a-button type="primary" @click="openQuitModal(true, {})" preIcon="ant-design:user-delete-outlined">绂昏亴淇℃伅</a-button>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-    </BasicTable>
-    <!--鐢ㄦ埛鎶藉眽-->
-    <UserDrawer @register="registerDrawer" @success="handleSuccess" />
-    <!-- 绂昏亴鍙楃悊浜哄脊绐� -->
-    <UserQuitAgentModal @register="registerQuitAgentModal" @success="reload" />
-    <!-- 绂昏亴浜哄憳鍒楀脊绐� -->
-    <UserQuitModal @register="registerQuitModal" @success="reload" />
-  </div>
-</template>
-
-<script lang="ts" name="tenant-system-user" setup>
-  //ts璇硶
-  import { unref } from 'vue';
-  import { BasicTable, TableAction, ActionItem } from '/@/components/Table';
-  import UserDrawer from './UserDrawer.vue';
-  import JThirdAppButton from '/@/components/jeecg/thirdApp/JThirdAppButton.vue';
-  import UserQuitAgentModal from './UserQuitAgentModal.vue';
-  import UserQuitModal from './UserQuitModal.vue';
-  import { useDrawer } from '/@/components/Drawer';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { useModal } from '/@/components/Modal';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { columns, searchFormSchema } from './user.data';
-  import { list , deleteUser, batchDeleteUser, getImportUrl, getExportUrl, frozenBatch, syncUser, getUserTenantPageList, updateUserTenantStatus } from './user.api';
-  // import { usePermission } from '/@/hooks/web/usePermission'
-  // const { hasPermission } = usePermission();
-  import { userTenantColumns, userTenantFormSchema } from './user.data';
-  import { useUserStore } from '/@/store/modules/user';
-
-  const { createMessage, createConfirm } = useMessage();
-
-  //娉ㄥ唽drawer
-  const [registerDrawer, { openDrawer }] = useDrawer();
-  //绂昏亴浠g悊浜簃odel
-  const [registerQuitAgentModal, { openModal: openQuitAgentModal }] = useModal();
-  //绂昏亴鐢ㄦ埛鍒楄〃model
-  const [registerQuitModal, { openModal: openQuitModal }] = useModal();
-  const userStore = useUserStore();
-  const createBy = userStore.getUserInfo.username;
-
-  // 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-  const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-    designScope: 'user-list',
-    tableProps: {
-      title: '绉熸埛鐢ㄦ埛鍒楄〃',
-      api: getUserTenantPageList,
-      columns: userTenantColumns,
-      size: 'small',
-      formConfig: {
-        schemas: userTenantFormSchema,
-      },
-      actionColumn: {
-        width: 120,
-      },
-      beforeFetch: (params) => {
-        params['userTenantStatus'] = '1,3,4';
-        return Object.assign({ column: 'createTime', order: 'desc' }, params);
-      },
-    },
-  });
-
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload, updateTableDataRecord }, { rowSelection, selectedRows, selectedRowKeys }] = tableContext;
-
-  /**
-   * 鏂板浜嬩欢
-   */
-  function handleCreate() {
-    openDrawer(true, {
-      isUpdate: false,
-      showFooter: true,
-    });
-  }
-  /**
-   * 缂栬緫浜嬩欢
-   */
-  async function handleEdit(record: Recordable) {
-    openDrawer(true, {
-      record,
-      isUpdate: true,
-      showFooter: true,
-    });
-  }
-  /**
-   * 璇︽儏
-   */
-  async function handleDetail(record: Recordable) {
-    openDrawer(true, {
-      record,
-      isUpdate: true,
-      showFooter: false,
-    });
-  }
-
-  /**
-   * 鎴愬姛鍥炶皟
-   */
-  function handleSuccess() {
-    reload();
-  }
-
-  /**
-   *鍚屾閽夐拤鍜屽井淇″洖璋�
-   */
-  function onSyncFinally({ isToLocal }) {
-    // 鍚屾鍒版湰鍦版椂鍒锋柊涓嬫暟鎹�
-    if (isToLocal) {
-      reload();
-    }
-  }
-
-  /**
-   * 鎿嶄綔鏍�
-   */
-  function getTableAction(record): ActionItem[] {
-    return [
-      {
-        label: '缂栬緫',
-        onClick: handleEdit.bind(null, record),
-        // ifShow: () => hasPermission('system:user:edit'),
-      },
-    ];
-  }
-  /**
-   * 涓嬫媺鎿嶄綔鏍�
-   */
-  function getDropDownAction(record): ActionItem[] {
-    return [
-      {
-        label: '璇︽儏',
-        onClick: handleDetail.bind(null, record),
-      },
-      {
-        label: '绂昏亴',
-        onClick: handleQuit.bind(null, record.username),
-        //update-begin---author:wangshuai ---date:20230130  for锛歔QQYUN-3974]绉熸埛鐨勫垱寤轰汉 涓嶅簲璇ユ湁绂昏亴鎸夐挳------------
-        ifShow: () =>{
-          return record.username!== record.createBy;
-        }
-        //update-end---author:wangshuai ---date:20230130  for锛歔QQYUN-3974]绉熸埛鐨勫垱寤轰汉 涓嶅簲璇ユ湁绂昏亴鎸夐挳------------
-      },
-      {
-        label: '鍚屾剰',
-        onClick: updateStatus.bind(null, record.id, '1'),
-        ifShow: () => {
-          return (record.status === '3' || record.status === '4') && record.createBy === createBy;
-        },
-      },
-      {
-        label: '鎷掔粷',
-        popConfirm: {
-          title: '鏄惁纭鎷掔粷',
-          confirm: updateStatus.bind(null, record.id, '4'),
-        },
-        ifShow: () => {
-          return record.status === '3' && record.createBy === createBy;
-        },
-      },
-    ];
-  }
-
-  /**
-   * 绂昏亴
-   * @param userName
-   */
-  function handleQuit(userName) {
-    //鎵撳紑绂昏亴浠g悊浜哄脊绐�
-    openQuitAgentModal(true, { userName });
-  }
-
-  /**
-   * 鏇存柊鐢ㄦ埛绉熸埛鐘舵��
-   * @param id
-   * @param status
-   */
-  function updateStatus(id, status) {
-    updateUserTenantStatus({ userId: id, status: status })
-      .then((res) => {
-        if (res.success) {
-          handleSuccess();
-        }
-      })
-      .catch((e) => {
-        createMessage.warning(e.message);
-      });
-  }
-</script>
-
-<style scoped></style>
diff --git a/src/views/system/user/UserAgentModal.vue b/src/views/system/user/UserAgentModal.vue
deleted file mode 100644
index 25e8d4b..0000000
--- a/src/views/system/user/UserAgentModal.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :width="800" title="鐢ㄦ埛浠g悊" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, computed, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formAgentSchema } from './user.data';
-  import { getUserAgent, saveOrUpdateAgent } from './user.api';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
-    schemas: formAgentSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    //鏌ヨ鑾峰彇琛ㄥ崟鏁版嵁
-    const res = await getUserAgent({ userName: data.userName });
-    data = res.result ? res.result : data;
-    //琛ㄥ崟璧嬪��
-    await setFieldsValue({ ...data });
-  });
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateAgent(values);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/user/UserDrawer.vue b/src/views/system/user/UserDrawer.vue
deleted file mode 100644
index 6cb5a38..0000000
--- a/src/views/system/user/UserDrawer.vue
+++ /dev/null
@@ -1,141 +0,0 @@
-<template>
-  <BasicDrawer
-    v-bind="$attrs"
-    @register="registerDrawer"
-    :title="getTitle"
-    :width="adaptiveWidth"
-    @ok="handleSubmit"
-    :showFooter="showFooter"
-    destroyOnClose
-  >
-    <BasicForm @register="registerForm" />
-  </BasicDrawer>
-</template>
-<script lang="ts" setup>
-  import { defineComponent, ref, computed, unref, useAttrs } from 'vue';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formSchema } from './user.data';
-  import { getTenantId, getToken } from "/@/utils/auth";
-  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-  import { saveOrUpdateUser, getUserRoles, getUserDepartList } from './user.api';
-  import { useDrawerAdaptiveWidth } from '/@/hooks/jeecg/useAdaptiveWidth';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const attrs = useAttrs();
-  const isUpdate = ref(true);
-  const rowId = ref('');
-  const departOptions = ref([]);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { setProps, resetFields, setFieldsValue, validate, updateSchema }] = useForm({
-    labelWidth: 90,
-    schemas: formSchema,
-    showActionButtonGroup: false,
-  });
-  // TODO [VUEN-527] https://www.teambition.com/task/6239beb894b358003fe93626
-  const showFooter = ref(true);
-  //琛ㄥ崟璧嬪��
-  const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-    await resetFields();
-    showFooter.value = data?.showFooter ?? true;
-    setDrawerProps({ confirmLoading: false, showFooter: showFooter.value });
-    isUpdate.value = !!data?.isUpdate;
-    if (unref(isUpdate)) {
-      rowId.value = data.record.id;
-      //绉熸埛淇℃伅瀹氫箟鎴愭暟缁�
-      if (data.record.relTenantIds && !Array.isArray(data.record.relTenantIds)) {
-        data.record.relTenantIds = data.record.relTenantIds.split(',');
-      } else {
-        //銆恑ssues/I56C5I銆戠敤鎴风鐞嗕腑杩炵画鐐逛袱娆$紪杈戠鎴烽厤缃氨涓㈠け浜�
-        //data.record.relTenantIds = [];
-      }
-
-      //鏌ヨ鑹�/璧嬪��/try catch 澶勭悊锛屼笉鐒剁紪杈戞湁闂
-      try {
-        const userRoles = await getUserRoles({ userid: data.record.id });
-        if (userRoles && userRoles.length > 0) {
-          data.record.selectedroles = userRoles;
-        }
-      } catch (error) {}
-
-      //鏌ユ墍灞為儴闂�/璧嬪��
-      const userDepart = await getUserDepartList({ userId: data.record.id });
-      if (userDepart && userDepart.length > 0) {
-        data.record.selecteddeparts = userDepart;
-        let selectDepartKeys = Array.from(userDepart, ({ key }) => key);
-        data.record.selecteddeparts = selectDepartKeys.join(',');
-        departOptions.value = userDepart.map((item) => {
-          return { label: item.title, value: item.key };
-        });
-      }
-      //璐熻矗閮ㄩ棬/璧嬪��
-      data.record.departIds && !Array.isArray(data.record.departIds) && (data.record.departIds = data.record.departIds.split(','));
-      //update-begin---author:zyf   Date:20211210  for锛氶伩鍏嶇┖鍊兼樉绀哄紓甯�------------
-      data.record.departIds = data.record.departIds == '' ? [] : data.record.departIds;
-      //update-begin---author:zyf   Date:20211210  for锛氶伩鍏嶇┖鍊兼樉绀哄紓甯�------------
-    }
-    //澶勭悊瑙掕壊鐢ㄦ埛鍒楄〃鎯呭喌(鍜岃鑹插垪琛ㄦ湁鍏崇郴)
-    data.selectedroles && (await setFieldsValue({ selectedroles: data.selectedroles }));
-    //缂栬緫鏃堕殣钘忓瘑鐮�/瑙掕壊鍒楄〃闅愯棌瑙掕壊淇℃伅/鎴戠殑閮ㄩ棬鏃堕殣钘忔墍灞為儴闂�
-    updateSchema([
-      {
-        field: 'password',
-        show: !unref(isUpdate),
-      },
-      {
-        field: 'confirmPassword',
-        ifShow: !unref(isUpdate),
-      },
-      {
-        field: 'selectedroles',
-        show: !data.isRole,
-      },
-      {
-        field: 'departIds',
-        componentProps: { options: departOptions },
-      },
-      {
-        field: 'selecteddeparts',
-        show: !data?.departDisabled ?? false,
-      },
-      {
-        field: 'selectedroles',
-        show: !data?.departDisabled ?? false,
-      },
-      {
-        field: 'relTenantIds',
-        show: Number(getTenantId())<=0,
-      },
-    ]);
-    // 鏃犺鏂板杩樻槸缂栬緫锛岄兘鍙互璁剧疆琛ㄥ崟鍊�
-    if (typeof data.record === 'object') {
-      setFieldsValue({
-        ...data.record,
-      });
-    }
-    // 闅愯棌搴曢儴鏃剁鐢ㄦ暣涓〃鍗�
-    //update-begin-author:taoyan date:2022-5-24 for: VUEN-1117銆恑ssue銆�0523鍛ㄥ紑婧愰棶棰�
-    setProps({ disabled: !showFooter.value });
-    //update-end-author:taoyan date:2022-5-24 for: VUEN-1117銆恑ssue銆�0523鍛ㄥ紑婧愰棶棰�
-  });
-  //鑾峰彇鏍囬
-  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板鐢ㄦ埛' : '缂栬緫鐢ㄦ埛'));
-  const { adaptiveWidth } = useDrawerAdaptiveWidth();
-
-  //鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      let values = await validate();
-      setDrawerProps({ confirmLoading: true });
-      values.userIdentity === 1 && (values.departIds = '');
-      let isUpdateVal = unref(isUpdate);
-      //鎻愪氦琛ㄥ崟
-      await saveOrUpdateUser(values, isUpdateVal);
-      //鍏抽棴寮圭獥
-      closeDrawer();
-      //鍒锋柊鍒楄〃
-      emit('success',{isUpdateVal ,values});
-    } finally {
-      setDrawerProps({ confirmLoading: false });
-    }
-  }
-</script>
diff --git a/src/views/system/user/UserQuitAgentModal.vue b/src/views/system/user/UserQuitAgentModal.vue
deleted file mode 100644
index b7aeeaa..0000000
--- a/src/views/system/user/UserQuitAgentModal.vue
+++ /dev/null
@@ -1,68 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :width="800" title="绂昏亴浜ゆ帴" @ok="handleSubmit">
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-<script lang="ts" setup name="user-quit-agent-modal">
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { formQuitAgentSchema } from './user.data';
-  import { getUserAgent, userQuitAgent } from './user.api';
-  import dayjs from 'dayjs';
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  //琛ㄥ崟閰嶇疆
-  const [registerForm, { resetFields, setFieldsValue, validate, clearValidate }] = useForm({
-    schemas: formQuitAgentSchema,
-    showActionButtonGroup: false,
-  });
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    //閲嶇疆琛ㄥ崟
-    await resetFields();
-    setModalProps({ confirmLoading: false });
-    setModalProps({ confirmLoading: false });
-    //鏌ヨ鑾峰彇琛ㄥ崟鏁版嵁
-    const res = await getUserAgent({ userName: data.userName });
-    data = res.result ? res.result : data;
-    let date = new Date();
-    if (!data.startTime) {
-      data.startTime = dayjs(date).format('YYYY-MM-DD HH:mm:ss');
-    }
-    if (!data.endTime) {
-      data.endTime = getYear(date);
-    }
-    //琛ㄥ崟璧嬪��
-    await setFieldsValue({ ...data });
-  });
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      const values = await validate();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      await userQuitAgent(values);
-      //鍏抽棴寮圭獥
-      closeModal();
-      //鍒锋柊鍒楄〃
-      emit('success');
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-
-  /**
-   * 鑾峰彇鍚�30骞�
-   */
-  function getYear(date) {
-    //update-begin---author:wangshuai ---date:20221207  for锛歔QQYUN-3285]浜ゆ帴浜鸿缃� 缁撴潫鏃堕棿鏈夐棶棰�------------
-    //杩欐槸涓�涓暟鍊�
-    let y = date.getFullYear() + 30;
-    let m = dayjs(date).format('MM');
-    let d = dayjs(date).format('DD');
-    let hour = dayjs(date).format('HH:mm:ss');
-    console.log('骞存湀鏃�', y + '-' + m + '-' + d);
-    return dayjs(y + '-' + m + '-' + d + ' ' + hour).format('YYYY-MM-DD HH:mm:ss');
-    //update-end---author:wangshuai ---date:20221207  for锛歔QQYUN-3285]浜ゆ帴浜鸿缃� 缁撴潫鏃堕棿鏈夐棶棰�--------------
-  }
-</script>
diff --git a/src/views/system/user/UserQuitModal.vue b/src/views/system/user/UserQuitModal.vue
deleted file mode 100644
index 7822269..0000000
--- a/src/views/system/user/UserQuitModal.vue
+++ /dev/null
@@ -1,110 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="绂昏亴浜哄憳淇℃伅" :showOkBtn="false" width="1000px" destroyOnClose>
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleRevert">
-                <Icon icon="ant-design:redo-outlined"></Icon>
-                鎵归噺鍙栨秷
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="ant-design:down-outlined"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" />
-      </template>
-    </BasicTable>
-  </BasicModal>
-</template>
-
-<script lang="ts" setup name="user-quit-modal">
-  import { ref, toRaw, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { recycleColumns } from './user.data';
-  import { getQuitList, putCancelQuit, deleteRecycleBin } from './user.api';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useListPage } from '/@/hooks/system/useListPage';
-  import { Modal } from 'ant-design-vue';
-  import { defHttp } from '/@/utils/http/axios';
-
-  const { createConfirm } = useMessage();
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const checkedKeys = ref<Array<string | number>>([]);
-  const [registerModal] = useModalInner(() => {
-    checkedKeys.value = [];
-  });
-  //娉ㄥ唽table鏁版嵁
-  const { prefixCls, tableContext } = useListPage({
-    tableProps: {
-      api: getQuitList,
-      columns: recycleColumns,
-      rowKey: 'id',
-      canResize: false,
-      useSearchForm: false,
-      actionColumn: {
-        width: 120,
-      },
-    },
-  });
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload }, { rowSelection, selectedRowKeys, selectedRows }] = tableContext;
-
-  /**
-   * 鍙栨秷绂昏亴浜嬩欢
-   * @param record
-   */
-  async function handleCancelQuit(record) {
-    await putCancelQuit({ userIds: record.id, usernames: record.username }, reload);
-    emit('success');
-  }
-  /**
-   * 鎵归噺鍙栨秷绂昏亴浜嬩欢
-   */
-  function batchHandleRevert() {
-    Modal.confirm({
-      title: '鍙栨秷绂昏亴',
-      content: '鍙栨秷绂昏亴浜ゆ帴浜轰篃浼氭竻绌�',
-      okText: '纭',
-      cancelText: '鍙栨秷',
-      onOk: () => {
-        let rowValue = selectedRows.value;
-        let rowData: any = [];
-        for (const value of rowValue) {
-          rowData.push(value.username);
-        }
-        handleCancelQuit({ id: toRaw(unref(selectedRowKeys)).join(','), username: rowData.join(',') });
-      },
-    });
-  }
-
-  //鑾峰彇鎿嶄綔鏍忎簨浠�
-  function getTableAction(record) {
-    return [
-      {
-        label: '鍙栨秷绂昏亴',
-        icon: 'ant-design:redo-outlined',
-        popConfirm: {
-          title: '鏄惁鍙栨秷绂昏亴,鍙栨秷绂昏亴浜ゆ帴浜轰篃浼氭竻绌�',
-          confirm: handleCancelQuit.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
-
-<style scoped lang="less">
-:deep(.ant-popover-inner-content){
-  width: 185px !important;
-}
-</style>
diff --git a/src/views/system/user/UserRecycleBinModal.vue b/src/views/system/user/UserRecycleBinModal.vue
deleted file mode 100644
index 486f799..0000000
--- a/src/views/system/user/UserRecycleBinModal.vue
+++ /dev/null
@@ -1,138 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="鐢ㄦ埛鍥炴敹绔�" :showOkBtn="false" width="1000px" destroyOnClose>
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-dropdown v-if="checkedKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined"></Icon>
-                鎵归噺鍒犻櫎
-              </a-menu-item>
-              <a-menu-item key="1" @click="batchHandleRevert">
-                <Icon icon="ant-design:redo-outlined"></Icon>
-                鎵归噺杩樺師
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button
-            >鎵归噺鎿嶄綔
-            <Icon icon="ant-design:down-outlined"></Icon>
-          </a-button>
-        </a-dropdown>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #bodyCell="{ column, record }">
-        <template v-if="column.key === 'action'">
-          <TableAction :actions="getTableAction(record)" />
-        </template>
-      </template>
-    </BasicTable>
-  </BasicModal>
-</template>
-<script lang="ts" setup>
-  import { ref, toRaw, unref } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { recycleColumns } from './user.data';
-  import { getRecycleBinList, putRecycleBin, deleteRecycleBin } from './user.api';
-  import { useMessage } from '/@/hooks/web/useMessage';
-
-  const { createConfirm } = useMessage();
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  const checkedKeys = ref<Array<string | number>>([]);
-  const [registerModal] = useModalInner(() => {
-    checkedKeys.value = [];
-  });
-  //娉ㄥ唽table鏁版嵁
-  const [registerTable, { reload }] = useTable({
-    api: getRecycleBinList,
-    columns: recycleColumns,
-    rowKey: 'id',
-    striped: true,
-    useSearchForm: false,
-    showTableSetting: false,
-    clickToRowSelect: false,
-    bordered: true,
-    showIndexColumn: false,
-    pagination: true,
-    tableSetting: { fullScreen: true },
-    canResize: false,
-    actionColumn: {
-      width: 150,
-      title: '鎿嶄綔',
-      dataIndex: 'action',
-      // slots: { customRender: 'action' },
-      fixed: undefined,
-    },
-  });
-  /**
-   * 閫夋嫨鍒楅厤缃�
-   */
-  const rowSelection = {
-    type: 'checkbox',
-    columnWidth: 50,
-    selectedRowKeys: checkedKeys,
-    onChange: onSelectChange,
-  };
-  /**
-   * 閫夋嫨浜嬩欢
-   */
-  function onSelectChange(selectedRowKeys: (string | number)[]) {
-    checkedKeys.value = selectedRowKeys;
-  }
-  /**
-   * 杩樺師浜嬩欢
-   */
-  async function handleRevert(record) {
-    await putRecycleBin({ userIds: record.id }, reload);
-    emit('success');
-  }
-  /**
-   * 鎵归噺杩樺師浜嬩欢
-   */
-  function batchHandleRevert() {
-    handleRevert({ id: toRaw(unref(checkedKeys)).join(',') });
-  }
-  /**
-   * 鍒犻櫎浜嬩欢
-   */
-  async function handleDelete(record) {
-    await deleteRecycleBin({ userIds: record.id }, reload);
-  }
-  /**
-   * 鎵归噺鍒犻櫎浜嬩欢
-   */
-  function batchHandleDelete() {
-    createConfirm({
-      iconType: 'warning',
-      title: '鍒犻櫎',
-      content: '纭畾瑕佹案涔呭垹闄ゅ悧锛熷垹闄ゅ悗灏嗕笉鍙仮澶嶏紒',
-      onOk: () => handleDelete({ id: toRaw(unref(checkedKeys)).join(',') }),
-      onCancel() {},
-    });
-  }
-  //鑾峰彇鎿嶄綔鏍忎簨浠�
-  function getTableAction(record) {
-    return [
-      {
-        label: '鍙栧洖',
-        icon: 'ant-design:redo-outlined',
-        popConfirm: {
-          title: '鏄惁纭杩樺師',
-          confirm: handleRevert.bind(null, record),
-        },
-      },
-      {
-        label: '褰诲簳鍒犻櫎',
-        icon: 'ant-design:scissor-outlined',
-        popConfirm: {
-          title: '鏄惁纭鍒犻櫎',
-          confirm: handleDelete.bind(null, record),
-        },
-      },
-    ];
-  }
-</script>
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
deleted file mode 100644
index 70a622e..0000000
--- a/src/views/system/user/index.vue
+++ /dev/null
@@ -1,304 +0,0 @@
-<template>
-  <div>
-    <!--寮曠敤琛ㄦ牸-->
-    <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <!--鎻掓Ы:table鏍囬-->
-      <template #tableTitle>
-        <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 鏂板</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 瀵煎嚭</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">瀵煎叆</j-upload-button>
-        <a-button type="primary" @click="handleSyncUser" preIcon="ant-design:sync-outlined"> 鍚屾娴佺▼</a-button>
-        <a-button type="primary" @click="openModal(true, {})" preIcon="ant-design:hdd-outlined"> 鍥炴敹绔�</a-button>
-        <JThirdAppButton biz-type="user" :selected-row-keys="selectedRowKeys" syncToApp syncToLocal
-          @sync-finally="onSyncFinally" />
-        <a-dropdown v-if="selectedRowKeys.length > 0">
-          <template #overlay>
-            <a-menu>
-              <a-menu-item key="1" @click="batchHandleDelete">
-                <Icon icon="ant-design:delete-outlined" />
-                鍒犻櫎
-              </a-menu-item>
-              <a-menu-item key="2" @click="batchFrozen(2)">
-                <Icon icon="ant-design:lock-outlined" />
-                鍐荤粨
-              </a-menu-item>
-              <a-menu-item key="3" @click="batchFrozen(1)">
-                <Icon icon="ant-design:unlock-outlined" />
-                瑙e喕
-              </a-menu-item>
-            </a-menu>
-          </template>
-          <a-button>鎵归噺鎿嶄綔
-            <Icon icon="mdi:chevron-down" />
-          </a-button>
-        </a-dropdown>
-      </template>
-      <!--鎿嶄綔鏍�-->
-      <template #action="{ record }">
-        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-    </BasicTable>
-    <!--鐢ㄦ埛鎶藉眽-->
-    <UserDrawer @register="registerDrawer" @success="handleSuccess" />
-    <!--淇敼瀵嗙爜-->
-    <PasswordModal @register="registerPasswordModal" @success="reload" />
-    <!--鐢ㄦ埛浠g悊-->
-    <UserAgentModal @register="registerAgentModal" @success="reload" />
-    <!--鍥炴敹绔�-->
-    <UserRecycleBinModal @register="registerModal" @success="reload" />
-    <!-- 绂昏亴鍙楃悊浜哄脊绐� -->
-    <UserQuitAgentModal @register="registerQuitAgentModal" @success="reload" />
-    <!-- 绂昏亴浜哄憳鍒楀脊绐� -->
-    <UserQuitModal @register="registerQuitModal" @success="reload" />
-  </div>
-</template>
-
-<script lang="ts" name="system-user" setup>
-//ts璇硶
-import { unref } from 'vue'
-import PasswordModal from './PasswordModal.vue'
-import { batchDeleteUser, deleteUser, frozenBatch, getExportUrl, getImportUrl, listNoCareTenant, syncUser } from './user.api'
-import { columns, searchFormSchema } from './user.data'
-import UserAgentModal from './UserAgentModal.vue'
-import UserDrawer from './UserDrawer.vue'
-import UserQuitAgentModal from './UserQuitAgentModal.vue'
-import UserQuitModal from './UserQuitModal.vue'
-import UserRecycleBinModal from './UserRecycleBinModal.vue'
-import { useDrawer } from '/@/components/Drawer'
-import JThirdAppButton from '/@/components/jeecg/thirdApp/JThirdAppButton.vue'
-import { useModal } from '/@/components/Modal'
-import { ActionItem, BasicTable, TableAction } from '/@/components/Table'
-import { useListPage } from '/@/hooks/system/useListPage'
-import { useMessage } from '/@/hooks/web/useMessage'
-import { usePermission } from '/@/hooks/web/usePermission'
-
-const { createMessage, createConfirm } = useMessage()
-const { isDisabledAuth } = usePermission()
-//娉ㄥ唽drawer
-const [registerDrawer, { openDrawer }] = useDrawer()
-//鍥炴敹绔檓odel
-const [registerModal, { openModal }] = useModal()
-//瀵嗙爜model
-const [registerPasswordModal, { openModal: openPasswordModal }] = useModal()
-//浠g悊浜簃odel
-const [registerAgentModal, { openModal: openAgentModal }] = useModal()
-//绂昏亴浠g悊浜簃odel
-const [registerQuitAgentModal, { openModal: openQuitAgentModal }] = useModal()
-//绂昏亴鐢ㄦ埛鍒楄〃model
-const [registerQuitModal, { openModal: openQuitModal }] = useModal()
-
-// 鍒楄〃椤甸潰鍏叡鍙傛暟銆佹柟娉�
-const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
-  designScope: 'user-list',
-  tableProps: {
-    title: '鐢ㄦ埛鍒楄〃',
-    api: listNoCareTenant,
-    columns: columns,
-    size: 'small',
-    formConfig: {
-      // labelWidth: 200,
-      schemas: searchFormSchema,
-    },
-    actionColumn: {
-      width: 120,
-    },
-    beforeFetch: (params) => {
-      return Object.assign({ column: 'createTime', order: 'desc' }, params)
-    },
-  },
-  exportConfig: {
-    name: '鐢ㄦ埛鍒楄〃',
-    url: getExportUrl,
-  },
-  importConfig: {
-    url: getImportUrl,
-  },
-})
-
-//娉ㄥ唽table鏁版嵁
-const [registerTable, { reload, updateTableDataRecord }, { rowSelection, selectedRows, selectedRowKeys }] = tableContext
-
-/**
- * 鏂板浜嬩欢
- */
-function handleCreate() {
-  openDrawer(true, {
-    isUpdate: false,
-    showFooter: true,
-  })
-}
-/**
- * 缂栬緫浜嬩欢
- */
-async function handleEdit(record: Recordable) {
-  openDrawer(true, {
-    record,
-    isUpdate: true,
-    showFooter: true,
-  })
-}
-/**
- * 璇︽儏
- */
-async function handleDetail(record: Recordable) {
-  openDrawer(true, {
-    record,
-    isUpdate: true,
-    showFooter: false,
-  })
-}
-/**
- * 鍒犻櫎浜嬩欢
- */
-async function handleDelete(record) {
-  if ('admin' == record.username) {
-    createMessage.warning('绠$悊鍛樿处鍙蜂笉鍏佽姝ゆ搷浣滐紒')
-    return
-  }
-  await deleteUser({ id: record.id }, reload)
-}
-/**
- * 鎵归噺鍒犻櫎浜嬩欢
- */
-async function batchHandleDelete() {
-  let hasAdmin = unref(selectedRows).filter((item) => item.username == 'admin')
-  if (unref(hasAdmin).length > 0) {
-    createMessage.warning('绠$悊鍛樿处鍙蜂笉鍏佽姝ゆ搷浣滐紒')
-    return
-  }
-  await batchDeleteUser({ ids: selectedRowKeys.value }, () => {
-    selectedRowKeys.value = []
-    reload()
-  })
-}
-/**
- * 鎴愬姛鍥炶皟
- */
-function handleSuccess() {
-  reload()
-}
-
-/**
- * 鎵撳紑淇敼瀵嗙爜寮圭獥
- */
-function handleChangePassword(username) {
-  openPasswordModal(true, { username })
-}
-/**
- * 鎵撳紑浠g悊浜哄脊绐�
- */
-function handleAgentSettings(userName) {
-  openAgentModal(true, { userName })
-}
-/**
- * 鍐荤粨瑙e喕
- */
-async function handleFrozen(record, status) {
-  if ('admin' == record.username) {
-    createMessage.warning('绠$悊鍛樿处鍙蜂笉鍏佽姝ゆ搷浣滐紒')
-    return
-  }
-  await frozenBatch({ ids: record.id, status: status }, reload)
-}
-/**
- * 鎵归噺鍐荤粨瑙e喕
- */
-function batchFrozen(status) {
-  let hasAdmin = selectedRows.value.filter((item) => item.username == 'admin')
-  if (unref(hasAdmin).length > 0) {
-    createMessage.warning('绠$悊鍛樿处鍙蜂笉鍏佽姝ゆ搷浣滐紒')
-    return
-  }
-  createConfirm({
-    iconType: 'warning',
-    title: '纭鎿嶄綔',
-    content: '鏄惁' + (status == 1 ? '瑙e喕' : '鍐荤粨') + '閫変腑璐﹀彿?',
-    onOk: async () => {
-      await frozenBatch({ ids: unref(selectedRowKeys).join(','), status: status }, reload)
-    },
-  })
-}
-
-/**
- *鍚屾娴佺▼
- */
-function handleSyncUser() {
-  syncUser()
-}
-/**
- *鍚屾閽夐拤鍜屽井淇″洖璋�
- */
-function onSyncFinally({ isToLocal }) {
-  // 鍚屾鍒版湰鍦版椂鍒锋柊涓嬫暟鎹�
-  if (isToLocal) {
-    reload()
-  }
-}
-
-/**
- * 鎿嶄綔鏍�
- */
-function getTableAction(record): ActionItem[] {
-  return [
-    {
-      label: '缂栬緫',
-      onClick: handleEdit.bind(null, record),
-      // ifShow: () => hasPermission('system:user:edit'),
-    },
-  ]
-}
-/**
- * 涓嬫媺鎿嶄綔鏍�
- */
-function getDropDownAction(record): ActionItem[] {
-  return [
-    {
-      label: '璇︽儏',
-      onClick: handleDetail.bind(null, record),
-    },
-    {
-      label: '瀵嗙爜',
-      //auth: 'user:changepwd',
-      onClick: handleChangePassword.bind(null, record.username),
-    },
-    {
-      label: '鍒犻櫎',
-      popConfirm: {
-        title: '鏄惁纭鍒犻櫎',
-        confirm: handleDelete.bind(null, record),
-      },
-    },
-    {
-      label: '鍐荤粨',
-      ifShow: record.status == 1,
-      popConfirm: {
-        title: '纭畾鍐荤粨鍚�?',
-        confirm: handleFrozen.bind(null, record, 2),
-      },
-    },
-    {
-      label: '瑙e喕',
-      ifShow: record.status == 2,
-      popConfirm: {
-        title: '纭畾瑙e喕鍚�?',
-        confirm: handleFrozen.bind(null, record, 1),
-      },
-    },
-    {
-      label: '浠g悊浜�',
-      onClick: handleAgentSettings.bind(null, record.username),
-    },
-  ]
-}
-
-/**
- * 绂昏亴
- * @param userName
- */
-function handleQuit(userName) {
-  //鎵撳紑绂昏亴浠g悊浜哄脊绐�
-  openQuitAgentModal(true, { userName })
-}
-</script>
-
-<style scoped></style>
diff --git a/src/views/system/user/user.api.ts b/src/views/system/user/user.api.ts
deleted file mode 100644
index c422901..0000000
--- a/src/views/system/user/user.api.ts
+++ /dev/null
@@ -1,226 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { Modal } from 'ant-design-vue';
-
-enum Api {
-  listNoCareTenant = '/sys/user/listAll',
-  list = '/sys/user/list',
-  save = '/sys/user/add',
-  edit = '/sys/user/edit',
-  agentSave = '/sys/sysUserAgent/add',
-  agentEdit = '/sys/sysUserAgent/edit',
-  getUserRole = '/sys/user/queryUserRole',
-  duplicateCheck = '/sys/duplicate/check',
-  deleteUser = '/sys/user/delete',
-  deleteBatch = '/sys/user/deleteBatch',
-  importExcel = '/sys/user/importExcel',
-  exportXls = '/sys/user/exportXls',
-  recycleBinList = '/sys/user/recycleBin',
-  putRecycleBin = '/sys/user/putRecycleBin',
-  deleteRecycleBin = '/sys/user/deleteRecycleBin',
-  allRolesList = '/sys/role/queryall',
-  allRolesListNoByTenant = '/sys/role/queryallNoByTenant',
-  allTenantList = '/sys/tenant/queryList',
-  allPostList = '/sys/position/list',
-  userDepartList = '/sys/user/userDepartList',
-  changePassword = '/sys/user/changePassword',
-  frozenBatch = '/sys/user/frozenBatch',
-  getUserAgent = '/sys/sysUserAgent/queryByUserName',
-  syncUser = '/act/process/extActProcess/doSyncUser',
-  userQuitAgent = '/sys/user/userQuitAgent',
-  getQuitList = '/sys/user/getQuitList',
-  putCancelQuit = '/sys/user/putCancelQuit',
-  updateUserTenantStatus='/sys/tenant/updateUserTenantStatus',
-  getUserTenantPageList='/sys/tenant/getUserTenantPageList',
-}
-/**
- * 瀵煎嚭api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-/**
- * 瀵煎叆api
- */
-export const getImportUrl = Api.importExcel;
-/**
- * 鍒楄〃鎺ュ彛(鏌ヨ鐢ㄦ埛锛岄�氳繃绉熸埛闅旂)
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-
-/**
- * 鍒楄〃鎺ュ彛(鏌ヨ鍏ㄩ儴鐢ㄦ埛锛屼笉閫氳繃绉熸埛闅旂)
- * @param params
- */
-export const listNoCareTenant = (params) => defHttp.get({ url: Api.listNoCareTenant, params });
-
-/**
- * 鐢ㄦ埛瑙掕壊鎺ュ彛
- * @param params
- */
-export const getUserRoles = (params) => defHttp.get({ url: Api.getUserRole, params }, { errorMessageMode: 'none' });
-
-/**
- * 鍒犻櫎鐢ㄦ埛
- */
-export const deleteUser = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteUser, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鎵归噺鍒犻櫎鐢ㄦ埛
- * @param params
- */
-export const batchDeleteUser = (params, handleSuccess) => {
-  Modal.confirm({
-    title: '纭鍒犻櫎',
-    content: '鏄惁鍒犻櫎閫変腑鏁版嵁',
-    okText: '纭',
-    cancelText: '鍙栨秷',
-    onOk: () => {
-      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
-        handleSuccess();
-      });
-    },
-  });
-};
-/**
- * 淇濆瓨鎴栬�呮洿鏂扮敤鎴�
- * @param params
- */
-export const saveOrUpdateUser = (params, isUpdate) => {
-  let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({ url: url, params });
-};
-/**
- * 鍞竴鏍¢獙
- * @param params
- */
-export const duplicateCheck = (params) => defHttp.get({ url: Api.duplicateCheck, params }, { isTransformResponse: false });
-/**
- * 鑾峰彇鍏ㄩ儴瑙掕壊锛堢鎴烽殧绂伙級
- * @param params
- */
-export const getAllRolesList = (params) => defHttp.get({ url: Api.allRolesList, params });
-/**
- * 鑾峰彇鍏ㄩ儴瑙掕壊锛堜笉绉熸埛闅旂锛�
- * @param params
- */
-export const getAllRolesListNoByTenant = (params) => defHttp.get({ url: Api.allRolesListNoByTenant, params });
-/**
- * 鑾峰彇鍏ㄩ儴绉熸埛
- */
-export const getAllTenantList = (params) => defHttp.get({ url: Api.allTenantList, params });
-/**
- * 鑾峰彇鎸囧畾鐢ㄦ埛璐熻矗閮ㄩ棬
- */
-export const getUserDepartList = (params) => defHttp.get({ url: Api.userDepartList, params }, { successMessageMode: 'none' });
-/**
- * 鑾峰彇鍏ㄩ儴鑱屽姟
- */
-export const getAllPostList = (params) => {
-  return new Promise((resolve) => {
-    defHttp.get({ url: Api.allPostList, params }).then((res) => {
-      resolve(res.records);
-    });
-  });
-};
-/**
- * 鍥炴敹绔欏垪琛�
- * @param params
- */
-export const getRecycleBinList = (params) => defHttp.get({ url: Api.recycleBinList, params });
-/**
- * 鍥炴敹绔欒繕鍘�
- * @param params
- */
-export const putRecycleBin = (params, handleSuccess) => {
-  return defHttp.put({ url: Api.putRecycleBin, params }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鍥炴敹绔欏垹闄�
- * @param params
- */
-export const deleteRecycleBin = (params, handleSuccess) => {
-  return defHttp.delete({ url: Api.deleteRecycleBin, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 淇敼瀵嗙爜
- * @param params
- */
-export const changePassword = (params) => {
-  return defHttp.put({ url: Api.changePassword, params });
-};
-/**
- * 鍐荤粨瑙e喕
- * @param params
- */
-export const frozenBatch = (params, handleSuccess) => {
-  return defHttp.put({ url: Api.frozenBatch, params }).then(() => {
-    handleSuccess();
-  });
-};
-/**
- * 鑾峰彇鐢ㄦ埛浠g悊
- * @param params
- */
-export const getUserAgent = (params) => defHttp.get({ url: Api.getUserAgent, params }, { isTransformResponse: false });
-/**
- * 淇濆瓨鎴栬�呮洿鏂扮敤鎴蜂唬鐞�
- * @param params
- */
-export const saveOrUpdateAgent = (params) => {
-  let url = params.id ? Api.agentEdit : Api.agentSave;
-  return defHttp.post({ url: url, params });
-};
-
-/**
- * 鐢ㄦ埛鍚屾娴佺▼
- * @param params
- */
-export const syncUser = () => defHttp.put({ url: Api.syncUser });
-
-/**
- * 鐢ㄦ埛绂昏亴(鏂板浠g悊浜哄拰鐢ㄦ埛鐘舵�佸彉鏇存搷浣�)
- * @param params
- */
-export const userQuitAgent = (params) => {
-  return defHttp.put({ url: Api.userQuitAgent, params });
-};
-
-/**
- * 鐢ㄦ埛绂昏亴鍒楄〃
- * @param params
- */
-export const getQuitList = (params) => {
-  return defHttp.get({ url: Api.getQuitList, params });
-};
-
-/**
- * 鍙栨秷绂昏亴
- * @param params
- */
-export const putCancelQuit = (params, handleSuccess) => {
-  return defHttp.put({ url: Api.putCancelQuit, params }, { joinParamsToUrl: true }).then(() => {
-    handleSuccess();
-  });
-};
-
-/**
- * 寰呭鎵硅幏鍙栧垪琛ㄦ暟鎹�
- */
-export const getUserTenantPageList = (params)=>{
-  return defHttp.get({url:Api.getUserTenantPageList,params})
-}
-
-/**
- * 鏇存柊绉熸埛鐘舵��
- * @param params
- */
-export const updateUserTenantStatus = (params)=>{
-  return defHttp.put({ url: Api.updateUserTenantStatus, params }, { joinParamsToUrl: true,isTransformResponse: false });
-}
diff --git a/src/views/system/user/user.data.ts b/src/views/system/user/user.data.ts
deleted file mode 100644
index 4bbc4a1..0000000
--- a/src/views/system/user/user.data.ts
+++ /dev/null
@@ -1,541 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-import { getAllRolesListNoByTenant, getAllTenantList } from './user.api';
-import { rules } from '/@/utils/helper/validator';
-import { render } from '/@/utils/common/renderUtils';
-export const columns: BasicColumn[] = [
-  {
-    title: '鐢ㄦ埛璐﹀彿',
-    dataIndex: 'username',
-    width: 120,
-  },
-  {
-    title: '鐢ㄦ埛濮撳悕',
-    dataIndex: 'realname',
-    width: 100,
-  },
-  {
-    title: '澶村儚',
-    dataIndex: 'avatar',
-    width: 120,
-    customRender: render.renderAvatar,
-  },
-  {
-    title: '鎬у埆',
-    dataIndex: 'sex',
-    width: 80,
-    sorter: true,
-    customRender: ({ text }) => {
-      return render.renderDict(text, 'sex');
-    },
-  },
-  {
-    title: '鐢熸棩',
-    dataIndex: 'birthday',
-    width: 100,
-  },
-  {
-    title: '鎵嬫満鍙�',
-    dataIndex: 'phone',
-    width: 100,
-  },
-  {
-    title: '閮ㄩ棬',
-    width: 150,
-    dataIndex: 'orgCodeTxt',
-  },
-  {
-    title: '璐熻矗閮ㄩ棬',
-    width: 150,
-    dataIndex: 'departIds_dictText',
-  },
-  {
-    title: '鐘舵��',
-    dataIndex: 'status_dictText',
-    width: 80,
-  },
-];
-
-export const recycleColumns: BasicColumn[] = [
-  {
-    title: '鐢ㄦ埛璐﹀彿',
-    dataIndex: 'username',
-    width: 100,
-  },
-  {
-    title: '鐢ㄦ埛濮撳悕',
-    dataIndex: 'realname',
-    width: 100,
-  },
-  {
-    title: '澶村儚',
-    dataIndex: 'avatar',
-    width: 80,
-    customRender: render.renderAvatar,
-  },
-  {
-    title: '鎬у埆',
-    dataIndex: 'sex',
-    width: 80,
-    sorter: true,
-    customRender: ({ text }) => {
-      return render.renderDict(text, 'sex');
-    },
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    label: '璐﹀彿',
-    field: 'username',
-    component: 'JInput',
-    colProps: { span: 6 },
-  },
-  {
-    label: '鍚嶅瓧',
-    field: 'realname',
-    component: 'JInput',
-    colProps: { span: 6 },
-  },
-  {
-    label: '鎬у埆',
-    field: 'sex',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'sex',
-      placeholder: '璇烽�夋嫨鎬у埆',
-      stringToNumber: true,
-    },
-    colProps: { span: 6 },
-  },
-  {
-    label: '鎵嬫満鍙风爜',
-    field: 'phone',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '鐢ㄦ埛鐘舵��',
-    field: 'status',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'user_status',
-      placeholder: '璇烽�夋嫨鐘舵��',
-      stringToNumber: true,
-    },
-    colProps: { span: 6 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '鐢ㄦ埛璐﹀彿',
-    field: 'username',
-    component: 'Input',
-    dynamicDisabled: ({ values }) => {
-      return !!values.id;
-    },
-    dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'username', model, schema, true),
-  },
-  {
-    label: '鐧诲綍瀵嗙爜',
-    field: 'password',
-    component: 'StrengthMeter',
-    rules: [
-      {
-        required: true,
-        message: '璇疯緭鍏ョ櫥褰曞瘑鐮�',
-      },
-    ],
-  },
-  {
-    label: '纭瀵嗙爜',
-    field: 'confirmPassword',
-    component: 'InputPassword',
-    dynamicRules: ({ values }) => rules.confirmPassword(values, true),
-  },
-  {
-    label: '鐢ㄦ埛濮撳悕',
-    field: 'realname',
-    required: true,
-    component: 'Input',
-  },
-  {
-    label: '宸ュ彿',
-    field: 'workNo',
-    required: true,
-    component: 'Input',
-    dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'work_no', model, schema, true),
-  },
-  {
-    label: '鑱屽姟',
-    field: 'post',
-    required: false,
-    component: 'JSelectPosition',
-    componentProps: {
-      rowKey: 'code',
-      labelKey: 'name',
-    },
-  },
-  {
-    label: '瑙掕壊',
-    field: 'selectedroles',
-    component: 'ApiSelect',
-    componentProps: {
-      mode: 'multiple',
-      api: getAllRolesListNoByTenant,
-      labelField: 'roleName',
-      valueField: 'id',
-    },
-  },
-  {
-    label: '鎵�灞為儴闂�',
-    field: 'selecteddeparts',
-    component: 'JSelectDept',
-    componentProps: ({ formActionType, formModel }) => {
-      return {
-        sync: false,
-        checkStrictly: true,
-        defaultExpandLevel: 2,
-
-        onSelect: (options, values) => {
-          const { updateSchema } = formActionType;
-          //鎵�灞為儴闂ㄤ慨鏀瑰悗鏇存柊璐熻矗閮ㄩ棬涓嬫媺妗嗘暟鎹�
-          updateSchema([
-            {
-              field: 'departIds',
-              componentProps: { options },
-            },
-          ]);
-          //鎵�灞為儴闂ㄤ慨鏀瑰悗鏇存柊璐熻矗閮ㄩ棬鏁版嵁
-          formModel.departIds && (formModel.departIds = formModel.departIds.filter((item) => values.value.indexOf(item) > -1));
-        },
-      };
-    },
-  },
-  {
-    label: '绉熸埛',
-    field: 'relTenantIds',
-    component: 'ApiSelect',
-    componentProps: {
-      mode: 'multiple',
-      api: getAllTenantList,
-      numberToString: true,
-      labelField: 'name',
-      valueField: 'id',
-    },
-  },
-  {
-    label: '韬唤',
-    field: 'userIdentity',
-    component: 'RadioGroup',
-    defaultValue: 1,
-    componentProps: ({ formModel }) => {
-      return {
-        options: [
-          { label: '鏅�氱敤鎴�', value: 1, key: '1' },
-          { label: '涓婄骇', value: 2, key: '2' },
-        ],
-        onChange: () => {
-          formModel.userIdentity == 1 && (formModel.departIds = []);
-        },
-      };
-    },
-  },
-  {
-    label: '璐熻矗閮ㄩ棬',
-    field: 'departIds',
-    component: 'Select',
-    componentProps: {
-      mode: 'multiple',
-    },
-    ifShow: ({ values }) => values.userIdentity == 2,
-  },
-  {
-    label: '澶村儚',
-    field: 'avatar',
-    component: 'JImageUpload',
-    componentProps: {
-      fileMax: 1,
-    },
-  },
-  {
-    label: '鐢熸棩',
-    field: 'birthday',
-    component: 'DatePicker',
-  },
-  {
-    label: '鎬у埆',
-    field: 'sex',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'sex',
-      placeholder: '璇烽�夋嫨鎬у埆',
-      stringToNumber: true,
-    },
-  },
-  {
-    label: '閭',
-    field: 'email',
-    component: 'Input',
-    rules: rules.rule('email', false),
-  },
-  {
-    label: '鎵嬫満鍙风爜',
-    field: 'phone',
-    component: 'Input',
-    // dynamicRules: ({ model, schema }) => {
-    //   return [
-    //     { ...rules.duplicateCheckRule('sys_user', 'phone', model, schema, true)[0] },
-    //     { pattern: /^1[3456789]\d{9}$/, message: '鎵嬫満鍙风爜鏍煎紡鏈夎' },
-    //   ];
-    // },
-  },
-  {
-    label: '搴ф満',
-    field: 'telephone',
-    component: 'Input',
-    rules: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '璇疯緭鍏ユ纭殑搴ф満鍙风爜' }],
-  },
-  {
-    label: '宸ヤ綔娴佸紩鎿�',
-    field: 'activitiSync',
-    defaultValue: 1,
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'activiti_sync',
-      type: 'radio',
-      stringToNumber: true,
-    },
-  },
-];
-
-export const formPasswordSchema: FormSchema[] = [
-  {
-    label: '鐢ㄦ埛璐﹀彿',
-    field: 'username',
-    component: 'Input',
-    componentProps: { readOnly: true },
-  },
-  {
-    label: '鐧诲綍瀵嗙爜',
-    field: 'password',
-    component: 'StrengthMeter',
-    componentProps: {
-      placeholder: '璇疯緭鍏ョ櫥褰曞瘑鐮�',
-    },
-    rules: [
-      {
-        required: true,
-        message: '璇疯緭鍏ョ櫥褰曞瘑鐮�',
-      },
-    ],
-  },
-  {
-    label: '纭瀵嗙爜',
-    field: 'confirmPassword',
-    component: 'InputPassword',
-    dynamicRules: ({ values }) => rules.confirmPassword(values, true),
-  },
-];
-
-export const formAgentSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'userName',
-    label: '鐢ㄦ埛鍚�',
-    component: 'Input',
-    componentProps: {
-      readOnly: true,
-      allowClear: false,
-    },
-  },
-  {
-    field: 'agentUserName',
-    label: '浠g悊浜虹敤鎴峰悕',
-    required: true,
-    component: 'JSelectUser',
-    componentProps: {
-      rowKey: 'username',
-      labelKey: 'realname',
-      maxSelectCount: 10,
-    },
-  },
-  {
-    field: 'startTime',
-    label: '浠g悊寮�濮嬫椂闂�',
-    component: 'DatePicker',
-    required: true,
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      placeholder: '璇烽�夋嫨浠g悊寮�濮嬫椂闂�',
-    },
-  },
-  {
-    field: 'endTime',
-    label: '浠g悊缁撴潫鏃堕棿',
-    component: 'DatePicker',
-    required: true,
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      placeholder: '璇烽�夋嫨浠g悊缁撴潫鏃堕棿',
-    },
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'JDictSelectTag',
-    defaultValue: '1',
-    componentProps: {
-      dictCode: 'valid_status',
-      type: 'radioButton',
-    },
-  },
-];
-
-export const formQuitAgentSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'userName',
-    label: '鐢ㄦ埛鍚�',
-    component: 'Input',
-    componentProps: {
-      readOnly: true,
-      allowClear: false,
-    },
-  },
-  {
-    field: 'agentUserName',
-    label: '浜ゆ帴浜哄憳',
-    required: true,
-    component: 'JSelectUser',
-    componentProps: {
-      rowKey: 'username',
-      labelKey: 'realname',
-      maxSelectCount: 1,
-    },
-  },
-  {
-    field: 'startTime',
-    label: '浜ゆ帴寮�濮嬫椂闂�',
-    component: 'DatePicker',
-    required: true,
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      placeholder: '璇烽�夋嫨浜ゆ帴寮�濮嬫椂闂�',
-      getPopupContainer: () => document.body,
-    },
-  },
-  {
-    field: 'endTime',
-    label: '浜ゆ帴缁撴潫鏃堕棿',
-    component: 'DatePicker',
-    required: true,
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      placeholder: '璇烽�夋嫨浜ゆ帴缁撴潫鏃堕棿',
-      getPopupContainer: () => document.body,
-    },
-  },
-  {
-    field: 'status',
-    label: '鐘舵��',
-    component: 'JDictSelectTag',
-    defaultValue: '1',
-    componentProps: {
-      dictCode: 'valid_status',
-      type: 'radioButton',
-    },
-  },
-];
-
-//绉熸埛鐢ㄦ埛鍒楄〃
-export const userTenantColumns: BasicColumn[] = [
-  {
-    title: '鐢ㄦ埛璐﹀彿',
-    dataIndex: 'username',
-    width: 120,
-  },
-  {
-    title: '鐢ㄦ埛濮撳悕',
-    dataIndex: 'realname',
-    width: 100,
-  },
-  {
-    title: '澶村儚',
-    dataIndex: 'avatar',
-    width: 120,
-    customRender: render.renderAvatar,
-  },
-  {
-    title: '鎵嬫満鍙�',
-    dataIndex: 'phone',
-    width: 100,
-  },
-  {
-    title: '閮ㄩ棬',
-    width: 150,
-    dataIndex: 'orgCodeTxt',
-  },
-  {
-    title: '鐘舵��',
-    dataIndex: 'status',
-    width: 80,
-    customRender: ({ text }) => {
-      if (text === '1') {
-        return '姝e父';
-      } else if (text === '3') {
-        return '瀹℃壒涓�';
-      } else {
-        return '宸叉嫆缁�';
-      }
-    },
-  },
-];
-
-//鐢ㄦ埛绉熸埛鎼滅储琛ㄥ崟
-export const userTenantFormSchema: FormSchema[] = [
-  {
-    label: '璐﹀彿',
-    field: 'username',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '鍚嶅瓧',
-    field: 'realname',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '鎬у埆',
-    field: 'sex',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'sex',
-      placeholder: '璇烽�夋嫨鎬у埆',
-      stringToNumber: true,
-    },
-    colProps: { span: 6 },
-  },
-];
diff --git a/src/views/system/user/userDetails.vue b/src/views/system/user/userDetails.vue
deleted file mode 100644
index c0a8cd4..0000000
--- a/src/views/system/user/userDetails.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-<template>
-  <Description @register="register" class="mt-4" />
-</template>
-<script lang="ts">
-  import { defineComponent } from 'vue';
-  import { Description, DescItem, useDescription } from '/@/components/Description/index';
-  const mockData = {
-    username: 'test',
-    nickName: 'VB',
-    age: '123',
-    phone: '15695909xxx',
-    email: '190848757@qq.com',
-    addr: '鍘﹂棬甯傛�濇槑鍖�',
-    sex: '鐢�',
-    certy: '3504256199xxxxxxxxx',
-    tag: 'orange',
-  };
-  const schema: DescItem[] = [
-    {
-      field: 'username',
-      label: '鐢ㄦ埛鍚�',
-    },
-    {
-      field: 'nickName',
-      label: '鏄电О',
-      render: (curVal, data) => {
-        return `${data.username}-${curVal}`;
-      },
-    },
-    {
-      field: 'phone',
-      label: '鑱旂郴鐢佃瘽',
-    },
-    {
-      field: 'email',
-      label: '閭',
-    },
-    {
-      field: 'addr',
-      label: '鍦板潃',
-    },
-  ];
-  export default defineComponent({
-    components: { Description },
-    setup() {
-      const [register] = useDescription({
-        title: 'useDescription',
-        data: mockData,
-        schema: schema,
-      });
-      return { mockData, schema, register };
-    },
-  });
-</script>
diff --git a/src/views/system/usersetting/AccountSetting.vue b/src/views/system/usersetting/AccountSetting.vue
deleted file mode 100644
index 19a40ee..0000000
--- a/src/views/system/usersetting/AccountSetting.vue
+++ /dev/null
@@ -1,194 +0,0 @@
-<template>
-  <div class="account-padding">
-    <div class="my-account">璐︽埛</div>
-    <div class="account-row-item clearfix">
-      <div class="account-label gray-75">鎵嬫満</div>
-      <span class="gray">{{ userDetail.phone ? userDetail.phone : '鏈~鍐�' }}</span>
-      <span class="pointer blue-e5 phone-margin" @click="updatePhone" v-if="userDetail.phone">淇敼</span>
-      <span class="pointer blue-e5" @click="unbindPhone" v-if="userDetail.phone">瑙g粦</span>
-      <span class="pointer blue-e5" @click="unbindPhone" v-else>缁戝畾</span>
-    </div>
-    <div class="account-row-item clearfix">
-      <div class="account-label gray-75">閭</div>
-      <span class="gray">{{ userDetail.email ? userDetail.email : '鏈~鍐�' }}</span>
-      <span class="pointer blue-e5 phone-margin" @click="updateEmail">淇敼</span>
-      <span class="pointer blue-e5" @click="unbindEmail" v-if="userDetail.email">瑙g粦</span>
-      <span class="pointer blue-e5" @click="unbindEmail" v-else>缁戝畾</span>
-      <span class="pointer blue-e5" style="margin-left:5px" @click="checkEmail" v-if="userDetail.email">楠岃瘉</span>
-    </div>
-    <div class="account-row-item">
-      <div class="account-label gray-75">瀵嗙爜</div>
-      <Icon icon="ant-design:lock-outlined" style="color: #9e9e9e"/>
-      <span class="pointer blue-e5" style="margin-left: 10px" @click="updatePassWord">淇敼</span>
-    </div>
-
-    <div class="account-row-item">
-      <div class="account-label gray-75">璐﹀彿缁戝畾</div>
-      <span>
-        <WechatFilled :style="!wechatData.bindWechat ? { color: '#9e9e9e' } : { color: '#1ec563' }" />
-        <span class="gray-75" style="margin-left: 12px">寰俊</span>
-        <span class="gray-75" style="margin-left: 8px" v-if="wechatData.bindWechat">{{ '宸茬粦瀹氾細' + wechatData.name }}</span>
-        <span class="blue-e5 pointer" style="margin-left: 24px" @click="wechatBind">{{ !wechatData.bindWechat ? '缁戝畾' : '瑙g粦' }}</span>
-      </span>
-    </div>
-
-    <div class="account-row-item clearfix">
-      <div class="account-label gray-75">璐︽埛娉ㄩ攢</div>
-      <span style="color: red" class="pointer" @click="cancellation">娉ㄩ攢</span>
-    </div>
-  </div>
-
-  <UserReplacePhoneModal @register="registerModal" @success="initUserDetail" />
-  <UserReplaceEmailModal @register="registerEmailModal" @success="initUserDetail" />
-  <UserPasswordModal @register="registerPassModal" @success="initUserDetail" />
-</template>
-<script lang="ts" setup>
-import { onMounted, ref, reactive } from "vue";
-import { CollapseContainer } from "/@/components/Container";
-import { getUserData } from "./UserSetting.api";
-import { useUserStore } from "/@/store/modules/user";
-import UserReplacePhoneModal from "./commponents/UserPhoneModal.vue";
-import UserReplaceEmailModal from "./commponents/UserEmailModal.vue";
-import UserPasswordModal from "./commponents/UserPasswordModal.vue";
-import { useModal } from "/@/components/Modal";
-import { WechatFilled } from '@ant-design/icons-vue';
-
-const userDetail = ref<any>([]);
-const userStore = useUserStore();
-const [registerModal, { openModal }] = useModal();
-const [registerEmailModal, { openModal: openEmailModal }] = useModal();
-const [registerPassModal, { openModal: openPassModal }] = useModal();
-
-const wechatData = reactive<any>({
-  bindWechat: false,
-  name: '鏄电О',
-});
-
-/**
- * 鍒濆鍖栫敤鎴锋暟鎹�
- */
-function initUserDetail() {
-  //鑾峰彇鐢ㄦ埛鏁版嵁
-  getUserData().then((res => {
-    if (res.success) {
-      userDetail.value = res.result;
-    }
-  }));
-}
-
-/**
- * 淇敼鎵嬫満鍙�
- */
-function updatePhone() {
-  openModal(true, {
-    record: { phone: userDetail.value.phone, username: userDetail.value.username, id: userDetail.value.id }
-  });
-}
-
-/**
- * 淇敼閭
- */
-function updateEmail() {
-  openEmailModal(true, {
-    record: { email: userDetail.value.email, id: userDetail.value.id }
-  });
-}
-
-/**
- * 瀵嗙爜淇敼
- */
-function updatePassWord() {
-  openPassModal(true, {
-    record: { username: userDetail.value.username }
-  });
-}
-
-/**
- * 鎵嬫満鍙疯В缁�
- */
-function unbindPhone() {
-  console.log('鎵嬫満鍙疯В缁�');
-}
-
-/**
- * 閭瑙g粦
- */
-function unbindEmail() {
-  console.log('閭瑙g粦');
-}
-
-/**
- * 閭楠岃瘉
- */
-function checkEmail() {
-  console.log('閭楠岃瘉');
-}
-
-/**
- * 寰俊缁戝畾瑙g粦浜嬩欢
- */
-function wechatBind() {
-  console.log('寰俊缁戝畾瑙g粦浜嬩欢');
-}
-
-/**
- * 娉ㄩ攢浜嬩欢
- */
-function cancellation() {
-
-}
-
-onMounted(() => {
-  initUserDetail();
-});
-</script>
-<style lang="less" scoped>
-.account-row-item {
-  align-items: center;
-  border-bottom: 1px solid #eaeaea;
-  box-sizing: border-box;
-  display: flex;
-  height: 71px;
-  position: relative;
-}
-
-.account-label {
-  text-align: left;
-  width: 160px;
-}
-
-.gray-75 {
-  color: #757575 !important;
-}
-
-.pointer {
-  cursor: pointer;
-}
-
-.blue-e5 {
-  color: #1e88e5;
-}
-
-.phone-margin {
-  margin-left: 24px;
-  margin-right: 24px;
-}
-
-.clearfix:after {
-  clear: both;
-}
-
-.clearfix:before {
-  content: "";
-  display: table;
-}
-.account-padding{
-  padding: 30px 40px 0 20px;
-}
-.my-account{
-  font-size: 17px;
-  font-weight: 700!important;
-  color: #333!important;
-  margin-bottom: 20px;
-}
-</style>
diff --git a/src/views/system/usersetting/BaseSetting.vue b/src/views/system/usersetting/BaseSetting.vue
deleted file mode 100644
index e315452..0000000
--- a/src/views/system/usersetting/BaseSetting.vue
+++ /dev/null
@@ -1,349 +0,0 @@
-<template>
-  <div class="account-padding">
-    <div class="user-setting-top">
-      <div class="account-avatar">
-        <CropperAvatar
-          :uploadApi="uploadImg"
-          :showBtn="false"
-          :value="avatar"
-          :btnProps="{ preIcon: 'ant-design:cloud-upload-outlined' }"
-          @change="updateAvatar"
-          width="80"
-        />
-        <div class="account-right">
-          <div v-if="!isEdit">
-            <span class="font-size-17 account-name">{{ userInfo.realname }}</span>
-            <a-tooltip content="缂栬緫濮撳悕">
-              <Icon class="pointer font-size-17 gray-bd account-icon" icon="ant-design:edit-outlined"
-                    @click="editHandleClick" />
-            </a-tooltip>
-          </div>
-          <div v-else>
-            <a-input ref="accountNameEdit" :maxlength="100" v-model:value="userInfo.realname" @blur="editRealName" />
-          </div>
-          <div class="use-day">
-            浣跨敤锛�<span>{{userInfo.createTimeText}}</span>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div class="account-data">
-      <!-- 璇︾粏璧勬枡 -->
-      <div class="account-detail">
-        <div class="font-size-15 font-bold" style="color: #333!important;margin-bottom: 16px">璇︾粏璧勬枡</div>
-        <div class="margin-bottom-10 font-size-13">
-          <span class="gray-75 item-label">鐢熸棩</span>
-          <span class="gray-3">{{ userInfo.birthday }}</span>
-        </div>
-        <div class="margin-bottom-10 font-size-13">
-          <span class="gray-75 item-label">鎬у埆</span>
-          <span class="gray-3">{{ userInfo.sexText }}</span>
-        </div>
-        <div class="margin-bottom-10 nowarp font-size-13">
-          <span class="gray-75 item-label">鑱屼綅</span>
-          <span class="gray-3">{{ userInfo.postText ? userInfo.postText : "鏈~鍐�" }}</span>
-        </div>
-        <div class="font-size-13">
-          <span class="item-label"></span>
-          <span class="item-label pointer" style="color:#1e88e5" @click="openEditModal">缂栬緫</span>
-        </div>
-      </div>
-      <!-- 鑱旂郴淇℃伅 -->
-      <div class="account-info">
-        <div class="font-size-15 font-bold" style="color: #333!important;margin-bottom: 16px">鑱旂郴淇℃伅</div>
-        <div class="margin-bottom-10 font-size-13">
-          <span class="gray-75 item-label">閭</span>
-          <span class="gray-3">{{ userInfo.email ? userInfo.email : "鏈~鍐�" }}</span>
-        </div>
-        <div class="margin-bottom-10 font-size-13">
-          <span class="gray-75 item-label">鎵嬫満</span>
-          <span class="gray-3">{{ userInfo.phone ? userInfo.phone : "鏈~鍐�" }}</span>
-        </div>
-      </div>
-    </div>
-  </div>
-  <UserAccountModal @register="registerModal" @success="getUserDetail"></UserAccountModal>
-</template>
-<script lang="ts" setup>
-import { computed, onMounted, ref } from "vue";
-import { CollapseContainer } from "/@/components/Container";
-import { CropperAvatar } from "/@/components/Cropper";
-import { useMessage } from "/@/hooks/web/useMessage";
-import headerImg from "/@/assets/images/header.jpg";
-import { defHttp } from "/@/utils/http/axios";
-import { useUserStore } from "/@/store/modules/user";
-import { uploadImg } from "/@/api/sys/upload";
-import { getFileAccessHttpUrl } from "/@/utils/common/compUtils";
-import dayjs from "dayjs";
-import { ajaxGetDictItems, getDictItemsByCode, initDictOptions } from "/@/utils/dict";
-import { userEdit, getUserData, queryNameByCodes } from "./UserSetting.api";
-import UserAccountModal from "./commponents/UserAccountModal.vue";
-import { useModal } from "/@/components/Modal";
-import { cloneDeep } from "lodash-es";
-
-//TODO 褰撳瓧鍏哥鎴烽殧绂绘椂锛屾暟鎹細鏌ヤ笉鍒帮紝榛樿涓�涓�
-const sexOption = getDictItemsByCode("sex") || [{text:'鐢�',value:'1'},{text:'濂�',value:'2'}];
-const { createMessage } = useMessage();
-const userStore = useUserStore();
-//鏄惁缂栬緫
-const isEdit = ref<boolean>(false);
-//鐢ㄦ埛淇℃伅
-const userInfo = ref<any>({});
-//缂栬緫鏃秈nput瑙﹀彂浜嬩欢
-const accountNameEdit = ref();
-const [registerModal, { openModal }] = useModal();
-//澶村儚鍔ㄦ�佽绠�
-const avatar = computed(() => {
-  return getFileAccessHttpUrl(userInfo.value.avatar) || headerImg;
-});
-
-/**
- * 鏇存柊鐢ㄦ埛澶村儚
- */
-function updateAvatar(src: string, data: string) {
-  const userinfo = userStore.getUserInfo;
-  userinfo.avatar = data;
-  userStore.setUserInfo(userinfo);
-  if (data) {
-    updateUserInfo({ avatar: data, id: userinfo.id });
-  }
-}
-
-/**
- * 鏇存柊鐢ㄦ埛淇℃伅
- * @params 鍙傛暟
- */
-function updateUserInfo(params) {
-  userEdit(params).then((res) => {
-    if (!res.success) {
-      createMessage.warn(res.message);
-    }
-  });
-}
-
-/**
- * 缂栬緫鎸夐挳鐐瑰嚮浜嬩欢
- */
-function editHandleClick() {
-  isEdit.value = true;
-  setTimeout(() => {
-    accountNameEdit.value.focus();
-  }, 100);
-}
-
-/**
- * 淇敼鐪熷疄濮撳悕
- */
-function editRealName() {
-  if (userInfo.value.realname) {
-    updateUserInfo({ realname: userInfo.value.realname, id: userInfo.value.id });
-    userStore.setUserInfo(userInfo.value);
-  } else {
-    createMessage.warn("璇疯緭鍏ュ鍚�");
-  }
-  isEdit.value = false;
-}
-
-/**
- * 鑾峰彇鐢熸棩淇℃伅
- */
-function getBirthDay(val) {
-  if (val) {
-    return dayjs(val).format("YYYY-MM-DD");
-  } else {
-    return "鏈~鍐�";
-  }
-}
-
-/**
- * 鑾峰彇鎬у埆
- * @param val
- */
-function getSex(val) {
-  let findOption = sexOption.find(item => parseInt(item.value) === val);
-  let sex = "鏈~鍐�";
-  if (findOption) {
-    sex = findOption.text;
-  }
-  return sex;
-}
-
-/**
- * 鎵撳紑缂栬緫寮圭獥
- */
-function openEditModal() {
-  let value = cloneDeep(userInfo.value);
-  openModal(true, {
-    record: value
-  });
-}
-
-/**
- * 鑾峰彇鐢ㄦ埛淇℃伅
- */
-function getUserDetail() {
-  getUserData().then((async res => {
-    if (res.success) {
-      if (res.result) {
-        res.result.sexText = getSex(res.result.sex);
-        res.result.birthday = getBirthDay(res.result.birthday);
-        res.result.createTimeText = getDiffDay(res.result.createTime);
-        userInfo.value = res.result;
-      } else {
-        userInfo.value = {};
-      }
-    }
-  }));
-}
-
-/**
- * 鑾峰彇浣跨敤鏃堕棿
- * @param date
- */
-function getDiffDay(date) {
-  // 璁$畻涓や釜鏃ユ湡涔嬮棿鐨勫ぉ鏁板樊鍊�
-  let totalDays, diffDate
-  let createDate = Date.parse(date);
-  let nowDate = new Date().getTime();
-  // 灏嗕袱涓棩鏈熼兘杞崲涓烘绉掓牸寮忥紝鐒跺悗鍋氬樊
-  diffDate = Math.abs(nowDate - createDate) // 鍙栫浉宸绉掓暟鐨勭粷瀵瑰��
-  totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 鍚戜笅鍙栨暣
-  return totalDays+" 澶�";
-}
-onMounted(async () => {
-  getUserDetail();
-});
-</script>
-
-<style lang="less" scoped>
-.user-setting-top {
-  padding-top: 40px;
-  width: 100%;
-  border-bottom: 1px solid #eaeaea;
-  display: flex;
-  padding-bottom: 40px;
-}
-
-.account-avatar {
-  align-items: center;
-  display: flex;
-  margin-right: 30px;
-  flex: 1;
-}
-
-.change-avatar {
-  img {
-    display: block;
-    margin-bottom: 15px;
-    border-radius: 50%;
-  }
-}
-
-.account-right {
-  margin-left: 25px !important;
-}
-
-.font-size-15 {
-  font-size: 15px;
-}
-
-.font-size-17 {
-  font-size: 17px;
-}
-
-.pointer {
-  cursor: pointer;
-}
-
-.account-name {
-  white-space: nowrap;
-  overflow: hidden;
-  width: 200px;
-  text-overflow: ellipsis;
-  line-height: 32px!important;
-  color: #333;
-  font-weight: 500;
-}
-
-.gray-bd {
-  color: #bdbdbd
-}
-
-.account-icon {
-  margin-left: 4px;
-}
-
-.account-data {
-  width: 100% !important;
-  display: flex;
-  min-width: 0;
-}
-
-.account-detail {
-  width: 40%;
-  display: flex;
-  flex-direction: column;
-  padding: 40px 0;
-
-  .item-label {
-    display: inline-block;
-    text-align: left;
-    width: 80px;
-  }
-}
-
-.font-bold {
-  font-weight: 700 !important;
-}
-
-.margin-bottom-10 {
-  margin-bottom: 10px;
-}
-
-.gray-75 {
-  color: #757575 !important;
-}
-
-.gray-3 {
-  color: #333333;
-}
-
-.account-info {
-  width: 60%;
-  display: flex;
-  flex-direction: column;
-  padding: 40px 0;
-  box-sizing: border-box;
-  margin-left: 10px;
-
-  .item-label {
-    display: inline-block;
-    text-align: left;
-    width: 80px;
-  }
-}
-
-.nowarp {
-  overflow: hidden;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-}
-
-.account-padding{
-  padding-left: 20px !important;
-  padding-right: 40px !important;
-}
-
-.use-day{
-  color: #333;
-  margin-top: 10px;
-  font-size: 13px;
-  span{
-    color:#1e88e5;
-    margin-left: 5px;
-  }
-}
-.font-size-13{
-  font-size: 13px;
-}
-</style>
diff --git a/src/views/system/usersetting/TenantSetting.vue b/src/views/system/usersetting/TenantSetting.vue
deleted file mode 100644
index 97505b3..0000000
--- a/src/views/system/usersetting/TenantSetting.vue
+++ /dev/null
@@ -1,565 +0,0 @@
-<template>
-  <div class="tenant-padding">
-    <div class="my-tenant">鎴戠殑绉熸埛</div>
-    <div class="tenant-list" v-if="dataSource.length>0">
-      <div v-for="item in dataSource" class="tenant-list-item" @click="drownClick(item)">
-        <div class="tenant-title">
-          <div class="item-left">
-            <div class="item-name">{{ item.name }}</div>
-            <div class="item-house" @click.stop="copyClick(item.houseNumber)">
-              <span>
-                缁勭粐闂ㄧ墝鍙凤細{{ item.houseNumber }}
-                <Icon icon="ant-design:copy-outlined" style="font-size: 13px; margin-left: 2px" />
-              </span>
-            </div>
-          </div>
-          <div class="item-right">
-            <span v-if="item.userTenantStatus === '3'">
-              <span class="examine">寰呭鏍�</span>
-              <span class="pointer cancel-apply" @click.stop="cancelApplyClick(item.tenantUserId)">鍙栨秷鐢宠</span>
-            </span>
-            <div v-else style="width: 75px"></div>
-            <span style="margin-left: 24px">
-              <Icon v-if="item.show" icon="ant-design:down-outlined" style="font-size: 13px; color: #707070" />
-              <Icon v-else icon="ant-design:right-outlined" style="font-size: 13px; color: #707070" />
-            </span>
-          </div>
-        </div>
-        <div class="item-content" v-show="item.show">
-          <div class="content-box">
-            <div class="content-name"> 缁勭粐鍚嶇墖 </div>
-            <div class="content-desc">
-              <div class="flex-flow">
-                <div class="content-des-text">濮撳悕</div>
-                <div style="font-size: 13px;color: #000000">
-                  {{ userDetail.realname }}
-                </div>
-              </div>
-              <div class="flex-flow">
-                <div class="content-des-text">閮ㄩ棬</div>
-                <div style="font-size: 13px">
-                  {{ userDetail.orgCodeTxt ? userDetail.orgCodeTxt : '鏈~鍐�' }}
-                </div>
-              </div>
-              <div class="flex-flow">
-                <div class="content-des-text">鑱屼笟</div>
-                <div style="font-size: 13px">
-                  {{ userDetail.postText ? userDetail.postText : '鏈~鍐�' }}
-                </div>
-              </div>
-            </div>
-          </div>
-          <div class="footer-box">
-            <span
-              v-if="item.userTenantStatus !== '3'"
-              @click.stop="footerClick('editTenant', item)"
-              class="font-color333 flex-flow margin-right40 font-size13 pointer"
-            >
-              <Icon icon="ant-design:edit-outlined" class="footer-icon" />
-              <span>鏌ョ湅绉熸埛鍚嶇墖</span>
-            </span>
-            <span v-else class="font-color9e flex-flow margin-right40 font-size13">
-              <Icon icon="ant-design:edit-outlined" class="footer-icon" />
-              <span>鏌ョ湅绉熸埛鍚嶇墖</span>
-            </span>
-            <span
-              v-if="item.userTenantStatus !== '3' && item.auth"
-              @click.stop="footerClick('tenantSetting', item)"
-              class="font-color333 flex-flow margin-right40 font-size13 pointer"
-            >
-              <Icon icon="ant-design:tool-outlined" class="footer-icon" />
-              <span>绉熸埛绠$悊锛�</span>
-            </span>
-            <span v-else-if="item.userTenantStatus === '3' && item.auth" class="font-color9e flex-flow margin-right40 font-size13">
-              <Icon icon="ant-design:tool-outlined" class="footer-icon" />
-              <span>绉熸埛绠$悊锛�</span>
-            </span>
-            <span
-              v-if="item.userTenantStatus !== '3' && !item.auth"
-              @click.stop="footerClick('tenantSetting', item)"
-              class="font-color333 flex-flow margin-right40 font-size13 pointer"
-            >
-              <Icon icon="ant-design:tool-outlined" class="footer-icon" />
-              <span>鐢宠瑙掕壊鏉冮檺锛�</span>
-            </span>
-            <span v-else-if="item.userTenantStatus === '3' && !item.auth" class="font-color9e flex-flow margin-right40 font-size13">
-              <Icon icon="ant-design:tool-outlined" class="footer-icon" />
-              <span>鐢宠瑙掕壊鏉冮檺锛�</span>
-            </span>
-            <span
-              v-if="item.userTenantStatus !== '3'"
-              @click.stop="footerClick('tenantSetting', item)"
-              class="font-color333 flex-flow margin-right40 font-size13 pointer"
-            >
-              <Icon icon="ant-design:gold-outlined" class="footer-icon" />
-              <span>鎴戠殑姹囨姤鍏崇郴锛�</span>
-            </span>
-            <span v-else class="font-color9e flex-flow margin-right40 font-size13">
-              <Icon icon="ant-design:gold-outlined" class="footer-icon" />
-              <span>鎴戠殑姹囨姤鍏崇郴锛�</span>
-            </span>
-            <span
-              v-if="item.userTenantStatus !== '3'"
-              @click.stop="footerClick('exitTenant', item)"
-              class="font-color333 flex-flow margin-right40 font-size13 pointer"
-            >
-              <Icon icon="ant-design:export-outlined" class="footer-icon" />
-              <span>閫�鍑虹鎴�</span>
-            </span>
-            <span v-else class="font-color9e flex-flow margin-right40 font-size13">
-              <Icon icon="ant-design:export-outlined" class="footer-icon" />
-              <span>閫�鍑虹鎴�</span>
-            </span>
-          </div>
-        </div>
-      </div>
-    </div>
-    <a-empty v-else description="鏆傛棤鏁版嵁" style="position: relative;top: 50px;"/>
-  </div>
-  <a-modal v-model:visible="tenantVisible" width="400px" wrapClassName="edit-tenant-setting">
-    <template #title>
-      <div style="font-size: 17px; font-weight: 700">鏌ョ湅鍚嶇墖</div>
-      <div style="color: #9e9e9e; margin-top: 10px; font-size: 13px"> 鍚嶇墖鏄偍鍦ㄨ缁勭粐涓嬬殑涓汉淇℃伅锛屽彧鍦ㄦ湰缁勭粐涓睍绀恒�� </div>
-    </template>
-    <div style="margin-top: 24px; font-size: 13px; padding: 0 24px">
-      <div class="font-color75">濮撳悕</div>
-      <div class="margin-top6 margin-bottom-16">{{ userDetail.realname }}</div>
-      <div>閮ㄩ棬</div>
-      <div class="margin-top6 margin-bottom-16">{{ userDetail.orgCodeTxt ? userDetail.orgCodeTxt : '鏈~鍐�' }}</div>
-      <div>鑱屼綅</div>
-      <div class="margin-top6 margin-bottom-16">{{ userDetail.postText ? userDetail.postText : '鏈~鍐�' }}</div>
-      <div>宸ヤ綔鍦扮偣</div>
-      <div class="margin-top6 margin-bottom-16">{{ userData.workPlace ? userData.workPlace : '鏈~鍐�' }}</div>
-      <div>宸ュ彿</div>
-      <div class="margin-top6 margin-bottom-16">{{ userDetail.workNo ? userDetail.workNo : '鏈~鍐�' }}</div>
-    </div>
-  </a-modal>
-
-  <!-- 閫�鍑虹鎴� -->
-  <a-modal v-model:visible="cancelVisible" width="800" destroy-on-close>
-    <template #title>
-      <div class="cancellation">
-        <Icon icon="ant-design:warning-outlined" style="font-size: 20px;color: red"/>
-        閫�鍑虹鎴� {{myTenantInfo.name}}
-      </div>
-    </template>
-    <a-form :model="formCancelState" ref="cancelTenantRef">
-      <a-form-item name="tenantName">
-        <a-row :span="24" style="padding: 20px 20px 0;font-size: 13px">
-          <a-col :span="24">
-            璇疯緭鍏ョ鎴峰悕绉�
-          </a-col>
-          <a-col :span="24" style="margin-top: 10px">
-            <a-input v-model:value="formCancelState.tenantName" @change="tenantNameChange"/>
-          </a-col>
-        </a-row>
-      </a-form-item>
-      <a-form-item name="loginPassword">
-        <a-row :span="24" style="padding: 0 20px;font-size: 13px">
-          <a-col :span="24">
-            璇疯緭鍏ユ偍鐨勭櫥褰曞瘑鐮�
-          </a-col>
-          <a-col :span="24" style="margin-top: 10px">
-            <a-input-password v-model:value="formCancelState.loginPassword" />
-          </a-col>
-        </a-row>
-      </a-form-item>
-    </a-form>
-    <template #footer>
-      <a-button type="primary" @click="handleOutClick" :disabled="outBtnDisabled">纭畾</a-button>
-      <a-button @click="handleCancelOutClick">鍙栨秷</a-button>
-    </template>
-  </a-modal>
-  
-  <a-modal 
-    title="鍙樻洿鎷ユ湁鑰�" 
-    v-model:visible="owenVisible" 
-    width="800" 
-    destroy-on-close 
-    :cancelButtonProps="{display:'none'}" 
-    @ok="changeOwen">
-      <div style="padding: 20px">
-        <a-row :span="24">
-          <div class="change-owen">
-            鍙湁鍙樻洿鎷ユ湁鐫�涔嬪悗,鎵嶈兘閫�鍑�
-          </div>
-        </a-row>
-        <a-row :span="24" style="margin-top: 10px">
-          <UserSelect v-model:value="tenantOwen" izExcludeMy/>
-        </a-row>
-      </div>
-  </a-modal>
-</template>
-
-<script lang="ts" name="tenant-setting" setup>
-import { onMounted, ref, unref } from "vue";
-import {getTenantListByUserId, cancelApplyTenant, exitUserTenant, changeOwenUserTenant} from "./UserSetting.api";
-import { useUserStore } from "/@/store/modules/user";
-import { CollapseContainer } from "/@/components/Container";
-import { getFileAccessHttpUrl } from "/@/utils/common/compUtils";
-import headerImg from "/@/assets/images/header.jpg";
-import {useMessage} from "/@/hooks/web/useMessage";
-import { initDictOptions } from '/@/utils/dict';
-import { uniqWith } from 'lodash-es';
-import { Modal } from 'ant-design-vue';
-import UserSelect from '/@/components/Form/src/jeecg/components/userSelect/index.vue';
-
-//鏁版嵁婧�
-const dataSource = ref<any>([]);
-const userStore = useUserStore();
-
-//鏁版嵁婧�
-const { createMessage } = useMessage();
-//閮ㄩ棬瀛楀吀
-const departOptions = ref<any>([]);
-//绉熸埛缂栬緫鏄垨鍚﹂殣钘�
-const tenantVisible = ref<boolean>(false);
-//鐢ㄦ埛鏁版嵁
-const userData = ref<any>([]);
-//鐢ㄦ埛
-const userDetail = ref({
-  realname: userStore.getUserInfo.realname,
-  workNo: userStore.getUserInfo.workNo,
-  orgCodeTxt: userStore.getUserInfo.orgCodeTxt,
-  postText: userStore.getUserInfo.postText,
-});
-/**
- * 鍒濆鍖栫鎴锋暟鎹�
- */
-  async function initDataSource() {
-  //鑾峰彇鐢ㄦ埛鏁版嵁
-    //update-begin---author:wangshuai ---date:20230109  for: [QQYUN-3645]涓汉璁剧疆鎴戠殑绉熸埛鏌ヨ瀹℃牳涓拰姝e父鐨�------------
-    getTenantListByUserId({ userTenantStatus: '1,3' }).then((res) => {
-    if (res.success) {
-        dataSource.value = res.result;
-      } else {
-        dataSource.value = [];
-      }
-    });
-    //update-end---author:wangshuai ---date:20230109  for锛歔QQYUN-3645]涓汉璁剧疆鎴戠殑绉熸埛鏌ヨ瀹℃牳涓拰姝e父鐨�------------
-  }
-
-  /**
-   * 澶嶅埗闂ㄦ埛
-   * @param value
-   */
-  function copyClick(value) {
-    // 鍒涘缓input鍏冪礌
-    const el = document.createElement('input');
-    // 缁檌nput鍏冪礌璧嬪�奸渶瑕佸鍒剁殑鏂囨湰
-    el.setAttribute('value', value);
-    // 灏唅nput鍏冪礌鎻掑叆椤甸潰
-    document.body.appendChild(el);
-    // 閫変腑input鍏冪礌鐨勬枃鏈�
-    el.select();
-    // 澶嶅埗鍐呭鍒板壀璐存澘
-    document.execCommand('copy');
-    // 鍒犻櫎input鍏冪礌
-    document.body.removeChild(el);
-    createMessage.success('澶嶅埗鎴愬姛');
-  };
-
-  /**
-   * 鍙栨秷鐢宠
-   * @param id
-   */
-  function cancelApplyClick(id) {
-    Modal.confirm({
-      title: '鍙栨秷鐢宠',
-      content: '鏄惁鍙栨秷鐢宠',
-      okText: '纭',
-      cancelText: '鍙栨秷',
-      onOk: () => {
-        cancelApplyTenant({ tenantId: id }).then((res) => {
-          if (res.success) {
-            createMessage.success('鍙栨秷鐢宠鎴愬姛');
-            initDataSource();
-          }else{
-            createMessage.warning(res.message);
-          }
-        }).catch((e)=>{
-           createMessage.warning(e.message);
-        });
-      },
-    });
-  };
-
-  /**
-   * 灞曞紑鍏抽棴浜嬩欢
-   */
-  function drownClick(value) {
-    if (!value.show) {
-      value.show = true;
-    } else {
-      value.show = false;
-    }
-  };
-
-  /**
-   * 鑾峰彇閮ㄩ棬鏂囨湰
-   * @param value
-   */
-  function getDepartText(value) {
-    let arr = departOptions.value.filter((item) => {
-      item.value == value;
-    });
-    if (arr && arr.length > 0) {
-      return arr[0].label;
-    }
-    return '鏈~鍐�';
-  };
-
-  /**
-   * 搴曢儴鏂囨湰鐐瑰嚮浜嬩欢
-   */
-  function footerClick(type, item) {
-    userData.value = item;
-    //缂栬緫缁勭粐鍚嶇墖
-    if (type === 'editTenant') {
-      tenantVisible.value = true;
-    }else if(type === 'exitTenant'){
-      //閫�鍑虹鎴�
-      formCancelState.value = {loginPassword:'', tenantName:''};
-      outBtnDisabled.value = true;
-      cancelVisible.value = true;
-      myTenantInfo.value = item;
-    }
-  }
-
-  //閫�鍑虹鎴峰脊绐�
-  const cancelVisible = ref<boolean>(false);
-  //閫�鍑虹鎴锋暟鎹�
-  const formCancelState = ref<any>({});
-  //绉熸埛鏁版嵁
-  const myTenantInfo = ref<any>({});  
-  //娉ㄩ攢绉熸埛寮圭獥纭畾鎸夐挳鏄惁鍙互鐐瑰嚮
-  const outBtnDisabled = ref<boolean>(true);
-  //鎷ユ湁鑰�
-  const tenantOwen = ref<string>('');
-  //鎷ユ湁鑰呭脊绐�
-  const owenVisible = ref<boolean>(false);
-  
-  /**
-   * 绉熸埛鍚嶇О鍊兼敼鍙樹簨浠�
-   */
-  function tenantNameChange() {
-    let name = unref(myTenantInfo).name;
-    let tenantName = unref(formCancelState).tenantName;
-    if(name === tenantName){
-      outBtnDisabled.value = false;
-    }else{
-      outBtnDisabled.value = true;
-    }
-  }
-
-  /**
-   * 閫�鍑虹‘瀹氱偣鍑讳簨浠�
-   */
-  async function handleOutClick() {
-    if(!unref(formCancelState).loginPassword){
-        createMessage.warning("璇疯緭鍏ョ櫥褰曞瘑鐮�");
-        return;
-    }
-    console.log("myTenantInfo::::",myTenantInfo);
-    await exitUserTenant({ id: unref(myTenantInfo).tenantUserId, loginPassword: unref(formCancelState).loginPassword }).then((res) => {
-      if (res.success) {
-        createMessage.success(res.message);
-        cancelVisible.value = false;
-        //鍒囨崲绉熸埛鍚庤鍒锋柊棣栭〉
-        window.location.reload();
-      } else {
-        if (res.message === 'assignedOwen') {
-          //闇�瑕佹寚瀹氬彉鏇磋��
-          owenVisible.value = true;
-          cancelVisible.value = false;
-        } else {
-          createMessage.warning(res.message);
-        }
-      }
-    }).catch((res) => {
-      createMessage.warning(res.message);
-    })
-  }
-  
-  /**
-   * 閫�鍑虹鎴峰彇娑堜簨浠�
-   */
-  function handleCancelOutClick() {
-    cancelVisible.value = false;
-    outBtnDisabled.value = true;
-  }
-
-  /**
-   * 鍙樻洿鎷ユ湁鐫�
-   */
-  function changeOwen() {
-    if(!unref(tenantOwen)){
-      createMessage.warning("璇烽�夋嫨鍙樻洿鎷ユ湁鑰�");
-      return;
-    }
-    changeOwenUserTenant({userId:unref(tenantOwen)}).then((res) =>{
-      if(res.success){
-        createMessage.success(res.message);
-        //鍒囨崲绉熸埛鍚庤鍒锋柊棣栭〉
-        window.location.reload();
-      } else {
-        createMessage.warning(res.message);
-      }
-    })
-  }
-onMounted(() => {
-  initDataSource();
-});
-
-</script>
-
-<style lang="less" scoped>
-.tenant-padding{
-  padding: 30px 40px 0 20px;
-}
-.my-tenant{
-  font-size: 17px;
-  font-weight: 700!important;
-  color: #333!important;
-  margin-bottom: 20px;
-}
-.tenant-list{
-  box-sizing: border-box;
-  flex: 1;
-  min-height: 0;
-  overflow-x: hidden;
-}
-.tenant-list-item{
-  border: 1px solid #eaeaea;
-  box-sizing: border-box;
-  display: flex;
-  flex-direction: column;
-  margin-bottom: 20px;
-  overflow: hidden;
-  padding: 0 25px;
-  width: 100%;
-  .item-name{
-    align-items: center;
-    box-sizing: border-box;
-    display: flex;
-    justify-content: space-between;
-    padding: 14px 0;
-    cursor: pointer;
-    font-size:17px;
-    color: #333!important;
-    font-weight: 700!important;
-  }
-}
-.tenant-list-item:hover{
-  box-shadow: 0 1px 2px 0 rgba(0,0,0,0.2);
-}
-.pointer {
-  cursor: pointer;
-}
-
-.examine {
-  color: #2c9cff;
-  font-size: 13px;
-}
-
-.cancel-apply {
-  margin-left: 24px;
-  color: red;
-  font-size: 13px;
-}
-
-.item-content {
-  transition: ease-in 2s;
-
-  .content-box {
-    border-top: 1px solid #eaeaea;
-    box-sizing: border-box;
-    display: flex;
-    padding: 24px 0;
-  }
-
-  .content-name {
-    color: #757575;
-    text-align: center;
-    width: 100px;
-    font-size: 13px;
-  }
-
-  .content-desc {
-    flex: 1;
-    min-width: 0;
-  }
-
-  .content-des-text {
-    color: #757575;
-    text-align: left;
-    width: 76px;
-    font-size: 13px;
-  }
-}
-
-.flex-flow {
-  display: flex;
-  min-width: 0;
-}
-
-.footer-box {
-  border-top: 1px solid #eaeaea;
-  box-sizing: border-box;
-  display: flex;
-  padding: 24px 0;
-  color: #757575;
-}
-
-.margin-right40 {
-  margin-right: 40px;
-}
-
-.font-color333 {
-  color: #333333;
-  font-weight: normal;
-}
-
-.font-color9e {
-  color: #9e9e9e;
-}
-
-.font-color75 {
-  color: #757575;
-}
-
-.font-size13 {
-  font-size: 13px;
-}
-
-.footer-icon {
-  font-size: 13px !important;
-  margin-right: 13px;
-  position: relative;
-  top: 4px;
-}
-:deep(.edit-tenant-setting) {
-  color: #0a8fe9;
-}
-.margin-top6 {
-  margin-top: 6px;
-}
-.margin-bottom-16 {
-  margin-bottom: 16px;
-}
-.item-right {
-  align-items: center;
-  display: flex;
-}
-.tenant-title {
-  align-items: center;
-  box-sizing: border-box;
-  display: flex;
-  justify-content: space-between;
-  padding: 24px 0;
-}
-.change-owen{
-  font-size: 14px;
-  font-weight: 700;
-}
-</style>
diff --git a/src/views/system/usersetting/UserSetting.api.ts b/src/views/system/usersetting/UserSetting.api.ts
deleted file mode 100644
index 060198a..0000000
--- a/src/views/system/usersetting/UserSetting.api.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import { defHttp } from "/@/utils/http/axios";
-
-enum Api {
-  userEdit='/sys/user/login/setting/userEdit',
-  getUserData='/sys/user/login/setting/getUserData',
-  queryNameByCodes='/sys/position/queryByCodes',
-  updateMobile='/sys/user/updateMobile',
-  updateUserPassword='/sys/user/updatePassword',
-  getTenantListByUserId = '/sys/tenant/getTenantListByUserId',
-  cancelApplyTenant = '/sys/tenant/cancelApplyTenant',
-  exitUserTenant = '/sys/tenant/exitUserTenant',
-  changeOwenUserTenant = '/sys/tenant/changeOwenUserTenant',
-}
-
-/**
- * 鐢ㄦ埛缂栬緫
- * @param params
- */
-export const userEdit = (params) => {
-  return defHttp.post({ url: Api.userEdit, params },{ isTransformResponse:false });
-}
-
-/**
- * 鑾峰彇鐢ㄦ埛淇℃伅
- * @param params
- */
-export const getUserData = () => {
-  return defHttp.get({ url: Api.getUserData },{ isTransformResponse:false });
-}
-
-/**
- * 鑾峰彇澶氫釜鑱屽姟淇℃伅
- * @param params
- */
-export const queryNameByCodes = (params) => {
-  return defHttp.get({ url: Api.queryNameByCodes, params },{isTransformResponse:false});
-}
-
-/**
- * 淇敼鎵嬫満鍙�
- * @param params
- */
-export const updateMobile = (params) => {
-  return defHttp.put({ url: Api.updateMobile, params },{isTransformResponse:false});
-}
-
-/**
- * 淇敼瀵嗙爜
- * @param params
- */
-export const updateUserPassword = (params) => {
-  return defHttp.put({ url: Api.updateUserPassword, params },{isTransformResponse:false});
-}
-
-/**
- * 閫氳繃鐢ㄦ埛id鑾峰彇绉熸埛鍒楄〃
- * @param params
- */
-export const getTenantListByUserId = (params) => {
-  return defHttp.get({ url: Api.getTenantListByUserId, params }, { isTransformResponse: false });
-};
-
-/**
- * 鍙栨秷鐢宠
- * @param params
- */
-export const cancelApplyTenant = (params) => {
-  return defHttp.put({ url: Api.cancelApplyTenant, data: params }, { joinParamsToUrl: true, isTransformResponse: false });
-};
-
-/**
- * 鐢ㄦ埛閫�鍑虹鎴�
- * @param params
- */
-export const exitUserTenant = (params)=>{
-  return defHttp.delete({ url: Api.exitUserTenant, params },{ isTransformResponse: false, joinParamsToUrl: true });
-}
-
-/**
- * 鍙樻洿绉熸埛鎷ユ湁鑰�
- * @param params
- */
-export const changeOwenUserTenant = (params)=>{
-  return defHttp.post({ url: Api.changeOwenUserTenant, params },{ isTransformResponse: false, joinParamsToUrl: true });
-}
diff --git a/src/views/system/usersetting/UserSetting.data.ts b/src/views/system/usersetting/UserSetting.data.ts
deleted file mode 100644
index f0c83f4..0000000
--- a/src/views/system/usersetting/UserSetting.data.ts
+++ /dev/null
@@ -1,145 +0,0 @@
-import { FormSchema } from '/@/components/Form/index'
-import { rules } from '/@/utils/helper/validator'
-
-export interface ListItem {
-	key: string
-	title: string
-	description: string
-	extra?: string
-	avatar?: string
-	color?: string
-}
-
-// tab鐨刲ist
-export const settingList = [
-	{
-		key: '1',
-		name: '涓汉淇℃伅',
-		component: 'BaseSetting',
-		icon: 'ant-design:user-outlined',
-	},
-	// {
-	//   key: '2',
-	//   name: '鎴戠殑绉熸埛',
-	//   component: 'TenantSetting',
-	//   icon:'ant-design:team-outlined'
-	// },
-	//  {
-	//   key: '3',
-	//   name: '璐﹀彿瀹夊叏',
-	//   component: 'AccountSetting',
-	//   icon:'ant-design:lock-outlined'
-	// },
-	// {
-	//   key: '4',
-	//   name: '绗笁鏂笰PP',
-	//   component: 'WeChatDingSetting',
-	//   icon: 'ant-design:contacts-outlined',
-	// },
-]
-
-/**
- * 鐢ㄦ埛琛ㄥ崟
- */
-export const formSchema: FormSchema[] = [
-	{
-		field: 'realname',
-		component: 'Input',
-		label: '濮撳悕',
-		colProps: { span: 24 },
-		required: true,
-	},
-	{
-		field: 'birthday',
-		component: 'DatePicker',
-		label: '鐢熸棩',
-		colProps: { span: 24 },
-		componentProps: {
-			showTime: false,
-			valueFormat: 'YYYY-MM-DD',
-			getPopupContainer: () => document.body,
-		},
-	},
-	{
-		field: 'sex',
-		component: 'RadioGroup',
-		label: '鎬у埆',
-		colProps: { span: 24 },
-		componentProps: {
-			options: [
-				{
-					label: '鐢�',
-					value: 1,
-				},
-				{
-					label: '濂�',
-					value: 2,
-				},
-			],
-		},
-	},
-	{
-		field: 'relTenantIds',
-		component: 'JDictSelectTag',
-		label: '绉熸埛',
-		colProps: { span: 24 },
-		componentProps: {
-			mode: 'multiple',
-			dictCode: 'sys_tenant,name,id',
-			disabled: true,
-		},
-	},
-	{
-		field: 'post',
-		component: 'JDictSelectTag',
-		label: '鑱屼綅',
-		colProps: { span: 24 },
-		componentProps: {
-			mode: 'multiple',
-			dictCode: 'sys_position,name,code',
-			disabled: true,
-		},
-	},
-	{
-		label: '',
-		field: 'id',
-		component: 'Input',
-		show: false,
-	},
-]
-
-//瀵嗙爜寮圭獥
-export const formPasswordSchema: FormSchema[] = [
-	{
-		label: '鐢ㄦ埛璐﹀彿',
-		field: 'username',
-		component: 'Input',
-		componentProps: { readOnly: true },
-	},
-	{
-		label: '鏃у瘑鐮�',
-		field: 'oldpassword',
-		component: 'InputPassword',
-		required: true,
-	},
-	{
-		label: '鏂板瘑鐮�',
-		field: 'password',
-		component: 'StrengthMeter',
-		componentProps: {
-			placeholder: '璇疯緭鍏ユ柊瀵嗙爜',
-		},
-		rules: [
-			{
-				required: true,
-				message: '璇疯緭鍏ユ柊瀵嗙爜',
-			},
-		],
-	},
-	{
-		label: '纭鏂板瘑鐮�',
-		field: 'confirmpassword',
-		component: 'InputPassword',
-		dynamicRules: ({ values }) => rules.confirmPassword(values, true),
-	},
-]
diff --git a/src/views/system/usersetting/UserSetting.vue b/src/views/system/usersetting/UserSetting.vue
deleted file mode 100644
index ff56d55..0000000
--- a/src/views/system/usersetting/UserSetting.vue
+++ /dev/null
@@ -1,110 +0,0 @@
-<template>
-  <ScrollContainer>
-    <div ref="wrapperRef" :class="prefixCls">
-      <Tabs tab-position="left" :tabBarStyle="tabBarStyle" @tabClick="componentClick">
-        <template v-for="item in settingList" :key="item.key">
-          <TabPane>
-            <template #tab>
-                <span>
-                  <Icon :icon="item.icon" class="icon-font-color"/>
-                  {{item.name}}
-                </span>
-            </template>
-            <component :is="item.component" v-if="activeKey === item.key" />
-          </TabPane>
-        </template>
-      </Tabs>
-    </div>
-  </ScrollContainer>
-</template>
-
-<script lang="ts">
-import { ref, defineComponent } from "vue";
-import { Tabs } from "ant-design-vue";
-import { ScrollContainer } from "/@/components/Container";
-import { settingList } from "./UserSetting.data";
-import BaseSetting from "./BaseSetting.vue";
-import AccountSetting from "./AccountSetting.vue";
-import TenantSetting from "./TenantSetting.vue";
-import WeChatDingSetting from './WeChatDingSetting.vue';
-export default defineComponent({
-  components: {
-    ScrollContainer,
-    Tabs,
-    TabPane: Tabs.TabPane,
-    BaseSetting,
-    AccountSetting,
-    TenantSetting,
-    WeChatDingSetting,
-  }, 
-  setup() {
-    const activeKey = ref<string>('1');
-
-    /**
-     * 缁勪欢鏍囬鐐瑰嚮浜嬩欢,瑙e喅绗簩娆′笉鍔犺浇鏁版嵁
-     * @param key
-     */
-    function componentClick(key) {
-      activeKey.value = key;
-    }
-    
-    return {
-      prefixCls: "account-setting",
-      settingList,
-      tabBarStyle: {
-        width: "220px",
-        marginBottom: "200px"
-      },
-      componentClick,
-      activeKey,
-    };
-  }
-});
-</script>
-<style lang="less" scoped>
-.account-setting {
-  margin: 12px;
-
-  .base-title {
-    padding-left: 0;
-  }
-
-  .ant-tabs-tab-active {
-    background-color: @item-active-bg;
-  }
-  //tabs寮圭獥宸﹁竟鏍峰紡
-  :deep(.ant-tabs-nav){
-    background-color: #FFFFFF;
-    height: 260px;
-  }
-  //tabs寮圭獥鍙宠竟杈规牱寮�
-  :deep(.ant-tabs-content-holder){
-    position: relative;
-    left: 12px;
-    background: #FFFFFF;
-    height: auto !important;
-  }
-}
-//tab鐐瑰嚮鏍峰紡
-:deep(.ant-tabs-tab-active){
-  border-radius: 0 20px 20px 0;
-  background-color: #1294f7!important;
-  color: #fff!important;
-  .icon-font-color{
-    color: #fff;
-  }
-}
-:deep(.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn){
-  color: white !important;
-}
-:deep(.ant-tabs-ink-bar){
-  visibility: hidden;
-}
-:deep(.ant-tabs-nav-list){
-  padding-top:14px;
-  padding-right:14px;
-}
-.icon-font-color{
-  color: #9e9e9e;
-}
-</style>
diff --git a/src/views/system/usersetting/WeChatDingSetting.vue b/src/views/system/usersetting/WeChatDingSetting.vue
deleted file mode 100644
index a04730c..0000000
--- a/src/views/system/usersetting/WeChatDingSetting.vue
+++ /dev/null
@@ -1,116 +0,0 @@
-<template>
-  <div class="account-padding">
-    <div class="my-account">绗笁鏂笰PP</div>
-    <div class="account-row-item">
-      <div class="account-label gray-75">浼佷笟寰俊缁戝畾</div>
-      <span>
-        <icon-font :style="!bindData.bindWechat ? { color: '#9e9e9e' } : { color: '#1ec563' }" class="item-icon" type="icon-qiyeweixin3" />
-        <span class="gray-75" style="margin-left: 12px">浼佷笟寰俊</span>
-        <span class="gray-75" style="margin-left: 8px" v-if="bindData.bindWechat">{{ '宸茬粦瀹氾細' + bindData.weChatName }}</span>
-        <span class="blue-e5 pointer" style="margin-left: 24px" @click="wechatBind">{{ !bindData.bindWechat ? '缁戝畾' : '瑙g粦' }}</span>
-      </span>
-    </div>
-    <div class="account-row-item">
-      <div class="account-label gray-75">閽夐拤缁戝畾</div>
-      <span>
-        <DingtalkCircleFilled :style="!bindData.bindDing ? { color: '#9e9e9e' } : { color: '#1ec563' }" class="item-icon" />
-        <span class="gray-75" style="margin-left: 12px">閽夐拤</span>
-        <span class="gray-75" style="margin-left: 8px" v-if="bindData.bindDing">{{ '宸茬粦瀹氾細' + bindData.dingName }}</span>
-        <span class="blue-e5 pointer" style="margin-left: 24px" @click="dingDingBind">{{ !bindData.bindDing ? '缁戝畾' : '瑙g粦' }}</span>
-      </span>
-    </div>
-  </div>
-</template>
-<script lang="ts" setup name="we-chat-ding-setting">
-  import { onMounted, ref, reactive } from 'vue';
-  import { CollapseContainer } from '/@/components/Container';
-  import { getUserData } from './UserSetting.api';
-  import { useUserStore } from '/@/store/modules/user';
-  import { useModal } from '/@/components/Modal';
-  import { DingtalkCircleFilled, createFromIconfontCN } from '@ant-design/icons-vue';
-
-  const IconFont = createFromIconfontCN({
-    scriptUrl: '//at.alicdn.com/t/font_2316098_umqusozousr.js',
-  });
-  const userDetail = ref<any>([]);
-  const userStore = useUserStore();
-  const bindData = reactive<any>({
-    bindWechat: false,
-    weChatName: '鏄电О',
-    bindDing: false,
-    dingName: '鏄电О',
-  });
-
-  /**
-   * 鍒濆鍖栭拤閽夊拰浼佷笟寰俊鏁版嵁
-   */
-  function initUserDetail() {}
-
-  /**
-   * 寰俊缁戝畾瑙g粦浜嬩欢
-   */
-  function wechatBind() {
-    console.log('寰俊缁戝畾瑙g粦浜嬩欢');
-  }
-
-  /**
-   * 閽夐拤缁戝畾瑙g粦浜嬩欢
-   */
-  function dingDingBind() {
-    console.log('閽夐拤缁戝畾瑙g粦浜嬩欢');
-  }
-
-  onMounted(() => {
-    initUserDetail();
-  });
-</script>
-<style lang="less" scoped>
-  .account-row-item {
-    align-items: center;
-    border-bottom: 1px solid #eaeaea;
-    box-sizing: border-box;
-    display: flex;
-    height: 71px;
-    position: relative;
-  }
-
-  .account-label {
-    text-align: left;
-    width: 160px;
-  }
-
-  .gray-75 {
-    color: #757575 !important;
-  }
-
-  .pointer {
-    cursor: pointer;
-  }
-
-  .blue-e5 {
-    color: #1e88e5;
-  }
-
-  .phone-margin {
-    margin-left: 24px;
-    margin-right: 24px;
-  }
-
-  .clearfix:after {
-    clear: both;
-  }
-
-  .clearfix:before {
-    content: '';
-    display: table;
-  }
-  .account-padding {
-    padding: 30px 40px 0 20px;
-  }
-  .my-account {
-    font-size: 17px;
-    font-weight: 700 !important;
-    color: #333 !important;
-    margin-bottom: 20px;
-  }
-</style>
diff --git a/src/views/system/usersetting/commponents/UserAccountModal.vue b/src/views/system/usersetting/commponents/UserAccountModal.vue
deleted file mode 100644
index f6e7ff1..0000000
--- a/src/views/system/usersetting/commponents/UserAccountModal.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" width="500px"  :title="title" @ok="handleSubmit" destroyOnClose>
-    <BasicForm @register="registerForm" />
-  </BasicModal>
-</template>
-
-<script lang="ts" setup>
-import { BasicModal, useModalInner } from '/@/components/Modal';
-import { BasicForm, useForm } from '/@/components/Form';
-import { formSchema } from '../UserSetting.data';
-import { ref, unref, defineEmits } from 'vue';
-import { userEdit } from "../UserSetting.api";
-import { useUserStore } from "/@/store/modules/user";
-import { useMessage } from "/@/hooks/web/useMessage";
-
-const userStore = useUserStore();
-const { createMessage } = useMessage();
-const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
-  schemas: formSchema,
-  showActionButtonGroup: false,
-});
-const userDetail = ref<any>({});
-const isUpdate = ref<boolean>(false);
-const title = ref<string>('');
-const emit = defineEmits(['register','success']);
-const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-  await resetFields();
-  setModalProps({ confirmLoading: false });
-  title.value = '缂栬緫涓汉璧勬枡';
-  if(data.record.post){
-    data.record.post = data.record.post.split(",")
-  }
-  if(data.record.relTenantIds){
-    data.record.relTenantIds = data.record.relTenantIds.split(",")
-  }
-  userDetail.value = data.record;
-  //update-begin---author:wangshuai ---date:20230130  for锛歔QQYUN-3976]涓汉淇℃伅 缂栬緫鏃讹紝鍒氭敞鍐屾病鏈夎缃敓鏃� 鐢熸棩鏄剧ず鏈夐棶棰�------------
-  if(data.record.birthday === '鏈~鍐�'){
-    data.record.birthday = undefined;
-  }
-  //update-end---author:wangshuai ---date:20230130  for锛歔QQYUN-3976]涓汉淇℃伅 缂栬緫鏃讹紝鍒氭敞鍐屾病鏈夎缃敓鏃� 鐢熸棩鏄剧ず鏈夐棶棰�------------
-  await setFieldsValue({ ...data.record });
-});
-
-/**
- * 鏁版嵁淇敼鍜屾柊澧�
- */
-async function handleSubmit() {
-  try {
-    let values = await validate();
-    setModalProps({ confirmLoading: true });
-    //鎻愪氦琛ㄥ崟
-    await userEdit(values).then((res) =>{
-      if(res.success){
-        createMessage.success(res.message)
-      }else{
-        createMessage.warn(res.message)
-      }
-    });
-    //鏇存柊缂撳瓨
-    Object.assign(userDetail.value,values)
-    userStore.setUserInfo(unref(userDetail));
-    emit('success')
-    //鍏抽棴寮圭獥
-    closeModal();
-  } finally {
-    setModalProps({ confirmLoading: false });
-  }
-}
-</script>
diff --git a/src/views/system/usersetting/commponents/UserEmailModal.vue b/src/views/system/usersetting/commponents/UserEmailModal.vue
deleted file mode 100644
index bbdb22e..0000000
--- a/src/views/system/usersetting/commponents/UserEmailModal.vue
+++ /dev/null
@@ -1,80 +0,0 @@
-<template>
-<BasicModal v-bind="$attrs" @register="registerModal" width="500px"  :title="title" :showCancelBtn="false" :showOkBtn="false">
-  <a-form class="antd-modal-form" ref="formRef" :model="formState" :rules="validatorRules">
-    <a-form-item name="email">
-      <a-input size="large" v-model:value="formState.email" placeholder="璇疯緭鍏ラ偖绠�" />
-    </a-form-item>
-    <a-form-item>
-      <a-button size="large" type="primary" block @click="updateEmail">
-        纭
-      </a-button>
-    </a-form-item>
-  </a-form>
-</BasicModal>
-</template>
-
-<script lang="ts" setup name="user-replace-email-modal">
-import BasicModal from "/@/components/Modal/src/BasicModal.vue";
-import { CountdownInput } from '/@/components/CountDown';
-import { useUserStore } from "/@/store/modules/user";
-import { useMessage } from "/@/hooks/web/useMessage";
-import { defineEmits, ref, reactive, toRaw } from "vue";
-import { useModalInner } from "/@/components/Modal";
-import { getCaptcha } from "/@/api/sys/user";
-import { SmsEnum } from "/@/views/sys/login/useLogin";
-import { Rule } from "/@/components/Form";
-import { rules } from "/@/utils/helper/validator";
-import { Form } from "ant-design-vue";
-import { updateMobile, userEdit } from "../UserSetting.api";
-import { duplicateCheck } from "/@/views/system/user/user.api";
-
-const userStore = useUserStore();
-const { createMessage } = useMessage();
-const formState = reactive<Record<string, any>>({
-  email:'',
-});
-const formRef = ref();
-
-const validatorRules: Record<string, Rule[]> = {
-  email: [{...rules.duplicateCheckRule("sys_user",'email',formState,{ label:'閭' })[0]},{ required: true, type: 'email', message: '閭鏍煎紡涓嶆纭�' }],
-};
-const useForm = Form.useForm;
-const title = ref<string>('');
-const emit = defineEmits(['register','success']);
-const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-  formRef.value.resetFields();
-  formRef.value.clearValidate();
-  setModalProps({ confirmLoading: false });
-  title.value = '淇敼閭';
-  //璧嬪��
-  data.record.smscode = '';
-  Object.assign(formState, data.record);
-});
-
-/**
- * 鍊掕鏃舵墽琛屽墠鐨勫嚱鏁�
- */
-function sendCodeApi() {
-  return getCaptcha({ mobile: formState.phone, smsmode: SmsEnum.REGISTER });
-}
-
-/**
- * 鏇存柊鎵嬫満鍙�
- */
-async function updateEmail() {
-  await formRef.value.validateFields();
-  userEdit(formState).then((res) =>{
-    if(res.success){
-      createMessage.success("淇敼閭鎴愬姛")
-      emit("success")
-      closeModal();
-    }else{
-      createMessage.warning(res.message)
-    }
-  })
-}
-</script>
-
-<style scoped>
-
-</style>
\ No newline at end of file
diff --git a/src/views/system/usersetting/commponents/UserPasswordModal.vue b/src/views/system/usersetting/commponents/UserPasswordModal.vue
deleted file mode 100644
index 760e552..0000000
--- a/src/views/system/usersetting/commponents/UserPasswordModal.vue
+++ /dev/null
@@ -1,114 +0,0 @@
-<template>
-  <BasicModal v-bind="$attrs" @register="registerModal" title="淇敼瀵嗙爜" @ok="handleSubmit">
-    <a-form class="antd-modal-form" ref="formRef" :model="formState" :rules="validatorRules">
-      <a-form-item name="oldpassword">
-        <div class="black font-size-13">鍘熸湁瀵嗙爜</div>
-        <div class="pass-padding">
-          <a-input-password v-model:value="formState.oldpassword" placeholder="鍘熸湁瀵嗙爜" />
-        </div>
-        <div style="display: block">
-          <span class="gray-9e float-left font-size-13">杩涘叆缃戠珯鐨勭櫥褰曞瘑鐮�</span>
-        </div>
-      </a-form-item>
-      <a-form-item name="password">
-        <span class="black font-size-13">鏂板瘑鐮�</span>
-        <div class="pass-padding">
-          <a-input-password v-model:value="formState.password" placeholder="鏂板瘑鐮�" />
-        </div>
-        <span class="gray-9e font-size-13">8-20浣嶏紝闇�鍖呭惈瀛楁瘝鍜屾暟瀛�</span>
-      </a-form-item>
-    </a-form>
-  </BasicModal>
-</template>
-<script lang="ts" name="user-pass-word-modal" setup>
-  import { ref, computed, unref, reactive } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { Rule } from '/@/components/Form/index';
-  import { updateUserPassword } from '../UserSetting.api';
-  import { useMessage } from "/@/hooks/web/useMessage";
-  import { useUserStore, useUserStoreWithOut } from "/@/store/modules/user";
-
-  const $message = useMessage();
-  //鐢ㄦ埛鍚�
-  const username = ref<string>('')
-  const formRef = ref();
-  const formState = reactive({
-    oldpassword:'',
-    password:'',
-  });
-  // 澹版槑Emits
-  const emit = defineEmits(['success', 'register']);
-  //琛ㄥ崟璧嬪��
-  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-    setModalProps({ confirmLoading: false });
-    username.value = data.record.username
-  });
-  const userStore = useUserStore();
-  const validatorRules: Record<string, Rule[]> = {
-    password: [{ required: true, validator:checkPassword},{ pattern:/^(?=.*[0-9])(?=.*[a-zA-Z])(.{8,20})$/,message:'8-20浣嶏紝闇�鍖呭惈瀛楁瘝鍜屾暟瀛�'}],
-    oldpassword: [{ required: true, message: '璇疯緭鍏ュ師鏈夊瘑鐮�' }],
-  };
-
-  //琛ㄥ崟鎻愪氦浜嬩欢
-  async function handleSubmit() {
-    try {
-      let values = await formRef.value.validateFields();
-      setModalProps({ confirmLoading: true });
-      //鎻愪氦琛ㄥ崟
-      values.username = unref(username);
-      values.confirmpassword = values.password ;
-      await updateUserPassword(values).then((res) =>{
-        if(res.success){
-          $message.createMessage.info({
-            content:'瀵嗙爜淇敼鎴愬姛锛岃閲嶆柊鐧诲綍锛�3s鍚庤嚜鍔ㄩ��鍑虹櫥褰�',
-            duration: 3
-          })
-          //3s鍚庤繑鍥炵櫥褰曢〉闈�
-          setTimeout(()=>{
-            userStore.logout(true);
-          },3000)
-          //鍏抽棴寮圭獥
-          closeModal();
-        }else{
-          $message.createMessage.warn(res.message);
-        }
-      });
-    } finally {
-      setModalProps({ confirmLoading: false });
-    }
-  }
-
-  /**
-   * 楠岃瘉鏂板瘑鐮佹槸鍚︿负绌�
-   */
-  function checkPassword(_rule: Rule, value: string) {
-    if(value === ''){
-      return Promise.reject('璇疯緭鍏ユ柊瀵嗙爜');
-    }
-    return Promise.resolve();
-  }
-</script>
-<style lang="less" scoped>
-  .black {
-    color: #000000;
-  }
-  .font-size-13 {
-    font-size: 13px;
-    line-height: 15px;
-  }
-  .gray-9e {
-    color: #9e9e9e;
-  }
-  .float-left {
-    float: left;
-  }
-  .pass-padding {
-    padding-top: 10px;
-    padding-bottom: 10px;
-  }
-  .forget{
-    float: right;
-    color: #1e88e5!important;
-    cursor: pointer
-  }
-</style>
diff --git a/src/views/system/usersetting/commponents/UserPhoneModal.vue b/src/views/system/usersetting/commponents/UserPhoneModal.vue
deleted file mode 100644
index 8b7ee50..0000000
--- a/src/views/system/usersetting/commponents/UserPhoneModal.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-<template>
-<BasicModal v-bind="$attrs" @register="registerModal" width="500px"  :title="title" :showCancelBtn="false" :showOkBtn="false">
-  <a-form class="antd-modal-form" ref="formRef" :model="formState" :rules="validatorRules">
-    <a-form-item  name="phone">
-      <a-input size="large" v-model:value="formState.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" />
-    </a-form-item>
-    <a-form-item name="smscode">
-      <CountdownInput size="large" v-model:value="formState.smscode" placeholder="杈撳叆6浣嶉獙璇佺爜" :sendCodeApi="sendCodeApi" />
-    </a-form-item>
-    <a-form-item>
-      <a-button size="large" type="primary" block @click="updatePhone">
-        纭
-      </a-button>
-    </a-form-item>
-  </a-form>
-</BasicModal>
-</template>
-
-<script lang="ts" setup name="user-replace-phone-modal">
-import BasicModal from "/@/components/Modal/src/BasicModal.vue";
-import { CountdownInput } from '/@/components/CountDown';
-import { useUserStore } from "/@/store/modules/user";
-import { useMessage } from "/@/hooks/web/useMessage";
-import { defineEmits, ref, reactive, toRaw } from "vue";
-import { useModalInner } from "/@/components/Modal";
-import { getCaptcha } from "/@/api/sys/user";
-import { SmsEnum } from "/@/views/sys/login/useLogin";
-import { Rule } from "/@/components/Form";
-import { rules } from "/@/utils/helper/validator";
-import { Form } from "ant-design-vue";
-import { updateMobile } from "../UserSetting.api";
-import { duplicateCheck } from "/@/views/system/user/user.api";
-
-const userStore = useUserStore();
-const { createMessage } = useMessage();
-const formState = reactive<Record<string, any>>({
-  phone:'',
-  smscode:''
-});
-const formRef = ref();
-const userData = ref<any>({})
-
-const validatorRules: Record<string, Rule[]> = {
-  phone: [{...rules.duplicateCheckRule("sys_user",'phone',formState,{ label:'鎵嬫満鍙�' })[0]},{ pattern: /^1[3456789]\d{9}$/, message: '鎵嬫満鍙风爜鏍煎紡鏈夎' }],
-  smscode: [{ required: true,message:'璇疯緭鍏ラ獙璇佺爜' }],
-};
-const useForm = Form.useForm;
-const title = ref<string>('');
-const emit = defineEmits(['register','success']);
-const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-  formRef.value.resetFields();
-  formRef.value.clearValidate();
-  setModalProps({ confirmLoading: false });
-  title.value = '淇敼鎵嬫満鍙�';
-  //璧嬪��
-  data.record.smscode = '';
-  Object.assign(formState, data.record);
-  userData.value = data.record;
-});
-
-/**
- * 鍊掕鏃舵墽琛屽墠鐨勫嚱鏁�
- */
-function sendCodeApi() {
-  return getCaptcha({ mobile: formState.phone, smsmode: SmsEnum.REGISTER });
-}
-
-/**
- * 鏇存柊鎵嬫満鍙�
- */
-async function updatePhone() {
-  await formRef.value.validateFields();
-  updateMobile(formState).then((res) =>{
-    if(res.success){
-      createMessage.success("淇敼鎵嬫満鍙锋垚鍔�")
-      emit("success")
-      closeModal();
-    }else{
-      createMessage.warning(res.message)
-    }
-  })
-}
-</script>
diff --git a/stylelint.config.js b/stylelint.config.js
deleted file mode 100644
index 8c5031a..0000000
--- a/stylelint.config.js
+++ /dev/null
@@ -1,60 +0,0 @@
-module.exports = {
-	root: true,
-	plugins: ['stylelint-order'],
-	extends: ['stylelint-config-standard', 'stylelint-config-prettier'],
-	rules: {
-		'selector-pseudo-class-no-unknown': [
-			true,
-			{
-				ignorePseudoClasses: ['global'],
-			},
-		],
-		'selector-pseudo-element-no-unknown': [
-			true,
-			{
-				ignorePseudoElements: ['v-deep'],
-				ignorePseudoElements: ['deep'],
-			},
-		],
-		'at-rule-no-unknown': [
-			true,
-			{
-				ignoreAtRules: ['tailwind', 'apply', 'variants', 'responsive', 'screen', 'function', 'if', 'each', 'include', 'mixin'],
-			},
-		],
-		'no-empty-source': null,
-		'named-grid-areas-no-invalid': null,
-		'unicode-bom': 'never',
-		'no-descending-specificity': null,
-		'font-family-no-missing-generic-family-keyword': null,
-		'declaration-colon-space-after': 'always-single-line',
-		'declaration-colon-space-before': 'never',
-		// 'declaration-block-trailing-semicolon': 'always',
-		'rule-empty-line-before': [
-			'always',
-			{
-				ignore: ['after-comment', 'first-nested'],
-			},
-		],
-		'unit-no-unknown': [true, { ignoreUnits: ['rpx'] }],
-		'order/order': [
-			[
-				'dollar-variables',
-				'custom-properties',
-				'at-rules',
-				'declarations',
-				{
-					type: 'at-rule',
-					name: 'supports',
-				},
-				{
-					type: 'at-rule',
-					name: 'media',
-				},
-				'rules',
-			],
-			{ severity: 'warning' },
-		],
-	},
-	ignoreFiles: ['**/*.js', '**/*.jsx', '**/*.tsx', '**/*.ts'],
-}
diff --git a/tests/__mocks__/fileMock.ts b/tests/__mocks__/fileMock.ts
deleted file mode 100644
index 08d725c..0000000
--- a/tests/__mocks__/fileMock.ts
+++ /dev/null
@@ -1 +0,0 @@
-export default '';
diff --git a/tests/__mocks__/styleMock.ts b/tests/__mocks__/styleMock.ts
deleted file mode 100644
index ff8b4c5..0000000
--- a/tests/__mocks__/styleMock.ts
+++ /dev/null
@@ -1 +0,0 @@
-export default {};
diff --git a/tests/__mocks__/workerMock.ts b/tests/__mocks__/workerMock.ts
deleted file mode 100644
index 0b8b671..0000000
--- a/tests/__mocks__/workerMock.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export default jest.fn().mockImplementation(() => ({
-  postMessage: jest.fn(),
-  onmessage: jest.fn(),
-  onerror: jest.fn(),
-}));
diff --git a/tests/server/README.md b/tests/server/README.md
deleted file mode 100644
index 33db6bf..0000000
--- a/tests/server/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Test Server
-
-It is used to start the test interface service, which can test the upload, websocket, login and other interfaces.
-
-## Usage
-
-```bash
-
-cd ./test/server
-
-yarn
-
-yarn start
-
-```
diff --git a/tests/server/controller/FileController.ts b/tests/server/controller/FileController.ts
deleted file mode 100644
index cf6d90d..0000000
--- a/tests/server/controller/FileController.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import FileService from '../service/FileService';
-
-class FileController {
-  private service: FileService = new FileService();
-
-  upload = async (ctx) => {
-    const files = ctx.request.files.file;
-    console.log(files);
-
-    if (files.length === undefined) {
-      this.service.upload(ctx, files, false);
-    } else {
-      this.service.upload(ctx, files, true);
-    }
-  };
-}
-
-export default new FileController();
diff --git a/tests/server/controller/UserController.ts b/tests/server/controller/UserController.ts
deleted file mode 100644
index db815c2..0000000
--- a/tests/server/controller/UserController.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import UserService from '../service/UserService';
-
-class UserController {
-  private service: UserService = new UserService();
-
-  login = async (ctx) => {
-    ctx.body = await this.service.login();
-  };
-
-  getUserInfoById = async (ctx) => {
-    ctx.body = await this.service.getUserInfoById();
-  };
-}
-
-export default new UserController();
diff --git a/tests/server/ecosystem.config.js b/tests/server/ecosystem.config.js
deleted file mode 100644
index a31e457..0000000
--- a/tests/server/ecosystem.config.js
+++ /dev/null
@@ -1,18 +0,0 @@
-const { name } = require('./package.json');
-const path = require('path');
-
-module.exports = {
-  apps: [
-    {
-      name,
-      script: path.resolve(__dirname, './dist/index.js'),
-      instances: require('os').cpus().length,
-      autorestart: true,
-      watch: true,
-      env_production: {
-        NODE_ENV: 'production',
-        PORT: 8080,
-      },
-    },
-  ],
-};
diff --git a/tests/server/index.ts b/tests/server/index.ts
deleted file mode 100644
index d0b0931..0000000
--- a/tests/server/index.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import Koa from 'koa';
-import path from 'path';
-import Router from 'koa-router';
-import body from 'koa-body';
-import cors from 'koa2-cors';
-import koaStatic from 'koa-static';
-import websockify from 'koa-websocket';
-import route from 'koa-route';
-
-import AppRoutes from './routes';
-
-const PORT = 3300;
-
-const app = websockify(new Koa());
-
-app.ws.use(function (ctx, next) {
-  ctx.websocket.send('connection succeeded!');
-  return next(ctx);
-});
-
-app.ws.use(
-  route.all('/test', function (ctx) {
-    // ctx.websocket.send('Hello World');
-    ctx.websocket.on('message', function (message) {
-      // do something with the message from client
-
-      if (message !== 'ping') {
-        const data = JSON.stringify({
-          id: Math.ceil(Math.random() * 1000),
-          time: new Date().getTime(),
-          res: `${message}`,
-        });
-        ctx.websocket.send(data);
-      }
-      console.log(message);
-    });
-  })
-);
-
-const router = new Router();
-
-// router
-AppRoutes.forEach((route) => router[route.method](route.path, route.action));
-
-app.use(cors());
-app.use(
-  body({
-    encoding: 'gzip',
-    multipart: true,
-    formidable: {
-      // uploadDir: path.join(__dirname, '/upload/'), // 璁剧疆鏂囦欢涓婁紶鐩綍
-      keepExtensions: true,
-      maxFieldsSize: 20 * 1024 * 1024,
-    },
-  })
-);
-app.use(router.routes());
-app.use(router.allowedMethods());
-app.use(koaStatic(path.join(__dirname)));
-
-app.listen(PORT, () => {
-  console.log(`Application started successfully: http://localhost:${PORT}`);
-});
diff --git a/tests/server/nodemon.json b/tests/server/nodemon.json
deleted file mode 100644
index 59fa5af..0000000
--- a/tests/server/nodemon.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "watch": ["src"],
-  "ext": "ts",
-  "exec": "ts-node -r tsconfig-paths/register index.ts",
-  "events": {
-    "restart": "clear"
-  }
-}
diff --git a/tests/server/package.json b/tests/server/package.json
deleted file mode 100644
index d530d59..0000000
--- a/tests/server/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "name": "server",
-  "version": "1.0.0",
-  "license": "MIT",
-  "scripts": {
-    "start": "nodemon",
-    "build": "rimraf ./dist && tsup ./index.ts --dts --format cjs,esm  ",
-    "prod": "npx pm2 start ecosystem.config.js --env production",
-    "restart": "pm2 restart ecosystem.config.js --env production",
-    "stop": "npx pm2 stop ecosystem.config.js"
-  },
-  "dependencies": {
-    "fs-extra": "^10.0.0",
-    "koa": "^2.13.1",
-    "koa-body": "^4.2.0",
-    "koa-bodyparser": "^4.3.0",
-    "koa-route": "^3.2.0",
-    "koa-router": "^10.1.1",
-    "koa-static": "^5.0.0",
-    "koa-websocket": "^6.0.0",
-    "koa2-cors": "^2.0.6"
-  },
-  "devDependencies": {
-    "@types/koa": "^2.13.4",
-    "@types/koa-bodyparser": "^5.0.2",
-    "@types/koa-router": "^7.4.4",
-    "@types/node": "^16.7.1",
-    "nodemon": "^2.0.12",
-    "pm2": "^5.1.1",
-    "rimraf": "^3.0.2",
-    "ts-node": "^10.2.1",
-    "tsconfig-paths": "^3.11.0",
-    "tsup": "^4.14.0",
-    "typescript": "^4.3.5"
-  }
-}
diff --git a/tests/server/routes.ts b/tests/server/routes.ts
deleted file mode 100644
index 7fe6475..0000000
--- a/tests/server/routes.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import UserController from './controller/UserController';
-import FileController from './controller/FileController';
-
-export default [
-  // user
-  {
-    path: '/login',
-    method: 'post',
-    action: UserController.login,
-  },
-  {
-    path: '/getUserInfoById',
-    method: 'get',
-    action: UserController.getUserInfoById,
-  },
-
-  // file
-  {
-    path: '/upload',
-    method: 'post',
-    action: FileController.upload,
-  },
-];
diff --git a/tests/server/service/FileService.ts b/tests/server/service/FileService.ts
deleted file mode 100644
index dfd378f..0000000
--- a/tests/server/service/FileService.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import path from 'path';
-import fs from 'fs-extra';
-
-const uploadUrl = 'http://localhost:3300/static/upload';
-const filePath = path.join(__dirname, '../static/upload/');
-
-fs.ensureDir(filePath);
-export default class UserService {
-  async upload(ctx, files, isMultiple) {
-    let fileReader, fileResource, writeStream;
-
-    const fileFunc = function (file) {
-      fileReader = fs.createReadStream(file.path);
-      fileResource = filePath + `/${file.name}`;
-      console.log(fileResource);
-
-      writeStream = fs.createWriteStream(fileResource);
-      fileReader.pipe(writeStream);
-    };
-
-    const returnFunc = function (flag) {
-      if (flag) {
-        let url = '';
-        for (let i = 0; i < files.length; i++) {
-          url += uploadUrl + `/${files[i].name},`;
-        }
-        url = url.replace(/,$/gi, '');
-        ctx.body = {
-          url: url,
-          code: 0,
-          message: 'upload Success!',
-        };
-      } else {
-        ctx.body = {
-          url: uploadUrl + `/${files.name}`,
-          code: 0,
-          message: 'upload Success!',
-        };
-      }
-    };
-    console.log(isMultiple, files.length);
-
-    if (isMultiple) {
-      for (let i = 0; i < files.length; i++) {
-        const f1 = files[i];
-        fileFunc(f1);
-      }
-    } else {
-      fileFunc(files);
-    }
-    fs.ensureDir(filePath);
-    returnFunc(isMultiple);
-  }
-}
diff --git a/tests/server/service/UserService.ts b/tests/server/service/UserService.ts
deleted file mode 100644
index da61628..0000000
--- a/tests/server/service/UserService.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Result } from '../utils';
-
-const fakeUserInfo = {
-  userId: '1',
-  username: 'Jeecg',
-  realname: 'Jeecg Admin',
-  desc: 'manager',
-  password: '123456',
-  token: 'fakeToken1',
-  roles: [
-    {
-      roleName: 'Super Admin',
-      value: 'super',
-    },
-  ],
-};
-export default class UserService {
-  async login() {
-    return Result.success(fakeUserInfo);
-  }
-
-  async getUserInfoById() {
-    return Result.success(fakeUserInfo);
-  }
-}
diff --git a/tests/server/tsconfig.json b/tests/server/tsconfig.json
deleted file mode 100644
index 76203ed..0000000
--- a/tests/server/tsconfig.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-  "compilerOptions": {
-    "module": "commonjs",
-    "declaration": false,
-    "removeComments": true,
-    "emitDecoratorMetadata": true,
-    "experimentalDecorators": true,
-    "target": "es6",
-    "sourceMap": false,
-    "esModuleInterop": true,
-    "outDir": "./dist",
-    "baseUrl": "./"
-  },
-  "exclude": ["node_modules"]
-}
diff --git a/tests/server/utils.ts b/tests/server/utils.ts
deleted file mode 100644
index 7fd0b3f..0000000
--- a/tests/server/utils.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-export class Result {
-  static success(data: any) {
-    return {
-      code: 0,
-      success: true,
-      result: data,
-    };
-  }
-}
diff --git a/tests/server/yarn.lock b/tests/server/yarn.lock
deleted file mode 100644
index 9c6df7f..0000000
--- a/tests/server/yarn.lock
+++ /dev/null
@@ -1,2955 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@babel/code-frame@^7.0.0":
-  version "7.12.13"
-  resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658"
-  integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==
-  dependencies:
-    "@babel/highlight" "^7.12.13"
-
-"@babel/helper-validator-identifier@^7.14.0":
-  version "7.14.0"
-  resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
-  integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
-
-"@babel/highlight@^7.12.13":
-  version "7.14.0"
-  resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf"
-  integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==
-  dependencies:
-    "@babel/helper-validator-identifier" "^7.14.0"
-    chalk "^2.0.0"
-    js-tokens "^4.0.0"
-
-"@nodelib/fs.scandir@2.1.5":
-  version "2.1.5"
-  resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
-  integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
-  dependencies:
-    "@nodelib/fs.stat" "2.0.5"
-    run-parallel "^1.1.9"
-
-"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
-  version "2.0.5"
-  resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
-  integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
-
-"@nodelib/fs.walk@^1.2.3":
-  version "1.2.7"
-  resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2"
-  integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==
-  dependencies:
-    "@nodelib/fs.scandir" "2.1.5"
-    fastq "^1.6.0"
-
-"@opencensus/core@0.0.9":
-  version "0.0.9"
-  resolved "https://registry.npmjs.org/@opencensus/core/-/core-0.0.9.tgz#b16f775435ee309433e4126af194d37313fc93b3"
-  integrity sha512-31Q4VWtbzXpVUd2m9JS6HEaPjlKvNMOiF7lWKNmXF84yUcgfAFL5re7/hjDmdyQbOp32oGc+RFV78jXIldVz6Q==
-  dependencies:
-    continuation-local-storage "^3.2.1"
-    log-driver "^1.2.7"
-    semver "^5.5.0"
-    shimmer "^1.2.0"
-    uuid "^3.2.1"
-
-"@opencensus/core@^0.0.8":
-  version "0.0.8"
-  resolved "https://registry.npmjs.org/@opencensus/core/-/core-0.0.8.tgz#df01f200c2d2fbfe14dae129a1a86fb87286db92"
-  integrity sha512-yUFT59SFhGMYQgX0PhoTR0LBff2BEhPrD9io1jWfF/VDbakRfs6Pq60rjv0Z7iaTav5gQlttJCX2+VPxFWCuoQ==
-  dependencies:
-    continuation-local-storage "^3.2.1"
-    log-driver "^1.2.7"
-    semver "^5.5.0"
-    shimmer "^1.2.0"
-    uuid "^3.2.1"
-
-"@opencensus/propagation-b3@0.0.8":
-  version "0.0.8"
-  resolved "https://registry.npmjs.org/@opencensus/propagation-b3/-/propagation-b3-0.0.8.tgz#0751e6fd75f09400d9d3c419001e9e15a0df68e9"
-  integrity sha512-PffXX2AL8Sh0VHQ52jJC4u3T0H6wDK6N/4bg7xh4ngMYOIi13aR1kzVvX1sVDBgfGwDOkMbl4c54Xm3tlPx/+A==
-  dependencies:
-    "@opencensus/core" "^0.0.8"
-    uuid "^3.2.1"
-
-"@pm2/agent@~1.0.8":
-  version "1.0.8"
-  resolved "https://registry.npmjs.org/@pm2/agent/-/agent-1.0.8.tgz#cd15d84dbfc95427e6fccce72bc165b79f1d8579"
-  integrity sha512-r8mud8BhBz+a2yjlgtk+PBXUR5EQ9UKSJCs232OxfCmuBr1MZw0Mo+Kfog6WJ8OmVk99r1so9yTUK4IyrgGcMQ==
-  dependencies:
-    async "~3.2.0"
-    chalk "~3.0.0"
-    dayjs "~1.8.24"
-    debug "~4.3.1"
-    eventemitter2 "~5.0.1"
-    fclone "~1.0.11"
-    nssocket "0.6.0"
-    pm2-axon "~4.0.1"
-    pm2-axon-rpc "~0.7.0"
-    proxy-agent "~4.0.1"
-    semver "~7.2.0"
-    ws "~7.2.0"
-
-"@pm2/io@~5.0.0":
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/@pm2/io/-/io-5.0.0.tgz#623cbcaf6fe39375f20ac2e75497477a1b1ec5c5"
-  integrity sha512-3rToDVJaRoob5Lq8+7Q2TZFruoEkdORxwzFpZaqF4bmH6Bkd7kAbdPrI/z8X6k1Meq5rTtScM7MmDgppH6aLlw==
-  dependencies:
-    "@opencensus/core" "0.0.9"
-    "@opencensus/propagation-b3" "0.0.8"
-    async "~2.6.1"
-    debug "~4.3.1"
-    eventemitter2 "^6.3.1"
-    require-in-the-middle "^5.0.0"
-    semver "6.3.0"
-    shimmer "^1.2.0"
-    signal-exit "^3.0.3"
-    tslib "1.9.3"
-
-"@pm2/js-api@~0.6.7":
-  version "0.6.7"
-  resolved "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.6.7.tgz#ed28c3b7b6d26f03f826318754fdc5468afa589f"
-  integrity sha512-jiJUhbdsK+5C4zhPZNnyA3wRI01dEc6a2GhcQ9qI38DyIk+S+C8iC3fGjcjUbt/viLYKPjlAaE+hcT2/JMQPXw==
-  dependencies:
-    async "^2.6.3"
-    axios "^0.21.0"
-    debug "~4.3.1"
-    eventemitter2 "^6.3.1"
-    ws "^7.0.0"
-
-"@pm2/pm2-version-check@latest":
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.4.tgz#cf97fbb14b0eca95430ca05eedccbd2683806e43"
-  integrity sha512-SXsM27SGH3yTWKc2fKR4SYNxsmnvuBQ9dd6QHtEWmiZ/VqaOYPAIlS8+vMcn27YLtAEBGvNRSh3TPNvtjZgfqA==
-  dependencies:
-    debug "^4.3.1"
-
-"@sindresorhus/is@^0.14.0":
-  version "0.14.0"
-  resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
-  integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
-
-"@szmarczak/http-timer@^1.1.2":
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
-  integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
-  dependencies:
-    defer-to-connect "^1.0.1"
-
-"@tootallnate/once@1":
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
-  integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
-
-"@tsconfig/node10@^1.0.7":
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.7.tgz#1eb1de36c73478a2479cc661ef5af1c16d86d606"
-  integrity sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ==
-
-"@tsconfig/node12@^1.0.7":
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.7.tgz#677bd9117e8164dc319987dd6ff5fc1ba6fbf18b"
-  integrity sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==
-
-"@tsconfig/node14@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.0.tgz#5bd046e508b1ee90bc091766758838741fdefd6e"
-  integrity sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ==
-
-"@tsconfig/node16@^1.0.1":
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1"
-  integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==
-
-"@types/accepts@*":
-  version "1.3.5"
-  resolved "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575"
-  integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==
-  dependencies:
-    "@types/node" "*"
-
-"@types/body-parser@*":
-  version "1.19.0"
-  resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f"
-  integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==
-  dependencies:
-    "@types/connect" "*"
-    "@types/node" "*"
-
-"@types/connect@*":
-  version "3.4.34"
-  resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901"
-  integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==
-  dependencies:
-    "@types/node" "*"
-
-"@types/content-disposition@*":
-  version "0.5.3"
-  resolved "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz#0aa116701955c2faa0717fc69cd1596095e49d96"
-  integrity sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==
-
-"@types/cookies@*":
-  version "0.7.6"
-  resolved "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.6.tgz#71212c5391a976d3bae57d4b09fac20fc6bda504"
-  integrity sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w==
-  dependencies:
-    "@types/connect" "*"
-    "@types/express" "*"
-    "@types/keygrip" "*"
-    "@types/node" "*"
-
-"@types/express-serve-static-core@^4.17.18":
-  version "4.17.21"
-  resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.21.tgz#a427278e106bca77b83ad85221eae709a3414d42"
-  integrity sha512-gwCiEZqW6f7EoR8TTEfalyEhb1zA5jQJnRngr97+3pzMaO1RKoI1w2bw07TK72renMUVWcWS5mLI6rk1NqN0nA==
-  dependencies:
-    "@types/node" "*"
-    "@types/qs" "*"
-    "@types/range-parser" "*"
-
-"@types/express@*":
-  version "4.17.12"
-  resolved "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz#4bc1bf3cd0cfe6d3f6f2853648b40db7d54de350"
-  integrity sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q==
-  dependencies:
-    "@types/body-parser" "*"
-    "@types/express-serve-static-core" "^4.17.18"
-    "@types/qs" "*"
-    "@types/serve-static" "*"
-
-"@types/formidable@^1.0.31":
-  version "1.2.2"
-  resolved "https://registry.npmjs.org/@types/formidable/-/formidable-1.2.2.tgz#e690d60732ee9d3f0a441bc572c17409785b283c"
-  integrity sha512-8RDAMnMHOh7QrY1xuQ7s6/Xre9pMvJ2zT2VgATiz5cIE71Q/6N3+P8sr3z/dNWNmvX5/aX9x8uJlG0MZiMZXoA==
-  dependencies:
-    "@types/node" "*"
-
-"@types/http-assert@*":
-  version "1.5.1"
-  resolved "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b"
-  integrity sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ==
-
-"@types/http-errors@*":
-  version "1.8.0"
-  resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz#682477dbbbd07cd032731cb3b0e7eaee3d026b69"
-  integrity sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA==
-
-"@types/json5@^0.0.29":
-  version "0.0.29"
-  resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
-  integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
-
-"@types/keygrip@*":
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72"
-  integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==
-
-"@types/koa-bodyparser@^4.2.2":
-  version "4.3.1"
-  resolved "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.1.tgz#ec2e06f6f50cfddba035d33a3cfe75a8f0cd7fa4"
-  integrity sha512-N1cw6UpYYW01rGanfC0guqkyqKKavXygGBeSgsJOe7EkkSlRH7BNRjzyqv1TzJ3Au69aNeagpzzqAzTo6I08ow==
-  dependencies:
-    "@types/koa" "*"
-
-"@types/koa-compose@*":
-  version "3.2.5"
-  resolved "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d"
-  integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==
-  dependencies:
-    "@types/koa" "*"
-
-"@types/koa-router@^7.0.40":
-  version "7.4.2"
-  resolved "https://registry.npmjs.org/@types/koa-router/-/koa-router-7.4.2.tgz#b12d7095e844f4d0081b32742691a4d2e5a8046a"
-  integrity sha512-A9fTLdSHeLQpmtAPUKvvmG+xHHH5Yclqhlmz1bd5BTfdvNo37H8hzNaNpO2mgUri8Wk8fRH9NLpFRHW0wqraAw==
-  dependencies:
-    "@types/koa" "*"
-
-"@types/koa@*", "@types/koa@^2.0.48":
-  version "2.13.3"
-  resolved "https://registry.npmjs.org/@types/koa/-/koa-2.13.3.tgz#5b44c0956d7f7bf41f74ccfb530fec60fbed45ca"
-  integrity sha512-TaujBV+Dhe/FvmSMZJtCFBms+bqQacgUebk/M2C2tq8iGmHE/DDf4DcW2Hc7NqusVZmy5xzrWOjtdPKNP+fTfw==
-  dependencies:
-    "@types/accepts" "*"
-    "@types/content-disposition" "*"
-    "@types/cookies" "*"
-    "@types/http-assert" "*"
-    "@types/http-errors" "*"
-    "@types/keygrip" "*"
-    "@types/koa-compose" "*"
-    "@types/node" "*"
-
-"@types/mime@^1":
-  version "1.3.2"
-  resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
-  integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
-
-"@types/node@*", "@types/node@^15.12.1":
-  version "15.12.1"
-  resolved "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz#9b60797dee1895383a725f828a869c86c6caa5c2"
-  integrity sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw==
-
-"@types/parse-json@^4.0.0":
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
-  integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
-
-"@types/qs@*":
-  version "6.9.6"
-  resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1"
-  integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==
-
-"@types/range-parser@*":
-  version "1.2.3"
-  resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
-  integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
-
-"@types/serve-static@*":
-  version "1.13.9"
-  resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e"
-  integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==
-  dependencies:
-    "@types/mime" "^1"
-    "@types/node" "*"
-
-abbrev@1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-
-accepts@^1.3.5:
-  version "1.3.7"
-  resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
-  integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
-  dependencies:
-    mime-types "~2.1.24"
-    negotiator "0.6.2"
-
-agent-base@6, agent-base@^6.0.0:
-  version "6.0.2"
-  resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
-  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
-  dependencies:
-    debug "4"
-
-amp-message@~0.1.1:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/amp-message/-/amp-message-0.1.2.tgz#a78f1c98995087ad36192a41298e4db49e3dfc45"
-  integrity sha1-p48cmJlQh602GSpBKY5NtJ49/EU=
-  dependencies:
-    amp "0.3.1"
-
-amp@0.3.1, amp@~0.3.1:
-  version "0.3.1"
-  resolved "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz#6adf8d58a74f361e82c1fa8d389c079e139fc47d"
-  integrity sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0=
-
-ansi-align@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"
-  integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==
-  dependencies:
-    string-width "^3.0.0"
-
-ansi-colors@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
-  integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
-
-ansi-regex@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
-  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
-
-ansi-regex@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
-  integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
-
-ansi-styles@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
-  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
-  dependencies:
-    color-convert "^1.9.0"
-
-ansi-styles@^4.1.0:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
-  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
-  dependencies:
-    color-convert "^2.0.1"
-
-any-promise@^1.0.0, any-promise@^1.1.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
-  integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
-
-anymatch@~3.1.1:
-  version "3.1.2"
-  resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
-  integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
-  dependencies:
-    normalize-path "^3.0.0"
-    picomatch "^2.0.4"
-
-arg@^4.1.0:
-  version "4.1.3"
-  resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
-  integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
-
-argparse@^1.0.7:
-  version "1.0.10"
-  resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
-  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
-  dependencies:
-    sprintf-js "~1.0.2"
-
-array-union@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
-  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-
-ast-types@^0.13.2:
-  version "0.13.4"
-  resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782"
-  integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==
-  dependencies:
-    tslib "^2.0.1"
-
-async-listener@^0.6.0:
-  version "0.6.10"
-  resolved "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc"
-  integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==
-  dependencies:
-    semver "^5.3.0"
-    shimmer "^1.1.0"
-
-async@^2.6.3, async@~2.6.1:
-  version "2.6.3"
-  resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
-  integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
-  dependencies:
-    lodash "^4.17.14"
-
-async@~3.2.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
-  integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==
-
-axios@^0.21.0:
-  version "0.21.1"
-  resolved "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
-  integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
-  dependencies:
-    follow-redirects "^1.10.0"
-
-balanced-match@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
-  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-binary-extensions@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
-  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-
-blessed@0.1.81:
-  version "0.1.81"
-  resolved "https://registry.npmjs.org/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129"
-  integrity sha1-+WLWh+wsNpVwrnGvhDJW5tDKESk=
-
-bodec@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/bodec/-/bodec-0.1.0.tgz#bc851555430f23c9f7650a75ef64c6a94c3418cc"
-  integrity sha1-vIUVVUMPI8n3ZQp172TGqUw0GMw=
-
-boxen@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64"
-  integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==
-  dependencies:
-    ansi-align "^3.0.0"
-    camelcase "^5.3.1"
-    chalk "^3.0.0"
-    cli-boxes "^2.2.0"
-    string-width "^4.1.0"
-    term-size "^2.1.0"
-    type-fest "^0.8.1"
-    widest-line "^3.1.0"
-
-brace-expansion@^1.1.7:
-  version "1.1.11"
-  resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
-  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
-  dependencies:
-    balanced-match "^1.0.0"
-    concat-map "0.0.1"
-
-braces@^3.0.1, braces@~3.0.2:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
-  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
-  dependencies:
-    fill-range "^7.0.1"
-
-buffer-from@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
-  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-
-bytes@3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
-  integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
-
-cac@^6.7.2:
-  version "6.7.3"
-  resolved "https://registry.npmjs.org/cac/-/cac-6.7.3.tgz#10410b8611677990cc2e3c8b576d471c1d71b768"
-  integrity sha512-ECVqVZh74qgSuZG9YOt2OJPI3wGcf+EwwuF/XIOYqZBD0KZYLtgPWqFPxmDPQ6joxI1nOlvVgRV6VT53Ooyocg==
-
-cache-content-type@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c"
-  integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==
-  dependencies:
-    mime-types "^2.1.18"
-    ylru "^1.2.0"
-
-cacheable-request@^6.0.0:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
-  integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
-  dependencies:
-    clone-response "^1.0.2"
-    get-stream "^5.1.0"
-    http-cache-semantics "^4.0.0"
-    keyv "^3.0.0"
-    lowercase-keys "^2.0.0"
-    normalize-url "^4.1.0"
-    responselike "^1.0.2"
-
-call-bind@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
-  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
-  dependencies:
-    function-bind "^1.1.1"
-    get-intrinsic "^1.0.2"
-
-callsites@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
-  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-
-camelcase@^5.3.1:
-  version "5.3.1"
-  resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
-  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-chalk@3.0.0, chalk@^3.0.0, chalk@~3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
-  integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
-  dependencies:
-    ansi-styles "^4.1.0"
-    supports-color "^7.1.0"
-
-chalk@^2.0.0:
-  version "2.4.2"
-  resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
-  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
-  dependencies:
-    ansi-styles "^3.2.1"
-    escape-string-regexp "^1.0.5"
-    supports-color "^5.3.0"
-
-chalk@^4.1.0:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
-  integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
-  dependencies:
-    ansi-styles "^4.1.0"
-    supports-color "^7.1.0"
-
-charm@~0.1.1:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296"
-  integrity sha1-BsIe7RobBq62dVPNxT4jJ0usIpY=
-
-chokidar@^3.2.2, chokidar@^3.5.1:
-  version "3.5.1"
-  resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
-  integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
-  dependencies:
-    anymatch "~3.1.1"
-    braces "~3.0.2"
-    glob-parent "~5.1.0"
-    is-binary-path "~2.1.0"
-    is-glob "~4.0.1"
-    normalize-path "~3.0.0"
-    readdirp "~3.5.0"
-  optionalDependencies:
-    fsevents "~2.3.1"
-
-ci-info@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
-  integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
-
-cli-boxes@^2.2.0:
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
-  integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
-
-cli-tableau@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/cli-tableau/-/cli-tableau-2.0.1.tgz#baa78d83e08a2d7ab79b7dad9406f0254977053f"
-  integrity sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ==
-  dependencies:
-    chalk "3.0.0"
-
-clone-response@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
-  integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
-  dependencies:
-    mimic-response "^1.0.0"
-
-co-body@^5.1.1:
-  version "5.2.0"
-  resolved "https://registry.npmjs.org/co-body/-/co-body-5.2.0.tgz#5a0a658c46029131e0e3a306f67647302f71c124"
-  integrity sha512-sX/LQ7LqUhgyaxzbe7IqwPeTr2yfpfUIQ/dgpKo6ZI4y4lpQA0YxAomWIY+7I7rHWcG02PG+OuPREzMW/5tszQ==
-  dependencies:
-    inflation "^2.0.0"
-    qs "^6.4.0"
-    raw-body "^2.2.0"
-    type-is "^1.6.14"
-
-co-body@^6.0.0:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz#d87a8efc3564f9bfe3aced8ef5cd04c7a8766547"
-  integrity sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==
-  dependencies:
-    inflation "^2.0.0"
-    qs "^6.5.2"
-    raw-body "^2.3.3"
-    type-is "^1.6.16"
-
-co@^4.4.0, co@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
-
-color-convert@^1.9.0:
-  version "1.9.3"
-  resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
-  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
-  dependencies:
-    color-name "1.1.3"
-
-color-convert@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
-  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
-  dependencies:
-    color-name "~1.1.4"
-
-color-name@1.1.3:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
-color-name@~1.1.4:
-  version "1.1.4"
-  resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
-  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
-commander@2.15.1:
-  version "2.15.1"
-  resolved "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
-  integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
-
-commander@^4.0.0:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
-  integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
-
-concat-map@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
-configstore@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"
-  integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==
-  dependencies:
-    dot-prop "^5.2.0"
-    graceful-fs "^4.1.2"
-    make-dir "^3.0.0"
-    unique-string "^2.0.0"
-    write-file-atomic "^3.0.0"
-    xdg-basedir "^4.0.0"
-
-content-disposition@~0.5.2:
-  version "0.5.3"
-  resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
-  integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
-  dependencies:
-    safe-buffer "5.1.2"
-
-content-type@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
-  integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
-
-continuation-local-storage@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb"
-  integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==
-  dependencies:
-    async-listener "^0.6.0"
-    emitter-listener "^1.1.1"
-
-cookies@~0.8.0:
-  version "0.8.0"
-  resolved "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90"
-  integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==
-  dependencies:
-    depd "~2.0.0"
-    keygrip "~1.1.0"
-
-copy-to@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5"
-  integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=
-
-core-util-is@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-cosmiconfig@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
-  integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
-  dependencies:
-    "@types/parse-json" "^4.0.0"
-    import-fresh "^3.2.1"
-    parse-json "^5.0.0"
-    path-type "^4.0.0"
-    yaml "^1.10.0"
-
-create-require@^1.1.0:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
-  integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
-
-cron@1.8.2:
-  version "1.8.2"
-  resolved "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce"
-  integrity sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==
-  dependencies:
-    moment-timezone "^0.5.x"
-
-cross-spawn@^7.0.3:
-  version "7.0.3"
-  resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
-  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
-  dependencies:
-    path-key "^3.1.0"
-    shebang-command "^2.0.0"
-    which "^2.0.1"
-
-crypto-random-string@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
-  integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
-
-culvert@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/culvert/-/culvert-0.1.2.tgz#9502f5f0154a2d5a22a023e79f71cc936fa6ef6f"
-  integrity sha1-lQL18BVKLVoioCPnn3HMk2+m728=
-
-data-uri-to-buffer@3:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
-  integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
-
-dayjs@~1.8.24, dayjs@~1.8.25:
-  version "1.8.36"
-  resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz#be36e248467afabf8f5a86bae0de0cdceecced50"
-  integrity sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==
-
-debug@*, debug@4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@~4.3.1:
-  version "4.3.1"
-  resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
-  integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
-  dependencies:
-    ms "2.1.2"
-
-debug@^2.2.0:
-  version "2.6.9"
-  resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
-  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
-  dependencies:
-    ms "2.0.0"
-
-debug@^3.1.0, debug@^3.2.6:
-  version "3.2.7"
-  resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
-  integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
-  dependencies:
-    ms "^2.1.1"
-
-debug@~3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
-  integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
-  dependencies:
-    ms "2.0.0"
-
-decompress-response@^3.3.0:
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
-  integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
-  dependencies:
-    mimic-response "^1.0.0"
-
-deep-equal@~1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
-  integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
-
-deep-extend@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
-  integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
-deep-is@~0.1.3:
-  version "0.1.3"
-  resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
-  integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
-
-defer-to-connect@^1.0.1:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
-  integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
-
-degenerator@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254"
-  integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==
-  dependencies:
-    ast-types "^0.13.2"
-    escodegen "^1.8.1"
-    esprima "^4.0.0"
-
-delegates@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-  integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
-
-depd@^2.0.0, depd@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
-  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
-
-depd@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
-  integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
-
-destroy@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
-  integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
-
-diff@^4.0.1:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
-  integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
-
-dir-glob@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
-  integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
-  dependencies:
-    path-type "^4.0.0"
-
-dot-prop@^5.2.0:
-  version "5.3.0"
-  resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
-  integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
-  dependencies:
-    is-obj "^2.0.0"
-
-duplexer3@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
-  integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
-
-ee-first@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-  integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-
-emitter-listener@^1.1.1:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8"
-  integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==
-  dependencies:
-    shimmer "^1.2.0"
-
-emoji-regex@^7.0.1:
-  version "7.0.3"
-  resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
-  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
-
-emoji-regex@^8.0.0:
-  version "8.0.0"
-  resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
-  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
-encodeurl@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
-  integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-
-end-of-stream@^1.1.0:
-  version "1.4.4"
-  resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
-  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
-  dependencies:
-    once "^1.4.0"
-
-enquirer@2.3.6:
-  version "2.3.6"
-  resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
-  integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
-  dependencies:
-    ansi-colors "^4.1.1"
-
-error-ex@^1.3.1:
-  version "1.3.2"
-  resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
-  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
-  dependencies:
-    is-arrayish "^0.2.1"
-
-esbuild@^0.11.12:
-  version "0.11.23"
-  resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz#c42534f632e165120671d64db67883634333b4b8"
-  integrity sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==
-
-escape-goat@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
-  integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==
-
-escape-html@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
-  integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
-
-escape-string-regexp@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-escape-string-regexp@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
-  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-
-escodegen@^1.8.1:
-  version "1.14.3"
-  resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
-  integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
-  dependencies:
-    esprima "^4.0.1"
-    estraverse "^4.2.0"
-    esutils "^2.0.2"
-    optionator "^0.8.1"
-  optionalDependencies:
-    source-map "~0.6.1"
-
-esprima@^4.0.0, esprima@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
-  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-
-estraverse@^4.2.0:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
-  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-
-esutils@^2.0.2:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
-  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
-
-eventemitter2@5.0.1, eventemitter2@~5.0.1:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452"
-  integrity sha1-YZegldX7a1folC9v1+qtY6CclFI=
-
-eventemitter2@^6.3.1:
-  version "6.4.4"
-  resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.4.tgz#aa96e8275c4dbeb017a5d0e03780c65612a1202b"
-  integrity sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw==
-
-eventemitter2@~0.4.14:
-  version "0.4.14"
-  resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab"
-  integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=
-
-execa@^5.0.0:
-  version "5.1.1"
-  resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
-  integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
-  dependencies:
-    cross-spawn "^7.0.3"
-    get-stream "^6.0.0"
-    human-signals "^2.1.0"
-    is-stream "^2.0.0"
-    merge-stream "^2.0.0"
-    npm-run-path "^4.0.1"
-    onetime "^5.1.2"
-    signal-exit "^3.0.3"
-    strip-final-newline "^2.0.0"
-
-fast-glob@^3.1.1:
-  version "3.2.5"
-  resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
-  integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
-  dependencies:
-    "@nodelib/fs.stat" "^2.0.2"
-    "@nodelib/fs.walk" "^1.2.3"
-    glob-parent "^5.1.0"
-    merge2 "^1.3.0"
-    micromatch "^4.0.2"
-    picomatch "^2.2.1"
-
-fast-levenshtein@~2.0.6:
-  version "2.0.6"
-  resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
-  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
-
-fastq@^1.6.0:
-  version "1.11.0"
-  resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"
-  integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==
-  dependencies:
-    reusify "^1.0.4"
-
-fclone@1.0.11, fclone@~1.0.11:
-  version "1.0.11"
-  resolved "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz#10e85da38bfea7fc599341c296ee1d77266ee640"
-  integrity sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA=
-
-file-uri-to-path@2:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba"
-  integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==
-
-fill-range@^7.0.1:
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
-  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
-  dependencies:
-    to-regex-range "^5.0.1"
-
-follow-redirects@^1.10.0:
-  version "1.14.1"
-  resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43"
-  integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==
-
-formidable@^1.1.1:
-  version "1.2.2"
-  resolved "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9"
-  integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==
-
-fresh@~0.5.2:
-  version "0.5.2"
-  resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
-  integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
-
-fs-extra@^10.0.0:
-  version "10.0.0"
-  resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"
-  integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==
-  dependencies:
-    graceful-fs "^4.2.0"
-    jsonfile "^6.0.1"
-    universalify "^2.0.0"
-
-fs-extra@^8.1.0:
-  version "8.1.0"
-  resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
-  integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
-  dependencies:
-    graceful-fs "^4.2.0"
-    jsonfile "^4.0.0"
-    universalify "^0.1.0"
-
-fs.realpath@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-fsevents@~2.3.1:
-  version "2.3.2"
-  resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
-  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-
-ftp@^0.3.10:
-  version "0.3.10"
-  resolved "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d"
-  integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=
-  dependencies:
-    readable-stream "1.1.x"
-    xregexp "2.0.0"
-
-function-bind@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
-  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-get-intrinsic@^1.0.2:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
-  integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
-  dependencies:
-    function-bind "^1.1.1"
-    has "^1.0.3"
-    has-symbols "^1.0.1"
-
-get-stream@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
-  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
-  dependencies:
-    pump "^3.0.0"
-
-get-stream@^5.1.0:
-  version "5.2.0"
-  resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
-  integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
-  dependencies:
-    pump "^3.0.0"
-
-get-stream@^6.0.0:
-  version "6.0.1"
-  resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
-  integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-
-get-uri@3:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c"
-  integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==
-  dependencies:
-    "@tootallnate/once" "1"
-    data-uri-to-buffer "3"
-    debug "4"
-    file-uri-to-path "2"
-    fs-extra "^8.1.0"
-    ftp "^0.3.10"
-
-git-node-fs@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/git-node-fs/-/git-node-fs-1.0.0.tgz#49b215e242ebe43aa4c7561bbba499521752080f"
-  integrity sha1-SbIV4kLr5Dqkx1Ybu6SZUhdSCA8=
-
-git-sha1@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/git-sha1/-/git-sha1-0.1.2.tgz#599ac192b71875825e13a445f3a6e05118c2f745"
-  integrity sha1-WZrBkrcYdYJeE6RF86bgURjC90U=
-
-glob-parent@^5.1.0, glob-parent@~5.1.0:
-  version "5.1.2"
-  resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
-  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
-  dependencies:
-    is-glob "^4.0.1"
-
-glob@7.1.6:
-  version "7.1.6"
-  resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
-  integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.4"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-glob@^7.0.5, glob@^7.1.3:
-  version "7.1.7"
-  resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
-  integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.4"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-global-dirs@^2.0.1:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d"
-  integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==
-  dependencies:
-    ini "1.3.7"
-
-globby@^11.0.3:
-  version "11.0.3"
-  resolved "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
-  integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
-  dependencies:
-    array-union "^2.1.0"
-    dir-glob "^3.0.1"
-    fast-glob "^3.1.1"
-    ignore "^5.1.4"
-    merge2 "^1.3.0"
-    slash "^3.0.0"
-
-got@^9.6.0:
-  version "9.6.0"
-  resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
-  integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
-  dependencies:
-    "@sindresorhus/is" "^0.14.0"
-    "@szmarczak/http-timer" "^1.1.2"
-    cacheable-request "^6.0.0"
-    decompress-response "^3.3.0"
-    duplexer3 "^0.1.4"
-    get-stream "^4.1.0"
-    lowercase-keys "^1.0.1"
-    mimic-response "^1.0.1"
-    p-cancelable "^1.0.0"
-    to-readable-stream "^1.0.0"
-    url-parse-lax "^3.0.0"
-
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
-  version "4.2.6"
-  resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
-  integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
-
-has-flag@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
-  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
-has-flag@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
-  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-
-has-symbols@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
-  integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
-
-has-yarn@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"
-  integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==
-
-has@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
-  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
-  dependencies:
-    function-bind "^1.1.1"
-
-http-assert@^1.3.0:
-  version "1.4.1"
-  resolved "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878"
-  integrity sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==
-  dependencies:
-    deep-equal "~1.0.1"
-    http-errors "~1.7.2"
-
-http-cache-semantics@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
-  integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
-
-http-errors@1.7.3, http-errors@~1.7.2:
-  version "1.7.3"
-  resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
-  integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
-  dependencies:
-    depd "~1.1.2"
-    inherits "2.0.4"
-    setprototypeof "1.1.1"
-    statuses ">= 1.5.0 < 2"
-    toidentifier "1.0.0"
-
-http-errors@^1.6.3, http-errors@^1.7.3:
-  version "1.8.0"
-  resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507"
-  integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==
-  dependencies:
-    depd "~1.1.2"
-    inherits "2.0.4"
-    setprototypeof "1.2.0"
-    statuses ">= 1.5.0 < 2"
-    toidentifier "1.0.0"
-
-http-errors@~1.6.2:
-  version "1.6.3"
-  resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
-  integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
-  dependencies:
-    depd "~1.1.2"
-    inherits "2.0.3"
-    setprototypeof "1.1.0"
-    statuses ">= 1.4.0 < 2"
-
-http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
-  integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
-  dependencies:
-    "@tootallnate/once" "1"
-    agent-base "6"
-    debug "4"
-
-https-proxy-agent@5, https-proxy-agent@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
-  integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
-  dependencies:
-    agent-base "6"
-    debug "4"
-
-human-signals@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
-  integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-
-iconv-lite@0.4.24, iconv-lite@^0.4.4:
-  version "0.4.24"
-  resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
-  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
-  dependencies:
-    safer-buffer ">= 2.1.2 < 3"
-
-ignore-by-default@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
-  integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk=
-
-ignore@^5.1.4:
-  version "5.1.8"
-  resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
-  integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
-
-import-cwd@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92"
-  integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==
-  dependencies:
-    import-from "^3.0.0"
-
-import-fresh@^3.2.1:
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
-  integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
-  dependencies:
-    parent-module "^1.0.0"
-    resolve-from "^4.0.0"
-
-import-from@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966"
-  integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==
-  dependencies:
-    resolve-from "^5.0.0"
-
-import-lazy@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
-  integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
-
-imurmurhash@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
-  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
-
-inflation@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f"
-  integrity sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=
-
-inflight@^1.0.4:
-  version "1.0.6"
-  resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
-  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
-  dependencies:
-    once "^1.3.0"
-    wrappy "1"
-
-inherits@2, inherits@2.0.4, inherits@~2.0.1:
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
-  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-inherits@2.0.3:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-  integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-
-ini@1.3.7:
-  version "1.3.7"
-  resolved "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
-  integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
-
-ini@^1.3.5, ini@~1.3.0:
-  version "1.3.8"
-  resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
-  integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-
-ip@^1.1.5:
-  version "1.1.5"
-  resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
-  integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
-
-is-arrayish@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
-
-is-binary-path@~2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
-  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
-  dependencies:
-    binary-extensions "^2.0.0"
-
-is-ci@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
-  integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
-  dependencies:
-    ci-info "^2.0.0"
-
-is-core-module@^2.2.0:
-  version "2.4.0"
-  resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
-  integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
-  dependencies:
-    has "^1.0.3"
-
-is-extglob@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
-  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
-
-is-fullwidth-code-point@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
-  integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-
-is-fullwidth-code-point@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
-  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-is-generator-function@^1.0.7:
-  version "1.0.9"
-  resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c"
-  integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==
-
-is-glob@^4.0.1, is-glob@~4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
-  integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
-  dependencies:
-    is-extglob "^2.1.1"
-
-is-installed-globally@^0.3.1:
-  version "0.3.2"
-  resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141"
-  integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==
-  dependencies:
-    global-dirs "^2.0.1"
-    is-path-inside "^3.0.1"
-
-is-npm@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d"
-  integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==
-
-is-number@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
-  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-obj@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
-  integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
-
-is-path-inside@^3.0.1:
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
-  integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
-
-is-stream@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
-  integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
-
-is-typedarray@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
-
-is-yarn-global@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
-  integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
-
-isarray@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
-  integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
-
-isexe@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-
-joycon@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/joycon/-/joycon-3.0.1.tgz#9074c9b08ccf37a6726ff74a18485f85efcaddaf"
-  integrity sha512-SJcJNBg32dGgxhPtM0wQqxqV0ax9k/9TaUskGDSJkSFSQOEWWvQ3zzWdGQRIUry2j1zA5+ReH13t0Mf3StuVZA==
-
-js-git@^0.7.8:
-  version "0.7.8"
-  resolved "https://registry.npmjs.org/js-git/-/js-git-0.7.8.tgz#52fa655ab61877d6f1079efc6534b554f31e5444"
-  integrity sha1-UvplWrYYd9bxB578ZTS1VPMeVEQ=
-  dependencies:
-    bodec "^0.1.0"
-    culvert "^0.1.2"
-    git-sha1 "^0.1.2"
-    pako "^0.2.5"
-
-js-tokens@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
-  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-json-buffer@3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
-  integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
-
-json-parse-even-better-errors@^2.3.0:
-  version "2.3.1"
-  resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
-  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
-
-json5@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
-  integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
-  dependencies:
-    minimist "^1.2.0"
-
-jsonfile@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
-  integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
-  optionalDependencies:
-    graceful-fs "^4.1.6"
-
-jsonfile@^6.0.1:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
-  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
-  dependencies:
-    universalify "^2.0.0"
-  optionalDependencies:
-    graceful-fs "^4.1.6"
-
-keygrip@~1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226"
-  integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==
-  dependencies:
-    tsscmp "1.0.6"
-
-keyv@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
-  integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
-  dependencies:
-    json-buffer "3.0.0"
-
-koa-body@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/koa-body/-/koa-body-4.2.0.tgz#37229208b820761aca5822d14c5fc55cee31b26f"
-  integrity sha512-wdGu7b9amk4Fnk/ytH8GuWwfs4fsB5iNkY8kZPpgQVb04QZSv85T0M8reb+cJmvLE8cjPYvBzRikD3s6qz8OoA==
-  dependencies:
-    "@types/formidable" "^1.0.31"
-    co-body "^5.1.1"
-    formidable "^1.1.1"
-
-koa-bodyparser@^4.2.1:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz#274c778555ff48fa221ee7f36a9fbdbace22759a"
-  integrity sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw==
-  dependencies:
-    co-body "^6.0.0"
-    copy-to "^2.0.1"
-
-koa-compose@^3.0.0:
-  version "3.2.1"
-  resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7"
-  integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=
-  dependencies:
-    any-promise "^1.1.0"
-
-koa-compose@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877"
-  integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==
-
-koa-convert@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0"
-  integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=
-  dependencies:
-    co "^4.6.0"
-    koa-compose "^3.0.0"
-
-koa-route@^3.2.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/koa-route/-/koa-route-3.2.0.tgz#76298b99a6bcfa9e38cab6fe5c79a8733e758bce"
-  integrity sha1-dimLmaa8+p44yrb+XHmocz51i84=
-  dependencies:
-    debug "*"
-    methods "~1.1.0"
-    path-to-regexp "^1.2.0"
-
-koa-router@^10.0.0:
-  version "10.0.0"
-  resolved "https://registry.npmjs.org/koa-router/-/koa-router-10.0.0.tgz#7bc76a031085731e61fc92c1683687b2f44de6a4"
-  integrity sha512-gAE5J1gBQTvfR8rMMtMUkE26+1MbO3DGpGmvfmM2pR9Z7w2VIb2Ecqeal98yVO7+4ltffby7gWOzpCmdNOQe0w==
-  dependencies:
-    debug "^4.1.1"
-    http-errors "^1.7.3"
-    koa-compose "^4.1.0"
-    methods "^1.1.2"
-    path-to-regexp "^6.1.0"
-
-koa-send@^5.0.0:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79"
-  integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==
-  dependencies:
-    debug "^4.1.1"
-    http-errors "^1.7.3"
-    resolve-path "^1.4.0"
-
-koa-static@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943"
-  integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==
-  dependencies:
-    debug "^3.1.0"
-    koa-send "^5.0.0"
-
-koa-websocket@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/koa-websocket/-/koa-websocket-6.0.0.tgz#7fb7698a7004c07aac663b15e84bf4bc99901352"
-  integrity sha512-pGTaB+aXILD/q+bQNh+Ejrg8zSxf6QRpiUQoh2TFQSmUZo2hrt6KGk4qlyxfHxFH40bVtyKeo4x1u0kKgJDOWA==
-  dependencies:
-    co "^4.4.0"
-    debug "^4.0.1"
-    koa-compose "^4.1.0"
-    ws "^7.0.1"
-
-koa2-cors@^2.0.6:
-  version "2.0.6"
-  resolved "https://registry.npmjs.org/koa2-cors/-/koa2-cors-2.0.6.tgz#9ad23df3a0b9bb84530b46f5944f3fb576086554"
-  integrity sha512-JRCcSM4lamM+8kvKGDKlesYk2ASrmSTczDtGUnIadqMgnHU4Ct5Gw7Bxt3w3m6d6dy3WN0PU4oMP43HbddDEWg==
-
-koa@^2.7.0:
-  version "2.13.1"
-  resolved "https://registry.npmjs.org/koa/-/koa-2.13.1.tgz#6275172875b27bcfe1d454356a5b6b9f5a9b1051"
-  integrity sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w==
-  dependencies:
-    accepts "^1.3.5"
-    cache-content-type "^1.0.0"
-    content-disposition "~0.5.2"
-    content-type "^1.0.4"
-    cookies "~0.8.0"
-    debug "~3.1.0"
-    delegates "^1.0.0"
-    depd "^2.0.0"
-    destroy "^1.0.4"
-    encodeurl "^1.0.2"
-    escape-html "^1.0.3"
-    fresh "~0.5.2"
-    http-assert "^1.3.0"
-    http-errors "^1.6.3"
-    is-generator-function "^1.0.7"
-    koa-compose "^4.1.0"
-    koa-convert "^1.2.0"
-    on-finished "^2.3.0"
-    only "~0.0.2"
-    parseurl "^1.3.2"
-    statuses "^1.5.0"
-    type-is "^1.6.16"
-    vary "^1.1.2"
-
-latest-version@^5.0.0:
-  version "5.1.0"
-  resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
-  integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
-  dependencies:
-    package-json "^6.3.0"
-
-lazy@~1.0.11:
-  version "1.0.11"
-  resolved "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz#daa068206282542c088288e975c297c1ae77b690"
-  integrity sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=
-
-levn@~0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
-  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
-  dependencies:
-    prelude-ls "~1.1.2"
-    type-check "~0.3.2"
-
-lines-and-columns@^1.1.6:
-  version "1.1.6"
-  resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
-  integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
-
-lodash@^4.17.14:
-  version "4.17.21"
-  resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
-  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-log-driver@^1.2.7:
-  version "1.2.7"
-  resolved "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8"
-  integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==
-
-lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
-  integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
-
-lowercase-keys@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
-  integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
-
-lru-cache@^5.1.1:
-  version "5.1.1"
-  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
-  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
-  dependencies:
-    yallist "^3.0.2"
-
-lru-cache@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
-  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
-  dependencies:
-    yallist "^4.0.0"
-
-make-dir@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
-  integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
-  dependencies:
-    semver "^6.0.0"
-
-make-error@^1.1.1:
-  version "1.3.6"
-  resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
-  integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
-
-media-typer@0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
-  integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
-
-merge-stream@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
-  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-
-merge2@^1.3.0:
-  version "1.4.1"
-  resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
-  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
-
-methods@^1.1.2, methods@~1.1.0:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
-  integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
-
-micromatch@^4.0.2:
-  version "4.0.4"
-  resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
-  integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
-  dependencies:
-    braces "^3.0.1"
-    picomatch "^2.2.3"
-
-mime-db@1.48.0:
-  version "1.48.0"
-  resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d"
-  integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==
-
-mime-types@^2.1.18, mime-types@~2.1.24:
-  version "2.1.31"
-  resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b"
-  integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==
-  dependencies:
-    mime-db "1.48.0"
-
-mimic-fn@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
-  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
-mimic-response@^1.0.0, mimic-response@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
-  integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
-
-minimatch@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
-  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
-  dependencies:
-    brace-expansion "^1.1.7"
-
-minimist@^1.2.0:
-  version "1.2.5"
-  resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
-  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
-
-mkdirp@1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
-  integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
-module-details-from-path@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b"
-  integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=
-
-moment-timezone@^0.5.x:
-  version "0.5.33"
-  resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c"
-  integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==
-  dependencies:
-    moment ">= 2.9.0"
-
-"moment@>= 2.9.0":
-  version "2.29.1"
-  resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
-  integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
-
-ms@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-ms@2.1.2:
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
-  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-ms@^2.1.1:
-  version "2.1.3"
-  resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
-  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
-mute-stream@~0.0.4:
-  version "0.0.8"
-  resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
-  integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
-
-mz@^2.7.0:
-  version "2.7.0"
-  resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
-  integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
-  dependencies:
-    any-promise "^1.0.0"
-    object-assign "^4.0.1"
-    thenify-all "^1.0.0"
-
-needle@2.4.0:
-  version "2.4.0"
-  resolved "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
-  integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
-  dependencies:
-    debug "^3.2.6"
-    iconv-lite "^0.4.4"
-    sax "^1.2.4"
-
-negotiator@0.6.2:
-  version "0.6.2"
-  resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
-  integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
-
-netmask@^2.0.1:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7"
-  integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==
-
-node-modules-regexp@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
-  integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
-
-nodemon@^2.0.7:
-  version "2.0.7"
-  resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32"
-  integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==
-  dependencies:
-    chokidar "^3.2.2"
-    debug "^3.2.6"
-    ignore-by-default "^1.0.1"
-    minimatch "^3.0.4"
-    pstree.remy "^1.1.7"
-    semver "^5.7.1"
-    supports-color "^5.5.0"
-    touch "^3.1.0"
-    undefsafe "^2.0.3"
-    update-notifier "^4.1.0"
-
-nopt@~1.0.10:
-  version "1.0.10"
-  resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
-  integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=
-  dependencies:
-    abbrev "1"
-
-normalize-path@^3.0.0, normalize-path@~3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
-  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-normalize-url@^4.1.0:
-  version "4.5.1"
-  resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
-  integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
-
-npm-run-path@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
-  integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
-  dependencies:
-    path-key "^3.0.0"
-
-nssocket@0.6.0:
-  version "0.6.0"
-  resolved "https://registry.npmjs.org/nssocket/-/nssocket-0.6.0.tgz#59f96f6ff321566f33c70f7dbeeecdfdc07154fa"
-  integrity sha1-Wflvb/MhVm8zxw99vu7N/cBxVPo=
-  dependencies:
-    eventemitter2 "~0.4.14"
-    lazy "~1.0.11"
-
-object-assign@^4.0.1:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-object-inspect@^1.9.0:
-  version "1.10.3"
-  resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"
-  integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==
-
-on-finished@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
-  integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
-  dependencies:
-    ee-first "1.1.1"
-
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
-  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
-  dependencies:
-    wrappy "1"
-
-onetime@^5.1.2:
-  version "5.1.2"
-  resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
-  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
-  dependencies:
-    mimic-fn "^2.1.0"
-
-only@~0.0.2:
-  version "0.0.2"
-  resolved "https://registry.npmjs.org/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4"
-  integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=
-
-optionator@^0.8.1:
-  version "0.8.3"
-  resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
-  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
-  dependencies:
-    deep-is "~0.1.3"
-    fast-levenshtein "~2.0.6"
-    levn "~0.3.0"
-    prelude-ls "~1.1.2"
-    type-check "~0.3.2"
-    word-wrap "~1.2.3"
-
-p-cancelable@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
-  integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
-
-pac-proxy-agent@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb"
-  integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==
-  dependencies:
-    "@tootallnate/once" "1"
-    agent-base "6"
-    debug "4"
-    get-uri "3"
-    http-proxy-agent "^4.0.1"
-    https-proxy-agent "5"
-    pac-resolver "^4.1.0"
-    raw-body "^2.2.0"
-    socks-proxy-agent "5"
-
-pac-resolver@^4.1.0:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz#b82bcb9992d48166920bc83c7542abb454bd9bdd"
-  integrity sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==
-  dependencies:
-    degenerator "^2.2.0"
-    ip "^1.1.5"
-    netmask "^2.0.1"
-
-package-json@^6.3.0:
-  version "6.5.0"
-  resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
-  integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
-  dependencies:
-    got "^9.6.0"
-    registry-auth-token "^4.0.0"
-    registry-url "^5.0.0"
-    semver "^6.2.0"
-
-pako@^0.2.5:
-  version "0.2.9"
-  resolved "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
-  integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
-
-parent-module@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
-  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
-  dependencies:
-    callsites "^3.0.0"
-
-parse-json@^5.0.0:
-  version "5.2.0"
-  resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
-  integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    error-ex "^1.3.1"
-    json-parse-even-better-errors "^2.3.0"
-    lines-and-columns "^1.1.6"
-
-parseurl@^1.3.2:
-  version "1.3.3"
-  resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
-  integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
-
-path-is-absolute@1.0.1, path-is-absolute@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-path-key@^3.0.0, path-key@^3.1.0:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
-  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-
-path-parse@^1.0.6:
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
-  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-
-path-to-regexp@^1.2.0:
-  version "1.8.0"
-  resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
-  integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
-  dependencies:
-    isarray "0.0.1"
-
-path-to-regexp@^6.1.0:
-  version "6.2.0"
-  resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38"
-  integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==
-
-path-type@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
-  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
-
-picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
-  integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
-
-pidusage@2.0.21:
-  version "2.0.21"
-  resolved "https://registry.npmjs.org/pidusage/-/pidusage-2.0.21.tgz#7068967b3d952baea73e57668c98b9eaa876894e"
-  integrity sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA==
-  dependencies:
-    safe-buffer "^5.2.1"
-
-pirates@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
-  integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
-  dependencies:
-    node-modules-regexp "^1.0.0"
-
-pm2-axon-rpc@~0.7.0:
-  version "0.7.1"
-  resolved "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz#2daec5383a63135b3f18babb70266dacdcbc429a"
-  integrity sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==
-  dependencies:
-    debug "^4.3.1"
-
-pm2-axon@~4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.1.tgz#a7b4bb586e9aeb35b1042b488cde15b60cabafd2"
-  integrity sha512-kES/PeSLS8orT8dR5jMlNl+Yu4Ty3nbvZRmaAtROuVm9nYYGiaoXqqKQqQYzWQzMYWUKHMQTvBlirjE5GIIxqg==
-  dependencies:
-    amp "~0.3.1"
-    amp-message "~0.1.1"
-    debug "^4.3.1"
-    escape-string-regexp "^4.0.0"
-
-pm2-deploy@~1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz#98d8385553a3a4dca11c7b3116deb519bc5961a7"
-  integrity sha512-YJx6RXKrVrWaphEYf++EdOOx9EH18vM8RSZN/P1Y+NokTKqYAca/ejXwVLyiEpNju4HPZEk3Y2uZouwMqUlcgg==
-  dependencies:
-    run-series "^1.1.8"
-    tv4 "^1.3.0"
-
-pm2-multimeter@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz#1a1e55153d41a05534cea23cfe860abaa0eb4ace"
-  integrity sha1-Gh5VFT1BoFU0zqI8/oYKuqDrSs4=
-  dependencies:
-    charm "~0.1.1"
-
-pm2@^4.5.6:
-  version "4.5.6"
-  resolved "https://registry.npmjs.org/pm2/-/pm2-4.5.6.tgz#2f477a158957860e440f1e71e88dc82627fcff99"
-  integrity sha512-4J5q704Xl6VmpmQhXFGMJL4kXyyQw3AZM1FE9vRxhS3LiDI/+WVBtOM6pqJ4g/RKW+AUjEkc23i/DCC4BVenDA==
-  dependencies:
-    "@pm2/agent" "~1.0.8"
-    "@pm2/io" "~5.0.0"
-    "@pm2/js-api" "~0.6.7"
-    "@pm2/pm2-version-check" latest
-    async "~3.2.0"
-    blessed "0.1.81"
-    chalk "3.0.0"
-    chokidar "^3.5.1"
-    cli-tableau "^2.0.0"
-    commander "2.15.1"
-    cron "1.8.2"
-    dayjs "~1.8.25"
-    debug "^4.3.1"
-    enquirer "2.3.6"
-    eventemitter2 "5.0.1"
-    fclone "1.0.11"
-    mkdirp "1.0.4"
-    needle "2.4.0"
-    pidusage "2.0.21"
-    pm2-axon "~4.0.1"
-    pm2-axon-rpc "~0.7.0"
-    pm2-deploy "~1.0.2"
-    pm2-multimeter "^0.1.2"
-    promptly "^2"
-    ps-list "6.3.0"
-    semver "^7.2"
-    source-map-support "0.5.19"
-    sprintf-js "1.1.2"
-    vizion "2.2.1"
-    yamljs "0.3.0"
-
-postcss-load-config@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz#d214bf9cfec1608ffaf0f4161b3ba20664ab64b9"
-  integrity sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==
-  dependencies:
-    cosmiconfig "^7.0.0"
-    import-cwd "^3.0.0"
-
-prelude-ls@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
-
-prepend-http@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
-  integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
-
-promptly@^2:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz#2a13fa063688a2a5983b161fff0108a07d26fc74"
-  integrity sha1-KhP6BjaIoqWYOxYf/wEIoH0m/HQ=
-  dependencies:
-    read "^1.0.4"
-
-proxy-agent@~4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz#326c3250776c7044cd19655ccbfadf2e065a045c"
-  integrity sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==
-  dependencies:
-    agent-base "^6.0.0"
-    debug "4"
-    http-proxy-agent "^4.0.0"
-    https-proxy-agent "^5.0.0"
-    lru-cache "^5.1.1"
-    pac-proxy-agent "^4.1.0"
-    proxy-from-env "^1.0.0"
-    socks-proxy-agent "^5.0.0"
-
-proxy-from-env@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
-  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
-
-ps-list@6.3.0:
-  version "6.3.0"
-  resolved "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz#a2b775c2db7d547a28fbaa3a05e4c281771259be"
-  integrity sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA==
-
-pstree.remy@^1.1.7:
-  version "1.1.8"
-  resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
-  integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
-
-pump@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
-  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
-  dependencies:
-    end-of-stream "^1.1.0"
-    once "^1.3.1"
-
-pupa@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62"
-  integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==
-  dependencies:
-    escape-goat "^2.0.0"
-
-qs@^6.4.0, qs@^6.5.2:
-  version "6.10.1"
-  resolved "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a"
-  integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==
-  dependencies:
-    side-channel "^1.0.4"
-
-queue-microtask@^1.2.2:
-  version "1.2.3"
-  resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
-  integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
-
-raw-body@^2.2.0, raw-body@^2.3.3:
-  version "2.4.1"
-  resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
-  integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==
-  dependencies:
-    bytes "3.1.0"
-    http-errors "1.7.3"
-    iconv-lite "0.4.24"
-    unpipe "1.0.0"
-
-rc@^1.2.8:
-  version "1.2.8"
-  resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
-  integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
-  dependencies:
-    deep-extend "^0.6.0"
-    ini "~1.3.0"
-    minimist "^1.2.0"
-    strip-json-comments "~2.0.1"
-
-read@^1.0.4:
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
-  integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=
-  dependencies:
-    mute-stream "~0.0.4"
-
-readable-stream@1.1.x:
-  version "1.1.14"
-  resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
-  integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
-  dependencies:
-    core-util-is "~1.0.0"
-    inherits "~2.0.1"
-    isarray "0.0.1"
-    string_decoder "~0.10.x"
-
-readdirp@~3.5.0:
-  version "3.5.0"
-  resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
-  integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
-  dependencies:
-    picomatch "^2.2.1"
-
-registry-auth-token@^4.0.0:
-  version "4.2.1"
-  resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250"
-  integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==
-  dependencies:
-    rc "^1.2.8"
-
-registry-url@^5.0.0:
-  version "5.1.0"
-  resolved "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
-  integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
-  dependencies:
-    rc "^1.2.8"
-
-require-in-the-middle@^5.0.0:
-  version "5.1.0"
-  resolved "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.1.0.tgz#b768f800377b47526d026bbf5a7f727f16eb412f"
-  integrity sha512-M2rLKVupQfJ5lf9OvqFGIT+9iVLnTmjgbOmpil12hiSQNn5zJTKGPoIisETNjfK+09vP3rpm1zJajmErpr2sEQ==
-  dependencies:
-    debug "^4.1.1"
-    module-details-from-path "^1.0.3"
-    resolve "^1.12.0"
-
-resolve-from@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
-  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
-
-resolve-from@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
-  integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
-
-resolve-path@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7"
-  integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=
-  dependencies:
-    http-errors "~1.6.2"
-    path-is-absolute "1.0.1"
-
-resolve@^1.12.0:
-  version "1.20.0"
-  resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
-  integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
-  dependencies:
-    is-core-module "^2.2.0"
-    path-parse "^1.0.6"
-
-responselike@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
-  integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
-  dependencies:
-    lowercase-keys "^1.0.0"
-
-reusify@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
-  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
-
-rimraf@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
-  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
-  dependencies:
-    glob "^7.1.3"
-
-rollup@^2.45.2:
-  version "2.50.6"
-  resolved "https://registry.npmjs.org/rollup/-/rollup-2.50.6.tgz#24e2211caf9031081656e98a5e5e94d3b5e786e2"
-  integrity sha512-6c5CJPLVgo0iNaZWWliNu1Kl43tjP9LZcp6D/tkf2eLH2a9/WeHxg9vfTFl8QV/2SOyaJX37CEm9XuGM0rviUg==
-  optionalDependencies:
-    fsevents "~2.3.1"
-
-run-parallel@^1.1.9:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
-  integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
-  dependencies:
-    queue-microtask "^1.2.2"
-
-run-series@^1.1.8:
-  version "1.1.9"
-  resolved "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz#15ba9cb90e6a6c054e67c98e1dc063df0ecc113a"
-  integrity sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==
-
-safe-buffer@5.1.2:
-  version "5.1.2"
-  resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
-  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@^5.2.1:
-  version "5.2.1"
-  resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
-  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-"safer-buffer@>= 2.1.2 < 3":
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
-  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-sax@^1.2.4:
-  version "1.2.4"
-  resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
-  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
-semver-diff@^3.1.1:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b"
-  integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==
-  dependencies:
-    semver "^6.3.0"
-
-semver@6.3.0, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
-  version "6.3.0"
-  resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
-  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-
-semver@^5.3.0, semver@^5.5.0, semver@^5.7.1:
-  version "5.7.1"
-  resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
-  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
-semver@^7.2:
-  version "7.3.5"
-  resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
-  integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
-  dependencies:
-    lru-cache "^6.0.0"
-
-semver@~7.2.0:
-  version "7.2.3"
-  resolved "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz#3641217233c6382173c76bf2c7ecd1e1c16b0d8a"
-  integrity sha512-utbW9Z7ZxVvwiIWkdOMLOR9G/NFXh2aRucghkVrEMJWuC++r3lCkBC3LwqBinyHzGMAJxY5tn6VakZGHObq5ig==
-
-setprototypeof@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
-  integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
-
-setprototypeof@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
-  integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
-
-setprototypeof@1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
-  integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
-
-shebang-command@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
-  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
-  dependencies:
-    shebang-regex "^3.0.0"
-
-shebang-regex@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
-  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-
-shimmer@^1.1.0, shimmer@^1.2.0:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337"
-  integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==
-
-side-channel@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
-  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
-  dependencies:
-    call-bind "^1.0.0"
-    get-intrinsic "^1.0.2"
-    object-inspect "^1.9.0"
-
-signal-exit@^3.0.2, signal-exit@^3.0.3:
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
-  integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
-
-slash@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
-  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-
-smart-buffer@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba"
-  integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==
-
-socks-proxy-agent@5, socks-proxy-agent@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60"
-  integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==
-  dependencies:
-    agent-base "6"
-    debug "4"
-    socks "^2.3.3"
-
-socks@^2.3.3:
-  version "2.6.1"
-  resolved "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e"
-  integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==
-  dependencies:
-    ip "^1.1.5"
-    smart-buffer "^4.1.0"
-
-source-map-support@0.5.19, source-map-support@^0.5.17:
-  version "0.5.19"
-  resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
-  integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
-  dependencies:
-    buffer-from "^1.0.0"
-    source-map "^0.6.0"
-
-source-map@^0.6.0, source-map@~0.6.1:
-  version "0.6.1"
-  resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-sprintf-js@1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
-  integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
-
-sprintf-js@~1.0.2:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
-
-"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0:
-  version "1.5.0"
-  resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
-  integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
-
-string-width@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
-  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
-  dependencies:
-    emoji-regex "^7.0.1"
-    is-fullwidth-code-point "^2.0.0"
-    strip-ansi "^5.1.0"
-
-string-width@^4.0.0, string-width@^4.1.0:
-  version "4.2.2"
-  resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
-  integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
-  dependencies:
-    emoji-regex "^8.0.0"
-    is-fullwidth-code-point "^3.0.0"
-    strip-ansi "^6.0.0"
-
-string_decoder@~0.10.x:
-  version "0.10.31"
-  resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-  integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
-
-strip-ansi@^5.1.0:
-  version "5.2.0"
-  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
-  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
-  dependencies:
-    ansi-regex "^4.1.0"
-
-strip-ansi@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
-  integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
-  dependencies:
-    ansi-regex "^5.0.0"
-
-strip-bom@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
-
-strip-final-newline@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
-  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-
-strip-json-comments@~2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-  integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-
-sucrase@^3.18.1:
-  version "3.18.1"
-  resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.18.1.tgz#7c699d5148734b1105542ca4ea2aa69bcab7f728"
-  integrity sha512-TRyO38wwOPhLLlM8QLOG3TgMj0FKk+arlTrS9pRAanF8cAcHvgRPKIYWGO25mPSp/Rj87zMMTjFfkqIZGI6ZdA==
-  dependencies:
-    commander "^4.0.0"
-    glob "7.1.6"
-    lines-and-columns "^1.1.6"
-    mz "^2.7.0"
-    pirates "^4.0.1"
-    ts-interface-checker "^0.1.9"
-
-supports-color@^5.3.0, supports-color@^5.5.0:
-  version "5.5.0"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
-  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
-  dependencies:
-    has-flag "^3.0.0"
-
-supports-color@^7.1.0:
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
-  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
-  dependencies:
-    has-flag "^4.0.0"
-
-term-size@^2.1.0:
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54"
-  integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==
-
-thenify-all@^1.0.0:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
-  integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
-  dependencies:
-    thenify ">= 3.1.0 < 4"
-
-"thenify@>= 3.1.0 < 4":
-  version "3.3.1"
-  resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
-  integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
-  dependencies:
-    any-promise "^1.0.0"
-
-to-readable-stream@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
-  integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
-
-to-regex-range@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
-  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
-  dependencies:
-    is-number "^7.0.0"
-
-toidentifier@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
-  integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
-
-touch@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
-  integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
-  dependencies:
-    nopt "~1.0.10"
-
-tree-kill@^1.2.2:
-  version "1.2.2"
-  resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
-  integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
-
-ts-interface-checker@^0.1.9:
-  version "0.1.13"
-  resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
-  integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
-
-ts-node@^10.0.0:
-  version "10.0.0"
-  resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.0.0.tgz#05f10b9a716b0b624129ad44f0ea05dac84ba3be"
-  integrity sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg==
-  dependencies:
-    "@tsconfig/node10" "^1.0.7"
-    "@tsconfig/node12" "^1.0.7"
-    "@tsconfig/node14" "^1.0.0"
-    "@tsconfig/node16" "^1.0.1"
-    arg "^4.1.0"
-    create-require "^1.1.0"
-    diff "^4.0.1"
-    make-error "^1.1.1"
-    source-map-support "^0.5.17"
-    yn "3.1.1"
-
-tsconfig-paths@^3.8.0:
-  version "3.9.0"
-  resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
-  integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
-  dependencies:
-    "@types/json5" "^0.0.29"
-    json5 "^1.0.1"
-    minimist "^1.2.0"
-    strip-bom "^3.0.0"
-
-tslib@1.9.3:
-  version "1.9.3"
-  resolved "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
-  integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
-
-tslib@^2.0.1:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c"
-  integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==
-
-tsscmp@1.0.6:
-  version "1.0.6"
-  resolved "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
-  integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
-
-tsup@^4.11.2:
-  version "4.11.2"
-  resolved "https://registry.npmjs.org/tsup/-/tsup-4.11.2.tgz#135c69ff1b0ef9357d5e0076d1d6c29118904b43"
-  integrity sha512-cp+gy0TGzFm/3PkPNeiZ2Fvi4MKI8jj6Xq6gVpSQ+Og+6GPqfws2K4zYo11OJoccuk2LnlJIJt8xwnoYCVGpSA==
-  dependencies:
-    cac "^6.7.2"
-    chalk "^4.1.0"
-    chokidar "^3.5.1"
-    debug "^4.3.1"
-    esbuild "^0.11.12"
-    execa "^5.0.0"
-    globby "^11.0.3"
-    joycon "^3.0.1"
-    postcss-load-config "^3.0.1"
-    resolve-from "^5.0.0"
-    rollup "^2.45.2"
-    sucrase "^3.18.1"
-    tree-kill "^1.2.2"
-
-tv4@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963"
-  integrity sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM=
-
-type-check@~0.3.2:
-  version "0.3.2"
-  resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
-  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
-  dependencies:
-    prelude-ls "~1.1.2"
-
-type-fest@^0.8.1:
-  version "0.8.1"
-  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
-  integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
-
-type-is@^1.6.14, type-is@^1.6.16:
-  version "1.6.18"
-  resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
-  integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
-  dependencies:
-    media-typer "0.3.0"
-    mime-types "~2.1.24"
-
-typedarray-to-buffer@^3.1.5:
-  version "3.1.5"
-  resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
-  integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
-  dependencies:
-    is-typedarray "^1.0.0"
-
-typescript@^4.2.5:
-  version "4.3.2"
-  resolved "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805"
-  integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==
-
-undefsafe@^2.0.3:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae"
-  integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==
-  dependencies:
-    debug "^2.2.0"
-
-unique-string@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
-  integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
-  dependencies:
-    crypto-random-string "^2.0.0"
-
-universalify@^0.1.0:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
-  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
-
-universalify@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
-  integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
-
-unpipe@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
-  integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
-
-update-notifier@^4.1.0:
-  version "4.1.3"
-  resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3"
-  integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==
-  dependencies:
-    boxen "^4.2.0"
-    chalk "^3.0.0"
-    configstore "^5.0.1"
-    has-yarn "^2.1.0"
-    import-lazy "^2.1.0"
-    is-ci "^2.0.0"
-    is-installed-globally "^0.3.1"
-    is-npm "^4.0.0"
-    is-yarn-global "^0.3.0"
-    latest-version "^5.0.0"
-    pupa "^2.0.1"
-    semver-diff "^3.1.1"
-    xdg-basedir "^4.0.0"
-
-url-parse-lax@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
-  integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
-  dependencies:
-    prepend-http "^2.0.0"
-
-uuid@^3.2.1:
-  version "3.4.0"
-  resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
-  integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-
-vary@^1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
-  integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
-
-vizion@2.2.1:
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/vizion/-/vizion-2.2.1.tgz#04201ea45ffd145d5b5210e385a8f35170387fb2"
-  integrity sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww==
-  dependencies:
-    async "^2.6.3"
-    git-node-fs "^1.0.0"
-    ini "^1.3.5"
-    js-git "^0.7.8"
-
-which@^2.0.1:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
-  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
-  dependencies:
-    isexe "^2.0.0"
-
-widest-line@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
-  integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
-  dependencies:
-    string-width "^4.0.0"
-
-word-wrap@~1.2.3:
-  version "1.2.3"
-  resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
-  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
-
-wrappy@1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-
-write-file-atomic@^3.0.0:
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
-  integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
-  dependencies:
-    imurmurhash "^0.1.4"
-    is-typedarray "^1.0.0"
-    signal-exit "^3.0.2"
-    typedarray-to-buffer "^3.1.5"
-
-ws@^7.0.0, ws@^7.0.1:
-  version "7.4.6"
-  resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
-  integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
-
-ws@~7.2.0:
-  version "7.2.5"
-  resolved "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz#abb1370d4626a5a9cd79d8de404aa18b3465d10d"
-  integrity sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==
-
-xdg-basedir@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
-  integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
-
-xregexp@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
-  integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=
-
-yallist@^3.0.2:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
-  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-
-yallist@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
-  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-
-yaml@^1.10.0:
-  version "1.10.2"
-  resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
-  integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
-
-yamljs@0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b"
-  integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==
-  dependencies:
-    argparse "^1.0.7"
-    glob "^7.0.5"
-
-ylru@^1.2.0:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f"
-  integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==
-
-yn@3.1.1:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
-  integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
diff --git a/tests/test.spec.ts b/tests/test.spec.ts
deleted file mode 100644
index a8b4454..0000000
--- a/tests/test.spec.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-// import { mount } from '@vue/test-utils';
-// import { Button } from '/@/components/Button';
-
-test('if jest is normal.', async () => {
-  expect('jest').toEqual('jest');
-});
-
-// TODO Vue component testing is not supported temporarily
-// test('is a Vue instance.', async () => {
-//   const wrapper = mount(Button, {
-//     slots: {
-//       default: 'Button text',
-//     },
-//   });
-//   expect(wrapper.html()).toContain('Button text');
-// });
diff --git a/tsconfig.json b/tsconfig.json
deleted file mode 100644
index 1fd7e3e..0000000
--- a/tsconfig.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "compilerOptions": {
-    "target": "esnext",
-    "module": "esnext",
-    "moduleResolution": "node",
-    "strict": true,
-    "forceConsistentCasingInFileNames": true,
-    "allowSyntheticDefaultImports": true,
-    "strictFunctionTypes": false,
-    "jsx": "preserve",
-    "baseUrl": ".",
-    "allowJs": true,
-    "sourceMap": true,
-    "esModuleInterop": true,
-    "resolveJsonModule": true,
-    "noUnusedLocals": true,
-    "noUnusedParameters": true,
-    "experimentalDecorators": true,
-    "lib": ["dom", "esnext"],
-    "types": ["vite/client", "jest"],
-    "typeRoots": ["./node_modules/@types/", "./types"],
-    "noImplicitAny": false,
-    "skipLibCheck": true,
-    "paths": {
-      "/@/*": ["src/*"],
-      "/#/*": ["types/*"]
-    }
-  },
-  "include": [
-    "tests/**/*.ts",
-    "src/**/*.ts",
-    "src/**/*.d.ts",
-    "src/**/*.tsx",
-    "src/**/*.vue",
-    "types/**/*.d.ts",
-    "types/**/*.ts",
-    "build/**/*.ts",
-    "build/**/*.d.ts",
-    "mock/**/*.ts",
-    "vite.config.ts"
-  ],
-  "exclude": ["node_modules", "tests/server/**/*.ts", "dist", "**/*.js"]
-}
diff --git a/types/axios.d.ts b/types/axios.d.ts
deleted file mode 100644
index b1206d8..0000000
--- a/types/axios.d.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-export type ErrorMessageMode = 'none' | 'modal' | 'message' | undefined;
-export type SuccessMessageMode = 'none' | 'success' | 'error' | undefined;
-
-export interface RequestOptions {
-  // 灏嗚姹傚弬鏁版嫾鎺ュ埌url
-  joinParamsToUrl?: boolean;
-  // 鏍煎紡鍖栬姹傚弬鏁版椂闂�
-  formatDate?: boolean;
-  // 鏄惁澶勭悊璇锋眰缁撴灉
-  isTransformResponse?: boolean;
-  // 鏄惁杩斿洖鏈湴鍝嶅簲澶�,闇�瑕佽幏鍙栧搷搴斿ご鏃朵娇鐢ㄦ灞炴��
-  isReturnNativeResponse?: boolean;
-  // Whether to join url
-  joinPrefix?: boolean;
-  // 鎺ュ彛鍦板潃锛屽鏋滀繚鐣欎负绌猴紝鍒欎娇鐢ㄩ粯璁ゅ��
-  apiUrl?: string;
-  // 璇锋眰鎷兼帴璺緞
-  urlPrefix?: string;
-  // 閿欒娑堟伅鎻愮ず绫诲瀷
-  errorMessageMode?: ErrorMessageMode;
-  // 鎴愬姛娑堟伅鎻愮ず绫诲瀷
-  successMessageMode?: SuccessMessageMode;
-  // 鏄惁娣诲姞鏃堕棿鎴�
-  joinTime?: boolean;
-  ignoreCancelToken?: boolean;
-  //鏄惁鍦ㄦ爣澶翠腑鍙戦�佷护鐗�
-  withToken?: boolean;
-}
-
-export interface Result<T = any> {
-  code: number;
-  type: 'success' | 'error' | 'warning';
-  message: string;
-  result: T;
-}
-
-//鏂囦欢涓婁紶鍙傛暟
-export interface UploadFileParams {
-  // 鍏朵粬鍙傛暟
-  data?: Recordable;
-  // 鏂囦欢鍙傛暟鎺ュ彛瀛楁鍚�
-  name?: string;
-  // 鏂囦欢
-  file: File | Blob;
-  // 鏂囦欢鍚�
-  filename?: string;
-  [key: string]: any;
-}
-//鏂囦欢杩斿洖鍙傛暟
-export interface UploadFileCallBack {
-  // 鎴愬姛鍥炶皟鏂规硶
-  success?: any;
-  // 鏄惁杩斿洖鍝嶅簲澶�,闇�瑕佽幏鍙栧搷搴斿ご鏃朵娇鐢ㄦ灞炴��
-  isReturnResponse?: boolean;
-}
diff --git a/types/config.d.ts b/types/config.d.ts
deleted file mode 100644
index 8502dbf..0000000
--- a/types/config.d.ts
+++ /dev/null
@@ -1,178 +0,0 @@
-import { MenuTypeEnum, MenuModeEnum, TriggerEnum, MixSidebarTriggerEnum } from '/@/enums/menuEnum';
-import {
-  ContentEnum,
-  PermissionModeEnum,
-  ThemeEnum,
-  RouterTransitionEnum,
-  SettingButtonPositionEnum,
-  SessionTimeoutProcessingEnum,
-} from '/@/enums/appEnum';
-
-import { CacheTypeEnum } from '/@/enums/cacheEnum';
-
-export type LocaleType = 'zh_CN' | 'en' | 'ru' | 'ja' | 'ko';
-
-export interface MenuSetting {
-  bgColor: string;
-  fixed: boolean;
-  collapsed: boolean;
-  canDrag: boolean;
-  show: boolean;
-  hidden: boolean;
-  split: boolean;
-  menuWidth: number;
-  mode: MenuModeEnum;
-  type: MenuTypeEnum;
-  theme: ThemeEnum;
-  topMenuAlign: 'start' | 'center' | 'end';
-  trigger: TriggerEnum;
-  accordion: boolean;
-  closeMixSidebarOnChange: boolean;
-  collapsedShowTitle: boolean;
-  mixSideTrigger: MixSidebarTriggerEnum;
-  mixSideFixed: boolean;
-}
-
-export interface MultiTabsSetting {
-  cache: boolean;
-  show: boolean;
-  showQuick: boolean;
-  canDrag: boolean;
-  showRedo: boolean;
-  showFold: boolean;
-  theme: string;
-}
-
-export interface HeaderSetting {
-  bgColor: string;
-  fixed: boolean;
-  show: boolean;
-  theme: ThemeEnum;
-  // Turn on full screen
-  showFullScreen: boolean;
-  // Whether to show the lock screen
-  useLockPage: boolean;
-  // Show document button
-  showDoc: boolean;
-  // Show message center button
-  showNotice: boolean;
-  showSearch: boolean;
-}
-
-export interface LocaleSetting {
-  showPicker: boolean;
-  // Current language
-  locale: LocaleType;
-  // default language
-  fallback: LocaleType;
-  // available Locales
-  availableLocales: LocaleType[];
-}
-
-export interface TransitionSetting {
-  //  Whether to open the page switching animation
-  enable: boolean;
-  // Route basic switching animation
-  basicTransition: RouterTransitionEnum;
-  // Whether to open page switching loading
-  openPageLoading: boolean;
-  // Whether to open the top progress bar
-  openNProgress: boolean;
-}
-
-export interface ProjectConfig {
-  // Storage location of permission related information
-  permissionCacheType: CacheTypeEnum;
-  // Whether to show the configuration button
-  showSettingButton: boolean;
-  // Whether to show the theme switch button
-  showDarkModeToggle: boolean;
-  // Configure where the button is displayed
-  settingButtonPosition: SettingButtonPositionEnum;
-  // Permission mode
-  permissionMode: PermissionModeEnum;
-  // Session timeout processing
-  sessionTimeoutProcessing: SessionTimeoutProcessingEnum;
-  // Website gray mode, open for possible mourning dates
-  grayMode: boolean;
-  // Whether to turn on the color weak mode
-  colorWeak: boolean;
-  // Theme color
-  themeColor: string;
-
-  // The main interface is displayed in full screen, the menu is not displayed, and the top
-  fullContent: boolean;
-  // content width
-  contentMode: ContentEnum;
-  // Whether to display the logo
-  showLogo: boolean;
-  // Whether to show the global footer
-  showFooter: boolean;
-  // menuType: MenuTypeEnum;
-  headerSetting: HeaderSetting;
-  // menuSetting
-  menuSetting: MenuSetting;
-  // Multi-tab settings
-  multiTabsSetting: MultiTabsSetting;
-  // Animation configuration
-  transitionSetting: TransitionSetting;
-  // pageLayout whether to enable keep-alive
-  openKeepAlive: boolean;
-  // Lock screen time
-  lockTime: number;
-  // Show breadcrumbs
-  showBreadCrumb: boolean;
-  // Show breadcrumb icon
-  showBreadCrumbIcon: boolean;
-  // Use error-handler-plugin
-  useErrorHandle: boolean;
-  // Whether to open back to top
-  useOpenBackTop: boolean;
-  // Is it possible to embed iframe pages
-  canEmbedIFramePage: boolean;
-  // Whether to delete unclosed messages and notify when switching the interface
-  closeMessageOnSwitch: boolean;
-  // Whether to cancel the http request that has been sent but not responded when switching the interface.
-  removeAllHttpPending: boolean;
-}
-
-export interface GlobConfig {
-  // Site title
-  title: string;
-  // Service interface url
-  apiUrl: string;
-  domainUrl: string;
-  // Upload url (浣滃簾)
-  uploadUrl?: string;
-  openSso?: string;
-  openQianKun?: string;
-  casBaseUrl?: string;
-  // onlineview url
-  viewUrl?: string;
-  //  Service interface url prefix
-  urlPrefix?: string;
-  // Project abbreviation
-  shortName: string;
-}
-export interface GlobEnvConfig {
-  // Site title
-  VITE_GLOB_APP_TITLE: string;
-  // Service interface url
-  VITE_GLOB_API_URL: string;
-  VITE_USE_MOCK: string;
-  // Service interface url prefix
-  VITE_GLOB_API_URL_PREFIX?: string;
-  // Project abbreviation
-  VITE_GLOB_APP_SHORT_NAME: string;
-  //鏄惁寮�鍚崟鐐圭櫥褰�
-  VITE_GLOB_APP_OPEN_SSO: string;
-  //鏄惁寮�鍚井搴旂敤妯″紡
-  VITE_GLOB_APP_OPEN_QIANKUN: string;
-  //鍗曠偣鏈嶅姟绔湴鍧�
-  VITE_GLOB_APP_CAS_BASE_URL: string;
-  VITE_GLOB_DOMAIN_URL: string;
-  // Upload url
-  VITE_GLOB_UPLOAD_URL?: string;
-  // view url
-  VITE_GLOB_ONLINE_VIEW_URL?: string;
-}
diff --git a/types/global.d.ts b/types/global.d.ts
deleted file mode 100644
index d967bff..0000000
--- a/types/global.d.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import type { ComponentRenderProxy, VNode, VNodeChild, ComponentPublicInstance, FunctionalComponent, PropType as VuePropType } from 'vue';
-
-declare global {
-  const __APP_INFO__: {
-    pkg: {
-      name: string;
-      version: string;
-      dependencies: Recordable<string>;
-      devDependencies: Recordable<string>;
-    };
-    lastBuildTime: string;
-  };
-  // declare interface Window {
-  //   // Global vue app instance
-  //   __APP__: App<Element>;
-  // }
-
-  // vue
-  declare type PropType<T> = VuePropType<T>;
-  declare type VueNode = VNodeChild | JSX.Element;
-
-  export type Writable<T> = {
-    -readonly [P in keyof T]: T[P];
-  };
-
-  declare type Nullable<T> = T | null;
-  declare type NonNullable<T> = T extends null | undefined ? never : T;
-  declare type Recordable<T = any> = Record<string, T>;
-  declare type ReadonlyRecordable<T = any> = {
-    readonly [key: string]: T;
-  };
-  declare type Indexable<T = any> = {
-    [key: string]: T;
-  };
-  declare type DeepPartial<T> = {
-    [P in keyof T]?: DeepPartial<T[P]>;
-  };
-  declare type TimeoutHandle = ReturnType<typeof setTimeout>;
-  declare type IntervalHandle = ReturnType<typeof setInterval>;
-
-  declare interface ChangeEvent extends Event {
-    target: HTMLInputElement;
-  }
-
-  declare interface WheelEvent {
-    path?: EventTarget[];
-  }
-  interface ImportMetaEnv extends ViteEnv {
-    __: unknown;
-  }
-
-  declare interface ViteEnv {
-    VITE_PORT: number;
-    VITE_USE_MOCK: boolean;
-    VITE_USE_PWA: boolean;
-    VITE_PUBLIC_PATH: string;
-    VITE_PROXY: [string, string][];
-    VITE_GLOB_APP_TITLE: string;
-    VITE_GLOB_APP_SHORT_NAME: string;
-    VITE_USE_CDN: boolean;
-    VITE_DROP_CONSOLE: boolean;
-    VITE_BUILD_COMPRESS: 'gzip' | 'brotli' | 'none';
-    VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean;
-    VITE_LEGACY: boolean;
-    VITE_USE_IMAGEMIN: boolean;
-    VITE_GENERATE_UI: string;
-  }
-
-  declare function parseInt(s: string | number, radix?: number): number;
-
-  declare function parseFloat(string: string | number): number;
-
-  namespace JSX {
-    // tslint:disable no-empty-interface
-    type Element = VNode;
-    // tslint:disable no-empty-interface
-    type ElementClass = ComponentRenderProxy;
-    interface ElementAttributesProperty {
-      $props: any;
-    }
-    interface IntrinsicElements {
-      [elem: string]: any;
-    }
-    interface IntrinsicAttributes {
-      [elem: string]: any;
-    }
-  }
-}
-
-declare module 'vue' {
-  export type JSXComponent<Props = any> = { new (): ComponentPublicInstance<Props> } | FunctionalComponent<Props>;
-}
diff --git a/types/index.d.ts b/types/index.d.ts
deleted file mode 100644
index b279c0a..0000000
--- a/types/index.d.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-declare interface Fn<T = any, R = T> {
-  (...arg: T[]): R;
-}
-
-declare interface PromiseFn<T = any, R = T> {
-  (...arg: T[]): Promise<R>;
-}
-
-declare type RefType<T> = T | null;
-
-declare type LabelValueOptions = {
-  label: string;
-  value: any;
-  [key: string]: string | number | boolean;
-}[];
-
-declare type EmitType = (event: string, ...args: any[]) => void;
-
-declare type TargetContext = '_self' | '_blank';
-
-declare interface ComponentElRef<T extends HTMLElement = HTMLDivElement> {
-  $el: T;
-}
-
-declare type ComponentRef<T extends HTMLElement = HTMLDivElement> = ComponentElRef<T> | null;
-
-declare type ElRef<T extends HTMLElement = HTMLDivElement> = Nullable<T>;
diff --git a/types/module.d.ts b/types/module.d.ts
deleted file mode 100644
index 9615206..0000000
--- a/types/module.d.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-declare module '*.vue' {
-  import { DefineComponent } from 'vue';
-  const Component: DefineComponent<{}, {}, any>;
-  export default Component;
-}
-
-declare module 'ant-design-vue/es/locale/*' {
-  import { Locale } from 'ant-design-vue/types/locale-provider';
-  const locale: Locale & ReadonlyRecordable;
-  export default locale as Locale & ReadonlyRecordable;
-}
-
-declare module 'virtual:*' {
-  const result: any;
-  export default result;
-}
diff --git a/types/store.d.ts b/types/store.d.ts
deleted file mode 100644
index 7b9349a..0000000
--- a/types/store.d.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import { ErrorTypeEnum } from '/@/enums/exceptionEnum';
-import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum';
-import { RoleInfo } from '/@/api/sys/model/userModel';
-
-// Lock screen information
-export interface LockInfo {
-  // Password required
-  pwd?: string | undefined;
-  // Is it locked?
-  isLock?: boolean;
-}
-
-// Error-log information
-export interface ErrorLogInfo {
-  // Type of error
-  type: ErrorTypeEnum;
-  // Error file
-  file: string;
-  // Error name
-  name?: string;
-  // Error message
-  message: string;
-  // Error stack
-  stack?: string;
-  // Error detail
-  detail: string;
-  // Error url
-  url: string;
-  // Error time
-  time?: string;
-}
-
-export interface UserInfo {
-  id: string | number;
-  userId: string | number;
-  username: string;
-  realname: string;
-  avatar: string;
-  desc?: string;
-  homePath?: string;
-  tenantid?: string | number;
-  roles: RoleInfo[];
-  orgCode?: string;
-}
-
-export interface LoginInfo {
-  multi_depart?: string | number;
-  userInfo?: object;
-  departs?: [];
-  tenantList?: [];
-  isLogin?: boolean;
-}
-
-export interface BeforeMiniState {
-  menuCollapsed?: boolean;
-  menuSplit?: boolean;
-  menuMode?: MenuModeEnum;
-  menuType?: MenuTypeEnum;
-}
diff --git a/types/utils.d.ts b/types/utils.d.ts
deleted file mode 100644
index 6500d44..0000000
--- a/types/utils.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import type { ComputedRef, Ref } from 'vue';
-
-export type DynamicProps<T> = {
-  [P in keyof T]: Ref<T[P]> | T[P] | ComputedRef<T[P]>;
-};
diff --git a/types/vue-router.d.ts b/types/vue-router.d.ts
deleted file mode 100644
index 93fd788..0000000
--- a/types/vue-router.d.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-export {};
-
-declare module 'vue-router' {
-  interface RouteMeta extends Record<string | number | symbol, unknown> {
-    orderNo?: number;
-    // title
-    title: string;
-    // dynamic router level.
-    dynamicLevel?: number;
-    // dynamic router real route path (For performance).
-    realPath?: string;
-    // Whether to ignore permissions
-    ignoreAuth?: boolean;
-    // role info
-    roles?: RoleEnum[];
-    // Whether not to cache
-    ignoreKeepAlive?: boolean;
-    // Is it fixed on tab
-    affix?: boolean;
-    // icon on tab
-    icon?: string;
-    frameSrc?: string;
-    // current page transition
-    transitionName?: string;
-    // Whether the route has been dynamically added
-    hideBreadcrumb?: boolean;
-    // Hide submenu
-    hideChildrenInMenu?: boolean;
-    // Carrying parameters
-    carryParam?: boolean;
-    // Used internally to mark single-level menus
-    single?: boolean;
-    // Currently active menu
-    currentActiveMenu?: string;
-    // Never show in tab
-    hideTab?: boolean;
-    // Never show in menu
-    hideMenu?: boolean;
-    isLink?: boolean;
-    // only build for Menu
-    ignoreRoute?: boolean;
-    // Hide path for children
-    hidePathForChildren?: boolean;
-  }
-}
diff --git a/vite.config.ts b/vite.config.ts
deleted file mode 100644
index 9e74fe7..0000000
--- a/vite.config.ts
+++ /dev/null
@@ -1,106 +0,0 @@
-import type { UserConfig, ConfigEnv } from 'vite'
-import pkg from './package.json'
-import dayjs from 'dayjs'
-import { loadEnv } from 'vite'
-import { resolve } from 'path'
-import { generateModifyVars } from './build/generate/generateModifyVars'
-import { createProxy } from './build/vite/proxy'
-import { wrapperEnv } from './build/utils'
-import { createVitePlugins } from './build/vite/plugin'
-import { OUTPUT_DIR } from './build/constant'
-
-function pathResolve(dir: string) {
-	return resolve(process.cwd(), '.', dir)
-}
-
-const { dependencies, devDependencies, name, version } = pkg
-const __APP_INFO__ = {
-	pkg: { dependencies, devDependencies, name, version },
-	lastBuildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
-}
-
-export default ({ command, mode }: ConfigEnv): UserConfig => {
-	const root = process.cwd()
-
-	const env = loadEnv(mode, root)
-
-	// The boolean type read by loadEnv is a string. This function can be converted to boolean type
-	const viteEnv = wrapperEnv(env)
-
-	const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY, VITE_DROP_CONSOLE } = viteEnv
-
-	const isBuild = command === 'build'
-
-	return {
-		base: VITE_PUBLIC_PATH,
-		root,
-		resolve: {
-			alias: [
-				{
-					find: 'vue-i18n',
-					replacement: 'vue-i18n/dist/vue-i18n.cjs.js',
-				},
-				// /@/xxxx => src/xxxx
-				{
-					find: /\/@\//,
-					replacement: pathResolve('src') + '/',
-				},
-				// /#/xxxx => types/xxxx
-				{
-					find: /\/#\//,
-					replacement: pathResolve('types') + '/',
-				},
-			],
-		},
-		server: {
-			// Listening on all local IPs
-			host: true,
-			https: false,
-			port: VITE_PORT,
-			// Load proxy configuration from .env
-			proxy: createProxy(VITE_PROXY),
-		},
-		build: {
-			minify: 'esbuild',
-			target: 'es2015',
-			cssTarget: 'chrome80',
-			outDir: OUTPUT_DIR,
-			terserOptions: {
-				compress: {
-					keep_infinity: true,
-					// Used to delete console in production environment
-					drop_console: VITE_DROP_CONSOLE,
-					drop_debugger: true,
-				},
-			},
-			// Turning off brotliSize display can slightly reduce packaging time
-			reportCompressedSize: false,
-			chunkSizeWarningLimit: 2000,
-		},
-		define: {
-			// setting vue-i18-next
-			// Suppress warning
-			__INTLIFY_PROD_DEVTOOLS__: false,
-			__APP_INFO__: JSON.stringify(__APP_INFO__),
-		},
-		css: {
-			preprocessorOptions: {
-				less: {
-					modifyVars: generateModifyVars(),
-					javascriptEnabled: true,
-				},
-			},
-		},
-
-		// The vite plugin used by the project. The quantity is large, so it is separately extracted and managed
-		plugins: createVitePlugins(viteEnv, isBuild),
-
-		optimizeDeps: {
-			esbuildOptions: {
-				target: 'es2020',
-			},
-			// @iconify/iconify: The dependency is dynamically and virtually loaded by @purge-icons/generated, so it needs to be specified explicitly
-			include: ['@vue/runtime-core', '@vue/shared', '@iconify/iconify', 'ant-design-vue/es/locale/zh_CN', 'ant-design-vue/es/locale/en_US'],
-		},
-	}
-}
diff --git a/windi.config.ts b/windi.config.ts
deleted file mode 100644
index 901cf64..0000000
--- a/windi.config.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import { defineConfig } from 'vite-plugin-windicss'
-import { primaryColor } from './build/config/themeConfig'
-
-export default defineConfig({
-	darkMode: 'class',
-	plugins: [createEnterPlugin()],
-	theme: {
-		extend: {
-			zIndex: {
-				'-1': '-1',
-			},
-			colors: {
-				primary: primaryColor,
-			},
-			screens: {
-				sm: '576px',
-				md: '768px',
-				lg: '992px',
-				xl: '1200px',
-				'2xl': '1600px',
-			},
-		},
-	},
-})
-
-/**
- * Used for animation when the element is displayed
- * @param maxOutput The larger the maxOutput output, the larger the generated css volume
- */
-function createEnterPlugin(maxOutput = 8) {
-	const createCss = (index: number, d = 'x') => {
-		const upd = d.toUpperCase()
-		return {
-			[`*> .enter-${d}:nth-child(${index})`]: {
-				transform: `translate${upd}(50px)`,
-			},
-			[`*> .-enter-${d}:nth-child(${index})`]: {
-				transform: `translate${upd}(-50px)`,
-			},
-			[`* > .enter-${d}:nth-child(${index}),* > .-enter-${d}:nth-child(${index})`]: {
-				'z-index': `${10 - index}`,
-				opacity: '0',
-				animation: `enter-${d}-animation 0.4s ease-in-out 0.3s`,
-				'animation-fill-mode': 'forwards',
-				'animation-delay': `${(index * 1) / 10}s`,
-			},
-		}
-	}
-	const handler = ({ addBase }) => {
-		const addRawCss = {}
-		for (let index = 1; index < maxOutput; index++) {
-			Object.assign(addRawCss, {
-				...createCss(index, 'x'),
-				...createCss(index, 'y'),
-			})
-		}
-		addBase({
-			...addRawCss,
-			[`@keyframes enter-x-animation`]: {
-				to: {
-					opacity: '1',
-					transform: 'translateX(0)',
-				},
-			},
-			[`@keyframes enter-y-animation`]: {
-				to: {
-					opacity: '1',
-					transform: 'translateY(0)',
-				},
-			},
-		})
-	}
-	return { handler }
-}
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index 42c756d..0000000
--- a/yarn.lock
+++ /dev/null
@@ -1,12304 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@ampproject/remapping@^2.2.0":
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
-  integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
-  dependencies:
-    "@jridgewell/gen-mapping" "^0.3.0"
-    "@jridgewell/trace-mapping" "^0.3.9"
-
-"@ant-design/colors@^6.0.0":
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298"
-  integrity sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==
-  dependencies:
-    "@ctrl/tinycolor" "^3.4.0"
-
-"@ant-design/icons-svg@^4.2.1":
-  version "4.2.1"
-  resolved "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a"
-  integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==
-
-"@ant-design/icons-vue@^6.1.0":
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz#f9324fdc0eb4cea943cf626d2bf3db9a4ff4c074"
-  integrity sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==
-  dependencies:
-    "@ant-design/colors" "^6.0.0"
-    "@ant-design/icons-svg" "^4.2.1"
-
-"@antfu/utils@^0.7.2":
-  version "0.7.2"
-  resolved "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.2.tgz#3bb6f37a6b188056fe9e2f363b6aa735ed65d7ca"
-  integrity sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==
-
-"@apideck/better-ajv-errors@^0.3.1":
-  version "0.3.6"
-  resolved "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097"
-  integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==
-  dependencies:
-    json-schema "^0.4.0"
-    jsonpointer "^5.0.0"
-    leven "^3.1.0"
-
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4":
-  version "7.21.4"
-  resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39"
-  integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==
-  dependencies:
-    "@babel/highlight" "^7.18.6"
-
-"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.5":
-  version "7.21.7"
-  resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc"
-  integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==
-
-"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.17.9", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
-  version "7.21.8"
-  resolved "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz#2a8c7f0f53d60100ba4c32470ba0281c92aa9aa4"
-  integrity sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==
-  dependencies:
-    "@ampproject/remapping" "^2.2.0"
-    "@babel/code-frame" "^7.21.4"
-    "@babel/generator" "^7.21.5"
-    "@babel/helper-compilation-targets" "^7.21.5"
-    "@babel/helper-module-transforms" "^7.21.5"
-    "@babel/helpers" "^7.21.5"
-    "@babel/parser" "^7.21.8"
-    "@babel/template" "^7.20.7"
-    "@babel/traverse" "^7.21.5"
-    "@babel/types" "^7.21.5"
-    convert-source-map "^1.7.0"
-    debug "^4.1.0"
-    gensync "^1.0.0-beta.2"
-    json5 "^2.2.2"
-    semver "^6.3.0"
-
-"@babel/generator@^7.21.5", "@babel/generator@^7.7.2":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f"
-  integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==
-  dependencies:
-    "@babel/types" "^7.21.5"
-    "@jridgewell/gen-mapping" "^0.3.2"
-    "@jridgewell/trace-mapping" "^0.3.17"
-    jsesc "^2.5.1"
-
-"@babel/helper-annotate-as-pure@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
-  integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==
-  dependencies:
-    "@babel/types" "^7.18.6"
-
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz#817f73b6c59726ab39f6ba18c234268a519e5abb"
-  integrity sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==
-  dependencies:
-    "@babel/types" "^7.21.5"
-
-"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366"
-  integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==
-  dependencies:
-    "@babel/compat-data" "^7.21.5"
-    "@babel/helper-validator-option" "^7.21.0"
-    browserslist "^4.21.3"
-    lru-cache "^5.1.1"
-    semver "^6.3.0"
-
-"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0":
-  version "7.21.8"
-  resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz#205b26330258625ef8869672ebca1e0dee5a0f02"
-  integrity sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==
-  dependencies:
-    "@babel/helper-annotate-as-pure" "^7.18.6"
-    "@babel/helper-environment-visitor" "^7.21.5"
-    "@babel/helper-function-name" "^7.21.0"
-    "@babel/helper-member-expression-to-functions" "^7.21.5"
-    "@babel/helper-optimise-call-expression" "^7.18.6"
-    "@babel/helper-replace-supers" "^7.21.5"
-    "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
-    "@babel/helper-split-export-declaration" "^7.18.6"
-    semver "^6.3.0"
-
-"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5":
-  version "7.21.8"
-  resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz#a7886f61c2e29e21fd4aaeaf1e473deba6b571dc"
-  integrity sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g==
-  dependencies:
-    "@babel/helper-annotate-as-pure" "^7.18.6"
-    regexpu-core "^5.3.1"
-    semver "^6.3.0"
-
-"@babel/helper-define-polyfill-provider@^0.3.3":
-  version "0.3.3"
-  resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a"
-  integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==
-  dependencies:
-    "@babel/helper-compilation-targets" "^7.17.7"
-    "@babel/helper-plugin-utils" "^7.16.7"
-    debug "^4.1.1"
-    lodash.debounce "^4.0.8"
-    resolve "^1.14.2"
-    semver "^6.1.2"
-
-"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba"
-  integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==
-
-"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0":
-  version "7.21.0"
-  resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4"
-  integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==
-  dependencies:
-    "@babel/template" "^7.20.7"
-    "@babel/types" "^7.21.0"
-
-"@babel/helper-hoist-variables@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
-  integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==
-  dependencies:
-    "@babel/types" "^7.18.6"
-
-"@babel/helper-member-expression-to-functions@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz#3b1a009af932e586af77c1030fba9ee0bde396c0"
-  integrity sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==
-  dependencies:
-    "@babel/types" "^7.21.5"
-
-"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4":
-  version "7.21.4"
-  resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af"
-  integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==
-  dependencies:
-    "@babel/types" "^7.21.4"
-
-"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420"
-  integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==
-  dependencies:
-    "@babel/helper-environment-visitor" "^7.21.5"
-    "@babel/helper-module-imports" "^7.21.4"
-    "@babel/helper-simple-access" "^7.21.5"
-    "@babel/helper-split-export-declaration" "^7.18.6"
-    "@babel/helper-validator-identifier" "^7.19.1"
-    "@babel/template" "^7.20.7"
-    "@babel/traverse" "^7.21.5"
-    "@babel/types" "^7.21.5"
-
-"@babel/helper-optimise-call-expression@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
-  integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==
-  dependencies:
-    "@babel/types" "^7.18.6"
-
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56"
-  integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==
-
-"@babel/helper-remap-async-to-generator@^7.18.9":
-  version "7.18.9"
-  resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519"
-  integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==
-  dependencies:
-    "@babel/helper-annotate-as-pure" "^7.18.6"
-    "@babel/helper-environment-visitor" "^7.18.9"
-    "@babel/helper-wrap-function" "^7.18.9"
-    "@babel/types" "^7.18.9"
-
-"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz#a6ad005ba1c7d9bc2973dfde05a1bba7065dde3c"
-  integrity sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==
-  dependencies:
-    "@babel/helper-environment-visitor" "^7.21.5"
-    "@babel/helper-member-expression-to-functions" "^7.21.5"
-    "@babel/helper-optimise-call-expression" "^7.18.6"
-    "@babel/template" "^7.20.7"
-    "@babel/traverse" "^7.21.5"
-    "@babel/types" "^7.21.5"
-
-"@babel/helper-simple-access@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee"
-  integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==
-  dependencies:
-    "@babel/types" "^7.21.5"
-
-"@babel/helper-skip-transparent-expression-wrappers@^7.20.0":
-  version "7.20.0"
-  resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684"
-  integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==
-  dependencies:
-    "@babel/types" "^7.20.0"
-
-"@babel/helper-split-export-declaration@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
-  integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
-  dependencies:
-    "@babel/types" "^7.18.6"
-
-"@babel/helper-string-parser@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd"
-  integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==
-
-"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
-  version "7.19.1"
-  resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
-  integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
-
-"@babel/helper-validator-option@^7.21.0":
-  version "7.21.0"
-  resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180"
-  integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==
-
-"@babel/helper-wrap-function@^7.18.9":
-  version "7.20.5"
-  resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3"
-  integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==
-  dependencies:
-    "@babel/helper-function-name" "^7.19.0"
-    "@babel/template" "^7.18.10"
-    "@babel/traverse" "^7.20.5"
-    "@babel/types" "^7.20.5"
-
-"@babel/helpers@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08"
-  integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==
-  dependencies:
-    "@babel/template" "^7.20.7"
-    "@babel/traverse" "^7.21.5"
-    "@babel/types" "^7.21.5"
-
-"@babel/highlight@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
-  integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
-  dependencies:
-    "@babel/helper-validator-identifier" "^7.18.6"
-    chalk "^2.0.0"
-    js-tokens "^4.0.0"
-
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.15", "@babel/parser@^7.20.7", "@babel/parser@^7.21.3", "@babel/parser@^7.21.5", "@babel/parser@^7.21.8":
-  version "7.21.8"
-  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8"
-  integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==
-
-"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
-  integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7":
-  version "7.20.7"
-  resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1"
-  integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
-    "@babel/plugin-proposal-optional-chaining" "^7.20.7"
-
-"@babel/plugin-proposal-async-generator-functions@^7.20.7":
-  version "7.20.7"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326"
-  integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==
-  dependencies:
-    "@babel/helper-environment-visitor" "^7.18.9"
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/helper-remap-async-to-generator" "^7.18.9"
-    "@babel/plugin-syntax-async-generators" "^7.8.4"
-
-"@babel/plugin-proposal-class-properties@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3"
-  integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==
-  dependencies:
-    "@babel/helper-create-class-features-plugin" "^7.18.6"
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-proposal-class-static-block@^7.21.0":
-  version "7.21.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d"
-  integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==
-  dependencies:
-    "@babel/helper-create-class-features-plugin" "^7.21.0"
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/plugin-syntax-class-static-block" "^7.14.5"
-
-"@babel/plugin-proposal-dynamic-import@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94"
-  integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
-
-"@babel/plugin-proposal-export-namespace-from@^7.18.9":
-  version "7.18.9"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203"
-  integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.9"
-    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
-
-"@babel/plugin-proposal-json-strings@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b"
-  integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-    "@babel/plugin-syntax-json-strings" "^7.8.3"
-
-"@babel/plugin-proposal-logical-assignment-operators@^7.20.7":
-  version "7.20.7"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83"
-  integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
-
-"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1"
-  integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-
-"@babel/plugin-proposal-numeric-separator@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75"
-  integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
-
-"@babel/plugin-proposal-object-rest-spread@^7.20.7":
-  version "7.20.7"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a"
-  integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==
-  dependencies:
-    "@babel/compat-data" "^7.20.5"
-    "@babel/helper-compilation-targets" "^7.20.7"
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
-    "@babel/plugin-transform-parameters" "^7.20.7"
-
-"@babel/plugin-proposal-optional-catch-binding@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb"
-  integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
-
-"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0":
-  version "7.21.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea"
-  integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
-    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
-
-"@babel/plugin-proposal-private-methods@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea"
-  integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==
-  dependencies:
-    "@babel/helper-create-class-features-plugin" "^7.18.6"
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-proposal-private-property-in-object@^7.21.0":
-  version "7.21.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc"
-  integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==
-  dependencies:
-    "@babel/helper-annotate-as-pure" "^7.18.6"
-    "@babel/helper-create-class-features-plugin" "^7.21.0"
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
-
-"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e"
-  integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==
-  dependencies:
-    "@babel/helper-create-regexp-features-plugin" "^7.18.6"
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-syntax-async-generators@^7.8.4":
-  version "7.8.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
-  integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-bigint@^7.8.3":
-  version "7.8.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
-  integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
-  version "7.12.13"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
-  integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.12.13"
-
-"@babel/plugin-syntax-class-static-block@^7.14.5":
-  version "7.14.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
-  integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.14.5"
-
-"@babel/plugin-syntax-dynamic-import@^7.8.3":
-  version "7.8.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
-  integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-export-namespace-from@^7.8.3":
-  version "7.8.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
-  integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.8.3"
-
-"@babel/plugin-syntax-import-assertions@^7.20.0":
-  version "7.20.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4"
-  integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.19.0"
-
-"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3":
-  version "7.10.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
-  integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-json-strings@^7.8.3":
-  version "7.8.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
-  integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-jsx@^7.0.0":
-  version "7.21.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2"
-  integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.20.2"
-
-"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
-  version "7.10.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
-  integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
-  version "7.8.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
-  integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
-  version "7.10.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
-  integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-object-rest-spread@^7.8.3":
-  version "7.8.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
-  integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
-  version "7.8.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
-  integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-optional-chaining@^7.8.3":
-  version "7.8.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
-  integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-private-property-in-object@^7.14.5":
-  version "7.14.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
-  integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.14.5"
-
-"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
-  version "7.14.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
-  integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.14.5"
-
-"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.7.2":
-  version "7.21.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8"
-  integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.20.2"
-
-"@babel/plugin-transform-arrow-functions@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz#9bb42a53de447936a57ba256fbf537fc312b6929"
-  integrity sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.21.5"
-
-"@babel/plugin-transform-async-to-generator@^7.20.7":
-  version "7.20.7"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354"
-  integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==
-  dependencies:
-    "@babel/helper-module-imports" "^7.18.6"
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/helper-remap-async-to-generator" "^7.18.9"
-
-"@babel/plugin-transform-block-scoped-functions@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8"
-  integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-block-scoping@^7.21.0":
-  version "7.21.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02"
-  integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.20.2"
-
-"@babel/plugin-transform-classes@^7.21.0":
-  version "7.21.0"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665"
-  integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==
-  dependencies:
-    "@babel/helper-annotate-as-pure" "^7.18.6"
-    "@babel/helper-compilation-targets" "^7.20.7"
-    "@babel/helper-environment-visitor" "^7.18.9"
-    "@babel/helper-function-name" "^7.21.0"
-    "@babel/helper-optimise-call-expression" "^7.18.6"
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/helper-replace-supers" "^7.20.7"
-    "@babel/helper-split-export-declaration" "^7.18.6"
-    globals "^11.1.0"
-
-"@babel/plugin-transform-computed-properties@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz#3a2d8bb771cd2ef1cd736435f6552fe502e11b44"
-  integrity sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.21.5"
-    "@babel/template" "^7.20.7"
-
-"@babel/plugin-transform-destructuring@^7.21.3":
-  version "7.21.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401"
-  integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.20.2"
-
-"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8"
-  integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==
-  dependencies:
-    "@babel/helper-create-regexp-features-plugin" "^7.18.6"
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-duplicate-keys@^7.18.9":
-  version "7.18.9"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e"
-  integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-exponentiation-operator@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd"
-  integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==
-  dependencies:
-    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6"
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-for-of@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz#e890032b535f5a2e237a18535f56a9fdaa7b83fc"
-  integrity sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.21.5"
-
-"@babel/plugin-transform-function-name@^7.18.9":
-  version "7.18.9"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0"
-  integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==
-  dependencies:
-    "@babel/helper-compilation-targets" "^7.18.9"
-    "@babel/helper-function-name" "^7.18.9"
-    "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-literals@^7.18.9":
-  version "7.18.9"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc"
-  integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-member-expression-literals@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e"
-  integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-modules-amd@^7.20.11":
-  version "7.20.11"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a"
-  integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==
-  dependencies:
-    "@babel/helper-module-transforms" "^7.20.11"
-    "@babel/helper-plugin-utils" "^7.20.2"
-
-"@babel/plugin-transform-modules-commonjs@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz#d69fb947eed51af91de82e4708f676864e5e47bc"
-  integrity sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==
-  dependencies:
-    "@babel/helper-module-transforms" "^7.21.5"
-    "@babel/helper-plugin-utils" "^7.21.5"
-    "@babel/helper-simple-access" "^7.21.5"
-
-"@babel/plugin-transform-modules-systemjs@^7.20.11":
-  version "7.20.11"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e"
-  integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==
-  dependencies:
-    "@babel/helper-hoist-variables" "^7.18.6"
-    "@babel/helper-module-transforms" "^7.20.11"
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/helper-validator-identifier" "^7.19.1"
-
-"@babel/plugin-transform-modules-umd@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9"
-  integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==
-  dependencies:
-    "@babel/helper-module-transforms" "^7.18.6"
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5":
-  version "7.20.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8"
-  integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==
-  dependencies:
-    "@babel/helper-create-regexp-features-plugin" "^7.20.5"
-    "@babel/helper-plugin-utils" "^7.20.2"
-
-"@babel/plugin-transform-new-target@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8"
-  integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-object-super@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c"
-  integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-    "@babel/helper-replace-supers" "^7.18.6"
-
-"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3":
-  version "7.21.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db"
-  integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.20.2"
-
-"@babel/plugin-transform-property-literals@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3"
-  integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-regenerator@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz#576c62f9923f94bcb1c855adc53561fd7913724e"
-  integrity sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.21.5"
-    regenerator-transform "^0.15.1"
-
-"@babel/plugin-transform-reserved-words@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a"
-  integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-shorthand-properties@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9"
-  integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-spread@^7.20.7":
-  version "7.20.7"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e"
-  integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
-
-"@babel/plugin-transform-sticky-regex@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc"
-  integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-template-literals@^7.18.9":
-  version "7.18.9"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e"
-  integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-typeof-symbol@^7.18.9":
-  version "7.18.9"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0"
-  integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-typescript@^7.16.8":
-  version "7.21.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b"
-  integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==
-  dependencies:
-    "@babel/helper-annotate-as-pure" "^7.18.6"
-    "@babel/helper-create-class-features-plugin" "^7.21.0"
-    "@babel/helper-plugin-utils" "^7.20.2"
-    "@babel/plugin-syntax-typescript" "^7.20.0"
-
-"@babel/plugin-transform-unicode-escapes@^7.21.5":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz#1e55ed6195259b0e9061d81f5ef45a9b009fb7f2"
-  integrity sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.21.5"
-
-"@babel/plugin-transform-unicode-regex@^7.18.6":
-  version "7.18.6"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca"
-  integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==
-  dependencies:
-    "@babel/helper-create-regexp-features-plugin" "^7.18.6"
-    "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/preset-env@^7.11.0":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz#db2089d99efd2297716f018aeead815ac3decffb"
-  integrity sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==
-  dependencies:
-    "@babel/compat-data" "^7.21.5"
-    "@babel/helper-compilation-targets" "^7.21.5"
-    "@babel/helper-plugin-utils" "^7.21.5"
-    "@babel/helper-validator-option" "^7.21.0"
-    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6"
-    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7"
-    "@babel/plugin-proposal-async-generator-functions" "^7.20.7"
-    "@babel/plugin-proposal-class-properties" "^7.18.6"
-    "@babel/plugin-proposal-class-static-block" "^7.21.0"
-    "@babel/plugin-proposal-dynamic-import" "^7.18.6"
-    "@babel/plugin-proposal-export-namespace-from" "^7.18.9"
-    "@babel/plugin-proposal-json-strings" "^7.18.6"
-    "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7"
-    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6"
-    "@babel/plugin-proposal-numeric-separator" "^7.18.6"
-    "@babel/plugin-proposal-object-rest-spread" "^7.20.7"
-    "@babel/plugin-proposal-optional-catch-binding" "^7.18.6"
-    "@babel/plugin-proposal-optional-chaining" "^7.21.0"
-    "@babel/plugin-proposal-private-methods" "^7.18.6"
-    "@babel/plugin-proposal-private-property-in-object" "^7.21.0"
-    "@babel/plugin-proposal-unicode-property-regex" "^7.18.6"
-    "@babel/plugin-syntax-async-generators" "^7.8.4"
-    "@babel/plugin-syntax-class-properties" "^7.12.13"
-    "@babel/plugin-syntax-class-static-block" "^7.14.5"
-    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
-    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
-    "@babel/plugin-syntax-import-assertions" "^7.20.0"
-    "@babel/plugin-syntax-import-meta" "^7.10.4"
-    "@babel/plugin-syntax-json-strings" "^7.8.3"
-    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
-    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
-    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
-    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
-    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
-    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
-    "@babel/plugin-syntax-top-level-await" "^7.14.5"
-    "@babel/plugin-transform-arrow-functions" "^7.21.5"
-    "@babel/plugin-transform-async-to-generator" "^7.20.7"
-    "@babel/plugin-transform-block-scoped-functions" "^7.18.6"
-    "@babel/plugin-transform-block-scoping" "^7.21.0"
-    "@babel/plugin-transform-classes" "^7.21.0"
-    "@babel/plugin-transform-computed-properties" "^7.21.5"
-    "@babel/plugin-transform-destructuring" "^7.21.3"
-    "@babel/plugin-transform-dotall-regex" "^7.18.6"
-    "@babel/plugin-transform-duplicate-keys" "^7.18.9"
-    "@babel/plugin-transform-exponentiation-operator" "^7.18.6"
-    "@babel/plugin-transform-for-of" "^7.21.5"
-    "@babel/plugin-transform-function-name" "^7.18.9"
-    "@babel/plugin-transform-literals" "^7.18.9"
-    "@babel/plugin-transform-member-expression-literals" "^7.18.6"
-    "@babel/plugin-transform-modules-amd" "^7.20.11"
-    "@babel/plugin-transform-modules-commonjs" "^7.21.5"
-    "@babel/plugin-transform-modules-systemjs" "^7.20.11"
-    "@babel/plugin-transform-modules-umd" "^7.18.6"
-    "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5"
-    "@babel/plugin-transform-new-target" "^7.18.6"
-    "@babel/plugin-transform-object-super" "^7.18.6"
-    "@babel/plugin-transform-parameters" "^7.21.3"
-    "@babel/plugin-transform-property-literals" "^7.18.6"
-    "@babel/plugin-transform-regenerator" "^7.21.5"
-    "@babel/plugin-transform-reserved-words" "^7.18.6"
-    "@babel/plugin-transform-shorthand-properties" "^7.18.6"
-    "@babel/plugin-transform-spread" "^7.20.7"
-    "@babel/plugin-transform-sticky-regex" "^7.18.6"
-    "@babel/plugin-transform-template-literals" "^7.18.9"
-    "@babel/plugin-transform-typeof-symbol" "^7.18.9"
-    "@babel/plugin-transform-unicode-escapes" "^7.21.5"
-    "@babel/plugin-transform-unicode-regex" "^7.18.6"
-    "@babel/preset-modules" "^0.1.5"
-    "@babel/types" "^7.21.5"
-    babel-plugin-polyfill-corejs2 "^0.3.3"
-    babel-plugin-polyfill-corejs3 "^0.6.0"
-    babel-plugin-polyfill-regenerator "^0.4.1"
-    core-js-compat "^3.25.1"
-    semver "^6.3.0"
-
-"@babel/preset-modules@^0.1.5":
-  version "0.1.5"
-  resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9"
-  integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
-    "@babel/plugin-transform-dotall-regex" "^7.4.4"
-    "@babel/types" "^7.4.4"
-    esutils "^2.0.2"
-
-"@babel/regjsgen@^0.8.0":
-  version "0.8.0"
-  resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
-  integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
-
-"@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.18.6", "@babel/runtime@^7.8.4":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200"
-  integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==
-  dependencies:
-    regenerator-runtime "^0.13.11"
-
-"@babel/standalone@^7.20.0":
-  version "7.21.8"
-  resolved "https://registry.npmjs.org/@babel/standalone/-/standalone-7.21.8.tgz#e24b3fb8aafe1f0f3db4d2f0de59dd2baea13dc2"
-  integrity sha512-Od6cBJ8dm9wjAt+3olvO7N3s+8UsCkX3hH41Ew3BlFJw1QQtbctplq3kuwzzfk+YcmXE95k8fJCzbnhf32+BxQ==
-
-"@babel/template@^7.0.0", "@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3":
-  version "7.20.7"
-  resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8"
-  integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==
-  dependencies:
-    "@babel/code-frame" "^7.18.6"
-    "@babel/parser" "^7.20.7"
-    "@babel/types" "^7.20.7"
-
-"@babel/traverse@^7.0.0", "@babel/traverse@^7.20.5", "@babel/traverse@^7.21.5", "@babel/traverse@^7.7.2":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133"
-  integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==
-  dependencies:
-    "@babel/code-frame" "^7.21.4"
-    "@babel/generator" "^7.21.5"
-    "@babel/helper-environment-visitor" "^7.21.5"
-    "@babel/helper-function-name" "^7.21.0"
-    "@babel/helper-hoist-variables" "^7.18.6"
-    "@babel/helper-split-export-declaration" "^7.18.6"
-    "@babel/parser" "^7.21.5"
-    "@babel/types" "^7.21.5"
-    debug "^4.1.0"
-    globals "^11.1.0"
-
-"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
-  version "7.21.5"
-  resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6"
-  integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==
-  dependencies:
-    "@babel/helper-string-parser" "^7.21.5"
-    "@babel/helper-validator-identifier" "^7.19.1"
-    to-fast-properties "^2.0.0"
-
-"@bcoe/v8-coverage@^0.2.3":
-  version "0.2.3"
-  resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
-  integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
-
-"@commitlint/cli@^16.2.3":
-  version "16.3.0"
-  resolved "https://registry.npmjs.org/@commitlint/cli/-/cli-16.3.0.tgz#5689f5c2abbb7880d5ff13329251e5648a784b16"
-  integrity sha512-P+kvONlfsuTMnxSwWE1H+ZcPMY3STFaHb2kAacsqoIkNx66O0T7sTpBxpxkMrFPyhkJiLJnJWMhk4bbvYD3BMA==
-  dependencies:
-    "@commitlint/format" "^16.2.1"
-    "@commitlint/lint" "^16.2.4"
-    "@commitlint/load" "^16.3.0"
-    "@commitlint/read" "^16.2.1"
-    "@commitlint/types" "^16.2.1"
-    lodash "^4.17.19"
-    resolve-from "5.0.0"
-    resolve-global "1.0.0"
-    yargs "^17.0.0"
-
-"@commitlint/config-conventional@^16.2.1":
-  version "16.2.4"
-  resolved "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-16.2.4.tgz#56647108c89ed06fc5271242787550331988c0fb"
-  integrity sha512-av2UQJa3CuE5P0dzxj/o/B9XVALqYzEViHrMXtDrW9iuflrqCStWBAioijppj9URyz6ONpohJKAtSdgAOE0gkA==
-  dependencies:
-    conventional-changelog-conventionalcommits "^4.3.1"
-
-"@commitlint/config-validator@^16.2.1":
-  version "16.2.1"
-  resolved "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-16.2.1.tgz#794e769afd4756e4cf1bfd823b6612932e39c56d"
-  integrity sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw==
-  dependencies:
-    "@commitlint/types" "^16.2.1"
-    ajv "^6.12.6"
-
-"@commitlint/config-validator@^17.4.4":
-  version "17.4.4"
-  resolved "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz#d0742705719559a101d2ee49c0c514044af6d64d"
-  integrity sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==
-  dependencies:
-    "@commitlint/types" "^17.4.4"
-    ajv "^8.11.0"
-
-"@commitlint/ensure@^16.2.1":
-  version "16.2.1"
-  resolved "https://registry.npmjs.org/@commitlint/ensure/-/ensure-16.2.1.tgz#0fc538173f95c1eb2694eeedb79cab478347f16f"
-  integrity sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A==
-  dependencies:
-    "@commitlint/types" "^16.2.1"
-    lodash "^4.17.19"
-
-"@commitlint/execute-rule@^16.2.1":
-  version "16.2.1"
-  resolved "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-16.2.1.tgz#60be73be4b9af97a41546e7ce59fdd33787c65f8"
-  integrity sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g==
-
-"@commitlint/execute-rule@^17.4.0":
-  version "17.4.0"
-  resolved "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz#4518e77958893d0a5835babe65bf87e2638f6939"
-  integrity sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==
-
-"@commitlint/format@^16.2.1":
-  version "16.2.1"
-  resolved "https://registry.npmjs.org/@commitlint/format/-/format-16.2.1.tgz#6e673f710c799be78e68b2682323e04f75080d07"
-  integrity sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q==
-  dependencies:
-    "@commitlint/types" "^16.2.1"
-    chalk "^4.0.0"
-
-"@commitlint/is-ignored@^16.2.4":
-  version "16.2.4"
-  resolved "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-16.2.4.tgz#369e40a240ad5451bf2b57a80829253129d7f19b"
-  integrity sha512-Lxdq9aOAYCOOOjKi58ulbwK/oBiiKz+7Sq0+/SpFIEFwhHkIVugvDvWjh2VRBXmRC/x5lNcjDcYEwS/uYUvlYQ==
-  dependencies:
-    "@commitlint/types" "^16.2.1"
-    semver "7.3.7"
-
-"@commitlint/lint@^16.2.4":
-  version "16.2.4"
-  resolved "https://registry.npmjs.org/@commitlint/lint/-/lint-16.2.4.tgz#575f5a9d227dddfca8386253d9aff27be5b94788"
-  integrity sha512-AUDuwOxb2eGqsXbTMON3imUGkc1jRdtXrbbohiLSCSk3jFVXgJLTMaEcr39pR00N8nE9uZ+V2sYaiILByZVmxQ==
-  dependencies:
-    "@commitlint/is-ignored" "^16.2.4"
-    "@commitlint/parse" "^16.2.1"
-    "@commitlint/rules" "^16.2.4"
-    "@commitlint/types" "^16.2.1"
-
-"@commitlint/load@>6.1.1":
-  version "17.5.0"
-  resolved "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz#be45dbbb50aaf5eb7e8e940e1e0d6171d1426bab"
-  integrity sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==
-  dependencies:
-    "@commitlint/config-validator" "^17.4.4"
-    "@commitlint/execute-rule" "^17.4.0"
-    "@commitlint/resolve-extends" "^17.4.4"
-    "@commitlint/types" "^17.4.4"
-    "@types/node" "*"
-    chalk "^4.1.0"
-    cosmiconfig "^8.0.0"
-    cosmiconfig-typescript-loader "^4.0.0"
-    lodash.isplainobject "^4.0.6"
-    lodash.merge "^4.6.2"
-    lodash.uniq "^4.5.0"
-    resolve-from "^5.0.0"
-    ts-node "^10.8.1"
-    typescript "^4.6.4 || ^5.0.0"
-
-"@commitlint/load@^16.3.0":
-  version "16.3.0"
-  resolved "https://registry.npmjs.org/@commitlint/load/-/load-16.3.0.tgz#e674ccc9edefd64a2d8b82d175de81ec3bb70eca"
-  integrity sha512-3tykjV/iwbkv2FU9DG+NZ/JqmP0Nm3b7aDwgCNQhhKV5P74JAuByULkafnhn+zsFGypG1qMtI5u+BZoa9APm0A==
-  dependencies:
-    "@commitlint/config-validator" "^16.2.1"
-    "@commitlint/execute-rule" "^16.2.1"
-    "@commitlint/resolve-extends" "^16.2.1"
-    "@commitlint/types" "^16.2.1"
-    "@types/node" ">=12"
-    chalk "^4.0.0"
-    cosmiconfig "^7.0.0"
-    cosmiconfig-typescript-loader "^2.0.0"
-    lodash "^4.17.19"
-    resolve-from "^5.0.0"
-    typescript "^4.4.3"
-
-"@commitlint/message@^16.2.1":
-  version "16.2.1"
-  resolved "https://registry.npmjs.org/@commitlint/message/-/message-16.2.1.tgz#bc6a0fa446a746ac2ca78cf372e4cec48daf620d"
-  integrity sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw==
-
-"@commitlint/parse@^16.2.1":
-  version "16.2.1"
-  resolved "https://registry.npmjs.org/@commitlint/parse/-/parse-16.2.1.tgz#50b359cb711ec566d2ee236a8e4c6baca07b77c0"
-  integrity sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g==
-  dependencies:
-    "@commitlint/types" "^16.2.1"
-    conventional-changelog-angular "^5.0.11"
-    conventional-commits-parser "^3.2.2"
-
-"@commitlint/read@^16.2.1":
-  version "16.2.1"
-  resolved "https://registry.npmjs.org/@commitlint/read/-/read-16.2.1.tgz#e0539205d77cdb6879b560f95e5fb251e0c6f562"
-  integrity sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw==
-  dependencies:
-    "@commitlint/top-level" "^16.2.1"
-    "@commitlint/types" "^16.2.1"
-    fs-extra "^10.0.0"
-    git-raw-commits "^2.0.0"
-
-"@commitlint/resolve-extends@^16.2.1":
-  version "16.2.1"
-  resolved "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-16.2.1.tgz#2f7833a5a3a7aa79f508e59fcb0f1d33c45ed360"
-  integrity sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg==
-  dependencies:
-    "@commitlint/config-validator" "^16.2.1"
-    "@commitlint/types" "^16.2.1"
-    import-fresh "^3.0.0"
-    lodash "^4.17.19"
-    resolve-from "^5.0.0"
-    resolve-global "^1.0.0"
-
-"@commitlint/resolve-extends@^17.4.4":
-  version "17.4.4"
-  resolved "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz#8f931467dea8c43b9fe38373e303f7c220de6fdc"
-  integrity sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==
-  dependencies:
-    "@commitlint/config-validator" "^17.4.4"
-    "@commitlint/types" "^17.4.4"
-    import-fresh "^3.0.0"
-    lodash.mergewith "^4.6.2"
-    resolve-from "^5.0.0"
-    resolve-global "^1.0.0"
-
-"@commitlint/rules@^16.2.4":
-  version "16.2.4"
-  resolved "https://registry.npmjs.org/@commitlint/rules/-/rules-16.2.4.tgz#c2fbbf20d9d0e8fcf25690c88a27750d4a3e867b"
-  integrity sha512-rK5rNBIN2ZQNQK+I6trRPK3dWa0MtaTN4xnwOma1qxa4d5wQMQJtScwTZjTJeallFxhOgbNOgr48AMHkdounVg==
-  dependencies:
-    "@commitlint/ensure" "^16.2.1"
-    "@commitlint/message" "^16.2.1"
-    "@commitlint/to-lines" "^16.2.1"
-    "@commitlint/types" "^16.2.1"
-    execa "^5.0.0"
-
-"@commitlint/to-lines@^16.2.1":
-  version "16.2.1"
-  resolved "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-16.2.1.tgz#42d000f34dc0406f514991e86237fdab5e8affd0"
-  integrity sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ==
-
-"@commitlint/top-level@^16.2.1":
-  version "16.2.1"
-  resolved "https://registry.npmjs.org/@commitlint/top-level/-/top-level-16.2.1.tgz#bdaa53ab3d8970e0288879f1a342a8c2dfe01583"
-  integrity sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw==
-  dependencies:
-    find-up "^5.0.0"
-
-"@commitlint/types@^16.2.1":
-  version "16.2.1"
-  resolved "https://registry.npmjs.org/@commitlint/types/-/types-16.2.1.tgz#f25d373b88b01e51fc3fa44488101361945a61bd"
-  integrity sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==
-  dependencies:
-    chalk "^4.0.0"
-
-"@commitlint/types@^17.4.4":
-  version "17.4.4"
-  resolved "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz#1416df936e9aad0d6a7bbc979ecc31e55dade662"
-  integrity sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==
-  dependencies:
-    chalk "^4.1.0"
-
-"@cspotcode/source-map-support@^0.8.0":
-  version "0.8.1"
-  resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
-  integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
-  dependencies:
-    "@jridgewell/trace-mapping" "0.3.9"
-
-"@csstools/selector-specificity@^2.0.2":
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016"
-  integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==
-
-"@ctrl/tinycolor@^3.4.0":
-  version "3.6.0"
-  resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz#53fa5fe9c34faee89469e48f91d51a3766108bc8"
-  integrity sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==
-
-"@esbuild/android-arm64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
-  integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==
-
-"@esbuild/android-arm@0.15.18":
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz#266d40b8fdcf87962df8af05b76219bc786b4f80"
-  integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==
-
-"@esbuild/android-arm@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d"
-  integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==
-
-"@esbuild/android-x64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1"
-  integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==
-
-"@esbuild/darwin-arm64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276"
-  integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==
-
-"@esbuild/darwin-x64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb"
-  integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==
-
-"@esbuild/freebsd-arm64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2"
-  integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==
-
-"@esbuild/freebsd-x64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4"
-  integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==
-
-"@esbuild/linux-arm64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb"
-  integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==
-
-"@esbuild/linux-arm@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a"
-  integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==
-
-"@esbuild/linux-ia32@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a"
-  integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==
-
-"@esbuild/linux-loong64@0.14.54":
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028"
-  integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==
-
-"@esbuild/linux-loong64@0.15.18":
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz#128b76ecb9be48b60cf5cfc1c63a4f00691a3239"
-  integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==
-
-"@esbuild/linux-loong64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72"
-  integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==
-
-"@esbuild/linux-mips64el@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289"
-  integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==
-
-"@esbuild/linux-ppc64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7"
-  integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==
-
-"@esbuild/linux-riscv64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09"
-  integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==
-
-"@esbuild/linux-s390x@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829"
-  integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==
-
-"@esbuild/linux-x64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4"
-  integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==
-
-"@esbuild/netbsd-x64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462"
-  integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==
-
-"@esbuild/openbsd-x64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691"
-  integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==
-
-"@esbuild/sunos-x64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273"
-  integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==
-
-"@esbuild/win32-arm64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f"
-  integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==
-
-"@esbuild/win32-ia32@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03"
-  integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==
-
-"@esbuild/win32-x64@0.17.19":
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
-  integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
-
-"@eslint-community/eslint-utils@^4.2.0":
-  version "4.4.0"
-  resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
-  integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
-  dependencies:
-    eslint-visitor-keys "^3.3.0"
-
-"@eslint-community/regexpp@^4.4.0":
-  version "4.5.1"
-  resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884"
-  integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==
-
-"@eslint/eslintrc@^2.0.3":
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331"
-  integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==
-  dependencies:
-    ajv "^6.12.4"
-    debug "^4.3.2"
-    espree "^9.5.2"
-    globals "^13.19.0"
-    ignore "^5.2.0"
-    import-fresh "^3.2.1"
-    js-yaml "^4.1.0"
-    minimatch "^3.1.2"
-    strip-json-comments "^3.1.1"
-
-"@eslint/js@8.40.0":
-  version "8.40.0"
-  resolved "https://registry.npmjs.org/@eslint/js/-/js-8.40.0.tgz#3ba73359e11f5a7bd3e407f70b3528abfae69cec"
-  integrity sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==
-
-"@humanwhocodes/config-array@^0.11.8":
-  version "0.11.8"
-  resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9"
-  integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==
-  dependencies:
-    "@humanwhocodes/object-schema" "^1.2.1"
-    debug "^4.1.1"
-    minimatch "^3.0.5"
-
-"@humanwhocodes/module-importer@^1.0.1":
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
-  integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
-
-"@humanwhocodes/object-schema@^1.2.1":
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
-  integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
-
-"@hutson/parse-repository-url@^3.0.0":
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340"
-  integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==
-
-"@iconify/iconify@2.1.2":
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-2.1.2.tgz#978e8f08c3b834816c82ae2933b3a70f143f7685"
-  integrity sha512-QcUzFeEWkE/mW+BVtEGmcWATClcCOIJFiYUD/PiCWuTcdEA297o8D4oN6Ra44WrNOHu1wqNW4J0ioaDIiqaFOQ==
-  dependencies:
-    cross-fetch "^3.1.5"
-
-"@iconify/iconify@>=2.0.0-rc.6":
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-3.1.0.tgz#801a7e85db914ed183df42218f6771485f773065"
-  integrity sha512-Xyz+N5NSIiHj7G228CvFUcMKBz3BbpUTAuPnK2ariEUM7891F8ysD6Gh8782f3En1U4Qz70F0tzuyF8BhCfTQg==
-  dependencies:
-    "@iconify/types" "^2.0.0"
-
-"@iconify/iconify@^2.2.1":
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-2.2.1.tgz#03ad4d8554c6f2d7741d3b9440115efa0c707b37"
-  integrity sha512-WJzw+3iicrF/tbjbxxRinSgy5FHdJoz/egTqwi3xCDkNRJPq482RX1iyaWrjNuY2vMNSPkQMuqHvZDXgA+WnwQ==
-
-"@iconify/json@^2.1.30":
-  version "2.2.65"
-  resolved "https://registry.npmjs.org/@iconify/json/-/json-2.2.65.tgz#6a597c29f71df3e06744706b9dc8d17ad19012d8"
-  integrity sha512-yrYYpIQfCRIHH8uyl/uj9TEhasDeqT3xzScSSZgyYewCduTG3FmwdSoYSC61upkTERcGgrZeSjXhXLQaZD2QyQ==
-  dependencies:
-    "@iconify/types" "*"
-    pathe "^1.0.0"
-
-"@iconify/types@*", "@iconify/types@^2.0.0":
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57"
-  integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==
-
-"@intlify/core-base@9.2.2":
-  version "9.2.2"
-  resolved "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz#5353369b05cc9fe35cab95fe20afeb8a4481f939"
-  integrity sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==
-  dependencies:
-    "@intlify/devtools-if" "9.2.2"
-    "@intlify/message-compiler" "9.2.2"
-    "@intlify/shared" "9.2.2"
-    "@intlify/vue-devtools" "9.2.2"
-
-"@intlify/devtools-if@9.2.2":
-  version "9.2.2"
-  resolved "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz#b13d9ac4b4e2fe6d2e7daa556517a8061fe8bd39"
-  integrity sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==
-  dependencies:
-    "@intlify/shared" "9.2.2"
-
-"@intlify/message-compiler@9.2.2":
-  version "9.2.2"
-  resolved "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz#e42ab6939b8ae5b3d21faf6a44045667a18bba1c"
-  integrity sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==
-  dependencies:
-    "@intlify/shared" "9.2.2"
-    source-map "0.6.1"
-
-"@intlify/shared@9.2.2":
-  version "9.2.2"
-  resolved "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz#5011be9ca2b4ab86f8660739286e2707f9abb4a5"
-  integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==
-
-"@intlify/vue-devtools@9.2.2":
-  version "9.2.2"
-  resolved "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz#b95701556daf7ebb3a2d45aa3ae9e6415aed8317"
-  integrity sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==
-  dependencies:
-    "@intlify/core-base" "9.2.2"
-    "@intlify/shared" "9.2.2"
-
-"@istanbuljs/load-nyc-config@^1.0.0":
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
-  integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
-  dependencies:
-    camelcase "^5.3.1"
-    find-up "^4.1.0"
-    get-package-type "^0.1.0"
-    js-yaml "^3.13.1"
-    resolve-from "^5.0.0"
-
-"@istanbuljs/schema@^0.1.2":
-  version "0.1.3"
-  resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
-  integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
-
-"@jeecg/online@3.4.4-RC":
-  version "3.4.4-RC"
-  resolved "https://registry.npmjs.org/@jeecg/online/-/online-3.4.4-RC.tgz#bc669c999bf4e95d7588071e5bffbbc1deafecfb"
-  integrity sha512-EjibCo++GszsWuLn3+kqaxt12Zim7f0XWSiHzypef4aAqBKYDnG30Z5K3j5W1g4g22fjVUkrb1rQ8rSLTlPdBw==
-
-"@jest/console@^27.5.1":
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba"
-  integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==
-  dependencies:
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-    chalk "^4.0.0"
-    jest-message-util "^27.5.1"
-    jest-util "^27.5.1"
-    slash "^3.0.0"
-
-"@jest/core@^27.5.1":
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626"
-  integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==
-  dependencies:
-    "@jest/console" "^27.5.1"
-    "@jest/reporters" "^27.5.1"
-    "@jest/test-result" "^27.5.1"
-    "@jest/transform" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-    ansi-escapes "^4.2.1"
-    chalk "^4.0.0"
-    emittery "^0.8.1"
-    exit "^0.1.2"
-    graceful-fs "^4.2.9"
-    jest-changed-files "^27.5.1"
-    jest-config "^27.5.1"
-    jest-haste-map "^27.5.1"
-    jest-message-util "^27.5.1"
-    jest-regex-util "^27.5.1"
-    jest-resolve "^27.5.1"
-    jest-resolve-dependencies "^27.5.1"
-    jest-runner "^27.5.1"
-    jest-runtime "^27.5.1"
-    jest-snapshot "^27.5.1"
-    jest-util "^27.5.1"
-    jest-validate "^27.5.1"
-    jest-watcher "^27.5.1"
-    micromatch "^4.0.4"
-    rimraf "^3.0.0"
-    slash "^3.0.0"
-    strip-ansi "^6.0.0"
-
-"@jest/environment@^27.5.1":
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74"
-  integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==
-  dependencies:
-    "@jest/fake-timers" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-    jest-mock "^27.5.1"
-
-"@jest/fake-timers@^27.5.1":
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74"
-  integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==
-  dependencies:
-    "@jest/types" "^27.5.1"
-    "@sinonjs/fake-timers" "^8.0.1"
-    "@types/node" "*"
-    jest-message-util "^27.5.1"
-    jest-mock "^27.5.1"
-    jest-util "^27.5.1"
-
-"@jest/globals@^27.5.1":
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b"
-  integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==
-  dependencies:
-    "@jest/environment" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    expect "^27.5.1"
-
-"@jest/reporters@^27.5.1":
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04"
-  integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==
-  dependencies:
-    "@bcoe/v8-coverage" "^0.2.3"
-    "@jest/console" "^27.5.1"
-    "@jest/test-result" "^27.5.1"
-    "@jest/transform" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-    chalk "^4.0.0"
-    collect-v8-coverage "^1.0.0"
-    exit "^0.1.2"
-    glob "^7.1.2"
-    graceful-fs "^4.2.9"
-    istanbul-lib-coverage "^3.0.0"
-    istanbul-lib-instrument "^5.1.0"
-    istanbul-lib-report "^3.0.0"
-    istanbul-lib-source-maps "^4.0.0"
-    istanbul-reports "^3.1.3"
-    jest-haste-map "^27.5.1"
-    jest-resolve "^27.5.1"
-    jest-util "^27.5.1"
-    jest-worker "^27.5.1"
-    slash "^3.0.0"
-    source-map "^0.6.0"
-    string-length "^4.0.1"
-    terminal-link "^2.0.0"
-    v8-to-istanbul "^8.1.0"
-
-"@jest/source-map@^27.5.1":
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf"
-  integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==
-  dependencies:
-    callsites "^3.0.0"
-    graceful-fs "^4.2.9"
-    source-map "^0.6.0"
-
-"@jest/test-result@^27.5.1":
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb"
-  integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==
-  dependencies:
-    "@jest/console" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/istanbul-lib-coverage" "^2.0.0"
-    collect-v8-coverage "^1.0.0"
-
-"@jest/test-sequencer@^27.5.1":
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b"
-  integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==
-  dependencies:
-    "@jest/test-result" "^27.5.1"
-    graceful-fs "^4.2.9"
-    jest-haste-map "^27.5.1"
-    jest-runtime "^27.5.1"
-
-"@jest/transform@^27.5.1":
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409"
-  integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==
-  dependencies:
-    "@babel/core" "^7.1.0"
-    "@jest/types" "^27.5.1"
-    babel-plugin-istanbul "^6.1.1"
-    chalk "^4.0.0"
-    convert-source-map "^1.4.0"
-    fast-json-stable-stringify "^2.0.0"
-    graceful-fs "^4.2.9"
-    jest-haste-map "^27.5.1"
-    jest-regex-util "^27.5.1"
-    jest-util "^27.5.1"
-    micromatch "^4.0.4"
-    pirates "^4.0.4"
-    slash "^3.0.0"
-    source-map "^0.6.1"
-    write-file-atomic "^3.0.0"
-
-"@jest/types@^27.5.1":
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80"
-  integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==
-  dependencies:
-    "@types/istanbul-lib-coverage" "^2.0.0"
-    "@types/istanbul-reports" "^3.0.0"
-    "@types/node" "*"
-    "@types/yargs" "^16.0.0"
-    chalk "^4.0.0"
-
-"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
-  version "0.3.3"
-  resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
-  integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
-  dependencies:
-    "@jridgewell/set-array" "^1.0.1"
-    "@jridgewell/sourcemap-codec" "^1.4.10"
-    "@jridgewell/trace-mapping" "^0.3.9"
-
-"@jridgewell/resolve-uri@3.1.0":
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
-  integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
-
-"@jridgewell/resolve-uri@^3.0.3":
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
-  integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
-
-"@jridgewell/set-array@^1.0.1":
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
-  integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
-
-"@jridgewell/source-map@^0.3.2":
-  version "0.3.3"
-  resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda"
-  integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==
-  dependencies:
-    "@jridgewell/gen-mapping" "^0.3.0"
-    "@jridgewell/trace-mapping" "^0.3.9"
-
-"@jridgewell/sourcemap-codec@1.4.14":
-  version "1.4.14"
-  resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
-  integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
-
-"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13":
-  version "1.4.15"
-  resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
-  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
-
-"@jridgewell/trace-mapping@0.3.9":
-  version "0.3.9"
-  resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
-  integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
-  dependencies:
-    "@jridgewell/resolve-uri" "^3.0.3"
-    "@jridgewell/sourcemap-codec" "^1.4.10"
-
-"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
-  version "0.3.18"
-  resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
-  integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
-  dependencies:
-    "@jridgewell/resolve-uri" "3.1.0"
-    "@jridgewell/sourcemap-codec" "1.4.14"
-
-"@logicflow/core@^1.1.13", "@logicflow/core@^1.2.6":
-  version "1.2.6"
-  resolved "https://registry.npmjs.org/@logicflow/core/-/core-1.2.6.tgz#6ed5db7b2034de970d3d9eb92d0ef809b7e69b11"
-  integrity sha512-APTx8fxW5id3DJp9L241h3pZwGxea8qjaU5ajAwiaRWR488P28aHY5M8WKzHpgnKNJbn5uUm6fhaGWY7MUDT0Q==
-  dependencies:
-    "@types/mousetrap" "^1.6.4"
-    mousetrap "^1.6.5"
-    preact "^10.4.8"
-
-"@logicflow/extension@^1.1.13":
-  version "1.2.6"
-  resolved "https://registry.npmjs.org/@logicflow/extension/-/extension-1.2.6.tgz#b6fe3927ff6dbf841467c90ae4884e3154e54933"
-  integrity sha512-EstPKffJmUh/8rbR/a0EVMtJmnSTxLb080HPBy341Ii4ReMXb5Rg77nopamlqbS/cIeBvhn5BtHtl4vsyQqjVA==
-  dependencies:
-    "@logicflow/core" "^1.2.6"
-    ids "^1.0.0"
-    jest "27.5.1"
-    lodash-es "^4.17.21"
-    preact "^10.4.8"
-
-"@nodelib/fs.scandir@2.1.5":
-  version "2.1.5"
-  resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
-  integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
-  dependencies:
-    "@nodelib/fs.stat" "2.0.5"
-    run-parallel "^1.1.9"
-
-"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
-  version "2.0.5"
-  resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
-  integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
-
-"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
-  version "1.2.8"
-  resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
-  integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
-  dependencies:
-    "@nodelib/fs.scandir" "2.1.5"
-    fastq "^1.6.0"
-
-"@octokit/auth-token@^3.0.0":
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz#ce7e48a3166731f26068d7a7a7996b5da58cbe0c"
-  integrity sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==
-  dependencies:
-    "@octokit/types" "^9.0.0"
-
-"@octokit/core@^4.1.0":
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz#8c253ba9605aca605bc46187c34fcccae6a96648"
-  integrity sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==
-  dependencies:
-    "@octokit/auth-token" "^3.0.0"
-    "@octokit/graphql" "^5.0.0"
-    "@octokit/request" "^6.0.0"
-    "@octokit/request-error" "^3.0.0"
-    "@octokit/types" "^9.0.0"
-    before-after-hook "^2.2.0"
-    universal-user-agent "^6.0.0"
-
-"@octokit/endpoint@^7.0.0":
-  version "7.0.5"
-  resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz#2bb2a911c12c50f10014183f5d596ce30ac67dd1"
-  integrity sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==
-  dependencies:
-    "@octokit/types" "^9.0.0"
-    is-plain-object "^5.0.0"
-    universal-user-agent "^6.0.0"
-
-"@octokit/graphql@^5.0.0":
-  version "5.0.5"
-  resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2"
-  integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==
-  dependencies:
-    "@octokit/request" "^6.0.0"
-    "@octokit/types" "^9.0.0"
-    universal-user-agent "^6.0.0"
-
-"@octokit/openapi-types@^17.1.2":
-  version "17.1.2"
-  resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.1.2.tgz#b7bc1cc5d3581adac9dce197a21f0e5f2ceaabf1"
-  integrity sha512-OaS7Ol4Y+U50PbejfzQflGWRMxO04nYWO5ZBv6JerqMKE2WS/tI9VoVDDPXHBlRMGG2fOdKwtVGlFfc7AVIstw==
-
-"@octokit/plugin-paginate-rest@^6.1.0":
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.0.tgz#3522ef5c2712436332655085b197eafe4ac7afc4"
-  integrity sha512-5T4iXjJdYCVA1rdWS1C+uZV9AvtZY9QgTG74kFiSFVj94dZXowyi/YK8f4SGjZaL69jZthGlBaDKRdCMCF9log==
-  dependencies:
-    "@octokit/types" "^9.2.2"
-
-"@octokit/plugin-request-log@^1.0.4":
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85"
-  integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==
-
-"@octokit/plugin-rest-endpoint-methods@^7.1.0":
-  version "7.1.0"
-  resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.1.0.tgz#7f3f4fac10bf72f8c5cd0c343252cd5f73dbf2d8"
-  integrity sha512-SWwz/hc47GaKJR6BlJI4WIVRodbAFRvrR0QRPSoPMs7krb7anYPML3psg+ThEz/kcwOdSNh/oA8qThi/Wvs4Fw==
-  dependencies:
-    "@octokit/types" "^9.2.2"
-    deprecation "^2.3.1"
-
-"@octokit/request-error@^3.0.0":
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69"
-  integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==
-  dependencies:
-    "@octokit/types" "^9.0.0"
-    deprecation "^2.0.0"
-    once "^1.4.0"
-
-"@octokit/request@^6.0.0":
-  version "6.2.3"
-  resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz#76d5d6d44da5c8d406620a4c285d280ae310bdb4"
-  integrity sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==
-  dependencies:
-    "@octokit/endpoint" "^7.0.0"
-    "@octokit/request-error" "^3.0.0"
-    "@octokit/types" "^9.0.0"
-    is-plain-object "^5.0.0"
-    node-fetch "^2.6.7"
-    universal-user-agent "^6.0.0"
-
-"@octokit/rest@^19.0.5":
-  version "19.0.8"
-  resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.8.tgz#db1e67cb66018859fde2c6c3a49eb5c55dc04d92"
-  integrity sha512-/PKrzqn+zDzXKwBMwLI2IKrvk8yv8cedJOdcmxrjR3gmu6UIzURhP5oQj+4qkn7+uQi1gg7QqV4SqlaQ1HYW1Q==
-  dependencies:
-    "@octokit/core" "^4.1.0"
-    "@octokit/plugin-paginate-rest" "^6.1.0"
-    "@octokit/plugin-request-log" "^1.0.4"
-    "@octokit/plugin-rest-endpoint-methods" "^7.1.0"
-
-"@octokit/types@^9.0.0", "@octokit/types@^9.2.2":
-  version "9.2.2"
-  resolved "https://registry.npmjs.org/@octokit/types/-/types-9.2.2.tgz#d111d33928f288f48083bfe49d8a9a5945e67db1"
-  integrity sha512-9BjDxjgQIvCjNWZsbqyH5QC2Yni16oaE6xL+8SUBMzcYPF4TGQBXGA97Cl3KceK9mwiNMb1mOYCz6FbCCLEL+g==
-  dependencies:
-    "@octokit/openapi-types" "^17.1.2"
-
-"@purge-icons/core@^0.8.0":
-  version "0.8.0"
-  resolved "https://registry.npmjs.org/@purge-icons/core/-/core-0.8.0.tgz#4b7394cad2bc63404095254a22551a928df8e3f6"
-  integrity sha512-8L6hP1U9XQO5B7kvquVJ5N7jzFvO0LZLXhBCjUQzzJzi42i6MAUanVKROApqbBuh21o9tmPwvNUg0xPe/uftRA==
-  dependencies:
-    "@iconify/iconify" "2.1.2"
-    axios "^0.26.0"
-    debug "^4.3.3"
-    fast-glob "^3.2.11"
-    fs-extra "^10.0.1"
-
-"@purge-icons/generated@^0.8.1":
-  version "0.8.1"
-  resolved "https://registry.npmjs.org/@purge-icons/generated/-/generated-0.8.1.tgz#15544a9c9b2436e436d884828077f9d88df660e7"
-  integrity sha512-rIExGA33EGKEToqtc8WfpboaR7or1XRp+KV1Y5v/P0Rq7G5Me95DmP3ow/MpG7ql+XZ9xPzyS2naGRx5358+6Q==
-  dependencies:
-    "@iconify/iconify" ">=2.0.0-rc.6"
-
-"@rollup/plugin-babel@^5.2.0":
-  version "5.3.1"
-  resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
-  integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==
-  dependencies:
-    "@babel/helper-module-imports" "^7.10.4"
-    "@rollup/pluginutils" "^3.1.0"
-
-"@rollup/plugin-node-resolve@^11.2.1":
-  version "11.2.1"
-  resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60"
-  integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==
-  dependencies:
-    "@rollup/pluginutils" "^3.1.0"
-    "@types/resolve" "1.17.1"
-    builtin-modules "^3.1.0"
-    deepmerge "^4.2.2"
-    is-module "^1.0.0"
-    resolve "^1.19.0"
-
-"@rollup/plugin-replace@^2.4.1":
-  version "2.4.2"
-  resolved "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a"
-  integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==
-  dependencies:
-    "@rollup/pluginutils" "^3.1.0"
-    magic-string "^0.25.7"
-
-"@rollup/pluginutils@^3.1.0":
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"
-  integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
-  dependencies:
-    "@types/estree" "0.0.39"
-    estree-walker "^1.0.1"
-    picomatch "^2.2.2"
-
-"@rollup/pluginutils@^4.1.2", "@rollup/pluginutils@^4.2.0":
-  version "4.2.1"
-  resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d"
-  integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==
-  dependencies:
-    estree-walker "^2.0.1"
-    picomatch "^2.2.2"
-
-"@rys-fe/vite-plugin-theme@^0.8.6":
-  version "0.8.6"
-  resolved "https://registry.npmjs.org/@rys-fe/vite-plugin-theme/-/vite-plugin-theme-0.8.6.tgz#a1863f388ebf0445a845ee0cf946f012c9f79094"
-  integrity sha512-9j6yMhNRCDxv4Wpimo0EDZf/KU5FgJtjMPVYBaFv4SPClLOEx5kkpcRuDrVBaB4IzM1qizRlxUK4jd9Klxyqig==
-  dependencies:
-    "@types/node" "^14.17.1"
-    "@types/tinycolor2" "^1.4.2"
-    chalk "^4.1.1"
-    clean-css "^5.1.2"
-    debug "^4.3.2"
-    esbuild "^0.11.23"
-    esbuild-plugin-alias "^0.1.2"
-    tinycolor2 "^1.4.2"
-
-"@simonwep/pickr@~1.8.0":
-  version "1.8.2"
-  resolved "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.8.2.tgz#96dc86675940d7cad63d69c22083dd1cbb9797cb"
-  integrity sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==
-  dependencies:
-    core-js "^3.15.1"
-    nanopop "^2.1.0"
-
-"@sindresorhus/is@^0.7.0":
-  version "0.7.0"
-  resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd"
-  integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==
-
-"@sinonjs/commons@^1.7.0":
-  version "1.8.6"
-  resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9"
-  integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==
-  dependencies:
-    type-detect "4.0.8"
-
-"@sinonjs/fake-timers@^8.0.1":
-  version "8.1.0"
-  resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7"
-  integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==
-  dependencies:
-    "@sinonjs/commons" "^1.7.0"
-
-"@surma/rollup-plugin-off-main-thread@^2.2.3":
-  version "2.2.3"
-  resolved "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053"
-  integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==
-  dependencies:
-    ejs "^3.1.6"
-    json5 "^2.2.0"
-    magic-string "^0.25.0"
-    string.prototype.matchall "^4.0.6"
-
-"@tootallnate/once@1":
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
-  integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
-
-"@trysound/sax@0.2.0":
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
-  integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
-
-"@tsconfig/node10@^1.0.7":
-  version "1.0.9"
-  resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
-  integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
-
-"@tsconfig/node12@^1.0.7":
-  version "1.0.11"
-  resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
-  integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
-
-"@tsconfig/node14@^1.0.0":
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
-  integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
-
-"@tsconfig/node16@^1.0.2":
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
-  integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
-
-"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14":
-  version "7.20.0"
-  resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891"
-  integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==
-  dependencies:
-    "@babel/parser" "^7.20.7"
-    "@babel/types" "^7.20.7"
-    "@types/babel__generator" "*"
-    "@types/babel__template" "*"
-    "@types/babel__traverse" "*"
-
-"@types/babel__generator@*":
-  version "7.6.4"
-  resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7"
-  integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==
-  dependencies:
-    "@babel/types" "^7.0.0"
-
-"@types/babel__template@*":
-  version "7.4.1"
-  resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969"
-  integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==
-  dependencies:
-    "@babel/parser" "^7.1.0"
-    "@babel/types" "^7.0.0"
-
-"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
-  version "7.18.5"
-  resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.5.tgz#c107216842905afafd3b6e774f6f935da6f5db80"
-  integrity sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==
-  dependencies:
-    "@babel/types" "^7.3.0"
-
-"@types/codemirror@^5.60.5":
-  version "5.60.7"
-  resolved "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.7.tgz#efbb78e5e79f90c6762c2127c02096648e600808"
-  integrity sha512-QXIC+RPzt/1BGSuD6iFn6UMC9TDp+9hkOANYNPVsjjrDdzKphfRkwQDKGp2YaC54Yhz0g6P5uYTCCibZZEiMAA==
-  dependencies:
-    "@types/tern" "*"
-
-"@types/crypto-js@^4.1.1":
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.1.1.tgz#602859584cecc91894eb23a4892f38cfa927890d"
-  integrity sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==
-
-"@types/estree@*":
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
-  integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
-
-"@types/estree@0.0.39":
-  version "0.0.39"
-  resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
-  integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
-
-"@types/fs-extra@^9.0.13":
-  version "9.0.13"
-  resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
-  integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==
-  dependencies:
-    "@types/node" "*"
-
-"@types/glob@^7.1.1":
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
-  integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
-  dependencies:
-    "@types/minimatch" "*"
-    "@types/node" "*"
-
-"@types/graceful-fs@^4.1.2":
-  version "4.1.6"
-  resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae"
-  integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==
-  dependencies:
-    "@types/node" "*"
-
-"@types/imagemin-gifsicle@^7.0.1":
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz#0844a96a338438bb98f77b298acf217260d0d409"
-  integrity sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==
-  dependencies:
-    "@types/imagemin" "*"
-
-"@types/imagemin-jpegtran@^5.0.1":
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/@types/imagemin-jpegtran/-/imagemin-jpegtran-5.0.1.tgz#798b2a66cd49b7ec6550fb733c05a5b8755f211f"
-  integrity sha512-Ps8kbm+DUFte/Eln/tUdEvpMWHKFCsQKlV8n+RN50zqWqL/7QhfLxR0ymitP9wa90P6+rkbJlintBNPkVR+B/Q==
-  dependencies:
-    "@types/imagemin" "*"
-
-"@types/imagemin-mozjpeg@^8.0.1":
-  version "8.0.1"
-  resolved "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz#eaf2f07aea3a317a1710ef2c763ec53f3bcfcdc5"
-  integrity sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==
-  dependencies:
-    "@types/imagemin" "*"
-
-"@types/imagemin-optipng@^5.2.1":
-  version "5.2.1"
-  resolved "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz#6ef033f3b15d281009de4e0bd2cadf6cbd2e741a"
-  integrity sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==
-  dependencies:
-    "@types/imagemin" "*"
-
-"@types/imagemin-svgo@^10.0.0":
-  version "10.0.2"
-  resolved "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-10.0.2.tgz#f0fa51cbc70688dae1ac1150e4f14f45cba73108"
-  integrity sha512-F4enqbl7eE0JhrwGdJSMKFDn1j1Pk8JsCvnjA5iJKSi+IK3sd4CronabzVmOuEkz663tV7FsRQp1f7SP3zmIaA==
-  dependencies:
-    "@types/imagemin" "*"
-    "@types/svgo" "2"
-
-"@types/imagemin-webp@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/@types/imagemin-webp/-/imagemin-webp-7.0.0.tgz#8fa322c9a2f99a3b57d459aec6e80e06ce050afa"
-  integrity sha512-Lb1tjy2vEU7qYwM5iFB9o5k0J3mIpulw6Yftset5LLLugPu7+C16rLYRP1WEwr4QM8AeJZRjC2BGBLd9lGvRhQ==
-  dependencies:
-    "@types/imagemin" "*"
-
-"@types/imagemin@*":
-  version "8.0.1"
-  resolved "https://registry.npmjs.org/@types/imagemin/-/imagemin-8.0.1.tgz#83795a10cdbe31a42ab304a7f8425588212c6a81"
-  integrity sha512-DSpM//dRPzme7doePGkmR1uoquHi0h0ElaA5qFnxHECfFcB8z/jhMI8eqmxWNpHn9ZG18p4PC918sZLhR0cr5A==
-  dependencies:
-    "@types/node" "*"
-
-"@types/imagemin@^7.0.1":
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.1.tgz#11ca1e65ccb3871a8469d9b23033b95d3838eda0"
-  integrity sha512-xEn5+M3lDBtI3JxLy6eU3ksoVurygnlG7OYhTqJfGGP4PcvYnfn+IABCmMve7ziM/SneHDm5xgJFKC8hCYPicw==
-  dependencies:
-    "@types/node" "*"
-
-"@types/inquirer@^8.2.1":
-  version "8.2.6"
-  resolved "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.6.tgz#abd41a5fb689c7f1acb12933d787d4262a02a0ab"
-  integrity sha512-3uT88kxg8lNzY8ay2ZjP44DKcRaTGztqeIvN2zHvhzIBH/uAPaL75aBtdNRKbA7xXoMbBt5kX0M00VKAnfOYlA==
-  dependencies:
-    "@types/through" "*"
-    rxjs "^7.2.0"
-
-"@types/intro.js@^3.0.2":
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/@types/intro.js/-/intro.js-3.0.2.tgz#cbf9b69f055b77582cc2cebe236e9a405b30efbd"
-  integrity sha512-kow8REgIIG42atN9vAaIdpEqVzj6WzV9m0PII8oce+an4Lc3eyfQF32/FbabbGmfWuF7TceTdd+gh74kOrXkPw==
-
-"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
-  integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==
-
-"@types/istanbul-lib-report@*":
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
-  integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
-  dependencies:
-    "@types/istanbul-lib-coverage" "*"
-
-"@types/istanbul-reports@^3.0.0":
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"
-  integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==
-  dependencies:
-    "@types/istanbul-lib-report" "*"
-
-"@types/jest@^27.0.2":
-  version "27.5.2"
-  resolved "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c"
-  integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==
-  dependencies:
-    jest-matcher-utils "^27.0.0"
-    pretty-format "^27.0.0"
-
-"@types/json-schema@^7.0.9":
-  version "7.0.11"
-  resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
-  integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
-
-"@types/lodash-es@^4.17.6":
-  version "4.17.7"
-  resolved "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.7.tgz#22edcae9f44aff08546e71db8925f05b33c7cc40"
-  integrity sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==
-  dependencies:
-    "@types/lodash" "*"
-
-"@types/lodash@*":
-  version "4.14.194"
-  resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz#b71eb6f7a0ff11bff59fc987134a093029258a76"
-  integrity sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==
-
-"@types/minimatch@*":
-  version "5.1.2"
-  resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
-  integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==
-
-"@types/minimatch@^3.0.3":
-  version "3.0.5"
-  resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
-  integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==
-
-"@types/minimist@^1.2.0":
-  version "1.2.2"
-  resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
-  integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
-
-"@types/mockjs@^1.0.4", "@types/mockjs@^1.0.6":
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/@types/mockjs/-/mockjs-1.0.7.tgz#3a0f1bc3f286ae2891d9592422529268665c88d3"
-  integrity sha512-OCxXz6hEaJOVpRwuJMiVY5a6LtJcih+br9gwB/Q8ooOBikvk5FpBQ31OlNimXo3EqKha1Z7PFBni+q9m+8NCWg==
-
-"@types/mousetrap@^1.6.4":
-  version "1.6.11"
-  resolved "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.11.tgz#ef9620160fdcefcb85bccda8aaa3e84d7429376d"
-  integrity sha512-F0oAily9Q9QQpv9JKxKn0zMKfOo36KHCW7myYsmUyf2t0g+sBTbG3UleTPoguHdE1z3GLFr3p7/wiOio52QFjQ==
-
-"@types/node@*", "@types/node@>=12":
-  version "20.1.5"
-  resolved "https://registry.npmjs.org/@types/node/-/node-20.1.5.tgz#e94b604c67fc408f215fcbf3bd84d4743bf7f710"
-  integrity sha512-IvGD1CD/nego63ySR7vrAKEX3AJTcmrAN2kn+/sDNLi1Ff5kBzDeEdqWDplK+0HAEoLYej137Sk0cUU8OLOlMg==
-
-"@types/node@^14.17.1":
-  version "14.18.47"
-  resolved "https://registry.npmjs.org/@types/node/-/node-14.18.47.tgz#89a56b05804d136cb99bf2f823bb00814a889aae"
-  integrity sha512-OuJi8bIng4wYHHA3YpKauL58dZrPxro3d0tabPHyiNF8rKfGKuVfr83oFlPLmKri1cX+Z3cJP39GXmnqkP11Gw==
-
-"@types/node@^17.0.25":
-  version "17.0.45"
-  resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
-  integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
-
-"@types/normalize-package-data@^2.4.0":
-  version "2.4.1"
-  resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
-  integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
-
-"@types/nprogress@^0.2.0":
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.0.tgz#86c593682d4199212a0509cc3c4d562bbbd6e45f"
-  integrity sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==
-
-"@types/parse-json@^4.0.0":
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
-  integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
-
-"@types/pinyin@^2.10.0":
-  version "2.10.0"
-  resolved "https://registry.npmjs.org/@types/pinyin/-/pinyin-2.10.0.tgz#074964ec2f777d632e221f927a975bb7d51ded9a"
-  integrity sha512-YLty6FPYiBgxNbQNaTRJquvflRdG026jjOpjNXR7HdGEJPGtmPBp1x9LkWePCNA/ClaTT0hYem080TbRCMLbew==
-
-"@types/prettier@^2.1.5":
-  version "2.7.2"
-  resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0"
-  integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==
-
-"@types/qrcode@^1.4.2":
-  version "1.5.0"
-  resolved "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.0.tgz#6a98fe9a9a7b2a9a3167b6dde17eff999eabe40b"
-  integrity sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==
-  dependencies:
-    "@types/node" "*"
-
-"@types/qs@^6.9.7":
-  version "6.9.7"
-  resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
-  integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
-
-"@types/resolve@1.17.1":
-  version "1.17.1"
-  resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
-  integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==
-  dependencies:
-    "@types/node" "*"
-
-"@types/semver@^7.3.12":
-  version "7.5.0"
-  resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a"
-  integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==
-
-"@types/showdown@^1.9.4":
-  version "1.9.4"
-  resolved "https://registry.npmjs.org/@types/showdown/-/showdown-1.9.4.tgz#5385adf34143abad9309561661fa6c781d2ab962"
-  integrity sha512-50ehC3IAijfkvoNqmQ+VL73S7orOxmAK8ljQAFBv8o7G66lAZyxQj1L3BAv2dD86myLXI+sgKP1kcxAaxW356w==
-
-"@types/sortablejs@^1.10.7":
-  version "1.15.1"
-  resolved "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.1.tgz#123abafbe936f754fee5eb5b49009ce1f1075aa5"
-  integrity sha512-g/JwBNToh6oCTAwNS8UGVmjO7NLDKsejVhvE4x1eWiPTC3uCuNsa/TD4ssvX3du+MLiM+SHPNDuijp8y76JzLQ==
-
-"@types/stack-utils@^2.0.0":
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
-  integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
-
-"@types/svgo@2", "@types/svgo@^2.6.1":
-  version "2.6.4"
-  resolved "https://registry.npmjs.org/@types/svgo/-/svgo-2.6.4.tgz#b7298fc1dd687539fd63fc818b00146d96e68836"
-  integrity sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==
-  dependencies:
-    "@types/node" "*"
-
-"@types/tern@*":
-  version "0.23.4"
-  resolved "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb"
-  integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==
-  dependencies:
-    "@types/estree" "*"
-
-"@types/through@*":
-  version "0.0.30"
-  resolved "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895"
-  integrity sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==
-  dependencies:
-    "@types/node" "*"
-
-"@types/tinycolor2@^1.4.2":
-  version "1.4.3"
-  resolved "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.3.tgz#ed4a0901f954b126e6a914b4839c77462d56e706"
-  integrity sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==
-
-"@types/trusted-types@^2.0.2":
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311"
-  integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==
-
-"@types/web-bluetooth@^0.0.14":
-  version "0.0.14"
-  resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz#94e175b53623384bff1f354cdb3197a8d63cdbe5"
-  integrity sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A==
-
-"@types/yargs-parser@*":
-  version "21.0.0"
-  resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
-  integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==
-
-"@types/yargs@^16.0.0":
-  version "16.0.5"
-  resolved "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3"
-  integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==
-  dependencies:
-    "@types/yargs-parser" "*"
-
-"@typescript-eslint/eslint-plugin@^5.20.0":
-  version "5.59.6"
-  resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.6.tgz#a350faef1baa1e961698240f922d8de1761a9e2b"
-  integrity sha512-sXtOgJNEuRU5RLwPUb1jxtToZbgvq3M6FPpY4QENxoOggK+UpTxUBpj6tD8+Qh2g46Pi9We87E+eHnUw8YcGsw==
-  dependencies:
-    "@eslint-community/regexpp" "^4.4.0"
-    "@typescript-eslint/scope-manager" "5.59.6"
-    "@typescript-eslint/type-utils" "5.59.6"
-    "@typescript-eslint/utils" "5.59.6"
-    debug "^4.3.4"
-    grapheme-splitter "^1.0.4"
-    ignore "^5.2.0"
-    natural-compare-lite "^1.4.0"
-    semver "^7.3.7"
-    tsutils "^3.21.0"
-
-"@typescript-eslint/experimental-utils@^5.0.0":
-  version "5.59.6"
-  resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.59.6.tgz#9f4d81700dcea51a107658a44992ba1e4d8b4320"
-  integrity sha512-UIVfEaaHggOuhgqdpFlFQ7IN9UFMCiBR/N7uPBUyUlwNdJzYfAu9m4wbOj0b59oI/HSPW1N63Q7lsvfwTQY13w==
-  dependencies:
-    "@typescript-eslint/utils" "5.59.6"
-
-"@typescript-eslint/parser@^5.20.0":
-  version "5.59.6"
-  resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.6.tgz#bd36f71f5a529f828e20b627078d3ed6738dbb40"
-  integrity sha512-7pCa6al03Pv1yf/dUg/s1pXz/yGMUBAw5EeWqNTFiSueKvRNonze3hma3lhdsOrQcaOXhbk5gKu2Fludiho9VA==
-  dependencies:
-    "@typescript-eslint/scope-manager" "5.59.6"
-    "@typescript-eslint/types" "5.59.6"
-    "@typescript-eslint/typescript-estree" "5.59.6"
-    debug "^4.3.4"
-
-"@typescript-eslint/scope-manager@5.59.6":
-  version "5.59.6"
-  resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.6.tgz#d43a3687aa4433868527cfe797eb267c6be35f19"
-  integrity sha512-gLbY3Le9Dxcb8KdpF0+SJr6EQ+hFGYFl6tVY8VxLPFDfUZC7BHFw+Vq7bM5lE9DwWPfx4vMWWTLGXgpc0mAYyQ==
-  dependencies:
-    "@typescript-eslint/types" "5.59.6"
-    "@typescript-eslint/visitor-keys" "5.59.6"
-
-"@typescript-eslint/type-utils@5.59.6":
-  version "5.59.6"
-  resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.6.tgz#37c51d2ae36127d8b81f32a0a4d2efae19277c48"
-  integrity sha512-A4tms2Mp5yNvLDlySF+kAThV9VTBPCvGf0Rp8nl/eoDX9Okun8byTKoj3fJ52IJitjWOk0fKPNQhXEB++eNozQ==
-  dependencies:
-    "@typescript-eslint/typescript-estree" "5.59.6"
-    "@typescript-eslint/utils" "5.59.6"
-    debug "^4.3.4"
-    tsutils "^3.21.0"
-
-"@typescript-eslint/types@5.59.6":
-  version "5.59.6"
-  resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.6.tgz#5a6557a772af044afe890d77c6a07e8c23c2460b"
-  integrity sha512-tH5lBXZI7T2MOUgOWFdVNUILsI02shyQvfzG9EJkoONWugCG77NDDa1EeDGw7oJ5IvsTAAGVV8I3Tk2PNu9QfA==
-
-"@typescript-eslint/typescript-estree@5.59.6":
-  version "5.59.6"
-  resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.6.tgz#2fb80522687bd3825504925ea7e1b8de7bb6251b"
-  integrity sha512-vW6JP3lMAs/Tq4KjdI/RiHaaJSO7IUsbkz17it/Rl9Q+WkQ77EOuOnlbaU8kKfVIOJxMhnRiBG+olE7f3M16DA==
-  dependencies:
-    "@typescript-eslint/types" "5.59.6"
-    "@typescript-eslint/visitor-keys" "5.59.6"
-    debug "^4.3.4"
-    globby "^11.1.0"
-    is-glob "^4.0.3"
-    semver "^7.3.7"
-    tsutils "^3.21.0"
-
-"@typescript-eslint/utils@5.59.6":
-  version "5.59.6"
-  resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.6.tgz#82960fe23788113fc3b1f9d4663d6773b7907839"
-  integrity sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg==
-  dependencies:
-    "@eslint-community/eslint-utils" "^4.2.0"
-    "@types/json-schema" "^7.0.9"
-    "@types/semver" "^7.3.12"
-    "@typescript-eslint/scope-manager" "5.59.6"
-    "@typescript-eslint/types" "5.59.6"
-    "@typescript-eslint/typescript-estree" "5.59.6"
-    eslint-scope "^5.1.1"
-    semver "^7.3.7"
-
-"@typescript-eslint/visitor-keys@5.59.6":
-  version "5.59.6"
-  resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.6.tgz#673fccabf28943847d0c8e9e8d008e3ada7be6bb"
-  integrity sha512-zEfbFLzB9ETcEJ4HZEEsCR9HHeNku5/Qw1jSS5McYJv5BR+ftYXwFFAH5Al+xkGaZEqowMwl7uoJjQb1YSPF8Q==
-  dependencies:
-    "@typescript-eslint/types" "5.59.6"
-    eslint-visitor-keys "^3.3.0"
-
-"@vitejs/plugin-legacy@^2.0.0":
-  version "2.3.1"
-  resolved "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-2.3.1.tgz#44d8e608e66ef03ff82ae176588c7a621d56c524"
-  integrity sha512-J5KaGBlSt2tEYPVjM/C8dA6DkRzkFkbPe+Xb4IX5G+XOV5OGbVAfkMjKywdrkO3gGynO8S98i71Lmsff4cWkCQ==
-  dependencies:
-    "@babel/standalone" "^7.20.0"
-    core-js "^3.26.0"
-    magic-string "^0.26.7"
-    regenerator-runtime "^0.13.10"
-    systemjs "^6.13.0"
-
-"@vitejs/plugin-vue-jsx@^1.3.10":
-  version "1.3.10"
-  resolved "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.3.10.tgz#5b61294ed4334fbc5f5679243fd3ccc448b26044"
-  integrity sha512-Cf5zznh4yNMiEMBfTOztaDVDmK1XXfgxClzOSUVUc8WAmHzogrCUeM8B05ABzuGtg0D1amfng+mUmSIOFGP3Pw==
-  dependencies:
-    "@babel/core" "^7.17.9"
-    "@babel/plugin-syntax-import-meta" "^7.10.4"
-    "@babel/plugin-transform-typescript" "^7.16.8"
-    "@rollup/pluginutils" "^4.2.0"
-    "@vue/babel-plugin-jsx" "^1.1.1"
-    hash-sum "^2.0.0"
-
-"@vitejs/plugin-vue@^3.0.1":
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz#a1484089dd85d6528f435743f84cdd0d215bbb54"
-  integrity sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==
-
-"@volar/code-gen@0.33.9":
-  version "0.33.9"
-  resolved "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.33.9.tgz#5d108451c4872fb905eab59143b64b824610eed0"
-  integrity sha512-HI+XemEjvOv9uSjqaNXIL1brSTaBy9vRTcXqz9787nL5VKktI8aU1Zk4w9yJR88eTqw7mlPIdMaib7Ps/QPq8Q==
-  dependencies:
-    "@volar/source-map" "0.33.9"
-
-"@volar/pug-language-service@0.33.9":
-  version "0.33.9"
-  resolved "https://registry.npmjs.org/@volar/pug-language-service/-/pug-language-service-0.33.9.tgz#e5f94cd9f3eca5012b35d9360236e6259528492a"
-  integrity sha512-3oOV0HmoqkCyPAiHXSMoDzbLrSEQQv3d1dY/Lfo4H8hGoS8kUYJ958328TuLFc90yzsSmYnuvIux5AUok138pg==
-  dependencies:
-    "@volar/code-gen" "0.33.9"
-    "@volar/shared" "0.33.9"
-    "@volar/source-map" "0.33.9"
-    "@volar/transforms" "0.33.9"
-    pug-lexer "^5.0.1"
-    pug-parser "^6.0.0"
-    vscode-languageserver-textdocument "^1.0.3"
-    vscode-languageserver-types "^3.17.0-next.6"
-
-"@volar/shared@0.33.9":
-  version "0.33.9"
-  resolved "https://registry.npmjs.org/@volar/shared/-/shared-0.33.9.tgz#4a7244cafab2011c1a7942f22754e08a21f08cf7"
-  integrity sha512-YqEBYT1SjyO+/W73lyKZlftumimsrYGvd98pHrIyvgc6HNhFnCcthRbyHskstjU6P8Bgj90mRl+7Sb29J+Z5ng==
-  dependencies:
-    upath "^2.0.1"
-    vscode-jsonrpc "^8.0.0-next.5"
-    vscode-uri "^3.0.3"
-
-"@volar/source-map@0.33.9":
-  version "0.33.9"
-  resolved "https://registry.npmjs.org/@volar/source-map/-/source-map-0.33.9.tgz#d86d9db30b15e554f4d0d2853e03a84ae1bc1ebd"
-  integrity sha512-SE7dfumZ8pLsbj4DtiSDTg2/d/JT45nF51rUnuz1UNSBPEeXBexlzvz5EQ2AyrX0FjAAd2ijrRtirTk1a0SFhQ==
-
-"@volar/transforms@0.33.9":
-  version "0.33.9"
-  resolved "https://registry.npmjs.org/@volar/transforms/-/transforms-0.33.9.tgz#1155b5ea01b67bc318dddb49177f6c2df6b6f879"
-  integrity sha512-qdc2d0ZW/G6jCx1pBmoMjMJTY245pZJjpPL/OCT3zgbDLGvLvqhowXxQYQd2YiNXqxJvbadEKviH5LiZL3sU9g==
-  dependencies:
-    "@volar/shared" "0.33.9"
-    vscode-languageserver-types "^3.17.0-next.6"
-
-"@volar/vue-code-gen@0.33.9":
-  version "0.33.9"
-  resolved "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.33.9.tgz#353b5803d9cf84b14f9a5e2e1c661a072d776736"
-  integrity sha512-qRCXcBhm1kUlI06sW5zolavn8gqZdSC2eIWw7jgbW68K/cGlTyXHGGZgJPM9P22cF9pcrjV1ByehO18ke2u+aA==
-  dependencies:
-    "@volar/code-gen" "0.33.9"
-    "@volar/source-map" "0.33.9"
-    "@vue/compiler-core" "^3.2.27"
-    "@vue/compiler-dom" "^3.2.27"
-    "@vue/shared" "^3.2.27"
-
-"@volar/vue-typescript@0.33.9":
-  version "0.33.9"
-  resolved "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.33.9.tgz#6ac36812bba3967af316c0710559bf12bab904e8"
-  integrity sha512-UUViaQfzAV7z49TB+IsGCT6ls7zdEUib2N0L4k8U9nZbd2BQA4kcR9nyS/8oDOU5fK3ErP+pPlC+XzGGamKhcw==
-  dependencies:
-    "@volar/code-gen" "0.33.9"
-    "@volar/pug-language-service" "0.33.9"
-    "@volar/source-map" "0.33.9"
-    "@volar/vue-code-gen" "0.33.9"
-    "@vue/compiler-sfc" "^3.2.27"
-    "@vue/reactivity" "^3.2.27"
-
-"@vue/babel-helper-vue-transform-on@^1.0.2":
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz#9b9c691cd06fc855221a2475c3cc831d774bc7dc"
-  integrity sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==
-
-"@vue/babel-plugin-jsx@^1.1.1":
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz#0c5bac27880d23f89894cd036a37b55ef61ddfc1"
-  integrity sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==
-  dependencies:
-    "@babel/helper-module-imports" "^7.0.0"
-    "@babel/plugin-syntax-jsx" "^7.0.0"
-    "@babel/template" "^7.0.0"
-    "@babel/traverse" "^7.0.0"
-    "@babel/types" "^7.0.0"
-    "@vue/babel-helper-vue-transform-on" "^1.0.2"
-    camelcase "^6.0.0"
-    html-tags "^3.1.0"
-    svg-tags "^1.0.0"
-
-"@vue/compiler-core@3.3.2", "@vue/compiler-core@^3.2.27":
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.2.tgz#39567bd15c7f97add97bfc4d44e814df36eb797b"
-  integrity sha512-CKZWo1dzsQYTNTft7whzjL0HsrEpMfiK7pjZ2WFE3bC1NA7caUjWioHSK+49y/LK7Bsm4poJZzAMnvZMQ7OTeg==
-  dependencies:
-    "@babel/parser" "^7.21.3"
-    "@vue/shared" "3.3.2"
-    estree-walker "^2.0.2"
-    source-map-js "^1.0.2"
-
-"@vue/compiler-dom@3.3.2", "@vue/compiler-dom@^3.0.1", "@vue/compiler-dom@^3.2.27":
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.2.tgz#2012ef4879375a4ca4ee68012a9256398b848af2"
-  integrity sha512-6gS3auANuKXLw0XH6QxkWqyPYPunziS2xb6VRenM3JY7gVfZcJvkCBHkb5RuNY1FCbBO3lkIi0CdXUCW1c7SXw==
-  dependencies:
-    "@vue/compiler-core" "3.3.2"
-    "@vue/shared" "3.3.2"
-
-"@vue/compiler-sfc@3.3.2", "@vue/compiler-sfc@^3.2.27", "@vue/compiler-sfc@^3.2.29", "@vue/compiler-sfc@^3.2.33":
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.2.tgz#d6467acba8446655bcee7e751441232e5ddebcbf"
-  integrity sha512-jG4jQy28H4BqzEKsQqqW65BZgmo3vzdLHTBjF+35RwtDdlFE+Fk1VWJYUnDMMqkFBo6Ye1ltSKVOMPgkzYj7SQ==
-  dependencies:
-    "@babel/parser" "^7.20.15"
-    "@vue/compiler-core" "3.3.2"
-    "@vue/compiler-dom" "3.3.2"
-    "@vue/compiler-ssr" "3.3.2"
-    "@vue/reactivity-transform" "3.3.2"
-    "@vue/shared" "3.3.2"
-    estree-walker "^2.0.2"
-    magic-string "^0.30.0"
-    postcss "^8.1.10"
-    source-map-js "^1.0.2"
-
-"@vue/compiler-ssr@3.3.2":
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.2.tgz#75ac4ccafa2d78c91d2e257ad243c86409493cc4"
-  integrity sha512-K8OfY5FQtZaSOJHHe8xhEfIfLrefL/Y9frv4k4NsyQL3+0lRKxr9QuJhfdBDjkl7Fhz8CzKh63mULvmOfx3l2w==
-  dependencies:
-    "@vue/compiler-dom" "3.3.2"
-    "@vue/shared" "3.3.2"
-
-"@vue/devtools-api@^6.1.0", "@vue/devtools-api@^6.2.1", "@vue/devtools-api@^6.5.0":
-  version "6.5.0"
-  resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07"
-  integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==
-
-"@vue/reactivity-transform@3.3.2":
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.2.tgz#e1991d52d7ecefb65b214d8a3385a9dbe2cca74c"
-  integrity sha512-iu2WaQvlJHdnONrsyv4ibIEnSsuKF+aHFngGj/y1lwpHQtalpVhKg9wsKMoiKXS9zPNjG9mNKzJS9vudvjzvyg==
-  dependencies:
-    "@babel/parser" "^7.20.15"
-    "@vue/compiler-core" "3.3.2"
-    "@vue/shared" "3.3.2"
-    estree-walker "^2.0.2"
-    magic-string "^0.30.0"
-
-"@vue/reactivity@3.3.2", "@vue/reactivity@^3.2.27":
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.2.tgz#c4ddc5087039070c0c11810f6bc1aa59c99f0cb5"
-  integrity sha512-yX8C4uTgg2Tdj+512EEMnMKbLveoITl7YdQX35AYgx8vBvQGszKiiCN46g4RY6/deeo/5DLbeUUGxCq1qWMf5g==
-  dependencies:
-    "@vue/shared" "3.3.2"
-
-"@vue/runtime-core@3.3.2", "@vue/runtime-core@^3.2.33":
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.2.tgz#7c89b30c44ad42a3256806a1e37c3cd18500d6d5"
-  integrity sha512-qSl95qj0BvKfcsO+hICqFEoLhJn6++HtsPxmTkkadFbuhe3uQfJ8HmQwvEr7xbxBd2rcJB6XOJg7nWAn/ymC5A==
-  dependencies:
-    "@vue/reactivity" "3.3.2"
-    "@vue/shared" "3.3.2"
-
-"@vue/runtime-dom@3.3.2":
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.2.tgz#b0bf7ce3fa9c181049ce783a0e13480a4f350c4b"
-  integrity sha512-+drStsJT+0mtgHdarT7cXZReCcTFfm6ptxMrz0kAW5hms6UNBd8Q1pi4JKlncAhu+Ld/TevsSp7pqAZxBBoGng==
-  dependencies:
-    "@vue/runtime-core" "3.3.2"
-    "@vue/shared" "3.3.2"
-    csstype "^3.1.1"
-
-"@vue/server-renderer@3.3.2", "@vue/server-renderer@^3.0.1":
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.2.tgz#31dce9f76380762fc42df77f6f974c4098f179e6"
-  integrity sha512-QCwh6OGwJg6GDLE0fbQhRTR6tnU+XDJ1iCsTYHXBiezCXAhqMygFRij7BiLF4ytvvHcg5kX9joX5R5vP85++wg==
-  dependencies:
-    "@vue/compiler-ssr" "3.3.2"
-    "@vue/shared" "3.3.2"
-
-"@vue/shared@3.3.2", "@vue/shared@^3.2.27", "@vue/shared@^3.2.33":
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.3.2.tgz#774cd9b4635ce801b70a3fc3713779a5ef5d77c3"
-  integrity sha512-0rFu3h8JbclbnvvKrs7Fe5FNGV9/5X2rPD7KmOzhLSUAiQH5//Hq437Gv0fR5Mev3u/nbtvmLl8XgwCU20/ZfQ==
-
-"@vue/test-utils@^2.0.0-rc.21":
-  version "2.3.2"
-  resolved "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.3.2.tgz#b47ce6d7be7bf9700e0bb4322410e4cd8724d277"
-  integrity sha512-hJnVaYhbrIm0yBS0+e1Y0Sj85cMyAi+PAbK4JHqMRUZ6S622Goa+G7QzkRSyvCteG8wop7tipuEbHoZo26wsSA==
-  dependencies:
-    js-beautify "1.14.6"
-  optionalDependencies:
-    "@vue/compiler-dom" "^3.0.1"
-    "@vue/server-renderer" "^3.0.1"
-
-"@vueuse/core@^8.3.0":
-  version "8.9.4"
-  resolved "https://registry.npmjs.org/@vueuse/core/-/core-8.9.4.tgz#c7db40f19390b3c9f4ff9294a30461497f62ec19"
-  integrity sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q==
-  dependencies:
-    "@types/web-bluetooth" "^0.0.14"
-    "@vueuse/metadata" "8.9.4"
-    "@vueuse/shared" "8.9.4"
-    vue-demi "*"
-
-"@vueuse/metadata@8.9.4":
-  version "8.9.4"
-  resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.9.4.tgz#a4132db33e4c1b1023636acfa20aa7b37ab3d978"
-  integrity sha512-IwSfzH80bnJMzqhaapqJl9JRIiyQU0zsRGEgnxN6jhq7992cPUJIRfV+JHRIZXjYqbwt07E1gTEp0R0zPJ1aqw==
-
-"@vueuse/shared@8.9.4", "@vueuse/shared@^8.3.0":
-  version "8.9.4"
-  resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-8.9.4.tgz#c9741c30ffb666b50d62f0dd80b76119fd47573e"
-  integrity sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag==
-  dependencies:
-    vue-demi "*"
-
-"@windicss/config@1.9.0":
-  version "1.9.0"
-  resolved "https://registry.npmjs.org/@windicss/config/-/config-1.9.0.tgz#a5cb18653477284095e1694e962b42442a770446"
-  integrity sha512-QO4+udbmDIgZwAi89tqUt5nGwBq3IgyELjLn83twZXiIqzOw+77ecCuM0oPSbzWmIbCqXq3wRQHd6Z1u5E/5zQ==
-  dependencies:
-    debug "^4.3.4"
-    jiti "^1.18.2"
-    windicss "^3.5.6"
-
-"@windicss/plugin-utils@1.9.0":
-  version "1.9.0"
-  resolved "https://registry.npmjs.org/@windicss/plugin-utils/-/plugin-utils-1.9.0.tgz#a38a5e37abf47ce43bb2cd8332cdecc647531f6a"
-  integrity sha512-omAacM5ExIr9XBUI2z47CyCXJBke4imJZqXW41YgHhRLbahTngbScFk5yxa6dXivDXUpUKqasOPXBJgA4bhHCg==
-  dependencies:
-    "@antfu/utils" "^0.7.2"
-    "@windicss/config" "1.9.0"
-    debug "^4.3.4"
-    fast-glob "^3.2.12"
-    magic-string "^0.30.0"
-    micromatch "^4.0.5"
-    windicss "^3.5.6"
-
-"@zxcvbn-ts/core@^2.0.1":
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/@zxcvbn-ts/core/-/core-2.2.1.tgz#18780bde852b1f5068c93219b2dec78cb6d9c6f9"
-  integrity sha512-Cg1JyRpCDIF+Dh3nauqygmmCYxogNVZDxSn+9PgkPD1HZ2QiJe4elruVJrGmYRS7muGmZ1hNJq8ySQdPv6GHaw==
-  dependencies:
-    fastest-levenshtein "1.0.16"
-
-JSONStream@^1.0.4:
-  version "1.3.5"
-  resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
-  integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
-  dependencies:
-    jsonparse "^1.2.0"
-    through ">=2.2.7 <3"
-
-abab@^2.0.3, abab@^2.0.5:
-  version "2.0.6"
-  resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
-  integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
-
-abbrev@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-
-acorn-globals@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
-  integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
-  dependencies:
-    acorn "^7.1.1"
-    acorn-walk "^7.1.1"
-
-acorn-jsx@^5.3.2:
-  version "5.3.2"
-  resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
-  integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
-
-acorn-walk@^7.1.1:
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
-  integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
-
-acorn-walk@^8.1.1:
-  version "8.2.0"
-  resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
-  integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
-
-acorn@^7.1.1:
-  version "7.4.1"
-  resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
-  integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
-
-acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.8.0:
-  version "8.8.2"
-  resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
-  integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
-
-add-stream@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa"
-  integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==
-
-agent-base@6:
-  version "6.0.2"
-  resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
-  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
-  dependencies:
-    debug "4"
-
-aggregate-error@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
-  integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
-  dependencies:
-    clean-stack "^2.0.0"
-    indent-string "^4.0.0"
-
-ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.6:
-  version "6.12.6"
-  resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
-  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
-  dependencies:
-    fast-deep-equal "^3.1.1"
-    fast-json-stable-stringify "^2.0.0"
-    json-schema-traverse "^0.4.1"
-    uri-js "^4.2.2"
-
-ajv@^8.0.1, ajv@^8.11.0, ajv@^8.6.0:
-  version "8.12.0"
-  resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
-  integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
-  dependencies:
-    fast-deep-equal "^3.1.1"
-    json-schema-traverse "^1.0.0"
-    require-from-string "^2.0.2"
-    uri-js "^4.2.2"
-
-ansi-escapes@^4.2.1, ansi-escapes@^4.3.0:
-  version "4.3.2"
-  resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
-  integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
-  dependencies:
-    type-fest "^0.21.3"
-
-ansi-regex@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-  integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==
-
-ansi-regex@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
-  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-
-ansi-regex@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
-  integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
-
-ansi-styles@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-  integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==
-
-ansi-styles@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
-  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
-  dependencies:
-    color-convert "^1.9.0"
-
-ansi-styles@^4.0.0, ansi-styles@^4.1.0:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
-  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
-  dependencies:
-    color-convert "^2.0.1"
-
-ansi-styles@^5.0.0:
-  version "5.2.0"
-  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
-  integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-
-ansi-styles@^6.0.0:
-  version "6.2.1"
-  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
-  integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
-
-ant-design-vue@^3.2.12:
-  version "3.2.20"
-  resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-3.2.20.tgz#552f5f08e2acbcc10bd4089145d4cc2b15d4cfec"
-  integrity sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg==
-  dependencies:
-    "@ant-design/colors" "^6.0.0"
-    "@ant-design/icons-vue" "^6.1.0"
-    "@babel/runtime" "^7.10.5"
-    "@ctrl/tinycolor" "^3.4.0"
-    "@simonwep/pickr" "~1.8.0"
-    array-tree-filter "^2.1.0"
-    async-validator "^4.0.0"
-    dayjs "^1.10.5"
-    dom-align "^1.12.1"
-    dom-scroll-into-view "^2.0.0"
-    lodash "^4.17.21"
-    lodash-es "^4.17.15"
-    resize-observer-polyfill "^1.5.1"
-    scroll-into-view-if-needed "^2.2.25"
-    shallow-equal "^1.0.0"
-    vue-types "^3.0.0"
-    warning "^4.0.0"
-
-anymatch@^3.0.3, anymatch@~3.1.2:
-  version "3.1.3"
-  resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
-  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
-  dependencies:
-    normalize-path "^3.0.0"
-    picomatch "^2.0.4"
-
-arch@^2.1.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
-  integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
-
-archive-type@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70"
-  integrity sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==
-  dependencies:
-    file-type "^4.2.0"
-
-arg@^4.1.0:
-  version "4.1.3"
-  resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
-  integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
-
-argparse@^1.0.7:
-  version "1.0.10"
-  resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
-  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
-  dependencies:
-    sprintf-js "~1.0.2"
-
-argparse@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
-  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
-
-arr-diff@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
-  integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==
-
-arr-flatten@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
-  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-
-arr-union@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
-  integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==
-
-array-buffer-byte-length@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead"
-  integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==
-  dependencies:
-    call-bind "^1.0.2"
-    is-array-buffer "^3.0.1"
-
-array-differ@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b"
-  integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==
-
-array-find-index@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
-  integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==
-
-array-ify@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
-  integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==
-
-array-tree-filter@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190"
-  integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==
-
-array-union@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
-  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-
-array-unique@^0.3.2:
-  version "0.3.2"
-  resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
-  integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==
-
-arrify@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-  integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==
-
-arrify@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
-  integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
-
-assign-symbols@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
-  integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==
-
-astral-regex@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
-  integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
-
-async-validator@^4.0.0:
-  version "4.2.5"
-  resolved "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339"
-  integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==
-
-async@^2.6.4:
-  version "2.6.4"
-  resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
-  integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
-  dependencies:
-    lodash "^4.17.14"
-
-async@^3.2.3:
-  version "3.2.4"
-  resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
-  integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
-
-asynckit@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
-
-at-least-node@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
-  integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
-
-atob@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
-  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-
-autoprefixer@^10.4.4:
-  version "10.4.14"
-  resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d"
-  integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==
-  dependencies:
-    browserslist "^4.21.5"
-    caniuse-lite "^1.0.30001464"
-    fraction.js "^4.2.0"
-    normalize-range "^0.1.2"
-    picocolors "^1.0.0"
-    postcss-value-parser "^4.2.0"
-
-available-typed-arrays@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
-  integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
-
-axios@^0.26.0, axios@^0.26.1:
-  version "0.26.1"
-  resolved "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9"
-  integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==
-  dependencies:
-    follow-redirects "^1.14.8"
-
-axios@^1.2.2:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f"
-  integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==
-  dependencies:
-    follow-redirects "^1.15.0"
-    form-data "^4.0.0"
-    proxy-from-env "^1.1.0"
-
-babel-jest@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444"
-  integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==
-  dependencies:
-    "@jest/transform" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/babel__core" "^7.1.14"
-    babel-plugin-istanbul "^6.1.1"
-    babel-preset-jest "^27.5.1"
-    chalk "^4.0.0"
-    graceful-fs "^4.2.9"
-    slash "^3.0.0"
-
-babel-plugin-istanbul@^6.1.1:
-  version "6.1.1"
-  resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
-  integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@istanbuljs/load-nyc-config" "^1.0.0"
-    "@istanbuljs/schema" "^0.1.2"
-    istanbul-lib-instrument "^5.0.4"
-    test-exclude "^6.0.0"
-
-babel-plugin-jest-hoist@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e"
-  integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==
-  dependencies:
-    "@babel/template" "^7.3.3"
-    "@babel/types" "^7.3.3"
-    "@types/babel__core" "^7.0.0"
-    "@types/babel__traverse" "^7.0.6"
-
-babel-plugin-polyfill-corejs2@^0.3.3:
-  version "0.3.3"
-  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122"
-  integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==
-  dependencies:
-    "@babel/compat-data" "^7.17.7"
-    "@babel/helper-define-polyfill-provider" "^0.3.3"
-    semver "^6.1.1"
-
-babel-plugin-polyfill-corejs3@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a"
-  integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==
-  dependencies:
-    "@babel/helper-define-polyfill-provider" "^0.3.3"
-    core-js-compat "^3.25.1"
-
-babel-plugin-polyfill-regenerator@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747"
-  integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==
-  dependencies:
-    "@babel/helper-define-polyfill-provider" "^0.3.3"
-
-babel-plugin-transform-runtime@^6.23.0:
-  version "6.23.0"
-  resolved "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee"
-  integrity sha512-cpGMVC1vt/772y3jx1gwSaTitQVZuFDlllgreMsZ+rTYC6jlYXRyf5FQOgSnckOiA5QmzbXTyBY2A5AmZXF1fA==
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-preset-current-node-syntax@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
-  integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
-  dependencies:
-    "@babel/plugin-syntax-async-generators" "^7.8.4"
-    "@babel/plugin-syntax-bigint" "^7.8.3"
-    "@babel/plugin-syntax-class-properties" "^7.8.3"
-    "@babel/plugin-syntax-import-meta" "^7.8.3"
-    "@babel/plugin-syntax-json-strings" "^7.8.3"
-    "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
-    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-    "@babel/plugin-syntax-numeric-separator" "^7.8.3"
-    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
-    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
-    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
-    "@babel/plugin-syntax-top-level-await" "^7.8.3"
-
-babel-preset-jest@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81"
-  integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==
-  dependencies:
-    babel-plugin-jest-hoist "^27.5.1"
-    babel-preset-current-node-syntax "^1.0.0"
-
-babel-runtime@^6.22.0:
-  version "6.26.0"
-  resolved "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
-  integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==
-  dependencies:
-    core-js "^2.4.0"
-    regenerator-runtime "^0.11.0"
-
-balanced-match@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
-  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-balanced-match@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9"
-  integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==
-
-base64-js@^1.3.1:
-  version "1.5.1"
-  resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
-  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-
-base@^0.11.1:
-  version "0.11.2"
-  resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
-  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
-  dependencies:
-    cache-base "^1.0.1"
-    class-utils "^0.3.5"
-    component-emitter "^1.2.1"
-    define-property "^1.0.0"
-    isobject "^3.0.1"
-    mixin-deep "^1.2.0"
-    pascalcase "^0.1.1"
-
-basic-auth@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
-  integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==
-  dependencies:
-    safe-buffer "5.1.2"
-
-before-after-hook@^2.2.0:
-  version "2.2.3"
-  resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c"
-  integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==
-
-big.js@^5.2.2:
-  version "5.2.2"
-  resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
-  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
-
-bin-build@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz#c5780a25a8a9f966d8244217e6c1f5082a143861"
-  integrity sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==
-  dependencies:
-    decompress "^4.0.0"
-    download "^6.2.2"
-    execa "^0.7.0"
-    p-map-series "^1.0.0"
-    tempfile "^2.0.0"
-
-bin-check@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz#fc495970bdc88bb1d5a35fc17e65c4a149fc4a49"
-  integrity sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==
-  dependencies:
-    execa "^0.7.0"
-    executable "^4.1.0"
-
-bin-version-check@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz#7d819c62496991f80d893e6e02a3032361608f71"
-  integrity sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==
-  dependencies:
-    bin-version "^3.0.0"
-    semver "^5.6.0"
-    semver-truncate "^1.1.2"
-
-bin-version@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz#5b09eb280752b1bd28f0c9db3f96f2f43b6c0839"
-  integrity sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==
-  dependencies:
-    execa "^1.0.0"
-    find-versions "^3.0.0"
-
-bin-wrapper@^4.0.0, bin-wrapper@^4.0.1, "bin-wrapper@npm:bin-wrapper-china":
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/bin-wrapper-china/-/bin-wrapper-china-0.1.0.tgz#c2ec95b4d0eaef6ed5ad10954f9227d8e5ef3725"
-  integrity sha512-1UCm17WYEbgry50tup+AQN+JGVEVzoW4f8HMl899k1lvuFxWKGZXl/G2fgxQxAckRjnloO3ijLVVEsv8zescUg==
-  dependencies:
-    bin-check "^4.1.0"
-    bin-version-check "^4.0.0"
-    binary-mirror-config "^1"
-    download "^7.1.0"
-    import-lazy "^4.0.0"
-    os-filter-obj "^2.0.0"
-    pify "^4.0.1"
-
-binary-extensions@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
-  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-
-binary-mirror-config@^1:
-  version "1.41.0"
-  resolved "https://registry.npmjs.org/binary-mirror-config/-/binary-mirror-config-1.41.0.tgz#b68032588392bee9262971f977922d075513964b"
-  integrity sha512-ZiIhR1s6Sv1Fv6qCQqfPjx0Cj86BgFlhqNxZgHkQOWcxJcMbO3mj1iqsuVjowYqJqeZL8e52+IEv7IRnSX6T6w==
-
-bl@^1.0.0:
-  version "1.2.3"
-  resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7"
-  integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==
-  dependencies:
-    readable-stream "^2.3.5"
-    safe-buffer "^5.1.1"
-
-bl@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
-  integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
-  dependencies:
-    buffer "^5.5.0"
-    inherits "^2.0.4"
-    readable-stream "^3.4.0"
-
-bluebird@^3.5.0:
-  version "3.7.2"
-  resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
-  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
-
-boolbase@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
-  integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
-
-brace-expansion@^1.1.7:
-  version "1.1.11"
-  resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
-  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
-  dependencies:
-    balanced-match "^1.0.0"
-    concat-map "0.0.1"
-
-brace-expansion@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
-  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
-  dependencies:
-    balanced-match "^1.0.0"
-
-braces@^2.2.2:
-  version "2.3.2"
-  resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
-  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
-  dependencies:
-    arr-flatten "^1.1.0"
-    array-unique "^0.3.2"
-    extend-shallow "^2.0.1"
-    fill-range "^4.0.0"
-    isobject "^3.0.1"
-    repeat-element "^1.1.2"
-    snapdragon "^0.8.1"
-    snapdragon-node "^2.0.1"
-    split-string "^3.0.2"
-    to-regex "^3.0.1"
-
-braces@^3.0.2, braces@~3.0.2:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
-  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
-  dependencies:
-    fill-range "^7.0.1"
-
-browser-process-hrtime@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
-  integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
-
-browserslist@^4.21.3, browserslist@^4.21.5:
-  version "4.21.5"
-  resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7"
-  integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==
-  dependencies:
-    caniuse-lite "^1.0.30001449"
-    electron-to-chromium "^1.4.284"
-    node-releases "^2.0.8"
-    update-browserslist-db "^1.0.10"
-
-bs-logger@0.x:
-  version "0.2.6"
-  resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
-  integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
-  dependencies:
-    fast-json-stable-stringify "2.x"
-
-bser@2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
-  integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
-  dependencies:
-    node-int64 "^0.4.0"
-
-buffer-alloc-unsafe@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
-  integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
-
-buffer-alloc@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
-  integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
-  dependencies:
-    buffer-alloc-unsafe "^1.1.0"
-    buffer-fill "^1.0.0"
-
-buffer-crc32@~0.2.3:
-  version "0.2.13"
-  resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
-  integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
-
-buffer-fill@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
-  integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==
-
-buffer-from@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
-  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-
-buffer@^5.2.1, buffer@^5.5.0:
-  version "5.7.1"
-  resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
-  integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
-  dependencies:
-    base64-js "^1.3.1"
-    ieee754 "^1.1.13"
-
-builtin-modules@^3.1.0:
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
-  integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
-
-builtins@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/builtins/-/builtins-4.1.0.tgz#1edd016dd91ce771a1ed6fc3b2b71fb918953250"
-  integrity sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w==
-  dependencies:
-    semver "^7.0.0"
-
-cache-base@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
-  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
-  dependencies:
-    collection-visit "^1.0.0"
-    component-emitter "^1.2.1"
-    get-value "^2.0.6"
-    has-value "^1.0.0"
-    isobject "^3.0.1"
-    set-value "^2.0.0"
-    to-object-path "^0.3.0"
-    union-value "^1.0.0"
-    unset-value "^1.0.0"
-
-cacheable-request@^2.1.1:
-  version "2.1.4"
-  resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d"
-  integrity sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==
-  dependencies:
-    clone-response "1.0.2"
-    get-stream "3.0.0"
-    http-cache-semantics "3.8.1"
-    keyv "3.0.0"
-    lowercase-keys "1.0.0"
-    normalize-url "2.0.1"
-    responselike "1.0.2"
-
-cachedir@2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8"
-  integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==
-
-call-bind@^1.0.0, call-bind@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
-  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
-  dependencies:
-    function-bind "^1.1.1"
-    get-intrinsic "^1.0.2"
-
-callsites@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
-  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-
-camel-case@^4.1.2:
-  version "4.1.2"
-  resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
-  integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
-  dependencies:
-    pascal-case "^3.1.2"
-    tslib "^2.0.3"
-
-camelcase-keys@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
-  integrity sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==
-  dependencies:
-    camelcase "^2.0.0"
-    map-obj "^1.0.0"
-
-camelcase-keys@^6.2.2:
-  version "6.2.2"
-  resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
-  integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
-  dependencies:
-    camelcase "^5.3.1"
-    map-obj "^4.0.0"
-    quick-lru "^4.0.1"
-
-camelcase@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
-  integrity sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==
-
-camelcase@^5.0.0, camelcase@^5.3.1:
-  version "5.3.1"
-  resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
-  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-camelcase@^6.0.0, camelcase@^6.2.0:
-  version "6.3.0"
-  resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
-  integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-
-caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464:
-  version "1.0.30001487"
-  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001487.tgz#d882d1a34d89c11aea53b8cdc791931bdab5fe1b"
-  integrity sha512-83564Z3yWGqXsh2vaH/mhXfEM0wX+NlBCm1jYHOb97TrTWJEmPTccZgeLTPBUUb0PNVo+oomb7wkimZBIERClA==
-
-capital-case@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669"
-  integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==
-  dependencies:
-    no-case "^3.0.4"
-    tslib "^2.0.3"
-    upper-case-first "^2.0.2"
-
-caw@^2.0.0, caw@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95"
-  integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==
-  dependencies:
-    get-proxy "^2.0.0"
-    isurl "^1.0.0-alpha5"
-    tunnel-agent "^0.6.0"
-    url-to-options "^1.0.1"
-
-chalk@^1.0.0, chalk@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
-  integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==
-  dependencies:
-    ansi-styles "^2.2.1"
-    escape-string-regexp "^1.0.2"
-    has-ansi "^2.0.0"
-    strip-ansi "^3.0.0"
-    supports-color "^2.0.0"
-
-chalk@^2.0.0, chalk@^2.4.1:
-  version "2.4.2"
-  resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
-  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
-  dependencies:
-    ansi-styles "^3.2.1"
-    escape-string-regexp "^1.0.5"
-    supports-color "^5.3.0"
-
-chalk@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
-  integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
-  dependencies:
-    ansi-styles "^4.1.0"
-    supports-color "^7.1.0"
-
-chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
-  version "4.1.2"
-  resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
-  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
-  dependencies:
-    ansi-styles "^4.1.0"
-    supports-color "^7.1.0"
-
-change-case@^4.1.2:
-  version "4.1.2"
-  resolved "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12"
-  integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==
-  dependencies:
-    camel-case "^4.1.2"
-    capital-case "^1.0.4"
-    constant-case "^3.0.4"
-    dot-case "^3.0.4"
-    header-case "^2.0.4"
-    no-case "^3.0.4"
-    param-case "^3.0.4"
-    pascal-case "^3.1.2"
-    path-case "^3.0.4"
-    sentence-case "^3.0.4"
-    snake-case "^3.0.4"
-    tslib "^2.0.3"
-
-char-regex@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
-  integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
-
-character-parser@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0"
-  integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==
-  dependencies:
-    is-regex "^1.0.3"
-
-chardet@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
-  integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-
-charenc@0.0.2:
-  version "0.0.2"
-  resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
-  integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
-
-china-area-data@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/china-area-data/-/china-area-data-5.0.1.tgz#7943b83a0619f033bb5893da80cb46e52e44be66"
-  integrity sha512-BQDPpiv5Nn+018ekcJK2oSD9PAD+E1bvXB0wgabc//dFVS/KvRqCgg0QOEUt3vBkx9XzB5a9BmkJCEZDBxVjVw==
-
-chokidar@^3.5.2:
-  version "3.5.3"
-  resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
-  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
-  dependencies:
-    anymatch "~3.1.2"
-    braces "~3.0.2"
-    glob-parent "~5.1.2"
-    is-binary-path "~2.1.0"
-    is-glob "~4.0.1"
-    normalize-path "~3.0.0"
-    readdirp "~3.6.0"
-  optionalDependencies:
-    fsevents "~2.3.2"
-
-ci-info@^3.2.0:
-  version "3.8.0"
-  resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91"
-  integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==
-
-cjs-module-lexer@^1.0.0:
-  version "1.2.2"
-  resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
-  integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
-
-class-utils@^0.3.5:
-  version "0.3.6"
-  resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
-  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
-  dependencies:
-    arr-union "^3.1.0"
-    define-property "^0.2.5"
-    isobject "^3.0.0"
-    static-extend "^0.1.1"
-
-clean-css@^5.1.2, clean-css@^5.2.2:
-  version "5.3.2"
-  resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224"
-  integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==
-  dependencies:
-    source-map "~0.6.0"
-
-clean-stack@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
-  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
-
-cli-cursor@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
-  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
-  dependencies:
-    restore-cursor "^3.1.0"
-
-cli-spinners@^2.5.0:
-  version "2.9.0"
-  resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db"
-  integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==
-
-cli-truncate@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
-  integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
-  dependencies:
-    slice-ansi "^3.0.0"
-    string-width "^4.2.0"
-
-cli-truncate@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389"
-  integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==
-  dependencies:
-    slice-ansi "^5.0.0"
-    string-width "^5.0.0"
-
-cli-width@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
-  integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
-
-clipboard@^2.0.8:
-  version "2.0.11"
-  resolved "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz#62180360b97dd668b6b3a84ec226975762a70be5"
-  integrity sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==
-  dependencies:
-    good-listener "^1.2.2"
-    select "^1.1.2"
-    tiny-emitter "^2.0.0"
-
-cliui@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
-  integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
-  dependencies:
-    string-width "^4.2.0"
-    strip-ansi "^6.0.0"
-    wrap-ansi "^6.2.0"
-
-cliui@^7.0.2:
-  version "7.0.4"
-  resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
-  integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
-  dependencies:
-    string-width "^4.2.0"
-    strip-ansi "^6.0.0"
-    wrap-ansi "^7.0.0"
-
-cliui@^8.0.1:
-  version "8.0.1"
-  resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
-  integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
-  dependencies:
-    string-width "^4.2.0"
-    strip-ansi "^6.0.1"
-    wrap-ansi "^7.0.0"
-
-clone-response@1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
-  integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==
-  dependencies:
-    mimic-response "^1.0.0"
-
-clone@^1.0.2:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
-  integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
-
-clone@^2.1.1:
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
-  integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
-
-co@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-  integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
-
-codemirror@^5.65.3:
-  version "5.65.13"
-  resolved "https://registry.npmjs.org/codemirror/-/codemirror-5.65.13.tgz#c098a6f409db8b5a7c5722788bd9fa3bb2367f2e"
-  integrity sha512-SVWEzKXmbHmTQQWaz03Shrh4nybG0wXx2MEu3FO4ezbPW8IbnZEd5iGHGEffSUaitKYa3i+pHpBsSvw8sPHtzg==
-
-collect-v8-coverage@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
-  integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
-
-collection-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
-  integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==
-  dependencies:
-    map-visit "^1.0.0"
-    object-visit "^1.0.0"
-
-color-convert@^1.9.0:
-  version "1.9.3"
-  resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
-  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
-  dependencies:
-    color-name "1.1.3"
-
-color-convert@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
-  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
-  dependencies:
-    color-name "~1.1.4"
-
-color-name@1.1.3:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-  integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
-color-name@~1.1.4:
-  version "1.1.4"
-  resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
-  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
-colord@^2.9.3:
-  version "2.9.3"
-  resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43"
-  integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==
-
-colorette@^2.0.16:
-  version "2.0.20"
-  resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
-  integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
-
-combined-stream@^1.0.8:
-  version "1.0.8"
-  resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
-  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
-  dependencies:
-    delayed-stream "~1.0.0"
-
-commander@*:
-  version "10.0.1"
-  resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
-  integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
-
-commander@^2.19.0, commander@^2.20.0, commander@^2.20.3, commander@^2.8.1:
-  version "2.20.3"
-  resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
-  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-
-commander@^7.2.0:
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
-  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
-
-commander@^8.3.0:
-  version "8.3.0"
-  resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
-  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
-
-commander@^9.0.0:
-  version "9.5.0"
-  resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
-  integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
-
-commitizen@^4.0.3, commitizen@^4.2.4:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz#0d056c542a2d2b1f9b9aba981aa32575b2849924"
-  integrity sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==
-  dependencies:
-    cachedir "2.3.0"
-    cz-conventional-changelog "3.3.0"
-    dedent "0.7.0"
-    detect-indent "6.1.0"
-    find-node-modules "^2.1.2"
-    find-root "1.1.0"
-    fs-extra "9.1.0"
-    glob "7.2.3"
-    inquirer "8.2.5"
-    is-utf8 "^0.2.1"
-    lodash "4.17.21"
-    minimist "1.2.7"
-    strip-bom "4.0.0"
-    strip-json-comments "3.1.1"
-
-common-tags@^1.8.0:
-  version "1.8.2"
-  resolved "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
-  integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==
-
-compare-func@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
-  integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==
-  dependencies:
-    array-ify "^1.0.0"
-    dot-prop "^5.1.0"
-
-component-emitter@^1.2.1:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
-  integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
-
-compute-scroll-into-view@^1.0.20:
-  version "1.0.20"
-  resolved "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43"
-  integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==
-
-concat-map@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-  integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
-
-config-chain@^1.1.11, config-chain@^1.1.13:
-  version "1.1.13"
-  resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
-  integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
-  dependencies:
-    ini "^1.3.4"
-    proto-list "~1.2.1"
-
-connect-history-api-fallback@^1.6.0:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
-  integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
-
-connect@^3.7.0:
-  version "3.7.0"
-  resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8"
-  integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==
-  dependencies:
-    debug "2.6.9"
-    finalhandler "1.1.2"
-    parseurl "~1.3.3"
-    utils-merge "1.0.1"
-
-consola@^2.15.3:
-  version "2.15.3"
-  resolved "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550"
-  integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==
-
-console-stream@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44"
-  integrity sha512-QC/8l9e6ofi6nqZ5PawlDgzmMw3OxIXtvolBzap/F4UDBJlDaZRSNbL/lb41C29FcbSJncBFlJFj2WJoNyZRfQ==
-
-console@^0.7.2:
-  version "0.7.2"
-  resolved "https://registry.npmjs.org/console/-/console-0.7.2.tgz#f9a4331249291591b7bf9bffa8e205356f20a9f0"
-  integrity sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==
-
-constant-case@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1"
-  integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==
-  dependencies:
-    no-case "^3.0.4"
-    tslib "^2.0.3"
-    upper-case "^2.0.2"
-
-content-disposition@^0.5.2:
-  version "0.5.4"
-  resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
-  integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
-  dependencies:
-    safe-buffer "5.2.1"
-
-conventional-changelog-angular@^5.0.11, conventional-changelog-angular@^5.0.12:
-  version "5.0.13"
-  resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c"
-  integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==
-  dependencies:
-    compare-func "^2.0.0"
-    q "^1.5.1"
-
-conventional-changelog-atom@^2.0.8:
-  version "2.0.8"
-  resolved "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de"
-  integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-cli@^2.2.2:
-  version "2.2.2"
-  resolved "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.2.2.tgz#9a7746cede92c6a8f27dc46692efaadfbed60daa"
-  integrity sha512-8grMV5Jo8S0kP3yoMeJxV2P5R6VJOqK72IiSV9t/4H5r/HiRqEBQ83bYGuz4Yzfdj4bjaAEhZN/FFbsFXr5bOA==
-  dependencies:
-    add-stream "^1.0.0"
-    conventional-changelog "^3.1.24"
-    lodash "^4.17.15"
-    meow "^8.0.0"
-    tempfile "^3.0.0"
-
-conventional-changelog-codemirror@^2.0.8:
-  version "2.0.8"
-  resolved "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc"
-  integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-conventionalcommits@^4.3.1, conventional-changelog-conventionalcommits@^4.5.0:
-  version "4.6.3"
-  resolved "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz#0765490f56424b46f6cb4db9135902d6e5a36dc2"
-  integrity sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==
-  dependencies:
-    compare-func "^2.0.0"
-    lodash "^4.17.15"
-    q "^1.5.1"
-
-conventional-changelog-core@^4.2.1:
-  version "4.2.4"
-  resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f"
-  integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==
-  dependencies:
-    add-stream "^1.0.0"
-    conventional-changelog-writer "^5.0.0"
-    conventional-commits-parser "^3.2.0"
-    dateformat "^3.0.0"
-    get-pkg-repo "^4.0.0"
-    git-raw-commits "^2.0.8"
-    git-remote-origin-url "^2.0.0"
-    git-semver-tags "^4.1.1"
-    lodash "^4.17.15"
-    normalize-package-data "^3.0.0"
-    q "^1.5.1"
-    read-pkg "^3.0.0"
-    read-pkg-up "^3.0.0"
-    through2 "^4.0.0"
-
-conventional-changelog-ember@^2.0.9:
-  version "2.0.9"
-  resolved "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962"
-  integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-eslint@^3.0.9:
-  version "3.0.9"
-  resolved "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb"
-  integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-express@^2.0.6:
-  version "2.0.6"
-  resolved "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8"
-  integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-jquery@^3.0.11:
-  version "3.0.11"
-  resolved "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf"
-  integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-jshint@^2.0.9:
-  version "2.0.9"
-  resolved "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff"
-  integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==
-  dependencies:
-    compare-func "^2.0.0"
-    q "^1.5.1"
-
-conventional-changelog-preset-loader@^2.3.4:
-  version "2.3.4"
-  resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c"
-  integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==
-
-conventional-changelog-writer@^5.0.0:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359"
-  integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==
-  dependencies:
-    conventional-commits-filter "^2.0.7"
-    dateformat "^3.0.0"
-    handlebars "^4.7.7"
-    json-stringify-safe "^5.0.1"
-    lodash "^4.17.15"
-    meow "^8.0.0"
-    semver "^6.0.0"
-    split "^1.0.0"
-    through2 "^4.0.0"
-
-conventional-changelog@^3.1.24:
-  version "3.1.25"
-  resolved "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz#3e227a37d15684f5aa1fb52222a6e9e2536ccaff"
-  integrity sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==
-  dependencies:
-    conventional-changelog-angular "^5.0.12"
-    conventional-changelog-atom "^2.0.8"
-    conventional-changelog-codemirror "^2.0.8"
-    conventional-changelog-conventionalcommits "^4.5.0"
-    conventional-changelog-core "^4.2.1"
-    conventional-changelog-ember "^2.0.9"
-    conventional-changelog-eslint "^3.0.9"
-    conventional-changelog-express "^2.0.6"
-    conventional-changelog-jquery "^3.0.11"
-    conventional-changelog-jshint "^2.0.9"
-    conventional-changelog-preset-loader "^2.3.4"
-
-conventional-commit-types@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b"
-  integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==
-
-conventional-commits-filter@^2.0.7:
-  version "2.0.7"
-  resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3"
-  integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==
-  dependencies:
-    lodash.ismatch "^4.4.0"
-    modify-values "^1.0.0"
-
-conventional-commits-parser@^3.2.0, conventional-commits-parser@^3.2.2:
-  version "3.2.4"
-  resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972"
-  integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==
-  dependencies:
-    JSONStream "^1.0.4"
-    is-text-path "^1.0.1"
-    lodash "^4.17.15"
-    meow "^8.0.0"
-    split2 "^3.0.0"
-    through2 "^4.0.0"
-
-convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
-  version "1.9.0"
-  resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
-  integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
-
-copy-anything@^2.0.1:
-  version "2.0.6"
-  resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
-  integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
-  dependencies:
-    is-what "^3.14.1"
-
-copy-descriptor@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
-  integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
-
-core-js-compat@^3.25.1:
-  version "3.30.2"
-  resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.2.tgz#83f136e375babdb8c80ad3c22d67c69098c1dd8b"
-  integrity sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==
-  dependencies:
-    browserslist "^4.21.5"
-
-core-js@^2.4.0:
-  version "2.6.12"
-  resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
-  integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
-
-core-js@^3.15.1, core-js@^3.23.5, core-js@^3.26.0:
-  version "3.30.2"
-  resolved "https://registry.npmjs.org/core-js/-/core-js-3.30.2.tgz#6528abfda65e5ad728143ea23f7a14f0dcf503fc"
-  integrity sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==
-
-core-util-is@~1.0.0:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
-  integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-
-cors@^2.8.5:
-  version "2.8.5"
-  resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
-  integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
-  dependencies:
-    object-assign "^4"
-    vary "^1"
-
-corser@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87"
-  integrity sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==
-
-cosmiconfig-typescript-loader@^2.0.0:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz#7e7ce6064af041c910e1e43fb0fd9625cee56e93"
-  integrity sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==
-  dependencies:
-    cosmiconfig "^7"
-    ts-node "^10.8.1"
-
-cosmiconfig-typescript-loader@^4.0.0:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073"
-  integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==
-
-cosmiconfig@^7, cosmiconfig@^7.0.0, cosmiconfig@^7.1.0:
-  version "7.1.0"
-  resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
-  integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==
-  dependencies:
-    "@types/parse-json" "^4.0.0"
-    import-fresh "^3.2.1"
-    parse-json "^5.0.0"
-    path-type "^4.0.0"
-    yaml "^1.10.0"
-
-cosmiconfig@^8.0.0:
-  version "8.1.3"
-  resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689"
-  integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==
-  dependencies:
-    import-fresh "^3.2.1"
-    js-yaml "^4.1.0"
-    parse-json "^5.0.0"
-    path-type "^4.0.0"
-
-create-require@^1.1.0:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
-  integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
-
-cron-parser@^3.5.0:
-  version "3.5.0"
-  resolved "https://registry.npmjs.org/cron-parser/-/cron-parser-3.5.0.tgz#b1a9da9514c0310aa7ef99c2f3f1d0f8c235257c"
-  integrity sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ==
-  dependencies:
-    is-nan "^1.3.2"
-    luxon "^1.26.0"
-
-cropperjs@^1.5.12, cropperjs@^1.5.6:
-  version "1.5.13"
-  resolved "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.13.tgz#eb1682f01d17c70ed5244317091d745c9a249ef8"
-  integrity sha512-by7jKAo73y5/Do0K6sxdTKHgndY0NMjG2bEdgeJxycbcmHuCiMXqw8sxy5C5Y5WTOTcDGmbT7Sr5CgKOXR06OA==
-
-cross-env@^7.0.3:
-  version "7.0.3"
-  resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
-  integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
-  dependencies:
-    cross-spawn "^7.0.1"
-
-cross-fetch@^3.1.5:
-  version "3.1.6"
-  resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz#bae05aa31a4da760969756318feeee6e70f15d6c"
-  integrity sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==
-  dependencies:
-    node-fetch "^2.6.11"
-
-cross-spawn@^5.0.1:
-  version "5.1.0"
-  resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
-  integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==
-  dependencies:
-    lru-cache "^4.0.1"
-    shebang-command "^1.2.0"
-    which "^1.2.9"
-
-cross-spawn@^6.0.0, cross-spawn@^6.0.5:
-  version "6.0.5"
-  resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
-  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
-  dependencies:
-    nice-try "^1.0.4"
-    path-key "^2.0.1"
-    semver "^5.5.0"
-    shebang-command "^1.2.0"
-    which "^1.2.9"
-
-cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
-  version "7.0.3"
-  resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
-  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
-  dependencies:
-    path-key "^3.1.0"
-    shebang-command "^2.0.0"
-    which "^2.0.1"
-
-crypt@0.0.2:
-  version "0.0.2"
-  resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
-  integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
-
-crypto-js@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf"
-  integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
-
-crypto-random-string@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
-  integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
-
-css-functions-list@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b"
-  integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==
-
-css-select@^4.1.3, css-select@^4.2.1:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
-  integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
-  dependencies:
-    boolbase "^1.0.0"
-    css-what "^6.0.1"
-    domhandler "^4.3.1"
-    domutils "^2.8.0"
-    nth-check "^2.0.1"
-
-css-tree@^1.1.2, css-tree@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d"
-  integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
-  dependencies:
-    mdn-data "2.0.14"
-    source-map "^0.6.1"
-
-css-what@^6.0.1:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
-  integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
-
-cssesc@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
-  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
-
-cssfilter@0.0.10:
-  version "0.0.10"
-  resolved "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae"
-  integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==
-
-csso@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529"
-  integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==
-  dependencies:
-    css-tree "^1.1.2"
-
-cssom@^0.4.4:
-  version "0.4.4"
-  resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
-  integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
-
-cssom@~0.3.6:
-  version "0.3.8"
-  resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
-  integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
-
-cssstyle@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
-  integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
-  dependencies:
-    cssom "~0.3.6"
-
-csstype@^3.1.1:
-  version "3.1.2"
-  resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
-  integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
-
-currently-unhandled@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
-  integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==
-  dependencies:
-    array-find-index "^1.0.1"
-
-cwebp-bin@^6.0.0:
-  version "6.1.2"
-  resolved "https://registry.npmjs.org/cwebp-bin/-/cwebp-bin-6.1.2.tgz#50e90249e0df8c3d95ce8b1cc28d7cd86153005b"
-  integrity sha512-NLEZ/BVAl9g426hwUX/qrQ7b/EfQH7BS1tr+CzPo2EgDQbcdzmUVE+fIfsi64lsL638lWgzTEViMAL4pxV1GOg==
-  dependencies:
-    bin-build "^3.0.0"
-    bin-wrapper "^4.0.1"
-
-cz-conventional-changelog@3.3.0:
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2"
-  integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==
-  dependencies:
-    chalk "^2.4.1"
-    commitizen "^4.0.3"
-    conventional-commit-types "^3.0.0"
-    lodash.map "^4.5.1"
-    longest "^2.0.1"
-    word-wrap "^1.0.3"
-  optionalDependencies:
-    "@commitlint/load" ">6.1.1"
-
-cz-git@^1.3.9:
-  version "1.6.1"
-  resolved "https://registry.npmjs.org/cz-git/-/cz-git-1.6.1.tgz#8e7db8204b1c663cef566f124941133a28e3d85d"
-  integrity sha512-+ohk/MFETERw4o/WpN3hUk7GM8oAwnaQI/uDuREGm4/B+G3DghGvNZQ/0MbFqZHWgKWvMzNZI6eKmPo0uPCu1A==
-
-czg@^1.3.9:
-  version "1.6.1"
-  resolved "https://registry.npmjs.org/czg/-/czg-1.6.1.tgz#1b3456d0b3728c9c64c084b1211645c94ee2cf8c"
-  integrity sha512-F6xzZ+ooLqCOLdsT7miEZRInaTjoglY5CjT5Hc4Yg9gxwLS2zjfUUFGvemVgUZI+ggzFAHE6VL0PA+4ukbOWgQ==
-
-dargs@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc"
-  integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==
-
-data-urls@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
-  integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
-  dependencies:
-    abab "^2.0.3"
-    whatwg-mimetype "^2.3.0"
-    whatwg-url "^8.0.0"
-
-dateformat@^3.0.0:
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
-  integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
-
-dayjs@^1.10.5, dayjs@^1.11.1:
-  version "1.11.7"
-  resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2"
-  integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==
-
-debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
-  version "2.6.9"
-  resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
-  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
-  dependencies:
-    ms "2.0.0"
-
-debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
-  version "4.3.4"
-  resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
-  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
-  dependencies:
-    ms "2.1.2"
-
-debug@^3.2.6, debug@^3.2.7:
-  version "3.2.7"
-  resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
-  integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
-  dependencies:
-    ms "^2.1.1"
-
-decamelize-keys@^1.1.0:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8"
-  integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==
-  dependencies:
-    decamelize "^1.1.0"
-    map-obj "^1.0.0"
-
-decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-  integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
-
-decimal.js@^10.2.1:
-  version "10.4.3"
-  resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
-  integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
-
-decode-uri-component@^0.2.0:
-  version "0.2.2"
-  resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
-  integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
-
-decompress-response@^3.2.0, decompress-response@^3.3.0:
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
-  integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==
-  dependencies:
-    mimic-response "^1.0.0"
-
-decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
-  integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==
-  dependencies:
-    file-type "^5.2.0"
-    is-stream "^1.1.0"
-    tar-stream "^1.5.2"
-
-decompress-tarbz2@^4.0.0:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b"
-  integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==
-  dependencies:
-    decompress-tar "^4.1.0"
-    file-type "^6.1.0"
-    is-stream "^1.1.0"
-    seek-bzip "^1.0.5"
-    unbzip2-stream "^1.0.9"
-
-decompress-targz@^4.0.0:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee"
-  integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==
-  dependencies:
-    decompress-tar "^4.1.1"
-    file-type "^5.2.0"
-    is-stream "^1.1.0"
-
-decompress-unzip@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69"
-  integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==
-  dependencies:
-    file-type "^3.8.0"
-    get-stream "^2.2.0"
-    pify "^2.3.0"
-    yauzl "^2.4.2"
-
-decompress@^4.0.0, decompress@^4.2.0:
-  version "4.2.1"
-  resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118"
-  integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==
-  dependencies:
-    decompress-tar "^4.0.0"
-    decompress-tarbz2 "^4.0.0"
-    decompress-targz "^4.0.0"
-    decompress-unzip "^4.0.1"
-    graceful-fs "^4.1.10"
-    make-dir "^1.0.0"
-    pify "^2.3.0"
-    strip-dirs "^2.0.0"
-
-dedent@0.7.0, dedent@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
-  integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==
-
-deep-is@^0.1.3, deep-is@~0.1.3:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
-  integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
-
-deepmerge@^4.2.2:
-  version "4.3.1"
-  resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
-  integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
-
-defaults@^1.0.3:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
-  integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==
-  dependencies:
-    clone "^1.0.2"
-
-define-lazy-prop@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
-  integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
-
-define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
-  integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
-  dependencies:
-    has-property-descriptors "^1.0.0"
-    object-keys "^1.1.1"
-
-define-property@^0.2.5:
-  version "0.2.5"
-  resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
-  integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==
-  dependencies:
-    is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
-  integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==
-  dependencies:
-    is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
-  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
-  dependencies:
-    is-descriptor "^1.0.2"
-    isobject "^3.0.1"
-
-delayed-stream@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
-
-delegate@^3.1.2:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
-  integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
-
-deprecation@^2.0.0, deprecation@^2.3.1:
-  version "2.3.1"
-  resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
-  integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
-
-detect-file@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
-  integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==
-
-detect-indent@6.1.0:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"
-  integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
-
-detect-newline@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
-  integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
-
-diff-match-patch@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37"
-  integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==
-
-diff-sequences@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
-  integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
-
-diff@^4.0.1:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
-  integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
-
-dijkstrajs@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23"
-  integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==
-
-dir-glob@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
-  integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
-  dependencies:
-    path-type "^4.0.0"
-
-doctrine@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
-  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
-  dependencies:
-    esutils "^2.0.2"
-
-dom-align@^1.12.1, dom-align@^1.12.2:
-  version "1.12.4"
-  resolved "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz#3503992eb2a7cfcb2ed3b2a6d21e0b9c00d54511"
-  integrity sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==
-
-dom-scroll-into-view@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz#0decc8522801fd8d3f1c6ba355a74d382c5f989b"
-  integrity sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==
-
-dom-serializer@0:
-  version "0.2.2"
-  resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
-  integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
-  dependencies:
-    domelementtype "^2.0.1"
-    entities "^2.0.0"
-
-dom-serializer@^1.0.1:
-  version "1.4.1"
-  resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
-  integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
-  dependencies:
-    domelementtype "^2.0.1"
-    domhandler "^4.2.0"
-    entities "^2.0.0"
-
-dom-serializer@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
-  integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
-  dependencies:
-    domelementtype "^2.3.0"
-    domhandler "^5.0.2"
-    entities "^4.2.0"
-
-domelementtype@1, domelementtype@^1.3.1:
-  version "1.3.1"
-  resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
-  integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
-
-domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
-  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
-
-domexception@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
-  integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
-  dependencies:
-    webidl-conversions "^5.0.0"
-
-domhandler@^2.3.0:
-  version "2.4.2"
-  resolved "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
-  integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
-  dependencies:
-    domelementtype "1"
-
-domhandler@^4.2.0, domhandler@^4.3.1:
-  version "4.3.1"
-  resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
-  integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
-  dependencies:
-    domelementtype "^2.2.0"
-
-domhandler@^5.0.2, domhandler@^5.0.3:
-  version "5.0.3"
-  resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
-  integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
-  dependencies:
-    domelementtype "^2.3.0"
-
-domutils@^1.5.1:
-  version "1.7.0"
-  resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
-  integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
-  dependencies:
-    dom-serializer "0"
-    domelementtype "1"
-
-domutils@^2.8.0:
-  version "2.8.0"
-  resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
-  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
-  dependencies:
-    dom-serializer "^1.0.1"
-    domelementtype "^2.2.0"
-    domhandler "^4.2.0"
-
-domutils@^3.0.1:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
-  integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
-  dependencies:
-    dom-serializer "^2.0.0"
-    domelementtype "^2.3.0"
-    domhandler "^5.0.3"
-
-dot-case@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
-  integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
-  dependencies:
-    no-case "^3.0.4"
-    tslib "^2.0.3"
-
-dot-prop@^5.1.0:
-  version "5.3.0"
-  resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
-  integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
-  dependencies:
-    is-obj "^2.0.0"
-
-dotenv-expand@^8.0.2:
-  version "8.0.3"
-  resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz#29016757455bcc748469c83a19b36aaf2b83dd6e"
-  integrity sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==
-
-dotenv@^16.0.0:
-  version "16.0.3"
-  resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
-  integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
-
-download@^6.2.2:
-  version "6.2.5"
-  resolved "https://registry.npmjs.org/download/-/download-6.2.5.tgz#acd6a542e4cd0bb42ca70cfc98c9e43b07039714"
-  integrity sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==
-  dependencies:
-    caw "^2.0.0"
-    content-disposition "^0.5.2"
-    decompress "^4.0.0"
-    ext-name "^5.0.0"
-    file-type "5.2.0"
-    filenamify "^2.0.0"
-    get-stream "^3.0.0"
-    got "^7.0.0"
-    make-dir "^1.0.0"
-    p-event "^1.0.0"
-    pify "^3.0.0"
-
-download@^7.1.0:
-  version "7.1.0"
-  resolved "https://registry.npmjs.org/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233"
-  integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==
-  dependencies:
-    archive-type "^4.0.0"
-    caw "^2.0.1"
-    content-disposition "^0.5.2"
-    decompress "^4.2.0"
-    ext-name "^5.0.0"
-    file-type "^8.1.0"
-    filenamify "^2.0.0"
-    get-stream "^3.0.0"
-    got "^8.3.1"
-    make-dir "^1.2.0"
-    p-event "^2.1.0"
-    pify "^3.0.0"
-
-duplexer3@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e"
-  integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==
-
-eastasianwidth@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
-  integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
-
-echarts@^5.3.2:
-  version "5.4.2"
-  resolved "https://registry.npmjs.org/echarts/-/echarts-5.4.2.tgz#9f38781c9c6ae323e896956178f6956952c77a48"
-  integrity sha512-2W3vw3oI2tWJdyAz+b8DuWS0nfXtSDqlDmqgin/lfzbkB01cuMEN66KWBlmur3YMp5nEDEEt5s23pllnAzB4EA==
-  dependencies:
-    tslib "2.3.0"
-    zrender "5.4.3"
-
-editorconfig@^0.15.3:
-  version "0.15.3"
-  resolved "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5"
-  integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==
-  dependencies:
-    commander "^2.19.0"
-    lru-cache "^4.1.5"
-    semver "^5.6.0"
-    sigmund "^1.0.1"
-
-ee-first@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-  integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
-
-ejs@^3.1.6:
-  version "3.1.9"
-  resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361"
-  integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==
-  dependencies:
-    jake "^10.8.5"
-
-electron-to-chromium@^1.4.284:
-  version "1.4.396"
-  resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.396.tgz#3d3664eb58d86376fbe2fece3705f68ca197205c"
-  integrity sha512-pqKTdqp/c5vsrc0xUPYXTDBo9ixZuGY8es4ZOjjd6HD6bFYbu5QA09VoW3fkY4LF1T0zYk86lN6bZnNlBuOpdQ==
-
-emittery@^0.8.1:
-  version "0.8.1"
-  resolved "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860"
-  integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==
-
-emoji-mart-vue-fast@^11.1.1:
-  version "11.2.0"
-  resolved "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-11.2.0.tgz#3183aae3c7a984f0e77ba02129297d88596d3e4e"
-  integrity sha512-dEVAJAbQop+efR8Zn4bvPQtSREwsVZccQxEBHdi1GNPO0JC9H6l0FswuCli/TrZXAQr1KS7dGEUhS9A1gURFRA==
-  dependencies:
-    "@babel/runtime" "^7.18.6"
-    core-js "^3.23.5"
-    vue-virtual-scroller "^1.0.10"
-
-emoji-regex@^8.0.0:
-  version "8.0.0"
-  resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
-  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
-emoji-regex@^9.2.2:
-  version "9.2.2"
-  resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
-  integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
-
-emojis-list@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
-  integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
-
-encode-utf8@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda"
-  integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==
-
-encodeurl@~1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
-  integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
-
-end-of-stream@^1.0.0, end-of-stream@^1.1.0:
-  version "1.4.4"
-  resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
-  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
-  dependencies:
-    once "^1.4.0"
-
-enquire.js@^2.1.6:
-  version "2.1.6"
-  resolved "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814"
-  integrity sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==
-
-entities@^1.1.1:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
-  integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
-
-entities@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
-  integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
-
-entities@^4.2.0, entities@^4.4.0:
-  version "4.5.0"
-  resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
-  integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
-
-errno@^0.1.1:
-  version "0.1.8"
-  resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
-  integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
-  dependencies:
-    prr "~1.0.1"
-
-error-ex@^1.2.0, error-ex@^1.3.1:
-  version "1.3.2"
-  resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
-  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
-  dependencies:
-    is-arrayish "^0.2.1"
-
-es-abstract@^1.19.0, es-abstract@^1.20.4:
-  version "1.21.2"
-  resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff"
-  integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==
-  dependencies:
-    array-buffer-byte-length "^1.0.0"
-    available-typed-arrays "^1.0.5"
-    call-bind "^1.0.2"
-    es-set-tostringtag "^2.0.1"
-    es-to-primitive "^1.2.1"
-    function.prototype.name "^1.1.5"
-    get-intrinsic "^1.2.0"
-    get-symbol-description "^1.0.0"
-    globalthis "^1.0.3"
-    gopd "^1.0.1"
-    has "^1.0.3"
-    has-property-descriptors "^1.0.0"
-    has-proto "^1.0.1"
-    has-symbols "^1.0.3"
-    internal-slot "^1.0.5"
-    is-array-buffer "^3.0.2"
-    is-callable "^1.2.7"
-    is-negative-zero "^2.0.2"
-    is-regex "^1.1.4"
-    is-shared-array-buffer "^1.0.2"
-    is-string "^1.0.7"
-    is-typed-array "^1.1.10"
-    is-weakref "^1.0.2"
-    object-inspect "^1.12.3"
-    object-keys "^1.1.1"
-    object.assign "^4.1.4"
-    regexp.prototype.flags "^1.4.3"
-    safe-regex-test "^1.0.0"
-    string.prototype.trim "^1.2.7"
-    string.prototype.trimend "^1.0.6"
-    string.prototype.trimstart "^1.0.6"
-    typed-array-length "^1.0.4"
-    unbox-primitive "^1.0.2"
-    which-typed-array "^1.1.9"
-
-es-module-lexer@^0.9.3:
-  version "0.9.3"
-  resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19"
-  integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==
-
-es-set-tostringtag@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
-  integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==
-  dependencies:
-    get-intrinsic "^1.1.3"
-    has "^1.0.3"
-    has-tostringtag "^1.0.0"
-
-es-to-primitive@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
-  integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
-  dependencies:
-    is-callable "^1.1.4"
-    is-date-object "^1.0.1"
-    is-symbol "^1.0.2"
-
-esbuild-android-64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be"
-  integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==
-
-esbuild-android-64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz#20a7ae1416c8eaade917fb2453c1259302c637a5"
-  integrity sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==
-
-esbuild-android-arm64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771"
-  integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==
-
-esbuild-android-arm64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz#9cc0ec60581d6ad267568f29cf4895ffdd9f2f04"
-  integrity sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==
-
-esbuild-darwin-64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25"
-  integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==
-
-esbuild-darwin-64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz#428e1730ea819d500808f220fbc5207aea6d4410"
-  integrity sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==
-
-esbuild-darwin-arm64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73"
-  integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==
-
-esbuild-darwin-arm64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz#b6dfc7799115a2917f35970bfbc93ae50256b337"
-  integrity sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==
-
-esbuild-freebsd-64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d"
-  integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==
-
-esbuild-freebsd-64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz#4e190d9c2d1e67164619ae30a438be87d5eedaf2"
-  integrity sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==
-
-esbuild-freebsd-arm64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48"
-  integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==
-
-esbuild-freebsd-arm64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz#18a4c0344ee23bd5a6d06d18c76e2fd6d3f91635"
-  integrity sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==
-
-esbuild-linux-32@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5"
-  integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==
-
-esbuild-linux-32@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz#9a329731ee079b12262b793fb84eea762e82e0ce"
-  integrity sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==
-
-esbuild-linux-64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652"
-  integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==
-
-esbuild-linux-64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz#532738075397b994467b514e524aeb520c191b6c"
-  integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==
-
-esbuild-linux-arm64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b"
-  integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==
-
-esbuild-linux-arm64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz#5372e7993ac2da8f06b2ba313710d722b7a86e5d"
-  integrity sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==
-
-esbuild-linux-arm@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59"
-  integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==
-
-esbuild-linux-arm@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz#e734aaf259a2e3d109d4886c9e81ec0f2fd9a9cc"
-  integrity sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==
-
-esbuild-linux-mips64le@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34"
-  integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==
-
-esbuild-linux-mips64le@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz#c0487c14a9371a84eb08fab0e1d7b045a77105eb"
-  integrity sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==
-
-esbuild-linux-ppc64le@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e"
-  integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==
-
-esbuild-linux-ppc64le@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz#af048ad94eed0ce32f6d5a873f7abe9115012507"
-  integrity sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==
-
-esbuild-linux-riscv64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8"
-  integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==
-
-esbuild-linux-riscv64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz#423ed4e5927bd77f842bd566972178f424d455e6"
-  integrity sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==
-
-esbuild-linux-s390x@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6"
-  integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==
-
-esbuild-linux-s390x@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz#21d21eaa962a183bfb76312e5a01cc5ae48ce8eb"
-  integrity sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==
-
-esbuild-netbsd-64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81"
-  integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==
-
-esbuild-netbsd-64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz#ae75682f60d08560b1fe9482bfe0173e5110b998"
-  integrity sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==
-
-esbuild-node-loader@^0.6.5:
-  version "0.6.5"
-  resolved "https://registry.npmjs.org/esbuild-node-loader/-/esbuild-node-loader-0.6.5.tgz#c0aad436d01542150a8297b99dab71aa82add818"
-  integrity sha512-uPP+dllWm38cFvDysdocutN3lfe5pTIbddAHp1ENyLzpHYqE2r+3Wo+pfg9X3p8DFWwzIisft5YkeBIthIcixw==
-  dependencies:
-    esbuild ">=0.13.12"
-
-esbuild-openbsd-64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b"
-  integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==
-
-esbuild-openbsd-64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz#79591a90aa3b03e4863f93beec0d2bab2853d0a8"
-  integrity sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==
-
-esbuild-plugin-alias@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/esbuild-plugin-alias/-/esbuild-plugin-alias-0.1.2.tgz#1232fbde807c0c8ad44c44ec859819eb492e12a8"
-  integrity sha512-WsX0OJy8IGOsGZV+4oHEU5B6XQUpxOsZN1iSoYf9COTDbY7WXcOwd1oCLYNWUIWCExyGXSghIGq2k7sXBldxwQ==
-
-esbuild-register@^3.3.2:
-  version "3.4.2"
-  resolved "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.4.2.tgz#1e39ee0a77e8f320a9790e68c64c3559620b9175"
-  integrity sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==
-  dependencies:
-    debug "^4.3.4"
-
-esbuild-sunos-64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da"
-  integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==
-
-esbuild-sunos-64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz#fd528aa5da5374b7e1e93d36ef9b07c3dfed2971"
-  integrity sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==
-
-esbuild-windows-32@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31"
-  integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==
-
-esbuild-windows-32@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz#0e92b66ecdf5435a76813c4bc5ccda0696f4efc3"
-  integrity sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==
-
-esbuild-windows-64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4"
-  integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==
-
-esbuild-windows-64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz#0fc761d785414284fc408e7914226d33f82420d0"
-  integrity sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==
-
-esbuild-windows-arm64@0.14.54:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982"
-  integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==
-
-esbuild-windows-arm64@0.15.18:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz#5b5bdc56d341d0922ee94965c89ee120a6a86eb7"
-  integrity sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==
-
-esbuild@>=0.13.0, esbuild@>=0.13.12:
-  version "0.17.19"
-  resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955"
-  integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==
-  optionalDependencies:
-    "@esbuild/android-arm" "0.17.19"
-    "@esbuild/android-arm64" "0.17.19"
-    "@esbuild/android-x64" "0.17.19"
-    "@esbuild/darwin-arm64" "0.17.19"
-    "@esbuild/darwin-x64" "0.17.19"
-    "@esbuild/freebsd-arm64" "0.17.19"
-    "@esbuild/freebsd-x64" "0.17.19"
-    "@esbuild/linux-arm" "0.17.19"
-    "@esbuild/linux-arm64" "0.17.19"
-    "@esbuild/linux-ia32" "0.17.19"
-    "@esbuild/linux-loong64" "0.17.19"
-    "@esbuild/linux-mips64el" "0.17.19"
-    "@esbuild/linux-ppc64" "0.17.19"
-    "@esbuild/linux-riscv64" "0.17.19"
-    "@esbuild/linux-s390x" "0.17.19"
-    "@esbuild/linux-x64" "0.17.19"
-    "@esbuild/netbsd-x64" "0.17.19"
-    "@esbuild/openbsd-x64" "0.17.19"
-    "@esbuild/sunos-x64" "0.17.19"
-    "@esbuild/win32-arm64" "0.17.19"
-    "@esbuild/win32-ia32" "0.17.19"
-    "@esbuild/win32-x64" "0.17.19"
-
-esbuild@^0.11.23:
-  version "0.11.23"
-  resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz#c42534f632e165120671d64db67883634333b4b8"
-  integrity sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==
-
-esbuild@^0.14.14, esbuild@^0.14.36:
-  version "0.14.54"
-  resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2"
-  integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==
-  optionalDependencies:
-    "@esbuild/linux-loong64" "0.14.54"
-    esbuild-android-64 "0.14.54"
-    esbuild-android-arm64 "0.14.54"
-    esbuild-darwin-64 "0.14.54"
-    esbuild-darwin-arm64 "0.14.54"
-    esbuild-freebsd-64 "0.14.54"
-    esbuild-freebsd-arm64 "0.14.54"
-    esbuild-linux-32 "0.14.54"
-    esbuild-linux-64 "0.14.54"
-    esbuild-linux-arm "0.14.54"
-    esbuild-linux-arm64 "0.14.54"
-    esbuild-linux-mips64le "0.14.54"
-    esbuild-linux-ppc64le "0.14.54"
-    esbuild-linux-riscv64 "0.14.54"
-    esbuild-linux-s390x "0.14.54"
-    esbuild-netbsd-64 "0.14.54"
-    esbuild-openbsd-64 "0.14.54"
-    esbuild-sunos-64 "0.14.54"
-    esbuild-windows-32 "0.14.54"
-    esbuild-windows-64 "0.14.54"
-    esbuild-windows-arm64 "0.14.54"
-
-esbuild@^0.15.9:
-  version "0.15.18"
-  resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz#ea894adaf3fbc036d32320a00d4d6e4978a2f36d"
-  integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==
-  optionalDependencies:
-    "@esbuild/android-arm" "0.15.18"
-    "@esbuild/linux-loong64" "0.15.18"
-    esbuild-android-64 "0.15.18"
-    esbuild-android-arm64 "0.15.18"
-    esbuild-darwin-64 "0.15.18"
-    esbuild-darwin-arm64 "0.15.18"
-    esbuild-freebsd-64 "0.15.18"
-    esbuild-freebsd-arm64 "0.15.18"
-    esbuild-linux-32 "0.15.18"
-    esbuild-linux-64 "0.15.18"
-    esbuild-linux-arm "0.15.18"
-    esbuild-linux-arm64 "0.15.18"
-    esbuild-linux-mips64le "0.15.18"
-    esbuild-linux-ppc64le "0.15.18"
-    esbuild-linux-riscv64 "0.15.18"
-    esbuild-linux-s390x "0.15.18"
-    esbuild-netbsd-64 "0.15.18"
-    esbuild-openbsd-64 "0.15.18"
-    esbuild-sunos-64 "0.15.18"
-    esbuild-windows-32 "0.15.18"
-    esbuild-windows-64 "0.15.18"
-    esbuild-windows-arm64 "0.15.18"
-
-escalade@^3.1.1:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
-  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
-
-escape-html@~1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
-  integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
-
-escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-  integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
-
-escape-string-regexp@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
-  integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
-
-escape-string-regexp@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
-  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-
-escodegen@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
-  integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
-  dependencies:
-    esprima "^4.0.1"
-    estraverse "^5.2.0"
-    esutils "^2.0.2"
-    optionator "^0.8.1"
-  optionalDependencies:
-    source-map "~0.6.1"
-
-eslint-config-prettier@^8.5.0:
-  version "8.8.0"
-  resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348"
-  integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==
-
-eslint-define-config@^1.1.1:
-  version "1.20.0"
-  resolved "https://registry.npmjs.org/eslint-define-config/-/eslint-define-config-1.20.0.tgz#03881929aea6148660f843cc05c5b9b08c08b2d1"
-  integrity sha512-JLhyTcY5eOUGXoPP4Ldnf1TMOllRt4vbvuAtkwq+ugU0JGDqosdRLYWMtn9NjYAd9rApR5EcItdSmpY6FsILew==
-
-eslint-plugin-jest@^25.2.2:
-  version "25.7.0"
-  resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a"
-  integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==
-  dependencies:
-    "@typescript-eslint/experimental-utils" "^5.0.0"
-
-eslint-plugin-prettier@^4.0.0:
-  version "4.2.1"
-  resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b"
-  integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==
-  dependencies:
-    prettier-linter-helpers "^1.0.0"
-
-eslint-plugin-vue@^8.6.0:
-  version "8.7.1"
-  resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz#f13c53547a0c9d64588a675cc5ecc6ccaf63703f"
-  integrity sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==
-  dependencies:
-    eslint-utils "^3.0.0"
-    natural-compare "^1.4.0"
-    nth-check "^2.0.1"
-    postcss-selector-parser "^6.0.9"
-    semver "^7.3.5"
-    vue-eslint-parser "^8.0.1"
-
-eslint-scope@^5.1.1:
-  version "5.1.1"
-  resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
-  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
-  dependencies:
-    esrecurse "^4.3.0"
-    estraverse "^4.1.1"
-
-eslint-scope@^7.0.0, eslint-scope@^7.2.0:
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b"
-  integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==
-  dependencies:
-    esrecurse "^4.3.0"
-    estraverse "^5.2.0"
-
-eslint-utils@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
-  integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
-  dependencies:
-    eslint-visitor-keys "^2.0.0"
-
-eslint-visitor-keys@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
-  integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
-
-eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1:
-  version "3.4.1"
-  resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
-  integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
-
-eslint@^8.13.0:
-  version "8.40.0"
-  resolved "https://registry.npmjs.org/eslint/-/eslint-8.40.0.tgz#a564cd0099f38542c4e9a2f630fa45bf33bc42a4"
-  integrity sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==
-  dependencies:
-    "@eslint-community/eslint-utils" "^4.2.0"
-    "@eslint-community/regexpp" "^4.4.0"
-    "@eslint/eslintrc" "^2.0.3"
-    "@eslint/js" "8.40.0"
-    "@humanwhocodes/config-array" "^0.11.8"
-    "@humanwhocodes/module-importer" "^1.0.1"
-    "@nodelib/fs.walk" "^1.2.8"
-    ajv "^6.10.0"
-    chalk "^4.0.0"
-    cross-spawn "^7.0.2"
-    debug "^4.3.2"
-    doctrine "^3.0.0"
-    escape-string-regexp "^4.0.0"
-    eslint-scope "^7.2.0"
-    eslint-visitor-keys "^3.4.1"
-    espree "^9.5.2"
-    esquery "^1.4.2"
-    esutils "^2.0.2"
-    fast-deep-equal "^3.1.3"
-    file-entry-cache "^6.0.1"
-    find-up "^5.0.0"
-    glob-parent "^6.0.2"
-    globals "^13.19.0"
-    grapheme-splitter "^1.0.4"
-    ignore "^5.2.0"
-    import-fresh "^3.0.0"
-    imurmurhash "^0.1.4"
-    is-glob "^4.0.0"
-    is-path-inside "^3.0.3"
-    js-sdsl "^4.1.4"
-    js-yaml "^4.1.0"
-    json-stable-stringify-without-jsonify "^1.0.1"
-    levn "^0.4.1"
-    lodash.merge "^4.6.2"
-    minimatch "^3.1.2"
-    natural-compare "^1.4.0"
-    optionator "^0.9.1"
-    strip-ansi "^6.0.1"
-    strip-json-comments "^3.1.0"
-    text-table "^0.2.0"
-
-esno@^0.14.1:
-  version "0.14.1"
-  resolved "https://registry.npmjs.org/esno/-/esno-0.14.1.tgz#b7557b3c70eda5ae0c3f0daa07739b8337526610"
-  integrity sha512-yDFYw6dGUjCT1qKsdG7WOc/RzIh/qwxUEVZ+ohCltaxBxEFMNqeqbQL9xjRl6Yvdwrfc5OCjUA9JbFmuu/8BKg==
-  dependencies:
-    cross-spawn "^7.0.3"
-    esbuild ">=0.13.0"
-    esbuild-node-loader "^0.6.5"
-    esbuild-register "^3.3.2"
-    import-meta-resolve "^1.1.1"
-
-espree@^9.0.0, espree@^9.5.2:
-  version "9.5.2"
-  resolved "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b"
-  integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==
-  dependencies:
-    acorn "^8.8.0"
-    acorn-jsx "^5.3.2"
-    eslint-visitor-keys "^3.4.1"
-
-esprima@^4.0.0, esprima@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
-  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-
-esquery@^1.4.0, esquery@^1.4.2:
-  version "1.5.0"
-  resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
-  integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
-  dependencies:
-    estraverse "^5.1.0"
-
-esrecurse@^4.3.0:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
-  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
-  dependencies:
-    estraverse "^5.2.0"
-
-estraverse@^4.1.1:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
-  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-
-estraverse@^5.1.0, estraverse@^5.2.0:
-  version "5.3.0"
-  resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
-  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
-
-estree-walker@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
-  integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==
-
-estree-walker@^2.0.1, estree-walker@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
-  integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
-
-esutils@^2.0.2:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
-  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
-
-etag@^1.8.1:
-  version "1.8.1"
-  resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
-  integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
-
-eventemitter3@^4.0.0:
-  version "4.0.7"
-  resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
-  integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
-
-exec-buffer@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz#b1686dbd904c7cf982e652c1f5a79b1e5573082b"
-  integrity sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==
-  dependencies:
-    execa "^0.7.0"
-    p-finally "^1.0.0"
-    pify "^3.0.0"
-    rimraf "^2.5.4"
-    tempfile "^2.0.0"
-
-execa@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
-  integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==
-  dependencies:
-    cross-spawn "^5.0.1"
-    get-stream "^3.0.0"
-    is-stream "^1.1.0"
-    npm-run-path "^2.0.0"
-    p-finally "^1.0.0"
-    signal-exit "^3.0.0"
-    strip-eof "^1.0.0"
-
-execa@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
-  integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
-  dependencies:
-    cross-spawn "^6.0.0"
-    get-stream "^4.0.0"
-    is-stream "^1.1.0"
-    npm-run-path "^2.0.0"
-    p-finally "^1.0.0"
-    signal-exit "^3.0.0"
-    strip-eof "^1.0.0"
-
-execa@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
-  integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
-  dependencies:
-    cross-spawn "^7.0.0"
-    get-stream "^5.0.0"
-    human-signals "^1.1.1"
-    is-stream "^2.0.0"
-    merge-stream "^2.0.0"
-    npm-run-path "^4.0.0"
-    onetime "^5.1.0"
-    signal-exit "^3.0.2"
-    strip-final-newline "^2.0.0"
-
-execa@^5.0.0, execa@^5.1.1:
-  version "5.1.1"
-  resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
-  integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
-  dependencies:
-    cross-spawn "^7.0.3"
-    get-stream "^6.0.0"
-    human-signals "^2.1.0"
-    is-stream "^2.0.0"
-    merge-stream "^2.0.0"
-    npm-run-path "^4.0.1"
-    onetime "^5.1.2"
-    signal-exit "^3.0.3"
-    strip-final-newline "^2.0.0"
-
-executable@^4.1.0:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c"
-  integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==
-  dependencies:
-    pify "^2.2.0"
-
-exit@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
-  integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
-
-expand-brackets@^2.1.4:
-  version "2.1.4"
-  resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
-  integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==
-  dependencies:
-    debug "^2.3.3"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    posix-character-classes "^0.1.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-expand-tilde@^2.0.0, expand-tilde@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
-  integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==
-  dependencies:
-    homedir-polyfill "^1.0.1"
-
-expect@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74"
-  integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==
-  dependencies:
-    "@jest/types" "^27.5.1"
-    jest-get-type "^27.5.1"
-    jest-matcher-utils "^27.5.1"
-    jest-message-util "^27.5.1"
-
-ext-list@^2.0.0:
-  version "2.2.2"
-  resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37"
-  integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==
-  dependencies:
-    mime-db "^1.28.0"
-
-ext-name@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6"
-  integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==
-  dependencies:
-    ext-list "^2.0.0"
-    sort-keys-length "^1.0.0"
-
-extend-shallow@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
-  integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
-  dependencies:
-    is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
-  integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==
-  dependencies:
-    assign-symbols "^1.0.0"
-    is-extendable "^1.0.1"
-
-external-editor@^3.0.3:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
-  integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
-  dependencies:
-    chardet "^0.7.0"
-    iconv-lite "^0.4.24"
-    tmp "^0.0.33"
-
-extglob@^2.0.2:
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
-  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
-  dependencies:
-    array-unique "^0.3.2"
-    define-property "^1.0.0"
-    expand-brackets "^2.1.4"
-    extend-shallow "^2.0.1"
-    fragment-cache "^0.2.1"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
-  version "3.1.3"
-  resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
-  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-
-fast-diff@^1.1.2:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
-  integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
-
-fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.7, fast-glob@^3.2.9:
-  version "3.2.12"
-  resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
-  integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
-  dependencies:
-    "@nodelib/fs.stat" "^2.0.2"
-    "@nodelib/fs.walk" "^1.2.3"
-    glob-parent "^5.1.2"
-    merge2 "^1.3.0"
-    micromatch "^4.0.4"
-
-fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
-  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-
-fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
-  version "2.0.6"
-  resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
-  integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
-
-fast-xml-parser@^4.1.3:
-  version "4.2.2"
-  resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.2.tgz#cb7310d1e9cf42d22c687b0fae41f3c926629368"
-  integrity sha512-DLzIPtQqmvmdq3VUKR7T6omPK/VCRNqgFlGtbESfyhcH2R4I8EzK1/K6E8PkRCK2EabWrUHK32NjYRbEFnnz0Q==
-  dependencies:
-    strnum "^1.0.5"
-
-fastest-levenshtein@1.0.16, fastest-levenshtein@^1.0.16:
-  version "1.0.16"
-  resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5"
-  integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
-
-fastq@^1.6.0:
-  version "1.15.0"
-  resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
-  integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
-  dependencies:
-    reusify "^1.0.4"
-
-fb-watchman@^2.0.0:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c"
-  integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==
-  dependencies:
-    bser "2.1.1"
-
-fd-slicer@~1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
-  integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
-  dependencies:
-    pend "~1.2.0"
-
-figures@^1.3.5:
-  version "1.7.0"
-  resolved "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
-  integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==
-  dependencies:
-    escape-string-regexp "^1.0.5"
-    object-assign "^4.1.0"
-
-figures@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
-  integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
-  dependencies:
-    escape-string-regexp "^1.0.5"
-
-file-entry-cache@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
-  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
-  dependencies:
-    flat-cache "^3.0.4"
-
-file-type@5.2.0, file-type@^5.2.0:
-  version "5.2.0"
-  resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6"
-  integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==
-
-file-type@^10.4.0, file-type@^10.5.0:
-  version "10.11.0"
-  resolved "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz#2961d09e4675b9fb9a3ee6b69e9cd23f43fd1890"
-  integrity sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==
-
-file-type@^12.0.0:
-  version "12.4.2"
-  resolved "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz#a344ea5664a1d01447ee7fb1b635f72feb6169d9"
-  integrity sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==
-
-file-type@^3.8.0:
-  version "3.9.0"
-  resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
-  integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==
-
-file-type@^4.2.0:
-  version "4.4.0"
-  resolved "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5"
-  integrity sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==
-
-file-type@^6.1.0:
-  version "6.2.0"
-  resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919"
-  integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==
-
-file-type@^8.1.0:
-  version "8.1.0"
-  resolved "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c"
-  integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==
-
-filelist@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
-  integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
-  dependencies:
-    minimatch "^5.0.1"
-
-filename-reserved-regex@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229"
-  integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==
-
-filenamify@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9"
-  integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==
-  dependencies:
-    filename-reserved-regex "^2.0.0"
-    strip-outer "^1.0.0"
-    trim-repeated "^1.0.0"
-
-fill-range@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
-  integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-    to-regex-range "^2.1.0"
-
-fill-range@^7.0.1:
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
-  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
-  dependencies:
-    to-regex-range "^5.0.1"
-
-finalhandler@1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
-  integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
-  dependencies:
-    debug "2.6.9"
-    encodeurl "~1.0.2"
-    escape-html "~1.0.3"
-    on-finished "~2.3.0"
-    parseurl "~1.3.3"
-    statuses "~1.5.0"
-    unpipe "~1.0.0"
-
-find-node-modules@^2.1.2:
-  version "2.1.3"
-  resolved "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44"
-  integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==
-  dependencies:
-    findup-sync "^4.0.0"
-    merge "^2.1.1"
-
-find-root@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
-  integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
-
-find-up@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
-  integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==
-  dependencies:
-    path-exists "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-find-up@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
-  integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==
-  dependencies:
-    locate-path "^2.0.0"
-
-find-up@^4.0.0, find-up@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
-  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
-  dependencies:
-    locate-path "^5.0.0"
-    path-exists "^4.0.0"
-
-find-up@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
-  integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
-  dependencies:
-    locate-path "^6.0.0"
-    path-exists "^4.0.0"
-
-find-versions@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e"
-  integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==
-  dependencies:
-    semver-regex "^2.0.0"
-
-findup-sync@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0"
-  integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==
-  dependencies:
-    detect-file "^1.0.0"
-    is-glob "^4.0.0"
-    micromatch "^4.0.2"
-    resolve-dir "^1.0.1"
-
-flat-cache@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
-  integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
-  dependencies:
-    flatted "^3.1.0"
-    rimraf "^3.0.2"
-
-flatted@^3.1.0:
-  version "3.2.7"
-  resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
-  integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
-
-follow-redirects@^1.0.0, follow-redirects@^1.14.8, follow-redirects@^1.15.0:
-  version "1.15.2"
-  resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
-  integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
-
-for-each@^0.3.3:
-  version "0.3.3"
-  resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
-  integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
-  dependencies:
-    is-callable "^1.1.3"
-
-for-in@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-  integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==
-
-form-data@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
-  integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
-  dependencies:
-    asynckit "^0.4.0"
-    combined-stream "^1.0.8"
-    mime-types "^2.1.12"
-
-form-data@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
-  integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
-  dependencies:
-    asynckit "^0.4.0"
-    combined-stream "^1.0.8"
-    mime-types "^2.1.12"
-
-fraction.js@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
-  integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
-
-fragment-cache@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
-  integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==
-  dependencies:
-    map-cache "^0.2.2"
-
-from2@^2.1.1:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
-  integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==
-  dependencies:
-    inherits "^2.0.1"
-    readable-stream "^2.0.0"
-
-fs-constants@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
-  integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
-
-fs-extra@9.1.0, fs-extra@^9.0.1:
-  version "9.1.0"
-  resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
-  integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
-  dependencies:
-    at-least-node "^1.0.0"
-    graceful-fs "^4.2.0"
-    jsonfile "^6.0.1"
-    universalify "^2.0.0"
-
-fs-extra@^10.0.0, fs-extra@^10.0.1, fs-extra@^10.1.0:
-  version "10.1.0"
-  resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
-  integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
-  dependencies:
-    graceful-fs "^4.2.0"
-    jsonfile "^6.0.1"
-    universalify "^2.0.0"
-
-fs.realpath@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
-
-fsevents@^2.3.2, fsevents@~2.3.2:
-  version "2.3.2"
-  resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
-  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-
-function-bind@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
-  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-function.prototype.name@^1.1.5:
-  version "1.1.5"
-  resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
-  integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
-  dependencies:
-    call-bind "^1.0.2"
-    define-properties "^1.1.3"
-    es-abstract "^1.19.0"
-    functions-have-names "^1.2.2"
-
-functions-have-names@^1.2.2, functions-have-names@^1.2.3:
-  version "1.2.3"
-  resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
-  integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
-
-gensync@^1.0.0-beta.2:
-  version "1.0.0-beta.2"
-  resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
-  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-
-get-caller-file@^2.0.1, get-caller-file@^2.0.5:
-  version "2.0.5"
-  resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
-  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
-  integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
-  dependencies:
-    function-bind "^1.1.1"
-    has "^1.0.3"
-    has-proto "^1.0.1"
-    has-symbols "^1.0.3"
-
-get-own-enumerable-property-symbols@^3.0.0:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
-  integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
-
-get-package-type@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
-  integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
-
-get-pkg-repo@^4.0.0:
-  version "4.2.1"
-  resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385"
-  integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==
-  dependencies:
-    "@hutson/parse-repository-url" "^3.0.0"
-    hosted-git-info "^4.0.0"
-    through2 "^2.0.0"
-    yargs "^16.2.0"
-
-get-proxy@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93"
-  integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==
-  dependencies:
-    npm-conf "^1.1.0"
-
-get-stdin@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
-  integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==
-
-get-stream@3.0.0, get-stream@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
-  integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==
-
-get-stream@^2.2.0:
-  version "2.3.1"
-  resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
-  integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==
-  dependencies:
-    object-assign "^4.0.1"
-    pinkie-promise "^2.0.0"
-
-get-stream@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
-  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
-  dependencies:
-    pump "^3.0.0"
-
-get-stream@^5.0.0:
-  version "5.2.0"
-  resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
-  integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
-  dependencies:
-    pump "^3.0.0"
-
-get-stream@^6.0.0:
-  version "6.0.1"
-  resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
-  integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-
-get-symbol-description@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
-  integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
-  dependencies:
-    call-bind "^1.0.2"
-    get-intrinsic "^1.1.1"
-
-get-value@^2.0.3, get-value@^2.0.6:
-  version "2.0.6"
-  resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
-  integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==
-
-gifsicle@5.2.0:
-  version "5.2.0"
-  resolved "https://registry.npmjs.org/gifsicle/-/gifsicle-5.2.0.tgz#b06b25ed7530f033f6ed2c545d6f9b546cc182fb"
-  integrity sha512-vOIS3j0XoTCxq9pkGj43gEix82RkI5FveNgaFZutjbaui/HH+4fR8Y56dwXDuxYo8hR4xOo6/j2h1WHoQW6XLw==
-  dependencies:
-    bin-build "^3.0.0"
-    bin-wrapper "^4.0.0"
-    execa "^5.0.0"
-    logalot "^2.0.0"
-
-gifsicle@^5.0.0:
-  version "5.3.0"
-  resolved "https://registry.npmjs.org/gifsicle/-/gifsicle-5.3.0.tgz#499713c6f1e89ebbc3630da3a74fdb4697913b4e"
-  integrity sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==
-  dependencies:
-    bin-build "^3.0.0"
-    bin-wrapper "^4.0.0"
-    execa "^5.0.0"
-
-git-raw-commits@^2.0.0, git-raw-commits@^2.0.8:
-  version "2.0.11"
-  resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723"
-  integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==
-  dependencies:
-    dargs "^7.0.0"
-    lodash "^4.17.15"
-    meow "^8.0.0"
-    split2 "^3.0.0"
-    through2 "^4.0.0"
-
-git-remote-origin-url@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f"
-  integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==
-  dependencies:
-    gitconfiglocal "^1.0.0"
-    pify "^2.3.0"
-
-git-semver-tags@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780"
-  integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==
-  dependencies:
-    meow "^8.0.0"
-    semver "^6.0.0"
-
-gitconfiglocal@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b"
-  integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==
-  dependencies:
-    ini "^1.3.2"
-
-glob-parent@^5.1.2, glob-parent@~5.1.2:
-  version "5.1.2"
-  resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
-  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
-  dependencies:
-    is-glob "^4.0.1"
-
-glob-parent@^6.0.2:
-  version "6.0.2"
-  resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
-  integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
-  dependencies:
-    is-glob "^4.0.3"
-
-glob@7.2.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
-  version "7.2.3"
-  resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
-  integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.1.1"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-glob@^8.0.3:
-  version "8.1.0"
-  resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
-  integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^5.0.1"
-    once "^1.3.0"
-
-global-dirs@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
-  integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==
-  dependencies:
-    ini "^1.3.4"
-
-global-modules@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
-  integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
-  dependencies:
-    global-prefix "^1.0.1"
-    is-windows "^1.0.1"
-    resolve-dir "^1.0.0"
-
-global-modules@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
-  integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
-  dependencies:
-    global-prefix "^3.0.0"
-
-global-prefix@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
-  integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==
-  dependencies:
-    expand-tilde "^2.0.2"
-    homedir-polyfill "^1.0.1"
-    ini "^1.3.4"
-    is-windows "^1.0.1"
-    which "^1.2.14"
-
-global-prefix@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
-  integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
-  dependencies:
-    ini "^1.3.5"
-    kind-of "^6.0.2"
-    which "^1.3.1"
-
-globals@^11.1.0:
-  version "11.12.0"
-  resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
-  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-
-globals@^13.19.0:
-  version "13.20.0"
-  resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82"
-  integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==
-  dependencies:
-    type-fest "^0.20.2"
-
-globalthis@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
-  integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
-  dependencies:
-    define-properties "^1.1.3"
-
-globby@^10.0.0:
-  version "10.0.2"
-  resolved "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543"
-  integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==
-  dependencies:
-    "@types/glob" "^7.1.1"
-    array-union "^2.1.0"
-    dir-glob "^3.0.1"
-    fast-glob "^3.0.3"
-    glob "^7.1.3"
-    ignore "^5.1.1"
-    merge2 "^1.2.3"
-    slash "^3.0.0"
-
-globby@^11.1.0:
-  version "11.1.0"
-  resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
-  integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
-  dependencies:
-    array-union "^2.1.0"
-    dir-glob "^3.0.1"
-    fast-glob "^3.2.9"
-    ignore "^5.2.0"
-    merge2 "^1.4.1"
-    slash "^3.0.0"
-
-globjoin@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43"
-  integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==
-
-good-listener@^1.2.2:
-  version "1.2.2"
-  resolved "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
-  integrity sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==
-  dependencies:
-    delegate "^3.1.2"
-
-gopd@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
-  integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
-  dependencies:
-    get-intrinsic "^1.1.3"
-
-got@^7.0.0:
-  version "7.1.0"
-  resolved "https://registry.npmjs.org/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a"
-  integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==
-  dependencies:
-    decompress-response "^3.2.0"
-    duplexer3 "^0.1.4"
-    get-stream "^3.0.0"
-    is-plain-obj "^1.1.0"
-    is-retry-allowed "^1.0.0"
-    is-stream "^1.0.0"
-    isurl "^1.0.0-alpha5"
-    lowercase-keys "^1.0.0"
-    p-cancelable "^0.3.0"
-    p-timeout "^1.1.1"
-    safe-buffer "^5.0.1"
-    timed-out "^4.0.0"
-    url-parse-lax "^1.0.0"
-    url-to-options "^1.0.1"
-
-got@^8.3.1:
-  version "8.3.2"
-  resolved "https://registry.npmjs.org/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937"
-  integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==
-  dependencies:
-    "@sindresorhus/is" "^0.7.0"
-    cacheable-request "^2.1.1"
-    decompress-response "^3.3.0"
-    duplexer3 "^0.1.4"
-    get-stream "^3.0.0"
-    into-stream "^3.1.0"
-    is-retry-allowed "^1.1.0"
-    isurl "^1.0.0-alpha5"
-    lowercase-keys "^1.0.0"
-    mimic-response "^1.0.0"
-    p-cancelable "^0.4.0"
-    p-timeout "^2.0.1"
-    pify "^3.0.0"
-    safe-buffer "^5.1.1"
-    timed-out "^4.0.1"
-    url-parse-lax "^3.0.0"
-    url-to-options "^1.0.1"
-
-graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.9:
-  version "4.2.11"
-  resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
-  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-
-grapheme-splitter@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
-  integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
-
-handlebars@^4.7.7:
-  version "4.7.7"
-  resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"
-  integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==
-  dependencies:
-    minimist "^1.2.5"
-    neo-async "^2.6.0"
-    source-map "^0.6.1"
-    wordwrap "^1.0.0"
-  optionalDependencies:
-    uglify-js "^3.1.4"
-
-hard-rejection@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
-  integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
-
-has-ansi@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
-  integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==
-  dependencies:
-    ansi-regex "^2.0.0"
-
-has-bigints@^1.0.1, has-bigints@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
-  integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
-
-has-flag@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
-  integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==
-
-has-flag@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
-  integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
-
-has-flag@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
-  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-
-has-property-descriptors@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
-  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
-  dependencies:
-    get-intrinsic "^1.1.1"
-
-has-proto@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
-  integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
-
-has-symbol-support-x@^1.4.1:
-  version "1.4.2"
-  resolved "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
-  integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==
-
-has-symbols@^1.0.2, has-symbols@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
-  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
-
-has-to-string-tag-x@^1.2.0:
-  version "1.4.1"
-  resolved "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
-  integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==
-  dependencies:
-    has-symbol-support-x "^1.4.1"
-
-has-tostringtag@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
-  integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
-  dependencies:
-    has-symbols "^1.0.2"
-
-has-value@^0.3.1:
-  version "0.3.1"
-  resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
-  integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==
-  dependencies:
-    get-value "^2.0.3"
-    has-values "^0.1.4"
-    isobject "^2.0.0"
-
-has-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
-  integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==
-  dependencies:
-    get-value "^2.0.6"
-    has-values "^1.0.0"
-    isobject "^3.0.0"
-
-has-values@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
-  integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==
-
-has-values@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
-  integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==
-  dependencies:
-    is-number "^3.0.0"
-    kind-of "^4.0.0"
-
-has@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
-  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
-  dependencies:
-    function-bind "^1.1.1"
-
-hash-sum@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"
-  integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
-
-he@1.2.0, he@^1.1.1, he@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
-  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-
-header-case@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063"
-  integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==
-  dependencies:
-    capital-case "^1.0.4"
-    tslib "^2.0.3"
-
-homedir-polyfill@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
-  integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
-  dependencies:
-    parse-passwd "^1.0.0"
-
-hosted-git-info@^2.1.4:
-  version "2.8.9"
-  resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
-  integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
-
-hosted-git-info@^4.0.0, hosted-git-info@^4.0.1:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
-  integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
-  dependencies:
-    lru-cache "^6.0.0"
-
-html-encoding-sniffer@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
-  integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
-  dependencies:
-    whatwg-encoding "^1.0.5"
-
-html-encoding-sniffer@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
-  integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
-  dependencies:
-    whatwg-encoding "^2.0.0"
-
-html-escaper@^2.0.0:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
-  integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
-
-html-minifier-terser@^6.1.0:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
-  integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==
-  dependencies:
-    camel-case "^4.1.2"
-    clean-css "^5.2.2"
-    commander "^8.3.0"
-    he "^1.2.0"
-    param-case "^3.0.4"
-    relateurl "^0.2.7"
-    terser "^5.10.0"
-
-html-tags@^3.1.0, html-tags@^3.2.0:
-  version "3.3.1"
-  resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
-  integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
-
-htmlparser2@^3.8.3:
-  version "3.10.1"
-  resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
-  integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
-  dependencies:
-    domelementtype "^1.3.1"
-    domhandler "^2.3.0"
-    domutils "^1.5.1"
-    entities "^1.1.1"
-    inherits "^2.0.1"
-    readable-stream "^3.1.1"
-
-htmlparser2@^8.0.0:
-  version "8.0.2"
-  resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
-  integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
-  dependencies:
-    domelementtype "^2.3.0"
-    domhandler "^5.0.3"
-    domutils "^3.0.1"
-    entities "^4.4.0"
-
-http-cache-semantics@3.8.1:
-  version "3.8.1"
-  resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
-  integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==
-
-http-proxy-agent@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
-  integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
-  dependencies:
-    "@tootallnate/once" "1"
-    agent-base "6"
-    debug "4"
-
-http-proxy@^1.18.1:
-  version "1.18.1"
-  resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
-  integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
-  dependencies:
-    eventemitter3 "^4.0.0"
-    follow-redirects "^1.0.0"
-    requires-port "^1.0.0"
-
-http-server@^14.0.0:
-  version "14.1.1"
-  resolved "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz#d60fbb37d7c2fdff0f0fbff0d0ee6670bd285e2e"
-  integrity sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==
-  dependencies:
-    basic-auth "^2.0.1"
-    chalk "^4.1.2"
-    corser "^2.0.1"
-    he "^1.2.0"
-    html-encoding-sniffer "^3.0.0"
-    http-proxy "^1.18.1"
-    mime "^1.6.0"
-    minimist "^1.2.6"
-    opener "^1.5.1"
-    portfinder "^1.0.28"
-    secure-compare "3.0.1"
-    union "~0.5.0"
-    url-join "^4.0.1"
-
-https-proxy-agent@^5.0.0:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
-  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
-  dependencies:
-    agent-base "6"
-    debug "4"
-
-human-signals@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
-  integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
-
-human-signals@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
-  integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-
-husky@^7.0.4:
-  version "7.0.4"
-  resolved "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535"
-  integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==
-
-iconv-lite@0.4.24, iconv-lite@^0.4.24:
-  version "0.4.24"
-  resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
-  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
-  dependencies:
-    safer-buffer ">= 2.1.2 < 3"
-
-iconv-lite@0.6.3, iconv-lite@^0.6.3:
-  version "0.6.3"
-  resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
-  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
-  dependencies:
-    safer-buffer ">= 2.1.2 < 3.0.0"
-
-idb@^7.0.1:
-  version "7.1.1"
-  resolved "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b"
-  integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==
-
-ids@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/ids/-/ids-1.0.0.tgz#df67f2d37b81d7c2effc87e03d17ebff95a58c05"
-  integrity sha512-Zvtq1xUto4LttpstyOlFum8lKx+i1OmRfg+6A9drFS9iSZsDPMHG4Sof/qwNR4kCU7jBeWFPrY2ocHxiz7cCRw==
-
-ieee754@^1.1.13:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
-  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-
-ignore@^5.1.1, ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.1:
-  version "5.2.4"
-  resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
-  integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
-
-image-size@^0.5.1, image-size@~0.5.0:
-  version "0.5.5"
-  resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
-  integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
-
-imagemin-gifsicle@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz#1a7ab136a144c4678657ba3b6c412f80805d26b0"
-  integrity sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA==
-  dependencies:
-    execa "^1.0.0"
-    gifsicle "^5.0.0"
-    is-gif "^3.0.0"
-
-imagemin-jpegtran@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-7.0.0.tgz#7728f84876362d489b9a1656e0cc8e2009406e6f"
-  integrity sha512-MJoyTCW8YjMJf56NorFE41SR/WkaGA3IYk4JgvMlRwguJEEd3PnP9UxA8Y2UWjquz8d+On3Ds/03ZfiiLS8xTQ==
-  dependencies:
-    exec-buffer "^3.0.0"
-    is-jpg "^2.0.0"
-    jpegtran-bin "^5.0.0"
-
-imagemin-mozjpeg@^9.0.0:
-  version "9.0.0"
-  resolved "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-9.0.0.tgz#d1af26d0b43d75a41c211051c1910da59d9d2324"
-  integrity sha512-TwOjTzYqCFRgROTWpVSt5UTT0JeCuzF1jswPLKALDd89+PmrJ2PdMMYeDLYZ1fs9cTovI9GJd68mRSnuVt691w==
-  dependencies:
-    execa "^4.0.0"
-    is-jpg "^2.0.0"
-    mozjpeg "^7.0.0"
-
-imagemin-optipng@^8.0.0:
-  version "8.0.0"
-  resolved "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-8.0.0.tgz#b88e5cf6da25cc8479e07cdf38c3ae0479df7ef2"
-  integrity sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A==
-  dependencies:
-    exec-buffer "^3.0.0"
-    is-png "^2.0.0"
-    optipng-bin "^7.0.0"
-
-imagemin-pngquant@^9.0.2:
-  version "9.0.2"
-  resolved "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-9.0.2.tgz#38155702b0cc4f60f671ba7c2b086ea3805d9567"
-  integrity sha512-cj//bKo8+Frd/DM8l6Pg9pws1pnDUjgb7ae++sUX1kUVdv2nrngPykhiUOgFeE0LGY/LmUbCf4egCHC4YUcZSg==
-  dependencies:
-    execa "^4.0.0"
-    is-png "^2.0.0"
-    is-stream "^2.0.0"
-    ow "^0.17.0"
-    pngquant-bin "^6.0.0"
-
-imagemin-svgo@^9.0.0:
-  version "9.0.0"
-  resolved "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-9.0.0.tgz#749370804608917a67d4ff590f07a87756aec006"
-  integrity sha512-uNgXpKHd99C0WODkrJ8OO/3zW3qjgS4pW7hcuII0RcHN3tnKxDjJWcitdVC/TZyfIqSricU8WfrHn26bdSW62g==
-  dependencies:
-    is-svg "^4.2.1"
-    svgo "^2.1.0"
-
-imagemin-webp@^6.0.0:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/imagemin-webp/-/imagemin-webp-6.1.0.tgz#cf9b07b4f7831e3e433ac610b3349439c341fcf8"
-  integrity sha512-i8ZluZV1pfQX9aVzmZ/VZh9KBSdPwUlp5VruAa9c30GZnX/nMl5n7h+oUMnI7Mg7+SUpu9mYBsw2nsYGUEllWQ==
-  dependencies:
-    cwebp-bin "^6.0.0"
-    exec-buffer "^3.0.0"
-    is-cwebp-readable "^3.0.0"
-
-imagemin@^7.0.1:
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz#f6441ca647197632e23db7d971fffbd530c87dbf"
-  integrity sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==
-  dependencies:
-    file-type "^12.0.0"
-    globby "^10.0.0"
-    graceful-fs "^4.2.2"
-    junk "^3.1.0"
-    make-dir "^3.0.0"
-    p-pipe "^3.0.0"
-    replace-ext "^1.0.0"
-
-import-fresh@^3.0.0, import-fresh@^3.2.1:
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
-  integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
-  dependencies:
-    parent-module "^1.0.0"
-    resolve-from "^4.0.0"
-
-import-lazy@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153"
-  integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==
-
-import-local@^3.0.2:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
-  integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
-  dependencies:
-    pkg-dir "^4.2.0"
-    resolve-cwd "^3.0.0"
-
-import-meta-resolve@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz#244fd542fd1fae73550d4f8b3cde3bba1d7b2b18"
-  integrity sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==
-  dependencies:
-    builtins "^4.0.0"
-
-imurmurhash@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
-  integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
-
-indent-string@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
-  integrity sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==
-  dependencies:
-    repeating "^2.0.0"
-
-indent-string@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
-  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
-
-inflight@^1.0.4:
-  version "1.0.6"
-  resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
-  integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
-  dependencies:
-    once "^1.3.0"
-    wrappy "1"
-
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
-  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-ini@^1.3.2, ini@^1.3.4, ini@^1.3.5:
-  version "1.3.8"
-  resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
-  integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-
-inquirer@8.2.5, inquirer@^8.2.2:
-  version "8.2.5"
-  resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8"
-  integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==
-  dependencies:
-    ansi-escapes "^4.2.1"
-    chalk "^4.1.1"
-    cli-cursor "^3.1.0"
-    cli-width "^3.0.0"
-    external-editor "^3.0.3"
-    figures "^3.0.0"
-    lodash "^4.17.21"
-    mute-stream "0.0.8"
-    ora "^5.4.1"
-    run-async "^2.4.0"
-    rxjs "^7.5.5"
-    string-width "^4.1.0"
-    strip-ansi "^6.0.0"
-    through "^2.3.6"
-    wrap-ansi "^7.0.0"
-
-internal-slot@^1.0.3, internal-slot@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
-  integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
-  dependencies:
-    get-intrinsic "^1.2.0"
-    has "^1.0.3"
-    side-channel "^1.0.4"
-
-into-stream@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6"
-  integrity sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==
-  dependencies:
-    from2 "^2.1.1"
-    p-is-promise "^1.1.0"
-
-intro.js@^5.1.0:
-  version "5.1.0"
-  resolved "https://registry.npmjs.org/intro.js/-/intro.js-5.1.0.tgz#ffa804cd03f464198aa9be505afdd7fb814def3a"
-  integrity sha512-zwWl/duTh00eeNcZRU4o4/xxloNYPFKs4n4lMRDNx59jZr+qRI0jSOnzqYMOuVftD4beGrmxBHz4k8qp9/dCMA==
-
-is-accessor-descriptor@^0.1.6:
-  version "0.1.6"
-  resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
-  integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==
-  dependencies:
-    kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
-  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
-  dependencies:
-    kind-of "^6.0.0"
-
-is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
-  integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
-  dependencies:
-    call-bind "^1.0.2"
-    get-intrinsic "^1.2.0"
-    is-typed-array "^1.1.10"
-
-is-arrayish@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-  integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
-
-is-bigint@^1.0.1:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
-  integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
-  dependencies:
-    has-bigints "^1.0.1"
-
-is-binary-path@~2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
-  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
-  dependencies:
-    binary-extensions "^2.0.0"
-
-is-boolean-object@^1.1.0:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
-  integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
-  dependencies:
-    call-bind "^1.0.2"
-    has-tostringtag "^1.0.0"
-
-is-buffer@^1.1.5, is-buffer@~1.1.6:
-  version "1.1.6"
-  resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
-  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
-is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
-  version "1.2.7"
-  resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
-  integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
-
-is-ci@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
-  integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
-  dependencies:
-    ci-info "^3.2.0"
-
-is-core-module@^2.11.0, is-core-module@^2.5.0:
-  version "2.12.0"
-  resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4"
-  integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==
-  dependencies:
-    has "^1.0.3"
-
-is-cwebp-readable@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/is-cwebp-readable/-/is-cwebp-readable-3.0.0.tgz#0554aaa400977a2fc4de366d8c0244f13cde58cb"
-  integrity sha512-bpELc7/Q1/U5MWHn4NdHI44R3jxk0h9ew9ljzabiRl70/UIjL/ZAqRMb52F5+eke/VC8yTiv4Ewryo1fPWidvA==
-  dependencies:
-    file-type "^10.5.0"
-
-is-data-descriptor@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
-  integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==
-  dependencies:
-    kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
-  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
-  dependencies:
-    kind-of "^6.0.0"
-
-is-date-object@^1.0.1:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
-  integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
-  dependencies:
-    has-tostringtag "^1.0.0"
-
-is-descriptor@^0.1.0:
-  version "0.1.6"
-  resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
-  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
-  dependencies:
-    is-accessor-descriptor "^0.1.6"
-    is-data-descriptor "^0.1.4"
-    kind-of "^5.0.0"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
-  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
-  dependencies:
-    is-accessor-descriptor "^1.0.0"
-    is-data-descriptor "^1.0.0"
-    kind-of "^6.0.2"
-
-is-docker@^2.0.0, is-docker@^2.1.1:
-  version "2.2.1"
-  resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
-  integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-
-is-expression@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz#c33155962abf21d0afd2552514d67d2ec16fd2ab"
-  integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==
-  dependencies:
-    acorn "^7.1.1"
-    object-assign "^4.1.1"
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-  integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
-
-is-extendable@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
-  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
-  dependencies:
-    is-plain-object "^2.0.4"
-
-is-extglob@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
-  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
-
-is-finite@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
-  integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
-
-is-fullwidth-code-point@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
-  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-is-fullwidth-code-point@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
-  integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
-
-is-generator-fn@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
-  integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
-
-is-gif@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz#c4be60b26a301d695bb833b20d9b5d66c6cf83b1"
-  integrity sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==
-  dependencies:
-    file-type "^10.4.0"
-
-is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
-  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
-  dependencies:
-    is-extglob "^2.1.1"
-
-is-interactive@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
-  integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
-
-is-jpg@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz#2e1997fa6e9166eaac0242daae443403e4ef1d97"
-  integrity sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg==
-
-is-module@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
-  integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==
-
-is-nan@^1.3.2:
-  version "1.3.2"
-  resolved "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d"
-  integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==
-  dependencies:
-    call-bind "^1.0.0"
-    define-properties "^1.1.3"
-
-is-natural-number@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
-  integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==
-
-is-negative-zero@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
-  integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
-
-is-number-object@^1.0.4:
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
-  integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
-  dependencies:
-    has-tostringtag "^1.0.0"
-
-is-number@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
-  integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==
-  dependencies:
-    kind-of "^3.0.2"
-
-is-number@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
-  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-obj@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
-  integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==
-
-is-obj@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
-  integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
-
-is-object@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf"
-  integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==
-
-is-path-inside@^3.0.3:
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
-  integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
-
-is-plain-obj@^1.0.0, is-plain-obj@^1.1, is-plain-obj@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
-  integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==
-
-is-plain-object@3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b"
-  integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==
-
-is-plain-object@5.0.0, is-plain-object@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
-  integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
-
-is-plain-object@^2.0.3, is-plain-object@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
-  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
-  dependencies:
-    isobject "^3.0.1"
-
-is-png@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz#ee8cbc9e9b050425cedeeb4a6fb74a649b0a4a8d"
-  integrity sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==
-
-is-potential-custom-element-name@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
-  integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
-
-is-regex@^1.0.3, is-regex@^1.1.4:
-  version "1.1.4"
-  resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
-  integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
-  dependencies:
-    call-bind "^1.0.2"
-    has-tostringtag "^1.0.0"
-
-is-regexp@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
-  integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==
-
-is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
-  integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
-
-is-shared-array-buffer@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
-  integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
-  dependencies:
-    call-bind "^1.0.2"
-
-is-stream@^1.0.0, is-stream@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
-  integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
-
-is-stream@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
-  integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
-
-is-string@^1.0.5, is-string@^1.0.7:
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
-  integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
-  dependencies:
-    has-tostringtag "^1.0.0"
-
-is-svg@^4.2.1:
-  version "4.4.0"
-  resolved "https://registry.npmjs.org/is-svg/-/is-svg-4.4.0.tgz#34db20a38146be5f2b3060154da33d11e6f74b7c"
-  integrity sha512-v+AgVwiK5DsGtT9ng+m4mClp6zDAmwrW8nZi6Gg15qzvBnRWWdfWA1TGaXyCDnWq5g5asofIgMVl3PjKxvk1ug==
-  dependencies:
-    fast-xml-parser "^4.1.3"
-
-is-symbol@^1.0.2, is-symbol@^1.0.3:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
-  integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
-  dependencies:
-    has-symbols "^1.0.2"
-
-is-text-path@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
-  integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==
-  dependencies:
-    text-extensions "^1.0.0"
-
-is-typed-array@^1.1.10, is-typed-array@^1.1.9:
-  version "1.1.10"
-  resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f"
-  integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==
-  dependencies:
-    available-typed-arrays "^1.0.5"
-    call-bind "^1.0.2"
-    for-each "^0.3.3"
-    gopd "^1.0.1"
-    has-tostringtag "^1.0.0"
-
-is-typedarray@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-  integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
-
-is-unicode-supported@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
-  integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
-
-is-utf8@^0.2.0, is-utf8@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
-  integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==
-
-is-weakref@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
-  integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
-  dependencies:
-    call-bind "^1.0.2"
-
-is-what@^3.14.1:
-  version "3.14.1"
-  resolved "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
-  integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
-
-is-windows@^1.0.1, is-windows@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
-  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-
-is-wsl@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
-  integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
-  dependencies:
-    is-docker "^2.0.0"
-
-isarray@1.0.0, isarray@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-  integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
-
-isexe@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
-
-isobject@^2.0.0, isobject@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
-  integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==
-  dependencies:
-    isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
-  integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
-
-istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
-  integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
-
-istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0:
-  version "5.2.1"
-  resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d"
-  integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==
-  dependencies:
-    "@babel/core" "^7.12.3"
-    "@babel/parser" "^7.14.7"
-    "@istanbuljs/schema" "^0.1.2"
-    istanbul-lib-coverage "^3.2.0"
-    semver "^6.3.0"
-
-istanbul-lib-report@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
-  integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
-  dependencies:
-    istanbul-lib-coverage "^3.0.0"
-    make-dir "^3.0.0"
-    supports-color "^7.1.0"
-
-istanbul-lib-source-maps@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
-  integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
-  dependencies:
-    debug "^4.1.1"
-    istanbul-lib-coverage "^3.0.0"
-    source-map "^0.6.1"
-
-istanbul-reports@^3.1.3:
-  version "3.1.5"
-  resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae"
-  integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==
-  dependencies:
-    html-escaper "^2.0.0"
-    istanbul-lib-report "^3.0.0"
-
-isurl@^1.0.0-alpha5:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
-  integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==
-  dependencies:
-    has-to-string-tag-x "^1.2.0"
-    is-object "^1.0.1"
-
-jake@^10.8.5:
-  version "10.8.6"
-  resolved "https://registry.npmjs.org/jake/-/jake-10.8.6.tgz#227a96786a1e035214e0ba84b482d6223d41ef04"
-  integrity sha512-G43Ub9IYEFfu72sua6rzooi8V8Gz2lkfk48rW20vEWCGizeaEPlKB1Kh8JIA84yQbiAEfqlPmSpGgCKKxH3rDA==
-  dependencies:
-    async "^3.2.3"
-    chalk "^4.0.2"
-    filelist "^1.0.4"
-    minimatch "^3.1.2"
-
-jest-changed-files@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5"
-  integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==
-  dependencies:
-    "@jest/types" "^27.5.1"
-    execa "^5.0.0"
-    throat "^6.0.1"
-
-jest-circus@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc"
-  integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==
-  dependencies:
-    "@jest/environment" "^27.5.1"
-    "@jest/test-result" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-    chalk "^4.0.0"
-    co "^4.6.0"
-    dedent "^0.7.0"
-    expect "^27.5.1"
-    is-generator-fn "^2.0.0"
-    jest-each "^27.5.1"
-    jest-matcher-utils "^27.5.1"
-    jest-message-util "^27.5.1"
-    jest-runtime "^27.5.1"
-    jest-snapshot "^27.5.1"
-    jest-util "^27.5.1"
-    pretty-format "^27.5.1"
-    slash "^3.0.0"
-    stack-utils "^2.0.3"
-    throat "^6.0.1"
-
-jest-cli@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145"
-  integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==
-  dependencies:
-    "@jest/core" "^27.5.1"
-    "@jest/test-result" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    chalk "^4.0.0"
-    exit "^0.1.2"
-    graceful-fs "^4.2.9"
-    import-local "^3.0.2"
-    jest-config "^27.5.1"
-    jest-util "^27.5.1"
-    jest-validate "^27.5.1"
-    prompts "^2.0.1"
-    yargs "^16.2.0"
-
-jest-config@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41"
-  integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==
-  dependencies:
-    "@babel/core" "^7.8.0"
-    "@jest/test-sequencer" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    babel-jest "^27.5.1"
-    chalk "^4.0.0"
-    ci-info "^3.2.0"
-    deepmerge "^4.2.2"
-    glob "^7.1.1"
-    graceful-fs "^4.2.9"
-    jest-circus "^27.5.1"
-    jest-environment-jsdom "^27.5.1"
-    jest-environment-node "^27.5.1"
-    jest-get-type "^27.5.1"
-    jest-jasmine2 "^27.5.1"
-    jest-regex-util "^27.5.1"
-    jest-resolve "^27.5.1"
-    jest-runner "^27.5.1"
-    jest-util "^27.5.1"
-    jest-validate "^27.5.1"
-    micromatch "^4.0.4"
-    parse-json "^5.2.0"
-    pretty-format "^27.5.1"
-    slash "^3.0.0"
-    strip-json-comments "^3.1.1"
-
-jest-diff@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def"
-  integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==
-  dependencies:
-    chalk "^4.0.0"
-    diff-sequences "^27.5.1"
-    jest-get-type "^27.5.1"
-    pretty-format "^27.5.1"
-
-jest-docblock@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0"
-  integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==
-  dependencies:
-    detect-newline "^3.0.0"
-
-jest-each@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e"
-  integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==
-  dependencies:
-    "@jest/types" "^27.5.1"
-    chalk "^4.0.0"
-    jest-get-type "^27.5.1"
-    jest-util "^27.5.1"
-    pretty-format "^27.5.1"
-
-jest-environment-jsdom@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546"
-  integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==
-  dependencies:
-    "@jest/environment" "^27.5.1"
-    "@jest/fake-timers" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-    jest-mock "^27.5.1"
-    jest-util "^27.5.1"
-    jsdom "^16.6.0"
-
-jest-environment-node@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e"
-  integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==
-  dependencies:
-    "@jest/environment" "^27.5.1"
-    "@jest/fake-timers" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-    jest-mock "^27.5.1"
-    jest-util "^27.5.1"
-
-jest-get-type@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1"
-  integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==
-
-jest-haste-map@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f"
-  integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==
-  dependencies:
-    "@jest/types" "^27.5.1"
-    "@types/graceful-fs" "^4.1.2"
-    "@types/node" "*"
-    anymatch "^3.0.3"
-    fb-watchman "^2.0.0"
-    graceful-fs "^4.2.9"
-    jest-regex-util "^27.5.1"
-    jest-serializer "^27.5.1"
-    jest-util "^27.5.1"
-    jest-worker "^27.5.1"
-    micromatch "^4.0.4"
-    walker "^1.0.7"
-  optionalDependencies:
-    fsevents "^2.3.2"
-
-jest-jasmine2@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4"
-  integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==
-  dependencies:
-    "@jest/environment" "^27.5.1"
-    "@jest/source-map" "^27.5.1"
-    "@jest/test-result" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-    chalk "^4.0.0"
-    co "^4.6.0"
-    expect "^27.5.1"
-    is-generator-fn "^2.0.0"
-    jest-each "^27.5.1"
-    jest-matcher-utils "^27.5.1"
-    jest-message-util "^27.5.1"
-    jest-runtime "^27.5.1"
-    jest-snapshot "^27.5.1"
-    jest-util "^27.5.1"
-    pretty-format "^27.5.1"
-    throat "^6.0.1"
-
-jest-leak-detector@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8"
-  integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==
-  dependencies:
-    jest-get-type "^27.5.1"
-    pretty-format "^27.5.1"
-
-jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab"
-  integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==
-  dependencies:
-    chalk "^4.0.0"
-    jest-diff "^27.5.1"
-    jest-get-type "^27.5.1"
-    pretty-format "^27.5.1"
-
-jest-message-util@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf"
-  integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==
-  dependencies:
-    "@babel/code-frame" "^7.12.13"
-    "@jest/types" "^27.5.1"
-    "@types/stack-utils" "^2.0.0"
-    chalk "^4.0.0"
-    graceful-fs "^4.2.9"
-    micromatch "^4.0.4"
-    pretty-format "^27.5.1"
-    slash "^3.0.0"
-    stack-utils "^2.0.3"
-
-jest-mock@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6"
-  integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==
-  dependencies:
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-
-jest-pnp-resolver@^1.2.2:
-  version "1.2.3"
-  resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e"
-  integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==
-
-jest-regex-util@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95"
-  integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==
-
-jest-resolve-dependencies@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8"
-  integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==
-  dependencies:
-    "@jest/types" "^27.5.1"
-    jest-regex-util "^27.5.1"
-    jest-snapshot "^27.5.1"
-
-jest-resolve@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384"
-  integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==
-  dependencies:
-    "@jest/types" "^27.5.1"
-    chalk "^4.0.0"
-    graceful-fs "^4.2.9"
-    jest-haste-map "^27.5.1"
-    jest-pnp-resolver "^1.2.2"
-    jest-util "^27.5.1"
-    jest-validate "^27.5.1"
-    resolve "^1.20.0"
-    resolve.exports "^1.1.0"
-    slash "^3.0.0"
-
-jest-runner@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5"
-  integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==
-  dependencies:
-    "@jest/console" "^27.5.1"
-    "@jest/environment" "^27.5.1"
-    "@jest/test-result" "^27.5.1"
-    "@jest/transform" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-    chalk "^4.0.0"
-    emittery "^0.8.1"
-    graceful-fs "^4.2.9"
-    jest-docblock "^27.5.1"
-    jest-environment-jsdom "^27.5.1"
-    jest-environment-node "^27.5.1"
-    jest-haste-map "^27.5.1"
-    jest-leak-detector "^27.5.1"
-    jest-message-util "^27.5.1"
-    jest-resolve "^27.5.1"
-    jest-runtime "^27.5.1"
-    jest-util "^27.5.1"
-    jest-worker "^27.5.1"
-    source-map-support "^0.5.6"
-    throat "^6.0.1"
-
-jest-runtime@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af"
-  integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==
-  dependencies:
-    "@jest/environment" "^27.5.1"
-    "@jest/fake-timers" "^27.5.1"
-    "@jest/globals" "^27.5.1"
-    "@jest/source-map" "^27.5.1"
-    "@jest/test-result" "^27.5.1"
-    "@jest/transform" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    chalk "^4.0.0"
-    cjs-module-lexer "^1.0.0"
-    collect-v8-coverage "^1.0.0"
-    execa "^5.0.0"
-    glob "^7.1.3"
-    graceful-fs "^4.2.9"
-    jest-haste-map "^27.5.1"
-    jest-message-util "^27.5.1"
-    jest-mock "^27.5.1"
-    jest-regex-util "^27.5.1"
-    jest-resolve "^27.5.1"
-    jest-snapshot "^27.5.1"
-    jest-util "^27.5.1"
-    slash "^3.0.0"
-    strip-bom "^4.0.0"
-
-jest-serializer@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64"
-  integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==
-  dependencies:
-    "@types/node" "*"
-    graceful-fs "^4.2.9"
-
-jest-snapshot@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1"
-  integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==
-  dependencies:
-    "@babel/core" "^7.7.2"
-    "@babel/generator" "^7.7.2"
-    "@babel/plugin-syntax-typescript" "^7.7.2"
-    "@babel/traverse" "^7.7.2"
-    "@babel/types" "^7.0.0"
-    "@jest/transform" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/babel__traverse" "^7.0.4"
-    "@types/prettier" "^2.1.5"
-    babel-preset-current-node-syntax "^1.0.0"
-    chalk "^4.0.0"
-    expect "^27.5.1"
-    graceful-fs "^4.2.9"
-    jest-diff "^27.5.1"
-    jest-get-type "^27.5.1"
-    jest-haste-map "^27.5.1"
-    jest-matcher-utils "^27.5.1"
-    jest-message-util "^27.5.1"
-    jest-util "^27.5.1"
-    natural-compare "^1.4.0"
-    pretty-format "^27.5.1"
-    semver "^7.3.2"
-
-jest-util@^27.0.0, jest-util@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9"
-  integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==
-  dependencies:
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-    chalk "^4.0.0"
-    ci-info "^3.2.0"
-    graceful-fs "^4.2.9"
-    picomatch "^2.2.3"
-
-jest-validate@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067"
-  integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==
-  dependencies:
-    "@jest/types" "^27.5.1"
-    camelcase "^6.2.0"
-    chalk "^4.0.0"
-    jest-get-type "^27.5.1"
-    leven "^3.1.0"
-    pretty-format "^27.5.1"
-
-jest-watcher@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2"
-  integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==
-  dependencies:
-    "@jest/test-result" "^27.5.1"
-    "@jest/types" "^27.5.1"
-    "@types/node" "*"
-    ansi-escapes "^4.2.1"
-    chalk "^4.0.0"
-    jest-util "^27.5.1"
-    string-length "^4.0.1"
-
-jest-worker@^26.2.1:
-  version "26.6.2"
-  resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
-  integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
-  dependencies:
-    "@types/node" "*"
-    merge-stream "^2.0.0"
-    supports-color "^7.0.0"
-
-jest-worker@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
-  integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
-  dependencies:
-    "@types/node" "*"
-    merge-stream "^2.0.0"
-    supports-color "^8.0.0"
-
-jest@27.5.1, jest@^27.3.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc"
-  integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==
-  dependencies:
-    "@jest/core" "^27.5.1"
-    import-local "^3.0.2"
-    jest-cli "^27.5.1"
-
-jiti@^1.18.2:
-  version "1.18.2"
-  resolved "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd"
-  integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==
-
-jpegtran-bin@^5.0.0:
-  version "5.0.2"
-  resolved "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-5.0.2.tgz#5870fd7e68317bd203a1c94572bd06ae7732cac3"
-  integrity sha512-4FSmgIcr8d5+V6T1+dHbPZjaFH0ogVyP4UVsE+zri7S9YLO4qAT2our4IN3sW3STVgNTbqPermdIgt2XuAJ4EA==
-  dependencies:
-    bin-build "^3.0.0"
-    bin-wrapper "^4.0.0"
-    logalot "^2.0.0"
-
-jpegtran-bin@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-6.0.1.tgz#9b86b8be0628c220cce40e7cb25d3541a8253459"
-  integrity sha512-WohhhHhqe22de7PU8hXs6Sr5d4BAvkrfA93NR5tGlHyPnFLgvEW/bH+q7fv65JgoiQDsd7SBwwQ/OGRBivU3Mw==
-  dependencies:
-    bin-build "^3.0.0"
-    bin-wrapper "^4.0.0"
-
-js-base64@^2.1.9:
-  version "2.6.4"
-  resolved "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
-  integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
-
-js-beautify@1.14.6:
-  version "1.14.6"
-  resolved "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.6.tgz#b23ca5d74a462c282c7711bb51150bcc97f2b507"
-  integrity sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==
-  dependencies:
-    config-chain "^1.1.13"
-    editorconfig "^0.15.3"
-    glob "^8.0.3"
-    nopt "^6.0.0"
-
-js-sdsl@^4.1.4:
-  version "4.4.0"
-  resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430"
-  integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==
-
-"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
-  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-js-tokens@^8.0.0:
-  version "8.0.1"
-  resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.1.tgz#f068fde9bd2f9f4a24ad78f3b4fa787216b433e3"
-  integrity sha512-3AGrZT6tuMm1ZWWn9mLXh7XMfi2YtiLNPALCVxBCiUVq0LD1OQMxV/AdS/s7rLJU5o9i/jBZw/N4vXXL5dm29A==
-
-js-yaml@^3.13.1:
-  version "3.14.1"
-  resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
-  integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
-  dependencies:
-    argparse "^1.0.7"
-    esprima "^4.0.0"
-
-js-yaml@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
-  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
-  dependencies:
-    argparse "^2.0.1"
-
-jsdom@^16.6.0:
-  version "16.7.0"
-  resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
-  integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==
-  dependencies:
-    abab "^2.0.5"
-    acorn "^8.2.4"
-    acorn-globals "^6.0.0"
-    cssom "^0.4.4"
-    cssstyle "^2.3.0"
-    data-urls "^2.0.0"
-    decimal.js "^10.2.1"
-    domexception "^2.0.1"
-    escodegen "^2.0.0"
-    form-data "^3.0.0"
-    html-encoding-sniffer "^2.0.1"
-    http-proxy-agent "^4.0.1"
-    https-proxy-agent "^5.0.0"
-    is-potential-custom-element-name "^1.0.1"
-    nwsapi "^2.2.0"
-    parse5 "6.0.1"
-    saxes "^5.0.1"
-    symbol-tree "^3.2.4"
-    tough-cookie "^4.0.0"
-    w3c-hr-time "^1.0.2"
-    w3c-xmlserializer "^2.0.0"
-    webidl-conversions "^6.1.0"
-    whatwg-encoding "^1.0.5"
-    whatwg-mimetype "^2.3.0"
-    whatwg-url "^8.5.0"
-    ws "^7.4.6"
-    xml-name-validator "^3.0.0"
-
-jsesc@^2.5.1:
-  version "2.5.2"
-  resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
-  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
-
-jsesc@~0.5.0:
-  version "0.5.0"
-  resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
-  integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
-
-json-buffer@3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
-  integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==
-
-json-parse-better-errors@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
-  integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
-json-parse-even-better-errors@^2.3.0:
-  version "2.3.1"
-  resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
-  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
-
-json-schema-traverse@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
-  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json-schema-traverse@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
-  integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
-
-json-schema@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
-  integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
-
-json-stable-stringify-without-jsonify@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
-  integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
-
-json-stringify-safe@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-  integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
-
-json5@2.x, json5@^2.2.0, json5@^2.2.2:
-  version "2.2.3"
-  resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
-  integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
-
-json5@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
-  integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
-  dependencies:
-    minimist "^1.2.0"
-
-jsonfile@^6.0.1:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
-  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
-  dependencies:
-    universalify "^2.0.0"
-  optionalDependencies:
-    graceful-fs "^4.1.6"
-
-jsonparse@^1.2.0:
-  version "1.3.1"
-  resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
-  integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
-
-jsonpointer@^5.0.0:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
-  integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==
-
-junk@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1"
-  integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==
-
-keyv@3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373"
-  integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==
-  dependencies:
-    json-buffer "3.0.0"
-
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
-  version "3.2.2"
-  resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
-  integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
-  integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^5.0.0, kind-of@^5.0.2:
-  version "5.1.0"
-  resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
-  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-
-kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
-  version "6.0.3"
-  resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
-  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-
-kleur@^3.0.3:
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
-  integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-
-known-css-properties@^0.26.0:
-  version "0.26.0"
-  resolved "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz#008295115abddc045a9f4ed7e2a84dc8b3a77649"
-  integrity sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==
-
-kolorist@^1.8.0:
-  version "1.8.0"
-  resolved "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c"
-  integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==
-
-less@^4.1.2:
-  version "4.1.3"
-  resolved "https://registry.npmjs.org/less/-/less-4.1.3.tgz#175be9ddcbf9b250173e0a00b4d6920a5b770246"
-  integrity sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==
-  dependencies:
-    copy-anything "^2.0.1"
-    parse-node-version "^1.0.1"
-    tslib "^2.3.0"
-  optionalDependencies:
-    errno "^0.1.1"
-    graceful-fs "^4.1.2"
-    image-size "~0.5.0"
-    make-dir "^2.1.0"
-    mime "^1.4.1"
-    needle "^3.1.0"
-    source-map "~0.6.0"
-
-leven@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
-  integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
-
-levn@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
-  integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
-  dependencies:
-    prelude-ls "^1.2.1"
-    type-check "~0.4.0"
-
-levn@~0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
-  integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
-  dependencies:
-    prelude-ls "~1.1.2"
-    type-check "~0.3.2"
-
-lilconfig@2.0.4:
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082"
-  integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==
-
-lines-and-columns@^1.1.6:
-  version "1.2.4"
-  resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
-  integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-
-lint-staged@12.3.7:
-  version "12.3.7"
-  resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.7.tgz#ad0e2014302f704f9cf2c0ebdb97ac63d0f17be0"
-  integrity sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ==
-  dependencies:
-    cli-truncate "^3.1.0"
-    colorette "^2.0.16"
-    commander "^8.3.0"
-    debug "^4.3.3"
-    execa "^5.1.1"
-    lilconfig "2.0.4"
-    listr2 "^4.0.1"
-    micromatch "^4.0.4"
-    normalize-path "^3.0.0"
-    object-inspect "^1.12.0"
-    pidtree "^0.5.0"
-    string-argv "^0.3.1"
-    supports-color "^9.2.1"
-    yaml "^1.10.2"
-
-listr2@^4.0.1:
-  version "4.0.5"
-  resolved "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5"
-  integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==
-  dependencies:
-    cli-truncate "^2.1.0"
-    colorette "^2.0.16"
-    log-update "^4.0.0"
-    p-map "^4.0.0"
-    rfdc "^1.3.0"
-    rxjs "^7.5.5"
-    through "^2.3.8"
-    wrap-ansi "^7.0.0"
-
-load-json-file@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
-  integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==
-  dependencies:
-    graceful-fs "^4.1.2"
-    parse-json "^2.2.0"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-    strip-bom "^2.0.0"
-
-load-json-file@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
-  integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==
-  dependencies:
-    graceful-fs "^4.1.2"
-    parse-json "^4.0.0"
-    pify "^3.0.0"
-    strip-bom "^3.0.0"
-
-loader-utils@^1.1.0:
-  version "1.4.2"
-  resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3"
-  integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==
-  dependencies:
-    big.js "^5.2.2"
-    emojis-list "^3.0.0"
-    json5 "^1.0.1"
-
-locate-path@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
-  integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==
-  dependencies:
-    p-locate "^2.0.0"
-    path-exists "^3.0.0"
-
-locate-path@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
-  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
-  dependencies:
-    p-locate "^4.1.0"
-
-locate-path@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
-  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
-  dependencies:
-    p-locate "^5.0.0"
-
-lodash-es@^4.17.15, lodash-es@^4.17.21:
-  version "4.17.21"
-  resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
-  integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
-
-lodash.debounce@^4.0.8:
-  version "4.0.8"
-  resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
-  integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
-
-lodash.get@^4.4.2:
-  version "4.4.2"
-  resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
-  integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==
-
-lodash.ismatch@^4.4.0:
-  version "4.4.0"
-  resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
-  integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==
-
-lodash.isplainobject@^4.0.6:
-  version "4.0.6"
-  resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
-  integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
-
-lodash.map@^4.5.1:
-  version "4.6.0"
-  resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
-  integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==
-
-lodash.memoize@4.x:
-  version "4.1.2"
-  resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
-  integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
-
-lodash.merge@^4.6.2:
-  version "4.6.2"
-  resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
-  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
-
-lodash.mergewith@^4.6.2:
-  version "4.6.2"
-  resolved "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55"
-  integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==
-
-lodash.sortby@^4.7.0:
-  version "4.7.0"
-  resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
-  integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==
-
-lodash.truncate@^4.4.2:
-  version "4.4.2"
-  resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
-  integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==
-
-lodash.uniq@^4.5.0:
-  version "4.5.0"
-  resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
-  integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
-
-lodash@4.17.21, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0:
-  version "4.17.21"
-  resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
-  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-log-symbols@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
-  integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
-  dependencies:
-    chalk "^4.1.0"
-    is-unicode-supported "^0.1.0"
-
-log-update@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
-  integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
-  dependencies:
-    ansi-escapes "^4.3.0"
-    cli-cursor "^3.1.0"
-    slice-ansi "^4.0.0"
-    wrap-ansi "^6.2.0"
-
-logalot@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz#5f8e8c90d304edf12530951a5554abb8c5e3f552"
-  integrity sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw==
-  dependencies:
-    figures "^1.3.5"
-    squeak "^1.0.0"
-
-longest@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-  integrity sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==
-
-longest@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8"
-  integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==
-
-loose-envify@^1.0.0:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
-  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
-  dependencies:
-    js-tokens "^3.0.0 || ^4.0.0"
-
-loud-rejection@^1.0.0:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
-  integrity sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==
-  dependencies:
-    currently-unhandled "^0.4.1"
-    signal-exit "^3.0.0"
-
-lower-case@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
-  integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
-  dependencies:
-    tslib "^2.0.3"
-
-lowercase-keys@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
-  integrity sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==
-
-lowercase-keys@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
-  integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
-
-lpad-align@^1.0.1:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz#21f600ac1c3095c3c6e497ee67271ee08481fe9e"
-  integrity sha512-MMIcFmmR9zlGZtBcFOows6c2COMekHCIFJz3ew/rRpKZ1wR4mXDPzvcVqLarux8M33X4TPSq2Jdw8WJj0q0KbQ==
-  dependencies:
-    get-stdin "^4.0.1"
-    indent-string "^2.1.0"
-    longest "^1.0.0"
-    meow "^3.3.0"
-
-lru-cache@^4.0.1, lru-cache@^4.1.5:
-  version "4.1.5"
-  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
-  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
-  dependencies:
-    pseudomap "^1.0.2"
-    yallist "^2.1.2"
-
-lru-cache@^5.1.1:
-  version "5.1.1"
-  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
-  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
-  dependencies:
-    yallist "^3.0.2"
-
-lru-cache@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
-  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
-  dependencies:
-    yallist "^4.0.0"
-
-luxon@^1.26.0:
-  version "1.28.1"
-  resolved "https://registry.npmjs.org/luxon/-/luxon-1.28.1.tgz#528cdf3624a54506d710290a2341aa8e6e6c61b0"
-  integrity sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==
-
-magic-string@^0.25.0, magic-string@^0.25.7:
-  version "0.25.9"
-  resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
-  integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
-  dependencies:
-    sourcemap-codec "^1.4.8"
-
-magic-string@^0.26.7:
-  version "0.26.7"
-  resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz#caf7daf61b34e9982f8228c4527474dac8981d6f"
-  integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==
-  dependencies:
-    sourcemap-codec "^1.4.8"
-
-magic-string@^0.30.0:
-  version "0.30.0"
-  resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz#fd58a4748c5c4547338a424e90fa5dd17f4de529"
-  integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==
-  dependencies:
-    "@jridgewell/sourcemap-codec" "^1.4.13"
-
-make-dir@^1.0.0, make-dir@^1.2.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
-  integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
-  dependencies:
-    pify "^3.0.0"
-
-make-dir@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
-  integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
-  dependencies:
-    pify "^4.0.1"
-    semver "^5.6.0"
-
-make-dir@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
-  integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
-  dependencies:
-    semver "^6.0.0"
-
-make-error@1.x, make-error@^1.1.1:
-  version "1.3.6"
-  resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
-  integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
-
-makeerror@1.0.12:
-  version "1.0.12"
-  resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
-  integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
-  dependencies:
-    tmpl "1.0.5"
-
-map-cache@^0.2.2:
-  version "0.2.2"
-  resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
-  integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==
-
-map-obj@^1.0.0, map-obj@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
-  integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==
-
-map-obj@^4.0.0:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
-  integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
-
-map-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
-  integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==
-  dependencies:
-    object-visit "^1.0.0"
-
-mathml-tag-names@^2.1.3:
-  version "2.1.3"
-  resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
-  integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==
-
-md5@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f"
-  integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==
-  dependencies:
-    charenc "0.0.2"
-    crypt "0.0.2"
-    is-buffer "~1.1.6"
-
-mdn-data@2.0.14:
-  version "2.0.14"
-  resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
-  integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==
-
-memorystream@^0.3.1:
-  version "0.3.1"
-  resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
-  integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==
-
-meow@^3.3.0:
-  version "3.7.0"
-  resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
-  integrity sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==
-  dependencies:
-    camelcase-keys "^2.0.0"
-    decamelize "^1.1.2"
-    loud-rejection "^1.0.0"
-    map-obj "^1.0.1"
-    minimist "^1.1.3"
-    normalize-package-data "^2.3.4"
-    object-assign "^4.0.1"
-    read-pkg-up "^1.0.1"
-    redent "^1.0.0"
-    trim-newlines "^1.0.0"
-
-meow@^8.0.0:
-  version "8.1.2"
-  resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897"
-  integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==
-  dependencies:
-    "@types/minimist" "^1.2.0"
-    camelcase-keys "^6.2.2"
-    decamelize-keys "^1.1.0"
-    hard-rejection "^2.1.0"
-    minimist-options "4.1.0"
-    normalize-package-data "^3.0.0"
-    read-pkg-up "^7.0.1"
-    redent "^3.0.0"
-    trim-newlines "^3.0.0"
-    type-fest "^0.18.0"
-    yargs-parser "^20.2.3"
-
-meow@^9.0.0:
-  version "9.0.0"
-  resolved "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364"
-  integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==
-  dependencies:
-    "@types/minimist" "^1.2.0"
-    camelcase-keys "^6.2.2"
-    decamelize "^1.2.0"
-    decamelize-keys "^1.1.0"
-    hard-rejection "^2.1.0"
-    minimist-options "4.1.0"
-    normalize-package-data "^3.0.0"
-    read-pkg-up "^7.0.1"
-    redent "^3.0.0"
-    trim-newlines "^3.0.0"
-    type-fest "^0.18.0"
-    yargs-parser "^20.2.3"
-
-merge-options@1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz#2a64b24457becd4e4dc608283247e94ce589aa32"
-  integrity sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==
-  dependencies:
-    is-plain-obj "^1.1"
-
-merge-stream@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
-  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-
-merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1:
-  version "1.4.1"
-  resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
-  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
-
-merge@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98"
-  integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==
-
-micromatch@3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz#5102d4eaf20b6997d6008e3acfe1c44a3fa815e2"
-  integrity sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    braces "^2.2.2"
-    define-property "^1.0.0"
-    extend-shallow "^2.0.1"
-    extglob "^2.0.2"
-    fragment-cache "^0.2.1"
-    kind-of "^5.0.2"
-    nanomatch "^1.2.1"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
-  version "4.0.5"
-  resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
-  integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
-  dependencies:
-    braces "^3.0.2"
-    picomatch "^2.3.1"
-
-mime-db@1.52.0, mime-db@^1.28.0:
-  version "1.52.0"
-  resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
-  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-
-mime-types@^2.1.12:
-  version "2.1.35"
-  resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
-  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
-  dependencies:
-    mime-db "1.52.0"
-
-mime@^1.4.1, mime@^1.6.0:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
-  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-
-mimic-fn@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
-  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
-mimic-response@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
-  integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
-
-min-indent@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
-  integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
-
-minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
-  version "3.1.2"
-  resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
-  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
-  dependencies:
-    brace-expansion "^1.1.7"
-
-minimatch@^5.0.1:
-  version "5.1.6"
-  resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
-  integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
-  dependencies:
-    brace-expansion "^2.0.1"
-
-minimist-options@4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
-  integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
-  dependencies:
-    arrify "^1.0.1"
-    is-plain-obj "^1.1.0"
-    kind-of "^6.0.3"
-
-minimist@1.2.7:
-  version "1.2.7"
-  resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
-  integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
-
-minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
-  version "1.2.8"
-  resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
-  integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-
-mixin-deep@^1.2.0:
-  version "1.3.2"
-  resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
-  integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
-  dependencies:
-    for-in "^1.0.2"
-    is-extendable "^1.0.1"
-
-mkdirp@^0.5.6:
-  version "0.5.6"
-  resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
-  integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
-  dependencies:
-    minimist "^1.2.6"
-
-mockjs@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz#e6a0c378e91906dbaff20911cc0273b3c7d75b06"
-  integrity sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==
-  dependencies:
-    commander "*"
-
-modify-values@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
-  integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
-
-mousetrap@^1.6.5:
-  version "1.6.5"
-  resolved "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9"
-  integrity sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==
-
-mozjpeg@^7.0.0:
-  version "7.1.1"
-  resolved "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.1.1.tgz#dfb61953536e66fcabd4ae795e7a312d42a51f18"
-  integrity sha512-iIDxWvzhWvLC9mcRJ1uSkiKaj4drF58oCqK2bITm5c2Jt6cJ8qQjSSru2PCaysG+hLIinryj8mgz5ZJzOYTv1A==
-  dependencies:
-    bin-build "^3.0.0"
-    bin-wrapper "^4.0.0"
-
-mri@^1.1.5:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
-  integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==
-
-ms@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-  integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
-
-ms@2.1.2:
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
-  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-ms@^2.1.1:
-  version "2.1.3"
-  resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
-  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
-multimatch@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3"
-  integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==
-  dependencies:
-    "@types/minimatch" "^3.0.3"
-    array-differ "^3.0.0"
-    array-union "^2.1.0"
-    arrify "^2.0.1"
-    minimatch "^3.0.4"
-
-mute-stream@0.0.8:
-  version "0.0.8"
-  resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
-  integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
-
-nanoid@^3.3.6:
-  version "3.3.6"
-  resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
-  integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
-
-nanomatch@^1.2.1:
-  version "1.2.13"
-  resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
-  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    fragment-cache "^0.2.1"
-    is-windows "^1.0.2"
-    kind-of "^6.0.2"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-nanopop@^2.1.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/nanopop/-/nanopop-2.3.0.tgz#a5f672fba27d45d6ecbd0b59789c040072915123"
-  integrity sha512-fzN+T2K7/Ah25XU02MJkPZ5q4Tj5FpjmIYq4rvoHX4yb16HzFdCO6JxFFn5Y/oBhQ8no8fUZavnyIv9/+xkBBw==
-
-natural-compare-lite@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
-  integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==
-
-natural-compare@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
-  integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-
-needle@^3.1.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz#07d240ebcabfd65c76c03afae7f6defe6469df44"
-  integrity sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==
-  dependencies:
-    debug "^3.2.6"
-    iconv-lite "^0.6.3"
-    sax "^1.2.4"
-
-neo-async@^2.6.0:
-  version "2.6.2"
-  resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
-  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
-
-nice-try@^1.0.4:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
-  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-
-no-case@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
-  integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
-  dependencies:
-    lower-case "^2.0.2"
-    tslib "^2.0.3"
-
-node-fetch@^2.6.11, node-fetch@^2.6.7:
-  version "2.6.11"
-  resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25"
-  integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==
-  dependencies:
-    whatwg-url "^5.0.0"
-
-node-html-parser@^5.3.3:
-  version "5.4.2"
-  resolved "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.4.2.tgz#93e004038c17af80226c942336990a0eaed8136a"
-  integrity sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==
-  dependencies:
-    css-select "^4.2.1"
-    he "1.2.0"
-
-node-int64@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
-  integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
-
-node-releases@^2.0.8:
-  version "2.0.10"
-  resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f"
-  integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==
-
-nopt@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d"
-  integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==
-  dependencies:
-    abbrev "^1.0.0"
-
-normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0:
-  version "2.5.0"
-  resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
-  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
-  dependencies:
-    hosted-git-info "^2.1.4"
-    resolve "^1.10.0"
-    semver "2 || 3 || 4 || 5"
-    validate-npm-package-license "^3.0.1"
-
-normalize-package-data@^3.0.0:
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e"
-  integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==
-  dependencies:
-    hosted-git-info "^4.0.1"
-    is-core-module "^2.5.0"
-    semver "^7.3.4"
-    validate-npm-package-license "^3.0.1"
-
-normalize-path@^3.0.0, normalize-path@~3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
-  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-normalize-range@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
-  integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
-
-normalize-url@2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6"
-  integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==
-  dependencies:
-    prepend-http "^2.0.0"
-    query-string "^5.0.1"
-    sort-keys "^2.0.0"
-
-npm-conf@^1.1.0:
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
-  integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==
-  dependencies:
-    config-chain "^1.1.11"
-    pify "^3.0.0"
-
-npm-run-all@^4.1.5:
-  version "4.1.5"
-  resolved "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba"
-  integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==
-  dependencies:
-    ansi-styles "^3.2.1"
-    chalk "^2.4.1"
-    cross-spawn "^6.0.5"
-    memorystream "^0.3.1"
-    minimatch "^3.0.4"
-    pidtree "^0.3.0"
-    read-pkg "^3.0.0"
-    shell-quote "^1.6.1"
-    string.prototype.padend "^3.0.0"
-
-npm-run-path@^2.0.0:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
-  integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==
-  dependencies:
-    path-key "^2.0.0"
-
-npm-run-path@^4.0.0, npm-run-path@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
-  integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
-  dependencies:
-    path-key "^3.0.0"
-
-nprogress@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
-  integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==
-
-nth-check@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
-  integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
-  dependencies:
-    boolbase "^1.0.0"
-
-nwsapi@^2.2.0:
-  version "2.2.4"
-  resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz#fd59d5e904e8e1f03c25a7d5a15cfa16c714a1e5"
-  integrity sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==
-
-object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-  integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-
-object-copy@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
-  integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==
-  dependencies:
-    copy-descriptor "^0.1.0"
-    define-property "^0.2.5"
-    kind-of "^3.0.3"
-
-object-inspect@^1.12.0, object-inspect@^1.12.3, object-inspect@^1.9.0:
-  version "1.12.3"
-  resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
-  integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
-
-object-keys@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
-  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-
-object-visit@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
-  integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==
-  dependencies:
-    isobject "^3.0.0"
-
-object.assign@^4.1.4:
-  version "4.1.4"
-  resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
-  integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
-  dependencies:
-    call-bind "^1.0.2"
-    define-properties "^1.1.4"
-    has-symbols "^1.0.3"
-    object-keys "^1.1.1"
-
-object.pick@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
-  integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==
-  dependencies:
-    isobject "^3.0.1"
-
-on-finished@~2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
-  integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==
-  dependencies:
-    ee-first "1.1.1"
-
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
-  integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
-  dependencies:
-    wrappy "1"
-
-onetime@^5.1.0, onetime@^5.1.2:
-  version "5.1.2"
-  resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
-  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
-  dependencies:
-    mimic-fn "^2.1.0"
-
-open@^8.4.0:
-  version "8.4.2"
-  resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
-  integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
-  dependencies:
-    define-lazy-prop "^2.0.0"
-    is-docker "^2.1.1"
-    is-wsl "^2.2.0"
-
-opener@^1.5.1:
-  version "1.5.2"
-  resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
-  integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
-
-optionator@^0.8.1:
-  version "0.8.3"
-  resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
-  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
-  dependencies:
-    deep-is "~0.1.3"
-    fast-levenshtein "~2.0.6"
-    levn "~0.3.0"
-    prelude-ls "~1.1.2"
-    type-check "~0.3.2"
-    word-wrap "~1.2.3"
-
-optionator@^0.9.1:
-  version "0.9.1"
-  resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
-  integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
-  dependencies:
-    deep-is "^0.1.3"
-    fast-levenshtein "^2.0.6"
-    levn "^0.4.1"
-    prelude-ls "^1.2.1"
-    type-check "^0.4.0"
-    word-wrap "^1.2.3"
-
-optipng-bin@^7.0.0:
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.1.tgz#beb8e55a52f8a26f885ee57ab44fcf62397d6972"
-  integrity sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==
-  dependencies:
-    bin-build "^3.0.0"
-    bin-wrapper "^4.0.0"
-
-ora@^5.4.1:
-  version "5.4.1"
-  resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
-  integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
-  dependencies:
-    bl "^4.1.0"
-    chalk "^4.1.0"
-    cli-cursor "^3.1.0"
-    cli-spinners "^2.5.0"
-    is-interactive "^1.0.0"
-    is-unicode-supported "^0.1.0"
-    log-symbols "^4.1.0"
-    strip-ansi "^6.0.0"
-    wcwidth "^1.0.1"
-
-os-filter-obj@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz#1c0b62d5f3a2442749a2d139e6dddee6e81d8d16"
-  integrity sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==
-  dependencies:
-    arch "^2.1.0"
-
-os-tmpdir@~1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-  integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
-
-ow@^0.17.0:
-  version "0.17.0"
-  resolved "https://registry.npmjs.org/ow/-/ow-0.17.0.tgz#4f938999fed6264c9048cd6254356e0f1e7f688c"
-  integrity sha512-i3keDzDQP5lWIe4oODyDFey1qVrq2hXKTuTH2VpqwpYtzPiKZt2ziRI4NBQmgW40AnV5Euz17OyWweCb+bNEQA==
-  dependencies:
-    type-fest "^0.11.0"
-
-p-cancelable@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
-  integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==
-
-p-cancelable@^0.4.0:
-  version "0.4.1"
-  resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0"
-  integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==
-
-p-event@^1.0.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz#8e6b4f4f65c72bc5b6fe28b75eda874f96a4a085"
-  integrity sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==
-  dependencies:
-    p-timeout "^1.1.1"
-
-p-event@^2.1.0:
-  version "2.3.1"
-  resolved "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6"
-  integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==
-  dependencies:
-    p-timeout "^2.0.1"
-
-p-finally@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
-  integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
-
-p-is-promise@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
-  integrity sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==
-
-p-limit@^1.1.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
-  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
-  dependencies:
-    p-try "^1.0.0"
-
-p-limit@^2.2.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
-  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
-  dependencies:
-    p-try "^2.0.0"
-
-p-limit@^3.0.2:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
-  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
-  dependencies:
-    yocto-queue "^0.1.0"
-
-p-locate@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
-  integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==
-  dependencies:
-    p-limit "^1.1.0"
-
-p-locate@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
-  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
-  dependencies:
-    p-limit "^2.2.0"
-
-p-locate@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
-  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
-  dependencies:
-    p-limit "^3.0.2"
-
-p-map-series@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca"
-  integrity sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==
-  dependencies:
-    p-reduce "^1.0.0"
-
-p-map@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
-  integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
-  dependencies:
-    aggregate-error "^3.0.0"
-
-p-pipe@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e"
-  integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==
-
-p-reduce@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
-  integrity sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==
-
-p-timeout@^1.1.1:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"
-  integrity sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==
-  dependencies:
-    p-finally "^1.0.0"
-
-p-timeout@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038"
-  integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==
-  dependencies:
-    p-finally "^1.0.0"
-
-p-try@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
-  integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==
-
-p-try@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
-  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-param-case@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
-  integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
-  dependencies:
-    dot-case "^3.0.4"
-    tslib "^2.0.3"
-
-parent-module@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
-  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
-  dependencies:
-    callsites "^3.0.0"
-
-parse-json@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
-  integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==
-  dependencies:
-    error-ex "^1.2.0"
-
-parse-json@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
-  integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
-  dependencies:
-    error-ex "^1.3.1"
-    json-parse-better-errors "^1.0.1"
-
-parse-json@^5.0.0, parse-json@^5.2.0:
-  version "5.2.0"
-  resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
-  integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    error-ex "^1.3.1"
-    json-parse-even-better-errors "^2.3.0"
-    lines-and-columns "^1.1.6"
-
-parse-node-version@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
-  integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
-
-parse-passwd@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
-  integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==
-
-parse5@6.0.1:
-  version "6.0.1"
-  resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
-  integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
-
-parseurl@~1.3.3:
-  version "1.3.3"
-  resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
-  integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
-
-pascal-case@^3.1.2:
-  version "3.1.2"
-  resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
-  integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
-  dependencies:
-    no-case "^3.0.4"
-    tslib "^2.0.3"
-
-pascalcase@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
-  integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==
-
-path-case@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f"
-  integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==
-  dependencies:
-    dot-case "^3.0.4"
-    tslib "^2.0.3"
-
-path-exists@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
-  integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==
-  dependencies:
-    pinkie-promise "^2.0.0"
-
-path-exists@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
-  integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
-
-path-exists@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
-  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
-
-path-is-absolute@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-  integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-
-path-key@^2.0.0, path-key@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
-  integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
-
-path-key@^3.0.0, path-key@^3.1.0:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
-  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-
-path-parse@^1.0.7:
-  version "1.0.7"
-  resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
-  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-
-path-to-regexp@^6.2.0:
-  version "6.2.1"
-  resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5"
-  integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==
-
-path-type@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
-  integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==
-  dependencies:
-    graceful-fs "^4.1.2"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-path-type@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
-  integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
-  dependencies:
-    pify "^3.0.0"
-
-path-type@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
-  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
-
-pathe@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz#30fd7bbe0a0d91f0e60bae621f5d19e9e225c339"
-  integrity sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==
-
-pathe@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz#e2e13f6c62b31a3289af4ba19886c230f295ec03"
-  integrity sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==
-
-pend@~1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
-  integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
-
-picocolors@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
-  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
-
-picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1:
-  version "2.3.1"
-  resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
-  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-
-pidtree@^0.3.0:
-  version "0.3.1"
-  resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a"
-  integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==
-
-pidtree@^0.5.0:
-  version "0.5.0"
-  resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz#ad5fbc1de78b8a5f99d6fbdd4f6e4eee21d1aca1"
-  integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==
-
-pify@^2.0.0, pify@^2.2.0, pify@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-  integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
-
-pify@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
-  integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
-
-pify@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
-  integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
-
-pinia@2.0.12:
-  version "2.0.12"
-  resolved "https://registry.npmjs.org/pinia/-/pinia-2.0.12.tgz#4c6f7f59cb41f56f20deee71c403e66d8d3c637d"
-  integrity sha512-tUeuYGFrLU5irmGyRAIxp35q1OTcZ8sKpGT4XkPeVcG35W4R6cfXDbCGexzmVqH5lTQJJTXXbNGutIu9yS5yew==
-  dependencies:
-    "@vue/devtools-api" "^6.1.0"
-    vue-demi "*"
-
-pinkie-promise@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
-  integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==
-  dependencies:
-    pinkie "^2.0.0"
-
-pinkie@^2.0.0:
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-  integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==
-
-pinyin-pro@^3.11.0:
-  version "3.14.0"
-  resolved "https://registry.npmjs.org/pinyin-pro/-/pinyin-pro-3.14.0.tgz#3f444e1117caf7236bc90a1573c9653b048f2736"
-  integrity sha512-mbFw2Gx8IlbnxClhaACRFUWXa/lCzCttrPIdHXPzAvWOAmTKcdTFlMjbt5Quq6YY2asgD79Ml/MQpPEGN3o8iw==
-
-pirates@^4.0.4:
-  version "4.0.5"
-  resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
-  integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
-
-pkg-dir@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
-  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
-  dependencies:
-    find-up "^4.0.0"
-
-pngjs@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb"
-  integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==
-
-pngquant-bin@^6.0.0:
-  version "6.0.1"
-  resolved "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-6.0.1.tgz#2b5789ca219eeb4d8509ab1ae082092801b7f07e"
-  integrity sha512-Q3PUyolfktf+hYio6wsg3SanQzEU/v8aICg/WpzxXcuCMRb7H2Q81okfpcEztbMvw25ILjd3a87doj2N9kvbpQ==
-  dependencies:
-    bin-build "^3.0.0"
-    bin-wrapper "^4.0.1"
-    execa "^4.0.0"
-
-portfinder@^1.0.28:
-  version "1.0.32"
-  resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81"
-  integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==
-  dependencies:
-    async "^2.6.4"
-    debug "^3.2.7"
-    mkdirp "^0.5.6"
-
-posix-character-classes@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
-  integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==
-
-postcss-html@^1.4.1:
-  version "1.5.0"
-  resolved "https://registry.npmjs.org/postcss-html/-/postcss-html-1.5.0.tgz#57a43bc9e336f516ecc448a37d2e8c2290170a6f"
-  integrity sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==
-  dependencies:
-    htmlparser2 "^8.0.0"
-    js-tokens "^8.0.0"
-    postcss "^8.4.0"
-    postcss-safe-parser "^6.0.0"
-
-postcss-less@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/postcss-less/-/postcss-less-6.0.0.tgz#463b34c60f53b648c237f569aeb2e09149d85af4"
-  integrity sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==
-
-postcss-media-query-parser@^0.2.3:
-  version "0.2.3"
-  resolved "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244"
-  integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==
-
-postcss-prefix-selector@^1.6.0:
-  version "1.16.0"
-  resolved "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.0.tgz#ad5b56f9a73a2c090ca7161049632c9d89bcb404"
-  integrity sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==
-
-postcss-resolve-nested-selector@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e"
-  integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==
-
-postcss-safe-parser@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1"
-  integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==
-
-postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.9:
-  version "6.0.13"
-  resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
-  integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
-  dependencies:
-    cssesc "^3.0.0"
-    util-deprecate "^1.0.2"
-
-postcss-sorting@^7.0.1:
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz#923b5268451cf2d93ebf8835e17a6537757049a5"
-  integrity sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==
-
-postcss-value-parser@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
-  integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
-
-postcss@^5.2.17:
-  version "5.2.18"
-  resolved "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
-  integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
-  dependencies:
-    chalk "^1.1.3"
-    js-base64 "^2.1.9"
-    source-map "^0.5.6"
-    supports-color "^3.2.3"
-
-postcss@^8.1.10, postcss@^8.3.11, postcss@^8.4.0, postcss@^8.4.12, postcss@^8.4.18, postcss@^8.4.19:
-  version "8.4.23"
-  resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab"
-  integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==
-  dependencies:
-    nanoid "^3.3.6"
-    picocolors "^1.0.0"
-    source-map-js "^1.0.2"
-
-posthtml-parser@^0.2.0, posthtml-parser@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz#35d530de386740c2ba24ff2eb2faf39ccdf271dd"
-  integrity sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==
-  dependencies:
-    htmlparser2 "^3.8.3"
-    isobject "^2.1.0"
-
-posthtml-rename-id@^1.0:
-  version "1.0.12"
-  resolved "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz#cf7f6eb37146bf1afac31e68f18c6cc19ae61433"
-  integrity sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==
-  dependencies:
-    escape-string-regexp "1.0.5"
-
-posthtml-render@^1.0.5, posthtml-render@^1.0.6:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz#40114070c45881cacb93347dae3eff53afbcff13"
-  integrity sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==
-
-posthtml-svg-mode@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz#abd554face81223cab0cb367e18e4efd2a4e74b0"
-  integrity sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==
-  dependencies:
-    merge-options "1.0.1"
-    posthtml "^0.9.2"
-    posthtml-parser "^0.2.1"
-    posthtml-render "^1.0.6"
-
-posthtml@^0.9.2:
-  version "0.9.2"
-  resolved "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz#f4c06db9f67b61fd17c4e256e7e3d9515bf726fd"
-  integrity sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==
-  dependencies:
-    posthtml-parser "^0.2.0"
-    posthtml-render "^1.0.5"
-
-preact@^10.4.8:
-  version "10.14.0"
-  resolved "https://registry.npmjs.org/preact/-/preact-10.14.0.tgz#7353812c33ae79c1fa91bfd792db030a90565da3"
-  integrity sha512-4oh2sf208mKAdL5AQtzXxE387iSGNWMX/YjwMjH6m/XROILKAmx5Pbs2FsXrW7ixoVGGjpfYSBB833vOwYxNxw==
-
-prelude-ls@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
-  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
-
-prelude-ls@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-  integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
-
-prepend-http@^1.0.1:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
-  integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==
-
-prepend-http@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
-  integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==
-
-prettier-linter-helpers@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
-  integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
-  dependencies:
-    fast-diff "^1.1.2"
-
-prettier@^2.6.2:
-  version "2.8.8"
-  resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
-  integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
-
-pretty-bytes@^5.3.0:
-  version "5.6.0"
-  resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
-  integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
-
-pretty-bytes@^6.0.0:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.0.tgz#1d1cc9aae1939012c74180b679da6684616bf804"
-  integrity sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==
-
-pretty-format@^27.0.0, pretty-format@^27.5.1:
-  version "27.5.1"
-  resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
-  integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
-  dependencies:
-    ansi-regex "^5.0.1"
-    ansi-styles "^5.0.0"
-    react-is "^17.0.1"
-
-pretty-quick@^3.1.1:
-  version "3.1.3"
-  resolved "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.3.tgz#15281108c0ddf446675157ca40240099157b638e"
-  integrity sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==
-  dependencies:
-    chalk "^3.0.0"
-    execa "^4.0.0"
-    find-up "^4.1.0"
-    ignore "^5.1.4"
-    mri "^1.1.5"
-    multimatch "^4.0.0"
-
-print-js@^1.6.0:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/print-js/-/print-js-1.6.0.tgz#692b046cf31992b46afa6c6d8a9db1c69d431d1f"
-  integrity sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==
-
-process-nextick-args@~2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
-  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-prompts@^2.0.1:
-  version "2.4.2"
-  resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
-  integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
-  dependencies:
-    kleur "^3.0.3"
-    sisteransi "^1.0.5"
-
-proto-list@~1.2.1:
-  version "1.2.4"
-  resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
-  integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
-
-proxy-from-env@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
-  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
-
-prr@~1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
-  integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
-
-pseudomap@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-  integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==
-
-psl@^1.1.33:
-  version "1.9.0"
-  resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
-  integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
-
-pug-error@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz#5c62173cb09c34de2a2ce04f17b8adfec74d8ca5"
-  integrity sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==
-
-pug-lexer@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5"
-  integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==
-  dependencies:
-    character-parser "^2.2.0"
-    is-expression "^4.0.0"
-    pug-error "^2.0.0"
-
-pug-parser@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260"
-  integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==
-  dependencies:
-    pug-error "^2.0.0"
-    token-stream "1.0.0"
-
-pump@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
-  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
-  dependencies:
-    end-of-stream "^1.1.0"
-    once "^1.3.1"
-
-punycode@^2.1.0, punycode@^2.1.1:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
-  integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
-
-q@^1.5.1:
-  version "1.5.1"
-  resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
-  integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==
-
-qrcode@^1.5.0:
-  version "1.5.3"
-  resolved "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170"
-  integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==
-  dependencies:
-    dijkstrajs "^1.0.1"
-    encode-utf8 "^1.0.3"
-    pngjs "^5.0.0"
-    yargs "^15.3.1"
-
-qrcodejs2@0.0.2:
-  version "0.0.2"
-  resolved "https://registry.npmjs.org/qrcodejs2/-/qrcodejs2-0.0.2.tgz#465afe5e39f19facecb932c11f7a186109146ae1"
-  integrity sha512-+Y4HA+cb6qUzdgvI3KML8GYpMFwB24dFwzMkS/yXq6hwtUGNUnZQdUnksrV1XGMc2mid5ROw5SAuY9XhI3ValA==
-
-qs@^6.10.3, qs@^6.4.0:
-  version "6.11.2"
-  resolved "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9"
-  integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==
-  dependencies:
-    side-channel "^1.0.4"
-
-query-string@^4.3.2:
-  version "4.3.4"
-  resolved "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
-  integrity sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==
-  dependencies:
-    object-assign "^4.1.0"
-    strict-uri-encode "^1.0.0"
-
-query-string@^5.0.1:
-  version "5.1.1"
-  resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
-  integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
-  dependencies:
-    decode-uri-component "^0.2.0"
-    object-assign "^4.1.0"
-    strict-uri-encode "^1.0.0"
-
-querystringify@^2.1.1:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
-  integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
-
-queue-microtask@^1.2.2:
-  version "1.2.3"
-  resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
-  integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
-
-quick-lru@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
-  integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
-
-randombytes@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
-  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
-  dependencies:
-    safe-buffer "^5.1.0"
-
-react-is@^17.0.1:
-  version "17.0.2"
-  resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
-  integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
-
-read-pkg-up@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
-  integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==
-  dependencies:
-    find-up "^1.0.0"
-    read-pkg "^1.0.0"
-
-read-pkg-up@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
-  integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==
-  dependencies:
-    find-up "^2.0.0"
-    read-pkg "^3.0.0"
-
-read-pkg-up@^7.0.1:
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
-  integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
-  dependencies:
-    find-up "^4.1.0"
-    read-pkg "^5.2.0"
-    type-fest "^0.8.1"
-
-read-pkg@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
-  integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==
-  dependencies:
-    load-json-file "^1.0.0"
-    normalize-package-data "^2.3.2"
-    path-type "^1.0.0"
-
-read-pkg@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
-  integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==
-  dependencies:
-    load-json-file "^4.0.0"
-    normalize-package-data "^2.3.2"
-    path-type "^3.0.0"
-
-read-pkg@^5.2.0:
-  version "5.2.0"
-  resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
-  integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
-  dependencies:
-    "@types/normalize-package-data" "^2.4.0"
-    normalize-package-data "^2.5.0"
-    parse-json "^5.0.0"
-    type-fest "^0.6.0"
-
-readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stream@^3.4.0:
-  version "3.6.2"
-  resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
-  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
-  dependencies:
-    inherits "^2.0.3"
-    string_decoder "^1.1.1"
-    util-deprecate "^1.0.1"
-
-readable-stream@^2.0.0, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6:
-  version "2.3.8"
-  resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
-  integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
-  dependencies:
-    core-util-is "~1.0.0"
-    inherits "~2.0.3"
-    isarray "~1.0.0"
-    process-nextick-args "~2.0.0"
-    safe-buffer "~5.1.1"
-    string_decoder "~1.1.1"
-    util-deprecate "~1.0.1"
-
-readdirp@~3.6.0:
-  version "3.6.0"
-  resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
-  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
-  dependencies:
-    picomatch "^2.2.1"
-
-redent@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
-  integrity sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==
-  dependencies:
-    indent-string "^2.1.0"
-    strip-indent "^1.0.1"
-
-redent@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
-  integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
-  dependencies:
-    indent-string "^4.0.0"
-    strip-indent "^3.0.0"
-
-regenerate-unicode-properties@^10.1.0:
-  version "10.1.0"
-  resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c"
-  integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==
-  dependencies:
-    regenerate "^1.4.2"
-
-regenerate@^1.4.2:
-  version "1.4.2"
-  resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
-  integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
-
-regenerator-runtime@^0.11.0:
-  version "0.11.1"
-  resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
-  integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
-
-regenerator-runtime@^0.13.10, regenerator-runtime@^0.13.11:
-  version "0.13.11"
-  resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
-  integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
-
-regenerator-transform@^0.15.1:
-  version "0.15.1"
-  resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56"
-  integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==
-  dependencies:
-    "@babel/runtime" "^7.8.4"
-
-regex-not@^1.0.0, regex-not@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
-  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
-  dependencies:
-    extend-shallow "^3.0.2"
-    safe-regex "^1.1.0"
-
-regexp.prototype.flags@^1.4.3:
-  version "1.5.0"
-  resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"
-  integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==
-  dependencies:
-    call-bind "^1.0.2"
-    define-properties "^1.2.0"
-    functions-have-names "^1.2.3"
-
-regexpu-core@^5.3.1:
-  version "5.3.2"
-  resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b"
-  integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==
-  dependencies:
-    "@babel/regjsgen" "^0.8.0"
-    regenerate "^1.4.2"
-    regenerate-unicode-properties "^10.1.0"
-    regjsparser "^0.9.1"
-    unicode-match-property-ecmascript "^2.0.0"
-    unicode-match-property-value-ecmascript "^2.1.0"
-
-regjsparser@^0.9.1:
-  version "0.9.1"
-  resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709"
-  integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==
-  dependencies:
-    jsesc "~0.5.0"
-
-relateurl@^0.2.7:
-  version "0.2.7"
-  resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
-  integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
-
-repeat-element@^1.1.2:
-  version "1.1.4"
-  resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
-  integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
-
-repeat-string@^1.6.1:
-  version "1.6.1"
-  resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-  integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
-
-repeating@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
-  integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==
-  dependencies:
-    is-finite "^1.0.0"
-
-replace-ext@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a"
-  integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==
-
-require-directory@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
-  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
-
-require-from-string@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
-  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
-
-require-main-filename@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
-  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-
-requires-port@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
-  integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
-
-resize-observer-polyfill@^1.5.1:
-  version "1.5.1"
-  resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
-  integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
-
-resolve-cwd@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
-  integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
-  dependencies:
-    resolve-from "^5.0.0"
-
-resolve-dir@^1.0.0, resolve-dir@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
-  integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==
-  dependencies:
-    expand-tilde "^2.0.0"
-    global-modules "^1.0.0"
-
-resolve-from@5.0.0, resolve-from@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
-  integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
-
-resolve-from@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
-  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
-
-resolve-global@1.0.0, resolve-global@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255"
-  integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==
-  dependencies:
-    global-dirs "^0.1.1"
-
-resolve-url@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
-  integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==
-
-resolve.exports@^1.1.0:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999"
-  integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==
-
-resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1:
-  version "1.22.2"
-  resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
-  integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
-  dependencies:
-    is-core-module "^2.11.0"
-    path-parse "^1.0.7"
-    supports-preserve-symlinks-flag "^1.0.0"
-
-responselike@1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
-  integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==
-  dependencies:
-    lowercase-keys "^1.0.0"
-
-restore-cursor@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
-  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
-  dependencies:
-    onetime "^5.1.0"
-    signal-exit "^3.0.2"
-
-ret@~0.1.10:
-  version "0.1.15"
-  resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
-  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-
-reusify@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
-  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
-
-rfdc@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
-  integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
-
-rimraf@^2.5.4:
-  version "2.7.1"
-  resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
-  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
-  dependencies:
-    glob "^7.1.3"
-
-rimraf@^3.0.0, rimraf@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
-  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
-  dependencies:
-    glob "^7.1.3"
-
-rollup-plugin-purge-icons@^0.8.1:
-  version "0.8.1"
-  resolved "https://registry.npmjs.org/rollup-plugin-purge-icons/-/rollup-plugin-purge-icons-0.8.1.tgz#ae371c92e162a1786816f26437a95931f8398698"
-  integrity sha512-7ktMV+gWtXAdOIShE8EtTcnpGhozi5H2hKk1MQVGt+7FmlLkjR+XKu1Nyzjocwd6xJvKube2Lh+SfcJ8FYYySw==
-  dependencies:
-    "@purge-icons/core" "^0.8.0"
-    "@purge-icons/generated" "^0.8.1"
-
-rollup-plugin-terser@^7.0.0:
-  version "7.0.2"
-  resolved "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
-  integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==
-  dependencies:
-    "@babel/code-frame" "^7.10.4"
-    jest-worker "^26.2.1"
-    serialize-javascript "^4.0.0"
-    terser "^5.0.0"
-
-rollup-plugin-visualizer@^5.6.0:
-  version "5.9.0"
-  resolved "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz#013ac54fb6a9d7c9019e7eb77eced673399e5a0b"
-  integrity sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==
-  dependencies:
-    open "^8.4.0"
-    picomatch "^2.3.1"
-    source-map "^0.7.4"
-    yargs "^17.5.1"
-
-rollup@^2.43.1, rollup@^2.70.2, rollup@^2.72.0, rollup@^2.75.7, rollup@^2.79.1:
-  version "2.79.1"
-  resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7"
-  integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==
-  optionalDependencies:
-    fsevents "~2.3.2"
-
-run-async@^2.4.0:
-  version "2.4.1"
-  resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
-  integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
-
-run-parallel@^1.1.9:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
-  integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
-  dependencies:
-    queue-microtask "^1.2.2"
-
-rxjs@^7.2.0, rxjs@^7.5.5:
-  version "7.8.1"
-  resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
-  integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
-  dependencies:
-    tslib "^2.1.0"
-
-safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
-  version "5.1.2"
-  resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
-  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.2.0:
-  version "5.2.1"
-  resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
-  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-safe-regex-test@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
-  integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
-  dependencies:
-    call-bind "^1.0.2"
-    get-intrinsic "^1.1.3"
-    is-regex "^1.1.4"
-
-safe-regex@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
-  integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==
-  dependencies:
-    ret "~0.1.10"
-
-"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
-  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-sax@^1.2.4:
-  version "1.2.4"
-  resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
-  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
-saxes@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
-  integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
-  dependencies:
-    xmlchars "^2.2.0"
-
-scroll-into-view-if-needed@^2.2.25:
-  version "2.2.31"
-  resolved "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587"
-  integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==
-  dependencies:
-    compute-scroll-into-view "^1.0.20"
-
-scrollparent@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/scrollparent/-/scrollparent-2.0.1.tgz#715d5b9cc57760fb22bdccc3befb5bfe06b1a317"
-  integrity sha512-HSdN78VMvFCSGCkh0oYX/tY4R3P1DW61f8+TeZZ4j2VLgfwvw0bpRSOv4PCVKisktIwbzHCfZsx+rLbbDBqIBA==
-
-secure-compare@3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3"
-  integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==
-
-seek-bzip@^1.0.5:
-  version "1.0.6"
-  resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4"
-  integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==
-  dependencies:
-    commander "^2.8.1"
-
-select@^1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
-  integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==
-
-semver-regex@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
-  integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
-
-semver-truncate@^1.1.2:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz#57f41de69707a62709a7e0104ba2117109ea47e8"
-  integrity sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==
-  dependencies:
-    semver "^5.3.0"
-
-"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0:
-  version "5.7.1"
-  resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
-  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
-semver@7.3.7:
-  version "7.3.7"
-  resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
-  integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
-  dependencies:
-    lru-cache "^6.0.0"
-
-semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7:
-  version "7.5.1"
-  resolved "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec"
-  integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==
-  dependencies:
-    lru-cache "^6.0.0"
-
-semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
-  version "6.3.0"
-  resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
-  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-
-sentence-case@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f"
-  integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==
-  dependencies:
-    no-case "^3.0.4"
-    tslib "^2.0.3"
-    upper-case-first "^2.0.2"
-
-serialize-javascript@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
-  integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
-  dependencies:
-    randombytes "^2.1.0"
-
-set-blocking@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-  integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
-
-set-value@^2.0.0, set-value@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
-  integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-extendable "^0.1.1"
-    is-plain-object "^2.0.3"
-    split-string "^3.0.1"
-
-shallow-equal@^1.0.0:
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da"
-  integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==
-
-shebang-command@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
-  integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
-  dependencies:
-    shebang-regex "^1.0.0"
-
-shebang-command@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
-  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
-  dependencies:
-    shebang-regex "^3.0.0"
-
-shebang-regex@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-  integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
-
-shebang-regex@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
-  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-
-shell-quote@^1.6.1:
-  version "1.8.1"
-  resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
-  integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
-
-showdown@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz#1251f5ed8f773f0c0c7bfc8e6fd23581f9e545c5"
-  integrity sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==
-  dependencies:
-    commander "^9.0.0"
-
-side-channel@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
-  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
-  dependencies:
-    call-bind "^1.0.0"
-    get-intrinsic "^1.0.2"
-    object-inspect "^1.9.0"
-
-sigmund@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
-  integrity sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==
-
-signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
-  version "3.0.7"
-  resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
-  integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-
-sisteransi@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
-  integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
-
-slash@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
-  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-
-slice-ansi@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
-  integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
-  dependencies:
-    ansi-styles "^4.0.0"
-    astral-regex "^2.0.0"
-    is-fullwidth-code-point "^3.0.0"
-
-slice-ansi@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
-  integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
-  dependencies:
-    ansi-styles "^4.0.0"
-    astral-regex "^2.0.0"
-    is-fullwidth-code-point "^3.0.0"
-
-slice-ansi@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
-  integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==
-  dependencies:
-    ansi-styles "^6.0.0"
-    is-fullwidth-code-point "^4.0.0"
-
-snake-case@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
-  integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
-  dependencies:
-    dot-case "^3.0.4"
-    tslib "^2.0.3"
-
-snapdragon-node@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
-  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
-  dependencies:
-    define-property "^1.0.0"
-    isobject "^3.0.0"
-    snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
-  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
-  dependencies:
-    kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
-  version "0.8.2"
-  resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
-  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
-  dependencies:
-    base "^0.11.1"
-    debug "^2.2.0"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    map-cache "^0.2.2"
-    source-map "^0.5.6"
-    source-map-resolve "^0.5.0"
-    use "^3.1.0"
-
-sort-keys-length@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188"
-  integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==
-  dependencies:
-    sort-keys "^1.0.0"
-
-sort-keys@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
-  integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==
-  dependencies:
-    is-plain-obj "^1.0.0"
-
-sort-keys@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
-  integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==
-  dependencies:
-    is-plain-obj "^1.0.0"
-
-sortablejs@1.14.0:
-  version "1.14.0"
-  resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8"
-  integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==
-
-sortablejs@^1.15.0:
-  version "1.15.0"
-  resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz#53230b8aa3502bb77a29e2005808ffdb4a5f7e2a"
-  integrity sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==
-
-source-map-js@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
-  integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
-
-source-map-resolve@^0.5.0:
-  version "0.5.3"
-  resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
-  integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
-  dependencies:
-    atob "^2.1.2"
-    decode-uri-component "^0.2.0"
-    resolve-url "^0.2.1"
-    source-map-url "^0.4.0"
-    urix "^0.1.0"
-
-source-map-support@^0.5.6, source-map-support@~0.5.20:
-  version "0.5.21"
-  resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
-  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
-  dependencies:
-    buffer-from "^1.0.0"
-    source-map "^0.6.0"
-
-source-map-url@^0.4.0:
-  version "0.4.1"
-  resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
-  integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
-
-source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
-  version "0.6.1"
-  resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-source-map@^0.5.6:
-  version "0.5.7"
-  resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-  integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
-
-source-map@^0.7.3, source-map@^0.7.4:
-  version "0.7.4"
-  resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
-  integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
-
-source-map@^0.8.0-beta.0:
-  version "0.8.0-beta.0"
-  resolved "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11"
-  integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==
-  dependencies:
-    whatwg-url "^7.0.0"
-
-sourcemap-codec@^1.4.8:
-  version "1.4.8"
-  resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
-  integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
-
-spdx-correct@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c"
-  integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==
-  dependencies:
-    spdx-expression-parse "^3.0.0"
-    spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
-  integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
-
-spdx-expression-parse@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
-  integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
-  dependencies:
-    spdx-exceptions "^2.1.0"
-    spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
-  version "3.0.13"
-  resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5"
-  integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==
-
-split-string@^3.0.1, split-string@^3.0.2:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
-  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
-  dependencies:
-    extend-shallow "^3.0.0"
-
-split2@^3.0.0:
-  version "3.2.2"
-  resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f"
-  integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==
-  dependencies:
-    readable-stream "^3.0.0"
-
-split@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
-  integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
-  dependencies:
-    through "2"
-
-sprintf-js@~1.0.2:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-  integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
-
-squeak@^1.0.0:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz#33045037b64388b567674b84322a6521073916c3"
-  integrity sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A==
-  dependencies:
-    chalk "^1.0.0"
-    console-stream "^0.1.1"
-    lpad-align "^1.0.1"
-
-stable@^0.1.8:
-  version "0.1.8"
-  resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
-  integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
-
-stack-utils@^2.0.3:
-  version "2.0.6"
-  resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f"
-  integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==
-  dependencies:
-    escape-string-regexp "^2.0.0"
-
-static-extend@^0.1.1:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
-  integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==
-  dependencies:
-    define-property "^0.2.5"
-    object-copy "^0.1.0"
-
-statuses@~1.5.0:
-  version "1.5.0"
-  resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
-  integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
-
-strict-uri-encode@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
-  integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==
-
-string-argv@^0.3.1:
-  version "0.3.2"
-  resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
-  integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
-
-string-length@^4.0.1:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
-  integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==
-  dependencies:
-    char-regex "^1.0.2"
-    strip-ansi "^6.0.0"
-
-string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
-  version "4.2.3"
-  resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
-  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
-  dependencies:
-    emoji-regex "^8.0.0"
-    is-fullwidth-code-point "^3.0.0"
-    strip-ansi "^6.0.1"
-
-string-width@^5.0.0:
-  version "5.1.2"
-  resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
-  integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
-  dependencies:
-    eastasianwidth "^0.2.0"
-    emoji-regex "^9.2.2"
-    strip-ansi "^7.0.1"
-
-string.prototype.matchall@^4.0.6:
-  version "4.0.8"
-  resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3"
-  integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==
-  dependencies:
-    call-bind "^1.0.2"
-    define-properties "^1.1.4"
-    es-abstract "^1.20.4"
-    get-intrinsic "^1.1.3"
-    has-symbols "^1.0.3"
-    internal-slot "^1.0.3"
-    regexp.prototype.flags "^1.4.3"
-    side-channel "^1.0.4"
-
-string.prototype.padend@^3.0.0:
-  version "3.1.4"
-  resolved "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6"
-  integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==
-  dependencies:
-    call-bind "^1.0.2"
-    define-properties "^1.1.4"
-    es-abstract "^1.20.4"
-
-string.prototype.trim@^1.2.7:
-  version "1.2.7"
-  resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533"
-  integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==
-  dependencies:
-    call-bind "^1.0.2"
-    define-properties "^1.1.4"
-    es-abstract "^1.20.4"
-
-string.prototype.trimend@^1.0.6:
-  version "1.0.6"
-  resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
-  integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
-  dependencies:
-    call-bind "^1.0.2"
-    define-properties "^1.1.4"
-    es-abstract "^1.20.4"
-
-string.prototype.trimstart@^1.0.6:
-  version "1.0.6"
-  resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
-  integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
-  dependencies:
-    call-bind "^1.0.2"
-    define-properties "^1.1.4"
-    es-abstract "^1.20.4"
-
-string_decoder@^1.1.1:
-  version "1.3.0"
-  resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
-  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
-  dependencies:
-    safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
-  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
-  dependencies:
-    safe-buffer "~5.1.0"
-
-stringify-object@^3.3.0:
-  version "3.3.0"
-  resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
-  integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
-  dependencies:
-    get-own-enumerable-property-symbols "^3.0.0"
-    is-obj "^1.0.1"
-    is-regexp "^1.0.0"
-
-strip-ansi@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
-  integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==
-  dependencies:
-    ansi-regex "^2.0.0"
-
-strip-ansi@^6.0.0, strip-ansi@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
-  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
-  dependencies:
-    ansi-regex "^5.0.1"
-
-strip-ansi@^7.0.1:
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2"
-  integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==
-  dependencies:
-    ansi-regex "^6.0.1"
-
-strip-bom@4.0.0, strip-bom@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
-  integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
-
-strip-bom@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
-  integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==
-  dependencies:
-    is-utf8 "^0.2.0"
-
-strip-bom@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-  integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
-
-strip-comments@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b"
-  integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==
-
-strip-dirs@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5"
-  integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==
-  dependencies:
-    is-natural-number "^4.0.1"
-
-strip-eof@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
-  integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==
-
-strip-final-newline@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
-  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-
-strip-indent@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
-  integrity sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==
-  dependencies:
-    get-stdin "^4.0.1"
-
-strip-indent@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
-  integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
-  dependencies:
-    min-indent "^1.0.0"
-
-strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
-  integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
-
-strip-outer@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"
-  integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==
-  dependencies:
-    escape-string-regexp "^1.0.2"
-
-strnum@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db"
-  integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==
-
-style-search@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
-  integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==
-
-stylelint-config-html@>=1.0.0:
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz#999db19aea713b7ff6dde92ada76e4c1bd812b66"
-  integrity sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==
-
-stylelint-config-prettier@^9.0.3:
-  version "9.0.5"
-  resolved "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.5.tgz#9f78bbf31c7307ca2df2dd60f42c7014ee9da56e"
-  integrity sha512-U44lELgLZhbAD/xy/vncZ2Pq8sh2TnpiPvo38Ifg9+zeioR+LAkHu0i6YORIOxFafZoVg0xqQwex6e6F25S5XA==
-
-stylelint-config-recommended-vue@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.npmjs.org/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.4.0.tgz#0a182da17dc9e846e4bec65a7676ccf882b35964"
-  integrity sha512-DVJqyX2KvMCn9U0+keL12r7xlsH26K4Vg8NrIZuq5MoF7g82DpMp326Om4E0Q+Il1o+bTHuUyejf2XAI0iD04Q==
-  dependencies:
-    semver "^7.3.5"
-    stylelint-config-html ">=1.0.0"
-    stylelint-config-recommended ">=6.0.0"
-
-stylelint-config-recommended@>=6.0.0:
-  version "12.0.0"
-  resolved "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-12.0.0.tgz#d0993232fca017065fd5acfcb52dd8a188784ef4"
-  integrity sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ==
-
-stylelint-config-recommended@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz#7497372ae83ab7a6fffc18d7d7b424c6480ae15e"
-  integrity sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==
-
-stylelint-config-standard@^25.0.0:
-  version "25.0.0"
-  resolved "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-25.0.0.tgz#2c916984e6655d40d6e8748b19baa8603b680bff"
-  integrity sha512-21HnP3VSpaT1wFjFvv9VjvOGDtAviv47uTp3uFmzcN+3Lt+RYRv6oAplLaV51Kf792JSxJ6svCJh/G18E9VnCA==
-  dependencies:
-    stylelint-config-recommended "^7.0.0"
-
-stylelint-order@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz#abd20f6b85ac640774cbe40e70d3fe9c6fdf4400"
-  integrity sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==
-  dependencies:
-    postcss "^8.3.11"
-    postcss-sorting "^7.0.1"
-
-stylelint@^14.7.1:
-  version "14.16.1"
-  resolved "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz#b911063530619a1bbe44c2b875fd8181ebdc742d"
-  integrity sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==
-  dependencies:
-    "@csstools/selector-specificity" "^2.0.2"
-    balanced-match "^2.0.0"
-    colord "^2.9.3"
-    cosmiconfig "^7.1.0"
-    css-functions-list "^3.1.0"
-    debug "^4.3.4"
-    fast-glob "^3.2.12"
-    fastest-levenshtein "^1.0.16"
-    file-entry-cache "^6.0.1"
-    global-modules "^2.0.0"
-    globby "^11.1.0"
-    globjoin "^0.1.4"
-    html-tags "^3.2.0"
-    ignore "^5.2.1"
-    import-lazy "^4.0.0"
-    imurmurhash "^0.1.4"
-    is-plain-object "^5.0.0"
-    known-css-properties "^0.26.0"
-    mathml-tag-names "^2.1.3"
-    meow "^9.0.0"
-    micromatch "^4.0.5"
-    normalize-path "^3.0.0"
-    picocolors "^1.0.0"
-    postcss "^8.4.19"
-    postcss-media-query-parser "^0.2.3"
-    postcss-resolve-nested-selector "^0.1.1"
-    postcss-safe-parser "^6.0.0"
-    postcss-selector-parser "^6.0.11"
-    postcss-value-parser "^4.2.0"
-    resolve-from "^5.0.0"
-    string-width "^4.2.3"
-    strip-ansi "^6.0.1"
-    style-search "^0.1.0"
-    supports-hyperlinks "^2.3.0"
-    svg-tags "^1.0.0"
-    table "^6.8.1"
-    v8-compile-cache "^2.3.0"
-    write-file-atomic "^4.0.2"
-
-supports-color@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
-  integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==
-
-supports-color@^3.2.3:
-  version "3.2.3"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
-  integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==
-  dependencies:
-    has-flag "^1.0.0"
-
-supports-color@^5.3.0:
-  version "5.5.0"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
-  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
-  dependencies:
-    has-flag "^3.0.0"
-
-supports-color@^7.0.0, supports-color@^7.1.0:
-  version "7.2.0"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
-  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
-  dependencies:
-    has-flag "^4.0.0"
-
-supports-color@^8.0.0:
-  version "8.1.1"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
-  integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
-  dependencies:
-    has-flag "^4.0.0"
-
-supports-color@^9.2.1:
-  version "9.3.1"
-  resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.3.1.tgz#34e4ad3c71c9a39dae3254ecc46c9b74e89e15a6"
-  integrity sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==
-
-supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
-  integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==
-  dependencies:
-    has-flag "^4.0.0"
-    supports-color "^7.0.0"
-
-supports-preserve-symlinks-flag@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
-  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-
-svg-baker@1.7.0:
-  version "1.7.0"
-  resolved "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz#8367f78d875550c52fe4756f7303d5c5d7c2e9a7"
-  integrity sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==
-  dependencies:
-    bluebird "^3.5.0"
-    clone "^2.1.1"
-    he "^1.1.1"
-    image-size "^0.5.1"
-    loader-utils "^1.1.0"
-    merge-options "1.0.1"
-    micromatch "3.1.0"
-    postcss "^5.2.17"
-    postcss-prefix-selector "^1.6.0"
-    posthtml-rename-id "^1.0"
-    posthtml-svg-mode "^1.0.3"
-    query-string "^4.3.2"
-    traverse "^0.6.6"
-
-svg-tags@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
-  integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==
-
-svgo@^2.1.0, svgo@^2.8.0:
-  version "2.8.0"
-  resolved "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24"
-  integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==
-  dependencies:
-    "@trysound/sax" "0.2.0"
-    commander "^7.2.0"
-    css-select "^4.1.3"
-    css-tree "^1.1.3"
-    csso "^4.2.0"
-    picocolors "^1.0.0"
-    stable "^0.1.8"
-
-symbol-tree@^3.2.4:
-  version "3.2.4"
-  resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
-  integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
-
-systemjs@^6.13.0:
-  version "6.14.1"
-  resolved "https://registry.npmjs.org/systemjs/-/systemjs-6.14.1.tgz#95a580b91b50d0d69ff178ed4816f0ddbcea23c1"
-  integrity sha512-8ftwWd+XnQtZ/aGbatrN4QFNGrKJzmbtixW+ODpci7pyoTajg4sonPP8aFLESAcuVxaC1FyDESt+SpfFCH9rZQ==
-
-table@^6.8.1:
-  version "6.8.1"
-  resolved "https://registry.npmjs.org/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf"
-  integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==
-  dependencies:
-    ajv "^8.0.1"
-    lodash.truncate "^4.4.2"
-    slice-ansi "^4.0.0"
-    string-width "^4.2.3"
-    strip-ansi "^6.0.1"
-
-tar-stream@^1.5.2:
-  version "1.6.2"
-  resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
-  integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
-  dependencies:
-    bl "^1.0.0"
-    buffer-alloc "^1.2.0"
-    end-of-stream "^1.0.0"
-    fs-constants "^1.0.0"
-    readable-stream "^2.3.0"
-    to-buffer "^1.1.1"
-    xtend "^4.0.0"
-
-temp-dir@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
-  integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==
-
-temp-dir@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e"
-  integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==
-
-tempfile@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz#6b0446856a9b1114d1856ffcbe509cccb0977265"
-  integrity sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==
-  dependencies:
-    temp-dir "^1.0.0"
-    uuid "^3.0.1"
-
-tempfile@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/tempfile/-/tempfile-3.0.0.tgz#5376a3492de7c54150d0cc0612c3f00e2cdaf76c"
-  integrity sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==
-  dependencies:
-    temp-dir "^2.0.0"
-    uuid "^3.3.2"
-
-tempy@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3"
-  integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==
-  dependencies:
-    is-stream "^2.0.0"
-    temp-dir "^2.0.0"
-    type-fest "^0.16.0"
-    unique-string "^2.0.0"
-
-terminal-link@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
-  integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
-  dependencies:
-    ansi-escapes "^4.2.1"
-    supports-hyperlinks "^2.0.0"
-
-terser@^5.0.0, terser@^5.10.0:
-  version "5.17.3"
-  resolved "https://registry.npmjs.org/terser/-/terser-5.17.3.tgz#7f908f16b3cdf3f6c0f8338e6c1c674837f90d25"
-  integrity sha512-AudpAZKmZHkG9jueayypz4duuCFJMMNGRMwaPvQKWfxKedh8Z2x3OCoDqIIi1xx5+iwx1u6Au8XQcc9Lke65Yg==
-  dependencies:
-    "@jridgewell/source-map" "^0.3.2"
-    acorn "^8.5.0"
-    commander "^2.20.0"
-    source-map-support "~0.5.20"
-
-test-exclude@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
-  integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
-  dependencies:
-    "@istanbuljs/schema" "^0.1.2"
-    glob "^7.1.4"
-    minimatch "^3.0.4"
-
-text-extensions@^1.0.0:
-  version "1.9.0"
-  resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
-  integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
-
-text-table@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-  integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
-
-throat@^6.0.1:
-  version "6.0.2"
-  resolved "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe"
-  integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==
-
-through2@^2.0.0:
-  version "2.0.5"
-  resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
-  integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
-  dependencies:
-    readable-stream "~2.3.6"
-    xtend "~4.0.1"
-
-through2@^4.0.0:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
-  integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
-  dependencies:
-    readable-stream "3"
-
-through@2, "through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8:
-  version "2.3.8"
-  resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-  integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
-
-timed-out@^4.0.0, timed-out@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
-  integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==
-
-tiny-emitter@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
-  integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
-
-tinycolor2@^1.4.2:
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e"
-  integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==
-
-tinymce@^5.10.3:
-  version "5.10.7"
-  resolved "https://registry.npmjs.org/tinymce/-/tinymce-5.10.7.tgz#d89d446f1962f2a1df6b2b70018ce475ec7ffb80"
-  integrity sha512-9UUjaO0R7FxcFo0oxnd1lMs7H+D0Eh+dDVo5hKbVe1a+VB0nit97vOqlinj+YwgoBDt6/DSCUoWqAYlLI8BLYA==
-
-tmp@^0.0.33:
-  version "0.0.33"
-  resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
-  integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
-  dependencies:
-    os-tmpdir "~1.0.2"
-
-tmpl@1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
-  integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
-
-to-buffer@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
-  integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
-
-to-fast-properties@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
-  integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
-
-to-object-path@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
-  integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==
-  dependencies:
-    kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
-  integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==
-  dependencies:
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-
-to-regex-range@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
-  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
-  dependencies:
-    is-number "^7.0.0"
-
-to-regex@^3.0.1:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
-  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
-  dependencies:
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    regex-not "^1.0.2"
-    safe-regex "^1.1.0"
-
-token-stream@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4"
-  integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==
-
-tough-cookie@^4.0.0:
-  version "4.1.2"
-  resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874"
-  integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==
-  dependencies:
-    psl "^1.1.33"
-    punycode "^2.1.1"
-    universalify "^0.2.0"
-    url-parse "^1.5.3"
-
-tr46@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
-  integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==
-  dependencies:
-    punycode "^2.1.0"
-
-tr46@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"
-  integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==
-  dependencies:
-    punycode "^2.1.1"
-
-tr46@~0.0.3:
-  version "0.0.3"
-  resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
-  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
-
-traverse@^0.6.6:
-  version "0.6.7"
-  resolved "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe"
-  integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==
-
-trim-newlines@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
-  integrity sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==
-
-trim-newlines@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
-  integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
-
-trim-repeated@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"
-  integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==
-  dependencies:
-    escape-string-regexp "^1.0.2"
-
-ts-jest@^27.0.7:
-  version "27.1.5"
-  resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz#0ddf1b163fbaae3d5b7504a1e65c914a95cff297"
-  integrity sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==
-  dependencies:
-    bs-logger "0.x"
-    fast-json-stable-stringify "2.x"
-    jest-util "^27.0.0"
-    json5 "2.x"
-    lodash.memoize "4.x"
-    make-error "1.x"
-    semver "7.x"
-    yargs-parser "20.x"
-
-ts-node@^10.7.0, ts-node@^10.8.1:
-  version "10.9.1"
-  resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
-  integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
-  dependencies:
-    "@cspotcode/source-map-support" "^0.8.0"
-    "@tsconfig/node10" "^1.0.7"
-    "@tsconfig/node12" "^1.0.7"
-    "@tsconfig/node14" "^1.0.0"
-    "@tsconfig/node16" "^1.0.2"
-    acorn "^8.4.1"
-    acorn-walk "^8.1.1"
-    arg "^4.1.0"
-    create-require "^1.1.0"
-    diff "^4.0.1"
-    make-error "^1.1.1"
-    v8-compile-cache-lib "^3.0.1"
-    yn "3.1.1"
-
-tslib@2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
-  integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
-
-tslib@^1.8.1:
-  version "1.14.1"
-  resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
-  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-
-tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0:
-  version "2.5.0"
-  resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
-  integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
-
-tsutils@^3.21.0:
-  version "3.21.0"
-  resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
-  integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
-  dependencies:
-    tslib "^1.8.1"
-
-tunnel-agent@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
-  integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
-  dependencies:
-    safe-buffer "^5.0.1"
-
-type-check@^0.4.0, type-check@~0.4.0:
-  version "0.4.0"
-  resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
-  integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
-  dependencies:
-    prelude-ls "^1.2.1"
-
-type-check@~0.3.2:
-  version "0.3.2"
-  resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
-  integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
-  dependencies:
-    prelude-ls "~1.1.2"
-
-type-detect@4.0.8:
-  version "4.0.8"
-  resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
-  integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
-
-type-fest@^0.11.0:
-  version "0.11.0"
-  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
-  integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
-
-type-fest@^0.16.0:
-  version "0.16.0"
-  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860"
-  integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==
-
-type-fest@^0.18.0:
-  version "0.18.1"
-  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
-  integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
-
-type-fest@^0.20.2:
-  version "0.20.2"
-  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
-  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
-
-type-fest@^0.21.3:
-  version "0.21.3"
-  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
-  integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
-
-type-fest@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
-  integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
-
-type-fest@^0.8.1:
-  version "0.8.1"
-  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
-  integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
-
-typed-array-length@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
-  integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
-  dependencies:
-    call-bind "^1.0.2"
-    for-each "^0.3.3"
-    is-typed-array "^1.1.9"
-
-typedarray-to-buffer@^3.1.5:
-  version "3.1.5"
-  resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
-  integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
-  dependencies:
-    is-typedarray "^1.0.0"
-
-typescript@^4.4.3, typescript@^4.6.3:
-  version "4.9.5"
-  resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
-  integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
-
-"typescript@^4.6.4 || ^5.0.0":
-  version "5.0.4"
-  resolved "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b"
-  integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==
-
-uglify-js@^3.1.4:
-  version "3.17.4"
-  resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c"
-  integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==
-
-unbox-primitive@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
-  integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
-  dependencies:
-    call-bind "^1.0.2"
-    has-bigints "^1.0.2"
-    has-symbols "^1.0.3"
-    which-boxed-primitive "^1.0.2"
-
-unbzip2-stream@^1.0.9:
-  version "1.4.3"
-  resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
-  integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
-  dependencies:
-    buffer "^5.2.1"
-    through "^2.3.8"
-
-unicode-canonical-property-names-ecmascript@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
-  integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==
-
-unicode-match-property-ecmascript@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
-  integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
-  dependencies:
-    unicode-canonical-property-names-ecmascript "^2.0.0"
-    unicode-property-aliases-ecmascript "^2.0.0"
-
-unicode-match-property-value-ecmascript@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0"
-  integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==
-
-unicode-property-aliases-ecmascript@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
-  integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
-
-union-value@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
-  integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
-  dependencies:
-    arr-union "^3.1.0"
-    get-value "^2.0.6"
-    is-extendable "^0.1.1"
-    set-value "^2.0.1"
-
-union@~0.5.0:
-  version "0.5.0"
-  resolved "https://registry.npmjs.org/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075"
-  integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==
-  dependencies:
-    qs "^6.4.0"
-
-unique-string@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
-  integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
-  dependencies:
-    crypto-random-string "^2.0.0"
-
-universal-user-agent@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
-  integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==
-
-universalify@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0"
-  integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
-
-universalify@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
-  integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
-
-unpipe@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
-  integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
-
-unset-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
-  integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==
-  dependencies:
-    has-value "^0.3.1"
-    isobject "^3.0.0"
-
-upath@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
-  integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
-
-upath@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b"
-  integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==
-
-update-browserslist-db@^1.0.10:
-  version "1.0.11"
-  resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
-  integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
-  dependencies:
-    escalade "^3.1.1"
-    picocolors "^1.0.0"
-
-upper-case-first@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324"
-  integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==
-  dependencies:
-    tslib "^2.0.3"
-
-upper-case@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a"
-  integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==
-  dependencies:
-    tslib "^2.0.3"
-
-uri-js@^4.2.2:
-  version "4.4.1"
-  resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
-  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
-  dependencies:
-    punycode "^2.1.0"
-
-urix@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
-  integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==
-
-url-join@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
-  integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
-
-url-parse-lax@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
-  integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==
-  dependencies:
-    prepend-http "^1.0.1"
-
-url-parse-lax@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
-  integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==
-  dependencies:
-    prepend-http "^2.0.0"
-
-url-parse@^1.5.3:
-  version "1.5.10"
-  resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
-  integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
-  dependencies:
-    querystringify "^2.1.1"
-    requires-port "^1.0.0"
-
-url-to-options@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
-  integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==
-
-use@^3.1.0:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
-  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
-
-util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-
-utils-merge@1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
-  integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
-
-uuid@^3.0.1, uuid@^3.3.2:
-  version "3.4.0"
-  resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
-  integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-
-v8-compile-cache-lib@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
-  integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
-
-v8-compile-cache@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
-  integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
-
-v8-to-istanbul@^8.1.0:
-  version "8.1.1"
-  resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed"
-  integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==
-  dependencies:
-    "@types/istanbul-lib-coverage" "^2.0.1"
-    convert-source-map "^1.6.0"
-    source-map "^0.7.3"
-
-validate-npm-package-license@^3.0.1:
-  version "3.0.4"
-  resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
-  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
-  dependencies:
-    spdx-correct "^3.0.0"
-    spdx-expression-parse "^3.0.0"
-
-vary@^1:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
-  integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
-
-vditor@^3.8.13:
-  version "3.9.2"
-  resolved "https://registry.npmjs.org/vditor/-/vditor-3.9.2.tgz#314d53f82536700e522a555319c8cd699343954e"
-  integrity sha512-Uei2HV1WACPE82FRkYLo3ys5E3KR7ucYgbMQNR8t33f2QxZMjwR6e5S/zoXccc9ru6ZWGi35DJE5vEW29hD4lQ==
-  dependencies:
-    diff-match-patch "^1.0.5"
-
-vite-plugin-compression@^0.5.1:
-  version "0.5.1"
-  resolved "https://registry.npmjs.org/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz#a75b0d8f48357ebb377b65016da9f20885ef39b6"
-  integrity sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==
-  dependencies:
-    chalk "^4.1.2"
-    debug "^4.3.3"
-    fs-extra "^10.0.0"
-
-vite-plugin-html@^3.2.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/vite-plugin-html/-/vite-plugin-html-3.2.0.tgz#0d4df9900642a321a139f1c25c05195ba9d0ec79"
-  integrity sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==
-  dependencies:
-    "@rollup/pluginutils" "^4.2.0"
-    colorette "^2.0.16"
-    connect-history-api-fallback "^1.6.0"
-    consola "^2.15.3"
-    dotenv "^16.0.0"
-    dotenv-expand "^8.0.2"
-    ejs "^3.1.6"
-    fast-glob "^3.2.11"
-    fs-extra "^10.0.1"
-    html-minifier-terser "^6.1.0"
-    node-html-parser "^5.3.3"
-    pathe "^0.2.0"
-
-vite-plugin-imagemin@^0.6.1:
-  version "0.6.1"
-  resolved "https://registry.npmjs.org/vite-plugin-imagemin/-/vite-plugin-imagemin-0.6.1.tgz#d4e538beaa6265fb0df17396666ee90483e953bc"
-  integrity sha512-cP7LDn8euPrji7WYtDoNQpJEB9nkMxJHm/A+QZnvMrrCSuyo/clpMy/T1v7suDXPBavsDiDdFdVQB5p7VGD2cg==
-  dependencies:
-    "@types/imagemin" "^7.0.1"
-    "@types/imagemin-gifsicle" "^7.0.1"
-    "@types/imagemin-jpegtran" "^5.0.1"
-    "@types/imagemin-mozjpeg" "^8.0.1"
-    "@types/imagemin-optipng" "^5.2.1"
-    "@types/imagemin-svgo" "^10.0.0"
-    "@types/imagemin-webp" "^7.0.0"
-    "@types/svgo" "^2.6.1"
-    chalk "^4.1.2"
-    debug "^4.3.3"
-    esbuild "^0.14.14"
-    fs-extra "^10.0.0"
-    gifsicle "5.2.0"
-    imagemin "^7.0.1"
-    imagemin-gifsicle "^7.0.0"
-    imagemin-jpegtran "^7.0.0"
-    imagemin-mozjpeg "^9.0.0"
-    imagemin-optipng "^8.0.0"
-    imagemin-pngquant "^9.0.2"
-    imagemin-svgo "^9.0.0"
-    imagemin-webp "^6.0.0"
-    jpegtran-bin "^6.0.1"
-    pathe "^0.2.0"
-
-vite-plugin-mkcert@^1.10.1:
-  version "1.15.0"
-  resolved "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.15.0.tgz#629da7cf77f15af65ebd8d476d1f68af901874d4"
-  integrity sha512-0Pz7iExvo7pS2HsxMe6Y/HIrsFJidXN8Sju7tsL1XYQdbUKb/D0L5Wkj3UoGQmbbWZUFf8nHHa0XYbd4FH6ZrA==
-  dependencies:
-    "@octokit/rest" "^19.0.5"
-    axios "^1.2.2"
-    debug "^4.3.4"
-    picocolors "^1.0.0"
-
-vite-plugin-mock@^2.9.6:
-  version "2.9.8"
-  resolved "https://registry.npmjs.org/vite-plugin-mock/-/vite-plugin-mock-2.9.8.tgz#115ab15f2a3ec6b20ef0824a57e19586bc1baa24"
-  integrity sha512-YTQM5Sn7t+/DNOwTkr+W26QGTCk1PrDkhGHslTJ90lIPJhJtDTwuSkEYMAuLP9TcVQ/qExTFx/x/GE3kxJ05sw==
-  dependencies:
-    "@types/mockjs" "^1.0.4"
-    chalk "^4.1.2"
-    chokidar "^3.5.2"
-    connect "^3.7.0"
-    debug "^4.3.2"
-    esbuild "^0.14.36"
-    fast-glob "^3.2.7"
-    path-to-regexp "^6.2.0"
-
-vite-plugin-optimize-persist@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.npmjs.org/vite-plugin-optimize-persist/-/vite-plugin-optimize-persist-0.1.2.tgz#c2aa2712afa74db55f580e3d1656e8cc0b783019"
-  integrity sha512-H/Ebn2kZO8PvwUF08SsT5K5xMJNCWKoGX71+e9/ER3yNj7GHiFjNQlvGg5ih/zEx09MZ9m7WCxOwmEKbeIVzww==
-  dependencies:
-    debug "^4.3.2"
-    fs-extra "^10.0.0"
-
-vite-plugin-package-config@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.npmjs.org/vite-plugin-package-config/-/vite-plugin-package-config-0.1.1.tgz#6bd579f71db7582ef9dcc05e9f7920e689c498c9"
-  integrity sha512-w9B3I8ZnqoyhlbzimXjXNk85imrMZgvI9m8f6j3zonK5IVA5KXzpT+PZOHlDz8lqh1vqvoEI1uhy+ZDoLAiA/w==
-  dependencies:
-    debug "^4.3.3"
-
-vite-plugin-purge-icons@^0.8.2:
-  version "0.8.2"
-  resolved "https://registry.npmjs.org/vite-plugin-purge-icons/-/vite-plugin-purge-icons-0.8.2.tgz#bdbbbad34f82e2cf239afc0f3aa8c6bd175f48f6"
-  integrity sha512-rW3RcNKj7QY3M7wcnwYVc3Ig+WwSQQ/Z67v+xdtk/8MA+ON05A3zc3qGaPdi6+8BUKYDpqvviKYiuLgRjleUOQ==
-  dependencies:
-    "@purge-icons/core" "^0.8.0"
-    "@purge-icons/generated" "^0.8.1"
-    rollup-plugin-purge-icons "^0.8.1"
-
-vite-plugin-pwa@^0.12.3:
-  version "0.12.8"
-  resolved "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.12.8.tgz#9eee41771fd9b84bdd5fb548cf6e19ed09bfc2ae"
-  integrity sha512-pSiFHmnJGMQJJL8aJzQ8SaraZBSBPMGvGUkCNzheIq9UQCEk/eP3UmANNmS9eupuhIpTK8AdxTOHcaMcAqAbCA==
-  dependencies:
-    debug "^4.3.4"
-    fast-glob "^3.2.11"
-    pretty-bytes "^6.0.0"
-    rollup "^2.75.7"
-    workbox-build "^6.5.3"
-    workbox-window "^6.5.3"
-
-vite-plugin-style-import@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/vite-plugin-style-import/-/vite-plugin-style-import-2.0.0.tgz#edafd9fbb09e8bb5ae67dee8f601afbe386a9969"
-  integrity sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==
-  dependencies:
-    "@rollup/pluginutils" "^4.1.2"
-    change-case "^4.1.2"
-    console "^0.7.2"
-    es-module-lexer "^0.9.3"
-    fs-extra "^10.0.0"
-    magic-string "^0.25.7"
-    pathe "^0.2.0"
-
-vite-plugin-svg-icons@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/vite-plugin-svg-icons/-/vite-plugin-svg-icons-2.0.1.tgz#7269a0962593509f371b9e2bb344d469db2c6df9"
-  integrity sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==
-  dependencies:
-    "@types/svgo" "^2.6.1"
-    cors "^2.8.5"
-    debug "^4.3.3"
-    etag "^1.8.1"
-    fs-extra "^10.0.0"
-    pathe "^0.2.0"
-    svg-baker "1.7.0"
-    svgo "^2.8.0"
-
-vite-plugin-vue-setup-extend@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.npmjs.org/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz#ebbbe265320039b8c6a3b9fcae3b8d152ecf4a13"
-  integrity sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==
-  dependencies:
-    "@vue/compiler-sfc" "^3.2.29"
-    magic-string "^0.25.7"
-
-vite-plugin-windicss@^1.8.7:
-  version "1.9.0"
-  resolved "https://registry.npmjs.org/vite-plugin-windicss/-/vite-plugin-windicss-1.9.0.tgz#0b635c3cf3557267d2f97bc42e3f9842a67360af"
-  integrity sha512-w0unPfcbVU5eaISAsFTLgIb41SLhmXoUF75Othu8NqFioe8+DEqiuvJ7/k/LRuEuvI8Rt/OKrY6cNzrB+dykaA==
-  dependencies:
-    "@windicss/plugin-utils" "1.9.0"
-    debug "^4.3.4"
-    kolorist "^1.8.0"
-    windicss "^3.5.6"
-
-vite@^3.0.2:
-  version "3.2.6"
-  resolved "https://registry.npmjs.org/vite/-/vite-3.2.6.tgz#a0538710e69532225d9c0ba6a23f4158b51267fd"
-  integrity sha512-nTXTxYVvaQNLoW5BQ8PNNQ3lPia57gzsQU/Khv+JvzKPku8kNZL6NMUR/qwXhMG6E+g1idqEPanomJ+VZgixEg==
-  dependencies:
-    esbuild "^0.15.9"
-    postcss "^8.4.18"
-    resolve "^1.22.1"
-    rollup "^2.79.1"
-  optionalDependencies:
-    fsevents "~2.3.2"
-
-vscode-jsonrpc@^8.0.0-next.5:
-  version "8.1.0"
-  resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz#cb9989c65e219e18533cc38e767611272d274c94"
-  integrity sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==
-
-vscode-languageserver-textdocument@^1.0.3:
-  version "1.0.8"
-  resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz#9eae94509cbd945ea44bca8dcfe4bb0c15bb3ac0"
-  integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==
-
-vscode-languageserver-types@^3.17.0-next.6:
-  version "3.17.3"
-  resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64"
-  integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==
-
-vscode-uri@^3.0.3:
-  version "3.0.7"
-  resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz#6d19fef387ee6b46c479e5fb00870e15e58c1eb8"
-  integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==
-
-vue-cropper@^0.5.6:
-  version "0.5.11"
-  resolved "https://registry.npmjs.org/vue-cropper/-/vue-cropper-0.5.11.tgz#2ea05bb5069146dc4c6818edf8de209cbc5b7103"
-  integrity sha512-UeA3qL2BLCTGkOEAxEsxSNFO+qLYAn6YRHv4oS32cP9lMhF1vFmnAf/z+ZamtR0/Fh3sbZeZUCLVR2Ol2/dpTQ==
-
-vue-cropperjs@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/vue-cropperjs/-/vue-cropperjs-5.0.0.tgz#7f8cbc460737af3831b4ded634c95905198e329e"
-  integrity sha512-RhnC8O33uRZNkn74aiHZwNHnBJOXWlS4P6gsRI0lw4cZlWjKSCywZI9oSI9POlIPI6OYv30jvnHMXGch85tw7w==
-  dependencies:
-    cropperjs "^1.5.6"
-
-vue-demi@*:
-  version "0.14.1"
-  resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.1.tgz#1ed9af03a27642762bfed83d8750805302d0398d"
-  integrity sha512-rt+yuCtXvscYot9SQQj3WKZJVSriPNqVkpVBNEHPzSgBv7QIYzsS410VqVgvx8f9AAPgjg+XPKvmV3vOqqkJQQ==
-
-vue-eslint-parser@^8.0.1, vue-eslint-parser@^8.3.0:
-  version "8.3.0"
-  resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d"
-  integrity sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==
-  dependencies:
-    debug "^4.3.2"
-    eslint-scope "^7.0.0"
-    eslint-visitor-keys "^3.1.0"
-    espree "^9.0.0"
-    esquery "^1.4.0"
-    lodash "^4.17.21"
-    semver "^7.3.5"
-
-vue-i18n@^9.1.9:
-  version "9.2.2"
-  resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz#aeb49d9424923c77e0d6441e3f21dafcecd0e666"
-  integrity sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==
-  dependencies:
-    "@intlify/core-base" "9.2.2"
-    "@intlify/shared" "9.2.2"
-    "@intlify/vue-devtools" "9.2.2"
-    "@vue/devtools-api" "^6.2.1"
-
-vue-infinite-scroll@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/vue-infinite-scroll/-/vue-infinite-scroll-2.0.2.tgz#ca37a91fe92ee0ad3b74acf8682c00917144b711"
-  integrity sha512-n+YghR059YmciANGJh9SsNWRi1YZEBVlODtmnb/12zI+4R72QZSWd+EuZ5mW6auEo/yaJXgxzwsuhvALVnm73A==
-
-vue-json-pretty@^2.0.6:
-  version "2.2.4"
-  resolved "https://registry.npmjs.org/vue-json-pretty/-/vue-json-pretty-2.2.4.tgz#4c82fa78aeb987460c727c3b31e45a58f58d9c95"
-  integrity sha512-JX80b3QDrspcH43C53CdtYeq/froApQGSV5y43bEMWFj2LGOxB96aH1VmvrFA21nD1WTP6nwfFMQqGXuS4jyFQ==
-
-vue-observe-visibility@^0.4.4:
-  version "0.4.6"
-  resolved "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-0.4.6.tgz#878cb8ebcf3078e40807af29774e97105ebd519e"
-  integrity sha512-xo0CEVdkjSjhJoDdLSvoZoQrw/H2BlzB5jrCBKGZNXN2zdZgMuZ9BKrxXDjNP2AxlcCoKc8OahI3F3r3JGLv2Q==
-
-vue-print-nb-jeecg@^1.0.10:
-  version "1.0.12"
-  resolved "https://registry.npmjs.org/vue-print-nb-jeecg/-/vue-print-nb-jeecg-1.0.12.tgz#975e1dac3da8c9736ac81b82a2b099cafe1bb3df"
-  integrity sha512-jHyWm6/TxB1iU2nHL7upQdHVdxb1SJQ9n3XKeYTaruFdbSphLo1vDtTunS2qVCjupk8lui7FlF5rxxSNr0zjZg==
-  dependencies:
-    babel-plugin-transform-runtime "^6.23.0"
-
-vue-resize@^0.4.5:
-  version "0.4.5"
-  resolved "https://registry.npmjs.org/vue-resize/-/vue-resize-0.4.5.tgz#4777a23042e3c05620d9cbda01c0b3cc5e32dcea"
-  integrity sha512-bhP7MlgJQ8TIkZJXAfDf78uJO+mEI3CaLABLjv0WNzr4CcGRGPIAItyWYnP6LsPA4Oq0WE+suidNs6dgpO4RHg==
-
-vue-router@^4.0.14:
-  version "4.2.0"
-  resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.0.tgz#558f31978a21ce3accf5122ffdf2cec34a5d2517"
-  integrity sha512-c+usESa6ZoWsm4PPdzRSyenp5A4dsUtnDJnrI03fY1IpIihA9TK3x5ffgkFDpjhLJZewsXoKURapNLFdZjuqTg==
-  dependencies:
-    "@vue/devtools-api" "^6.5.0"
-
-vue-tsc@^0.33.9:
-  version "0.33.9"
-  resolved "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.33.9.tgz#96f81eeb0f141b7f0ab73a31941034fce823785e"
-  integrity sha512-s/+r4JNsCh4e3MUdsYrjEA8IgPPDzHL5kEah/OznxIHd1XMlYiIkXGdiyU6JE5J+lzXNOKdOlNliqwwpeETQWw==
-  dependencies:
-    "@volar/vue-typescript" "0.33.9"
-
-vue-types@^3.0.0:
-  version "3.0.2"
-  resolved "https://registry.npmjs.org/vue-types/-/vue-types-3.0.2.tgz#ec16e05d412c038262fc1efa4ceb9647e7fb601d"
-  integrity sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==
-  dependencies:
-    is-plain-object "3.0.1"
-
-vue-types@^4.1.1:
-  version "4.2.1"
-  resolved "https://registry.npmjs.org/vue-types/-/vue-types-4.2.1.tgz#f8f7e5fb42d4a6acda6d92c9736b510e5534c753"
-  integrity sha512-DNQZmJuOvovLUIp0BENRkdnZHbI0V4e2mNvjAZOAXKD56YGvRchtUYOXA/XqTxdv7Ng5SJLZqRKRpAhm5NLaPQ==
-  dependencies:
-    is-plain-object "5.0.0"
-
-vue-virtual-scroller@^1.0.10:
-  version "1.1.2"
-  resolved "https://registry.npmjs.org/vue-virtual-scroller/-/vue-virtual-scroller-1.1.2.tgz#b8a6362f177abf3f2149ce1eac18013c71fe353b"
-  integrity sha512-SkUyc7QHCJFB5h1Fya7LxVizlVzOZZuFVipBGHYoTK8dwLs08bIz/tclvRApYhksaJIm/nn51inzO2UjpGJPMQ==
-  dependencies:
-    scrollparent "^2.0.1"
-    vue-observe-visibility "^0.4.4"
-    vue-resize "^0.4.5"
-
-vue@^3.2.33:
-  version "3.3.2"
-  resolved "https://registry.npmjs.org/vue/-/vue-3.3.2.tgz#407f0057a7a154d836b66f94ce81779d0c2cafbc"
-  integrity sha512-98hJcAhyDwZoOo2flAQBSPVYG/o0HA9ivIy2ktHshjE+6/q8IMQ+kvDKQzOZTFPxvnNMcGM+zS2A00xeZMA7tA==
-  dependencies:
-    "@vue/compiler-dom" "3.3.2"
-    "@vue/compiler-sfc" "3.3.2"
-    "@vue/runtime-dom" "3.3.2"
-    "@vue/server-renderer" "3.3.2"
-    "@vue/shared" "3.3.2"
-
-vuedraggable@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz#edece68adb8a4d9e06accff9dfc9040e66852270"
-  integrity sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==
-  dependencies:
-    sortablejs "1.14.0"
-
-vxe-table-plugin-antd@3.0.5:
-  version "3.0.5"
-  resolved "https://registry.npmjs.org/vxe-table-plugin-antd/-/vxe-table-plugin-antd-3.0.5.tgz#717d6472abd7a8fe94157616aa16d115b8b15b98"
-  integrity sha512-qZXIxNKSqdvfVncvVopId7byy9FYUW+ygX4vwUhPceHwsUq0eyX5SVX/LLafqfsnkq4l8+EZ4zQ5/xQ6AfZ31Q==
-
-vxe-table@4.1.0:
-  version "4.1.0"
-  resolved "https://registry.npmjs.org/vxe-table/-/vxe-table-4.1.0.tgz#6533ab768cada2e6743eaee801a5c7db54cc7581"
-  integrity sha512-FX4nc4ckkQGWG/W94z97KBIGrfZsbcni3pm+4uMzNQUcEgxgchnY78/4PrRC4ZRsHJIMv4mtNrzdfJDCTfA65g==
-
-w3c-hr-time@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
-  integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
-  dependencies:
-    browser-process-hrtime "^1.0.0"
-
-w3c-xmlserializer@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
-  integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
-  dependencies:
-    xml-name-validator "^3.0.0"
-
-walker@^1.0.7:
-  version "1.0.8"
-  resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
-  integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
-  dependencies:
-    makeerror "1.0.12"
-
-warning@^4.0.0:
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
-  integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
-  dependencies:
-    loose-envify "^1.0.0"
-
-wcwidth@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
-  integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
-  dependencies:
-    defaults "^1.0.3"
-
-webidl-conversions@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
-  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
-
-webidl-conversions@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
-  integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
-
-webidl-conversions@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
-  integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
-
-webidl-conversions@^6.1.0:
-  version "6.1.0"
-  resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
-  integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
-
-whatwg-encoding@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
-  integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
-  dependencies:
-    iconv-lite "0.4.24"
-
-whatwg-encoding@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
-  integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
-  dependencies:
-    iconv-lite "0.6.3"
-
-whatwg-mimetype@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
-  integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
-
-whatwg-url@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
-  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
-  dependencies:
-    tr46 "~0.0.3"
-    webidl-conversions "^3.0.0"
-
-whatwg-url@^7.0.0:
-  version "7.1.0"
-  resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
-  integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
-  dependencies:
-    lodash.sortby "^4.7.0"
-    tr46 "^1.0.1"
-    webidl-conversions "^4.0.2"
-
-whatwg-url@^8.0.0, whatwg-url@^8.5.0:
-  version "8.7.0"
-  resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
-  integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==
-  dependencies:
-    lodash "^4.7.0"
-    tr46 "^2.1.0"
-    webidl-conversions "^6.1.0"
-
-which-boxed-primitive@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
-  integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
-  dependencies:
-    is-bigint "^1.0.1"
-    is-boolean-object "^1.1.0"
-    is-number-object "^1.0.4"
-    is-string "^1.0.5"
-    is-symbol "^1.0.3"
-
-which-module@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409"
-  integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==
-
-which-typed-array@^1.1.9:
-  version "1.1.9"
-  resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6"
-  integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==
-  dependencies:
-    available-typed-arrays "^1.0.5"
-    call-bind "^1.0.2"
-    for-each "^0.3.3"
-    gopd "^1.0.1"
-    has-tostringtag "^1.0.0"
-    is-typed-array "^1.1.10"
-
-which@^1.2.14, which@^1.2.9, which@^1.3.1:
-  version "1.3.1"
-  resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
-  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
-  dependencies:
-    isexe "^2.0.0"
-
-which@^2.0.1:
-  version "2.0.2"
-  resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
-  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
-  dependencies:
-    isexe "^2.0.0"
-
-windicss@^3.5.6:
-  version "3.5.6"
-  resolved "https://registry.npmjs.org/windicss/-/windicss-3.5.6.tgz#30a34da76894d952a96c9a1921f2e91e13932183"
-  integrity sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA==
-
-word-wrap@^1.0.3, word-wrap@^1.2.3, word-wrap@~1.2.3:
-  version "1.2.3"
-  resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
-  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
-
-wordwrap@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-  integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
-
-workbox-background-sync@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9"
-  integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==
-  dependencies:
-    idb "^7.0.1"
-    workbox-core "6.5.4"
-
-workbox-broadcast-update@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66"
-  integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==
-  dependencies:
-    workbox-core "6.5.4"
-
-workbox-build@^6.5.3:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389"
-  integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==
-  dependencies:
-    "@apideck/better-ajv-errors" "^0.3.1"
-    "@babel/core" "^7.11.1"
-    "@babel/preset-env" "^7.11.0"
-    "@babel/runtime" "^7.11.2"
-    "@rollup/plugin-babel" "^5.2.0"
-    "@rollup/plugin-node-resolve" "^11.2.1"
-    "@rollup/plugin-replace" "^2.4.1"
-    "@surma/rollup-plugin-off-main-thread" "^2.2.3"
-    ajv "^8.6.0"
-    common-tags "^1.8.0"
-    fast-json-stable-stringify "^2.1.0"
-    fs-extra "^9.0.1"
-    glob "^7.1.6"
-    lodash "^4.17.20"
-    pretty-bytes "^5.3.0"
-    rollup "^2.43.1"
-    rollup-plugin-terser "^7.0.0"
-    source-map "^0.8.0-beta.0"
-    stringify-object "^3.3.0"
-    strip-comments "^2.0.1"
-    tempy "^0.6.0"
-    upath "^1.2.0"
-    workbox-background-sync "6.5.4"
-    workbox-broadcast-update "6.5.4"
-    workbox-cacheable-response "6.5.4"
-    workbox-core "6.5.4"
-    workbox-expiration "6.5.4"
-    workbox-google-analytics "6.5.4"
-    workbox-navigation-preload "6.5.4"
-    workbox-precaching "6.5.4"
-    workbox-range-requests "6.5.4"
-    workbox-recipes "6.5.4"
-    workbox-routing "6.5.4"
-    workbox-strategies "6.5.4"
-    workbox-streams "6.5.4"
-    workbox-sw "6.5.4"
-    workbox-window "6.5.4"
-
-workbox-cacheable-response@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137"
-  integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==
-  dependencies:
-    workbox-core "6.5.4"
-
-workbox-core@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba"
-  integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==
-
-workbox-expiration@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539"
-  integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==
-  dependencies:
-    idb "^7.0.1"
-    workbox-core "6.5.4"
-
-workbox-google-analytics@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d"
-  integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==
-  dependencies:
-    workbox-background-sync "6.5.4"
-    workbox-core "6.5.4"
-    workbox-routing "6.5.4"
-    workbox-strategies "6.5.4"
-
-workbox-navigation-preload@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212"
-  integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==
-  dependencies:
-    workbox-core "6.5.4"
-
-workbox-precaching@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72"
-  integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==
-  dependencies:
-    workbox-core "6.5.4"
-    workbox-routing "6.5.4"
-    workbox-strategies "6.5.4"
-
-workbox-range-requests@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399"
-  integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==
-  dependencies:
-    workbox-core "6.5.4"
-
-workbox-recipes@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb"
-  integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==
-  dependencies:
-    workbox-cacheable-response "6.5.4"
-    workbox-core "6.5.4"
-    workbox-expiration "6.5.4"
-    workbox-precaching "6.5.4"
-    workbox-routing "6.5.4"
-    workbox-strategies "6.5.4"
-
-workbox-routing@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da"
-  integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==
-  dependencies:
-    workbox-core "6.5.4"
-
-workbox-strategies@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d"
-  integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==
-  dependencies:
-    workbox-core "6.5.4"
-
-workbox-streams@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69"
-  integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==
-  dependencies:
-    workbox-core "6.5.4"
-    workbox-routing "6.5.4"
-
-workbox-sw@6.5.4:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736"
-  integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==
-
-workbox-window@6.5.4, workbox-window@^6.5.3:
-  version "6.5.4"
-  resolved "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91"
-  integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==
-  dependencies:
-    "@types/trusted-types" "^2.0.2"
-    workbox-core "6.5.4"
-
-wrap-ansi@^6.2.0:
-  version "6.2.0"
-  resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
-  integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
-  dependencies:
-    ansi-styles "^4.0.0"
-    string-width "^4.1.0"
-    strip-ansi "^6.0.0"
-
-wrap-ansi@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
-  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
-  dependencies:
-    ansi-styles "^4.0.0"
-    string-width "^4.1.0"
-    strip-ansi "^6.0.0"
-
-wrappy@1:
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-
-write-file-atomic@^3.0.0:
-  version "3.0.3"
-  resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
-  integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
-  dependencies:
-    imurmurhash "^0.1.4"
-    is-typedarray "^1.0.0"
-    signal-exit "^3.0.2"
-    typedarray-to-buffer "^3.1.5"
-
-write-file-atomic@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd"
-  integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==
-  dependencies:
-    imurmurhash "^0.1.4"
-    signal-exit "^3.0.7"
-
-ws@^7.4.6:
-  version "7.5.9"
-  resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
-  integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
-
-xe-utils@^3.3.1:
-  version "3.5.7"
-  resolved "https://registry.npmjs.org/xe-utils/-/xe-utils-3.5.7.tgz#2c885852dfadd5c8beeffdc1f884f8ceb962c669"
-  integrity sha512-3H+fDBKBR2wLJgyA7k9C/w1Xljx6Maml5ukV0WDY06HjYyGs2FEz6XhcwRCLIDXX4pBP3Gu0nX9DbCeuuRA2Ew==
-
-xml-name-validator@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
-  integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
-
-xmlchars@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
-  integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
-
-xss@^1.0.13:
-  version "1.0.14"
-  resolved "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694"
-  integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==
-  dependencies:
-    commander "^2.20.3"
-    cssfilter "0.0.10"
-
-xtend@^4.0.0, xtend@~4.0.1:
-  version "4.0.2"
-  resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
-  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
-y18n@^4.0.0:
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
-  integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
-
-y18n@^5.0.5:
-  version "5.0.8"
-  resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
-  integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
-
-yallist@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
-  integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==
-
-yallist@^3.0.2:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
-  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-
-yallist@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
-  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-
-yaml@^1.10.0, yaml@^1.10.2:
-  version "1.10.2"
-  resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
-  integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
-
-yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3:
-  version "20.2.9"
-  resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
-  integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
-
-yargs-parser@^18.1.2:
-  version "18.1.3"
-  resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
-  integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
-  dependencies:
-    camelcase "^5.0.0"
-    decamelize "^1.2.0"
-
-yargs-parser@^21.1.1:
-  version "21.1.1"
-  resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
-  integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
-
-yargs@^15.3.1:
-  version "15.4.1"
-  resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
-  integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
-  dependencies:
-    cliui "^6.0.0"
-    decamelize "^1.2.0"
-    find-up "^4.1.0"
-    get-caller-file "^2.0.1"
-    require-directory "^2.1.1"
-    require-main-filename "^2.0.0"
-    set-blocking "^2.0.0"
-    string-width "^4.2.0"
-    which-module "^2.0.0"
-    y18n "^4.0.0"
-    yargs-parser "^18.1.2"
-
-yargs@^16.2.0:
-  version "16.2.0"
-  resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
-  integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
-  dependencies:
-    cliui "^7.0.2"
-    escalade "^3.1.1"
-    get-caller-file "^2.0.5"
-    require-directory "^2.1.1"
-    string-width "^4.2.0"
-    y18n "^5.0.5"
-    yargs-parser "^20.2.2"
-
-yargs@^17.0.0, yargs@^17.5.1:
-  version "17.7.2"
-  resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
-  integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
-  dependencies:
-    cliui "^8.0.1"
-    escalade "^3.1.1"
-    get-caller-file "^2.0.5"
-    require-directory "^2.1.1"
-    string-width "^4.2.3"
-    y18n "^5.0.5"
-    yargs-parser "^21.1.1"
-
-yauzl@^2.4.2:
-  version "2.10.0"
-  resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
-  integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
-  dependencies:
-    buffer-crc32 "~0.2.3"
-    fd-slicer "~1.1.0"
-
-yn@3.1.1:
-  version "3.1.1"
-  resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
-  integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
-
-yocto-queue@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
-  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
-
-zrender@5.4.3:
-  version "5.4.3"
-  resolved "https://registry.npmjs.org/zrender/-/zrender-5.4.3.tgz#41ffaf835f3a3210224abd9d6964b48ff01e79f5"
-  integrity sha512-DRUM4ZLnoaT0PBVvGBDO9oWIDBKFdAVieNWxWwK0niYzJCMwGchRk21/hsE+RKkIveH3XHCyvXcJDkgLVvfizQ==
-  dependencies:
-    tslib "2.3.0"

--
Gitblit v1.9.3